@commitspark/graphql-api 0.9.3 → 0.10.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 (89) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/container.js +21 -13
  3. package/dist/container.js.map +1 -1
  4. package/dist/graphql/field-resolver/entry-reference-resolver.d.ts +9 -0
  5. package/dist/graphql/field-resolver/entry-reference-resolver.js +15 -0
  6. package/dist/graphql/field-resolver/entry-reference-resolver.js.map +1 -0
  7. package/dist/graphql/field-resolver/field-default-value-resolver.d.ts +14 -0
  8. package/dist/graphql/field-resolver/field-default-value-resolver.js +73 -0
  9. package/dist/graphql/field-resolver/field-default-value-resolver.js.map +1 -0
  10. package/dist/graphql/field-resolver/fieldResolver.d.ts +11 -0
  11. package/dist/graphql/field-resolver/fieldResolver.js +3 -0
  12. package/dist/graphql/field-resolver/fieldResolver.js.map +1 -0
  13. package/dist/graphql/field-resolver/union-value-resolver.d.ts +10 -0
  14. package/dist/graphql/field-resolver/union-value-resolver.js +17 -0
  15. package/dist/graphql/field-resolver/union-value-resolver.js.map +1 -0
  16. package/dist/graphql/input-type-generator.service.d.ts +4 -5
  17. package/dist/graphql/input-type-generator.service.js +23 -13
  18. package/dist/graphql/input-type-generator.service.js.map +1 -1
  19. package/dist/graphql/queries-mutations-generator.service.d.ts +1 -1
  20. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.d.ts +3 -1
  21. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js +46 -4
  22. package/dist/graphql/resolver-generators/mutation-create-resolver-generator.js.map +1 -1
  23. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.d.ts +3 -1
  24. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js +32 -9
  25. package/dist/graphql/resolver-generators/mutation-delete-resolver-generator.js.map +1 -1
  26. package/dist/graphql/resolver-generators/{mutation-update.resolver-generator.d.ts → mutation-update-resolver-generator.d.ts} +4 -1
  27. package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js +53 -0
  28. package/dist/graphql/resolver-generators/mutation-update-resolver-generator.js.map +1 -0
  29. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.d.ts +13 -0
  30. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js +58 -0
  31. package/dist/graphql/resolver-generators/object-type-field-default-value-resolver-generator.js.map +1 -0
  32. package/dist/graphql/resolver-generators/query-all-resolver-generator.js +4 -1
  33. package/dist/graphql/resolver-generators/query-all-resolver-generator.js.map +1 -1
  34. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js +2 -1
  35. package/dist/graphql/resolver-generators/query-by-id-resolver-generator.js.map +1 -1
  36. package/dist/graphql/resolver-generators/union-type-resolver-generator.d.ts +4 -4
  37. package/dist/graphql/resolver-generators/union-type-resolver-generator.js +3 -3
  38. package/dist/graphql/resolver-generators/union-type-resolver-generator.js.map +1 -1
  39. package/dist/graphql/schema-analyzer.service.d.ts +1 -9
  40. package/dist/graphql/schema-analyzer.service.js +6 -17
  41. package/dist/graphql/schema-analyzer.service.js.map +1 -1
  42. package/dist/graphql/schema-generator.service.d.ts +3 -5
  43. package/dist/graphql/schema-generator.service.js +7 -12
  44. package/dist/graphql/schema-generator.service.js.map +1 -1
  45. package/dist/graphql/schema-utils/entry-reference-util.d.ts +12 -5
  46. package/dist/graphql/schema-utils/entry-reference-util.js +108 -25
  47. package/dist/graphql/schema-utils/entry-reference-util.js.map +1 -1
  48. package/dist/graphql/schema-utils/entry-type-util.d.ts +6 -0
  49. package/dist/graphql/schema-utils/entry-type-util.js +34 -0
  50. package/dist/graphql/schema-utils/entry-type-util.js.map +1 -0
  51. package/dist/graphql/schema-utils/union-type-util.d.ts +5 -0
  52. package/dist/graphql/schema-utils/union-type-util.js +21 -0
  53. package/dist/graphql/schema-utils/union-type-util.js.map +1 -0
  54. package/dist/persistence/persistence.service.d.ts +4 -7
  55. package/dist/persistence/persistence.service.js +18 -83
  56. package/dist/persistence/persistence.service.js.map +1 -1
  57. package/dist/tsconfig.build.tsbuildinfo +1 -1
  58. package/package.json +2 -2
  59. package/src/container.ts +29 -15
  60. package/src/graphql/field-resolver/entry-reference-resolver.ts +49 -0
  61. package/src/graphql/field-resolver/field-default-value-resolver.ts +154 -0
  62. package/src/graphql/field-resolver/fieldResolver.ts +19 -0
  63. package/src/graphql/field-resolver/union-value-resolver.ts +46 -0
  64. package/src/graphql/input-type-generator.service.ts +33 -18
  65. package/src/graphql/queries-mutations-generator.service.ts +1 -1
  66. package/src/graphql/resolver-generators/mutation-create-resolver-generator.ts +78 -13
  67. package/src/graphql/resolver-generators/mutation-delete-resolver-generator.ts +69 -21
  68. package/src/graphql/resolver-generators/mutation-update-resolver-generator.ts +131 -0
  69. package/src/graphql/resolver-generators/object-type-field-default-value-resolver-generator.ts +119 -0
  70. package/src/graphql/resolver-generators/query-all-resolver-generator.ts +5 -1
  71. package/src/graphql/resolver-generators/query-by-id-resolver-generator.ts +3 -1
  72. package/src/graphql/resolver-generators/union-type-resolver-generator.ts +5 -7
  73. package/src/graphql/schema-analyzer.service.ts +10 -24
  74. package/src/graphql/schema-generator.service.ts +11 -20
  75. package/src/graphql/schema-utils/entry-reference-util.ts +177 -35
  76. package/src/graphql/schema-utils/entry-type-util.ts +42 -0
  77. package/src/graphql/schema-utils/union-type-util.ts +23 -0
  78. package/src/persistence/persistence.service.ts +33 -132
  79. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.d.ts +0 -12
  80. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js +0 -29
  81. package/dist/graphql/resolver-generators/entry-reference-resolver.generator.js.map +0 -1
  82. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js +0 -29
  83. package/dist/graphql/resolver-generators/mutation-update.resolver-generator.js.map +0 -1
  84. package/dist/graphql/resolver-generators/union-value-resolver-generator.d.ts +0 -13
  85. package/dist/graphql/resolver-generators/union-value-resolver-generator.js +0 -83
  86. package/dist/graphql/resolver-generators/union-value-resolver-generator.js.map +0 -1
  87. package/src/graphql/resolver-generators/entry-reference-resolver.generator.ts +0 -71
  88. package/src/graphql/resolver-generators/mutation-update.resolver-generator.ts +0 -59
  89. package/src/graphql/resolver-generators/union-value-resolver-generator.ts +0 -126
