From d07893c0d8f42c9c851609873d1662dce24fa5e1 Mon Sep 17 00:00:00 2001 From: getlarge Date: Thu, 2 Apr 2020 21:07:07 +0200 Subject: [PATCH 1/3] convert to Typescript grapqlProtocol files ; fix /add engine types --- src/engine/attribute/Attribute.ts | 3 +- src/engine/configuration/Configuration.ts | 8 +- src/engine/cursor.spec.ts | 80 +++++++++++-------- src/engine/datatype/DataType.spec.ts | 6 +- src/engine/datatype/DataType.ts | 4 +- src/engine/datatype/DataTypeEnum.spec.ts | 42 +++++----- src/engine/datatype/DataTypeState.spec.ts | 26 +++--- src/engine/datatype/DataTypeUser.spec.ts | 2 + src/engine/datatype/ListDataType.spec.ts | 12 +-- src/engine/datatype/ListDataType.ts | 3 +- src/engine/datatype/ObjectDataType.spec.ts | 48 +++++------ src/engine/datatype/ObjectDataType.ts | 3 +- src/engine/protocol/ProtocolConfiguration.ts | 2 + src/engine/protocol/ProtocolType.ts | 6 +- src/engine/storage/StorageConfiguration.ts | 2 + ...{ProtocolGraphQL.js => ProtocolGraphQL.ts} | 25 +++--- ...ion.js => ProtocolGraphQLConfiguration.ts} | 22 ++--- .../{action.spec.js => action.spec.ts} | 0 src/graphqlProtocol/action.ts | 9 ++- .../{connection.js => connection.ts} | 50 ++++++++---- .../{dataTypes.spec.js => dataTypes.spec.ts} | 60 +++++++++----- .../{dataTypes.js => dataTypes.ts} | 0 .../{filter.spec.js => filter.spec.ts} | 0 src/graphqlProtocol/filter.ts | 16 ++-- .../{generator.spec.js => generator.spec.ts} | 0 .../{generator.js => generator.ts} | 64 +++++++++------ .../{graphRegistry.js => graphRegistry.ts} | 0 src/graphqlProtocol/{helper.js => helper.ts} | 8 +- .../{io.spec.js => io.spec.ts} | 16 +++- src/graphqlProtocol/io.ts | 37 +++++---- .../{mutation.js => mutation.ts} | 69 +++++++--------- ...nstants.js => protocolGraphqlConstants.ts} | 0 src/graphqlProtocol/{query.js => query.ts} | 11 +-- .../{resolver.js => resolver.ts} | 21 +++-- src/graphqlProtocol/{sort.js => sort.ts} | 3 +- .../{util.spec.js => util.spec.ts} | 0 src/graphqlProtocol/{util.js => util.ts} | 0 37 files changed, 386 insertions(+), 272 deletions(-) rename src/graphqlProtocol/{ProtocolGraphQL.js => ProtocolGraphQL.ts} (97%) rename src/graphqlProtocol/{ProtocolGraphQLConfiguration.js => ProtocolGraphQLConfiguration.ts} (93%) rename src/graphqlProtocol/{action.spec.js => action.spec.ts} (100%) rename src/graphqlProtocol/{connection.js => connection.ts} (89%) rename src/graphqlProtocol/{dataTypes.spec.js => dataTypes.spec.ts} (55%) rename src/graphqlProtocol/{dataTypes.js => dataTypes.ts} (100%) rename src/graphqlProtocol/{filter.spec.js => filter.spec.ts} (100%) rename src/graphqlProtocol/{generator.spec.js => generator.spec.ts} (100%) rename src/graphqlProtocol/{generator.js => generator.ts} (88%) rename src/graphqlProtocol/{graphRegistry.js => graphRegistry.ts} (100%) rename src/graphqlProtocol/{helper.js => helper.ts} (92%) rename src/graphqlProtocol/{io.spec.js => io.spec.ts} (92%) rename src/graphqlProtocol/{mutation.js => mutation.ts} (93%) rename src/graphqlProtocol/{protocolGraphqlConstants.js => protocolGraphqlConstants.ts} (100%) rename src/graphqlProtocol/{query.js => query.ts} (93%) rename src/graphqlProtocol/{resolver.js => resolver.ts} (95%) rename src/graphqlProtocol/{sort.js => sort.ts} (94%) rename src/graphqlProtocol/{util.spec.js => util.spec.ts} (100%) rename src/graphqlProtocol/{util.js => util.ts} (100%) diff --git a/src/engine/attribute/Attribute.ts b/src/engine/attribute/Attribute.ts index 2d81debf..7f37ca8f 100644 --- a/src/engine/attribute/Attribute.ts +++ b/src/engine/attribute/Attribute.ts @@ -115,7 +115,8 @@ export type Attribute = AttributeBase & { /** * name of the attribute */ - name: string; + // name: string; + name?: string; /** * map of target attributes when referencing another entity diff --git a/src/engine/configuration/Configuration.ts b/src/engine/configuration/Configuration.ts index eeaa4ec7..6d49af02 100644 --- a/src/engine/configuration/Configuration.ts +++ b/src/engine/configuration/Configuration.ts @@ -49,7 +49,7 @@ export class Configuration { } } - setLanguages(languages): void { + setLanguages(languages: string[]): void { passOrThrow( isArray(languages, true), () => 'Configuration.setLanguages() expects a list of language iso codes', @@ -79,7 +79,7 @@ export class Configuration { return this.getLanguages()[0]; } - setSchema(schema): void { + setSchema(schema: Schema): void { passOrThrow(isSchema(schema), () => 'Configuration expects a valid schema'); this.schema = schema; @@ -91,7 +91,7 @@ export class Configuration { return this.schema; } - setProtocolConfiguration(protocolConfiguration): void { + setProtocolConfiguration(protocolConfiguration: ProtocolConfiguration): void { passOrThrow( isProtocolConfiguration(protocolConfiguration), () => 'Configuration expects a valid protocolConfiguration', @@ -111,7 +111,7 @@ export class Configuration { return this.protocolConfiguration; } - setStorageConfiguration(storageConfiguration): void { + setStorageConfiguration(storageConfiguration: StorageConfiguration): void { passOrThrow( isStorageConfiguration(storageConfiguration), () => 'Configuration expects a valid storageConfiguration', diff --git a/src/engine/cursor.spec.ts b/src/engine/cursor.spec.ts index d9672de5..1ffe635b 100644 --- a/src/engine/cursor.spec.ts +++ b/src/engine/cursor.spec.ts @@ -35,15 +35,15 @@ describe('cursor', () => { indexes: [ new Index({ type: INDEX_UNIQUE, - attributes: [ 'loginName' ], + attributes: ['loginName'], }), new Index({ type: INDEX_UNIQUE, - attributes: [ 'firstName', 'lastName' ], + attributes: ['firstName', 'lastName'], }), new Index({ type: INDEX_UNIQUE, - attributes: [ 'email' ], + attributes: ['email'], }), ], }); @@ -58,7 +58,7 @@ describe('cursor', () => { it('should throw if incompatible cursor provided', () => { function fn() { - processCursor({}, { a: 'b' }); + processCursor({} as Entity, { a: 'b' as any }); } expect(fn).toThrowErrorMatchingSnapshot(); @@ -66,15 +66,15 @@ describe('cursor', () => { it('should throw if cursor is malformed', () => { function fn1() { - processCursor(SomeEntity, { SomeEntity: [ 'b' ] }, []); + processCursor(SomeEntity, { SomeEntity: ['b' as any] }, []); } function fn2() { - processCursor(SomeEntity, { SomeEntity: [ [ {}, {}, {} ] ] }, []); + processCursor(SomeEntity, { SomeEntity: [[{}, {}, {}] as any] }, []); } function fn3() { - processCursor(SomeEntity, { SomeEntity: [ {} ] }, []); + processCursor(SomeEntity, { SomeEntity: [{} as any] }, []); } expect(fn1).toThrowErrorMatchingSnapshot(); @@ -87,7 +87,7 @@ describe('cursor', () => { processCursor( SomeEntity, { - SomeEntity: [ [ 'iDontKnow', 123 ] ], + SomeEntity: [['iDontKnow', 123]], }, [], ); @@ -99,7 +99,7 @@ describe('cursor', () => { it('should throw if an attribute is used which the data set is not sorted by', () => { function fn1() { processCursor(SomeEntity, { - SomeEntity: [ [ 'loginName', 123 ] ], + SomeEntity: [['loginName', 123]], }); } @@ -107,7 +107,7 @@ describe('cursor', () => { processCursor( SomeEntity, { - SomeEntity: [ [ 'loginName', 123 ] ], + SomeEntity: [['loginName', 123]], }, [ { @@ -122,7 +122,10 @@ describe('cursor', () => { processCursor( SomeEntity, { - SomeEntity: [ [ 'loginName', 123 ], [ 'email', 123 ] ], + SomeEntity: [ + ['loginName', 123], + ['email', 123], + ], }, [ { @@ -143,7 +146,7 @@ describe('cursor', () => { processCursor( SomeEntity, { - SomeEntity: [ [ 'firstName', 'John' ] ], + SomeEntity: [['firstName', 'John']], }, [ { @@ -158,7 +161,10 @@ describe('cursor', () => { processCursor( SomeEntity, { - SomeEntity: [ [ 'firstName', 'John' ], [ 'lastName', 'Snow' ] ], + SomeEntity: [ + ['firstName', 'John'], + ['lastName', 'Snow'], + ], }, [ { @@ -182,7 +188,7 @@ describe('cursor', () => { const cursor1 = processCursor( SomeEntity, { - SomeEntity: [ [ 'loginName', 'user1' ] ], + SomeEntity: [['loginName', 'user1']], }, [ { @@ -201,7 +207,7 @@ describe('cursor', () => { const cursor2 = processCursor( SomeEntity, { - SomeEntity: [ [ 'loginName', 123 ] ], + SomeEntity: [['loginName', 123]], }, [ { @@ -221,8 +227,8 @@ describe('cursor', () => { SomeEntity, { SomeEntity: [ - [ 'loginName', 'user1' ], - [ 'email', 'user1@example.com' ], + ['loginName', 'user1'], + ['email', 'user1@example.com'], ], }, [ @@ -250,7 +256,10 @@ describe('cursor', () => { it('when using attributes that are not all defined as unique', () => { const row1: CursorType = { - SomeEntity: [ [ 'firstName', 'John' ], [ 'id', 1123 ] ], + SomeEntity: [ + ['firstName', 'John'], + ['id', 1123], + ], }; const cursor1 = processCursor(SomeEntity, row1, [ @@ -347,9 +356,9 @@ describe('cursor', () => { const row2: CursorType = { SomeEntity: [ - [ 'firstName', 'John' ], - [ 'lastName', 'Snow' ], - [ 'id', 1123 ], + ['firstName', 'John'], + ['lastName', 'Snow'], + ['id', 1123], ], }; @@ -409,10 +418,10 @@ describe('cursor', () => { const row3: CursorType = { SomeEntity: [ - [ 'firstName', 'John' ], - [ 'email', 'john@example.com' ], - [ 'lastName', 'Snow' ], - [ 'id', 1123 ], + ['firstName', 'John'], + ['email', 'john@example.com'], + ['lastName', 'Snow'], + ['id', 1123], ], }; @@ -460,7 +469,7 @@ describe('cursor', () => { const cursor0 = processCursor( SomeEntity, { - SomeEntity: [ [ 'loginName', 123 ] ], + SomeEntity: [['loginName', 123]], }, [ { @@ -478,7 +487,10 @@ describe('cursor', () => { }; const row1: CursorType = { - SomeEntity: [ [ 'firstName', 'John' ], [ 'id', 1123 ] ], + SomeEntity: [ + ['firstName', 'John'], + ['id', 1123], + ], }; const cursor1 = processCursor( @@ -595,9 +607,9 @@ describe('cursor', () => { const row2: CursorType = { SomeEntity: [ - [ 'firstName', 'John' ], - [ 'lastName', 'Snow' ], - [ 'id', 1123 ], + ['firstName', 'John'], + ['lastName', 'Snow'], + ['id', 1123], ], }; @@ -667,10 +679,10 @@ describe('cursor', () => { const row3: CursorType = { SomeEntity: [ - [ 'firstName', 'John' ], - [ 'email', 'john@example.com' ], - [ 'lastName', 'Snow' ], - [ 'id', 1123 ], + ['firstName', 'John'], + ['email', 'john@example.com'], + ['lastName', 'Snow'], + ['id', 1123], ], }; diff --git a/src/engine/datatype/DataType.spec.ts b/src/engine/datatype/DataType.spec.ts index b4ad2784..6ef0bdc9 100644 --- a/src/engine/datatype/DataType.spec.ts +++ b/src/engine/datatype/DataType.spec.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ + import { DataType, DataTypeSetup, isDataType } from './DataType'; import { passOrThrow } from '../util'; @@ -16,9 +18,9 @@ describe('DataType', () => { it('should have a description', () => { function fn() { // eslint-disable-next-line no-new - new DataType({ + new DataType({ name: 'example', - }); + } as DataTypeSetup); } expect(fn).toThrowErrorMatchingSnapshot(); diff --git a/src/engine/datatype/DataType.ts b/src/engine/datatype/DataType.ts index 2607a396..70423780 100644 --- a/src/engine/datatype/DataType.ts +++ b/src/engine/datatype/DataType.ts @@ -2,8 +2,8 @@ import { passOrThrow, isFunction } from '../util'; import { ComplexDataType } from './ComplexDataType'; export type DataTypeSetup = { - name: string; - description: string; + name?: string; + description?: string; mock?: () => any; validate?: () => any; enforceRequired?: boolean; diff --git a/src/engine/datatype/DataTypeEnum.spec.ts b/src/engine/datatype/DataTypeEnum.spec.ts index 2abe2d15..d3258878 100644 --- a/src/engine/datatype/DataTypeEnum.spec.ts +++ b/src/engine/datatype/DataTypeEnum.spec.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ + import { DataTypeEnum, DataTypeEnumSetupType, @@ -12,19 +14,19 @@ describe('DataTypeEnum', () => { fn = () => { // eslint-disable-next-line no-new - new DataTypeEnum({ + new DataTypeEnum({ name: 'something', - }); + } as DataTypeEnumSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); fn = () => { // eslint-disable-next-line no-new - new DataTypeEnum({ + new DataTypeEnum({ name: 'something', values: {}, - }); + } as DataTypeEnumSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); @@ -35,38 +37,38 @@ describe('DataTypeEnum', () => { fn = () => { // eslint-disable-next-line no-new - new DataTypeEnum({ + new DataTypeEnum({ name: 'lorem', values: { '7': 8, }, - }); + } as DataTypeEnumSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); fn = () => { // eslint-disable-next-line no-new - new DataTypeEnum({ + new DataTypeEnum({ values: { ' abc ': 123, }, name: 'test', - }); + } as DataTypeEnumSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); fn = () => { // eslint-disable-next-line no-new - new DataTypeEnum({ + new DataTypeEnum({ name: 'another', values: { abc: 1, def: 2, 'hello-there': 3, }, - }); + } as DataTypeEnumSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); @@ -75,11 +77,11 @@ describe('DataTypeEnum', () => { it('should have a name', () => { function fn() { // eslint-disable-next-line no-new - new DataTypeEnum({ + new DataTypeEnum({ values: { item: 1, }, - }); + } as any); } expect(fn).toThrowErrorMatchingSnapshot(); @@ -99,14 +101,14 @@ describe('DataTypeEnum', () => { }); it('should have a fallback description', () => { - const dataType = new DataTypeEnum({ + const dataType = new DataTypeEnum({ name: 'example', values: { ACTION: 1, COMEDY: 2, DRAMA: 3, }, - }); + } as DataTypeEnumSetupType); expect(dataType.description).toBe('Enumeration set: ACTION, COMEDY, DRAMA'); }); @@ -126,10 +128,10 @@ describe('DataTypeEnum', () => { uniqueIds.push(valueId); }); - const dataType = new DataTypeEnum({ + const dataType = new DataTypeEnum({ name: 'example', values, - }); + } as DataTypeEnumSetupType); const randomValue1 = dataType.mock(); const randomValue2 = dataType.mock(); @@ -142,23 +144,23 @@ describe('DataTypeEnum', () => { describe('isDataTypeEnum', () => { it('should recognize objects of type DataTypeEnum', () => { - const enum1 = new DataTypeEnum({ + const enum1 = new DataTypeEnum({ name: 'enum1', values: { ACTION: 1, COMEDY: 2, DRAMA: 3, }, - }); + } as DataTypeEnumSetupType); - const enum2 = new DataTypeEnum({ + const enum2 = new DataTypeEnum({ name: 'enum2', values: { APPLE: 10, PEAR: 20, CHERRY: 30, }, - }); + } as DataTypeEnumSetupType); function fn() { passOrThrow( diff --git a/src/engine/datatype/DataTypeState.spec.ts b/src/engine/datatype/DataTypeState.spec.ts index cf0042e8..693e68b0 100644 --- a/src/engine/datatype/DataTypeState.spec.ts +++ b/src/engine/datatype/DataTypeState.spec.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ + import { DataTypeState, DataTypeStateSetupType, @@ -12,19 +14,19 @@ describe('DataTypeState', () => { fn = () => { // eslint-disable-next-line no-new - new DataTypeState({ + new DataTypeState({ name: 'something', - }); + } as DataTypeStateSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); fn = () => { // eslint-disable-next-line no-new - new DataTypeState({ + new DataTypeState({ name: 'something', states: {}, - }); + } as DataTypeStateSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); @@ -35,38 +37,38 @@ describe('DataTypeState', () => { fn = () => { // eslint-disable-next-line no-new - new DataTypeState({ + new DataTypeState({ name: 'progress', states: { '6': 1, }, - }); + } as DataTypeStateSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); fn = () => { // eslint-disable-next-line no-new - new DataTypeState({ + new DataTypeState({ states: { ' abc ': 123, }, name: 'test', - }); + } as DataTypeStateSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); fn = () => { // eslint-disable-next-line no-new - new DataTypeState({ + new DataTypeState({ name: 'another', states: { abc: 1, def: 2, 'hello-there': 3, }, - }); + } as DataTypeStateSetupType); }; expect(fn).toThrowErrorMatchingSnapshot(); @@ -75,11 +77,11 @@ describe('DataTypeState', () => { it('should have a name', () => { function fn() { // eslint-disable-next-line no-new - new DataTypeState({ + new DataTypeState({ states: { item: 1, }, - }); + } as any); } expect(fn).toThrowErrorMatchingSnapshot(); diff --git a/src/engine/datatype/DataTypeUser.spec.ts b/src/engine/datatype/DataTypeUser.spec.ts index a2245350..0dfdbdd9 100644 --- a/src/engine/datatype/DataTypeUser.spec.ts +++ b/src/engine/datatype/DataTypeUser.spec.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ + import { DataTypeUser, isDataTypeUser } from './DataTypeUser'; import { passOrThrow } from '../util'; diff --git a/src/engine/datatype/ListDataType.spec.ts b/src/engine/datatype/ListDataType.spec.ts index 37c232ad..7d89de74 100644 --- a/src/engine/datatype/ListDataType.spec.ts +++ b/src/engine/datatype/ListDataType.spec.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ + import { ListDataType, ListDataTypeSetupType, @@ -20,9 +22,9 @@ describe('ListDataType', () => { it('should have a description', () => { function fn() { // eslint-disable-next-line no-new - new ListDataType({ + new ListDataType({ name: 'example', - }); + } as ListDataTypeSetupType); } expect(fn).toThrowErrorMatchingSnapshot(); @@ -31,10 +33,10 @@ describe('ListDataType', () => { it('should have an item type', () => { function fn() { // eslint-disable-next-line no-new - new ListDataType({ + new ListDataType({ name: 'Example', description: 'Just some description', - }); + } as ListDataTypeSetupType); } expect(fn).toThrowErrorMatchingSnapshot(); @@ -89,7 +91,7 @@ describe('ListDataType', () => { new ListDataType({ name: 'Example', description: 'Just some description', - itemType: [ 2, 7, 13 ], + itemType: [2, 7, 13], }); } diff --git a/src/engine/datatype/ListDataType.ts b/src/engine/datatype/ListDataType.ts index 2d1569d9..5c999bea 100644 --- a/src/engine/datatype/ListDataType.ts +++ b/src/engine/datatype/ListDataType.ts @@ -140,7 +140,8 @@ export const isListDataType = (obj: any): boolean => { }; export const buildListDataType = (obj: { - itemType: Entity | ComplexDataType | DataTypeFunction; + itemType: any; + // itemType: Entity | ComplexDataType | DataTypeFunction; }): Function => { return ({ name, description }): ListDataType => new ListDataType({ diff --git a/src/engine/datatype/ObjectDataType.spec.ts b/src/engine/datatype/ObjectDataType.spec.ts index 93325afd..9d8fd425 100644 --- a/src/engine/datatype/ObjectDataType.spec.ts +++ b/src/engine/datatype/ObjectDataType.spec.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ + import { ObjectDataType, ObjectDataTypeSetupType, @@ -20,9 +22,9 @@ describe('ObjectDataType', () => { it('should have a description', () => { function fn() { // eslint-disable-next-line no-new - new ObjectDataType({ + new ObjectDataType({ name: 'example', - }); + } as ObjectDataTypeSetupType); } expect(fn).toThrowErrorMatchingSnapshot(); @@ -31,21 +33,21 @@ describe('ObjectDataType', () => { it('should have a map of attributes', () => { function fn() { // eslint-disable-next-line no-new - new ObjectDataType({ + new ObjectDataType({ name: 'Example', description: 'Just some description', - }); + } as ObjectDataTypeSetupType); } expect(fn).toThrowErrorMatchingSnapshot(); }); it("should return it's name", () => { - const objectDataType = new ObjectDataType({ + const objectDataType = new ObjectDataType({ name: 'someObjectDataTypeName', description: 'Just some description', attributes: {}, - }); + } as ObjectDataTypeSetupType); expect(objectDataType.name).toBe('someObjectDataTypeName'); expect(String(objectDataType)).toBe('someObjectDataTypeName'); @@ -54,11 +56,11 @@ describe('ObjectDataType', () => { it('should accept only maps or functions as attributes definition', () => { function fn() { // eslint-disable-next-line no-new - new ObjectDataType({ + new ObjectDataType({ name: 'Example', description: 'Just some description', - attributes: [ 2, 7, 13 ], - }); + attributes: [2, 7, 13], + } as any); } expect(fn).toThrowErrorMatchingSnapshot(); @@ -66,13 +68,13 @@ describe('ObjectDataType', () => { it('should reject non-map results of attribute definition functions', () => { function fn() { - const objectDataType = new ObjectDataType({ + const objectDataType = new ObjectDataType({ name: 'Example', description: 'Just some description', attributes: () => { - return [ 2, 7, 13 ]; + return [2, 7, 13] as any; }, - }); + } as ObjectDataTypeSetupType); objectDataType.getAttributes(); } @@ -82,11 +84,11 @@ describe('ObjectDataType', () => { it('should reject empty attribute maps', () => { function fn() { - const objectDataType = new ObjectDataType({ + const objectDataType = new ObjectDataType({ name: 'Example', description: 'Just some description', attributes: {}, - }); + } as ObjectDataTypeSetupType); objectDataType.getAttributes(); } @@ -100,9 +102,9 @@ describe('ObjectDataType', () => { name: 'Example', description: 'Just some description', attributes: { - name: { + name: { type: DataTypeString, - }, + } as any, }, }); @@ -119,10 +121,10 @@ describe('ObjectDataType', () => { description: 'Just some description', attributes: { name: { - type: {}, + type: {} as any, description: 'Just some description', }, - }, + } as any, }); objectDataType.getAttributes(); @@ -140,8 +142,8 @@ describe('ObjectDataType', () => { name: { type: DataTypeString, description: 'Just some description', - resolve: 123456, - }, + resolve: 123456 as any, + } as any, }, }); @@ -160,8 +162,8 @@ describe('ObjectDataType', () => { name: { type: DataTypeString, description: 'Just some description', - defaultValue: 123456, - }, + defaultValue: 123456 as any, + } as any, }, }); @@ -226,7 +228,7 @@ describe('ObjectDataType', () => { expect(attributes.id.type).toBe(DataTypeID); expect(attributes.name.type).toBe(DataTypeString); - const attributesNested = (attributes.nested.type).getAttributes(); + const attributesNested = (attributes.nested.type as Entity).getAttributes(); expect(attributesNested.randomInput.type).toBe(DataTypeString); }); diff --git a/src/engine/datatype/ObjectDataType.ts b/src/engine/datatype/ObjectDataType.ts index b27490dc..700f1d27 100644 --- a/src/engine/datatype/ObjectDataType.ts +++ b/src/engine/datatype/ObjectDataType.ts @@ -167,7 +167,8 @@ export const isObjectDataType = (obj: any): boolean => { }; export const buildObjectDataType = (obj: { - attributes: AttributesMap | AttributesMapGenerator; + // attributes: AttributesMap | AttributesMapGenerator | AttributeBase; + attributes: any; }): Function => { return ({ name, description }): ObjectDataType => new ObjectDataType({ diff --git a/src/engine/protocol/ProtocolConfiguration.ts b/src/engine/protocol/ProtocolConfiguration.ts index f71153c1..342662c0 100644 --- a/src/engine/protocol/ProtocolConfiguration.ts +++ b/src/engine/protocol/ProtocolConfiguration.ts @@ -1,4 +1,5 @@ import { passOrThrow, isString, isArray } from '../util'; +import { Configuration } from '../configuration/Configuration'; export type ProtocolConfigurationSetup = { features?: string[]; @@ -6,6 +7,7 @@ export type ProtocolConfigurationSetup = { export class ProtocolConfiguration { features: { [key: string]: boolean }; + getParentConfiguration: () => Configuration; constructor( setup: ProtocolConfigurationSetup = {} as ProtocolConfigurationSetup, diff --git a/src/engine/protocol/ProtocolType.ts b/src/engine/protocol/ProtocolType.ts index b938db4a..a6c221e2 100644 --- a/src/engine/protocol/ProtocolType.ts +++ b/src/engine/protocol/ProtocolType.ts @@ -21,6 +21,7 @@ export type ProtocolTypeSetup = { // asInput?: boolean; // } +// how to properly define this type ? export type ProtocolDataType = { name: string | Function; }; @@ -94,7 +95,8 @@ export class ProtocolType { addDynamicDataTypeMap( schemaDataTypeDetector: Function, - protocolDataType: ProtocolType, + protocolDataType: any, + // protocolDataType: ProtocolType, ): void { passOrThrow( isFunction(schemaDataTypeDetector), @@ -122,7 +124,7 @@ export class ProtocolType { schemaDataType: DataType | DataTypeFunction, sourceName?: string, asInput?: boolean, - ): ProtocolDataType { + ): any { const foundDynamicDataType = this._dynamicDataTypeMap.find( ({ schemaDataTypeDetector }) => schemaDataTypeDetector(schemaDataType), ); diff --git a/src/engine/storage/StorageConfiguration.ts b/src/engine/storage/StorageConfiguration.ts index af13a6cb..e1ee6566 100644 --- a/src/engine/storage/StorageConfiguration.ts +++ b/src/engine/storage/StorageConfiguration.ts @@ -1,4 +1,5 @@ import { passOrThrow } from '../util'; +import { Configuration } from '../configuration/Configuration'; export type StorageConfigurationSetup = { // todo improve typings ? @@ -13,6 +14,7 @@ export class StorageConfiguration { storageInstance: any; storageModels: any; connectionConfig: any; + getParentConfiguration: () => Configuration; constructor( setup: StorageConfigurationSetup = {} as StorageConfigurationSetup, diff --git a/src/graphqlProtocol/ProtocolGraphQL.js b/src/graphqlProtocol/ProtocolGraphQL.ts similarity index 97% rename from src/graphqlProtocol/ProtocolGraphQL.js rename to src/graphqlProtocol/ProtocolGraphQL.ts index 2f0c5dec..19985913 100644 --- a/src/graphqlProtocol/ProtocolGraphQL.js +++ b/src/graphqlProtocol/ProtocolGraphQL.ts @@ -1,3 +1,15 @@ +import { + GraphQLScalarType, + GraphQLID, + GraphQLInt, + GraphQLInputObjectType, + GraphQLObjectType, + GraphQLFloat, + GraphQLString, + GraphQLBoolean, + GraphQLEnumType, +} from 'graphql'; + import { ProtocolType } from '../engine/protocol/ProtocolType'; import { DataTypeID, @@ -16,15 +28,6 @@ import { DataTypeI18n, } from '../engine/datatype/dataTypes'; -import { - GraphQLScalarType, - GraphQLID, - GraphQLInt, - GraphQLFloat, - GraphQLString, - GraphQLBoolean, - GraphQLEnumType, -} from 'graphql'; import { isDataTypeState } from '../engine/datatype/DataTypeState'; import { isDataTypeEnum } from '../engine/datatype/DataTypeEnum'; import { isObjectDataType } from '../engine/datatype/ObjectDataType'; @@ -182,7 +185,7 @@ ProtocolGraphQL.addDynamicDataTypeMap( const dataInputType = generateDataInput( `${sourceName}-${name}`, params, - ); + ) as GraphQLInputObjectType; dataTypesRegistry.object[ uniqueName ] = dataInputType.getFields().wrapped.type; @@ -196,7 +199,7 @@ ProtocolGraphQL.addDynamicDataTypeMap( `${sourceName}-${name}`, params, graphRegistry, - ); + ) as GraphQLObjectType; dataTypesRegistry.object[ uniqueName ] = dataOutputType.getFields().wrapped.type; diff --git a/src/graphqlProtocol/ProtocolGraphQLConfiguration.js b/src/graphqlProtocol/ProtocolGraphQLConfiguration.ts similarity index 93% rename from src/graphqlProtocol/ProtocolGraphQLConfiguration.js rename to src/graphqlProtocol/ProtocolGraphQLConfiguration.ts index c0b97824..32d72a9d 100644 --- a/src/graphqlProtocol/ProtocolGraphQLConfiguration.js +++ b/src/graphqlProtocol/ProtocolGraphQLConfiguration.ts @@ -128,12 +128,12 @@ export class ProtocolGraphQLConfiguration extends ProtocolConfiguration { ); } - generateUniquenessAttributesName(entity, attributes) { + generateUniquenessAttributesName(_entity, attributes) { return generateTypeName(attributes.join('-and-')); } generateUniquenessAttributesFieldName( - entity, + _entity, attribute, uniquenessAttributesName, ) { @@ -201,15 +201,19 @@ export class ProtocolGraphQLConfiguration extends ProtocolConfiguration { ); } - generateInputTypeName(baseName) { + generateInputTypeName(baseName: string) { return generateTypeNamePascalCase(`${baseName}-input`); } - generateDataOutPutTypeName(baseName) { + generateDataOutPutTypeName(baseName: string) { return generateTypeNamePascalCase(`${baseName}-data-output`); } - generateNestedDataOutPutTypeName(baseName, nestedParamName, level) { + generateNestedDataOutPutTypeName( + baseName: string, + nestedParamName: string, + level?: number, + ) { const levelStr = level > 1 ? `L${level}` : ''; return generateTypeNamePascalCase( @@ -217,11 +221,11 @@ export class ProtocolGraphQLConfiguration extends ProtocolConfiguration { ); } - generateOutPutTypeName(baseName) { + generateOutPutTypeName(baseName: string) { return generateTypeNamePascalCase(`${baseName}-output`); } - generateSortKeyName(attribute, ascending) { + generateSortKeyName(attribute: any, ascending?: boolean) { const direction = ascending ? 'ASC' : 'DESC'; return `${generateTypeNameUpperCase(attribute.name)}_${direction}`; @@ -254,12 +258,12 @@ export class ProtocolGraphQLConfiguration extends ProtocolConfiguration { return generateTypeNamePascalCase(`${typeName}-edge`); } - generateConnectionTypeName(entity) { + generateConnectionTypeName(entity): string { const typeName = this.generateEntityTypeName(entity); return generateTypeNamePascalCase(`${typeName}-connection`); } } -export const isProtocolGraphQLConfiguration = obj => { +export const isProtocolGraphQLConfiguration = (obj: any): boolean => { return obj instanceof ProtocolGraphQLConfiguration; }; diff --git a/src/graphqlProtocol/action.spec.js b/src/graphqlProtocol/action.spec.ts similarity index 100% rename from src/graphqlProtocol/action.spec.js rename to src/graphqlProtocol/action.spec.ts diff --git a/src/graphqlProtocol/action.ts b/src/graphqlProtocol/action.ts index 6781901b..c8f75afd 100644 --- a/src/graphqlProtocol/action.ts +++ b/src/graphqlProtocol/action.ts @@ -9,6 +9,7 @@ import { } from './io'; import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; import { isObjectDataType } from '../engine/datatype/ObjectDataType'; import { isListDataType } from '../engine/datatype/ListDataType'; import { validateActionPayload } from '../engine/validation'; @@ -97,7 +98,7 @@ export const handlePermission = async (context, action, input) => { userRoles, action, input, - context + context, ); if (!permissionWhere) { @@ -122,7 +123,7 @@ export const handlePermission = async (context, action, input) => { }; export const generateActions = (graphRegistry, actionTypeFilter) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const actions = {}; @@ -198,6 +199,7 @@ export const generateActions = (graphRegistry, actionTypeFilter) => { clientMutationId = args.input.clientMutationId; args.input.data = await fillDefaultValues(input, payload, context); + // would it make sense to pass args.input.data instead of payload await validateActionPayload(input, payload, action, context); } @@ -228,8 +230,7 @@ export const generateActions = (graphRegistry, actionTypeFilter) => { result, clientMutationId, }; - } - catch (error) { + } catch (error) { if (action.postProcessor) { await action.postProcessor( error, diff --git a/src/graphqlProtocol/connection.js b/src/graphqlProtocol/connection.ts similarity index 89% rename from src/graphqlProtocol/connection.js rename to src/graphqlProtocol/connection.ts index e92bd1da..25d74da5 100644 --- a/src/graphqlProtocol/connection.js +++ b/src/graphqlProtocol/connection.ts @@ -5,15 +5,21 @@ import { GraphQLList, GraphQLBoolean, } from 'graphql'; +import { first, last } from 'lodash'; import { GraphQLCursor } from './dataTypes'; import { resolveByFind } from './resolver'; import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; import { generateSortInput } from './sort'; import { generateFilterInput } from './filter'; -import * as _ from 'lodash'; +// import { Entity } from '../engine/entity/Entity'; + +export type ConnectioNode = { + cursor: any; +}; export const generateConnectionArgs = (entity, graphRegistry) => { const sortInput = generateSortInput(entity); @@ -48,14 +54,22 @@ export const generateConnectionArgs = (entity, graphRegistry) => { }; }; -export const validateConnectionArgs = (source, args, context, info) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); - const maxPageSize = protocolConfiguration.getMaxPageSize( - source, - args, - context, - info, - ); +export const validateConnectionArgs = ( + _source, + args, + // _context, + // _info, +): void => { + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; + + // const maxPageSize = protocolConfiguration.getMaxPageSize( + // source, + // args, + // context, + // info, + // ); + + const maxPageSize = protocolConfiguration.getMaxPageSize(); if (args.first >= 0 && args.last >= 0) { throw new Error('`first` and `last` settings are mutual exclusive'); @@ -78,7 +92,7 @@ export const validateConnectionArgs = (source, args, context, info) => { } }; -export const forceSortByUnique = (orderBy, entity) => { +export const forceSortByUnique = (orderBy, entity): void => { const attributes = entity.getAttributes(); let foundUnique = false; @@ -124,7 +138,9 @@ const pageInfoType = new GraphQLObjectType({ }); export const generateConnectionType = config => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + // const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; + const { nodeType, entity } = config; const typeNamePluralListName = entity.graphql.typeNamePluralPascalCase; let cursor; @@ -204,10 +220,10 @@ export const buildCursor = (entityName, primaryAttributeName, args, data) => { export const connectionFromData = ( { transformedData, originalData }, entity, - source, + _source, args, context, - info, + _info, parentConnection, pageInfoFromData, ) => { @@ -233,14 +249,14 @@ export const connectionFromData = ( const edges = transformedData.map(nodeToEdge); - const firstNode = _.first(edges); - const lastNode = _.last(edges); + const firstNode: ConnectioNode = first(edges); + const lastNode: ConnectioNode = last(edges); return { edges, totalCount: async () => { const storageType = entity.storageType; - return await storageType.count(entity, args, context, parentConnection); + return storageType.count(entity, args, context, parentConnection); }, pageInfo: { startCursor: firstNode ? firstNode.cursor : null, @@ -273,7 +289,7 @@ export const generateReverseConnections = ( ) => { const schema = configuration.getSchema(); const schemaEntities = schema.getEntities(); - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const fields = {}; diff --git a/src/graphqlProtocol/dataTypes.spec.js b/src/graphqlProtocol/dataTypes.spec.ts similarity index 55% rename from src/graphqlProtocol/dataTypes.spec.js rename to src/graphqlProtocol/dataTypes.spec.ts index e82021ff..71f46039 100644 --- a/src/graphqlProtocol/dataTypes.spec.js +++ b/src/graphqlProtocol/dataTypes.spec.ts @@ -5,72 +5,94 @@ import { parseValue } from 'graphql'; describe('dataTypes', () => { it('GraphQLDateTime', () => { - const bad1 = () => GraphQLDateTime.parseLiteral(parseValue('"foo"')); + const bad1 = () => GraphQLDateTime.parseLiteral(parseValue('"foo"'), null); expect(bad1).toThrowErrorMatchingSnapshot(); const bad2 = () => - GraphQLDateTime.parseLiteral(parseValue('"2000-01-02 111:12:13+14:15"')); + GraphQLDateTime.parseLiteral( + parseValue('"2000-01-02 111:12:13+14:15"'), + null, + ); expect(bad2).toThrowErrorMatchingSnapshot('bad hour'); const bad3 = () => - GraphQLDateTime.parseLiteral(parseValue('"2000-31-02 11:12:13+14:15"')); + GraphQLDateTime.parseLiteral( + parseValue('"2000-31-02 11:12:13+14:15"'), + null, + ); expect(bad3).toThrowErrorMatchingSnapshot('bad month'); const bad4 = () => - GraphQLDateTime.parseLiteral(parseValue('"2000-01-02 11:62:13+14:15"')); + GraphQLDateTime.parseLiteral( + parseValue('"2000-01-02 11:62:13+14:15"'), + null, + ); expect(bad4).toThrowErrorMatchingSnapshot('bad minute'); const good1 = () => - GraphQLDateTime.parseLiteral(parseValue('"2000-01-02 11:12:13+14:15"')); + GraphQLDateTime.parseLiteral( + parseValue('"2000-01-02 11:12:13+14:15"'), + null, + ); expect(good1).not.toThrow(); const good2 = () => - GraphQLDateTime.parseLiteral(parseValue('"0003-01-02 21:12:13+14:15"')); + GraphQLDateTime.parseLiteral( + parseValue('"0003-01-02 21:12:13+14:15"'), + null, + ); expect(good2).not.toThrow(); }); it('GraphQLDate', () => { - const bad1 = () => GraphQLDate.parseLiteral(parseValue('"foo"')); + const bad1 = () => GraphQLDate.parseLiteral(parseValue('"foo"'), null); expect(bad1).toThrowErrorMatchingSnapshot(); - const bad2 = () => GraphQLDate.parseLiteral(parseValue('"2000-01-32"')); + const bad2 = () => + GraphQLDate.parseLiteral(parseValue('"2000-01-32"'), null); expect(bad2).toThrowErrorMatchingSnapshot('bad day'); - const bad3 = () => GraphQLDate.parseLiteral(parseValue('"2000-31-02"')); + const bad3 = () => + GraphQLDate.parseLiteral(parseValue('"2000-31-02"'), null); expect(bad3).toThrowErrorMatchingSnapshot('bad month'); - const bad4 = () => GraphQLDate.parseLiteral(parseValue('"01-02"')); + const bad4 = () => GraphQLDate.parseLiteral(parseValue('"01-02"'), null); expect(bad4).toThrowErrorMatchingSnapshot('bad date'); - const good1 = () => GraphQLDate.parseLiteral(parseValue('"2000-01-02"')); + const good1 = () => + GraphQLDate.parseLiteral(parseValue('"2000-01-02"'), null); expect(good1).not.toThrow(); - const good2 = () => GraphQLDate.parseLiteral(parseValue('"0003-01-02"')); + const good2 = () => + GraphQLDate.parseLiteral(parseValue('"0003-01-02"'), null); expect(good2).not.toThrow(); }); it('GraphQLTime', () => { - const bad1 = () => GraphQLTime.parseLiteral(parseValue('"foo"')); + const bad1 = () => GraphQLTime.parseLiteral(parseValue('"foo"'), null); expect(bad1).toThrowErrorMatchingSnapshot(); const bad2 = () => - GraphQLTime.parseLiteral(parseValue('"111:12:13+14:15"')); + GraphQLTime.parseLiteral(parseValue('"111:12:13+14:15"'), null); expect(bad2).toThrowErrorMatchingSnapshot('bad hour'); - const bad3 = () => GraphQLTime.parseLiteral(parseValue('"11:12:13+24:15"')); + const bad3 = () => + GraphQLTime.parseLiteral(parseValue('"11:12:13+24:15"'), null); expect(bad3).toThrowErrorMatchingSnapshot('bad tz hour'); - const bad4 = () => GraphQLTime.parseLiteral(parseValue('"11:62:13+14:15"')); + const bad4 = () => + GraphQLTime.parseLiteral(parseValue('"11:62:13+14:15"'), null); expect(bad4).toThrowErrorMatchingSnapshot('bad minute'); const good1 = () => - GraphQLTime.parseLiteral(parseValue('"11:12:13+14:15"')); + GraphQLTime.parseLiteral(parseValue('"11:12:13+14:15"'), null); expect(good1).not.toThrow(); - const good2 = () => GraphQLTime.parseLiteral(parseValue('"21:12:13"')); + const good2 = () => + GraphQLTime.parseLiteral(parseValue('"21:12:13"'), null); expect(good2).not.toThrow(); - const good3 = () => GraphQLTime.parseLiteral(parseValue('"21:12"')); + const good3 = () => GraphQLTime.parseLiteral(parseValue('"21:12"'), null); expect(good3).not.toThrow(); }); }); diff --git a/src/graphqlProtocol/dataTypes.js b/src/graphqlProtocol/dataTypes.ts similarity index 100% rename from src/graphqlProtocol/dataTypes.js rename to src/graphqlProtocol/dataTypes.ts diff --git a/src/graphqlProtocol/filter.spec.js b/src/graphqlProtocol/filter.spec.ts similarity index 100% rename from src/graphqlProtocol/filter.spec.js rename to src/graphqlProtocol/filter.spec.ts diff --git a/src/graphqlProtocol/filter.ts b/src/graphqlProtocol/filter.ts index 1d72ea55..95e446fc 100644 --- a/src/graphqlProtocol/filter.ts +++ b/src/graphqlProtocol/filter.ts @@ -6,14 +6,15 @@ import { } from 'graphql'; import * as _ from 'lodash'; import { ProtocolGraphQL } from './ProtocolGraphQL'; -import { isEntity } from '../engine/entity/Entity'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; +import { isEntity, Entity } from '../engine/entity/Entity'; import { storageDataTypeCapabilities, storageDataTypeCapabilityType, } from '../engine/constants'; import { isComplexDataType } from '../engine/datatype/ComplexDataType'; import { isArray, isMap } from '../engine/util'; -import { isViewEntity } from '../engine/entity/ViewEntity'; +import { isViewEntity, ViewEntity } from '../engine/entity/ViewEntity'; import { isShadowEntity } from '../engine/entity/ShadowEntity'; const AND_OPERATOR = 'AND'; @@ -27,7 +28,8 @@ const DEEP_FILTER_OPERATOR = 'filter'; const PRE_FILTER_OPERATOR = 'pre_filter'; export const generateFilterInput = (entity, graphRegistry) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; + const typeNamePluralListName = entity.graphql.typeNamePluralPascalCase; const storageType = entity.storageType; @@ -226,11 +228,11 @@ const deepFilterResolver = async (entity, filter, context, path) => { }; export const transformFilterLevel = async ( - entity, + entity: Entity | ViewEntity, filters = {}, - attributes, - context, - path, + attributes: any, + context?: any, + path?: string[], ) => { const ret = {}; const hasFilter = {}; diff --git a/src/graphqlProtocol/generator.spec.js b/src/graphqlProtocol/generator.spec.ts similarity index 100% rename from src/graphqlProtocol/generator.spec.js rename to src/graphqlProtocol/generator.spec.ts diff --git a/src/graphqlProtocol/generator.js b/src/graphqlProtocol/generator.ts similarity index 88% rename from src/graphqlProtocol/generator.js rename to src/graphqlProtocol/generator.ts index e7ebf98e..8a87fac6 100644 --- a/src/graphqlProtocol/generator.js +++ b/src/graphqlProtocol/generator.ts @@ -2,6 +2,7 @@ import * as _ from 'lodash'; import { RELAY_TYPE_PROMOTER_FIELD } from './protocolGraphqlConstants'; import { graphRegistry } from './graphRegistry'; import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; import { shaper } from 'json-shaper'; @@ -40,7 +41,7 @@ export const getTypeForEntityFromGraphRegistry = entity => { // prepare models for graphql export const extendModelsForGql = entities => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; _.forEach(entities, entity => { entity.graphql = entity.graphql || {}; @@ -198,9 +199,9 @@ export const generateGraphQLSchema = configuration => { return; } - const field = { - description: attribute.description, - }; + // const field = { + // description: attribute.description, + // }; let attributeType = attribute.type; @@ -210,17 +211,26 @@ export const generateGraphQLSchema = configuration => { const primaryAttribute = targetEntity.getPrimaryAttribute(); attributeType = primaryAttribute.type; - const reference = { - description: attribute.description, - }; + // const reference = { + // description: attribute.description, + // }; const targetTypeName = targetEntity.graphql.typeName; - reference.type = graphRegistry.types[targetTypeName].type; - reference.resolve = resolveByFindOne( - targetEntity, - ({ source }) => source[attribute.gqlFieldName], - ); + // reference.type = graphRegistry.types[targetTypeName].type; + // reference.resolve = resolveByFindOne( + // targetEntity, + // ({ source }) => source[attribute.gqlFieldName], + // ); + + const reference = { + description: attribute.description, + type: graphRegistry.types[targetTypeName].type, + resolve: resolveByFindOne( + targetEntity, + ({ source }) => source[attribute.gqlFieldName], + ), + }; const referenceFieldName = protocolConfiguration.generateReferenceFieldName( targetEntity, @@ -236,16 +246,24 @@ export const generateGraphQLSchema = configuration => { ); // make it non-nullable if it's required - if (attribute.required) { - field.type = new GraphQLNonNull(fieldType); - } else { - field.type = fieldType; - } + // if (attribute.required) { + // field.type = new GraphQLNonNull(fieldType); + // } else { + // field.type = fieldType; + // } // use computed value's function as the field resolver - if (attribute.resolve) { - field.resolve = attribute.resolve; - } + // if (attribute.resolve) { + // field.resolve = attribute.resolve; + // } + + const field = { + description: attribute.description, + type: attribute.required + ? new GraphQLNonNull(fieldType) + : fieldType, + resolve: attribute.resolve ? attribute.resolve : undefined, + }; fields[attribute.gqlFieldName] = field; @@ -325,7 +343,7 @@ export const generateGraphQLSchema = configuration => { // build the query type const queryType = new GraphQLObjectType({ name: 'Query', - root: 'The root query type', + // root: 'The root query type', fields: () => { const listQueries = generateListQueries(graphRegistry); @@ -334,7 +352,7 @@ export const generateGraphQLSchema = configuration => { // override args.id of relay to args.nodeId nodeField.args.nodeId = nodeField.args.id; - nodeField.resolve = (obj, { nodeId }, context, info) => + nodeField.resolve = (_obj, { nodeId }, context, info) => idFetcher(nodeId, context, info); delete nodeField.args.id; @@ -349,7 +367,7 @@ export const generateGraphQLSchema = configuration => { const mutationType = new GraphQLObjectType({ name: 'Mutation', - root: 'The root mutation type', + // root: 'The root mutation type', fields: () => { const mutations = generateMutations(graphRegistry); diff --git a/src/graphqlProtocol/graphRegistry.js b/src/graphqlProtocol/graphRegistry.ts similarity index 100% rename from src/graphqlProtocol/graphRegistry.js rename to src/graphqlProtocol/graphRegistry.ts diff --git a/src/graphqlProtocol/helper.js b/src/graphqlProtocol/helper.ts similarity index 92% rename from src/graphqlProtocol/helper.js rename to src/graphqlProtocol/helper.ts index 85f854d9..4689cb9d 100644 --- a/src/graphqlProtocol/helper.js +++ b/src/graphqlProtocol/helper.ts @@ -1,15 +1,17 @@ -import { ProtocolGraphQL } from './ProtocolGraphQL'; import * as _ from 'lodash'; +import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; + import { INDEX_UNIQUE } from '../engine/index/Index'; import { CustomError } from '../engine/CustomError'; export const getEntityUniquenessAttributes = entity => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const ret = []; if (!entity.getIndexes) { - return ret + return ret; } const entityIndexes = entity.getIndexes(); diff --git a/src/graphqlProtocol/io.spec.js b/src/graphqlProtocol/io.spec.ts similarity index 92% rename from src/graphqlProtocol/io.spec.js rename to src/graphqlProtocol/io.spec.ts index bcaa89ad..9560ab2e 100644 --- a/src/graphqlProtocol/io.spec.js +++ b/src/graphqlProtocol/io.spec.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-empty-function */ /* eslint-disable @typescript-eslint/explicit-function-return-type */ +import { GraphQLInputObjectType, GraphQLObjectType } from 'graphql'; import { Action } from '../engine/action/Action'; import { DataTypeString, DataTypeInteger } from '../engine/datatype/dataTypes'; @@ -99,7 +100,8 @@ describe('io', () => { const inputFields = type.getFields(); expect(inputFields).toMatchSnapshot(); - const dataInputType = inputFields.data.type; + // const dataInputType = inputFields.data.type; + const dataInputType = inputFields.data.type as GraphQLInputObjectType; const dataInputFields = dataInputType.getFields(); expect(dataInputFields).toMatchSnapshot(); }); @@ -130,7 +132,9 @@ describe('io', () => { const outputFields = type.getFields(); expect(outputFields).toMatchSnapshot(); - const resultOutputType = outputFields.result.type; + // const resultOutputType = outputFields.result.type; + const resultOutputType = outputFields.result.type as GraphQLObjectType; + const resultOutputFields = resultOutputType.getFields(); expect(resultOutputFields).toMatchSnapshot(); }); @@ -244,11 +248,15 @@ describe('io', () => { const inputFields = type.getFields(); expect(inputFields).toMatchSnapshot(); - const dataInputType = inputFields.data.type; + // const dataInputType = inputFields.data.type; + const dataInputType = inputFields.data.type as GraphQLInputObjectType; const dataInputFields = dataInputType.getFields(); expect(dataInputFields).toMatchSnapshot(); - const playersInputType = dataInputFields.players.type; + // const playersInputType = dataInputFields.players.type; + const playersInputType = dataInputFields.players + .type as GraphQLInputObjectType; + const playersInputFields = playersInputType.getFields(); expect(playersInputFields).toMatchSnapshot(); diff --git a/src/graphqlProtocol/io.ts b/src/graphqlProtocol/io.ts index 001b7b58..0e89d0a4 100644 --- a/src/graphqlProtocol/io.ts +++ b/src/graphqlProtocol/io.ts @@ -11,6 +11,8 @@ import { import * as _ from 'lodash'; import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; + import { DataOutputField, InputFields, @@ -62,7 +64,9 @@ const generateDataInputField = ( true, ); } else if (param.i18n) { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + // const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; + const languages = protocolConfiguration .getParentConfiguration() .getLanguages(); @@ -153,8 +157,12 @@ const generateDataInputFields = ( }; //GraphQLInputObjectType | ? -export const generateDataInput = (baseName, inputParams, singleParam) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); +export const generateDataInput = ( + baseName: string, + inputParams: any, + singleParam?: any, +) => { + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; if (singleParam) { // eslint-disable-next-line no-use-before-define @@ -176,6 +184,7 @@ export const generateDataInput = (baseName, inputParams, singleParam) => { }, }); + dataInputType.getFields(); return dataInputType; }; @@ -185,7 +194,7 @@ export const generateNestedDataInput = ( nestedParamName, level = 1, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const dataInputType = new GraphQLInputObjectType({ name: protocolConfiguration.generateNestedDataInputTypeName( @@ -215,7 +224,7 @@ export const generateInput = ( isField, includeClientMutationId = false, ): GraphQLInputObjectType => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const inputType = new GraphQLInputObjectType({ name: protocolConfiguration.generateInputTypeName(baseName), @@ -259,7 +268,7 @@ const generateDataOutputField = ( level = 0, returnAsFieldNameMap = false, ): GraphQLObjectType | WrappedDataOutputField => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; let paramType = param.type; let baseFieldType; @@ -413,12 +422,12 @@ const generateDataOutputFields = ( }; export const generateDataOutput = ( - baseName, - outputParams, - graphRegistry, - singleParam, + baseName: string, + outputParams: any, + graphRegistry: any, + singleParam?: any, ): GraphQLObjectType | WrappedDataOutputField => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; if (singleParam) { // eslint-disable-next-line no-use-before-define @@ -446,10 +455,10 @@ export const generateNestedDataOutput = ( baseName, nestedParam, nestedParamName, - graphRegistry, + graphRegistry?: any, level = 1, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const dataOutputType = new GraphQLObjectType({ name: protocolConfiguration.generateNestedDataOutPutTypeName( @@ -480,7 +489,7 @@ export const generateOutput = ( isField, includeClientMutationId = false, ): GraphQLObjectType => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const outputType = new GraphQLObjectType({ name: protocolConfiguration.generateOutPutTypeName(baseName), diff --git a/src/graphqlProtocol/mutation.js b/src/graphqlProtocol/mutation.ts similarity index 93% rename from src/graphqlProtocol/mutation.js rename to src/graphqlProtocol/mutation.ts index 47261c40..4ea74011 100644 --- a/src/graphqlProtocol/mutation.js +++ b/src/graphqlProtocol/mutation.ts @@ -5,12 +5,15 @@ import { GraphQLInputObjectType, GraphQLObjectType, GraphQLInt, + GraphQLInputFieldConfigMap, + GraphQLFieldConfigMap, } from 'graphql'; import { fromGlobalId } from 'graphql-relay'; import * as _ from 'lodash'; import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; import { getEntityUniquenessAttributes } from './helper'; import { getMutationResolver } from './resolver'; import { isEntity } from '../engine/entity/Entity'; @@ -18,7 +21,8 @@ import { isEntity } from '../engine/entity/Entity'; const i18nInputFieldTypesCache = {}; const generateI18nInputFieldType = (entity, entityMutation, attribute) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; + const i18nFieldTypeName = protocolConfiguration.generateMutationI18nAttributeInputTypeName( entity, entityMutation, @@ -42,11 +46,7 @@ const generateI18nInputFieldType = (entity, entityMutation, attribute) => { const i18nFieldType = new GraphQLInputObjectType({ name: i18nFieldTypeName, - description: `**\`${ - entityMutation.name - }\`** mutation translations input type for **\`${typeNamePascalCase}.${ - attribute.gqlFieldName - }\`**`, + description: `**\`${entityMutation.name}\`** mutation translations input type for **\`${typeNamePascalCase}.${attribute.gqlFieldName}\`**`, fields: () => { const i18nFields = {}; @@ -72,7 +72,7 @@ const generateI18nInputFieldType = (entity, entityMutation, attribute) => { }; export const generateMutationInstanceInput = (entity, entityMutation) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const typeNamePascalCase = entity.graphql.typeNamePascalCase; @@ -81,12 +81,10 @@ export const generateMutationInstanceInput = (entity, entityMutation) => { entity, entityMutation, ), - description: `**\`${ - entityMutation.name - }\`** mutation input type for **\`${typeNamePascalCase}\`**`, + description: `**\`${entityMutation.name}\`** mutation input type for **\`${typeNamePascalCase}\`**`, fields: () => { - const fields = {}; + const fields: GraphQLInputFieldConfigMap = {}; const entityAttributes = entity.getAttributes(); @@ -144,7 +142,7 @@ export const generateMutationInput = ( entityMutation, entityMutationInstanceInputType, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const typeNamePascalCase = entity.graphql.typeNamePascalCase; @@ -156,7 +154,7 @@ export const generateMutationInput = ( description: `Mutation input type for **\`${typeNamePascalCase}\`**`, fields: () => { - const fields = { + const fields: GraphQLInputFieldConfigMap = { clientMutationId: { type: GraphQLString, }, @@ -188,7 +186,7 @@ export const generateMutationByPrimaryAttributeInput = ( entityMutationInstanceInputType, primaryAttribute, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const fieldName = primaryAttribute.gqlFieldName; const fieldType = ProtocolGraphQL.convertToProtocolDataType( @@ -207,7 +205,7 @@ export const generateMutationByPrimaryAttributeInput = ( description: `Mutation input type for **\`${typeNamePascalCase}\`** using the **\`${fieldName}\`**`, fields: () => { - const fields = { + const fields: GraphQLInputFieldConfigMap = { clientMutationId: { type: GraphQLString, }, @@ -237,7 +235,7 @@ export const generateInstanceUniquenessInput = ( uniquenessAttributes, graphRegistry, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const typeNamePascalCase = entity.graphql.typeNamePascalCase; @@ -246,12 +244,10 @@ export const generateInstanceUniquenessInput = ( entity, uniquenessAttributes.uniquenessName, ), - description: `Input type for **\`${typeNamePascalCase}\`** using data uniqueness (${ - uniquenessAttributes.attributes - }) to resolve the ID`, + description: `Input type for **\`${typeNamePascalCase}\`** using data uniqueness (${uniquenessAttributes.attributes}) to resolve the ID`, fields: () => { - const fields = {}; + const fields: GraphQLInputFieldConfigMap = {}; const entityAttributes = entity.getAttributes(); @@ -282,8 +278,7 @@ export const generateInstanceUniquenessInput = ( ? new GraphQLNonNull(fieldType) : fieldType, }; - } - else { + } else { fields[attribute.gqlFieldName] = { type: fieldType, }; @@ -303,8 +298,7 @@ export const generateInstanceUniquenessInput = ( }; }); } - } - else { + } else { const fieldType = ProtocolGraphQL.convertToProtocolDataType( attributeType, entity.name, @@ -350,7 +344,7 @@ export const generateMutationInstanceNestedInput = ( entityMutation, graphRegistry, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const typeNamePascalCase = entity.graphql.typeNamePascalCase; @@ -359,12 +353,10 @@ export const generateMutationInstanceNestedInput = ( entity, entityMutation, ), - description: `**\`${ - entityMutation.name - }\`** mutation input type for **\`${typeNamePascalCase}\`** using data uniqueness to resolve references`, + description: `**\`${entityMutation.name}\`** mutation input type for **\`${typeNamePascalCase}\`** using data uniqueness to resolve references`, fields: () => { - const fields = {}; + const fields: GraphQLInputFieldConfigMap = {}; const entityAttributes = entity.getAttributes(); @@ -398,8 +390,7 @@ export const generateMutationInstanceNestedInput = ( ? new GraphQLNonNull(fieldType) : fieldType, }; - } - else { + } else { fields[attribute.gqlFieldName] = { type: fieldType, }; @@ -419,8 +410,7 @@ export const generateMutationInstanceNestedInput = ( }; }); } - } - else { + } else { const fieldType = ProtocolGraphQL.convertToProtocolDataType( attributeType, entity.name, @@ -464,7 +454,7 @@ export const generateMutationNestedInput = ( entityMutation, entityMutationInstanceUniquenessInputType, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const typeNamePascalCase = entity.graphql.typeNamePascalCase; @@ -476,7 +466,7 @@ export const generateMutationNestedInput = ( description: `Mutation input type for **\`${typeNamePascalCase}\`** using data uniqueness to resolve references`, fields: () => { - const fields = { + const fields: GraphQLInputFieldConfigMap = { clientMutationId: { type: GraphQLString, }, @@ -507,7 +497,7 @@ export const generateMutationOutput = ( type, entityMutation, ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const typeNamePascalCase = entity.graphql.typeNamePascalCase; @@ -519,7 +509,7 @@ export const generateMutationOutput = ( description: `Mutation output type for **\`${typeNamePascalCase}\`**`, fields: () => { - const fields = { + const fields: GraphQLFieldConfigMap = { clientMutationId: { type: GraphQLString, }, @@ -546,8 +536,7 @@ export const generateMutationOutput = ( description: primaryAttribute.description, }; } - } - else { + } else { fields[typeName] = { type: new GraphQLNonNull(type), }; @@ -581,7 +570,7 @@ const extractIdFromNodeId = (graphRegistry, sourceEntityName, nodeId) => { }; export const generateMutations = graphRegistry => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const mutations = {}; generateInstanceUniquenessInputs(graphRegistry); diff --git a/src/graphqlProtocol/protocolGraphqlConstants.js b/src/graphqlProtocol/protocolGraphqlConstants.ts similarity index 100% rename from src/graphqlProtocol/protocolGraphqlConstants.js rename to src/graphqlProtocol/protocolGraphqlConstants.ts diff --git a/src/graphqlProtocol/query.js b/src/graphqlProtocol/query.ts similarity index 93% rename from src/graphqlProtocol/query.js rename to src/graphqlProtocol/query.ts index c7953e18..cff7e4f3 100644 --- a/src/graphqlProtocol/query.js +++ b/src/graphqlProtocol/query.ts @@ -1,14 +1,15 @@ +import { GraphQLNonNull, GraphQLID } from 'graphql'; import * as _ from 'lodash'; import { ProtocolGraphQL } from './ProtocolGraphQL'; - -import { GraphQLNonNull, GraphQLID } from 'graphql'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; import { resolveByFind, resolveByFindOne } from './resolver'; import { isEntity } from '../engine/entity/Entity'; import { isViewEntity } from '../engine/entity/ViewEntity'; export const generateListQueries = graphRegistry => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; + const listQueries = {}; _.forEach(graphRegistry.types, ({ entity }, typeName) => { @@ -32,7 +33,7 @@ export const generateListQueries = graphRegistry => { }; export const generateInstanceQueries = (graphRegistry, idFetcher) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const instanceQueries = {}; _.forEach(graphRegistry.types, ({ type, entity }) => { @@ -54,7 +55,7 @@ export const generateInstanceQueries = (graphRegistry, idFetcher) => { type: new GraphQLNonNull(GraphQLID), }, }, - resolve: (source, { nodeId }, context, info) => + resolve: (_source, { nodeId }, context, info) => idFetcher(nodeId, context, info), }; diff --git a/src/graphqlProtocol/resolver.js b/src/graphqlProtocol/resolver.ts similarity index 95% rename from src/graphqlProtocol/resolver.js rename to src/graphqlProtocol/resolver.ts index f78ac7fd..6afd0120 100644 --- a/src/graphqlProtocol/resolver.js +++ b/src/graphqlProtocol/resolver.ts @@ -6,6 +6,7 @@ import { } from './util'; import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; import { validateConnectionArgs, @@ -37,16 +38,17 @@ import { } from '../engine/helpers'; import { validateMutationPayload } from '../engine/validation'; -export const resolveByFind = (entity, parentConnectionCollector) => { +export const resolveByFind = (entity, parentConnectionCollector?: any) => { const storageType = entity.storageType; - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; return async (source, args, context, info) => { const parentConnection = parentConnectionCollector ? parentConnectionCollector({ source, args, context, info }) : null; - validateConnectionArgs(source, args, context, info); + // validateConnectionArgs(source, args, context, info); + validateConnectionArgs(source, args); forceSortByUnique(args.orderBy, entity); if (entity.preProcessor) { @@ -129,9 +131,9 @@ export const resolveByFind = (entity, parentConnectionCollector) => { export const resolveByFindOne = (entity, idCollector) => { const storageType = entity.storageType; - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; - return async (source, args, context, info) => { + return async (source: any, args: any, context?: object, info?: object) => { const id = idCollector({ source, args, context }); if (id === null || typeof id === 'undefined') { @@ -168,7 +170,7 @@ export const getNestedPayloadResolver = ( storageType, path = [], ) => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; return async (source, args, context, info) => { const resultPayload = {}; @@ -298,7 +300,8 @@ export const getMutationResolver = ( idResolver, ) => { const storageType = entity.storageType; - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; + const nestedPayloadResolver = getNestedPayloadResolver( entity, entityMutation.attributes, @@ -310,7 +313,7 @@ export const getMutationResolver = ( entity, entityMutation, args.input[typeName], - context, + // context, ); if (nested) { @@ -369,10 +372,12 @@ export const getMutationResolver = ( if (entityMutation.type !== MUTATION_TYPE_DELETE) { // // this function might be wrong when we look serializeValues args + // unless we add typeName ? args.input[typeName] = serializeValues( entity, entityMutation, args.input[typeName], + typeName, context, ); } diff --git a/src/graphqlProtocol/sort.js b/src/graphqlProtocol/sort.ts similarity index 94% rename from src/graphqlProtocol/sort.js rename to src/graphqlProtocol/sort.ts index d7e4b997..6854ef85 100644 --- a/src/graphqlProtocol/sort.js +++ b/src/graphqlProtocol/sort.ts @@ -1,11 +1,12 @@ import { GraphQLEnumType, GraphQLList } from 'graphql'; import * as _ from 'lodash'; import { ProtocolGraphQL } from './ProtocolGraphQL'; +import { ProtocolGraphQLConfiguration } from './ProtocolGraphQLConfiguration'; import { isEntity } from '../engine/entity/Entity'; import { isShadowEntity } from '../engine/entity/ShadowEntity'; export const generateSortInput = entity => { - const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration(); + const protocolConfiguration = ProtocolGraphQL.getProtocolConfiguration() as ProtocolGraphQLConfiguration; const storageType = entity.storageType; const sortNames = {}; diff --git a/src/graphqlProtocol/util.spec.js b/src/graphqlProtocol/util.spec.ts similarity index 100% rename from src/graphqlProtocol/util.spec.js rename to src/graphqlProtocol/util.spec.ts diff --git a/src/graphqlProtocol/util.js b/src/graphqlProtocol/util.ts similarity index 100% rename from src/graphqlProtocol/util.js rename to src/graphqlProtocol/util.ts From 3cd3039a23ba9ccba814b3dbc4b0c7030a8e457f Mon Sep 17 00:00:00 2001 From: getlarge Date: Thu, 2 Apr 2020 21:07:30 +0200 Subject: [PATCH 2/3] add git repository url ; add node types --- package.json | 5 +++++ yarn.lock | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/package.json b/package.json index 563ea6a8..f6b86547 100644 --- a/package.json +++ b/package.json @@ -54,11 +54,16 @@ ], "author": "Chris Kalmar ", "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/chriskalmar/shyft" + }, "devDependencies": { "@babel/core": "7.8.7", "@babel/preset-env": "7.8.7", "@types/jest": "25.1.4", "@types/lodash": "4.14.149", + "@types/node": "^12.12.31", "@typescript-eslint/eslint-plugin": "2.23.0", "@typescript-eslint/parser": "2.23.0", "babel-jest": "25.1.0", diff --git a/yarn.lock b/yarn.lock index cb5f4291..7a2e693a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1229,6 +1229,11 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== +"@types/node@^12.12.31": + version "12.12.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.31.tgz#d6b4f9645fee17f11319b508fb1001797425da51" + integrity sha512-T+wnJno8uh27G9c+1T+a1/WYCHzLeDqtsGJkoEdSp2X8RTh3oOCZQcUnjAx90CS8cmmADX51O0FI/tu9s0yssg== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" From 7f94a5e96b20a8ab390d0b88d621b2ce56e4f41c Mon Sep 17 00:00:00 2001 From: getlarge Date: Thu, 2 Apr 2020 21:13:57 +0200 Subject: [PATCH 3/3] update test snapshots --- .../__snapshots__/{action.spec.js.snap => action.spec.ts.snap} | 0 .../{dataTypes.spec.js.snap => dataTypes.spec.ts.snap} | 0 .../__snapshots__/{filter.spec.js.snap => filter.spec.ts.snap} | 0 .../{generator.spec.js.snap => generator.spec.ts.snap} | 0 .../__snapshots__/{io.spec.js.snap => io.spec.ts.snap} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename src/graphqlProtocol/__snapshots__/{action.spec.js.snap => action.spec.ts.snap} (100%) rename src/graphqlProtocol/__snapshots__/{dataTypes.spec.js.snap => dataTypes.spec.ts.snap} (100%) rename src/graphqlProtocol/__snapshots__/{filter.spec.js.snap => filter.spec.ts.snap} (100%) rename src/graphqlProtocol/__snapshots__/{generator.spec.js.snap => generator.spec.ts.snap} (100%) rename src/graphqlProtocol/__snapshots__/{io.spec.js.snap => io.spec.ts.snap} (100%) diff --git a/src/graphqlProtocol/__snapshots__/action.spec.js.snap b/src/graphqlProtocol/__snapshots__/action.spec.ts.snap similarity index 100% rename from src/graphqlProtocol/__snapshots__/action.spec.js.snap rename to src/graphqlProtocol/__snapshots__/action.spec.ts.snap diff --git a/src/graphqlProtocol/__snapshots__/dataTypes.spec.js.snap b/src/graphqlProtocol/__snapshots__/dataTypes.spec.ts.snap similarity index 100% rename from src/graphqlProtocol/__snapshots__/dataTypes.spec.js.snap rename to src/graphqlProtocol/__snapshots__/dataTypes.spec.ts.snap diff --git a/src/graphqlProtocol/__snapshots__/filter.spec.js.snap b/src/graphqlProtocol/__snapshots__/filter.spec.ts.snap similarity index 100% rename from src/graphqlProtocol/__snapshots__/filter.spec.js.snap rename to src/graphqlProtocol/__snapshots__/filter.spec.ts.snap diff --git a/src/graphqlProtocol/__snapshots__/generator.spec.js.snap b/src/graphqlProtocol/__snapshots__/generator.spec.ts.snap similarity index 100% rename from src/graphqlProtocol/__snapshots__/generator.spec.js.snap rename to src/graphqlProtocol/__snapshots__/generator.spec.ts.snap diff --git a/src/graphqlProtocol/__snapshots__/io.spec.js.snap b/src/graphqlProtocol/__snapshots__/io.spec.ts.snap similarity index 100% rename from src/graphqlProtocol/__snapshots__/io.spec.js.snap rename to src/graphqlProtocol/__snapshots__/io.spec.ts.snap