@commitspark/graphql-api 0.9.4 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +96 -85
  3. package/dist/container.js +21 -13
  4. package/dist/container.js.map +1 -1
  5. package/dist/graphql/field-resolver/entry-reference-resolver.d.ts +10 -0
  6. package/dist/graphql/field-resolver/entry-reference-resolver.js +15 -0
  7. package/dist/graphql/field-resolver/entry-reference-resolver.js.map +1 -0
  8. package/dist/graphql/field-resolver/field-default-value-resolver.d.ts +14 -0
  9. package/dist/graphql/field-resolver/field-default-value-resolver.js +73 -0
  10. package/dist/graphql/field-resolver/field-default-value-resolver.js.map +1 -0
  11. package/dist/graphql/field-resolver/fieldResolver.d.ts +11 -0
  12. package/dist/graphql/field-resolver/fieldResolver.js +3 -0
  13. package/dist/graphql/field-resolver/fieldResolver.js.map +1 -0
  14. package/dist/graphql/field-resolver/union-value-resolver.d.ts +10 -0
  15. package/dist/graphql/field-resolver/union-value-resolver.js +17 -0
  16. package/dist/graphql/field-resolver/union-value-resolver.js.map +1 -0
  17. package/dist/graphql/input-type-generator.service.d.ts +3 -3
  18. package/dist/graphql/input-type-generator.service.js +18 -7
  19. package/dist/graphql/input-type-generator.service.js.map +1 -1
  20. package/dist/graphql/queries-mutations-generator.service.d.ts +7 -7
  21. package/dist/graphql/queries-mutations-generator.service.js +6 -6
  22. package/dist/graphql/queries-mutations-generator.service.js.map +1 -1
  23. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.d.ts +6 -3
  24. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js +46 -4
  25. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js.map +1 -1
  26. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.d.ts +6 -3
  27. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js +32 -9
  28. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +1 -1
  29. package/dist/graphql/resolver-generators/mutation-update-resolver-generator.d.ts +12 -0
  30. package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js +53 -0
  31. package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js.map +1 -0
  32. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.d.ts +13 -0
  33. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js +58 -0
  34. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js.map +1 -0
  35. package/dist/graphql/resolver-generators/query-all-resolver-generator.d.ts +3 -2
  36. package/dist/graphql/resolver-generators/query-all-resolver-generator.js +4 -1
  37. package/dist/graphql/resolver-generators/query-all-resolver-generator.js.map +1 -1
  38. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.d.ts +3 -2
  39. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js +2 -1
  40. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js.map +1 -1
  41. package/dist/graphql/resolver-generators/union-type-resolver-generator.d.ts +4 -4
  42. package/dist/graphql/resolver-generators/union-type-resolver-generator.js +3 -3
  43. package/dist/graphql/resolver-generators/union-type-resolver-generator.js.map +1 -1
  44. package/dist/graphql/schema-analyzer.service.d.ts +1 -9
  45. package/dist/graphql/schema-analyzer.service.js +6 -17
  46. package/dist/graphql/schema-analyzer.service.js.map +1 -1
  47. package/dist/graphql/schema-generator.service.d.ts +3 -5
  48. package/dist/graphql/schema-generator.service.js +7 -12
  49. package/dist/graphql/schema-generator.service.js.map +1 -1
  50. package/dist/graphql/schema-utils/entry-reference-util.d.ts +12 -4
  51. package/dist/graphql/schema-utils/entry-reference-util.js +105 -21
  52. package/dist/graphql/schema-utils/entry-reference-util.js.map +1 -1
  53. package/dist/graphql/schema-utils/entry-type-util.d.ts +6 -0
  54. package/dist/graphql/schema-utils/entry-type-util.js +34 -0
  55. package/dist/graphql/schema-utils/entry-type-util.js.map +1 -0
  56. package/dist/graphql/schema-utils/union-type-util.d.ts +5 -0
  57. package/dist/graphql/schema-utils/union-type-util.js +21 -0
  58. package/dist/graphql/schema-utils/union-type-util.js.map +1 -0
  59. package/dist/persistence/persistence.service.d.ts +1 -8
  60. package/dist/persistence/persistence.service.js +22 -87
  61. package/dist/persistence/persistence.service.js.map +1 -1
  62. package/dist/tsconfig.build.tsbuildinfo +1 -1
  63. package/package.json +3 -3
  64. package/src/container.ts +29 -15
  65. package/src/graphql/field-resolver/entry-reference-resolver.ts +47 -0
  66. package/src/graphql/field-resolver/field-default-value-resolver.ts +154 -0
  67. package/src/graphql/field-resolver/fieldResolver.ts +19 -0
  68. package/src/graphql/field-resolver/union-value-resolver.ts +46 -0
  69. package/src/graphql/input-type-generator.service.ts +22 -8
  70. package/src/graphql/queries-mutations-generator.service.ts +18 -18
  71. package/src/graphql/resolver-generators/mutation-create-resolver-generator.ts +82 -19
  72. package/src/graphql/resolver-generators/mutation-delete-resolver-generator.ts +72 -27
  73. package/src/graphql/resolver-generators/mutation-update-resolver-generator.ts +128 -0
  74. package/src/graphql/resolver-generators/object-type-field-default-value-resolver-generator.ts +119 -0
  75. package/src/graphql/resolver-generators/query-all-resolver-generator.ts +9 -7
  76. package/src/graphql/resolver-generators/query-by-id-resolver-generator.ts +7 -7
  77. package/src/graphql/resolver-generators/union-type-resolver-generator.ts +5 -7
  78. package/src/graphql/schema-analyzer.service.ts +10 -24
  79. package/src/graphql/schema-generator.service.ts +13 -22
  80. package/src/graphql/schema-utils/entry-reference-util.ts +170 -30
  81. package/src/graphql/schema-utils/entry-type-util.ts +42 -0
  82. package/src/graphql/schema-utils/union-type-util.ts +23 -0
  83. package/src/persistence/persistence.service.ts +30 -142
  84. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.d.ts +0 -12
  85. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js +0 -29
  86. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js.map +0 -1
  87. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.d.ts +0 -8
  88. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js +0 -29
  89. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js.map +0 -1
  90. package/dist/graphql/resolver-generators/union-value-resolver-generator.d.ts +0 -13
  91. package/dist/graphql/resolver-generators/union-value-resolver-generator.js +0 -80
  92. package/dist/graphql/resolver-generators/union-value-resolver-generator.js.map +0 -1
  93. package/src/graphql/resolver-generators/entry-reference-resolver.generator.ts +0 -71
  94. package/src/graphql/resolver-generators/mutation-update.resolver-generator.ts +0 -59
  95. package/src/graphql/resolver-generators/union-value-resolver-generator.ts +0 -125