package/CHANGELOG.md CHANGED
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.10.0] - 2024-06-15
8
+ ### Added
9
+ - Add referential integrity by tracking and validating references between entries
10
+ - Add support of partial updates
11
+
12
+ ### Fixed
13
+ - [#18](https://github.com/commitspark/graphql-api/issues/18), [#25](https://github.com/commitspark/graphql-api/issues/25)
14
+ Fix handling of entries that only have an `id` field
15
+
16
+ ### Changed
17
+ - Return default data where possible when entry data is incomplete
18
+ - Improve content retrieval performance
19
+
20
+ ## [0.9.4] - 2023-11-14
21
+ ### Fixed
22
+ - Fix invalid schema built when running under Next.js 14
23
+
7
24
  ## [0.9.3] - 2023-09-06
8
25
  ### Fixed
9
26
  - Fix failure to resolve array of non-@Entry union types that is null
package/dist/container.js CHANGED
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.apiService = void 0;
4
4
  const api_service_1 = require("./app/api.service");
5
5
  const apollo_config_factory_service_1 = require("./graphql/apollo-config-factory.service");
6
- const entry_reference_resolver_generator_1 = require("./graphql/resolver-generators/entry-reference-resolver.generator");
7
6
  const input_type_generator_service_1 = require("./graphql/input-type-generator.service");
8
7
  const queries_mutations_generator_service_1 = require("./graphql/queries-mutations-generator.service");
9
8
  const schema_analyzer_service_1 = require("./graphql/schema-analyzer.service");
@@ -13,32 +12,41 @@ const persistence_service_1 = require("./persistence/persistence.service");
13
12
  const schema_generator_service_1 = require("./graphql/schema-generator.service");
14
13
  const mutation_create_resolver_generator_1 = require("./graphql/resolver-generators/mutation-create-resolver-generator");
15
14
  const mutation_delete_resolver_generator_1 = require("./graphql/resolver-generators/mutation-delete-resolver-generator");
16
- const mutation_update_resolver_generator_1 = require("./graphql/resolver-generators/mutation-update.resolver-generator");
15
+ const mutation_update_resolver_generator_1 = require("./graphql/resolver-generators/mutation-update-resolver-generator");
17
16
  const query_all_resolver_generator_1 = require("./graphql/resolver-generators/query-all-resolver-generator");
18
17
  const query_by_id_resolver_generator_1 = require("./graphql/resolver-generators/query-by-id-resolver-generator");
19
18
  const query_count_all_resolver_generator_1 = require("./graphql/resolver-generators/query-count-all-resolver-generator");
20
19
  const query_type_by_id_resolver_generator_1 = require("./graphql/resolver-generators/query-type-by-id-resolver-generator");
21
20
  const schema_validator_1 = require("./graphql/schema-validator");
22
- const union_value_resolver_generator_1 = require("./graphql/resolver-generators/union-value-resolver-generator");
21
+ const union_value_resolver_1 = require("./graphql/field-resolver/union-value-resolver");
23
22
  const entry_reference_util_1 = require("./graphql/schema-utils/entry-reference-util");
24
- const entryReferenceUtil = new entry_reference_util_1.EntryReferenceUtil();
23
+ const object_type_field_default_value_resolver_generator_1 = require("./graphql/resolver-generators/object-type-field-default-value-resolver-generator");
24
+ const field_default_value_resolver_1 = require("./graphql/field-resolver/field-default-value-resolver");
25
+ const entry_reference_resolver_1 = require("./graphql/field-resolver/entry-reference-resolver");
26
+ const union_type_util_1 = require("./graphql/schema-utils/union-type-util");
27
+ const entry_type_util_1 = require("./graphql/schema-utils/entry-type-util");
25
28
  const schemaValidator = new schema_validator_1.SchemaValidator();
26
29
  const persistenceService = new persistence_service_1.PersistenceService();
30
+ const entryTypeUtil = new entry_type_util_1.EntryTypeUtil();
31
+ const unionTypeUtil = new union_type_util_1.UnionTypeUtil();
32
+ const entryReferenceUtil = new entry_reference_util_1.EntryReferenceUtil(persistenceService, entryTypeUtil, unionTypeUtil);
27
33
  const schemaRootTypeGeneratorService = new schema_root_type_generator_service_1.SchemaRootTypeGeneratorService();
28
- const inputTypeGeneratorService = new input_type_generator_service_1.InputTypeGeneratorService(entryReferenceUtil);
29
- const schemaAnalyzerService = new schema_analyzer_service_1.SchemaAnalyzerService(entryReferenceUtil);
30
- const entryReferenceResolverGeneratorService = new entry_reference_resolver_generator_1.EntryReferenceResolverGenerator(persistenceService);
31
- const mutationCreateResolverGenerator = new mutation_create_resolver_generator_1.MutationCreateResolverGenerator(persistenceService);
32
- const mutationDeleteResolverGenerator = new mutation_delete_resolver_generator_1.MutationDeleteResolverGenerator(persistenceService);
33
- const mutationUpdateResolverGenerator = new mutation_update_resolver_generator_1.MutationUpdateResolverGenerator(persistenceService);
34
+ const inputTypeGeneratorService = new input_type_generator_service_1.InputTypeGeneratorService(entryTypeUtil);
35
+ const schemaAnalyzerService = new schema_analyzer_service_1.SchemaAnalyzerService();
36
+ const mutationCreateResolverGenerator = new mutation_create_resolver_generator_1.MutationCreateResolverGenerator(persistenceService, entryReferenceUtil);
37
+ const mutationDeleteResolverGenerator = new mutation_delete_resolver_generator_1.MutationDeleteResolverGenerator(persistenceService, entryReferenceUtil);
38
+ const mutationUpdateResolverGenerator = new mutation_update_resolver_generator_1.MutationUpdateResolverGenerator(persistenceService, entryReferenceUtil);
34
39
  const queryAllResolverGenerator = new query_all_resolver_generator_1.QueryAllResolverGenerator(persistenceService);
35
40
  const queryByIdResolverGenerator = new query_by_id_resolver_generator_1.QueryByIdResolverGenerator(persistenceService);
36
41
  const queryCountAllResolverGenerator = new query_count_all_resolver_generator_1.QueryCountAllResolverGenerator(persistenceService);
37
42
  const queryTypeByIdResolverGenerator = new query_type_by_id_resolver_generator_1.QueryTypeByIdResolverGenerator(persistenceService);
38
- const unionTypeResolverGenerator = new union_type_resolver_generator_1.UnionTypeResolverGenerator(persistenceService, entryReferenceUtil);
39
- const unionValueResolverGenerator = new union_value_resolver_generator_1.UnionValueResolverGenerator(entryReferenceUtil);
43
+ const unionTypeResolverGenerator = new union_type_resolver_generator_1.UnionTypeResolverGenerator(persistenceService, entryTypeUtil);
44
+ const unionValueResolver = new union_value_resolver_1.UnionValueResolver(unionTypeUtil);
45
+ const entryReferenceResolver = new entry_reference_resolver_1.EntryReferenceResolver(persistenceService);
46
+ const fieldDefaultValueResolver = new field_default_value_resolver_1.FieldDefaultValueResolver(entryTypeUtil, unionValueResolver, entryReferenceResolver);
47
+ const objectTypeFieldDefaultValueResolverGenerator = new object_type_field_default_value_resolver_generator_1.ObjectTypeFieldDefaultValueResolverGenerator(fieldDefaultValueResolver);
40
48
  const queriesMutationsGeneratorService = new queries_mutations_generator_service_1.QueriesMutationsGeneratorService(queryAllResolverGenerator, queryByIdResolverGenerator, queryCountAllResolverGenerator, queryTypeByIdResolverGenerator, mutationCreateResolverGenerator, mutationUpdateResolverGenerator, mutationDeleteResolverGenerator);
41
- const schemaGeneratorService = new schema_generator_service_1.SchemaGeneratorService(queriesMutationsGeneratorService, schemaAnalyzerService, inputTypeGeneratorService, schemaRootTypeGeneratorService, entryReferenceResolverGeneratorService, unionTypeResolverGenerator, unionValueResolverGenerator, schemaValidator);
49
+ const schemaGeneratorService = new schema_generator_service_1.SchemaGeneratorService(queriesMutationsGeneratorService, schemaAnalyzerService, inputTypeGeneratorService, schemaRootTypeGeneratorService, unionTypeResolverGenerator, objectTypeFieldDefaultValueResolverGenerator, schemaValidator);
42
50
  const apolloConfigFactoryService = new apollo_config_factory_service_1.ApolloConfigFactoryService(schemaGeneratorService);
43
51
  exports.apiService = new api_service_1.ApiService(apolloConfigFactoryService, schemaGeneratorService);
44
52
  //# sourceMappingURL=container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAC9C,2FAAoF;AACpF,yHAAkH;AAClH,yFAAkF;AAClF,uGAAgG;AAChG,+EAAyE;AACzE,qGAA6F;AAC7F,+GAAwG;AACxG,2EAAsE;AACtE,iFAA2E;AAC3E,yHAAkH;AAClH,yHAAkH;AAClH,yHAAkH;AAClH,6GAAsG;AACtG,iHAAyG;AACzG,yHAAiH;AACjH,2HAAkH;AAClH,iEAA4D;AAC5D,iHAA0G;AAC1G,sFAAgF;AAIhF,MAAM,kBAAkB,GAAG,IAAI,yCAAkB,EAAE,CAAA;AACnD,MAAM,eAAe,GAAG,IAAI,kCAAe,EAAE,CAAA;AAC7C,MAAM,kBAAkB,GAAG,IAAI,wCAAkB,EAAE,CAAA;AACnD,MAAM,8BAA8B,GAAG,IAAI,mEAA8B,EAAE,CAAA;AAE3E,MAAM,yBAAyB,GAAG,IAAI,wDAAyB,CAC7D,kBAAkB,CACnB,CAAA;AACD,MAAM,qBAAqB,GAAG,IAAI,+CAAqB,CAAC,kBAAkB,CAAC,CAAA;AAC3E,MAAM,sCAAsC,GAC1C,IAAI,oEAA+B,CAAC,kBAAkB,CAAC,CAAA;AACzD,MAAM,+BAA+B,GAAG,IAAI,oEAA+B,CACzE,kBAAkB,CACnB,CAAA;AACD,MAAM,+BAA+B,GAAG,IAAI,oEAA+B,CACzE,kBAAkB,CACnB,CAAA;AACD,MAAM,+BAA+B,GAAG,IAAI,oEAA+B,CACzE,kBAAkB,CACnB,CAAA;AACD,MAAM,yBAAyB,GAAG,IAAI,wDAAyB,CAC7D,kBAAkB,CACnB,CAAA;AACD,MAAM,0BAA0B,GAAG,IAAI,2DAA0B,CAC/D,kBAAkB,CACnB,CAAA;AACD,MAAM,8BAA8B,GAAG,IAAI,mEAA8B,CACvE,kBAAkB,CACnB,CAAA;AACD,MAAM,8BAA8B,GAAG,IAAI,oEAA8B,CACvE,kBAAkB,CACnB,CAAA;AACD,MAAM,0BAA0B,GAAG,IAAI,0DAA0B,CAC/D,kBAAkB,EAClB,kBAAkB,CACnB,CAAA;AACD,MAAM,2BAA2B,GAAG,IAAI,4DAA2B,CACjE,kBAAkB,CACnB,CAAA;AAED,MAAM,gCAAgC,GAAG,IAAI,sEAAgC,CAC3E,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,CAChC,CAAA;AAED,MAAM,sBAAsB,GAAG,IAAI,iDAAsB,CACvD,gCAAgC,EAChC,qBAAqB,EACrB,yBAAyB,EACzB,8BAA8B,EAC9B,sCAAsC,EACtC,0BAA0B,EAC1B,2BAA2B,EAC3B,eAAe,CAChB,CAAA;AAED,MAAM,0BAA0B,GAAG,IAAI,0DAA0B,CAC/D,sBAAsB,CACvB,CAAA;AAEY,QAAA,UAAU,GAAG,IAAI,wBAAU,CACtC,0BAA0B,EAC1B,sBAAsB,CACvB,CAAA"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAC9C,2FAAoF;AACpF,yFAAkF;AAClF,uGAAgG;AAChG,+EAAyE;AACzE,qGAA6F;AAC7F,+GAAwG;AACxG,2EAAsE;AACtE,iFAA2E;AAC3E,yHAAkH;AAClH,yHAAkH;AAClH,yHAAkH;AAClH,6GAAsG;AACtG,iHAAyG;AACzG,yHAAiH;AACjH,2HAAkH;AAClH,iEAA4D;AAC5D,wFAAkF;AAClF,sFAAgF;AAChF,yJAA+I;AAC/I,wGAAiG;AACjG,gGAA0F;AAC1F,4EAAsE;AACtE,4EAAsE;AAItE,MAAM,eAAe,GAAG,IAAI,kCAAe,EAAE,CAAA;AAC7C,MAAM,kBAAkB,GAAG,IAAI,wCAAkB,EAAE,CAAA;AACnD,MAAM,aAAa,GAAG,IAAI,+BAAa,EAAE,CAAA;AACzC,MAAM,aAAa,GAAG,IAAI,+BAAa,EAAE,CAAA;AACzC,MAAM,kBAAkB,GAAG,IAAI,yCAAkB,CAC/C,kBAAkB,EAClB,aAAa,EACb,aAAa,CACd,CAAA;AACD,MAAM,8BAA8B,GAAG,IAAI,mEAA8B,EAAE,CAAA;AAE3E,MAAM,yBAAyB,GAAG,IAAI,wDAAyB,CAAC,aAAa,CAAC,CAAA;AAC9E,MAAM,qBAAqB,GAAG,IAAI,+CAAqB,EAAE,CAAA;AACzD,MAAM,+BAA+B,GAAG,IAAI,oEAA+B,CACzE,kBAAkB,EAClB,kBAAkB,CACnB,CAAA;AACD,MAAM,+BAA+B,GAAG,IAAI,oEAA+B,CACzE,kBAAkB,EAClB,kBAAkB,CACnB,CAAA;AACD,MAAM,+BAA+B,GAAG,IAAI,oEAA+B,CACzE,kBAAkB,EAClB,kBAAkB,CACnB,CAAA;AACD,MAAM,yBAAyB,GAAG,IAAI,wDAAyB,CAC7D,kBAAkB,CACnB,CAAA;AACD,MAAM,0BAA0B,GAAG,IAAI,2DAA0B,CAC/D,kBAAkB,CACnB,CAAA;AACD,MAAM,8BAA8B,GAAG,IAAI,mEAA8B,CACvE,kBAAkB,CACnB,CAAA;AACD,MAAM,8BAA8B,GAAG,IAAI,oEAA8B,CACvE,kBAAkB,CACnB,CAAA;AACD,MAAM,0BAA0B,GAAG,IAAI,0DAA0B,CAC/D,kBAAkB,EAClB,aAAa,CACd,CAAA;AACD,MAAM,kBAAkB,GAAG,IAAI,yCAAkB,CAAC,aAAa,CAAC,CAAA;AAChE,MAAM,sBAAsB,GAAG,IAAI,iDAAsB,CAAC,kBAAkB,CAAC,CAAA;AAC7E,MAAM,yBAAyB,GAAG,IAAI,wDAAyB,CAC7D,aAAa,EACb,kBAAkB,EAClB,sBAAsB,CACvB,CAAA;AACD,MAAM,4CAA4C,GAChD,IAAI,iGAA4C,CAAC,yBAAyB,CAAC,CAAA;AAE7E,MAAM,gCAAgC,GAAG,IAAI,sEAAgC,CAC3E,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,CAChC,CAAA;AAED,MAAM,sBAAsB,GAAG,IAAI,iDAAsB,CACvD,gCAAgC,EAChC,qBAAqB,EACrB,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,4CAA4C,EAC5C,eAAe,CAChB,CAAA;AAED,MAAM,0BAA0B,GAAG,IAAI,0DAA0B,CAC/D,sBAAsB,CACvB,CAAA;AAEY,QAAA,UAAU,GAAG,IAAI,wBAAU,CACtC,0BAA0B,EAC1B,sBAAsB,CACvB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { FieldResolver, ResolvedEntryData, FieldResolverContext } from './fieldResolver';
2
+ import { GraphQLFieldResolver } from 'graphql/type/definition';
3
+ import { Entry, PersistenceService } from '../../persistence/persistence.service';
4
+ export declare class EntryReferenceResolver implements FieldResolver<any> {
5
+ private readonly persistence;
6
+ resolve: GraphQLFieldResolver<any, FieldResolverContext, any, Promise<ResolvedEntryData<Entry | Entry[] | null>>>;
7
+ constructor(persistence: PersistenceService);
8
+ private resolveFieldValue;
9
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntryReferenceResolver = void 0;
4
+ class EntryReferenceResolver {
5
+ constructor(persistence) {
6
+ this.persistence = persistence;
7
+ this.resolve = (fieldValue, args, context, info) => this.resolveFieldValue(fieldValue, args, context, info, info.returnType);
8
+ }
9
+ async resolveFieldValue(fieldValue, args, context, info, currentType) {
10
+ const entry = await this.persistence.findById(context.gitAdapter, context.getCurrentRef(), fieldValue.id);
11
+ return Object.assign(Object.assign({}, entry.data), { id: entry.id });
12
+ }
13
+ }
14
+ exports.EntryReferenceResolver = EntryReferenceResolver;
15
+ //# sourceMappingURL=entry-reference-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-reference-resolver.js","sourceRoot":"","sources":["../../../src/graphql/field-resolver/entry-reference-resolver.ts"],"names":[],"mappings":";;;AAeA,MAAa,sBAAsB;IAQjC,YAA6B,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;QAC1D,IAAI,CAAC,OAAO,GAAG,CACb,UAAU,EACV,IAAS,EACT,OAA6B,EAC7B,IAAI,EACgD,EAAE,CACtD,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5E,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,UAAe,EACf,IAAS,EACT,OAA6B,EAC7B,IAAwB,EACxB,WAA8B;QAE9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAC3C,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,UAAU,CAAC,EAAE,CACd,CAAA;QAED,uCAAY,KAAK,CAAC,IAAI,KAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAE;IACxC,CAAC;CACF;AAjCD,wDAiCC"}
@@ -0,0 +1,14 @@
1
+ import { FieldResolver, ResolvedEntryData, FieldResolverContext } from './fieldResolver';
2
+ import { Entry } from '../../persistence/persistence.service';
3
+ import { GraphQLFieldResolver } from 'graphql/type/definition';
4
+ import { EntryTypeUtil } from '../schema-utils/entry-type-util';
5
+ import { UnionValueResolver } from './union-value-resolver';
6
+ import { EntryReferenceResolver } from './entry-reference-resolver';
7
+ export declare class FieldDefaultValueResolver implements FieldResolver<any> {
8
+ private readonly entryTypeUtil;
9
+ private readonly unionValueResolver;
10
+ private readonly entryReferenceResolver;
11
+ resolve: GraphQLFieldResolver<any, FieldResolverContext, any, Promise<ResolvedEntryData<Entry | Entry[] | null>>>;
12
+ constructor(entryTypeUtil: EntryTypeUtil, unionValueResolver: UnionValueResolver, entryReferenceResolver: EntryReferenceResolver);
13
+ private resolveFieldValue;
14
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FieldDefaultValueResolver = void 0;
4
+ const graphql_1 = require("graphql");
5
+ class FieldDefaultValueResolver {
6
+ constructor(entryTypeUtil, unionValueResolver, entryReferenceResolver) {
7
+ this.entryTypeUtil = entryTypeUtil;
8
+ this.unionValueResolver = unionValueResolver;
9
+ this.entryReferenceResolver = entryReferenceResolver;
10
+ this.resolve = (fieldValue, args, context, info) => this.resolveFieldValue(fieldValue, args, context, info, info.returnType, false);
11
+ }
12
+ resolveFieldValue(fieldValue, args, context, info, currentType, hasNonNullParent) {
13
+ if ((0, graphql_1.isNonNullType)(currentType)) {
14
+ return this.resolveFieldValue(fieldValue, args, {
15
+ gitAdapter: context.gitAdapter,
16
+ getCurrentRef: context.getCurrentRef,
17
+ }, info, currentType.ofType, true);
18
+ }
19
+ else if ((0, graphql_1.isListType)(currentType)) {
20
+ if (fieldValue === undefined || fieldValue === null) {
21
+ if (hasNonNullParent) {
22
+ return new Promise((resolve) => resolve([]));
23
+ }
24
+ else {
25
+ return new Promise((resolve) => resolve(null));
26
+ }
27
+ }
28
+ if (!Array.isArray(fieldValue)) {
29
+ throw new Error(`Expected array while resolving value for field "${info.fieldName}".`);
30
+ }
31
+ const resultPromises = [];
32
+ for (const item of fieldValue) {
33
+ const resultPromise = this.resolveFieldValue(item, args, {
34
+ gitAdapter: context.gitAdapter,
35
+ getCurrentRef: context.getCurrentRef,
36
+ }, info, currentType.ofType, hasNonNullParent);
37
+ resultPromises.push(resultPromise);
38
+ }
39
+ return Promise.all(resultPromises);
40
+ }
41
+ else if ((0, graphql_1.isUnionType)(currentType)) {
42
+ if (fieldValue === undefined || fieldValue === null) {
43
+ if (hasNonNullParent) {
44
+ throw new Error(`Cannot generate a default value for NonNull field "${info.parentType.name}.${info.fieldName}" because it is a union field of type "${info.returnType.ofType.name}".`);
45
+ }
46
+ else {
47
+ return new Promise((resolve) => resolve(null));
48
+ }
49
+ }
50
+ if (this.entryTypeUtil.buildsOnTypeWithEntryDirective(currentType)) {
51
+ return this.entryReferenceResolver.resolve(fieldValue, args, context, info);
52
+ }
53
+ return this.unionValueResolver.resolve(fieldValue, args, context, info);
54
+ }
55
+ else if ((0, graphql_1.isObjectType)(currentType)) {
56
+ if (fieldValue === undefined || fieldValue === null) {
57
+ if (hasNonNullParent) {
58
+ throw new Error(`Cannot generate a default value for NonNull field "${info.fieldName}" of type "${info.parentType.name}".`);
59
+ }
60
+ else {
61
+ return new Promise((resolve) => resolve(null));
62
+ }
63
+ }
64
+ if (this.entryTypeUtil.hasEntryDirective(currentType)) {
65
+ return this.entryReferenceResolver.resolve(fieldValue, args, context, info);
66
+ }
67
+ return fieldValue;
68
+ }
69
+ return fieldValue;
70
+ }
71
+ }
72
+ exports.FieldDefaultValueResolver = FieldDefaultValueResolver;
73
+ //# sourceMappingURL=field-default-value-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-default-value-resolver.js","sourceRoot":"","sources":["../../../src/graphql/field-resolver/field-default-value-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { GraphQLFieldResolver } from 'graphql/type/definition';
2
+ import { Entry } from '../../persistence/persistence.service';
3
+ import { GitAdapter } from '@commitspark/git-adapter';
4
+ export interface FieldResolverContext {
5
+ gitAdapter: GitAdapter;
6
+ getCurrentRef(): string;
7
+ }
8
+ export interface FieldResolver<TSource, TContext = FieldResolverContext, TArgs = any, TResult = Promise<ResolvedEntryData<Entry | Entry[] | null>>> {
9
+ resolve: GraphQLFieldResolver<TSource, TContext, TArgs, TResult>;
10
+ }
11
+ export type ResolvedEntryData<T> = T | Array<ResolvedEntryData<T>>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=fieldResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldResolver.js","sourceRoot":"","sources":["../../../src/graphql/field-resolver/fieldResolver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { GraphQLFieldResolver } from 'graphql/type/definition';
2
+ import { Entry } from '../../persistence/persistence.service';
3
+ import { FieldResolver, ResolvedEntryData, FieldResolverContext } from './fieldResolver';
4
+ import { UnionTypeUtil } from '../schema-utils/union-type-util';
5
+ export declare class UnionValueResolver implements FieldResolver<any> {
6
+ private readonly unionTypeUtil;
7
+ resolve: GraphQLFieldResolver<any, FieldResolverContext, any, Promise<ResolvedEntryData<Entry | Entry[] | null>>>;
8
+ constructor(unionTypeUtil: UnionTypeUtil);
9
+ private resolveFieldValue;
10
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnionValueResolver = void 0;
4
+ class UnionValueResolver {
5
+ constructor(unionTypeUtil) {
6
+ this.unionTypeUtil = unionTypeUtil;
7
+ this.resolve = (fieldValue, args, context, info) => this.resolveFieldValue(fieldValue);
8
+ }
9
+ resolveFieldValue(fieldValue) {
10
+ const typeName = this.unionTypeUtil.getUnionTypeNameFromFieldValue(fieldValue);
11
+ const unionValue = this.unionTypeUtil.getUnionValue(fieldValue);
12
+ const res = Object.assign(Object.assign({}, unionValue), { __typename: typeName });
13
+ return new Promise((resolve) => resolve(res));
14
+ }
15
+ }
16
+ exports.UnionValueResolver = UnionValueResolver;
17
+ //# sourceMappingURL=union-value-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union-value-resolver.js","sourceRoot":"","sources":["../../../src/graphql/field-resolver/union-value-resolver.ts"],"names":[],"mappings":";;;AASA,MAAa,kBAAkB;IAQ7B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QACvD,IAAI,CAAC,OAAO,GAAG,CACb,UAAU,EACV,IAAI,EACJ,OAAO,EACP,IAAI,EACgD,EAAE,CACtD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;IAEO,iBAAiB,CACvB,UAAe;QAEf,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,8BAA8B,CAAC,UAAU,CAAC,CAAA;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAM/D,MAAM,GAAG,mCACJ,UAAU,KACb,UAAU,EAAE,QAAQ,GACrB,CAAA;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;CACF;AApCD,gDAoCC"}
@@ -1,10 +1,9 @@
1
- import { GraphQLNullableType, GraphQLUnionType } from 'graphql/type/definition';
2
- import { GraphQLObjectType } from 'graphql';
1
+ import { GraphQLNullableType, GraphQLObjectType, GraphQLUnionType } from 'graphql';
3
2
  import { ISchemaAnalyzerResult } from './schema-analyzer.service';
4
- import { EntryReferenceUtil } from './schema-utils/entry-reference-util';
3
+ import { EntryTypeUtil } from './schema-utils/entry-type-util';
5
4
  export declare class InputTypeGeneratorService {
6
- private readonly entryReferenceUtil;
7
- constructor(entryReferenceUtil: EntryReferenceUtil);
5
+ private readonly entryTypeUtil;
6
+ constructor(entryTypeUtil: EntryTypeUtil);
8
7
  generateFieldInputTypeString(type: GraphQLNullableType): string;
9
8
  generateIdInputTypeStrings(schemaAnalyzerResult: ISchemaAnalyzerResult): string[];
10
9
  generateObjectInputTypeStrings(objectTypes: GraphQLObjectType[]): string[];
@@ -1,32 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InputTypeGeneratorService = void 0;
4
- const definition_1 = require("graphql/type/definition");
5
4
  const graphql_1 = require("graphql");
5
+ const definition_1 = require("graphql/type/definition");
6
6
  class InputTypeGeneratorService {
7
- constructor(entryReferenceUtil) {
8
- this.entryReferenceUtil = entryReferenceUtil;
7
+ constructor(entryTypeUtil) {
8
+ this.entryTypeUtil = entryTypeUtil;
9
9
  }
10
10
  generateFieldInputTypeString(type) {
11
- if (type instanceof graphql_1.GraphQLList) {
11
+ if ((0, graphql_1.isListType)(type)) {
12
12
  return `[${this.generateFieldInputTypeString(type.ofType)}]`;
13
13
  }
14
- else if (type instanceof graphql_1.GraphQLNonNull) {
14
+ else if ((0, graphql_1.isNonNullType)(type)) {
15
15
  return `${this.generateFieldInputTypeString(type.ofType)}!`;
16
16
  }
17
- else if (type instanceof graphql_1.GraphQLObjectType) {
18
- if (this.entryReferenceUtil.hasEntryDirective(type)) {
17
+ else if ((0, graphql_1.isObjectType)(type)) {
18
+ if (this.entryTypeUtil.hasEntryDirective(type)) {
19
19
  return `${type.name}IdInput`;
20
20
  }
21
21
  else {
22
22
  return `${type.name}Input`;
23
23
  }
24
24
  }
25
- else if (type instanceof definition_1.GraphQLInterfaceType) {
25
+ else if ((0, graphql_1.isInterfaceType)(type)) {
26
26
  return '';
27
27
  }
28
- else if (type instanceof definition_1.GraphQLUnionType) {
29
- if (this.entryReferenceUtil.buildsOnTypeWithEntryDirective(type)) {
28
+ else if ((0, graphql_1.isUnionType)(type)) {
29
+ if (this.entryTypeUtil.buildsOnTypeWithEntryDirective(type)) {
30
30
  return `${type.name}IdInput`;
31
31
  }
32
32
  else {
@@ -51,13 +51,23 @@ class InputTypeGeneratorService {
51
51
  const name = objectType.name;
52
52
  const inputTypeName = `${name}Input`;
53
53
  let inputType = `input ${inputTypeName} {\n`;
54
+ let inputTypeFieldStrings = '';
54
55
  for (const fieldsKey in objectType.getFields()) {
55
56
  const field = objectType.getFields()[fieldsKey];
56
- if (field.name === 'id') {
57
+ if (((0, graphql_1.isNonNullType)(field.type) &&
58
+ (0, definition_1.isScalarType)(field.type.ofType) &&
59
+ field.type.ofType.name === 'ID') ||
60
+ ((0, definition_1.isScalarType)(field.type) && field.type.name === 'ID')) {
57
61
  continue;
58
62
  }
59
63
  const inputTypeString = this.generateFieldInputTypeString(field.type);
60
- inputType += ` ${field.name}: ${inputTypeString}\n`;
64
+ inputTypeFieldStrings += ` ${field.name}: ${inputTypeString}\n`;
65
+ }
66
+ if (inputTypeFieldStrings.length > 0) {
67
+ inputType += `${inputTypeFieldStrings}`;
68
+ }
69
+ else {
70
+ inputType += ' _: Boolean\n';
61
71
  }
62
72
  inputType += '}\n';
63
73
  return inputType;
@@ -65,7 +75,7 @@ class InputTypeGeneratorService {
65
75
  }
66
76
  generateUnionInputTypeStrings(unionTypes) {
67
77
  const typeStrings = unionTypes.map((unionType) => {
68
- if (this.entryReferenceUtil.buildsOnTypeWithEntryDirective(unionType)) {
78
+ if (this.entryTypeUtil.buildsOnTypeWithEntryDirective(unionType)) {
69
79
  return '';
70
80
  }
71
81
  let unionInputType = `input ${unionType.name}Input @oneOf {\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"input-type-generator.service.js","sourceRoot":"","sources":["../../src/graphql/input-type-generator.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-type-generator.service.js","sourceRoot":"","sources":["../../src/graphql/input-type-generator.service.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { GraphQLObjectType } from 'graphql/type';
5
5
  import { QueryAllResolverGenerator } from './resolver-generators/query-all-resolver-generator';
6
6
  import { QueryByIdResolverGenerator } from './resolver-generators/query-by-id-resolver-generator';
7
7
  import { MutationCreateResolverGenerator } from './resolver-generators/mutation-create-resolver-generator';
8
- import { MutationUpdateResolverGenerator } from './resolver-generators/mutation-update.resolver-generator';
8
+ import { MutationUpdateResolverGenerator } from './resolver-generators/mutation-update-resolver-generator';
9
9
  import { MutationDeleteResolverGenerator } from './resolver-generators/mutation-delete-resolver-generator';
10
10
  import { QueryCountAllResolverGenerator } from './resolver-generators/query-count-all-resolver-generator';
11
11
  import { QueryTypeByIdResolverGenerator } from './resolver-generators/query-type-by-id-resolver-generator';
@@ -1,8 +1,10 @@
1
1
  import { GraphQLFieldResolver } from 'graphql/type/definition';
2
2
  import { ApolloContext } from '../../app/api.service';
3
3
  import { Entry, PersistenceService } from '../../persistence/persistence.service';
4
+ import { EntryReferenceUtil } from '../schema-utils/entry-reference-util';
4
5
  export declare class MutationCreateResolverGenerator {
5
6
  private readonly persistence;
6
- constructor(persistence: PersistenceService);
7
+ private readonly entryReferenceUtil;
8
+ constructor(persistence: PersistenceService, entryReferenceUtil: EntryReferenceUtil);
7
9
  createResolver(typeName: string): GraphQLFieldResolver<any, ApolloContext, any, Promise<Entry>>;
8
10
  }
@@ -2,12 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MutationCreateResolverGenerator = void 0;
4
4
  const GraphQLError_1 = require("graphql/error/GraphQLError");
5
+ const graphql_1 = require("graphql");
6
+ const git_adapter_1 = require("@commitspark/git-adapter");
5
7
  class MutationCreateResolverGenerator {
6
- constructor(persistence) {
8
+ constructor(persistence, entryReferenceUtil) {
7
9
  this.persistence = persistence;
10
+ this.entryReferenceUtil = entryReferenceUtil;
8
11
  }
9
12
  createResolver(typeName) {
10
13
  return async (source, args, context, info) => {
14
+ var _a;
15
+ if (!(0, graphql_1.isObjectType)(info.returnType)) {
16
+ throw new Error('Expected to create an ObjectType');
17
+ }
18
+ const idValidationResult = args.id.match(git_adapter_1.ENTRY_ID_INVALID_CHARACTERS);
19
+ if (idValidationResult) {
20
+ throw new GraphQLError_1.GraphQLError(`"id" contains invalid characters "${idValidationResult.join(', ')}"`, {
21
+ extensions: {
22
+ code: 'BAD_USER_INPUT',
23
+ argumentName: 'id',
24
+ },
25
+ });
26
+ }
11
27
  let existingEntry;
12
28
  try {
13
29
  existingEntry = await this.persistence.findById(context.gitAdapter, context.getCurrentRef(), args.id);
@@ -21,9 +37,35 @@ class MutationCreateResolverGenerator {
21
37
  },
22
38
  });
23
39
  }
24
- const commitResult = await this.persistence.createType(context.gitAdapter, context.branch, context.getCurrentRef(), typeName, args.id, args.data, args.message);
25
- context.setCurrentRef(commitResult.ref);
26
- return this.persistence.findByTypeId(context.gitAdapter, context.getCurrentRef(), typeName, args.id);
40
+ const referencedEntryIds = await this.entryReferenceUtil.getReferencedEntryIds(info.returnType, context, null, info.returnType, args.data);
41
+ const referencedEntryUpdates = [];
42
+ for (const referencedEntryId of referencedEntryIds) {
43
+ const referencedEntry = await this.persistence.findById(context.gitAdapter, context.getCurrentRef(), referencedEntryId);
44
+ const newReferencedEntryIds = [
45
+ ...((_a = referencedEntry.metadata.referencedBy) !== null && _a !== void 0 ? _a : []),
46
+ args.id,
47
+ ].sort();
48
+ const newReferencedEntryDraft = Object.assign(Object.assign({}, referencedEntry), { metadata: Object.assign(Object.assign({}, referencedEntry.metadata), { referencedBy: newReferencedEntryIds }), deletion: false });
49
+ referencedEntryUpdates.push(newReferencedEntryDraft);
50
+ }
51
+ const newEntryDraft = {
52
+ id: args.id,
53
+ metadata: {
54
+ type: typeName,
55
+ referencedBy: [],
56
+ },
57
+ data: args.data,
58
+ deletion: false,
59
+ };
60
+ const commit = await context.gitAdapter.createCommit({
61
+ ref: context.branch,
62
+ parentSha: context.getCurrentRef(),
63
+ contentEntries: [newEntryDraft, ...referencedEntryUpdates],
64
+ message: args.message,
65
+ });
66
+ context.setCurrentRef(commit.ref);
67
+ const newEntry = await this.persistence.findByTypeId(context.gitAdapter, context.getCurrentRef(), typeName, args.id);
68
+ return Object.assign(Object.assign({}, newEntry.data), { id: newEntry.id });
27
69
  };
28
70
  }
29
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-create-resolver-generator.js","sourceRoot":"","sources":["../../../src/graphql/resolver-generators/mutation-create-resolver-generator.ts"],"names":[],"mappings":";;;AAMA,6DAAyD;AAEzD,MAAa,+BAA+B;IAC1C,YAA6B,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;IAAG,CAAC;IAEzD,cAAc,CACnB,QAAgB;QAEhB,OAAO,KAAK,EACV,MAAM,EACN,IAAI,EACJ,OAAsB,EACtB,IAAI,EACY,EAAE;YAClB,IAAI,aAAa,CAAA;YACjB,IAAI;gBACF,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAC7C,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,IAAI,CAAC,EAAE,CACR,CAAA;aACF;YAAC,OAAO,CAAC,EAAE,GAAE;YACd,IAAI,aAAa,EAAE;gBACjB,MAAM,IAAI,2BAAY,CAAC,qBAAqB,IAAI,CAAC,EAAE,kBAAkB,EAAE;oBACrE,UAAU,EAAE;wBACV,IAAI,EAAE,gBAAgB;wBACtB,YAAY,EAAE,IAAI;qBACnB;iBACF,CAAC,CAAA;aACH;YAGD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CACpD,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,aAAa,EAAE,EACvB,QAAQ,EACR,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,CACb,CAAA;YACD,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACvC,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAClC,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,QAAQ,EACR,IAAI,CAAC,EAAE,CACR,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CACF;AAhDD,0EAgDC"}
1
+ {"version":3,"file":"mutation-create-resolver-generator.js","sourceRoot":"","sources":["../../../src/graphql/resolver-generators/mutation-create-resolver-generator.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import { Entry, PersistenceService } from '../../persistence/persistence.service';
2
2
  import { GraphQLFieldResolver } from 'graphql/type/definition';
3
3
  import { ApolloContext } from '../../app/api.service';
4
+ import { EntryReferenceUtil } from '../schema-utils/entry-reference-util';
4
5
  export declare class MutationDeleteResolverGenerator {
5
6
  private readonly persistence;
6
- constructor(persistence: PersistenceService);
7
+ private readonly entryReferenceUtil;
8
+ constructor(persistence: PersistenceService, entryReferenceUtil: EntryReferenceUtil);
7
9
  createResolver(typeName: string): GraphQLFieldResolver<any, ApolloContext, any, Promise<Entry>>;
8
10
  }
@@ -2,25 +2,48 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MutationDeleteResolverGenerator = void 0;
4
4
  const GraphQLError_1 = require("graphql/error/GraphQLError");
5
+ const graphql_1 = require("graphql");
5
6
  class MutationDeleteResolverGenerator {
6
- constructor(persistence) {
7
+ constructor(persistence, entryReferenceUtil) {
7
8
  this.persistence = persistence;
9
+ this.entryReferenceUtil = entryReferenceUtil;
8
10
  }
9
11
  createResolver(typeName) {
10
12
  return async (source, args, context, info) => {
11
- try {
12
- await this.persistence.findByTypeId(context.gitAdapter, context.getCurrentRef(), typeName, args.id);
13
- }
14
- catch (_) {
15
- throw new GraphQLError_1.GraphQLError(`No entry of type "${typeName}" with id "${args.id}" exists`, {
13
+ var _a;
14
+ const entry = await this.persistence.findByTypeId(context.gitAdapter, context.getCurrentRef(), typeName, args.id);
15
+ if (entry.metadata.referencedBy &&
16
+ entry.metadata.referencedBy.length > 0) {
17
+ const otherIds = entry.metadata.referencedBy
18
+ .map((referenceId) => `"${referenceId}"`)
19
+ .join(', ');
20
+ throw new GraphQLError_1.GraphQLError(`Entry with id "${args.id}" is referenced by other entries: [${otherIds}]`, {
16
21
  extensions: {
17
- code: 'BAD_USER_INPUT',
22
+ code: 'IN_USE',
18
23
  argumentName: 'id',
19
24
  },
20
25
  });
21
26
  }
22
- const deleteResult = await this.persistence.deleteByTypeId(context.gitAdapter, context.branch, context.getCurrentRef(), typeName, args.id, args.message);
23
- context.setCurrentRef(deleteResult.ref);
27
+ const entryType = info.schema.getType(typeName);
28
+ if (!(0, graphql_1.isObjectType)(entryType)) {
29
+ throw new Error('Expected to delete an ObjectType');
30
+ }
31
+ const referencedEntryIds = await this.entryReferenceUtil.getReferencedEntryIds(entryType, context, null, entryType, entry.data);
32
+ const referencedEntryUpdates = [];
33
+ for (const referencedEntryId of referencedEntryIds) {
34
+ const noLongerReferencedEntry = await this.persistence.findById(context.gitAdapter, context.getCurrentRef(), referencedEntryId);
35
+ referencedEntryUpdates.push(Object.assign(Object.assign({}, noLongerReferencedEntry), { metadata: Object.assign(Object.assign({}, noLongerReferencedEntry.metadata), { referencedBy: (_a = noLongerReferencedEntry.metadata.referencedBy) === null || _a === void 0 ? void 0 : _a.filter((entryId) => entryId !== args.id) }), deletion: false }));
36
+ }
37
+ const commit = await context.gitAdapter.createCommit({
38
+ ref: context.branch,
39
+ parentSha: context.getCurrentRef(),
40
+ contentEntries: [
41
+ Object.assign(Object.assign({}, entry), { deletion: true }),
42
+ ...referencedEntryUpdates,
43
+ ],
44
+ message: args.message,
45
+ });
46
+ context.setCurrentRef(commit.ref);
24
47
  return {
25
48
  id: args.id,
26
49
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-delete-resolver-generator.js","sourceRoot":"","sources":["../../../src/graphql/resolver-generators/mutation-delete-resolver-generator.ts"],"names":[],"mappings":";;;AAMA,6DAAyD;AAEzD,MAAa,+BAA+B;IAC1C,YAA6B,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;IAAG,CAAC;IAEzD,cAAc,CACnB,QAAgB;QAEhB,OAAO,KAAK,EACV,MAAM,EACN,IAAI,EACJ,OAAsB,EACtB,IAAI,EACY,EAAE;YAClB,IAAI;gBACF,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CACjC,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,QAAQ,EACR,IAAI,CAAC,EAAE,CACR,CAAA;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,IAAI,2BAAY,CACpB,qBAAqB,QAAQ,cAAc,IAAI,CAAC,EAAE,UAAU,EAC5D;oBACE,UAAU,EAAE;wBACV,IAAI,EAAE,gBAAgB;wBACtB,YAAY,EAAE,IAAI;qBACnB;iBACF,CACF,CAAA;aACF;YAGD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CACxD,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,aAAa,EAAE,EACvB,QAAQ,EACR,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,OAAO,CACb,CAAA;YACD,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACvC,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CACF;AA9CD,0EA8CC"}
1
+ {"version":3,"file":"mutation-delete-resolver-generator.js","sourceRoot":"","sources":["../../../src/graphql/resolver-generators/mutation-delete-resolver-generator.ts"],"names":[],"mappings":";;;AAMA,6DAAyD;AAGzD,qCAAsC;AAEtC,MAAa,+BAA+B;IAC1C,YACmB,WAA+B,EAC/B,kBAAsC;QADtC,gBAAW,GAAX,WAAW,CAAoB;QAC/B,uBAAkB,GAAlB,kBAAkB,CAAoB;IACtD,CAAC;IAEG,cAAc,CACnB,QAAgB;QAEhB,OAAO,KAAK,EACV,MAAM,EACN,IAAI,EACJ,OAAsB,EACtB,IAAI,EACY,EAAE;;YAClB,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAC7D,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,QAAQ,EACR,IAAI,CAAC,EAAE,CACR,CAAA;YAED,IACE,KAAK,CAAC,QAAQ,CAAC,YAAY;gBAC3B,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EACtC;gBACA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY;qBACzC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,WAAW,GAAG,CAAC;qBACxC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,MAAM,IAAI,2BAAY,CACpB,kBAAkB,IAAI,CAAC,EAAE,sCAAsC,QAAQ,GAAG,EAC1E;oBACE,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,IAAI;qBACnB;iBACF,CACF,CAAA;aACF;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC/C,IAAI,CAAC,IAAA,sBAAY,EAAC,SAAS,CAAC,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;aACpD;YAED,MAAM,kBAAkB,GACtB,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CACjD,SAAS,EACT,OAAO,EACP,IAAI,EACJ,SAAS,EACT,KAAK,CAAC,IAAI,CACX,CAAA;YACH,MAAM,sBAAsB,GAAwB,EAAE,CAAA;YACtD,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE;gBAClD,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAC7D,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,aAAa,EAAE,EACvB,iBAAiB,CAClB,CAAA;gBACD,sBAAsB,CAAC,IAAI,iCACtB,uBAAuB,KAC1B,QAAQ,kCACH,uBAAuB,CAAC,QAAQ,KACnC,YAAY,EAAE,MAAA,uBAAuB,CAAC,QAAQ,CAAC,YAAY,0CAAE,MAAM,CACjE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,CACjC,KAEH,QAAQ,EAAE,KAAK,IACf,CAAA;aACH;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;gBACnD,GAAG,EAAE,OAAO,CAAC,MAAM;gBACnB,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE;gBAClC,cAAc,EAAE;oDAET,KAAK,KACR,QAAQ,EAAE,IAAI;oBAEhB,GAAG,sBAAsB;iBAC1B;gBACD,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAA;YACF,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAEjC,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CACF;AA3FD,0EA2FC"}
@@ -1,8 +1,11 @@
1
1
  import { Entry, PersistenceService } from '../../persistence/persistence.service';
2
2
  import { GraphQLFieldResolver } from 'graphql/type/definition';
3
3
  import { ApolloContext } from '../../app/api.service';
4
+ import { EntryReferenceUtil } from '../schema-utils/entry-reference-util';
4
5
  export declare class MutationUpdateResolverGenerator {
5
6
  private readonly persistence;
6
- constructor(persistence: PersistenceService);
7
+ private readonly entryReferenceUtil;
8
+ constructor(persistence: PersistenceService, entryReferenceUtil: EntryReferenceUtil);
7
9
  createResolver(typeName: string): GraphQLFieldResolver<any, ApolloContext, any, Promise<Entry>>;
10
+ private mergeData;
8
11
  }