great 1.4.0 → 1.5.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 (67) hide show
  1. package/README.md +18 -6
  2. package/dist/explode/transform.js +3 -4
  3. package/dist/explode/transform.js.map +1 -1
  4. package/dist/explode/unescapeMongo.js +33 -0
  5. package/dist/explode/unescapeMongo.js.map +1 -1
  6. package/dist/generated/operations.d.ts +29 -20
  7. package/dist/generated/schema.d.ts +56 -6
  8. package/dist/generated/schema.js.map +1 -1
  9. package/dist/import/index.js +24 -17
  10. package/dist/import/index.js.map +1 -1
  11. package/dist/include/index.js +1 -4
  12. package/dist/include/index.js.map +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/integrations/create.d.ts +1 -0
  15. package/dist/integrations/create.js +11 -2
  16. package/dist/integrations/create.js.map +1 -1
  17. package/dist/push/index.js +234 -31
  18. package/dist/push/index.js.map +1 -1
  19. package/dist/utils/applyImports.d.ts +14 -0
  20. package/dist/utils/applyImports.js +147 -0
  21. package/dist/utils/applyImports.js.map +1 -0
  22. package/dist/utils/config.d.ts +1 -1
  23. package/dist/utils/config.js.map +1 -1
  24. package/dist/utils/createIntegrationFromFile.d.ts +1 -0
  25. package/dist/utils/createIntegrationFromFile.js +9 -1
  26. package/dist/utils/createIntegrationFromFile.js.map +1 -1
  27. package/dist/utils/detectPullConflicts.js +13 -3
  28. package/dist/utils/detectPullConflicts.js.map +1 -1
  29. package/dist/utils/graphqlError.d.ts +1 -0
  30. package/dist/utils/graphqlError.js +16 -1
  31. package/dist/utils/graphqlError.js.map +1 -1
  32. package/dist/utils/greatFile.d.ts +1 -0
  33. package/dist/utils/greatFile.js +8 -0
  34. package/dist/utils/greatFile.js.map +1 -1
  35. package/dist/utils/hashContent.d.ts +1 -0
  36. package/dist/utils/hashContent.js +6 -3
  37. package/dist/utils/hashContent.js.map +1 -1
  38. package/dist/utils/integrationConfig.d.ts +13 -0
  39. package/dist/utils/integrationConfig.js +29 -0
  40. package/dist/utils/integrationConfig.js.map +1 -0
  41. package/dist/utils/promptForValue.d.ts +1 -0
  42. package/dist/utils/promptForValue.js +3 -2
  43. package/dist/utils/promptForValue.js.map +1 -1
  44. package/dist/utils/resolveImports.d.ts +9 -0
  45. package/dist/utils/resolveImports.js +67 -0
  46. package/dist/utils/resolveImports.js.map +1 -0
  47. package/dist/utils/saveIntegration.js +7 -2
  48. package/dist/utils/saveIntegration.js.map +1 -1
  49. package/dist/utils/valueTypes.d.ts +4 -0
  50. package/dist/utils/valueTypes.js +6 -0
  51. package/dist/utils/valueTypes.js.map +1 -1
  52. package/dist/utils/writeShadowElement.d.ts +5 -8
  53. package/dist/utils/writeShadowElement.js +25 -81
  54. package/dist/utils/writeShadowElement.js.map +1 -1
  55. package/dist/values/list.js +11 -8
  56. package/dist/values/list.js.map +1 -1
  57. package/dist/values/set.js +2 -3
  58. package/dist/values/set.js.map +1 -1
  59. package/dist/values/unset.js +3 -1
  60. package/dist/values/unset.js.map +1 -1
  61. package/package.json +9 -9
  62. package/dist/utils/mergeEndpointLists.d.ts +0 -7
  63. package/dist/utils/mergeEndpointLists.js +0 -32
  64. package/dist/utils/mergeEndpointLists.js.map +0 -1
  65. package/dist/utils/resolveTemplateImport.d.ts +0 -3
  66. package/dist/utils/resolveTemplateImport.js +0 -30
  67. package/dist/utils/resolveTemplateImport.js.map +0 -1
