@commitspark/graphql-api 2.0.0-beta.3 → 2.0.0-beta.4

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 (181) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +19 -9
  3. package/dist/cjs/client.d.ts +1 -0
  4. package/dist/cjs/graphql/apollo-config-factory.d.ts +1 -0
  5. package/dist/cjs/graphql/errors.d.ts +1 -0
  6. package/dist/cjs/graphql/input-type-generator.d.ts +1 -0
  7. package/dist/{types → cjs}/graphql/input-type-generator.d.ts.map +1 -1
  8. package/dist/cjs/graphql/input-type-generator.js.map +1 -1
  9. package/dist/cjs/graphql/queries-mutations-generator.d.ts +10 -1
  10. package/dist/cjs/graphql/queries-mutations-generator.d.ts.map +1 -0
  11. package/dist/cjs/graphql/queries-mutations-generator.js +14 -0
  12. package/dist/cjs/graphql/queries-mutations-generator.js.map +1 -1
  13. package/dist/cjs/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts +1 -0
  14. package/dist/cjs/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts +1 -0
  15. package/dist/cjs/graphql/resolvers/field-resolvers/referenced-by-resolver.d.ts +3 -0
  16. package/dist/cjs/graphql/resolvers/field-resolvers/referenced-by-resolver.d.ts.map +1 -0
  17. package/dist/cjs/graphql/resolvers/field-resolvers/referenced-by-resolver.js +7 -0
  18. package/dist/cjs/graphql/resolvers/field-resolvers/referenced-by-resolver.js.map +1 -0
  19. package/dist/cjs/graphql/resolvers/field-resolvers/types.d.ts +1 -0
  20. package/dist/cjs/graphql/resolvers/field-resolvers/union-value-resolver.d.ts +1 -0
  21. package/dist/cjs/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts +1 -0
  22. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts +1 -0
  23. package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts.map +1 -1
  24. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +8 -23
  25. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js.map +1 -1
  26. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts +1 -0
  27. package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts.map +1 -1
  28. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js +4 -21
  29. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js.map +1 -1
  30. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts +1 -0
  31. package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts.map +1 -1
  32. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js +9 -33
  33. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -1
  34. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts +1 -0
  35. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts +1 -0
  36. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-search-resolver.d.ts +1 -0
  37. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts +1 -0
  38. package/dist/cjs/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts +1 -0
  39. package/dist/cjs/graphql/resolvers/types.d.ts +5 -1
  40. package/dist/cjs/graphql/resolvers/types.d.ts.map +1 -0
  41. package/dist/cjs/graphql/schema-analyzer.d.ts +1 -0
  42. package/dist/cjs/graphql/schema-generator.d.ts +1 -0
  43. package/dist/cjs/graphql/schema-generator.d.ts.map +1 -0
  44. package/dist/cjs/graphql/schema-generator.js +10 -0
  45. package/dist/cjs/graphql/schema-generator.js.map +1 -1
  46. package/dist/cjs/graphql/schema-root-type-generator.d.ts +1 -0
  47. package/dist/cjs/graphql/schema-utils/directive-util.d.ts +1 -0
  48. package/dist/cjs/graphql/schema-utils/entry-reference-util.d.ts +5 -2
  49. package/dist/cjs/graphql/schema-utils/entry-reference-util.d.ts.map +1 -0
  50. package/dist/cjs/graphql/schema-utils/entry-reference-util.js +93 -120
  51. package/dist/cjs/graphql/schema-utils/entry-reference-util.js.map +1 -1
  52. package/dist/cjs/graphql/schema-utils/entry-type-util.d.ts +1 -0
  53. package/dist/cjs/graphql/schema-utils/searchable-field-util.d.ts +1 -0
  54. package/dist/cjs/graphql/schema-utils/union-type-util.d.ts +1 -0
  55. package/dist/cjs/graphql/schema-validator.d.ts +1 -0
  56. package/dist/cjs/graphql/util.d.ts +1 -0
  57. package/dist/cjs/index.d.ts +1 -0
  58. package/dist/cjs/persistence/cache.d.ts +2 -2
  59. package/dist/cjs/persistence/cache.d.ts.map +1 -0
  60. package/dist/cjs/persistence/persistence.d.ts +1 -0
  61. package/dist/esm/client.d.ts.map +1 -0
  62. package/dist/esm/graphql/apollo-config-factory.d.ts.map +1 -0
  63. package/dist/esm/graphql/errors.d.ts.map +1 -0
  64. package/dist/esm/graphql/input-type-generator.d.ts.map +1 -0
  65. package/dist/esm/graphql/input-type-generator.js.map +1 -1
  66. package/dist/{types → esm}/graphql/queries-mutations-generator.d.ts +9 -1
  67. package/dist/esm/graphql/queries-mutations-generator.d.ts.map +1 -0
  68. package/dist/esm/graphql/queries-mutations-generator.js +13 -0
  69. package/dist/esm/graphql/queries-mutations-generator.js.map +1 -1
  70. package/dist/esm/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts.map +1 -0
  71. package/dist/esm/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts.map +1 -0
  72. package/dist/esm/graphql/resolvers/field-resolvers/referenced-by-resolver.d.ts +3 -0
  73. package/dist/esm/graphql/resolvers/field-resolvers/referenced-by-resolver.d.ts.map +1 -0
  74. package/dist/esm/graphql/resolvers/field-resolvers/referenced-by-resolver.js +3 -0
  75. package/dist/esm/graphql/resolvers/field-resolvers/referenced-by-resolver.js.map +1 -0
  76. package/dist/esm/graphql/resolvers/field-resolvers/types.d.ts.map +1 -0
  77. package/dist/esm/graphql/resolvers/field-resolvers/union-value-resolver.d.ts.map +1 -0
  78. package/dist/esm/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts.map +1 -0
  79. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts.map +1 -0
  80. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js +10 -25
  81. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.js.map +1 -1
  82. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts.map +1 -0
  83. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js +6 -23
  84. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.js.map +1 -1
  85. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts.map +1 -0
  86. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js +11 -35
  87. package/dist/esm/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.js.map +1 -1
  88. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts.map +1 -0
  89. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts.map +1 -0
  90. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-search-resolver.d.ts.map +1 -0
  91. package/dist/esm/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts.map +1 -0
  92. package/dist/esm/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts.map +1 -0
  93. package/dist/{types → esm}/graphql/resolvers/types.d.ts +4 -1
  94. package/dist/esm/graphql/resolvers/types.d.ts.map +1 -0
  95. package/dist/esm/graphql/schema-analyzer.d.ts.map +1 -0
  96. package/dist/esm/graphql/schema-generator.d.ts.map +1 -0
  97. package/dist/esm/graphql/schema-generator.js +11 -1
  98. package/dist/esm/graphql/schema-generator.js.map +1 -1
  99. package/dist/esm/graphql/schema-root-type-generator.d.ts.map +1 -0
  100. package/dist/esm/graphql/schema-utils/directive-util.d.ts.map +1 -0
  101. package/dist/esm/graphql/schema-utils/entry-reference-util.d.ts +6 -0
  102. package/dist/esm/graphql/schema-utils/entry-reference-util.d.ts.map +1 -0
  103. package/dist/esm/graphql/schema-utils/entry-reference-util.js +91 -119
  104. package/dist/esm/graphql/schema-utils/entry-reference-util.js.map +1 -1
  105. package/dist/esm/graphql/schema-utils/entry-type-util.d.ts.map +1 -0
  106. package/dist/esm/graphql/schema-utils/searchable-field-util.d.ts.map +1 -0
  107. package/dist/esm/graphql/schema-utils/union-type-util.d.ts.map +1 -0
  108. package/dist/esm/graphql/schema-validator.d.ts.map +1 -0
  109. package/dist/esm/graphql/util.d.ts.map +1 -0
  110. package/dist/esm/index.d.ts.map +1 -0
  111. package/dist/{types → esm}/persistence/cache.d.ts +1 -2
  112. package/dist/esm/persistence/cache.d.ts.map +1 -0
  113. package/dist/esm/persistence/persistence.d.ts.map +1 -0
  114. package/package.json +21 -15
  115. package/src/graphql/input-type-generator.ts +1 -3
  116. package/src/graphql/queries-mutations-generator.ts +25 -0
  117. package/src/graphql/resolvers/field-resolvers/referenced-by-resolver.ts +9 -0
  118. package/src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts +9 -34
  119. package/src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts +9 -38
  120. package/src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts +12 -60
  121. package/src/graphql/resolvers/types.ts +8 -1
  122. package/src/graphql/schema-generator.ts +15 -0
  123. package/src/graphql/schema-utils/entry-reference-util.ts +147 -191
  124. package/src/persistence/cache.ts +1 -1
  125. package/dist/types/graphql/queries-mutations-generator.d.ts.map +0 -1
  126. package/dist/types/graphql/resolvers/types.d.ts.map +0 -1
  127. package/dist/types/graphql/schema-generator.d.ts.map +0 -1
  128. package/dist/types/graphql/schema-utils/entry-reference-util.d.ts +0 -4
  129. package/dist/types/graphql/schema-utils/entry-reference-util.d.ts.map +0 -1
  130. package/dist/types/persistence/cache.d.ts.map +0 -1
  131. /package/dist/{types → cjs}/client.d.ts.map +0 -0
  132. /package/dist/{types → cjs}/graphql/apollo-config-factory.d.ts.map +0 -0
  133. /package/dist/{types → cjs}/graphql/errors.d.ts.map +0 -0
  134. /package/dist/{types → cjs}/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts.map +0 -0
  135. /package/dist/{types → cjs}/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts.map +0 -0
  136. /package/dist/{types → cjs}/graphql/resolvers/field-resolvers/types.d.ts.map +0 -0
  137. /package/dist/{types → cjs}/graphql/resolvers/field-resolvers/union-value-resolver.d.ts.map +0 -0
  138. /package/dist/{types → cjs}/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts.map +0 -0
  139. /package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts.map +0 -0
  140. /package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts.map +0 -0
  141. /package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/query-search-resolver.d.ts.map +0 -0
  142. /package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts.map +0 -0
  143. /package/dist/{types → cjs}/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts.map +0 -0
  144. /package/dist/{types → cjs}/graphql/schema-analyzer.d.ts.map +0 -0
  145. /package/dist/{types → cjs}/graphql/schema-root-type-generator.d.ts.map +0 -0
  146. /package/dist/{types → cjs}/graphql/schema-utils/directive-util.d.ts.map +0 -0
  147. /package/dist/{types → cjs}/graphql/schema-utils/entry-type-util.d.ts.map +0 -0
  148. /package/dist/{types → cjs}/graphql/schema-utils/searchable-field-util.d.ts.map +0 -0
  149. /package/dist/{types → cjs}/graphql/schema-utils/union-type-util.d.ts.map +0 -0
  150. /package/dist/{types → cjs}/graphql/schema-validator.d.ts.map +0 -0
  151. /package/dist/{types → cjs}/graphql/util.d.ts.map +0 -0
  152. /package/dist/{types → cjs}/index.d.ts.map +0 -0
  153. /package/dist/{types → cjs}/persistence/persistence.d.ts.map +0 -0
  154. /package/dist/{types → esm}/client.d.ts +0 -0
  155. /package/dist/{types → esm}/graphql/apollo-config-factory.d.ts +0 -0
  156. /package/dist/{types → esm}/graphql/errors.d.ts +0 -0
  157. /package/dist/{types → esm}/graphql/input-type-generator.d.ts +0 -0
  158. /package/dist/{types → esm}/graphql/resolvers/field-resolvers/entry-reference-resolver.d.ts +0 -0
  159. /package/dist/{types → esm}/graphql/resolvers/field-resolvers/field-default-value-resolver.d.ts +0 -0
  160. /package/dist/{types → esm}/graphql/resolvers/field-resolvers/types.d.ts +0 -0
  161. /package/dist/{types → esm}/graphql/resolvers/field-resolvers/union-value-resolver.d.ts +0 -0
  162. /package/dist/{types → esm}/graphql/resolvers/object-type-field-default-value-resolver-generator.d.ts +0 -0
  163. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.d.ts +0 -0
  164. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.d.ts +0 -0
  165. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.d.ts +0 -0
  166. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.d.ts +0 -0
  167. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/query-every-resolver.d.ts +0 -0
  168. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/query-search-resolver.d.ts +0 -0
  169. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.d.ts +0 -0
  170. /package/dist/{types → esm}/graphql/resolvers/query-mutation-resolvers/union-type-resolver.d.ts +0 -0
  171. /package/dist/{types → esm}/graphql/schema-analyzer.d.ts +0 -0
  172. /package/dist/{types → esm}/graphql/schema-generator.d.ts +0 -0
  173. /package/dist/{types → esm}/graphql/schema-root-type-generator.d.ts +0 -0
  174. /package/dist/{types → esm}/graphql/schema-utils/directive-util.d.ts +0 -0
  175. /package/dist/{types → esm}/graphql/schema-utils/entry-type-util.d.ts +0 -0
  176. /package/dist/{types → esm}/graphql/schema-utils/searchable-field-util.d.ts +0 -0
  177. /package/dist/{types → esm}/graphql/schema-utils/union-type-util.d.ts +0 -0
  178. /package/dist/{types → esm}/graphql/schema-validator.d.ts +0 -0
  179. /package/dist/{types → esm}/graphql/util.d.ts +0 -0
  180. /package/dist/{types → esm}/index.d.ts +0 -0
  181. /package/dist/{types → esm}/persistence/persistence.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-create-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EAGV,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,SAAS,CAgEnE,CAAA"}