@@ -1,10 +1,6 @@
1
- import { GraphQLField, GraphQLObjectType, GraphQLSchema } from 'graphql';
1
+ import { GraphQLObjectType, GraphQLSchema } from 'graphql';
2
2
  import { GraphQLInterfaceType, GraphQLUnionType } from 'graphql/type/definition';
3
- import { ApolloContext } from '../app/api.service';
4
- import { EntryReferenceUtil } from './schema-utils/entry-reference-util';
5
3
  export declare class SchemaAnalyzerService {
6
- private readonly entryReferenceUtil;
7
- constructor(entryReferenceUtil: EntryReferenceUtil);
8
4
  analyzeSchema(schema: GraphQLSchema): ISchemaAnalyzerResult;
9
5
  }
10
6
  export interface ISchemaAnalyzerResult {
@@ -12,8 +8,4 @@ export interface ISchemaAnalyzerResult {
12
8
  objectTypes: GraphQLObjectType[];
13
9
  interfaceTypes: GraphQLInterfaceType[];
14
10
  unionTypes: GraphQLUnionType[];
15
- typesWithEntryReferences: {
16
- type: GraphQLObjectType<any, ApolloContext>;
17
- fields: GraphQLField<any, ApolloContext>[];
18
- }[];
19
11
  }
@@ -1,46 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SchemaAnalyzerService = void 0;
4
+ const graphql_1 = require("graphql");
4
5
  const utils_1 = require("@graphql-tools/utils");
5
- const kinds_1 = require("graphql/language/kinds");
6
6
  class SchemaAnalyzerService {
7
- constructor(entryReferenceUtil) {
8
- this.entryReferenceUtil = entryReferenceUtil;
9
- }
10
7
  analyzeSchema(schema) {
11
- var _a, _b, _c, _d;
8
+ var _a;
12
9
  const result = {
13
10
  entryDirectiveTypes: [],
14
11
  objectTypes: [],
15
12
  interfaceTypes: [],
16
13
  unionTypes: [],
17
- typesWithEntryReferences: [],
18
14
  };
19
15
  const typeMap = schema.getTypeMap();
20
16
  for (const [key, type] of Object.entries(typeMap)) {
21
17
  if (key.startsWith('__')) {
22
18
  continue;
23
19
  }
24
- if (((_a = type.astNode) === null || _a === void 0 ? void 0 : _a.kind) === kinds_1.Kind.OBJECT_TYPE_DEFINITION) {
20
+ if ((0, graphql_1.isObjectType)(type)) {
25
21
  const objectType = type;
26
22
  result.objectTypes.push(objectType);
27
- const entityDirective = (_b = (0, utils_1.getDirective)(schema, objectType, 'Entry')) === null || _b === void 0 ? void 0 : _b[0];
23
+ const entityDirective = (_a = (0, utils_1.getDirective)(schema, objectType, 'Entry')) === null || _a === void 0 ? void 0 : _a[0];
28
24
  if (entityDirective) {
29
25
  result.entryDirectiveTypes.push(objectType);
30
26
  }
31
- const fieldsWithEntryReference = this.entryReferenceUtil.getFieldsWithReferenceToTypeWithEntryDirective(objectType);
32
- if (fieldsWithEntryReference.length > 0) {
33
- result.typesWithEntryReferences.push({
34
- type: objectType,
35
- fields: fieldsWithEntryReference,
36
- });
37
- }
38
27
  }
39
- if (((_c = type.astNode) === null || _c === void 0 ? void 0 : _c.kind) === kinds_1.Kind.INTERFACE_TYPE_DEFINITION) {
28
+ if ((0, graphql_1.isInterfaceType)(type)) {
40
29
  const interfaceType = type;
41
30
  result.interfaceTypes.push(interfaceType);
42
31
  }
43
- if (((_d = type.astNode) === null || _d === void 0 ? void 0 : _d.kind) === kinds_1.Kind.UNION_TYPE_DEFINITION) {
32
+ if ((0, graphql_1.isUnionType)(type)) {
44
33
  const unionType = type;
45
34
  result.unionTypes.push(unionType);
46
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema-analyzer.service.js","sourceRoot":"","sources":["../../src/graphql/schema-analyzer.service.ts"],"names":[],"mappings":";;;AACA,gDAAmD;AAEnD,kDAA6C;AAI7C,MAAa,qBAAqB;IAChC,YAA6B,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAAG,CAAC;IAEhE,aAAa,CAAC,MAAqB;;QACxC,MAAM,MAAM,GAA0B;YACpC,mBAAmB,EAAE,EAAE;YACvB,WAAW,EAAE,EAAE;YACf,cAAc,EAAE,EAAE;YAClB,UAAU,EAAE,EAAE;YACd,wBAAwB,EAAE,EAAE;SAC7B,CAAA;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACxB,SAAQ;aACT;YAED,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,YAAI,CAAC,sBAAsB,EAAE;gBACtD,MAAM,UAAU,GAAG,IAAyB,CAAA;gBAC5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACnC,MAAM,eAAe,GAAG,MAAA,IAAA,oBAAY,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,0CAAG,CAAC,CAAC,CAAA;gBACtE,IAAI,eAAe,EAAE;oBACnB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;iBAC5C;gBACD,MAAM,wBAAwB,GAC5B,IAAI,CAAC,kBAAkB,CAAC,8CAA8C,CACpE,UAAU,CACX,CAAA;gBACH,IAAI,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC;wBACnC,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,wBAAwB;qBACjC,CAAC,CAAA;iBACH;aACF;YAED,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,YAAI,CAAC,yBAAyB,EAAE;gBACzD,MAAM,aAAa,GAAG,IAA4B,CAAA;gBAClD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;aAC1C;YAED,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,YAAI,CAAC,qBAAqB,EAAE;gBACrD,MAAM,SAAS,GAAG,IAAwB,CAAA;gBAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aAClC;SACF;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAnDD,sDAmDC"}
1
+ {"version":3,"file":"schema-analyzer.service.js","sourceRoot":"","sources":["../../src/graphql/schema-analyzer.service.ts"],"names":[],"mappings":";;;AAAA,qCAMgB;AAChB,gDAAmD;AAGnD,MAAa,qBAAqB;IACzB,aAAa,CAAC,MAAqB;;QACxC,MAAM,MAAM,GAA0B;YACpC,mBAAmB,EAAE,EAAE;YACvB,WAAW,EAAE,EAAE;YACf,cAAc,EAAE,EAAE;YAClB,UAAU,EAAE,EAAE;SACf,CAAA;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACxB,SAAQ;aACT;YAED,IAAI,IAAA,sBAAY,EAAC,IAAI,CAAC,EAAE;gBACtB,MAAM,UAAU,GAAG,IAAyB,CAAA;gBAC5C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACnC,MAAM,eAAe,GAAG,MAAA,IAAA,oBAAY,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,0CAAG,CAAC,CAAC,CAAA;gBACtE,IAAI,eAAe,EAAE;oBACnB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;iBAC5C;aACF;YAED,IAAI,IAAA,yBAAe,EAAC,IAAI,CAAC,EAAE;gBACzB,MAAM,aAAa,GAAG,IAA4B,CAAA;gBAClD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;aAC1C;YAED,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;gBACrB,MAAM,SAAS,GAAG,IAAwB,CAAA;gBAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aAClC;SACF;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAtCD,sDAsCC"}
@@ -3,20 +3,18 @@ import { IExecutableSchemaDefinition } from '@graphql-tools/schema';
3
3
  import { SchemaAnalyzerService } from './schema-analyzer.service';
4
4
  import { InputTypeGeneratorService } from './input-type-generator.service';
5
5
  import { SchemaRootTypeGeneratorService } from './schema-root-type-generator.service';
6
- import { EntryReferenceResolverGenerator } from './resolver-generators/entry-reference-resolver.generator';
7
6
  import { UnionTypeResolverGenerator } from './resolver-generators/union-type-resolver-generator';
8
7
  import { ApolloContext } from '../app/api.service';
9
8
  import { SchemaValidator } from './schema-validator';
10
- import { UnionValueResolverGenerator } from './resolver-generators/union-value-resolver-generator';
9
+ import { ObjectTypeFieldDefaultValueResolverGenerator } from './resolver-generators/object-type-field-default-value-resolver-generator';
11
10
  export declare class SchemaGeneratorService {
12
11
  private readonly queriesMutationsGenerator;
13
12
  private readonly schemaAnalyzer;
14
13
  private readonly inputTypeGenerator;
15
14
  private readonly schemaRootTypeGenerator;
16
- private readonly entryReferenceResolverGenerator;
17
15
  private readonly unionTypeResolverGenerator;
18
- private readonly unionValueResolverGenerator;
16
+ private readonly objectTypeFieldDefaultValueResolverGenerator;
19
17
  private readonly schemaValidator;
20
- constructor(queriesMutationsGenerator: QueriesMutationsGeneratorService, schemaAnalyzer: SchemaAnalyzerService, inputTypeGenerator: InputTypeGeneratorService, schemaRootTypeGenerator: SchemaRootTypeGeneratorService, entryReferenceResolverGenerator: EntryReferenceResolverGenerator, unionTypeResolverGenerator: UnionTypeResolverGenerator, unionValueResolverGenerator: UnionValueResolverGenerator, schemaValidator: SchemaValidator);
18
+ constructor(queriesMutationsGenerator: QueriesMutationsGeneratorService, schemaAnalyzer: SchemaAnalyzerService, inputTypeGenerator: InputTypeGeneratorService, schemaRootTypeGenerator: SchemaRootTypeGeneratorService, unionTypeResolverGenerator: UnionTypeResolverGenerator, objectTypeFieldDefaultValueResolverGenerator: ObjectTypeFieldDefaultValueResolverGenerator, schemaValidator: SchemaValidator);
21
19
  generateSchema(context: ApolloContext): Promise<IExecutableSchemaDefinition>;
22
20
  }
@@ -4,14 +4,13 @@ exports.SchemaGeneratorService = void 0;
4
4
  const schema_1 = require("@graphql-tools/schema");
5
5
  const utils_1 = require("@graphql-tools/utils");
6
6
  class SchemaGeneratorService {
7
- constructor(queriesMutationsGenerator, schemaAnalyzer, inputTypeGenerator, schemaRootTypeGenerator, entryReferenceResolverGenerator, unionTypeResolverGenerator, unionValueResolverGenerator, schemaValidator) {
7
+ constructor(queriesMutationsGenerator, schemaAnalyzer, inputTypeGenerator, schemaRootTypeGenerator, unionTypeResolverGenerator, objectTypeFieldDefaultValueResolverGenerator, schemaValidator) {
8
8
  this.queriesMutationsGenerator = queriesMutationsGenerator;
9
9
  this.schemaAnalyzer = schemaAnalyzer;
10
10
  this.inputTypeGenerator = inputTypeGenerator;
11
11
  this.schemaRootTypeGenerator = schemaRootTypeGenerator;
12
- this.entryReferenceResolverGenerator = entryReferenceResolverGenerator;
13
12
  this.unionTypeResolverGenerator = unionTypeResolverGenerator;
14
- this.unionValueResolverGenerator = unionValueResolverGenerator;
13
+ this.objectTypeFieldDefaultValueResolverGenerator = objectTypeFieldDefaultValueResolverGenerator;
15
14
  this.schemaValidator = schemaValidator;
16
15
  }
17
16
  async generateSchema(context) {
@@ -30,10 +29,6 @@ class SchemaGeneratorService {
30
29
  const generatedQueriesMutations = this.queriesMutationsGenerator.generateFromAnalyzedSchema(schemaAnalyzerResult.entryDirectiveTypes);
31
30
  const generatedTypeNameQuery = this.queriesMutationsGenerator.generateTypeNameQuery();
32
31
  const generatedEntryReferenceResolvers = {};
33
- for (const type of schemaAnalyzerResult.typesWithEntryReferences) {
34
- generatedEntryReferenceResolvers[type.type.name] =
35
- this.entryReferenceResolverGenerator.createResolver(context, type);
36
- }
37
32
  const generatedObjectInputTypeStrings = this.inputTypeGenerator.generateObjectInputTypeStrings(schemaAnalyzerResult.objectTypes);
38
33
  const generatedUnionInputTypeStrings = this.inputTypeGenerator.generateUnionInputTypeStrings(schemaAnalyzerResult.unionTypes);
39
34
  const generatedSchemaRootTypeStrings = this.schemaRootTypeGenerator.generateSchemaRootTypeStrings(generatedQueriesMutations, generatedTypeNameQuery);
@@ -52,10 +47,10 @@ class SchemaGeneratorService {
52
47
  __resolveType: this.unionTypeResolverGenerator.createResolver(),
53
48
  };
54
49
  }
55
- const generatedUnionValueResolvers = this.unionValueResolverGenerator.createResolver(schema);
50
+ const generatedObjectTypeFieldDefaultValueResolvers = this.objectTypeFieldDefaultValueResolverGenerator.createResolver(schema);
56
51
  const generatedQueryResolvers = {};
57
52
  const generatedMutationResolvers = {};
58
- generatedQueriesMutations.forEach(function (element) {
53
+ for (const element of generatedQueriesMutations) {
59
54
  generatedQueryResolvers[element.queryAll.name] = element.queryAll.resolver;
60
55
  generatedQueryResolvers[element.queryAllMeta.name] =
61
56
  element.queryAllMeta.resolver;
@@ -67,7 +62,7 @@ class SchemaGeneratorService {
67
62
  element.updateMutation.resolver;
68
63
  generatedMutationResolvers[element.deleteMutation.name] =
69
64
  element.deleteMutation.resolver;
70
- });
65
+ }
71
66
  generatedQueryResolvers[generatedTypeNameQuery.name] =
72
67
  generatedTypeNameQuery.resolver;
73
68
  const allGeneratedResolvers = {
@@ -77,8 +72,8 @@ class SchemaGeneratorService {
77
72
  for (const typeName of Object.keys(generatedUnionTypeResolvers)) {
78
73
  allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_a = allGeneratedResolvers[typeName]) !== null && _a !== void 0 ? _a : {})), generatedUnionTypeResolvers[typeName]);
79
74
  }
80
- for (const typeName of Object.keys(generatedUnionValueResolvers)) {
81
- allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_b = allGeneratedResolvers[typeName]) !== null && _b !== void 0 ? _b : {})), generatedUnionValueResolvers[typeName]);
75
+ for (const typeName of Object.keys(generatedObjectTypeFieldDefaultValueResolvers)) {
76
+ allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_b = allGeneratedResolvers[typeName]) !== null && _b !== void 0 ? _b : {})), generatedObjectTypeFieldDefaultValueResolvers[typeName]);
82
77
  }
83
78
  for (const typeName of Object.keys(generatedEntryReferenceResolvers)) {
84
79
  allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_c = allGeneratedResolvers[typeName]) !== null && _c !== void 0 ? _c : {})), generatedEntryReferenceResolvers[typeName]);
