@commitspark/graphql-api 0.7.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 (98) hide show
  1. package/.eslintrc.js +24 -0
  2. package/.prettierrc +6 -0
  3. package/CHANGELOG.md +83 -0
  4. package/LICENSE +15 -0
  5. package/README.md +223 -0
  6. package/dist/app/api.service.d.ts +31 -0
  7. package/dist/app/api.service.js +60 -0
  8. package/dist/app/api.service.js.map +1 -0
  9. package/dist/container.d.ts +2 -0
  10. package/dist/container.js +44 -0
  11. package/dist/container.js.map +1 -0
  12. package/dist/graphql/apollo-config-factory.service.d.ts +8 -0
  13. package/dist/graphql/apollo-config-factory.service.js +20 -0
  14. package/dist/graphql/apollo-config-factory.service.js.map +1 -0
  15. package/dist/graphql/input-type-generator.service.d.ts +12 -0
  16. package/dist/graphql/input-type-generator.service.js +86 -0
  17. package/dist/graphql/input-type-generator.service.js.map +1 -0
  18. package/dist/graphql/queries-mutations-generator.service.d.ts +39 -0
  19. package/dist/graphql/queries-mutations-generator.service.js +82 -0
  20. package/dist/graphql/queries-mutations-generator.service.js.map +1 -0
  21. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.d.ts +12 -0
  22. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js +29 -0
  23. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js.map +1 -0
  24. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.d.ts +8 -0
  25. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js +17 -0
  26. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js.map +1 -0
  27. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.d.ts +8 -0
  28. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js +19 -0
  29. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +1 -0
  30. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.d.ts +8 -0
  31. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js +17 -0
  32. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js.map +1 -0
  33. package/dist/graphql/resolver-generators/query-all-resolver-generator.d.ts +8 -0
  34. package/dist/graphql/resolver-generators/query-all-resolver-generator.js +15 -0
  35. package/dist/graphql/resolver-generators/query-all-resolver-generator.js.map +1 -0
  36. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.d.ts +8 -0
  37. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js +15 -0
  38. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js.map +1 -0
  39. package/dist/graphql/resolver-generators/query-count-all-resolver-generator.d.ts +9 -0
  40. package/dist/graphql/resolver-generators/query-count-all-resolver-generator.js +17 -0
  41. package/dist/graphql/resolver-generators/query-count-all-resolver-generator.js.map +1 -0
  42. package/dist/graphql/resolver-generators/query-type-by-id-resolver-generator.d.ts +8 -0
  43. package/dist/graphql/resolver-generators/query-type-by-id-resolver-generator.js +15 -0
  44. package/dist/graphql/resolver-generators/query-type-by-id-resolver-generator.js.map +1 -0
  45. package/dist/graphql/resolver-generators/union-type-resolver-generator.d.ts +10 -0
  46. package/dist/graphql/resolver-generators/union-type-resolver-generator.js +21 -0
  47. package/dist/graphql/resolver-generators/union-type-resolver-generator.js.map +1 -0
  48. package/dist/graphql/resolver-generators/union-value-resolver-generator.d.ts +13 -0
  49. package/dist/graphql/resolver-generators/union-value-resolver-generator.js +80 -0
  50. package/dist/graphql/resolver-generators/union-value-resolver-generator.js.map +1 -0
  51. package/dist/graphql/schema-analyzer.service.d.ts +19 -0
  52. package/dist/graphql/schema-analyzer.service.js +52 -0
  53. package/dist/graphql/schema-analyzer.service.js.map +1 -0
  54. package/dist/graphql/schema-generator.service.d.ts +22 -0
  55. package/dist/graphql/schema-generator.service.js +99 -0
  56. package/dist/graphql/schema-generator.service.js.map +1 -0
  57. package/dist/graphql/schema-root-type-generator.service.d.ts +4 -0
  58. package/dist/graphql/schema-root-type-generator.service.js +37 -0
  59. package/dist/graphql/schema-root-type-generator.service.js.map +1 -0
  60. package/dist/graphql/schema-utils/entry-reference-util.d.ts +7 -0
  61. package/dist/graphql/schema-utils/entry-reference-util.js +42 -0
  62. package/dist/graphql/schema-utils/entry-reference-util.js.map +1 -0
  63. package/dist/graphql/schema-validator.d.ts +5 -0
  64. package/dist/graphql/schema-validator.js +33 -0
  65. package/dist/graphql/schema-validator.js.map +1 -0
  66. package/dist/index.d.ts +3 -0
  67. package/dist/index.js +11 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/persistence/persistence.service.d.ts +17 -0
  70. package/dist/persistence/persistence.service.js +110 -0
  71. package/dist/persistence/persistence.service.js.map +1 -0
  72. package/dist/tsconfig.build.tsbuildinfo +1 -0
  73. package/package.json +34 -0
  74. package/src/app/api.service.ts +113 -0
  75. package/src/container.ts +92 -0
  76. package/src/graphql/apollo-config-factory.service.ts +21 -0
  77. package/src/graphql/input-type-generator.service.ts +114 -0
  78. package/src/graphql/queries-mutations-generator.service.ts +155 -0
  79. package/src/graphql/resolver-generators/entry-reference-resolver.generator.ts +71 -0
  80. package/src/graphql/resolver-generators/mutation-create-resolver-generator.ts +38 -0
  81. package/src/graphql/resolver-generators/mutation-delete-resolver-generator.ts +35 -0
  82. package/src/graphql/resolver-generators/mutation-update.resolver-generator.ts +39 -0
  83. package/src/graphql/resolver-generators/query-all-resolver-generator.ts +27 -0
  84. package/src/graphql/resolver-generators/query-by-id-resolver-generator.ts +23 -0
  85. package/src/graphql/resolver-generators/query-count-all-resolver-generator.ts +29 -0
  86. package/src/graphql/resolver-generators/query-type-by-id-resolver-generator.ts +27 -0
  87. package/src/graphql/resolver-generators/union-type-resolver-generator.ts +40 -0
  88. package/src/graphql/resolver-generators/union-value-resolver-generator.ts +116 -0
  89. package/src/graphql/schema-analyzer.service.ts +70 -0
  90. package/src/graphql/schema-generator.service.ts +190 -0
  91. package/src/graphql/schema-root-type-generator.service.ts +42 -0
  92. package/src/graphql/schema-utils/entry-reference-util.ts +49 -0
  93. package/src/graphql/schema-validator.ts +41 -0
  94. package/src/index.ts +8 -0
  95. package/src/persistence/persistence.service.ts +183 -0
  96. package/tsconfig.build.json +10 -0
  97. package/tsconfig.json +18 -0
  98. package/webpack.config.js +25 -0