@@ -0,0 +1,147 @@
1
+ import fs from 'node:fs';
2
+ import { elementTypeToFolder, removeElementFile, writeElementFile, } from './elementFiles.js';
3
+ import { getElementRecord, removeElementRecord, setElementRecord, setProvenance, upsertImportRecord, } from './greatFile.js';
4
+ import { ENDPOINT_LISTS_FOLDER, isEndpointKeys } from './serviceFile.js';
5
+ import { writeShadowFile } from './writeShadowElement.js';
6
+ const elementId = (element) => `${element.type}/${element.key}`;
7
+ const resolvedProvenance = (resolved) => resolved.content?.provenance ?? [];
8
+ const conflictFor = (resolved, folder, reason) => ({
9
+ status: 'conflict',
10
+ conflict: { key: resolved.key, folder, reason },
11
+ });
12
+ function classifyResolved(resolved) {
13
+ const folder = elementTypeToFolder[resolved.type];
14
+ if (!folder) {
15
+ return { status: 'skip' };
16
+ }
17
+ else if (!resolved.content) {
18
+ return conflictFor(resolved, folder, 'source has no resolvable content');
19
+ }
20
+ else if (resolved.content.sourceId) {
21
+ return { status: 'shadow', folder };
22
+ }
23
+ else if (resolvedProvenance(resolved).length === 0) {
24
+ return { status: 'kept', folder };
25
+ }
26
+ else if (folder === ENDPOINT_LISTS_FOLDER) {
27
+ return { status: 'merged', folder };
28
+ }
29
+ return conflictFor(resolved, folder, 'unexpected local content from Integreat');
30
+ }
31
+ function findRemovals(previous, resolved) {
32
+ const remaining = new Set(resolved.map(elementId));
33
+ return previous
34
+ .filter((element) => element.provenance?.length && !remaining.has(elementId(element)))
35
+ .flatMap((element) => {
36
+ const folder = elementTypeToFolder[element.type];
37
+ return folder ? [{ folder, key: element.key }] : [];
38
+ })
39
+ .sort((a, b) => Number(b.folder === ENDPOINT_LISTS_FOLDER) -
40
+ Number(a.folder === ENDPOINT_LISTS_FOLDER));
41
+ }
42
+ const mapConflicts = (conflicts) => conflicts.map((conflict) => ({
43
+ key: conflict.key,
44
+ folder: elementTypeToFolder[conflict.type] ?? conflict.type,
45
+ reason: conflict.reason,
46
+ }));
47
+ function planImports(resolved, previous) {
48
+ const plan = {
49
+ shadows: [],
50
+ merged: [],
51
+ kept: [],
52
+ removals: findRemovals(previous, resolved.elements),
53
+ skipped: [],
54
+ conflicts: mapConflicts(resolved.conflicts),
55
+ };
56
+ for (const element of resolved.elements) {
57
+ const classified = classifyResolved(element);
58
+ if (classified.status === 'skip') {
59
+ plan.skipped.push(element);
60
+ }
61
+ else if (classified.status === 'conflict') {
62
+ plan.conflicts.push(classified.conflict);
63
+ }
64
+ else if (classified.status === 'shadow') {
65
+ plan.shadows.push({ resolved: element, folder: classified.folder });
66
+ }
67
+ else if (classified.status === 'merged') {
68
+ plan.merged.push({ resolved: element, folder: classified.folder });
69
+ }
70
+ else {
71
+ plan.kept.push({ resolved: element, folder: classified.folder });
72
+ }
73
+ }
74
+ return plan;
75
+ }
76
+ function writeMergedList(great, resolved, root, fsImpl) {
77
+ const existing = getElementRecord(great, ENDPOINT_LISTS_FOLDER, resolved.key);
78
+ const record = {
79
+ ...(existing?.id ? { id: existing.id } : {}),
80
+ ...(existing?.timestamp ? { timestamp: existing.timestamp } : {}),
81
+ };
82
+ setProvenance(record, resolvedProvenance(resolved));
83
+ setElementRecord(great, ENDPOINT_LISTS_FOLDER, resolved.key, record);
84
+ const endpoints = resolved.content?.data?.endpoints;
85
+ writeElementFile(root, ENDPOINT_LISTS_FOLDER, resolved.key, { endpoints: isEndpointKeys(endpoints) ? endpoints : [] }, great, fsImpl);
86
+ }
87
+ function keepAsLocal(great, { resolved, folder }) {
88
+ const record = getElementRecord(great, folder, resolved.key);
89
+ if (!record) {
90
+ return;
91
+ }
92
+ Reflect.deleteProperty(record, 'source');
93
+ Reflect.deleteProperty(record, 'provenance');
94
+ if (Object.keys(record).length === 0) {
95
+ removeElementRecord(great, folder, resolved.key);
96
+ }
97
+ }
98
+ function removeImported(great, target, root, fsImpl) {
99
+ removeElementFile(root, target.folder, target.key, great, fsImpl);
100
+ removeElementRecord(great, target.folder, target.key);
101
+ }
102
+ function writePlan(great, plan, imports, root, fsImpl) {
103
+ for (const target of plan.removals) {
104
+ removeImported(great, target, root, fsImpl);
105
+ }
106
+ for (const { resolved, folder } of plan.shadows) {
107
+ const provenance = resolvedProvenance(resolved);
108
+ writeShadowFile(great, resolved, folder, provenance, root, fsImpl);
109
+ }
110
+ for (const { resolved } of plan.merged) {
111
+ writeMergedList(great, resolved, root, fsImpl);
112
+ }
113
+ for (const kept of plan.kept) {
114
+ keepAsLocal(great, kept);
115
+ }
116
+ for (const { templateId, timestamp } of imports) {
117
+ upsertImportRecord(great, templateId, timestamp);
118
+ }
119
+ }
120
+ const toTarget = ({ resolved, folder }) => ({
121
+ folder,
122
+ key: resolved.key,
123
+ });
124
+ export default function applyImports(great, resolved, previous, options = {}) {
125
+ const plan = planImports(resolved, previous);
126
+ const { skipped, conflicts } = plan;
127
+ if (conflicts.length > 0) {
128
+ return {
129
+ written: [],
130
+ merged: [],
131
+ kept: [],
132
+ removed: [],
133
+ skipped,
134
+ conflicts,
135
+ };
136
+ }
137
+ writePlan(great, plan, resolved.imports, options.root, options.fsImpl ?? fs);
138
+ return {
139
+ written: plan.shadows.map(toTarget),
140
+ merged: plan.merged.map(toTarget),
141
+ kept: plan.kept.map(toTarget),
142
+ removed: plan.removals,
143
+ skipped,
144
+ conflicts,
145
+ };
146
+ }
147
+ //# sourceMappingURL=applyImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyImports.js","sourceRoot":"","sources":["../../src/utils/applyImports.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export interface ConfigSchema {
12
12
  }
