great 1.2.2 → 1.4.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 (117) hide show
  1. package/README.md +122 -50
  2. package/dist/clone/index.d.ts +2 -2
  3. package/dist/clone/index.js.map +1 -1
  4. package/dist/deploy/index.d.ts +2 -2
  5. package/dist/deploy/index.js.map +1 -1
  6. package/dist/explode/index.d.ts +2 -2
  7. package/dist/explode/index.js.map +1 -1
  8. package/dist/generated/operations.d.ts +30 -8
  9. package/dist/generated/schema.d.ts +138 -2
  10. package/dist/generated/schema.js +15 -0
  11. package/dist/generated/schema.js.map +1 -1
  12. package/dist/implode/index.d.ts +2 -2
  13. package/dist/implode/index.js +1 -0
  14. package/dist/implode/index.js.map +1 -1
  15. package/dist/implode/transform.d.ts +1 -0
  16. package/dist/implode/transform.js +16 -2
  17. package/dist/implode/transform.js.map +1 -1
  18. package/dist/import/index.d.ts +4 -2
  19. package/dist/import/index.js +27 -6
  20. package/dist/import/index.js.map +1 -1
  21. package/dist/include/index.d.ts +4 -2
  22. package/dist/include/index.js +129 -11
  23. package/dist/include/index.js.map +1 -1
  24. package/dist/index.js +3 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/init/index.d.ts +2 -2
  27. package/dist/init/index.js +3 -3
  28. package/dist/init/index.js.map +1 -1
  29. package/dist/integrations/create.js +1 -1
  30. package/dist/integrations/create.js.map +1 -1
  31. package/dist/integrations/index.js +6 -1
  32. package/dist/integrations/index.js.map +1 -1
  33. package/dist/integrations/list.d.ts +2 -0
  34. package/dist/integrations/list.js +30 -16
  35. package/dist/integrations/list.js.map +1 -1
  36. package/dist/migrate/index.d.ts +5 -2
  37. package/dist/migrate/index.js +102 -4
  38. package/dist/migrate/index.js.map +1 -1
  39. package/dist/pull/index.d.ts +2 -2
  40. package/dist/pull/index.js.map +1 -1
  41. package/dist/push/index.d.ts +3 -2
  42. package/dist/push/index.js +168 -73
  43. package/dist/push/index.js.map +1 -1
  44. package/dist/remove/index.d.ts +5 -0
  45. package/dist/remove/index.js +71 -0
  46. package/dist/remove/index.js.map +1 -0
  47. package/dist/rename/index.d.ts +2 -2
  48. package/dist/rename/index.js +54 -23
  49. package/dist/rename/index.js.map +1 -1
  50. package/dist/run/index.d.ts +29 -2
  51. package/dist/run/index.js.map +1 -1
  52. package/dist/status/index.d.ts +2 -2
  53. package/dist/status/index.js +1 -1
  54. package/dist/status/index.js.map +1 -1
  55. package/dist/types.d.ts +4 -0
  56. package/dist/utils/createIntegrationFromFile.d.ts +2 -2
  57. package/dist/utils/createIntegrationFromFile.js.map +1 -1
  58. package/dist/utils/detectPullConflicts.d.ts +2 -2
  59. package/dist/utils/detectPullConflicts.js +9 -14
  60. package/dist/utils/detectPullConflicts.js.map +1 -1
  61. package/dist/utils/elementFiles.d.ts +24 -5
  62. package/dist/utils/elementFiles.js +147 -8
  63. package/dist/utils/elementFiles.js.map +1 -1
  64. package/dist/utils/fetchLocal.d.ts +4 -4
  65. package/dist/utils/fetchLocal.js.map +1 -1
  66. package/dist/utils/graphqlError.js +16 -2
  67. package/dist/utils/graphqlError.js.map +1 -1
  68. package/dist/utils/greatFile.d.ts +3 -3
  69. package/dist/utils/greatFile.js.map +1 -1
  70. package/dist/utils/mergeEndpointLists.d.ts +7 -0
  71. package/dist/utils/mergeEndpointLists.js +32 -0
  72. package/dist/utils/mergeEndpointLists.js.map +1 -0
  73. package/dist/utils/promptForDetach.d.ts +6 -0
  74. package/dist/utils/promptForDetach.js +15 -0
  75. package/dist/utils/promptForDetach.js.map +1 -0
  76. package/dist/utils/promptForEndpoints.d.ts +5 -0
  77. package/dist/utils/promptForEndpoints.js +37 -0
  78. package/dist/utils/promptForEndpoints.js.map +1 -0
  79. package/dist/utils/promptForReplaceLocal.d.ts +5 -0
  80. package/dist/utils/promptForReplaceLocal.js +18 -0
  81. package/dist/utils/promptForReplaceLocal.js.map +1 -0
  82. package/dist/utils/promptForValue.d.ts +1 -0
  83. package/dist/utils/promptForValue.js +5 -3
  84. package/dist/utils/promptForValue.js.map +1 -1
  85. package/dist/utils/resolveAccount.d.ts +2 -2
  86. package/dist/utils/resolveAccount.js.map +1 -1
  87. package/dist/utils/resolveElement.d.ts +2 -0
  88. package/dist/utils/resolveElement.js +8 -0
  89. package/dist/utils/resolveElement.js.map +1 -1
  90. package/dist/utils/resolveElementIncludes.d.ts +6 -0
  91. package/dist/utils/resolveElementIncludes.js +113 -0
  92. package/dist/utils/resolveElementIncludes.js.map +1 -0
  93. package/dist/utils/saveIntegration.d.ts +2 -2
  94. package/dist/utils/saveIntegration.js +54 -30
  95. package/dist/utils/saveIntegration.js.map +1 -1
  96. package/dist/utils/serviceFile.d.ts +34 -0
  97. package/dist/utils/serviceFile.js +95 -0
  98. package/dist/utils/serviceFile.js.map +1 -0
  99. package/dist/utils/shadowMarker.d.ts +5 -0
  100. package/dist/utils/shadowMarker.js +16 -0
  101. package/dist/utils/shadowMarker.js.map +1 -0
  102. package/dist/utils/writeShadowElement.d.ts +12 -10
  103. package/dist/utils/writeShadowElement.js +98 -58
  104. package/dist/utils/writeShadowElement.js.map +1 -1
  105. package/dist/values/get.d.ts +2 -2
  106. package/dist/values/get.js.map +1 -1
  107. package/dist/values/list.d.ts +2 -2
  108. package/dist/values/list.js.map +1 -1
  109. package/dist/values/set.d.ts +2 -2
  110. package/dist/values/set.js.map +1 -1
  111. package/dist/values/unset.d.ts +2 -2
  112. package/dist/values/unset.js.map +1 -1
  113. package/package.json +16 -17
  114. package/quality.toml +4 -0
  115. package/dist/utils/resolveElementInclude.d.ts +0 -3
  116. package/dist/utils/resolveElementInclude.js +0 -27
  117. package/dist/utils/resolveElementInclude.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"resolveElement.js","sourceRoot":"","sources":["../../src/utils/resolveElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAQ5D,MAAM,wBAAwB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;CAcnC,CAAA;AAED,MAAM,yBAAyB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;CAcpC,CAAA;AAoBD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B;IAUjE,MAAM,EACJ,UAAU,EACV,IAAI,EACJ,qBAAqB,EACrB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,GACJ,GAAG,OAAO,CAAA;IAGX,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC,wBAAwB,EACxB,EAAE,EAAE,EAAE,UAAU,EAAE,CACnB,CAAA;IAED,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACvC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;QAE3B,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAA;IAC9B,CAAC;IAGD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,GAAG,CACD,KAAK,CAAC,GAAG,CACP,YAAY,UAAU,2GAA2G,CAClI,CACF,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAGD,MAAM,iBAAiB,GAAG,MAAM,kBAAkB,CAChD,qBAAqB,EACrB,SAAS,EACT,QAAQ,EACR,MAAM,CACP,CAAA;IACD,IAAI,iBAAiB,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;QACrD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC,CAAA;QAClE,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,EAAE,CAAA;IAG1C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CACpC,yBAAyB,EACzB,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CACzC,CAAA;IAED,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACxC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,iBAAiB,CAAC,IAAI,IAAI,iBAAiB,CAAC,EAAE,CAAA;QACtE,GAAG,CACD,KAAK,CAAC,GAAG,CACP,qBAAqB,UAAU,+BAA+B,eAAe,GAAG,CACjF,CACF,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAGD,OAAO,SAAS,CAAC,IAAI,CAAC,YAAY,CAAA;AACpC,CAAC"}