@@ -1 +1 @@
1
- {"version":3,"file":"schema-generator.service.js","sourceRoot":"","sources":["../../src/graphql/schema-generator.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-generator.service.js","sourceRoot":"","sources":["../../src/graphql/schema-generator.service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,14 @@
1
- import { GraphQLField, GraphQLNullableType, GraphQLObjectType } from 'graphql';
1
+ import { GraphQLNullableType, GraphQLObjectType } from 'graphql';
2
+ import { ApolloContext } from '../../app/api.service';
3
+ import { PersistenceService } from '../../persistence/persistence.service';
4
+ import { UnionTypeUtil } from './union-type-util';
5
+ import { EntryTypeUtil } from './entry-type-util';
2
6
  export declare class EntryReferenceUtil {
3
- getFieldsWithReferenceToTypeWithEntryDirective(objectType: GraphQLObjectType): GraphQLField<any, any>[];
4
- buildsOnTypeWithEntryDirective(type: GraphQLNullableType): boolean;
5
- hasEntryDirective(type: GraphQLObjectType): boolean;
7
+ private readonly persistence;
8
+ private readonly entryTypeUtil;
9
+ private readonly unionTypeUtil;
10
+ constructor(persistence: PersistenceService, entryTypeUtil: EntryTypeUtil, unionTypeUtil: UnionTypeUtil);
11
+ getReferencedEntryIds(rootType: GraphQLObjectType, context: ApolloContext, fieldName: string | null, type: GraphQLNullableType, data: any): Promise<string[]>;
12
+ private validateReference;
13
+ private isPermittedReferenceType;
6
14
  }
@@ -2,39 +2,123 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EntryReferenceUtil = void 0;
4
4
  const graphql_1 = require("graphql");
5
+ const GraphQLError_1 = require("graphql/error/GraphQLError");
5
6
  class EntryReferenceUtil {
6
- getFieldsWithReferenceToTypeWithEntryDirective(objectType) {
7
- const fields = [];
8
- for (const fieldsKey in objectType.getFields()) {
9
- const field = objectType.getFields()[fieldsKey];
10
- if (this.buildsOnTypeWithEntryDirective(field.type)) {
11
- fields.push(field);
12
- }
13
- }
14
- return fields;
7
+ constructor(persistence, entryTypeUtil, unionTypeUtil) {
8
+ this.persistence = persistence;
9
+ this.entryTypeUtil = entryTypeUtil;
10
+ this.unionTypeUtil = unionTypeUtil;
15
11
  }
16
- buildsOnTypeWithEntryDirective(type) {
12
+ async getReferencedEntryIds(rootType, context, fieldName, type, data) {
13
+ var _a;
17
14
  if ((0, graphql_1.isNonNullType)(type)) {
18
- return this.buildsOnTypeWithEntryDirective(type.ofType);
15
+ return this.getReferencedEntryIds(rootType, context, fieldName, type.ofType, data);
19
16
  }
20
17
  else if ((0, graphql_1.isListType)(type)) {
21
- return this.buildsOnTypeWithEntryDirective(type.ofType);
18
+ let referencedEntryIds = [];
19
+ for (const element of data) {
20
+ referencedEntryIds = [
21
+ ...referencedEntryIds,
22
+ ...(await this.getReferencedEntryIds(rootType, context, fieldName, type.ofType, element)),
23
+ ];
24
+ }
25
+ referencedEntryIds = [...new Set(referencedEntryIds)];
26
+ return referencedEntryIds;
22
27
  }
23
28
  else if ((0, graphql_1.isUnionType)(type)) {
24
- return (type
29
+ if (this.entryTypeUtil.isUnionOfEntryTypes(type)) {
30
+ await this.validateReference(context, '', type, data);
31
+ return [data.id];
32
+ }
33
+ const unionTypeName = this.unionTypeUtil.getUnionTypeNameFromFieldValue(data);
34
+ const unionType = type
25
35
  .getTypes()
26
- .filter((unionType) => this.buildsOnTypeWithEntryDirective(unionType))
27
- .length > 0);
36
+ .find((type) => type.name === unionTypeName);
37
+ if (!unionType) {
38
+ throw new Error(`Type "${unionTypeName}" found in field data is not a valid type for union type "${type.name}".`);
39
+ }
40
+ const unionValue = this.unionTypeUtil.getUnionValue(data);
41
+ return this.getReferencedEntryIds(rootType, context, fieldName, unionType, unionValue);
28
42
  }
29
43
  else if ((0, graphql_1.isObjectType)(type)) {
30
- return this.hasEntryDirective(type);
44
+ if (type.name !== rootType.name &&
45
+ this.entryTypeUtil.hasEntryDirective(type)) {
46
+ await this.validateReference(context, fieldName !== null && fieldName !== void 0 ? fieldName : '', type, data);
47
+ return [data.id];
48
+ }
49
+ else {
50
+ let referencedEntryIds = [];
51
+ for (const [fieldsKey, field] of Object.entries(type.getFields())) {
52
+ const fieldValue = (_a = data[fieldsKey]) !== null && _a !== void 0 ? _a : undefined;
53
+ if (fieldValue !== undefined) {
54
+ const nestedResult = await this.getReferencedEntryIds(rootType, context, fieldsKey, field.type, fieldValue);
55
+ referencedEntryIds = [...referencedEntryIds, ...nestedResult];
56
+ }
57
+ }
58
+ referencedEntryIds = [...new Set(referencedEntryIds)];
59
+ return referencedEntryIds;
60
+ }
31
61
  }
32
- return false;
62
+ return [];
33
63
  }
34
- hasEntryDirective(type) {
35
- var _a;
36
- return (!!type.astNode &&
37
- ((_a = type.astNode.directives) === null || _a === void 0 ? void 0 : _a.find((directive) => directive.name.value === 'Entry')) !== undefined);
64
+ async validateReference(context, fieldName, fieldType, fieldValue) {
65
+ if ((0, graphql_1.isNonNullType)(fieldType)) {
66
+ await this.validateReference(context, fieldName, fieldType.ofType, fieldValue);
67
+ return;
68
+ }
69
+ else if ((0, graphql_1.isListType)(fieldType)) {
70
+ if (!Array.isArray(fieldValue)) {
71
+ throw new Error(`Expected array value in field "${fieldName}"`);
72
+ }
73
+ for (const fieldListElement of fieldValue) {
74
+ await this.validateReference(context, fieldName, fieldType.ofType, fieldListElement);
75
+ }
76
+ return;
77
+ }
78
+ else if ((0, graphql_1.isUnionType)(fieldType) || (0, graphql_1.isObjectType)(fieldType)) {
79
+ if (!('id' in fieldValue)) {
80
+ throw new Error('Expected key "id"');
81
+ }
82
+ const referencedId = fieldValue.id;
83
+ let referencedTypeName;
84
+ try {
85
+ referencedTypeName = await this.persistence.getTypeById(context.gitAdapter, context.getCurrentRef(), referencedId);
86
+ }
87
+ catch (error) {
88
+ throw new GraphQLError_1.GraphQLError(`Reference with id "${referencedId}" points to non-existing entry`, {
89
+ extensions: {
90
+ code: 'BAD_USER_INPUT',
91
+ fieldName: fieldName,
92
+ },
93
+ });
94
+ }
95
+ if (!this.isPermittedReferenceType(referencedTypeName, fieldType)) {
96
+ throw new GraphQLError_1.GraphQLError(`Reference with id "${referencedId}" points to entry of incompatible type`, {
97
+ extensions: {
98
+ code: 'BAD_USER_INPUT',
99
+ fieldName: fieldName,
100
+ },
101
+ });
102
+ }
103
+ }
104
+ }
105
+ isPermittedReferenceType(referencedTypeName, fieldType) {
106
+ if ((0, graphql_1.isNonNullType)(fieldType)) {
107
+ return this.isPermittedReferenceType(referencedTypeName, fieldType.ofType);
108
+ }
109
+ else if ((0, graphql_1.isListType)(fieldType)) {
110
+ return this.isPermittedReferenceType(referencedTypeName, fieldType.ofType);
111
+ }
112
+ else if ((0, graphql_1.isUnionType)(fieldType)) {
113
+ return fieldType
114
+ .getTypes()
115
+ .map((concreteType) => concreteType.name)
116
+ .includes(referencedTypeName);
117
+ }
118
+ else if ((0, graphql_1.isObjectType)(fieldType)) {
119
+ return fieldType.name === referencedTypeName;
120
+ }
121
+ return false;
38
122
  }
39
123
  }
40
124
  exports.EntryReferenceUtil = EntryReferenceUtil;
@@ -1 +1 @@
1
- {"version":3,"file":"entry-reference-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":";;;AAAA,qCAQgB;AAEhB,MAAa,kBAAkB;IACtB,8CAA8C,CACnD,UAA6B;QAE7B,MAAM,MAAM,GAAG,EAAE,CAAA;QACjB,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE;YAC9C,MAAM,KAAK,GAA2B,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAA;YACvE,IAAI,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aACnB;SACF;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,8BAA8B,CAAC,IAAyB;QAC7D,IAAI,IAAA,uBAAa,EAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,CACL,IAAI;iBACD,QAAQ,EAAE;iBACV,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;iBACrE,MAAM,GAAG,CAAC,CACd,CAAA;SACF;aAAM,IAAI,IAAA,sBAAY,EAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;SACpC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,iBAAiB,CAAC,IAAuB;;QAC9C,OAAO,CACL,CAAC,CAAC,IAAI,CAAC,OAAO;YACd,CAAA,MAAA,IAAI,CAAC,OAAO,CAAC,UAAU,0CAAE,IAAI,CAC3B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAChD,MAAK,SAAS,CAChB,CAAA;IACH,CAAC;CACF;AAxCD,gDAwCC"}
1
+ {"version":3,"file":"entry-reference-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { GraphQLNullableType, GraphQLObjectType, GraphQLUnionType } from 'graphql';
2
+ export declare class EntryTypeUtil {
3
+ buildsOnTypeWithEntryDirective(type: GraphQLNullableType): boolean;
4
+ hasEntryDirective(type: GraphQLObjectType): boolean;
5
+ isUnionOfEntryTypes(type: GraphQLUnionType): boolean;
6
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntryTypeUtil = void 0;
4
+ const graphql_1 = require("graphql");
5
+ class EntryTypeUtil {
6
+ buildsOnTypeWithEntryDirective(type) {
7
+ if ((0, graphql_1.isNonNullType)(type)) {
8
+ return this.buildsOnTypeWithEntryDirective(type.ofType);
9
+ }
10
+ else if ((0, graphql_1.isListType)(type)) {
11
+ return this.buildsOnTypeWithEntryDirective(type.ofType);
12
+ }
13
+ else if ((0, graphql_1.isUnionType)(type)) {
14
+ return this.isUnionOfEntryTypes(type);
15
+ }
16
+ else if ((0, graphql_1.isObjectType)(type)) {
17
+ return this.hasEntryDirective(type);
18
+ }
19
+ return false;
20
+ }
21
+ hasEntryDirective(type) {
22
+ var _a;
23
+ return (!!type.astNode &&
24
+ ((_a = type.astNode.directives) === null || _a === void 0 ? void 0 : _a.find((directive) => directive.name.value === 'Entry')) !== undefined);
25
+ }
26
+ isUnionOfEntryTypes(type) {
27
+ return (type
28
+ .getTypes()
29
+ .filter((unionType) => this.buildsOnTypeWithEntryDirective(unionType))
30
+ .length > 0);
31
+ }
32
+ }
33
+ exports.EntryTypeUtil = EntryTypeUtil;
34
+ //# sourceMappingURL=entry-type-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-type-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/entry-type-util.ts"],"names":[],"mappings":";;;AAAA,qCAQgB;AAEhB,MAAa,aAAa;IACjB,8BAA8B,CAAC,IAAyB;QAC7D,IAAI,IAAA,uBAAa,EAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;SACtC;aAAM,IAAI,IAAA,sBAAY,EAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;SACpC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,iBAAiB,CAAC,IAAuB;;QAC9C,OAAO,CACL,CAAC,CAAC,IAAI,CAAC,OAAO;YACd,CAAA,MAAA,IAAI,CAAC,OAAO,CAAC,UAAU,0CAAE,IAAI,CAC3B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAChD,MAAK,SAAS,CAChB,CAAA;IACH,CAAC;IAEM,mBAAmB,CAAC,IAAsB;QAC/C,OAAO,CACL,IAAI;aACD,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;aACrE,MAAM,GAAG,CAAC,CACd,CAAA;IACH,CAAC;CACF;AA/BD,sCA+BC"}
@@ -0,0 +1,5 @@
1
+ import { EntryData } from '@commitspark/git-adapter';
2
+ export declare class UnionTypeUtil {
3
+ getUnionTypeNameFromFieldValue(fieldValue: any): string;
4
+ getUnionValue(fieldValue: any): EntryData;
5
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnionTypeUtil = void 0;
4
+ class UnionTypeUtil {
5
+ getUnionTypeNameFromFieldValue(fieldValue) {
6
+ if (typeof fieldValue !== 'object') {
7
+ throw new Error('Expected object as union value');
8
+ }
9
+ const firstKey = Object.keys(fieldValue)[0];
10
+ return firstKey.slice(0, 1).toUpperCase() + firstKey.slice(1);
11
+ }
12
+ getUnionValue(fieldValue) {
13
+ if (typeof fieldValue !== 'object') {
14
+ throw new Error('Expected object as union value');
15
+ }
16
+ const firstKey = Object.keys(fieldValue)[0];
17
+ return fieldValue[firstKey];
18
+ }
19
+ }
20
+ exports.UnionTypeUtil = UnionTypeUtil;
21
+ //# sourceMappingURL=union-type-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union-type-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/union-type-util.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IACjB,8BAA8B,CAAC,UAAe;QACnD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QAID,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;IAEM,aAAa,CAAC,UAAe;QAClC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC7B,CAAC;CACF;AApBD,sCAoBC"}
@@ -1,14 +1,7 @@
1
- import { GitAdapter } from '@commitspark/git-adapter';
1
+ import { Entry, GitAdapter } from '@commitspark/git-adapter';
2
2
  export declare class PersistenceService {
3
3
  getTypeById(gitAdapter: GitAdapter, commitHash: string, id: string): Promise<string>;
4
4
  findById(gitAdapter: GitAdapter, commitHash: string, id: string): Promise<Entry>;
5
5
  findByType(gitAdapter: GitAdapter, commitHash: string, type: string): Promise<Entry[]>;
6
6
  findByTypeId(gitAdapter: GitAdapter, commitHash: string, type: string, id: string): Promise<Entry>;
7
- createType(gitAdapter: GitAdapter, branch: string, commitHash: string, typeName: string, id: string, data: Entry, message: string): Promise<CommitResult>;
8
- updateByTypeId(gitAdapter: GitAdapter, branch: string, commitHash: string, type: string, id: string, data: Entry, message: string): Promise<CommitResult>;
9
- deleteByTypeId(gitAdapter: GitAdapter, branch: string, commitHash: string, type: string, id: string, message: string): Promise<CommitResult>;
10
7
  }
11
- export interface CommitResult {
12
- ref: string;
13
- }
14
- export type Entry = Record<string, unknown>;
@@ -4,110 +4,45 @@ exports.PersistenceService = void 0;
4
4
  const GraphQLError_1 = require("graphql/error/GraphQLError");
5
5
  class PersistenceService {
6
6
  async getTypeById(gitAdapter, commitHash, id) {
7
- const allEntries = await gitAdapter.getContentEntries(commitHash);
8
- const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
7
+ const allEntries = await gitAdapter.getEntries(commitHash);
8
+ const requestedEntry = allEntries.find((entry) => entry.id === id);
9
9
  if (requestedEntry === undefined) {
10
- throw new Error(`Not found: ${id}`);
10
+ throw new GraphQLError_1.GraphQLError(`Not found: ${id}`, {
11
+ extensions: {
12
+ code: 'NOT_FOUND',
13
+ },
14
+ });
11
15
  }
12
16
  return requestedEntry.metadata.type;
13
17
  }
14
18
  async findById(gitAdapter, commitHash, id) {
15
- const allEntries = await gitAdapter.getContentEntries(commitHash);
16
- const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
19
+ const allEntries = await gitAdapter.getEntries(commitHash);
20
+ const requestedEntry = allEntries.find((entry) => entry.id === id);
17
21
  if (requestedEntry === undefined) {
18
- throw new Error(`Not found: ${id}`);
22
+ throw new GraphQLError_1.GraphQLError(`Not found: ${id}`, {
23
+ extensions: {
24
+ code: 'NOT_FOUND',
25
+ },
26
+ });
19
27
  }
20
- return Object.assign(Object.assign({}, requestedEntry.data), { id: id });
28
+ return requestedEntry;
21
29
  }
22
30
  async findByType(gitAdapter, commitHash, type) {
23
- const allEntries = await gitAdapter.getContentEntries(commitHash);
24
- return allEntries
25
- .filter((contentEntry) => contentEntry.metadata.type === type)
26
- .map((value) => (Object.assign(Object.assign({}, value.data), { id: value.id })));
31
+ const allEntries = await gitAdapter.getEntries(commitHash);
32
+ return allEntries.filter((entry) => entry.metadata.type === type);
27
33
  }
28
34
  async findByTypeId(gitAdapter, commitHash, type, id) {
29
- const allEntries = await gitAdapter.getContentEntries(commitHash);
30
- const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
31
- if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
32
- throw new Error(`Not found: ${type}, ${id}`);
33
- }
34
- return Object.assign(Object.assign({}, requestedEntry.data), { id: id });
35
- }
36
- async createType(gitAdapter, branch, commitHash, typeName, id, data, message) {
37
- const regex = /^[a-zA-Z0-9\-_]{1,250}$/;
38
- if (!id.match(regex)) {
39
- throw new GraphQLError_1.GraphQLError(`"id" does not match regex "${regex}"`, {
35
+ const allEntries = await gitAdapter.getEntries(commitHash);
36
+ const requestedEntry = allEntries.find((entry) => entry.id === id && entry.metadata.type === type);
37
+ if (requestedEntry === undefined) {
38
+ throw new GraphQLError_1.GraphQLError(`No entry of type "${type}" with id "${id}" exists`, {
40
39
  extensions: {
41
40
  code: 'BAD_USER_INPUT',
42
41
  argumentName: 'id',
43
42
  },
44
43
  });
45
44
  }
46
- const commit = await gitAdapter.createCommit({
47
- ref: branch,
48
- parentSha: commitHash,
49
- contentEntries: [
50
- {
51
- id: id,
52
- metadata: {
53
- type: typeName,
54
- },
55
- data: data,
56
- deletion: false,
57
- },
58
- ],
59
- message: message,
60
- });
61
- return {
62
- ref: commit.ref,
63
- };
64
- }
65
- async updateByTypeId(gitAdapter, branch, commitHash, type, id, data, message) {
66
- const allEntries = await gitAdapter.getContentEntries(commitHash);
67
- const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
68
- if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
69
- throw new Error(`Not found: ${type}, ${id}`);
70
- }
71
- const newData = Object.assign(Object.assign({}, requestedEntry.data), data);
72
- const commit = await gitAdapter.createCommit({
73
- ref: branch,
74
- parentSha: commitHash,
75
- contentEntries: [
76
- {
77
- id: id,
78
- metadata: requestedEntry.metadata,
79
- data: newData,
80
- deletion: false,
81
- },
82
- ],
83
- message: message,
84
- });
85
- return {
86
- ref: commit.ref,
87
- };
88
- }
89
- async deleteByTypeId(gitAdapter, branch, commitHash, type, id, message) {
90
- const allEntries = await gitAdapter.getContentEntries(commitHash);
91
- const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
92
- if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
93
- throw new Error(`Not found: ${type}, ${id}`);
94
- }
95
- const commit = await gitAdapter.createCommit({
96
- ref: branch,
97
- parentSha: commitHash,
98
- contentEntries: [
99
- {
100
- id: id,
101
- metadata: requestedEntry.metadata,
102
- data: {},
103
- deletion: true,
104
- },
105
- ],
106
- message: message,
107
- });
108
- return {
109
- ref: commit.ref,
110
- };
45
+ return requestedEntry;
111
46
  }
112
47
  }
113
48
  exports.PersistenceService = PersistenceService;
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.service.js","sourceRoot":"","sources":["../../src/persistence/persistence.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.service.js","sourceRoot":"","sources":["../../src/persistence/persistence.service.ts"],"names":[],"mappings":";;;AACA,6DAAyD;AAEzD,MAAa,kBAAkB;IACtB,KAAK,CAAC,WAAW,CACtB,UAAsB,EACtB,UAAkB,EAClB,EAAU;QAEV,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,2BAAY,CAAC,cAAc,EAAE,EAAE,EAAE;gBACzC,UAAU,EAAE;oBACV,IAAI,EAAE,WAAW;iBAClB;aACF,CAAC,CAAA;SACH;QAED,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAA;IACrC,CAAC;IAEM,KAAK,CAAC,QAAQ,CACnB,UAAsB,EACtB,UAAkB,EAClB,EAAU;QAEV,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,2BAAY,CAAC,cAAc,EAAE,EAAE,EAAE;gBACzC,UAAU,EAAE;oBACV,IAAI,EAAE,WAAW;iBAClB;aACF,CAAC,CAAA;SACH;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,UAAsB,EACtB,UAAkB,EAClB,IAAY;QAEZ,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC1E,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,UAAsB,EACtB,UAAkB,EAClB,IAAY,EACZ,EAAU;QAEV,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CACpC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAClE,CAAA;QACD,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,2BAAY,CACpB,qBAAqB,IAAI,cAAc,EAAE,UAAU,EACnD;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,gBAAgB;oBACtB,YAAY,EAAE,IAAI;iBACnB;aACF,CACF,CAAA;SACF;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;CACF;AAtED,gDAsEC"}