13
13
  export declare function getConfig(): Conf<ConfigSchema>;
14
14
  export declare function getConfigValue<K extends keyof ConfigSchema>(key: K, config?: Conf<ConfigSchema>): ConfigSchema[K] | undefined;
15
- export declare function setConfigValue<K extends keyof ConfigSchema>(key: K, value: ConfigSchema[K], config?: Conf<ConfigSchema>): void;
15
+ export declare function setConfigValue<K extends keyof ConfigSchema>(key: K, value: Exclude<ConfigSchema[K], undefined>, config?: Conf<ConfigSchema>): void;
16
16
  export declare function deleteConfigValue<K extends keyof ConfigSchema>(key: K, config?: Conf<ConfigSchema>): void;
17
17
  export declare function getEnvironments(config?: Conf<ConfigSchema>): Record<string, NamedEnvironment>;
18
18
  export declare function getCurrentEnvName(config?: Conf<ConfigSchema>): string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,IAAI,MAAM,MAAM,CAAA;AAwBvB,MAAM,eAAe,GAAG,0BAA0B,CAAA;AAClD,MAAM,eAAe,GAAG,0BAA0B,CAAA;AAElD,IAAI,cAA8C,CAAA;AAMlD,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,IAAI,CAAe;YACtC,WAAW,EAAE,OAAO;SACrB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,GAAM,EACN,MAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,SAAS,EAAE,CAAA;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,GAAM,EACN,KAA0C,EAC1C,MAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,SAAS,EAAE,CAAA;IAClC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,GAAM,EACN,MAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,SAAS,EAAE,CAAA;IAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC;AAGD,MAAM,UAAU,eAAe,CAC7B,MAA2B;IAE3B,OAAO,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;AACrD,CAAC;AAMD,MAAM,UAAU,iBAAiB,CAAC,MAA2B;IAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAA;IAC3B,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IACpC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;AAC/E,CAAC;AAGD,MAAM,UAAU,MAAM,CAAC,MAA2B;IAChD,OAAO,iBAAiB,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;AAC7C,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA2B;IAE3B,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AAKD,MAAM,aAAa,GAAG,IAAI,OAAO,EAAsB,CAAA;AAEvD,SAAS,eAAe,CAAC,MAA2B;IAClD,IAAI,MAAM,CAAC,MAAM,CAAC;QAAE,OAAM;IAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,SAAS,EAAE,CAAA;IAClC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAM;IACnC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACvB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,2CAA2C,iBAAiB,CAAC,MAAM,CAAC,EAAE,CACvE,CACF,CAAA;AACH,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,eAAe,CAAC,MAAM,CAAC,CAAA;IACvB,OAAO,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,eAAe,CAAA;AACjE,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,eAAe,CAAC,MAAM,CAAC,CAAA;IACvB,OAAO,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,eAAe,CAAA;AACjE,CAAC;AAKD,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,MAAM,IAAI,GAAG,MAAM,IAAI,SAAS,EAAE,CAAA;IAClC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAC5B,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;QACtC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;KACnC,CAAA;AACH,CAAC"}