@@ -1,15 +1,18 @@
1
1
  import { findById, findByTypeId } from "../../../persistence/persistence.js";
2
2
  import { isObjectType } from 'graphql';
3
- import { getReferencedEntryIds } from "../../schema-utils/entry-reference-util.js";
4
- import { ENTRY_ID_INVALID_CHARACTERS, } from '@commitspark/git-adapter';
3
+ import { validateEntryReferences } from "../../schema-utils/entry-reference-util.js";
4
+ import { validateEntryId, } from '@commitspark/git-adapter';
5
5
  import { createError } from "../../errors.js";
6
6
  export const mutationCreateResolver = async (source, args, context, info) => {
7
+ void info;
7
8
  if (!isObjectType(context.type)) {
8
9
  throw createError(`Entry of type "${context.type.name}" cannot be created as is not an ObjectType.`, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {});
9
10
  }
10
- const idValidationResult = args.id.match(ENTRY_ID_INVALID_CHARACTERS);
11
- if (idValidationResult) {
12
- throw createError(`Field "id" contains invalid characters "${idValidationResult.join(', ')}".`, "BAD_USER_INPUT" /* ErrorCode.BAD_USER_INPUT */, {
11
+ try {
12
+ validateEntryId(args.id);
13
+ }
14
+ catch (err) {
15
+ throw createError(err instanceof Error ? err.message : String(err), "BAD_USER_INPUT" /* ErrorCode.BAD_USER_INPUT */, {
13
16
  argumentName: 'id',
14
17
  argumentValue: args.id,
15
18
  });
@@ -25,29 +28,11 @@ export const mutationCreateResolver = async (source, args, context, info) => {
25
28
  argumentValue: args.id,
26
29
  });
27
30
  }
28
- const referencedEntryIds = await getReferencedEntryIds(context.type, context, null, info.returnType, args.data ?? null);
29
- const referencedEntryUpdates = [];
30
- for (const referencedEntryId of referencedEntryIds) {
31
- const referencedEntry = await findById(context, referencedEntryId);
32
- const newReferencedEntryIds = [
33
- ...(referencedEntry.metadata.referencedBy ?? []),
34
- args.id,
35
- ].sort();
36
- const newReferencedEntryDraft = {
37
- ...referencedEntry,
38
- metadata: {
39
- ...referencedEntry.metadata,
40
- referencedBy: newReferencedEntryIds,
41
- },
42
- deletion: false,
43
- };
44
- referencedEntryUpdates.push(newReferencedEntryDraft);
45
- }
31
+ await validateEntryReferences(context.type, context, args.data ?? null);
46
32
  const newEntryDraft = {
47
33
  id: args.id,
48
34
  metadata: {
49
35
  type: context.type.name,
50
- referencedBy: [],
51
36
  },
52
37
  data: args.data ?? null,
53
38
  deletion: false,
@@ -55,7 +40,7 @@ export const mutationCreateResolver = async (source, args, context, info) => {
55
40
  const commit = await context.gitAdapter.createCommit({
56
41
  ref: context.branch,
57
42
  parentSha: context.getCurrentHash(),
58
- entries: [newEntryDraft, ...referencedEntryUpdates],
43
+ entries: [newEntryDraft],
59
44
  message: args.commitMessage,
60
45
  });
61
46
  context.setCurrentHash(commit.commitHash);
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-create-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutation-create-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-create-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAA;AACpF,OAAO,EAGL,eAAe,GAChB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAa,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAqC,KAAK,EAC3E,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,EAAE;IACF,KAAK,IAAI,CAAA;IACT,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,WAAW,CACf,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,8CAA8C,mDAEjF,EAAE,CACH,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,WAAW,CACf,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,mDAEhD;YACE,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI,CAAC,EAAE;SACvB,CACF,CAAA;IACH,CAAC;IAED,IAAI,aAAa,CAAA;IACjB,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,CACf,qBAAqB,IAAI,CAAC,EAAE,mBAAmB,mDAE/C;YACE,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI,CAAC,EAAE;SACvB,CACF,CAAA;IACH,CAAC;IAED,MAAM,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;IAEvE,MAAM,aAAa,GAAe;QAChC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;SACxB;QACD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;QACvB,QAAQ,EAAE,KAAK;KAChB,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;QACnD,GAAG,EAAE,OAAO,CAAC,MAAM;QACnB,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE;QACnC,OAAO,EAAE,CAAC,aAAa,CAAC;QACxB,OAAO,EAAE,IAAI,CAAC,aAAa;KAC5B,CAAC,CAAA;IACF,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEzC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IACxE,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAA;AAC9C,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-delete-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAGnD,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,MAAM,CAwChE,CAAA"}
@@ -1,11 +1,12 @@
1
- import { findById, findByTypeId } from "../../../persistence/persistence.js";
2
- import { getReferencedEntryIds } from "../../schema-utils/entry-reference-util.js";
3
- import { isObjectType } from 'graphql';
1
+ import { findByTypeId } from "../../../persistence/persistence.js";
2
+ import { getReferencingEntryIds } from "../../schema-utils/entry-reference-util.js";
4
3
  import { createError } from "../../errors.js";
5
4
  export const mutationDeleteResolver = async (source, args, context, info) => {
6
5
  const entry = await findByTypeId(context, context.type.name, args.id);
7
- if (entry.metadata.referencedBy && entry.metadata.referencedBy.length > 0) {
8
- const otherIds = entry.metadata.referencedBy
6
+ // references held by the entry itself are deleted together with the entry
7
+ const otherReferencingIds = (await getReferencingEntryIds(context, info.schema, args.id)).filter((referencingId) => referencingId !== args.id);
8
+ if (otherReferencingIds.length > 0) {
9
+ const otherIds = otherReferencingIds
9
10
  .map((referenceId) => `"${referenceId}"`)
10
11
  .join(', ');
11
12
  throw createError(`Entry with ID "${args.id}" is still referenced by entries [${otherIds}].`, "IN_USE" /* ErrorCode.IN_USE */, {
@@ -13,23 +14,6 @@ export const mutationDeleteResolver = async (source, args, context, info) => {
13
14
  argumentValue: args.id,
14
15
  });
15
16
  }
16
- const entryType = info.schema.getType(context.type.name);
17
- if (!isObjectType(entryType)) {
18
- throw createError(`Type "${context.type.name}" is not an ObjectType.`, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {});
19
- }
20
- const referencedEntryIds = await getReferencedEntryIds(entryType, context, null, entryType, entry.data ?? null);
21
- const referencedEntryUpdates = [];
22
- for (const referencedEntryId of referencedEntryIds) {
23
- const noLongerReferencedEntry = await findById(context, referencedEntryId);
24
- referencedEntryUpdates.push({
25
- ...noLongerReferencedEntry,
26
- metadata: {
27
- ...noLongerReferencedEntry.metadata,
28
- referencedBy: noLongerReferencedEntry.metadata.referencedBy?.filter((entryId) => entryId !== args.id),
29
- },
30
- deletion: false,
31
- });
32
- }
33
17
  const commit = await context.gitAdapter.createCommit({
34
18
  ref: context.branch,
35
19
  parentSha: context.getCurrentHash(),
@@ -38,7 +22,6 @@ export const mutationDeleteResolver = async (source, args, context, info) => {
38
22
  ...entry,
39
23
  deletion: true,
40
24
  },
41
- ...referencedEntryUpdates,
42
25
  ],
43
26
  message: args.commitMessage,
44
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-delete-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAE5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAa,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAkC,KAAK,EACxE,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,EAAE;IACF,MAAM,KAAK,GAAU,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAE5E,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY;aACzC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,WAAW,GAAG,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,WAAW,CACf,kBAAkB,IAAI,CAAC,EAAE,qCAAqC,QAAQ,IAAI,mCAE1E;YACE,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI,CAAC,EAAE;SACvB,CACF,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,CACf,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,yBAAyB,mDAEnD,EAAE,CACH,CAAA;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,CACpD,SAAS,EACT,OAAO,EACP,IAAI,EACJ,SAAS,EACT,KAAK,CAAC,IAAI,IAAI,IAAI,CACnB,CAAA;IACD,MAAM,sBAAsB,GAAiB,EAAE,CAAA;IAC/C,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;QACnD,MAAM,uBAAuB,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA;QAC1E,sBAAsB,CAAC,IAAI,CAAC;YAC1B,GAAG,uBAAuB;YAC1B,QAAQ,EAAE;gBACR,GAAG,uBAAuB,CAAC,QAAQ;gBACnC,YAAY,EAAE,uBAAuB,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CACjE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,CACjC;aACF;YACD,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;QACnD,GAAG,EAAE,OAAO,CAAC,MAAM;QACnB,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE;QACnC,OAAO,EAAE;YACP;gBACE,GAAG,KAAK;gBACR,QAAQ,EAAE,IAAI;aACf;YACD,GAAG,sBAAsB;SAC1B;QACD,OAAO,EAAE,IAAI,CAAC,aAAa;KAC5B,CAAC,CAAA;IACF,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEzC,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"mutation-delete-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-delete-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAElE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAA;AAEnF,OAAO,EAAE,WAAW,EAAa,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAkC,KAAK,EACxE,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,EAAE;IACF,MAAM,KAAK,GAAU,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAE5E,0EAA0E;IAC1E,MAAM,mBAAmB,GAAG,CAC1B,MAAM,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAC5D,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC,CAAA;IACtD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,mBAAmB;aACjC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,WAAW,GAAG,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,WAAW,CACf,kBAAkB,IAAI,CAAC,EAAE,qCAAqC,QAAQ,IAAI,mCAE1E;YACE,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI,CAAC,EAAE;SACvB,CACF,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;QACnD,GAAG,EAAE,OAAO,CAAC,MAAM;QACnB,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE;QACnC,OAAO,EAAE;YACP;gBACE,GAAG,KAAK;gBACR,QAAQ,EAAE,IAAI;aACf;SACF;QACD,OAAO,EAAE,IAAI,CAAC,aAAa;KAC5B,CAAC,CAAA;IACF,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEzC,OAAO,IAAI,CAAC,EAAE,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-update-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAanD,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,SAAS,CAsCnE,CAAA"}
@@ -1,5 +1,5 @@
1
- import { findById, findByTypeId } from "../../../persistence/persistence.js";
2
- import { getReferencedEntryIds } from "../../schema-utils/entry-reference-util.js";
1
+ import { findByTypeId } from "../../../persistence/persistence.js";
2
+ import { validateEntryReferences } from "../../schema-utils/entry-reference-util.js";
3
3
  import { isObjectType } from 'graphql';
4
4
  import { createError } from "../../errors.js";
5
5
  function mergeData(existingEntryData, updateData) {
@@ -9,48 +9,24 @@ function mergeData(existingEntryData, updateData) {
9
9
  };
10
10
  }
11
11
  export const mutationUpdateResolver = async (source, args, context, info) => {
12
+ void info;
12
13
  if (!isObjectType(context.type)) {
13
14
  throw createError(`Type "${context.type.name}" cannot be mutated as is not an ObjectType.`, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {});
14
15
  }
15
16
  const existingEntry = await findByTypeId(context, context.type.name, args.id);
16
- const existingReferencedEntryIds = await getReferencedEntryIds(context.type, context, null, info.returnType, existingEntry.data ?? null);
17
17
  const mergedData = mergeData(existingEntry.data ?? null, args.data ?? null);
18
- const updatedReferencedEntryIds = await getReferencedEntryIds(context.type, context, null, info.returnType, mergedData);
19
- const noLongerReferencedIds = existingReferencedEntryIds.filter((entryId) => !updatedReferencedEntryIds.includes(entryId));
20
- const newlyReferencedIds = updatedReferencedEntryIds.filter((entryId) => !existingReferencedEntryIds.includes(entryId));
21
- const referencedEntryUpdates = [];
22
- for (const noLongerReferencedEntryId of noLongerReferencedIds) {
23
- const noLongerReferencedEntry = await findById(context, noLongerReferencedEntryId);
24
- referencedEntryUpdates.push({
25
- ...noLongerReferencedEntry,
26
- metadata: {
27
- ...noLongerReferencedEntry.metadata,
28
- referencedBy: noLongerReferencedEntry.metadata.referencedBy?.filter((entryId) => entryId !== args.id),
29
- },
30
- deletion: false,
31
- });
32
- }
33
- for (const newlyReferencedEntryId of newlyReferencedIds) {
34
- const newlyReferencedEntry = await findById(context, newlyReferencedEntryId);
35
- const updatedReferenceList = [
36
- ...(newlyReferencedEntry.metadata.referencedBy ?? []),
37
- args.id,
38
- ].sort();
39
- referencedEntryUpdates.push({
40
- ...newlyReferencedEntry,
41
- metadata: {
42
- ...newlyReferencedEntry.metadata,
43
- referencedBy: updatedReferenceList,
44
- },
45
- deletion: false,
46
- });
47
- }
18
+ await validateEntryReferences(context.type, context, mergedData);
48
19
  const commit = await context.gitAdapter.createCommit({
49
20
  ref: context.branch,
50
21
  parentSha: context.getCurrentHash(),
51
22
  entries: [
52
- { ...existingEntry, data: mergedData, deletion: false },
53
- ...referencedEntryUpdates,
23
+ {
24
+ id: existingEntry.id,
25
+ // only the type is written, which removes metadata no longer in use from existing entries
26
+ metadata: { type: existingEntry.metadata.type },
27
+ data: mergedData,
28
+ deletion: false,
29
+ },
54
30
  ],
55
31
  message: args.commitMessage,
56
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-update-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutation-update-resolver.js","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/mutation-update-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAA;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGtC,OAAO,EAAE,WAAW,EAAa,MAAM,iBAAiB,CAAA;AAExD,SAAS,SAAS,CAChB,iBAA4B,EAC5B,UAAqB;IAErB,OAAO;QACL,GAAG,iBAAiB;QACpB,GAAG,UAAU;KACd,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAqC,KAAK,EAC3E,MAAM,EACN,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,EAAE;IACF,KAAK,IAAI,CAAA;IACT,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,WAAW,CACf,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,8CAA8C,mDAExE,EAAE,CACH,CAAA;IACH,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAE7E,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;IAC3E,MAAM,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;QACnD,GAAG,EAAE,OAAO,CAAC,MAAM;QACnB,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE;QACnC,OAAO,EAAE;YACP;gBACE,EAAE,EAAE,aAAa,CAAC,EAAE;gBACpB,0FAA0F;gBAC1F,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAC/C,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,KAAK;aAChB;SACF;QACD,OAAO,EAAE,IAAI,CAAC,aAAa;KAC5B,CAAC,CAAA;IACF,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEzC,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5E,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAA;AACtD,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-by-id-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/query-by-id-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD,eAAO,MAAM,iBAAiB,EAAE,qBAAqB,CAAC,SAAS,CAU9D,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-every-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/query-every-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD,eAAO,MAAM,kBAAkB,EAAE,qBAAqB,CAAC,SAAS,EAAE,CAYjE,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-search-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/query-search-resolver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKjD,eAAO,MAAM,mBAAmB,EAAE,mBA6EjC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-type-by-id-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/query-type-by-id-resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD,eAAO,MAAM,qBAAqB,EAAE,qBAAqB,CAAC,MAAM,CAQ/D,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union-type-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/graphql/resolvers/query-mutation-resolvers/union-type-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAG/C,eAAO,MAAM,iBAAiB,EAAE,iBAyB/B,CAAA"}
@@ -3,7 +3,7 @@ import { GraphQLFieldResolver, GraphQLNamedType, GraphQLTypeResolver } from 'gra
3
3
  import { EntryData } from '@commitspark/git-adapter';
4
4
  import { SearchHit } from '@commitspark/search-adapter';
5
5
  import { RecursiveArray } from './field-resolvers/types.ts';
6
- export interface QueryMutationResolverContext extends ApolloContext {
6
+ interface QueryMutationResolverContext extends ApolloContext {
7
7
  type: GraphQLNamedType;
8
8
  }
9
9
  export type QueryMutationResolver<ResultType> = GraphQLFieldResolver<unknown, QueryMutationResolverContext, {
@@ -22,5 +22,8 @@ export type SearchQueryResolver = GraphQLFieldResolver<unknown, ApolloContext, {
22
22
  first?: number | null;
23
23
  }, Promise<SearchHit[]>>;
24
24
  export type ContextInjectionResolver = GraphQLFieldResolver<EntryData, ApolloContext, Record<string, unknown>, Promise<RecursiveArray<EntryData>>>;
25
+ export type ReferencedByResolver = GraphQLFieldResolver<EntryData & {
26
+ id: string;
27
+ }, ApolloContext, Record<string, never>, Promise<string[]>>;
25
28
  export {};
26
29
  //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/graphql/resolvers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,UAAU,4BAA6B,SAAQ,aAAa;IAC1D,IAAI,EAAE,gBAAgB,CAAA;CACvB;AAED,MAAM,MAAM,qBAAqB,CAAC,UAAU,IAAI,oBAAoB,CAClE,OAAO,EACP,4BAA4B,EAC5B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EACvD,OAAO,CAAC,UAAU,CAAC,CACpB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,CACjD,2BAA2B,EAC3B,aAAa,CACd,CAAA;AAED,KAAK,2BAA2B,GAAG,SAAS,GAAG;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,CACpD,OAAO,EACP,aAAa,EACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACjE,OAAO,CAAC,SAAS,EAAE,CAAC,CACrB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CACzD,SAAS,EACT,aAAa,EACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvB,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CACnC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CACrD,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC1B,aAAa,EACb,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAClB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-analyzer.d.ts","sourceRoot":"","sources":["../../../src/graphql/schema-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAIjB,MAAM,SAAS,CAAA;AAIhB,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,oBAAoB,CAwCzE;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,iBAAiB,EAAE,CAAA;IACxC,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,cAAc,EAAE,oBAAoB,EAAE,CAAA;IACtC,UAAU,EAAE,gBAAgB,EAAE,CAAA;CAC/B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../../../src/graphql/schema-generator.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,2BAA2B,EAE5B,MAAM,uBAAuB,CAAA;AAU9B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAe5C,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,2BAA2B,CAAC,CAkJtC"}
@@ -1,4 +1,4 @@
1
- import { generateQueriesAndMutations, generateSearchQuery, generateTypeNameQuery, } from "./queries-mutations-generator.js";
1
+ import { generateQueriesAndMutations, generateReferencedByFields, generateSearchQuery, generateTypeNameQuery, } from "./queries-mutations-generator.js";
2
2
  import { makeExecutableSchema, } from '@graphql-tools/schema';
3
3
  import { analyzeSchema } from "./schema-analyzer.js";
4
4
  import { generateIdInputTypeStrings, generateObjectInputTypeStrings, generateUnionInputTypeStrings, } from "./input-type-generator.js";
@@ -26,6 +26,7 @@ export async function generateSchema(context) {
26
26
  const generatedQueriesMutations = generateQueriesAndMutations(schemaAnalyzerResult.entryDirectiveTypes);
27
27
  const generatedTypeNameQuery = generateTypeNameQuery();
28
28
  const generatedSearchQuery = context.searchAdapter !== undefined ? generateSearchQuery() : undefined;
29
+ const generatedReferencedByFields = generateReferencedByFields(schemaAnalyzerResult.entryDirectiveTypes);
29
30
  const generatedObjectInputTypeStrings = generateObjectInputTypeStrings(schemaAnalyzerResult.objectTypes);
30
31
  const generatedUnionInputTypeStrings = generateUnionInputTypeStrings(schemaAnalyzerResult.unionTypes);
31
32
  const generatedSchemaRootTypeStrings = generateSchemaRootTypeStrings(generatedQueriesMutations, generatedTypeNameQuery, generatedSearchQuery);
@@ -77,12 +78,21 @@ ${generatedSchemaRootTypeStrings}`;
77
78
  ...generatedObjectTypeFieldResolvers[typeName],
78
79
  };
79
80
  }
81
+ for (const field of generatedReferencedByFields) {
82
+ allGeneratedResolvers[field.typeName] = {
83
+ ...(allGeneratedResolvers[field.typeName] ?? {}),
84
+ [field.name]: field.resolver,
85
+ };
86
+ }
80
87
  const typeDefs = [
81
88
  filteredOriginalSchemaString,
82
89
  generatedSchemaString,
83
90
  generatedIdInputTypeStrings.join('\n'),
84
91
  generatedObjectInputTypeStrings.join('\n'),
85
92
  generatedUnionInputTypeStrings.join('\n'),
93
+ generatedReferencedByFields
94
+ .map((field) => field.typeExtensionString)
95
+ .join('\n'),
86
96
  generatedSearchQuery?.typeDefinitionString ?? '',
87
97
  ].filter((typeDef) => typeDef.length > 0);
88
98
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"schema-generator.js","sourceRoot":"","sources":["../../../src/graphql/schema-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-generator.js","sourceRoot":"","sources":["../../../src/graphql/schema-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-root-type-generator.d.ts","sourceRoot":"","sources":["../../../src/graphql/schema-root-type-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,oBAAoB,EACrB,MAAM,kCAAkC,CAAA;AAEzC,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,eAAe,EAAE,EACnC,SAAS,EAAE,cAAc,EACzB,WAAW,EAAE,oBAAoB,GAAG,SAAS,GAC5C,MAAM,CA8BR"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive-util.d.ts","sourceRoot":"","sources":["../../../../src/graphql/schema-utils/directive-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAExD,eAAO,MAAM,oBAAoB,UAAU,CAAA;AAC3C,eAAO,MAAM,yBAAyB,eAAe,CAAA;AAErD,wBAAgB,YAAY,CAC1B,WAAW,EAAE,gBAAgB,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9D,aAAa,EAAE,MAAM,GACpB,OAAO,CAMT"}
@@ -0,0 +1,6 @@
1
+ import { GraphQLObjectType, GraphQLSchema } from 'graphql';
2
+ import { ApolloContext } from '../../client.ts';
3
+ import { EntryData } from '@commitspark/git-adapter';
4
+ export declare function validateEntryReferences(entryType: GraphQLObjectType, context: ApolloContext, data: EntryData): Promise<void>;
5
+ export declare function getReferencingEntryIds(context: ApolloContext, schema: GraphQLSchema, id: string): Promise<string[]>;
6
+ //# sourceMappingURL=entry-reference-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-reference-util.d.ts","sourceRoot":"","sources":["../../../../src/graphql/schema-utils/entry-reference-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,aAAa,EAOd,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAU/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAepD,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB"}
@@ -5,105 +5,99 @@ import { ENTRY_DIRECTIVE_NAME, hasDirective } from "./directive-util.js";
5
5
  import { isUnionOfEntryTypes } from "./entry-type-util.js";
6
6
  import { createError } from "../errors.js";
7
7
  import { isEntryData } from "../util.js";
8
- function isPermittedReferenceType(referencedTypeName, fieldType) {
9
- if (isNonNullType(fieldType)) {
10
- return isPermittedReferenceType(referencedTypeName, fieldType.ofType);
11
- }
12
- else if (isListType(fieldType)) {
13
- return isPermittedReferenceType(referencedTypeName, fieldType.ofType);
14
- }
15
- else if (isUnionType(fieldType)) {
16
- return fieldType
17
- .getTypes()
18
- .map((concreteType) => concreteType.name)
19
- .includes(referencedTypeName);
20
- }
21
- else if (isObjectType(fieldType)) {
22
- return fieldType.name === referencedTypeName;
23
- }
24
- return false;
25
- }
26
- async function validateReference(context, fieldName, fieldType, fieldValue) {
27
- if (isNonNullType(fieldType)) {
28
- await validateReference(context, fieldName, fieldType.ofType, fieldValue);
29
- return;
30
- }
31
- if (isListType(fieldType)) {
32
- if (!Array.isArray(fieldValue)) {
33
- throw createError(`Expected array while validation references for field "${fieldName}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
34
- fieldName: fieldName,
35
- fieldValue: fieldValue,
36
- });
37
- }
38
- for (const fieldListElement of fieldValue) {
39
- await validateReference(context, fieldName, fieldType.ofType, fieldListElement);
40
- }
41
- return;
42
- }
43
- if (isUnionType(fieldType) || isObjectType(fieldType)) {
44
- if (fieldValue === null ||
45
- !('id' in fieldValue) ||
46
- typeof fieldValue.id !== 'string') {
47
- throw createError(`Expected key "id" with value of type string in data while validating reference for field "${fieldName}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
48
- fieldName: fieldName,
49
- fieldValue: fieldValue,
50
- });
51
- }
52
- const referencedId = fieldValue.id;
8
+ // commits are immutable, so an index built from the cached entries of a commit stays valid for as long as these
9
+ // entries remain cached
10
+ const referencedByIndexes = new WeakMap();
11
+ export async function validateEntryReferences(entryType, context, data) {
12
+ for (const reference of getEntryReferences(entryType, data)) {
53
13
  let referencedTypeName;
54
14
  try {
55
- referencedTypeName = await getTypeById(context, referencedId);
15
+ referencedTypeName = await getTypeById(context, reference.id);
56
16
  }
57
17
  catch {
58
- throw createError(`Failed to resolve entry reference "${referencedId}".`, "BAD_USER_INPUT" /* ErrorCode.BAD_USER_INPUT */, {
59
- fieldName: fieldName,
60
- fieldValue: referencedId,
18
+ throw createError(`Failed to resolve entry reference "${reference.id}".`, "BAD_USER_INPUT" /* ErrorCode.BAD_USER_INPUT */, {
19
+ fieldName: reference.fieldName,
20
+ fieldValue: reference.id,
61
21
  });
62
22
  }
63
- if (!isPermittedReferenceType(referencedTypeName, fieldType)) {
64
- throw createError(`Reference with ID "${referencedId}" points to entry of incompatible type "${referencedTypeName}".`, "BAD_USER_INPUT" /* ErrorCode.BAD_USER_INPUT */, {
65
- fieldName: fieldName,
66
- fieldValue: referencedId,
23
+ if (!isPermittedReferenceType(referencedTypeName, reference.fieldType)) {
24
+ throw createError(`Reference with ID "${reference.id}" points to entry of incompatible type "${referencedTypeName}".`, "BAD_USER_INPUT" /* ErrorCode.BAD_USER_INPUT */, {
25
+ fieldName: reference.fieldName,
26
+ fieldValue: reference.id,
67
27
  });
68
28
  }
69
29
  }
70
30
  }
71
- export async function getReferencedEntryIds(rootType, context, fieldName, type, data) {
31
+ export async function getReferencingEntryIds(context, schema, id) {
32
+ const entriesRecord = await context.repositoryCache.getEntriesRecord(context, context.getCurrentHash());
33
+ let referencedByIndex = referencedByIndexes.get(entriesRecord);
34
+ if (referencedByIndex === undefined) {
35
+ referencedByIndex = buildReferencedByIndex(schema, entriesRecord);
36
+ referencedByIndexes.set(entriesRecord, referencedByIndex);
37
+ }
38
+ return referencedByIndex.get(id) ?? [];
39
+ }
40
+ function buildReferencedByIndex(schema, entriesRecord) {
41
+ const referencedByIndex = new Map();
42
+ for (const entry of entriesRecord.byId.values()) {
43
+ const entryType = schema.getType(entry.metadata.type);
44
+ if (!isObjectType(entryType) ||
45
+ !hasDirective(entryType, ENTRY_DIRECTIVE_NAME)) {
46
+ throw createError(`Entry "${entry.id}" is of type "${entry.metadata.type}", which is not a type with directive ` +
47
+ `@${ENTRY_DIRECTIVE_NAME} in the schema.`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
48
+ typeName: entry.metadata.type,
49
+ fieldValue: entry.id,
50
+ });
51
+ }
52
+ const referencedIds = new Set(getEntryReferences(entryType, entry.data ?? null).map((reference) => reference.id));
53
+ for (const referencedId of referencedIds) {
54
+ const referencingIds = referencedByIndex.get(referencedId) ?? [];
55
+ referencingIds.push(entry.id);
56
+ referencedByIndex.set(referencedId, referencingIds);
57
+ }
58
+ }
59
+ for (const referencingIds of referencedByIndex.values()) {
60
+ referencingIds.sort();
61
+ }
62
+ return referencedByIndex;
63
+ }
64
+ function getEntryReferences(entryType, data) {
65
+ // the fields of the entry itself are traversed directly, so that any nested @Entry type is treated as reference,
66
+ // including references to entries of the same type
67
+ return getReferencesInObjectFields(entryType, data);
68
+ }
69
+ function getReferencesInObjectFields(type, data) {
70
+ if (data === null || data === undefined) {
71
+ return [];
72
+ }
73
+ // expect our object type to hold EntryData (i.e. an object)
74
+ if (!isEntryData(data) || data === null) {
75
+ throw createError(`Expected object as data for type "${type.name}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
76
+ typeName: type.name,
77
+ fieldValue: data,
78
+ });
79
+ }
80
+ return Object.entries(type.getFields()).flatMap(([fieldName, field]) => getReferencesInField(fieldName, field.type, data[fieldName]));
81
+ }
82
+ function getReferencesInField(fieldName, type, data) {
72
83
  if (data === null || data === undefined || isScalarType(type)) {
73
84
  return [];
74
85
  }
75
86
  if (isNonNullType(type)) {
76
- return getReferencedEntryIds(rootType, context, fieldName, type.ofType, data);
87
+ return getReferencesInField(fieldName, type.ofType, data);
77
88
  }
78
89
  if (isListType(type)) {
79
90
  if (!Array.isArray(data)) {
80
- throw createError(`Expected array as data for field "${fieldName}". `, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
81
- fieldName: fieldName ? fieldName : undefined,
91
+ throw createError(`Expected array as data for field "${fieldName}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
92
+ fieldName: fieldName,
82
93
  fieldValue: data,
83
94
  });
84
95
  }
85
- let referencedEntryIds = [];
86
- for (const element of data) {
87
- referencedEntryIds = [
88
- ...referencedEntryIds,
89
- ...(await getReferencedEntryIds(rootType, context, fieldName, type.ofType, element)),
90
- ];
91
- }
92
- // deduplicate
93
- referencedEntryIds = [...new Set(referencedEntryIds)];
94
- return referencedEntryIds;
96
+ return data.flatMap((element) => getReferencesInField(fieldName, type.ofType, element));
95
97
  }
96
98
  if (isUnionType(type)) {
97
- if (!isEntryData(data)) {
98
- throw createError(`Expected object as data for type "${type.name}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
99
- typeName: type.name,
100
- fieldName: fieldName ? fieldName : undefined,
101
- fieldValue: data,
102
- });
103
- }
104
99
  if (isUnionOfEntryTypes(type)) {
105
- const referenceId = await getValidatedReferenceId(context, fieldName, type, data);
106
- return [referenceId];
100
+ return [createEntryReference(fieldName, type, data)];
107
101
  }
108
102
  const requestedUnionTypeName = getUnionTypeNameFromFieldValue(data);
109
103
  const concreteFieldUnionType = type
@@ -113,61 +107,39 @@ export async function getReferencedEntryIds(rootType, context, fieldName, type,
113
107
  throw createError(`Type "${requestedUnionTypeName}" found in field data is not a valid type for ` +
114
108
  `union type "${type.name}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
115
109
  typeName: type.name,
116
- fieldName: fieldName ? fieldName : undefined,
110
+ fieldName: fieldName,
117
111
  fieldValue: data,
118
112
  });
119
113
  }
120
- const unionValue = getUnionValue(data);
121
- return getReferencedEntryIds(rootType, context, fieldName, concreteFieldUnionType, unionValue);
114
+ return getReferencesInObjectFields(concreteFieldUnionType, getUnionValue(data));
122
115
  }
123
116
  if (isObjectType(type)) {
124
- if (type.name !== rootType.name &&
125
- hasDirective(type, ENTRY_DIRECTIVE_NAME)) {
126
- const referenceId = await getValidatedReferenceId(context, fieldName, type, data);
127
- return [referenceId];
128
- }
129
- else {
130
- let referencedEntryIds = [];
131
- for (const [fieldsKey, field] of Object.entries(type.getFields())) {
132
- // expect our object type to hold EntryData (i.e. an object)
133
- if (Array.isArray(data) || !isEntryData(data)) {
134
- throw createError(`Expected object as data for type "${type.name}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
135
- typeName: type.name,
136
- fieldName: field.name ? field.name : undefined,
137
- });
138
- }
139
- // recursively get referenced IDs in nested data
140
- const nestedResult = await getReferencedEntryIds(rootType, context, fieldsKey, field.type, data[fieldsKey]);
141
- referencedEntryIds = [...referencedEntryIds, ...nestedResult];
142
- }
143
- // deduplicate
144
- referencedEntryIds = [...new Set(referencedEntryIds)];
145
- return referencedEntryIds;
117
+ if (hasDirective(type, ENTRY_DIRECTIVE_NAME)) {
118
+ return [createEntryReference(fieldName, type, data)];
146
119
  }
120
+ return getReferencesInObjectFields(type, data);
147
121
  }
148
122
  return [];
149
123
  }
150
- async function getValidatedReferenceId(context, fieldName, type, data) {
151
- if (data === null ||
152
- data === undefined ||
153
- !isEntryData(data) ||
154
- Array.isArray(data)) {
155
- throw createError(`Expected object as data for field "${fieldName}" of type "${type.name}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
156
- typeName: type.name,
157
- fieldName: fieldName ? fieldName : undefined,
124
+ function createEntryReference(fieldName, fieldType, data) {
125
+ if (typeof data !== 'object' ||
126
+ data === null ||
127
+ !('id' in data) ||
128
+ typeof data.id !== 'string') {
129
+ throw createError(`Expected key "id" with value of type string in data of field "${fieldName}" of type "${fieldType.name}".`, "BAD_REPOSITORY_DATA" /* ErrorCode.BAD_REPOSITORY_DATA */, {
130
+ typeName: fieldType.name,
131
+ fieldName: fieldName,
158
132
  fieldValue: data,
159
133
  });
160
134
  }
161
- await validateReference(context, fieldName ? fieldName : '', type, data);
162
- let referencedId = null;
163
- if (typeof (referencedId = data.id) !== 'string') {
164
- throw createError(`Expected a key "id" with value of type string in data of field "${fieldName}" of type "${type.name}"` +
165
- ` after this reference was just verified to be valid.`, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {
166
- typeName: type.name,
167
- fieldName: fieldName ? fieldName : undefined,
168
- fieldValue: data,
169
- });
135
+ return { id: data.id, fieldName, fieldType };
136
+ }
137
+ function isPermittedReferenceType(referencedTypeName, fieldType) {
138
+ if (isUnionType(fieldType)) {
139
+ return fieldType
140
+ .getTypes()
141
+ .some((concreteType) => concreteType.name === referencedTypeName);
170
142
  }
171
- return referencedId;
143
+ return fieldType.name === referencedTypeName;
172
144
  }
173
145
  //# sourceMappingURL=entry-reference-util.js.map