1
+ {"version":3,"file":"resolveElement.js","sourceRoot":"","sources":["../../src/utils/resolveElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { GraphQLRequestClient } from './graphqlClient.js';
2
+ import type { ResolveElementIncludeQuery } from '../generated/operations.js';
3
+ export type ResolvedInclude = ResolveElementIncludeQuery['resolveElementInclude'];
4
+ export default function resolveElementIncludes(graphqlClient: GraphQLRequestClient, elementId: string, sourceTimestamp: string | undefined, log: (message: string) => void): Promise<ResolvedInclude[] | undefined>;
5
+ export declare function endpointListKeys(list: ResolvedInclude): string[] | undefined;
6
+ export declare function resolveEndpointIncludes(graphqlClient: GraphQLRequestClient, list: ResolvedInclude, sourceTimestamp: string | undefined, log: (message: string) => void): Promise<ResolvedInclude[] | undefined>;
@@ -0,0 +1,113 @@
1
+ import { gql } from 'graphql-tag';
2
+ import chalk from 'chalk';
3
+ import { handleGraphQLError, isNotFoundError } from './graphqlError.js';
4
+ import { companionElementType, isEndpointKeys } from './serviceFile.js';
5
+ import { ElementType } from '../generated/schema.js';
6
+ const ResolveElementIncludeQueryDocument = gql `
7
+ query ResolveElementInclude($elementId: ID!, $sourceTimestamp: DateTime) {
8
+ resolveElementInclude(
9
+ elementId: $elementId
10
+ sourceTimestamp: $sourceTimestamp
11
+ ) {
12
+ key
13
+ name
14
+ description
15
+ type
16
+ integration {
17
+ id
18
+ }
19
+ content {
20
+ sourceId
21
+ sourceTimestamp
22
+ provenance
23
+ data
24
+ }
25
+ }
26
+ }
27
+ `;
28
+ const ElementIdByKeyQueryDocument = gql `
29
+ query ElementIdByKey($integrationId: ID!, $key: ID!, $type: ElementType!) {
30
+ elementByKey(integrationId: $integrationId, key: $key, type: $type) {
31
+ id
32
+ }
33
+ }
34
+ `;
35
+ async function resolveOne(graphqlClient, elementId, sourceTimestamp, log) {
36
+ const result = await graphqlClient.request(ResolveElementIncludeQueryDocument, { elementId, sourceTimestamp });
37
+ if (result.error) {
38
+ handleGraphQLError(result.error, log);
39
+ return undefined;
40
+ }
41
+ return result.data?.resolveElementInclude;
42
+ }
43
+ async function findElementId(graphqlClient, integrationId, key, type, log) {
44
+ const result = await graphqlClient.request(ElementIdByKeyQueryDocument, { integrationId, key, type });
45
+ if (result.error) {
46
+ if (isNotFoundError(result.error)) {
47
+ return { status: 'none' };
48
+ }
49
+ handleGraphQLError(result.error, log);
50
+ return { status: 'error' };
51
+ }
52
+ const id = result.data?.elementByKey?.id;
53
+ return id ? { status: 'found', id } : { status: 'none' };
54
+ }
55
+ async function findCompanionId(graphqlClient, resolved, log) {
56
+ const type = companionElementType(resolved.type);
57
+ if (!type || !resolved.integration) {
58
+ return { status: 'none' };
59
+ }
60
+ return findElementId(graphqlClient, resolved.integration.id, resolved.key, type, log);
61
+ }
62
+ export default async function resolveElementIncludes(graphqlClient, elementId, sourceTimestamp, log) {
63
+ const resolved = await resolveOne(graphqlClient, elementId, sourceTimestamp, log);
64
+ if (!resolved) {
65
+ return undefined;
66
+ }
67
+ const lookup = await findCompanionId(graphqlClient, resolved, log);
68
+ if (lookup.status === 'error') {
69
+ return undefined;
70
+ }
71
+ if (lookup.status === 'none') {
72
+ return [resolved];
73
+ }
74
+ const companion = await resolveOne(graphqlClient, lookup.id, sourceTimestamp, log);
75
+ if (!companion) {
76
+ return undefined;
77
+ }
78
+ return companion.content?.sourceId ? [resolved, companion] : [resolved];
79
+ }
80
+ export function endpointListKeys(list) {
81
+ const endpoints = list.content?.data?.endpoints;
82
+ return isEndpointKeys(endpoints) ? endpoints : undefined;
83
+ }
84
+ async function resolveEndpoint(graphqlClient, integrationId, key, sourceTimestamp, log) {
85
+ const lookup = await findElementId(graphqlClient, integrationId, key, ElementType.Endpoint, log);
86
+ if (lookup.status === 'none') {
87
+ log(chalk.yellow(`Endpoint ${key} was not found in the source integration`));
88
+ return 'none';
89
+ }
90
+ if (lookup.status === 'error') {
91
+ return 'error';
92
+ }
93
+ const resolved = await resolveOne(graphqlClient, lookup.id, sourceTimestamp, log);
94
+ return resolved ?? 'error';
95
+ }
96
+ export async function resolveEndpointIncludes(graphqlClient, list, sourceTimestamp, log) {
97
+ const keys = endpointListKeys(list) ?? [];
98
+ if (!list.integration || keys.length === 0) {
99
+ return [];
100
+ }
101
+ const endpoints = [];
102
+ for (const key of keys) {
103
+ const resolved = await resolveEndpoint(graphqlClient, list.integration.id, key, sourceTimestamp, log);
104
+ if (resolved === 'error') {
105
+ return undefined;
106
+ }
107
+ else if (resolved !== 'none') {
108
+ endpoints.push(resolved);
109
+ }
110
+ }
111
+ return endpoints;
112
+ }
113
+ //# sourceMappingURL=resolveElementIncludes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveElementIncludes.js","sourceRoot":"","sources":["../../src/utils/resolveElementIncludes.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import fs from 'node:fs';
2
1
  import type { IntegrationDefinitionQuery } from '../generated/operations.js';
2
+ import type { GreatFs } from '../types.js';
3
3
  type Integration = NonNullable<IntegrationDefinitionQuery['integration']>;
4
4
  export type IntegrationDefinitions = Omit<NonNullable<Integration['latest']>, 'elements' | 'timestamp'> & {
5
5
  elements: (Omit<NonNullable<Integration['latest']>['elements'][0], 'content' | 'id' | 'name' | 'description'> & {
@@ -16,5 +16,5 @@ export type IntegrationMeta = Pick<Integration, 'key' | 'name' | 'description' |
16
16
  templateImports?: Integration['templateImports'];
17
17
  };
18
18
  export declare const typeToFolder: Record<string, string>;
19
- export default function saveIntegration(integration: IntegrationMeta, definitions: IntegrationDefinitions, root?: string, fsImpl?: typeof fs): void;
19
+ export default function saveIntegration(integration: IntegrationMeta, definitions: IntegrationDefinitions, root?: string, fsImpl?: GreatFs): void;
20
20
  export {};
@@ -2,8 +2,9 @@ import fs from 'node:fs';
2
2
  import hashContent from './hashContent.js';
3
3
  import resolveIntegrationType from './integrationType.js';
4
4
  import { emptyGreatFile, readGreatFile, writeGreatFile, setElementRecord, getElementRecord, addProvenance, } from './greatFile.js';
5
- import { JSON_EXTENSIONS, elementKeyFromFileName } from './elementFiles.js';
6
- import { SHADOW_MARKER } from './writeShadowElement.js';
5
+ import { elementFilePath, elementKeyFromFileName, isVirtualFolder, } from './elementFiles.js';
6
+ import { SERVICES_FOLDER, mergeServiceFile, serviceFileFolders, } from './serviceFile.js';
7
+ import { SHADOW_MARKER, shadowMarkerFor } from './shadowMarker.js';
7
8
  const normalizeFolderName = (folder) => folder.replace(':', '_');
8
9
  function createFolderIfMissing(root, fsImpl) {
9
10
  const rootPath = root ? `${root}/` : '';
@@ -14,22 +15,12 @@ function createFolderIfMissing(root, fsImpl) {
14
15
  }
15
16
  };
16
17
  }
17
- function elementFilePath(rootPath, folder, name, fsImpl) {
18
- if (!folder) {
19
- return `${rootPath}${name}.json`;
20
- }
21
- for (const ext of JSON_EXTENSIONS) {
22
- const path = `${rootPath}${folder}/${name}${ext}`;
23
- if (fsImpl.existsSync(path)) {
24
- return path;
25
- }
26
- }
27
- return `${rootPath}${folder}/${name}.json`;
28
- }
29
18
  function writeJsonFile(root, fsImpl) {
30
19
  const rootPath = root ? `${root}/` : '';
31
20
  return (folder, name, content) => {
32
- const path = elementFilePath(rootPath, folder, name, fsImpl);
21
+ const path = folder
22
+ ? elementFilePath(root, folder, name, fsImpl)
23
+ : `${rootPath}${name}.json`;
33
24
  try {
34
25
  fsImpl.writeFileSync(path, JSON.stringify(content, undefined, 2));
35
26
  }
@@ -38,14 +29,25 @@ function writeJsonFile(root, fsImpl) {
38
29
  }
39
30
  };
40
31
  }
41
- const buildElementFile = (element) => ({
42
- ...(element.content?.sourceId ? { [SHADOW_MARKER]: true } : {}),
32
+ const buildElementContent = (element) => ({
43
33
  ...(element.name ? { name: element.name } : {}),
44
34
  ...(element.description != null
45
35
  ? { description: element.description }
46
36
  : {}),
47
37
  ...element.content?.data,
48
38
  });
39
+ const isShadow = (element) => Boolean(element?.content?.sourceId);
40
+ const buildElementFile = (element) => ({
41
+ ...(isShadow(element) ? { [SHADOW_MARKER]: true } : {}),
42
+ ...buildElementContent(element),
43
+ });
44
+ const buildListContent = (list) => list?.content?.data
45
+ ? { endpoints: list.content.data.endpoints ?? [] }
46
+ : undefined;
47
+ const buildServiceFile = (service, list) => mergeServiceFile({
48
+ service: service ? buildElementContent(service) : undefined,
49
+ list: buildListContent(list),
50
+ }, shadowMarkerFor(isShadow(service), isShadow(list)));
49
51
  const buildElementRecord = (element) => {
50
52
  const record = {
51
53
  ...(element.id ? { id: element.id } : {}),
@@ -77,6 +79,8 @@ const buildImportRecords = (templateImports) => (templateImports ?? []).flatMap(
77
79
  export const typeToFolder = {
78
80
  Schema: 'schemas',
79
81
  Service: 'services',
82
+ Endpoint: 'endpoints',
83
+ EndpointList: 'endpointLists',
80
84
  Auth: 'auths',
81
85
  SchemaMutation: 'mutations',
82
86
  Dictionary: 'dictionaries',
@@ -85,30 +89,58 @@ export const typeToFolder = {
85
89
  Flow: 'flows',
86
90
  RetryRule: 'retryRules',
87
91
  };
92
+ const fileFolders = () => [...new Set(Object.values(typeToFolder))].filter((folder) => !isVirtualFolder(folder));
88
93
  function deleteRemovedFiles(rootFolder, elements, priorGreat, fsImpl) {
89
94
  const rootPath = rootFolder ? `${rootFolder}/` : '';
90
- Object.values(typeToFolder).forEach((folder) => {
95
+ fileFolders().forEach((folder) => {
91
96
  const folderPath = `${rootPath}${folder}`;
92
97
  if (!fsImpl.existsSync(folderPath)) {
93
98
  return;
94
99
  }
95
100
  const files = fsImpl.readdirSync(folderPath);
101
+ const folders = serviceFileFolders(folder);
96
102
  files.forEach((file) => {
97
103
  const fileKey = elementKeyFromFileName(file);
98
104
  if (!fileKey) {
99
105
  return;
100
106
  }
101
- const existsInApi = elements?.some((element) => typeToFolder[element.__typename] === folder &&
107
+ const existsInApi = elements?.some((element) => folders.includes(typeToFolder[element.__typename]) &&
102
108
  element.key === fileKey);
103
109
  if (existsInApi) {
104
110
  return;
105
111
  }
106
- if (getElementRecord(priorGreat, folder, fileKey)) {
112
+ if (folders.some((f) => getElementRecord(priorGreat, f, fileKey))) {
107
113
  fsImpl.unlinkSync(`${folderPath}/${file}`);
108
114
  }
109
115
  });
110
116
  });
111
117
  }
118
+ function writeElements(elements, writeFile, great) {
119
+ const lists = new Map(elements
120
+ .filter((element) => element.__typename === 'EndpointList')
121
+ .map((element) => [element.key, element]));
122
+ const serviceKeys = new Set(elements
123
+ .filter((element) => element.__typename === 'Service')
124
+ .map((element) => element.key));
125
+ for (const element of elements) {
126
+ const folder = typeToFolder[element.__typename];
127
+ if (!folder) {
128
+ continue;
129
+ }
130
+ if (element.__typename === 'Service') {
131
+ writeFile(folder, element.key, buildServiceFile(element, lists.get(element.key)));
132
+ }
133
+ else if (element.__typename === 'EndpointList') {
134
+ if (!serviceKeys.has(element.key)) {
135
+ writeFile(SERVICES_FOLDER, element.key, buildServiceFile(undefined, element));
136
+ }
137
+ }
138
+ else {
139
+ writeFile(folder, element.key, buildElementFile(element));
140
+ }
141
+ setElementRecord(great, folder, element.key, buildElementRecord(element));
142
+ }
143
+ }
112
144
  export default function saveIntegration(integration, definitions, root, fsImpl = fs) {
113
145
  const { id, name, description, status, type, account, templateImports } = integration;
114
146
  const { timestamp, elements } = definitions;
@@ -135,18 +167,10 @@ export default function saveIntegration(integration, definitions, root, fsImpl =
135
167
  queueService: undefined,
136
168
  };
137
169
  writeFile(null, 'integration', index);
138
- Object.values(typeToFolder).forEach((folder) => {
139
- createFolder(folder);
140
- });
170
+ fileFolders().forEach(createFolder);
141
171
  deleteRemovedFiles(rootFolder, elements, priorGreat, fsImpl);
142
172
  if (elements) {
143
- elements.forEach((element) => {
144
- const folder = typeToFolder[element.__typename];
145
- if (folder) {
146
- writeFile(folder, element.key, buildElementFile(element));
147
- setElementRecord(great, folder, element.key, buildElementRecord(element));
148
- }
149
- });
173
+ writeElements(elements, writeFile, great);
150
174
  }
151
175
  const imports = buildImportRecords(templateImports);
152
176
  if (imports.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"saveIntegration.js","sourceRoot":"","sources":["../../src/utils/saveIntegration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"saveIntegration.js","sourceRoot":"","sources":["../../src/utils/saveIntegration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { ElementType } from '../generated/schema.js';
2
+ import type { ShadowMarker } from './shadowMarker.js';
3
+ import type { GreatFile } from './greatFile.js';
4
+ import type { GreatFs } from '../types.js';
5
+ export declare const SERVICES_FOLDER = "services";
6
+ export declare const ENDPOINTS_FOLDER = "endpoints";
7
+ export declare const ENDPOINT_LISTS_FOLDER = "endpointLists";
8
+ export interface EndpointListContent {
9
+ endpoints: string[];
10
+ }
11
+ export type EndpointsKind = 'none' | 'keys' | 'inline' | 'mixed';
12
+ export interface ServiceFileParts {
13
+ service?: Record<string, unknown>;
14
+ list?: EndpointListContent;
15
+ }
16
+ export declare const isServiceFileFolder: (folder: string) => boolean;
17
+ export declare const serviceFileFolders: (folder: string) => string[];
18
+ export declare const companionElementType: (type: ElementType) => ElementType | undefined;
19
+ export interface EndpointReferenceElement {
20
+ folder: string;
21
+ key: string;
22
+ data: Record<string, unknown>;
23
+ }
24
+ export declare function classifyEndpoints(endpoints: unknown): EndpointsKind;
25
+ export declare const hasServiceContent: (data: Record<string, unknown>) => boolean;
26
+ export declare const mixedEndpointsMessage: (filePath: string) => string;
27
+ export declare function splitServiceFile(data: Record<string, unknown>, filePath: string): ServiceFileParts;
28
+ export declare function mergeServiceFile(parts: {
29
+ service?: Record<string, unknown>;
30
+ list?: EndpointListContent;
31
+ }, marker?: ShadowMarker): Record<string, unknown>;
32
+ export declare function readServiceFileParts(filePath: string, fsImpl: GreatFs): ServiceFileParts;
33
+ export declare const isEndpointKeys: (value: unknown) => value is string[];
34
+ export declare function validateEndpointReferences(elements: readonly EndpointReferenceElement[], great: GreatFile): string[];
@@ -0,0 +1,95 @@
1
+ import parseJson from './parseJson.js';
2
+ import { SHADOW_MARKER } from './shadowMarker.js';
3
+ import { ElementType } from '../generated/schema.js';
4
+ export const SERVICES_FOLDER = 'services';
5
+ export const ENDPOINTS_FOLDER = 'endpoints';
6
+ export const ENDPOINT_LISTS_FOLDER = 'endpointLists';
7
+ export const isServiceFileFolder = (folder) => folder === SERVICES_FOLDER || folder === ENDPOINT_LISTS_FOLDER;
8
+ export const serviceFileFolders = (folder) => folder === SERVICES_FOLDER
9
+ ? [ENDPOINT_LISTS_FOLDER, SERVICES_FOLDER]
10
+ : [folder];
11
+ export const companionElementType = (type) => type === ElementType.Service
12
+ ? ElementType.EndpointList
13
+ : type === ElementType.EndpointList
14
+ ? ElementType.Service
15
+ : undefined;
16
+ export function classifyEndpoints(endpoints) {
17
+ if (!Array.isArray(endpoints)) {
18
+ return 'none';
19
+ }
20
+ const keyCount = endpoints.filter((entry) => typeof entry === 'string').length;
21
+ if (keyCount === endpoints.length) {
22
+ return 'keys';
23
+ }
24
+ return keyCount === 0 ? 'inline' : 'mixed';
25
+ }
26
+ const META_PROPS = new Set([SHADOW_MARKER, 'name', 'description', 'endpoints']);
27
+ export const hasServiceContent = (data) => Object.keys(data).some((prop) => !META_PROPS.has(prop));
28
+ export const mixedEndpointsMessage = (filePath) => `${filePath} mixes endpoint keys and inline endpoint definitions, which is not allowed. Run \`great migrate\` to extract the inline endpoints to files first`;
29
+ export function splitServiceFile(data, filePath) {
30
+ const kind = classifyEndpoints(data.endpoints);
31
+ if (kind === 'mixed') {
32
+ throw new Error(mixedEndpointsMessage(filePath));
33
+ }
34
+ const { [SHADOW_MARKER]: _marker, ...content } = data;
35
+ if (kind !== 'keys') {
36
+ return { service: content };
37
+ }
38
+ const { endpoints, ...serviceContent } = content;
39
+ return {
40
+ ...(hasServiceContent(content) ? { service: serviceContent } : {}),
41
+ list: { endpoints: endpoints },
42
+ };
43
+ }
44
+ function mergeEndpoints(service, list) {
45
+ const inline = service?.endpoints;
46
+ const inlineEndpoints = Array.isArray(inline) ? inline : [];
47
+ if (!list) {
48
+ return Array.isArray(inline) ? inline : undefined;
49
+ }
50
+ return [...inlineEndpoints, ...list.endpoints];
51
+ }
52
+ export function mergeServiceFile(parts, marker) {
53
+ const { endpoints: _inline, ...serviceContent } = parts.service ?? {};
54
+ const endpoints = mergeEndpoints(parts.service, parts.list);
55
+ return {
56
+ ...(marker !== undefined ? { [SHADOW_MARKER]: marker } : {}),
57
+ ...serviceContent,
58
+ ...(endpoints ? { endpoints } : {}),
59
+ };
60
+ }
61
+ export function readServiceFileParts(filePath, fsImpl) {
62
+ if (!fsImpl.existsSync(filePath)) {
63
+ return {};
64
+ }
65
+ const data = parseJson(fsImpl.readFileSync(filePath, 'utf8'));
66
+ return splitServiceFile(data, filePath);
67
+ }
68
+ export const isEndpointKeys = (value) => classifyEndpoints(value) === 'keys';
69
+ const endpointFileKeys = (elements) => elements
70
+ .filter((element) => element.folder === ENDPOINTS_FOLDER)
71
+ .map((element) => element.key);
72
+ const recordedEndpointKeys = (great) => Object.keys(great.elements)
73
+ .filter((recordKey) => recordKey.startsWith(`${ENDPOINTS_FOLDER}/`))
74
+ .map((recordKey) => recordKey.slice(ENDPOINTS_FOLDER.length + 1));
75
+ const listedEndpoints = (elements) => elements.flatMap((element) => {
76
+ const endpoints = element.data.endpoints;
77
+ return element.folder === ENDPOINT_LISTS_FOLDER && isEndpointKeys(endpoints)
78
+ ? endpoints.map((key) => ({ service: element.key, key }))
79
+ : [];
80
+ });
81
+ export function validateEndpointReferences(elements, great) {
82
+ const fileKeys = endpointFileKeys(elements);
83
+ const knownKeys = new Set([...fileKeys, ...recordedEndpointKeys(great)]);
84
+ const listed = listedEndpoints(elements);
85
+ const listedKeys = new Set(listed.map(({ key }) => key));
86
+ return [
87
+ ...listed
88
+ .filter(({ key }) => !knownKeys.has(key))
89
+ .map(({ service, key }) => `Service ${service} lists endpoint "${key}", but there is no endpoints/${key} file`),
90
+ ...fileKeys
91
+ .filter((key) => !listedKeys.has(key))
92
+ .map((key) => `Endpoint ${key} is not listed in any service's endpoints`),
93
+ ];
94
+ }
95
+ //# sourceMappingURL=serviceFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceFile.js","sourceRoot":"","sources":["../../src/utils/serviceFile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const SHADOW_MARKER = "$shadow";
2
+ export type ShadowMarker = true | 'service' | 'endpoints';
3
+ export declare const isShadowMarker: (value: unknown) => value is ShadowMarker;
4
+ export declare const stripShadowMarker: ({ [SHADOW_MARKER]: _shadow, ...data }: Record<string, unknown>) => Record<string, unknown>;
5
+ export declare function shadowMarkerFor(serviceIsShadow: boolean, listIsShadow: boolean): ShadowMarker | undefined;
@@ -0,0 +1,16 @@
1
+ export const SHADOW_MARKER = '$shadow';
2
+ export const isShadowMarker = (value) => value === true || value === 'service' || value === 'endpoints';
3
+ export const stripShadowMarker = ({ [SHADOW_MARKER]: _shadow, ...data }) => data;
4
+ export function shadowMarkerFor(serviceIsShadow, listIsShadow) {
5
+ if (serviceIsShadow && listIsShadow) {
6
+ return true;
7
+ }
8
+ else if (serviceIsShadow) {
9
+ return 'service';
10
+ }
11
+ else if (listIsShadow) {
12
+ return 'endpoints';
13
+ }
14
+ return undefined;
15
+ }
16
+ //# sourceMappingURL=shadowMarker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadowMarker.js","sourceRoot":"","sources":["../../src/utils/shadowMarker.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAA;AAItC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAyB,EAAE,CACtE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,CAAA;AAGhE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,CAAC,aAAa,CAAC,EAAE,OAAO,EACxB,GAAG,IAAI,EACiB,EAA2B,EAAE,CAAC,IAAI,CAAA;AAI5D,MAAM,UAAU,eAAe,CAC7B,eAAwB,EACxB,YAAqB;IAErB,IAAI,eAAe,IAAI,YAAY,EAAE,CAAC;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;SAAM,IAAI,eAAe,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAA;IAClB,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACxB,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -1,25 +1,27 @@
1
- import fs from 'node:fs';
1
+ import type { ElementTarget } from './elementFiles.js';
2
2
  import type { GreatFile } from './greatFile.js';
3
- import type { ResolveElementIncludeQuery } from '../generated/operations.js';
4
- export type ResolvedShadow = ResolveElementIncludeQuery['resolveElementInclude'];
5
- export declare const SHADOW_MARKER = "$shadow";
3
+ import type { ResolveTemplateImportQuery } from '../generated/operations.js';
4
+ import type { GreatFs } from '../types.js';
5
+ export type ResolvedShadow = ResolveTemplateImportQuery['resolveTemplateImport']['elements'][number];
6
6
  export interface ShadowConflict {
7
7
  key: string;
8
8
  folder: string;
9
9
  reason: string;
10
10
  }
11
11
  export interface WriteShadowsResult {
12
- written: {
13
- folder: string;
14
- key: string;
15
- }[];
12
+ written: ElementTarget[];
13
+ merged: ElementTarget[];
16
14
  skipped: ResolvedShadow[];
17
15
  conflicts: ShadowConflict[];
18
16
  }
17
+ export type ShadowMode = 'include' | 'import';
19
18
  interface WriteShadowsOptions {
19
+ mode: ShadowMode;
20
20
  root?: string;
21
- fsImpl?: typeof fs;
21
+ fsImpl?: GreatFs;
22
22
  }
23
- export declare function writeShadowElements(great: GreatFile, resolved: readonly ResolvedShadow[], options?: WriteShadowsOptions): WriteShadowsResult;
23
+ export declare function isLocalOccupant(great: GreatFile, folder: string, key: string, root: string | undefined, fsImpl: GreatFs): boolean;
24
+ export declare const findLocalOccupants: (great: GreatFile, elements: readonly ResolvedShadow[], root: string | undefined, fsImpl: GreatFs) => ElementTarget[];
25
+ export declare function writeShadowElements(great: GreatFile, resolved: readonly ResolvedShadow[], options: WriteShadowsOptions): WriteShadowsResult;
24
26
  export declare function logShadowConflicts(verb: string, conflicts: readonly ShadowConflict[], log: (message: string) => void): void;
25
27
  export {};