@@ -0,0 +1,22 @@
1
+ import { QueriesMutationsGeneratorService } from './queries-mutations-generator.service';
2
+ import { IExecutableSchemaDefinition } from '@graphql-tools/schema';
3
+ import { SchemaAnalyzerService } from './schema-analyzer.service';
4
+ import { InputTypeGeneratorService } from './input-type-generator.service';
5
+ import { SchemaRootTypeGeneratorService } from './schema-root-type-generator.service';
6
+ import { EntryReferenceResolverGenerator } from './resolver-generators/entry-reference-resolver.generator';
7
+ import { UnionTypeResolverGenerator } from './resolver-generators/union-type-resolver-generator';
8
+ import { ApolloContext } from '../app/api.service';
9
+ import { SchemaValidator } from './schema-validator';
10
+ import { UnionValueResolverGenerator } from './resolver-generators/union-value-resolver-generator';
11
+ export declare class SchemaGeneratorService {
12
+ private readonly queriesMutationsGenerator;
13
+ private readonly schemaAnalyzer;
14
+ private readonly inputTypeGenerator;
15
+ private readonly schemaRootTypeGenerator;
16
+ private readonly entryReferenceResolverGenerator;
17
+ private readonly unionTypeResolverGenerator;
18
+ private readonly unionValueResolverGenerator;
19
+ private readonly schemaValidator;
20
+ constructor(queriesMutationsGenerator: QueriesMutationsGeneratorService, schemaAnalyzer: SchemaAnalyzerService, inputTypeGenerator: InputTypeGeneratorService, schemaRootTypeGenerator: SchemaRootTypeGeneratorService, entryReferenceResolverGenerator: EntryReferenceResolverGenerator, unionTypeResolverGenerator: UnionTypeResolverGenerator, unionValueResolverGenerator: UnionValueResolverGenerator, schemaValidator: SchemaValidator);
21
+ generateSchema(context: ApolloContext): Promise<IExecutableSchemaDefinition>;
22
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaGeneratorService = void 0;
4
+ const schema_1 = require("@graphql-tools/schema");
5
+ const utils_1 = require("@graphql-tools/utils");
6
+ class SchemaGeneratorService {
7
+ constructor(queriesMutationsGenerator, schemaAnalyzer, inputTypeGenerator, schemaRootTypeGenerator, entryReferenceResolverGenerator, unionTypeResolverGenerator, unionValueResolverGenerator, schemaValidator) {
8
+ this.queriesMutationsGenerator = queriesMutationsGenerator;
9
+ this.schemaAnalyzer = schemaAnalyzer;
10
+ this.inputTypeGenerator = inputTypeGenerator;
11
+ this.schemaRootTypeGenerator = schemaRootTypeGenerator;
12
+ this.entryReferenceResolverGenerator = entryReferenceResolverGenerator;
13
+ this.unionTypeResolverGenerator = unionTypeResolverGenerator;
14
+ this.unionValueResolverGenerator = unionValueResolverGenerator;
15
+ this.schemaValidator = schemaValidator;
16
+ }
17
+ async generateSchema(context) {
18
+ var _a, _b, _c;
19
+ const originalSchemaString = await context.gitAdapter.getSchema(context.getCurrentRef());
20
+ const schema = (0, schema_1.makeExecutableSchema)({
21
+ typeDefs: originalSchemaString,
22
+ });
23
+ const validationResult = this.schemaValidator.getValidationResult(schema);
24
+ if (validationResult.length > 0) {
25
+ throw new Error(validationResult.join('\n'));
26
+ }
27
+ const schemaAnalyzerResult = this.schemaAnalyzer.analyzeSchema(schema);
28
+ const filteredOriginalSchemaString = (0, utils_1.printSchemaWithDirectives)(schema);
29
+ const generatedIdInputTypeStrings = this.inputTypeGenerator.generateIdInputTypeStrings(schemaAnalyzerResult);
30
+ const generatedQueriesMutations = this.queriesMutationsGenerator.generateFromAnalyzedSchema(schemaAnalyzerResult.entryDirectiveTypes);
31
+ const generatedTypeNameQuery = this.queriesMutationsGenerator.generateTypeNameQuery();
32
+ let generatedEntryReferenceResolvers = {};
33
+ for (const type of schemaAnalyzerResult.typesWithEntryReferences) {
34
+ generatedEntryReferenceResolvers[type.type.name] =
35
+ this.entryReferenceResolverGenerator.createResolver(context, type);
36
+ }
37
+ const generatedObjectInputTypeStrings = this.inputTypeGenerator.generateObjectInputTypeStrings(schemaAnalyzerResult.objectTypes);
38
+ const generatedUnionInputTypeStrings = this.inputTypeGenerator.generateUnionInputTypeStrings(schemaAnalyzerResult.unionTypes);
39
+ const generatedSchemaRootTypeStrings = this.schemaRootTypeGenerator.generateSchemaRootTypeStrings(generatedQueriesMutations, generatedTypeNameQuery);
40
+ const generatedSchemaString = 'schema {\n query: Query\n mutation: Mutation\n}\n\n' +
41
+ generatedSchemaRootTypeStrings +
42
+ '\n' +
43
+ 'type ListMetadata {\n' +
44
+ ' count: Int!\n' +
45
+ '}\n\n' +
46
+ 'type DeletionResult {\n' +
47
+ ' id: ID\n' +
48
+ '}\n';
49
+ const generatedUnionTypeResolvers = {};
50
+ for (const unionType of schemaAnalyzerResult.unionTypes) {
51
+ generatedUnionTypeResolvers[unionType.name] = {
52
+ __resolveType: this.unionTypeResolverGenerator.createResolver(),
53
+ };
54
+ }
55
+ const generatedUnionValueResolvers = this.unionValueResolverGenerator.createResolver(schema);
56
+ const generatedQueryResolvers = {};
57
+ const generatedMutationResolvers = {};
58
+ generatedQueriesMutations.forEach(function (element) {
59
+ generatedQueryResolvers[element.queryAll.name] = element.queryAll.resolver;
60
+ generatedQueryResolvers[element.queryAllMeta.name] =
61
+ element.queryAllMeta.resolver;
62
+ generatedQueryResolvers[element.queryById.name] =
63
+ element.queryById.resolver;
64
+ generatedMutationResolvers[element.createMutation.name] =
65
+ element.createMutation.resolver;
66
+ generatedMutationResolvers[element.updateMutation.name] =
67
+ element.updateMutation.resolver;
68
+ generatedMutationResolvers[element.deleteMutation.name] =
69
+ element.deleteMutation.resolver;
70
+ });
71
+ generatedQueryResolvers[generatedTypeNameQuery.name] =
72
+ generatedTypeNameQuery.resolver;
73
+ const allGeneratedResolvers = {
74
+ Query: generatedQueryResolvers,
75
+ Mutation: generatedMutationResolvers,
76
+ };
77
+ for (const typeName of Object.keys(generatedUnionTypeResolvers)) {
78
+ allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_a = allGeneratedResolvers[typeName]) !== null && _a !== void 0 ? _a : {})), generatedUnionTypeResolvers[typeName]);
79
+ }
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]);
82
+ }
83
+ for (const typeName of Object.keys(generatedEntryReferenceResolvers)) {
84
+ allGeneratedResolvers[typeName] = Object.assign(Object.assign({}, ((_c = allGeneratedResolvers[typeName]) !== null && _c !== void 0 ? _c : {})), generatedEntryReferenceResolvers[typeName]);
85
+ }
86
+ return {
87
+ typeDefs: [
88
+ filteredOriginalSchemaString,
89
+ generatedSchemaString,
90
+ generatedIdInputTypeStrings.join('\n'),
91
+ generatedObjectInputTypeStrings.join('\n'),
92
+ generatedUnionInputTypeStrings.join('\n'),
93
+ ],
94
+ resolvers: allGeneratedResolvers,
95
+ };
96
+ }
97
+ }
98
+ exports.SchemaGeneratorService = SchemaGeneratorService;
99
+ //# sourceMappingURL=schema-generator.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-generator.service.js","sourceRoot":"","sources":["../../src/graphql/schema-generator.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { IGeneratedQuery, IGeneratedSchema } from './queries-mutations-generator.service';
2
+ export declare class SchemaRootTypeGeneratorService {
3
+ generateSchemaRootTypeStrings(generatedSchemas: IGeneratedSchema[], typeQuery: IGeneratedQuery<Promise<string>>): string;
4
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaRootTypeGeneratorService = void 0;
4
+ class SchemaRootTypeGeneratorService {
5
+ generateSchemaRootTypeStrings(generatedSchemas, typeQuery) {
6
+ return (`type Query {\n` +
7
+ generatedSchemas
8
+ .map((generated) => ' ' + generated.queryAll.schemaString)
9
+ .join('\n') +
10
+ generatedSchemas
11
+ .map((generated) => ' ' + generated.queryAllMeta.schemaString)
12
+ .join('\n') +
13
+ generatedSchemas
14
+ .map((generated) => ' ' + generated.queryById.schemaString)
15
+ .join('\n') +
16
+ '\n' +
17
+ ` ${typeQuery.schemaString}` +
18
+ '\n' +
19
+ '}\n' +
20
+ 'type Mutation {\n' +
21
+ generatedSchemas
22
+ .map((generated) => ' ' + generated.createMutation.schemaString)
23
+ .join('\n') +
24
+ '\n' +
25
+ generatedSchemas
26
+ .map((generated) => ' ' + generated.updateMutation.schemaString)
27
+ .join('\n') +
28
+ '\n' +
29
+ generatedSchemas
30
+ .map((generated) => ' ' + generated.deleteMutation.schemaString)
31
+ .join('\n') +
32
+ '\n' +
33
+ '}\n');
34
+ }
35
+ }
36
+ exports.SchemaRootTypeGeneratorService = SchemaRootTypeGeneratorService;
37
+ //# sourceMappingURL=schema-root-type-generator.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-root-type-generator.service.js","sourceRoot":"","sources":["../../src/graphql/schema-root-type-generator.service.ts"],"names":[],"mappings":";;;AAKA,MAAa,8BAA8B;IAClC,6BAA6B,CAClC,gBAAoC,EACpC,SAA2C;QAE3C,OAAO,CACL,gBAAgB;YAChB,gBAAgB;iBACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;iBAC1D,IAAI,CAAC,IAAI,CAAC;YACb,gBAAgB;iBACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;iBAC9D,IAAI,CAAC,IAAI,CAAC;YACb,gBAAgB;iBACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;iBAC3D,IAAI,CAAC,IAAI,CAAC;YACb,IAAI;YACJ,KAAK,SAAS,CAAC,YAAY,EAAE;YAC7B,IAAI;YACJ,KAAK;YACL,mBAAmB;YACnB,gBAAgB;iBACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC;iBAChE,IAAI,CAAC,IAAI,CAAC;YACb,IAAI;YACJ,gBAAgB;iBACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC;iBAChE,IAAI,CAAC,IAAI,CAAC;YACb,IAAI;YACJ,gBAAgB;iBACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC;iBAChE,IAAI,CAAC,IAAI,CAAC;YACb,IAAI;YACJ,KAAK,CACN,CAAA;IACH,CAAC;CACF;AApCD,wEAoCC"}
@@ -0,0 +1,7 @@
1
+ import { GraphQLField, GraphQLObjectType } from 'graphql/type';
2
+ import { GraphQLNullableType } from 'graphql/type/definition';
3
+ export declare class EntryReferenceUtil {
4
+ getFieldsWithReferenceToTypeWithEntryDirective(objectType: GraphQLObjectType): GraphQLField<any, any>[];
5
+ buildsOnTypeWithEntryDirective(type: GraphQLNullableType): boolean;
6
+ hasEntryDirective(type: GraphQLObjectType): boolean;
7
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntryReferenceUtil = void 0;
4
+ const type_1 = require("graphql/type");
5
+ const definition_1 = require("graphql/type/definition");
6
+ class EntryReferenceUtil {
7
+ getFieldsWithReferenceToTypeWithEntryDirective(objectType) {
8
+ const fields = [];
9
+ for (const fieldsKey in objectType.getFields()) {
10
+ const field = objectType.getFields()[fieldsKey];
11
+ if (this.buildsOnTypeWithEntryDirective(field.type)) {
12
+ fields.push(field);
13
+ }
14
+ }
15
+ return fields;
16
+ }
17
+ buildsOnTypeWithEntryDirective(type) {
18
+ if (type instanceof type_1.GraphQLNonNull) {
19
+ return this.buildsOnTypeWithEntryDirective(type.ofType);
20
+ }
21
+ else if (type instanceof type_1.GraphQLList) {
22
+ return this.buildsOnTypeWithEntryDirective(type.ofType);
23
+ }
24
+ else if (type instanceof definition_1.GraphQLUnionType) {
25
+ return (type
26
+ .getTypes()
27
+ .filter((unionType) => this.buildsOnTypeWithEntryDirective(unionType))
28
+ .length > 0);
29
+ }
30
+ else if (type instanceof type_1.GraphQLObjectType) {
31
+ return this.hasEntryDirective(type);
32
+ }
33
+ return false;
34
+ }
35
+ hasEntryDirective(type) {
36
+ var _a;
37
+ return (!!type.astNode &&
38
+ ((_a = type.astNode.directives) === null || _a === void 0 ? void 0 : _a.find((directive) => directive.name.value === 'Entry')) !== undefined);
39
+ }
40
+ }
41
+ exports.EntryReferenceUtil = EntryReferenceUtil;
42
+ //# sourceMappingURL=entry-reference-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-reference-util.js","sourceRoot":"","sources":["../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":";;;AAAA,uCAKqB;AACrB,wDAA+E;AAE/E,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,IAAI,YAAY,qBAAc,EAAE;YAClC,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAI,YAAY,kBAAW,EAAE;YACtC,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACxD;aAAM,IAAI,IAAI,YAAY,6BAAgB,EAAE;YAC3C,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,IAAI,YAAY,wBAAiB,EAAE;YAC5C,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"}
@@ -0,0 +1,5 @@
1
+ import { GraphQLSchema } from 'graphql';
2
+ export declare class SchemaValidator {
3
+ getValidationResult(schema: GraphQLSchema): string[];
4
+ private checkUnionMembersConsistentUseOfEntryDirective;
5
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaValidator = void 0;
4
+ const kinds_1 = require("graphql/language/kinds");
5
+ class SchemaValidator {
6
+ getValidationResult(schema) {
7
+ const results = [];
8
+ results.push(this.checkUnionMembersConsistentUseOfEntryDirective(schema));
9
+ return results.filter((result) => result !== '');
10
+ }
11
+ checkUnionMembersConsistentUseOfEntryDirective(schema) {
12
+ var _a;
13
+ const typeMap = schema.getTypeMap();
14
+ for (const [key, type] of Object.entries(typeMap)) {
15
+ if (((_a = type.astNode) === null || _a === void 0 ? void 0 : _a.kind) !== kinds_1.Kind.UNION_TYPE_DEFINITION) {
16
+ continue;
17
+ }
18
+ const innerTypes = type.getTypes();
19
+ const numberUnionMembersWithEntryDirective = innerTypes.filter((innerType) => {
20
+ var _a;
21
+ return !!innerType.astNode &&
22
+ ((_a = innerType.astNode.directives) === null || _a === void 0 ? void 0 : _a.find((directive) => directive.name.value === 'Entry')) !== undefined;
23
+ }).length;
24
+ if (numberUnionMembersWithEntryDirective !== 0 &&
25
+ numberUnionMembersWithEntryDirective !== innerTypes.length) {
26
+ return `Either all union members of "${type.name}" must have "@Entry" directive or none.`;
27
+ }
28
+ }
29
+ return '';
30
+ }
31
+ }
32
+ exports.SchemaValidator = SchemaValidator;
33
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/graphql/schema-validator.ts"],"names":[],"mappings":";;;AACA,kDAA6C;AAG7C,MAAa,eAAe;IACnB,mBAAmB,CAAC,MAAqB;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAAC,MAAM,CAAC,CAAC,CAAA;QACzE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAEO,8CAA8C,CACpD,MAAqB;;QAErB,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,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,MAAK,YAAI,CAAC,qBAAqB,EAAE;gBACrD,SAAQ;aACT;YACD,MAAM,UAAU,GAAI,IAAyB,CAAC,QAAQ,EAAE,CAAA;YAExD,MAAM,oCAAoC,GAAG,UAAU,CAAC,MAAM,CAC5D,CAAC,SAAS,EAAE,EAAE;;gBACZ,OAAA,CAAC,CAAC,SAAS,CAAC,OAAO;oBACnB,CAAA,MAAA,SAAS,CAAC,OAAO,CAAC,UAAU,0CAAE,IAAI,CAChC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAChD,MAAK,SAAS,CAAA;aAAA,CAClB,CAAC,MAAM,CAAA;YAER,IACE,oCAAoC,KAAK,CAAC;gBAC1C,oCAAoC,KAAK,UAAU,CAAC,MAAM,EAC1D;gBACA,OAAO,gCAAgC,IAAI,CAAC,IAAI,yCAAyC,CAAA;aAC1F;SACF;QAED,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AApCD,0CAoCC"}
@@ -0,0 +1,3 @@
1
+ import { ApiService } from './app/api.service';
2
+ export { ApiService };
3
+ export declare function getApiService(): Promise<ApiService>;
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getApiService = exports.ApiService = void 0;
4
+ const api_service_1 = require("./app/api.service");
5
+ Object.defineProperty(exports, "ApiService", { enumerable: true, get: function () { return api_service_1.ApiService; } });
6
+ const container_1 = require("./container");
7
+ async function getApiService() {
8
+ return container_1.apiService;
9
+ }
10
+ exports.getApiService = getApiService;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAGrC,2FAHA,wBAAU,OAGA;AAFnB,2CAAwC;AAIjC,KAAK,UAAU,aAAa;IACjC,OAAO,sBAAU,CAAA;AACnB,CAAC;AAFD,sCAEC"}
@@ -0,0 +1,17 @@
1
+ import { GitAdapter } from '@commitspark/git-adapter';
2
+ export declare class PersistenceService {
3
+ constructor();
4
+ getTypeById(gitAdapter: GitAdapter, commitHash: string, id: ID): Promise<string>;
5
+ findById(gitAdapter: GitAdapter, commitHash: string, id: ID): Promise<Entry>;
6
+ findByType(gitAdapter: GitAdapter, commitHash: string, type: string): Promise<Entry[]>;
7
+ findByTypeId(gitAdapter: GitAdapter, commitHash: string, type: string, id: ID): Promise<Entry>;
8
+ createType(gitAdapter: GitAdapter, branch: string, commitHash: string, type: string, data: Entry, message: string): Promise<CommitResult>;
9
+ updateByTypeId(gitAdapter: GitAdapter, branch: string, commitHash: string, type: string, id: ID, data: Entry, message: string): Promise<CommitResult>;
10
+ deleteByTypeId(gitAdapter: GitAdapter, branch: string, commitHash: string, type: string, id: ID, message: string): Promise<CommitResult>;
11
+ }
12
+ export interface CommitResult {
13
+ id: ID;
14
+ ref: string;
15
+ }
16
+ export type ID = string;
17
+ export type Entry = Record<string, unknown>;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PersistenceService = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class PersistenceService {
6
+ constructor() { }
7
+ async getTypeById(gitAdapter, commitHash, id) {
8
+ const allEntries = await gitAdapter.getContentEntries(commitHash);
9
+ const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
10
+ if (requestedEntry === undefined) {
11
+ throw new Error(`Not found: ${id}`);
12
+ }
13
+ return requestedEntry.metadata.type;
14
+ }
15
+ async findById(gitAdapter, commitHash, id) {
16
+ const allEntries = await gitAdapter.getContentEntries(commitHash);
17
+ const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
18
+ if (requestedEntry === undefined) {
19
+ throw new Error(`Not found: ${id}`);
20
+ }
21
+ return Object.assign(Object.assign({}, requestedEntry.data), { id: id });
22
+ }
23
+ async findByType(gitAdapter, commitHash, type) {
24
+ const allEntries = await gitAdapter.getContentEntries(commitHash);
25
+ return allEntries
26
+ .filter((contentEntry) => contentEntry.metadata.type === type)
27
+ .map((value) => (Object.assign(Object.assign({}, value.data), { id: value.id })));
28
+ }
29
+ async findByTypeId(gitAdapter, commitHash, type, id) {
30
+ const allEntries = await gitAdapter.getContentEntries(commitHash);
31
+ const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
32
+ if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
33
+ throw new Error(`Not found: ${type}, ${id}`);
34
+ }
35
+ return Object.assign(Object.assign({}, requestedEntry.data), { id: id });
36
+ }
37
+ async createType(gitAdapter, branch, commitHash, type, data, message) {
38
+ const id = (0, uuid_1.v4)();
39
+ const commit = await gitAdapter.createCommit({
40
+ ref: branch,
41
+ parentSha: commitHash,
42
+ contentEntries: [
43
+ {
44
+ id: id,
45
+ data: data,
46
+ metadata: {
47
+ type: type,
48
+ },
49
+ deletion: false,
50
+ },
51
+ ],
52
+ message: message,
53
+ });
54
+ return {
55
+ id,
56
+ ref: commit.ref,
57
+ };
58
+ }
59
+ async updateByTypeId(gitAdapter, branch, commitHash, type, id, data, message) {
60
+ const allEntries = await gitAdapter.getContentEntries(commitHash);
61
+ const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
62
+ if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
63
+ throw new Error(`Not found: ${type}, ${id}`);
64
+ }
65
+ const newData = Object.assign(Object.assign({}, requestedEntry.data), data);
66
+ const commit = await gitAdapter.createCommit({
67
+ ref: branch,
68
+ parentSha: commitHash,
69
+ contentEntries: [
70
+ {
71
+ id: id,
72
+ data: newData,
73
+ metadata: requestedEntry.metadata,
74
+ deletion: false,
75
+ },
76
+ ],
77
+ message: message,
78
+ });
79
+ return {
80
+ id,
81
+ ref: commit.ref,
82
+ };
83
+ }
84
+ async deleteByTypeId(gitAdapter, branch, commitHash, type, id, message) {
85
+ const allEntries = await gitAdapter.getContentEntries(commitHash);
86
+ const requestedEntry = allEntries.filter((contentEntry) => contentEntry.id === id)[0];
87
+ if (requestedEntry === undefined || requestedEntry.metadata.type !== type) {
88
+ throw new Error(`Not found: ${type}, ${id}`);
89
+ }
90
+ const commit = await gitAdapter.createCommit({
91
+ ref: branch,
92
+ parentSha: commitHash,
93
+ contentEntries: [
94
+ {
95
+ id: id,
96
+ data: {},
97
+ metadata: requestedEntry.metadata,
98
+ deletion: true,
99
+ },
100
+ ],
101
+ message: message,
102
+ });
103
+ return {
104
+ id,
105
+ ref: commit.ref,
106
+ };
107
+ }
108
+ }
109
+ exports.PersistenceService = PersistenceService;
110
+ //# sourceMappingURL=persistence.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.service.js","sourceRoot":"","sources":["../../src/persistence/persistence.service.ts"],"names":[],"mappings":"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"}