@@ -6,6 +6,7 @@ import type { GreatFs } from '../types.js';
6
6
  export interface CreateIntegrationResult {
7
7
  success: boolean;
8
8
  error?: Error | string;
9
+ hint?: string;
9
10
  integration?: {
10
11
  id: string;
11
12
  key: string;
@@ -1,9 +1,10 @@
1
1
  import fs from 'node:fs';
2
2
  import { currentIntegrationKey } from './fetchLocal.js';
3
3
  import { sentenceCase } from 'change-case';
4
+ import chalk from 'chalk';
4
5
  import { gql } from 'graphql-tag';
5
6
  import resolveIntegrationType from './integrationType.js';
6
- import { getGraphQLErrorMessage } from './graphqlError.js';
7
+ import { getGraphQLErrorMessage, isConflictError } from './graphqlError.js';
7
8
  import { resolveAccountId } from './resolveAccount.js';
8
9
  const CreateIntegrationMutationDocument = gql `
9
10
  mutation CreateIntegrationFromFile(
@@ -69,6 +70,13 @@ export default async function createIntegrationFromFile(graphqlClient, apiToken,
69
70
  type: resolveIntegrationType(integrationData.type),
70
71
  });
71
72
  if (result.error) {
73
+ if (isConflictError(result.error)) {
74
+ return {
75
+ success: false,
76
+ error: `An integration with key '${key}' already exists in this account.`,
77
+ hint: `The key comes from the folder name – rename the folder, or run ${chalk.bold('great clone')} to work on the existing integration.`,
78
+ };
79
+ }
72
80
  return {
73
81
  success: false,
74
82
  error: `Failed to create integration: ${getGraphQLErrorMessage(result.error)}`,
@@ -1 +1 @@
1
- {"version":3,"file":"createIntegrationFromFile.js","sourceRoot":"","sources":["../../src/utils/createIntegrationFromFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createIntegrationFromFile.js","sourceRoot":"","sources":["../../src/utils/createIntegrationFromFile.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,14 @@ import hashContent from './hashContent.js';
3
3
  import { getElementRecord, sameProvenance } from './greatFile.js';
4
4
  import { typeToFolder } from './saveIntegration.js';
5
5
  import { readWorkspaceElements } from './elementFiles.js';
6
+ import { CONFIG_KEY, CONFIG_RECORD_FOLDER, findConfigElement, hashFlags, readLocalFlags, } from './integrationConfig.js';
6
7
  function readLocalElements(root, fsImpl) {
7
8
  return new Map(readWorkspaceElements(root, fsImpl).map((element) => [
8
9
  `${element.folder}/${element.key}`,
9
10
  element,
10
11
  ]));
11
12
  }
12
- function conflictReason(element, localData, baseHash) {
13
- const localHash = hashContent(localData);
14
- const remoteHash = hashContent({ ...element.content?.data });
13
+ function compareHashes(remoteHash, localHash, baseHash) {
15
14
  if (remoteHash === localHash) {
16
15
  return undefined;
17
16
  }
@@ -25,6 +24,13 @@ function conflictReason(element, localData, baseHash) {
25
24
  ? 'Local changes would be overwritten'
26
25
  : 'Content changed both locally and remotely';
27
26
  }
27
+ const conflictReason = (element, localData, baseHash) => compareHashes(hashContent({ ...element.content?.data }), hashContent(localData), baseHash);
28
+ function configConflictReason(config, localFlags, record) {
29
+ if (!record) {
30
+ return undefined;
31
+ }
32
+ return compareHashes(hashFlags(config?.content?.data ?? {}), hashFlags(localFlags ?? {}), record.hash);
33
+ }
28
34
  function shadowPinConflict(element, record) {
29
35
  const pinChanged = (record.source?.timestamp ?? null) !==
30
36
  (element.content?.sourceTimestamp ?? null);
@@ -55,6 +61,10 @@ export default function detectPullConflicts(definitions, priorGreat, root, fsImp
55
61
  conflicts.push({ filePath: local.filePath, reason });
56
62
  }
57
63
  }
64
+ const configReason = configConflictReason(findConfigElement(definitions.elements), readLocalFlags(root, fsImpl), getElementRecord(priorGreat, CONFIG_RECORD_FOLDER, CONFIG_KEY));
65
+ if (configReason) {
66
+ conflicts.push({ filePath: 'integration.json', reason: configReason });
67
+ }
58
68
  return conflicts;
59
69
  }
60
70
  //# sourceMappingURL=detectPullConflicts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detectPullConflicts.js","sourceRoot":"","sources":["../../src/utils/detectPullConflicts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detectPullConflicts.js","sourceRoot":"","sources":["../../src/utils/detectPullConflicts.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,wBAAwB,CAAA;AAmB/B,SAAS,iBAAiB,CACxB,IAAwB,EACxB,MAAe;IAEf,OAAO,IAAI,GAAG,CACZ,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO;KACR,CAAC,CACH,CAAA;AACH,CAAC;AAKD,SAAS,aAAa,CACpB,UAAkB,EAClB,SAAiB,EACjB,QAA4B;IAG5B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAID,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,yDAAyD,CAAA;IAClE,CAAC;IAKD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,UAAU,KAAK,QAAQ;QAC5B,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,2CAA2C,CAAA;AACjD,CAAC;AAKD,MAAM,cAAc,GAAG,CACrB,OAAgB,EAChB,SAAkC,EAClC,QAA4B,EACR,EAAE,CACtB,aAAa,CACX,WAAW,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EACzC,WAAW,CAAC,SAAS,CAAC,EACtB,QAAQ,CACT,CAAA;AAMH,SAAS,oBAAoB,CAC3B,MAA2B,EAC3B,UAA6B,EAC7B,MAAsC;IAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,aAAa,CAClB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,EACtC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,EAC3B,MAAM,CAAC,IAAI,CACZ,CAAA;AACH,CAAC;AAUD,SAAS,iBAAiB,CACxB,OAAgB,EAChB,MAA0B;IAE1B,MAAM,UAAU,GACd,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC;QAClC,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,IAAI,IAAI,CAAC,CAAA;IAC5C,MAAM,iBAAiB,GAAG,CAAC,cAAc,CACvC,MAAM,CAAC,UAAU,EACjB,OAAO,CAAC,OAAO,EAAE,UAAU,CAC5B,CAAA;IACD,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,OAAO,EAAE,SAAS;QACpD,CAAC,CAAC,0CAA0C;QAC5C,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,WAAmC,EACnC,UAAqB,EACrB,IAAwB,EACxB,SAAkB,EAAE;IAEpB,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACrD,MAAM,SAAS,GAAmB,EAAE,CAAA;IAEpC,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;YAEX,SAAQ;QACV,CAAC;QAKD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QAChE,MAAM,MAAM,GACV,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;YACjD,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,oBAAoB,CACvC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,EACvC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,EAC5B,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,EAAE,UAAU,CAAC,CAC/D,CAAA;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export declare function isNotFoundError(error: Error): boolean;
2
+ export declare function isConflictError(error: Error | string): boolean;
2
3
  export declare function getGraphQLErrorMessage(error: Error | string): string;
3
4
  export declare function handleGraphQLError(error: Error | string | undefined, log: (message: string) => void): void;
@@ -6,6 +6,21 @@ export function isNotFoundError(error) {
6
6
  }
7
7
  return error?.message?.includes('NOT_FOUND');
8
8
  }
9
+ export function isConflictError(error) {
10
+ if (typeof error === 'string')
11
+ return false;
12
+ const errors = error.response?.errors;
13
+ return errors?.some((err) => err.extensions?.code === 'CONFLICT') ?? false;
14
+ }
15
+ const INTERNAL_ERROR_CODES = ['INTERNAL_SERVER_ERROR', 'INTERNAL_ERROR'];
16
+ function formatGraphQLErrorMessage(err) {
17
+ if (!err.message)
18
+ return undefined;
19
+ const code = err.extensions?.code;
20
+ return !code || INTERNAL_ERROR_CODES.includes(code)
21
+ ? `The API failed to handle the request:\n${err.message}`
22
+ : err.message;
23
+ }
9
24
  const UNAVAILABLE_STATUSES = [502, 503, 504];
10
25
  function isHttpErrorStatus(status) {
11
26
  return typeof status === 'number' && (status < 200 || status >= 300);
@@ -21,7 +36,7 @@ export function getGraphQLErrorMessage(error) {
21
36
  return error;
22
37
  const response = error.response;
23
38
  const messages = response?.errors
24
- ?.map((err) => err.message)
39
+ ?.map(formatGraphQLErrorMessage)
25
40
  .filter((message) => Boolean(message));
26
41
  if (messages?.length) {
27
42
  return messages.join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"graphqlError.js","sourceRoot":"","sources":["../../src/utils/graphqlError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgBzB,MAAM,UAAU,eAAe,CAAC,KAAY;IAE1C,MAAM,iBAAiB,GAAG,KAAkC,CAAA;IAE5D,IAAI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,WAAW,CAC9C,CAAA;IACH,CAAC;IAGD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9C,CAAC;AAID,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAE5C,SAAS,iBAAiB,CAAC,MAAe;IACxC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,OAAO,6CAA6C,MAAM,sEAAsE,CAAA;IAClI,CAAC;IACD,OAAO,iDAAiD,MAAM,IAAI,CAAA;AACpE,CAAC;AAYD,MAAM,UAAU,sBAAsB,CAAC,KAAqB;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE3C,MAAM,QAAQ,GAAI,KAAmC,CAAC,QAAQ,CAAA;IAC9D,MAAM,QAAQ,GAAG,QAAQ,EAAE,MAAM;QAC/B,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;SAC1B,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3D,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAA;IAC/B,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAA;AACtB,CAAC;AAKD,MAAM,UAAU,kBAAkB,CAChC,KAAiC,EACjC,GAA8B;IAE9B,IAAI,CAAC,KAAK;QAAE,OAAM;IAElB,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,WAAW,GACf,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC3C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IAClC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IAGD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"graphqlError.js","sourceRoot":"","sources":["../../src/utils/graphqlError.ts"],"names":[],"mappings":"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"}
@@ -37,4 +37,5 @@ export declare function renameElementRecord(great: GreatFile, folder: string, ol
37
37
  export declare function getImportRecord(great: GreatFile, templateId: string): GreatImportRecord | undefined;
38
38
  export declare function upsertImportRecord(great: GreatFile, templateId: string, timestamp: string): void;
39
39
  export declare function addProvenance(record: GreatElementRecord, templates: readonly string[]): void;
40
+ export declare function setProvenance(record: GreatElementRecord, templates: readonly string[]): void;
40
41
  export declare function sameProvenance(a: readonly string[] | undefined, b: readonly string[] | undefined): boolean;
@@ -58,6 +58,14 @@ export function addProvenance(record, templates) {
58
58
  record.provenance = [...merged].sort();
59
59
  }
60
60
  }
61
+ export function setProvenance(record, templates) {
62
+ if (templates.length > 0) {
63
+ record.provenance = [...new Set(templates)].sort();
64
+ }
65
+ else {
66
+ Reflect.deleteProperty(record, 'provenance');
67
+ }
68
+ }
61
69
  export function sameProvenance(a, b) {
62
70
  const setA = new Set(a ?? []);
63
71
  const setB = new Set(b ?? []);
@@ -1 +1 @@
1
- {"version":3,"file":"greatFile.js","sourceRoot":"","sources":["../../src/utils/greatFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"greatFile.js","sourceRoot":"","sources":["../../src/utils/greatFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AA8DxB,MAAM,QAAQ,GAAG,aAAa,CAAA;AAE9B,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AAE7E,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,GAAW,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAA;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG,GAAc,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;AAEjE,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,SAAkB,EAAE;IAC/D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAA;QACxD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,EAAE,CAAA;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAgB,EAChB,IAAa,EACb,SAAkB,EAAE;IAEpB,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAgB,EAAsB,EAAE,CACvE,KAAK,CAAC,EAAE,CAAA;AAEV,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,MAAc,EACd,GAAW;IAEX,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,MAAc,EACd,GAAW,EACX,MAA0B;IAE1B,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,MAAc,EACd,GAAW;IAEX,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;AAChE,CAAC;AAID,MAAM,UAAU,uBAAuB,CAAC,KAAgB,EAAE,EAAU;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACrB,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,MAAc,EACd,MAAc,EACd,MAAc;IAEd,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAC1C,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAgB,EAChB,UAAkB;IAElB,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,CAAA;AAC1E,CAAC;AAID,MAAM,UAAU,kBAAkB,CAChC,KAAgB,EAChB,UAAkB,EAClB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAA;IAChC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;IACvE,CAAC;AACH,CAAC;AAID,MAAM,UAAU,aAAa,CAC3B,MAA0B,EAC1B,SAA4B;IAE5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAA;IACpE,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACxC,CAAC;AACH,CAAC;AAID,MAAM,UAAU,aAAa,CAC3B,MAA0B,EAC1B,SAA4B;IAE5B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC;AAID,MAAM,UAAU,cAAc,CAC5B,CAAgC,EAChC,CAAgC;IAEhC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7B,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AACzE,CAAC"}
@@ -1 +1,2 @@
1
+ export declare function hashJson(data: Record<string, unknown>): string;
1
2
  export default function hashContent(data: Record<string, unknown>): string;
@@ -1,7 +1,10 @@
1
1
  import crypto from 'node:crypto';
2
- export default function hashContent(data) {
3
- const { name, description, value, ...content } = data;
4
- const jsonString = JSON.stringify(content);
2
+ export function hashJson(data) {
3
+ const jsonString = JSON.stringify(data);
5
4
  return crypto.createHash('sha256').update(jsonString).digest('hex');
6
5
  }
6
+ export default function hashContent(data) {
7
+ const { name, description, value, ref, ...content } = data;
8
+ return hashJson(content);
9
+ }
7
10
  //# sourceMappingURL=hashContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hashContent.js","sourceRoot":"","sources":["../../src/utils/hashContent.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAahC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,IAA6B;IAK/D,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAA;IAGrD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAG1C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC"}
1
+ {"version":3,"file":"hashContent.js","sourceRoot":"","sources":["../../src/utils/hashContent.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAShC,MAAM,UAAU,QAAQ,CAAC,IAA6B;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAGvC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC;AAcD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,IAA6B;IAK/D,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAA;IAE1D,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { GreatElementRecord } from './greatFile.js';
2
+ import type { GreatFs } from '../types.js';
3
+ export type Flags = Record<string, unknown>;
4
+ export declare const CONFIG_KEY = "config";
5
+ export declare const CONFIG_RECORD_FOLDER = "config";
6
+ export declare const findConfigElement: <T extends {
7
+ __typename: string;
8
+ key: string;
9
+ }>(elements: T[] | undefined) => T | undefined;
10
+ export declare const hashFlags: (flags: Flags) => string;
11
+ export declare function flagsFromIntegration(data: Record<string, unknown> | undefined): Flags | undefined;
12
+ export declare function readLocalFlags(root: string | undefined, fsImpl?: GreatFs): Flags | undefined;
13
+ export declare const buildConfigRecord: (id: string | undefined, timestamp: string | null | undefined, flags: Flags) => GreatElementRecord;
@@ -0,0 +1,29 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { hashJson } from './hashContent.js';
4
+ export const CONFIG_KEY = 'config';
5
+ export const CONFIG_RECORD_FOLDER = 'config';
6
+ const isFlags = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ export const findConfigElement = (elements) => elements?.find((element) => element.__typename === 'ConfigElement' && element.key === CONFIG_KEY);
8
+ export const hashFlags = (flags) => hashJson(flags);
9
+ export function flagsFromIntegration(data) {
10
+ const flags = data?.flags;
11
+ return isFlags(flags) ? flags : undefined;
12
+ }
13
+ export function readLocalFlags(root, fsImpl = fs) {
14
+ try {
15
+ const filePath = root
16
+ ? path.join(root, 'integration.json')
17
+ : 'integration.json';
18
+ return flagsFromIntegration(JSON.parse(fsImpl.readFileSync(filePath, 'utf8')));
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ }
24
+ export const buildConfigRecord = (id, timestamp, flags) => ({
25
+ ...(id ? { id } : {}),
26
+ ...(timestamp ? { timestamp } : {}),
27
+ hash: hashFlags(flags),
28
+ });
29
+ //# sourceMappingURL=integrationConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrationConfig.js","sourceRoot":"","sources":["../../src/utils/integrationConfig.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAM3C,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAA;AAIlC,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAA;AAE5C,MAAM,OAAO,GAAG,CAAC,KAAc,EAAkB,EAAE,CACjD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAGtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,QAAyB,EACV,EAAE,CACjB,QAAQ,EAAE,IAAI,CACZ,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,UAAU,KAAK,eAAe,IAAI,OAAO,CAAC,GAAG,KAAK,UAAU,CACvE,CAAA;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAY,EAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAIlE,MAAM,UAAU,oBAAoB,CAClC,IAAyC;IAEzC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAA;IACzB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3C,CAAC;AAID,MAAM,UAAU,cAAc,CAC5B,IAAwB,EACxB,SAAkB,EAAE;IAEpB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI;YACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC;YACrC,CAAC,CAAC,kBAAkB,CAAA;QACtB,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAID,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EAAsB,EACtB,SAAoC,EACpC,KAAY,EACQ,EAAE,CAAC,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;CACvB,CAAC,CAAA"}
@@ -5,6 +5,7 @@ interface LocalElement {
5
5
  data: Record<string, unknown>;
6
6
  remoteId?: string;
7
7
  }
8
+ export declare const hasValueToSet: (element: LocalElement) => boolean;
8
9
  export declare const findElementsToSet: (elements: LocalElement[]) => LocalElement[];
9
10
  export declare function promptForValueSetting(elements: LocalElement[], log: (message: string) => void): Promise<boolean>;
10
11
  export {};
@@ -1,7 +1,8 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
2
  import chalk from 'chalk';
3
- export const findElementsToSet = (elements) => elements.filter((element) => element.folder === 'values' &&
4
- (element.data.value !== undefined || element.data.ref !== undefined));
3
+ export const hasValueToSet = (element) => element.folder === 'values' &&
4
+ (element.data.value !== undefined || element.data.ref !== undefined);
5
+ export const findElementsToSet = (elements) => elements.filter(hasValueToSet);
5
6
  export async function promptForValueSetting(elements, log) {
6
7
  const elementsToSet = findElementsToSet(elements);
7
8
  if (elementsToSet.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"promptForValue.js","sourceRoot":"","sources":["../../src/utils/promptForValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAA;AAczB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAkB,EAAE,CAC5E,QAAQ,CAAC,MAAM,CACb,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,MAAM,KAAK,QAAQ;IAC3B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CACvE,CAAA;AAOH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAwB,EACxB,GAA8B;IAE9B,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAGjD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;IAGD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAA;IACjE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,CAAA;IAGP,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,sDAAsD;YAC/D,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QAEP,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"promptForValue.js","sourceRoot":"","sources":["../../src/utils/promptForValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAqB,EAAW,EAAE,CAC9D,OAAO,CAAC,MAAM,KAAK,QAAQ;IAC3B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAA;AAKtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAkB,EAAE,CAC5E,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;AAOhC,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAwB,EACxB,GAA8B;IAE9B,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAGjD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;IAGD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAA;IACjE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,CAAA;IAGP,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,sDAAsD;YAC/D,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QAEP,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { GraphQLRequestClient } from './graphqlClient.js';
2
+ import type { GreatFile } from './greatFile.js';
3
+ import type { ResolveImportsQuery } from '../generated/operations.js';
4
+ import type { ImportInput, TargetElementInput } from '../generated/schema.js';
5
+ import type { GreatFs } from '../types.js';
6
+ export type ResolvedImports = ResolveImportsQuery['resolveImports'];
7
+ export declare const buildTargetElements: (great: GreatFile, root: string | undefined, fsImpl?: GreatFs) => TargetElementInput[];
8
+ export declare const buildImportInputs: (great: GreatFile, templateId: string) => ImportInput[];
9
+ export default function resolveImports(graphqlClient: GraphQLRequestClient, imports: ImportInput[], elements: TargetElementInput[], log: (message: string) => void): Promise<ResolvedImports | undefined>;
@@ -0,0 +1,67 @@
1
+ import fs from 'node:fs';
2
+ import { gql } from 'graphql-tag';
3
+ import { handleGraphQLError } from './graphqlError.js';
4
+ import { folderToElementType, readWorkspaceElements } from './elementFiles.js';
5
+ import { getElementRecord } from './greatFile.js';
6
+ import { ENDPOINT_LISTS_FOLDER } from './serviceFile.js';
7
+ const ResolveImportsQueryDocument = gql `
8
+ query ResolveImports(
9
+ $imports: [ImportInput!]!
10
+ $elements: [TargetElementInput!]
11
+ ) {
12
+ resolveImports(imports: $imports, elements: $elements) {
13
+ imports {
14
+ templateId
15
+ timestamp
16
+ }
17
+ conflicts {
18
+ type
19
+ key
20
+ reason
21
+ }
22
+ elements {
23
+ key
24
+ name
25
+ description
26
+ type
27
+ content {
28
+ sourceId
29
+ sourceTimestamp
30
+ provenance
31
+ data
32
+ }
33
+ }
34
+ }
35
+ }
36
+ `;
37
+ function toTargetElement(great, element) {
38
+ const record = getElementRecord(great, element.folder, element.key);
39
+ const source = record?.source;
40
+ return {
41
+ type: folderToElementType[element.folder],
42
+ key: element.key,
43
+ ...(source ? { sourceId: source.id } : {}),
44
+ ...(source?.timestamp ? { sourceTimestamp: source.timestamp } : {}),
45
+ ...(record?.provenance?.length ? { provenance: record.provenance } : {}),
46
+ ...(element.folder === ENDPOINT_LISTS_FOLDER ? { data: element.data } : {}),
47
+ };
48
+ }
49
+ export const buildTargetElements = (great, root, fsImpl = fs) => readWorkspaceElements(root, fsImpl).map((element) => toTargetElement(great, element));
50
+ export const buildImportInputs = (great, templateId) => [
51
+ ...(great.imports ?? [])
52
+ .filter((record) => record.templateId !== templateId)
53
+ .map((record) => ({
54
+ templateId: record.templateId,
55
+ timestamp: record.timestamp,
56
+ })),
57
+ { templateId },
58
+ ];
59
+ export default async function resolveImports(graphqlClient, imports, elements, log) {
60
+ const result = await graphqlClient.request(ResolveImportsQueryDocument, { imports, elements });
61
+ if (result.error) {
62
+ handleGraphQLError(result.error, log);
63
+ return undefined;
64
+ }
65
+ return result.data?.resolveImports;
66
+ }
67
+ //# sourceMappingURL=resolveImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveImports.js","sourceRoot":"","sources":["../../src/utils/resolveImports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAQxD,MAAM,2BAA2B,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BtC,CAAA;AAOD,SAAS,eAAe,CACtB,KAAgB,EAChB,OAAyB;IAEzB,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAA;IAC7B,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC;AAKD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAgB,EAChB,IAAwB,EACxB,SAAkB,EAAE,EACE,EAAE,CACxB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAClD,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAChC,CAAA;AAMH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAgB,EAChB,UAAkB,EACH,EAAE,CAAC;IAClB,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SACrB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC;SACpD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IACL,EAAE,UAAU,EAAE;CACf,CAAA;AAMD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CAC1C,aAAmC,EACnC,OAAsB,EACtB,QAA8B,EAC9B,GAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,2BAA2B,EAC3B,EAAE,OAAO,EAAE,QAAQ,EAAE,CACtB,CAAA;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACrC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,cAAc,CAAA;AACpC,CAAC"}
@@ -5,6 +5,7 @@ import { emptyGreatFile, readGreatFile, writeGreatFile, setElementRecord, getEle
5
5
  import { elementFilePath, elementKeyFromFileName, isVirtualFolder, } from './elementFiles.js';
6
6
  import { SERVICES_FOLDER, mergeServiceFile, serviceFileFolders, } from './serviceFile.js';
7
7
  import { SHADOW_MARKER, shadowMarkerFor } from './shadowMarker.js';
8
+ import { CONFIG_KEY, CONFIG_RECORD_FOLDER, buildConfigRecord, findConfigElement, } from './integrationConfig.js';
8
9
  const normalizeFolderName = (folder) => folder.replace(':', '_');
9
10
  function createFolderIfMissing(root, fsImpl) {
10
11
  const rootPath = root ? `${root}/` : '';
@@ -155,13 +156,14 @@ export default function saveIntegration(integration, definitions, root, fsImpl =
155
156
  great.id = id;
156
157
  great.timestamp = timestamp ?? undefined;
157
158
  great.account = account ? { id: account.id, key: account.key } : undefined;
158
- const config = elements?.find((el) => el.__typename === 'ConfigElement' && el.key === 'config');
159
+ const config = findConfigElement(elements);
160
+ const flags = config?.content?.data;
159
161
  const index = {
160
162
  name,
161
163
  description,
162
164
  status,
163
165
  type: resolveIntegrationType(type),
164
- flags: config?.content?.data,
166
+ flags,
165
167
  identConfig: undefined,
166
168
  nonvalues: undefined,
167
169
  queueService: undefined,
@@ -172,6 +174,9 @@ export default function saveIntegration(integration, definitions, root, fsImpl =
172
174
  if (elements) {
173
175
  writeElements(elements, writeFile, great);
174
176
  }
177
+ if (config) {
178
+ setElementRecord(great, CONFIG_RECORD_FOLDER, CONFIG_KEY, buildConfigRecord(config.id, config.content?.createdAt, flags ?? {}));
179
+ }
175
180
  const imports = buildImportRecords(templateImports);
176
181
  if (imports.length > 0) {
177
182
  great.imports = imports;