great 1.0.2 → 1.2.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 (180) hide show
  1. package/README.md +141 -43
  2. package/dist/accounts/create.d.ts +1 -1
  3. package/dist/accounts/create.js +2 -4
  4. package/dist/accounts/create.js.map +1 -1
  5. package/dist/accounts/index.d.ts +1 -1
  6. package/dist/accounts/index.js +2 -4
  7. package/dist/accounts/index.js.map +1 -1
  8. package/dist/clone/index.d.ts +4 -2
  9. package/dist/clone/index.js +19 -43
  10. package/dist/clone/index.js.map +1 -1
  11. package/dist/config/index.js +4 -30
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/deploy/index.d.ts +1 -1
  14. package/dist/deploy/index.js +55 -15
  15. package/dist/deploy/index.js.map +1 -1
  16. package/dist/env/index.d.ts +12 -0
  17. package/dist/env/index.js +131 -0
  18. package/dist/env/index.js.map +1 -0
  19. package/dist/explode/transform.d.ts +1 -1
  20. package/dist/explode/transform.js +6 -2
  21. package/dist/explode/transform.js.map +1 -1
  22. package/dist/explode/unescapeMongo.js +9 -1
  23. package/dist/explode/unescapeMongo.js.map +1 -1
  24. package/dist/generated/operations.d.ts +617 -0
  25. package/dist/generated/operations.js +2 -0
  26. package/dist/generated/operations.js.map +1 -0
  27. package/dist/generated/schema.d.ts +965 -0
  28. package/dist/generated/{graphql.js → schema.js} +20 -2
  29. package/dist/generated/schema.js.map +1 -0
  30. package/dist/implode/escapeMongo.d.ts +1 -0
  31. package/dist/implode/escapeMongo.js +23 -0
  32. package/dist/implode/escapeMongo.js.map +1 -0
  33. package/dist/implode/index.d.ts +6 -0
  34. package/dist/implode/index.js +132 -0
  35. package/dist/implode/index.js.map +1 -0
  36. package/dist/implode/transform.d.ts +45 -0
  37. package/dist/implode/transform.js +73 -0
  38. package/dist/implode/transform.js.map +1 -0
  39. package/dist/import/index.d.ts +8 -0
  40. package/dist/import/index.js +43 -0
  41. package/dist/import/index.js.map +1 -0
  42. package/dist/include/index.d.ts +10 -0
  43. package/dist/include/index.js +41 -0
  44. package/dist/include/index.js.map +1 -0
  45. package/dist/index.js +15 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/init/index.js +8 -16
  48. package/dist/init/index.js.map +1 -1
  49. package/dist/integrations/create.d.ts +1 -1
  50. package/dist/integrations/create.js +3 -5
  51. package/dist/integrations/create.js.map +1 -1
  52. package/dist/integrations/list.d.ts +1 -1
  53. package/dist/integrations/list.js +3 -5
  54. package/dist/integrations/list.js.map +1 -1
  55. package/dist/migrate/index.d.ts +5 -0
  56. package/dist/migrate/index.js +101 -0
  57. package/dist/migrate/index.js.map +1 -0
  58. package/dist/pull/index.d.ts +4 -2
  59. package/dist/pull/index.js +25 -44
  60. package/dist/pull/index.js.map +1 -1
  61. package/dist/push/index.d.ts +1 -1
  62. package/dist/push/index.js +364 -93
  63. package/dist/push/index.js.map +1 -1
  64. package/dist/rename/index.d.ts +8 -0
  65. package/dist/rename/index.js +109 -0
  66. package/dist/rename/index.js.map +1 -0
  67. package/dist/repl/dispatch.d.ts +8 -2
  68. package/dist/repl/dispatch.js +43 -29
  69. package/dist/repl/dispatch.js.map +1 -1
  70. package/dist/repl/dispatchAndLoad.d.ts +7 -0
  71. package/dist/repl/dispatchAndLoad.js +35 -0
  72. package/dist/repl/dispatchAndLoad.js.map +1 -0
  73. package/dist/repl/help.js +13 -2
  74. package/dist/repl/help.js.map +1 -1
  75. package/dist/repl/index.d.ts +1 -1
  76. package/dist/repl/index.js +31 -10
  77. package/dist/repl/index.js.map +1 -1
  78. package/dist/repl/load.d.ts +8 -0
  79. package/dist/repl/load.js +53 -0
  80. package/dist/repl/load.js.map +1 -0
  81. package/dist/run/index.d.ts +7 -5
  82. package/dist/run/index.js +5 -7
  83. package/dist/run/index.js.map +1 -1
  84. package/dist/status/index.d.ts +1 -1
  85. package/dist/status/index.js +6 -8
  86. package/dist/status/index.js.map +1 -1
  87. package/dist/utils/config.d.ts +9 -2
  88. package/dist/utils/config.js +39 -6
  89. package/dist/utils/config.js.map +1 -1
  90. package/dist/utils/createIntegrationFromFile.d.ts +3 -1
  91. package/dist/utils/createIntegrationFromFile.js +14 -30
  92. package/dist/utils/createIntegrationFromFile.js.map +1 -1
  93. package/dist/utils/detectPullConflicts.d.ts +8 -0
  94. package/dist/utils/detectPullConflicts.js +65 -0
  95. package/dist/utils/detectPullConflicts.js.map +1 -0
  96. package/dist/utils/dispatch.d.ts +2 -2
  97. package/dist/utils/dispatch.js +5 -4
  98. package/dist/utils/dispatch.js.map +1 -1
  99. package/dist/utils/elementFiles.d.ts +13 -0
  100. package/dist/utils/elementFiles.js +76 -0
  101. package/dist/utils/elementFiles.js.map +1 -0
  102. package/dist/utils/fetchIntegrationDefinition.d.ts +8 -0
  103. package/dist/utils/fetchIntegrationDefinition.js +58 -0
  104. package/dist/utils/fetchIntegrationDefinition.js.map +1 -0
  105. package/dist/utils/fetchLocal.d.ts +3 -1
  106. package/dist/utils/fetchLocal.js +11 -9
  107. package/dist/utils/fetchLocal.js.map +1 -1
  108. package/dist/utils/fetchSession.d.ts +1 -1
  109. package/dist/utils/fetchSession.js +2 -1
  110. package/dist/utils/fetchSession.js.map +1 -1
  111. package/dist/utils/graphqlClient.d.ts +3 -0
  112. package/dist/utils/graphqlClient.js +3 -0
  113. package/dist/utils/graphqlClient.js.map +1 -1
  114. package/dist/utils/graphqlError.d.ts +2 -1
  115. package/dist/utils/graphqlError.js +17 -3
  116. package/dist/utils/graphqlError.js.map +1 -1
  117. package/dist/utils/greatFile.d.ts +40 -0
  118. package/dist/utils/greatFile.js +66 -0
  119. package/dist/utils/greatFile.js.map +1 -0
  120. package/dist/utils/hashContent.js +1 -1
  121. package/dist/utils/hashContent.js.map +1 -1
  122. package/dist/utils/integrationType.d.ts +3 -0
  123. package/dist/utils/integrationType.js +15 -0
  124. package/dist/utils/integrationType.js.map +1 -0
  125. package/dist/utils/parseJson.d.ts +1 -0
  126. package/dist/utils/parseJson.js +5 -0
  127. package/dist/utils/parseJson.js.map +1 -0
  128. package/dist/utils/resolveAccount.d.ts +5 -4
  129. package/dist/utils/resolveAccount.js +17 -9
  130. package/dist/utils/resolveAccount.js.map +1 -1
  131. package/dist/utils/resolveElement.d.ts +1 -1
  132. package/dist/utils/resolveElementInclude.d.ts +3 -0
  133. package/dist/utils/resolveElementInclude.js +28 -0
  134. package/dist/utils/resolveElementInclude.js.map +1 -0
  135. package/dist/utils/resolveIntegration.d.ts +4 -2
  136. package/dist/utils/resolveIntegration.js +7 -3
  137. package/dist/utils/resolveIntegration.js.map +1 -1
  138. package/dist/utils/resolveTemplateImport.d.ts +3 -0
  139. package/dist/utils/resolveTemplateImport.js +31 -0
  140. package/dist/utils/resolveTemplateImport.js.map +1 -0
  141. package/dist/utils/response.d.ts +3 -0
  142. package/dist/utils/response.js +24 -0
  143. package/dist/utils/response.js.map +1 -0
  144. package/dist/utils/saveIntegration.d.ts +8 -4
  145. package/dist/utils/saveIntegration.js +76 -34
  146. package/dist/utils/saveIntegration.js.map +1 -1
  147. package/dist/utils/token.js +1 -1
  148. package/dist/utils/token.js.map +1 -1
  149. package/dist/utils/url.d.ts +1 -0
  150. package/dist/utils/url.js +10 -0
  151. package/dist/utils/url.js.map +1 -0
  152. package/dist/utils/writeShadowElement.d.ts +26 -0
  153. package/dist/utils/writeShadowElement.js +119 -0
  154. package/dist/utils/writeShadowElement.js.map +1 -0
  155. package/dist/{value → values}/get.d.ts +1 -1
  156. package/dist/{value → values}/get.js +7 -8
  157. package/dist/values/get.js.map +1 -0
  158. package/dist/{value → values}/index.js +13 -1
  159. package/dist/values/index.js.map +1 -0
  160. package/dist/{value → values}/list.js +10 -9
  161. package/dist/values/list.js.map +1 -0
  162. package/dist/{value → values}/set.d.ts +1 -1
  163. package/dist/{value → values}/set.js +9 -9
  164. package/dist/values/set.js.map +1 -0
  165. package/dist/values/unset.d.ts +8 -0
  166. package/dist/values/unset.js +61 -0
  167. package/dist/values/unset.js.map +1 -0
  168. package/dist/whoami/fetchSession.d.ts +3 -3
  169. package/dist/whoami/fetchSession.js +2 -4
  170. package/dist/whoami/fetchSession.js.map +1 -1
  171. package/dist/whoami/index.d.ts +1 -1
  172. package/package.json +20 -19
  173. package/dist/generated/graphql.d.ts +0 -1784
  174. package/dist/generated/graphql.js.map +0 -1
  175. package/dist/value/get.js.map +0 -1
  176. package/dist/value/index.js.map +0 -1
  177. package/dist/value/list.js.map +0 -1
  178. package/dist/value/set.js.map +0 -1
  179. /package/dist/{value → values}/index.d.ts +0 -0
  180. /package/dist/{value → values}/list.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveElementInclude.js","sourceRoot":"","sources":["../../src/utils/resolveElementInclude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,MAAM,kCAAkC,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;CAgB7C,CAAA;AAOD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,aAAmC,EACnC,SAAiB,EACjB,eAAmC,EACnC,GAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,kCAAkC,EAClC,EAAE,SAAS,EAAE,eAAe,EAAE,CAC/B,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,qBAAqB,CAAA;AAC3C,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { type GraphQLRequestClient } from './graphqlClient.js';
2
- export declare const IntegrationQueryDocument: import("graphql/index.js").DocumentNode;
3
- export declare const IntegrationByKeyQueryDocument: import("graphql/index.js").DocumentNode;
2
+ import type { IntegrationType } from '../generated/schema.js';
3
+ export declare const IntegrationQueryDocument: import("graphql").DocumentNode;
4
+ export declare const IntegrationByKeyQueryDocument: import("graphql").DocumentNode;
4
5
  export interface IntegrationResult {
5
6
  id: string;
6
7
  name?: string;
8
+ type?: IntegrationType;
7
9
  error?: string;
8
10
  }
9
11
  export declare function resolveIntegration(identifier: string, accountId: string | undefined, apiToken?: string, client?: GraphQLRequestClient, baseUrl?: string): Promise<IntegrationResult>;
@@ -1,11 +1,12 @@
1
1
  import { gql } from 'graphql-tag';
2
2
  import { createGraphQLClient, } from './graphqlClient.js';
3
- import { isNotFoundError } from './graphqlError.js';
3
+ import { getGraphQLErrorMessage, isNotFoundError } from './graphqlError.js';
4
4
  export const IntegrationQueryDocument = gql `
5
5
  query Integration($id: ID!) {
6
6
  integration(id: $id) {
7
7
  id
8
8
  name
9
+ type
9
10
  }
10
11
  }
11
12
  `;
@@ -14,6 +15,7 @@ export const IntegrationByKeyQueryDocument = gql `
14
15
  integrationByKey(accountId: $accountId, key: $key) {
15
16
  id
16
17
  name
18
+ type
17
19
  }
18
20
  }
19
21
  `;
@@ -22,7 +24,7 @@ export async function resolveIntegration(identifier, accountId, apiToken, client
22
24
  try {
23
25
  const idResult = await graphqlClient.request(IntegrationQueryDocument, { id: identifier });
24
26
  if (idResult.error && !isNotFoundError(idResult.error)) {
25
- const errorMessage = idResult.error.message || String(idResult.error);
27
+ const errorMessage = getGraphQLErrorMessage(idResult.error);
26
28
  return {
27
29
  id: '',
28
30
  error: errorMessage,
@@ -32,12 +34,13 @@ export async function resolveIntegration(identifier, accountId, apiToken, client
32
34
  return {
33
35
  id: idResult.data.integration.id,
34
36
  name: idResult.data.integration.name,
37
+ type: idResult.data.integration.type,
35
38
  };
36
39
  }
37
40
  if (accountId) {
38
41
  const keyResult = await graphqlClient.request(IntegrationByKeyQueryDocument, { accountId, key: identifier });
39
42
  if (keyResult.error && !isNotFoundError(keyResult.error)) {
40
- const errorMessage = keyResult.error.message || String(keyResult.error);
43
+ const errorMessage = getGraphQLErrorMessage(keyResult.error);
41
44
  return {
42
45
  id: '',
43
46
  error: errorMessage,
@@ -53,6 +56,7 @@ export async function resolveIntegration(identifier, accountId, apiToken, client
53
56
  return {
54
57
  id: integration.id,
55
58
  name: integration.name,
59
+ type: integration.type,
56
60
  };
57
61
  }
58
62
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"resolveIntegration.js","sourceRoot":"","sources":["../../src/utils/resolveIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAMnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;;;;;;;CAO1C,CAAA;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAA;;;;;;;CAO/C,CAAA;AAQD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,SAA6B,EAC7B,QAAiB,EACjB,MAA6B,EAC7B,OAAgB;IAEhB,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEtE,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAC1C,wBAAwB,EACxB,EAAE,EAAE,EAAE,UAAU,EAAE,CACnB,CAAA;QAGD,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACrE,OAAO;gBACL,EAAE,EAAE,EAAE;gBACN,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAGD,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;YAC/B,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;aACrC,CAAA;QACH,CAAC;QAGD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAC3C,6BAA6B,EAC7B,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAC/B,CAAA;YAGD,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;gBACvE,OAAO;oBACL,EAAE,EAAE,EAAE;oBACN,KAAK,EAAE,YAAY;iBACpB,CAAA;YACH,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAA;YACpD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;oBACL,EAAE,EAAE,EAAE;oBACN,KAAK,EAAE,yBAAyB,UAAU,2BAA2B,SAAS,GAAG;iBAClF,CAAA;YACH,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,IAAI,EAAE,WAAW,CAAC,IAAI;aACvB,CAAA;QACH,CAAC;QAGD,OAAO;YACL,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,yBAAyB,UAAU,cAAc;SACzD,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,OAAO;YACL,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,gCAAgC,YAAY,EAAE;SACtD,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"resolveIntegration.js","sourceRoot":"","sources":["../../src/utils/resolveIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAO3E,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;;;;;;;;CAQ1C,CAAA;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAA;;;;;;;;CAQ/C,CAAA;AASD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,SAA6B,EAC7B,QAAiB,EACjB,MAA6B,EAC7B,OAAgB;IAEhB,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEtE,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAC1C,wBAAwB,EACxB,EAAE,EAAE,EAAE,UAAU,EAAE,CACnB,CAAA;QAGD,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC3D,OAAO;gBACL,EAAE,EAAE,EAAE;gBACN,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAGD,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;YAC/B,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;gBACpC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;aACrC,CAAA;QACH,CAAC;QAGD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAC3C,6BAA6B,EAC7B,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAC/B,CAAA;YAGD,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,YAAY,GAAG,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;gBAC5D,OAAO;oBACL,EAAE,EAAE,EAAE;oBACN,KAAK,EAAE,YAAY;iBACpB,CAAA;YACH,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAA;YACpD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;oBACL,EAAE,EAAE,EAAE;oBACN,KAAK,EAAE,yBAAyB,UAAU,2BAA2B,SAAS,GAAG;iBAClF,CAAA;YACH,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,WAAW,CAAC,IAAI;aACvB,CAAA;QACH,CAAC;QAGD,OAAO;YACL,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,yBAAyB,UAAU,cAAc;SACzD,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,OAAO;YACL,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,gCAAgC,YAAY,EAAE;SACtD,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GraphQLRequestClient } from './graphqlClient.js';
2
+ import type { ResolveTemplateImportQuery } from '../generated/operations.js';
3
+ export declare function resolveTemplateImport(graphqlClient: GraphQLRequestClient, templateId: string, log: (message: string) => void): Promise<ResolveTemplateImportQuery['resolveTemplateImport'] | undefined>;
@@ -0,0 +1,31 @@
1
+ import { gql } from 'graphql-tag';
2
+ import { handleGraphQLError } from './graphqlError.js';
3
+ const ResolveTemplateImportQueryDocument = gql `
4
+ query ResolveTemplateImport($templateId: ID!) {
5
+ resolveTemplateImport(templateId: $templateId) {
6
+ timestamp
7
+ elements {
8
+ key
9
+ name
10
+ description
11
+ type
12
+ content {
13
+ sourceId
14
+ sourceTimestamp
15
+ createdAt
16
+ provenance
17
+ data
18
+ }
19
+ }
20
+ }
21
+ }
22
+ `;
23
+ export async function resolveTemplateImport(graphqlClient, templateId, log) {
24
+ const result = await graphqlClient.request(ResolveTemplateImportQueryDocument, { templateId });
25
+ if (result.error) {
26
+ handleGraphQLError(result.error, log);
27
+ return undefined;
28
+ }
29
+ return result.data?.resolveTemplateImport;
30
+ }
31
+ //# sourceMappingURL=resolveTemplateImport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTemplateImport.js","sourceRoot":"","sources":["../../src/utils/resolveTemplateImport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,MAAM,kCAAkC,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;CAmB7C,CAAA;AAMD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,aAAmC,EACnC,UAAkB,EAClB,GAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,kCAAkC,EAClC,EAAE,UAAU,EAAE,CACf,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,qBAAqB,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type GraphQLRequestClient } from './graphqlClient.js';
2
+ import type { Response } from '../generated/schema.js';
3
+ export declare function fetchResponse(actionId: string, apiToken?: string, client?: GraphQLRequestClient, baseUrl?: string): Promise<Response>;
@@ -0,0 +1,24 @@
1
+ import { gql } from 'graphql-tag';
2
+ import { createGraphQLClient, } from './graphqlClient.js';
3
+ import { getGraphQLErrorMessage } from './graphqlError.js';
4
+ const ResponseQueryDocument = gql `
5
+ query Response($actionId: ID!) {
6
+ response(actionId: $actionId) {
7
+ id
8
+ status
9
+ error
10
+ warning
11
+ itemCount
12
+ data
13
+ }
14
+ }
15
+ `;
16
+ export async function fetchResponse(actionId, apiToken, client, baseUrl) {
17
+ const graphqlClient = client ?? createGraphQLClient(apiToken, baseUrl);
18
+ const result = await graphqlClient.request(ResponseQueryDocument, { actionId });
19
+ if (result.error) {
20
+ throw new Error(getGraphQLErrorMessage(result.error));
21
+ }
22
+ return result.data?.response ?? { id: actionId, status: 'error' };
23
+ }
24
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAI1D,MAAM,qBAAqB,GAAG,GAAG,CAAA;;;;;;;;;;;CAWhC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,QAAiB,EACjB,MAA6B,EAC7B,OAAgB;IAEhB,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACtE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,qBAAqB,EACrB,EAAE,QAAQ,EAAE,CACb,CAAA;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACnE,CAAC"}
@@ -1,16 +1,20 @@
1
1
  import fs from 'node:fs';
2
- import type { IntegrationDefinitionQuery } from '../generated/graphql.js';
2
+ import type { IntegrationDefinitionQuery } from '../generated/operations.js';
3
3
  type Integration = NonNullable<IntegrationDefinitionQuery['integration']>;
4
- export type IntegrationDefinitions = Omit<NonNullable<Integration['latest']>, 'elements'> & {
5
- elements: (Omit<NonNullable<Integration['latest']>['elements'][0], 'content' | 'id' | 'name'> & {
4
+ export type IntegrationDefinitions = Omit<NonNullable<Integration['latest']>, 'elements' | 'timestamp'> & {
5
+ elements: (Omit<NonNullable<Integration['latest']>['elements'][0], 'content' | 'id' | 'name' | 'description'> & {
6
6
  id?: string;
7
7
  name?: string;
8
+ description?: string | null;
8
9
  content?: Partial<NonNullable<Integration['latest']>['elements'][0]['content']>;
9
10
  })[];
11
+ timestamp?: NonNullable<Integration['latest']>['timestamp'];
10
12
  };
11
- export type IntegrationMeta = Pick<Integration, 'key' | 'name' | 'description' | 'status'> & {
13
+ export type IntegrationMeta = Pick<Integration, 'key' | 'name' | 'description' | 'status' | 'type'> & {
12
14
  id?: string;
13
15
  account?: Integration['account'];
16
+ templateImports?: Integration['templateImports'];
14
17
  };
18
+ export declare const typeToFolder: Record<string, string>;
15
19
  export default function saveIntegration(integration: IntegrationMeta, definitions: IntegrationDefinitions, root?: string, fsImpl?: typeof fs): void;
16
20
  export {};
@@ -1,4 +1,9 @@
1
1
  import fs from 'node:fs';
2
+ import hashContent from './hashContent.js';
3
+ import resolveIntegrationType from './integrationType.js';
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';
2
7
  const normalizeFolderName = (folder) => folder.replace(':', '_');
3
8
  function createFolderIfMissing(root, fsImpl) {
4
9
  const rootPath = root ? `${root}/` : '';
@@ -9,12 +14,22 @@ function createFolderIfMissing(root, fsImpl) {
9
14
  }
10
15
  };
11
16
  }
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
+ }
12
29
  function writeJsonFile(root, fsImpl) {
13
30
  const rootPath = root ? `${root}/` : '';
14
31
  return (folder, name, content) => {
15
- const path = folder
16
- ? `${rootPath}${folder}/${name}.json`
17
- : `${rootPath}${name}.json`;
32
+ const path = elementFilePath(rootPath, folder, name, fsImpl);
18
33
  try {
19
34
  fsImpl.writeFileSync(path, JSON.stringify(content, undefined, 2));
20
35
  }
@@ -23,18 +38,43 @@ function writeJsonFile(root, fsImpl) {
23
38
  }
24
39
  };
25
40
  }
26
- const transformElement = ({ id, key, content, }) => ({
27
- ...(id ? { __id: id } : {}),
28
- __key: key,
29
- ...(content?.timestamp ? { __timestamp: content.timestamp } : {}),
30
- ...content?.data,
31
- });
32
- const transformAccount = ({ id, key, name }) => ({
33
- __id: id,
34
- __key: key,
35
- name,
41
+ const buildElementFile = (element) => ({
42
+ ...(element.content?.sourceId ? { [SHADOW_MARKER]: true } : {}),
43
+ ...(element.name ? { name: element.name } : {}),
44
+ ...(element.description != null
45
+ ? { description: element.description }
46
+ : {}),
47
+ ...element.content?.data,
36
48
  });
37
- const typeToFolder = {
49
+ const buildElementRecord = (element) => {
50
+ const record = {
51
+ ...(element.id ? { id: element.id } : {}),
52
+ ...(element.content?.createdAt
53
+ ? { timestamp: element.content.createdAt }
54
+ : {}),
55
+ hash: hashContent({ ...element.content?.data }),
56
+ };
57
+ if (element.content?.sourceId) {
58
+ record.source = {
59
+ id: element.content.sourceId,
60
+ ...(element.content.sourceTimestamp
61
+ ? { timestamp: element.content.sourceTimestamp }
62
+ : {}),
63
+ };
64
+ }
65
+ addProvenance(record, element.content?.provenance ?? []);
66
+ return record;
67
+ };
68
+ const buildImportRecords = (templateImports) => (templateImports ?? []).flatMap((templateImport) => templateImport.template
69
+ ? [
70
+ {
71
+ templateId: templateImport.template.id,
72
+ timestamp: templateImport.timestamp,
73
+ id: templateImport.id,
74
+ },
75
+ ]
76
+ : []);
77
+ export const typeToFolder = {
38
78
  Schema: 'schemas',
39
79
  Service: 'services',
40
80
  Auth: 'auths',
@@ -45,7 +85,7 @@ const typeToFolder = {
45
85
  Flow: 'flows',
46
86
  RetryRule: 'retryRules',
47
87
  };
48
- function deleteRemovedFiles(rootFolder, elements, fsImpl) {
88
+ function deleteRemovedFiles(rootFolder, elements, priorGreat, fsImpl) {
49
89
  const rootPath = rootFolder ? `${rootFolder}/` : '';
50
90
  Object.values(typeToFolder).forEach((folder) => {
51
91
  const folderPath = `${rootPath}${folder}`;
@@ -54,31 +94,23 @@ function deleteRemovedFiles(rootFolder, elements, fsImpl) {
54
94
  }
55
95
  const files = fsImpl.readdirSync(folderPath);
56
96
  files.forEach((file) => {
57
- if (!file.endsWith('.json')) {
97
+ const fileKey = elementKeyFromFileName(file);
98
+ if (!fileKey) {
58
99
  return;
59
100
  }
60
- const fileKey = file.replace('.json', '');
61
101
  const existsInApi = elements?.some((element) => typeToFolder[element.__typename] === folder &&
62
102
  element.key === fileKey);
63
103
  if (existsInApi) {
64
104
  return;
65
105
  }
66
- const filePath = `${folderPath}/${file}`;
67
- try {
68
- const content = fsImpl.readFileSync(filePath, 'utf8');
69
- const data = JSON.parse(content);
70
- if (data.__id) {
71
- fsImpl.unlinkSync(filePath);
72
- }
73
- }
74
- catch (error) {
75
- console.error(`Error reading file ${filePath}:`, error);
106
+ if (getElementRecord(priorGreat, folder, fileKey)) {
107
+ fsImpl.unlinkSync(`${folderPath}/${file}`);
76
108
  }
77
109
  });
78
110
  });
79
111
  }
80
112
  export default function saveIntegration(integration, definitions, root, fsImpl = fs) {
81
- const { id, key, name, description, status, account } = integration;
113
+ const { id, name, description, status, type, account, templateImports } = integration;
82
114
  const { timestamp, elements } = definitions;
83
115
  const rootFolder = root ? normalizeFolderName(root) : undefined;
84
116
  const createFolder = createFolderIfMissing(rootFolder, fsImpl);
@@ -86,15 +118,17 @@ export default function saveIntegration(integration, definitions, root, fsImpl =
86
118
  if (rootFolder) {
87
119
  createFolderIfMissing(undefined, fsImpl)(rootFolder);
88
120
  }
121
+ const priorGreat = readGreatFile(rootFolder, fsImpl);
122
+ const great = emptyGreatFile();
123
+ great.id = id;
124
+ great.timestamp = timestamp ?? undefined;
125
+ great.account = account ? { id: account.id, key: account.key } : undefined;
89
126
  const config = elements?.find((el) => el.__typename === 'ConfigElement' && el.key === 'config');
90
127
  const index = {
91
- ...(id ? { __id: id } : {}),
92
- __key: key,
93
- ...(timestamp ? { __timestamp: timestamp } : {}),
94
128
  name,
95
129
  description,
96
130
  status,
97
- account: account ? transformAccount(account) : undefined,
131
+ type: resolveIntegrationType(type),
98
132
  flags: config?.content?.data,
99
133
  identConfig: undefined,
100
134
  nonvalues: undefined,
@@ -104,14 +138,22 @@ export default function saveIntegration(integration, definitions, root, fsImpl =
104
138
  Object.values(typeToFolder).forEach((folder) => {
105
139
  createFolder(folder);
106
140
  });
107
- deleteRemovedFiles(rootFolder, elements, fsImpl);
141
+ deleteRemovedFiles(rootFolder, elements, priorGreat, fsImpl);
108
142
  if (elements) {
109
143
  elements.forEach((element) => {
110
144
  const folder = typeToFolder[element.__typename];
111
145
  if (folder) {
112
- writeFile(folder, element.key, transformElement(element));
146
+ writeFile(folder, element.key, buildElementFile(element));
147
+ setElementRecord(great, folder, element.key, buildElementRecord(element));
113
148
  }
114
149
  });
115
150
  }
151
+ const imports = buildImportRecords(templateImports);
152
+ if (imports.length > 0) {
153
+ great.imports = imports;
154
+ }
155
+ if (great.id) {
156
+ writeGreatFile(great, rootFolder, fsImpl);
157
+ }
116
158
  }
117
159
  //# sourceMappingURL=saveIntegration.js.map
@@ -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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"}
@@ -9,7 +9,7 @@ export function getStoredToken(config) {
9
9
  const token = getConfigValue('token', config);
10
10
  const expiresAt = getConfigValue('expiresAt', config);
11
11
  if (!token) {
12
- return process.env.GREAT_TOKEN;
12
+ return undefined;
13
13
  }
14
14
  if (isTokenExpired(expiresAt)) {
15
15
  deleteConfigValue('token', config);
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAS/E,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,CAAA;AAChC,CAAC;AAYD,MAAM,UAAU,cAAc,CAC5B,MAA2B;IAE3B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAErD,IAAI,CAAC,KAAK,EAAE,CAAC;QAEX,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAE9B,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAClC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AASD,MAAM,UAAU,SAAS,CACvB,KAAa,EACb,SAAkB,EAClB,MAA2B;IAE3B,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACtC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAS/E,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,CAAA;AAChC,CAAC;AAOD,MAAM,UAAU,cAAc,CAC5B,MAA2B;IAE3B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAErD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAClC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AASD,MAAM,UAAU,SAAS,CACvB,KAAa,EACb,SAAkB,EAClB,MAA2B;IAE3B,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACtC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isValidUrl(value: string): boolean;
@@ -0,0 +1,10 @@
1
+ export function isValidUrl(value) {
2
+ try {
3
+ new URL(value);
4
+ return true;
5
+ }
6
+ catch {
7
+ return false;
8
+ }
9
+ }
10
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ import fs from 'node:fs';
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";
6
+ export interface ShadowConflict {
7
+ key: string;
8
+ folder: string;
9
+ reason: string;
10
+ }
11
+ export interface WriteShadowsResult {
12
+ written: {
13
+ folder: string;
14
+ key: string;
15
+ }[];
16
+ skipped: ResolvedShadow[];
17
+ conflicts: ShadowConflict[];
18
+ }
19
+ interface WriteShadowsOptions {
20
+ root?: string;
21
+ pinnedFallback?: string;
22
+ fsImpl?: typeof fs;
23
+ }
24
+ export declare function writeShadowElements(great: GreatFile, resolved: readonly ResolvedShadow[], options?: WriteShadowsOptions): WriteShadowsResult;
25
+ export declare function logShadowConflicts(verb: string, conflicts: readonly ShadowConflict[], log: (message: string) => void): void;
26
+ export {};
@@ -0,0 +1,119 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { elementTypeToFolder, JSON_EXTENSIONS } from './elementFiles.js';
5
+ import { getElementRecord, setElementRecord, addProvenance } from './greatFile.js';
6
+ export const SHADOW_MARKER = '$shadow';
7
+ const folderPath = (root, folder) => root ? path.join(root, folder) : folder;
8
+ function existingFilePath(root, folder, key, fsImpl) {
9
+ for (const ext of JSON_EXTENSIONS) {
10
+ const filePath = path.join(folderPath(root, folder), `${key}${ext}`);
11
+ if (fsImpl.existsSync(filePath)) {
12
+ return filePath;
13
+ }
14
+ }
15
+ return undefined;
16
+ }
17
+ function classify(great, resolved, root, fsImpl) {
18
+ const folder = elementTypeToFolder[resolved.type];
19
+ if (!folder) {
20
+ return { status: 'skip' };
21
+ }
22
+ if (!resolved.content?.sourceId) {
23
+ return {
24
+ status: 'conflict',
25
+ conflict: {
26
+ key: resolved.key,
27
+ folder,
28
+ reason: 'element has no versioned content to include',
29
+ },
30
+ };
31
+ }
32
+ const record = getElementRecord(great, folder, resolved.key);
33
+ const hasFile = Boolean(existingFilePath(root, folder, resolved.key, fsImpl));
34
+ if (record?.source) {
35
+ if (record.source.id === resolved.content?.sourceId) {
36
+ return { status: 'write', folder };
37
+ }
38
+ return {
39
+ status: 'conflict',
40
+ conflict: {
41
+ key: resolved.key,
42
+ folder,
43
+ reason: `already a shadow of a different source (${record.source.id})`,
44
+ },
45
+ };
46
+ }
47
+ if (hasFile || record) {
48
+ return {
49
+ status: 'conflict',
50
+ conflict: {
51
+ key: resolved.key,
52
+ folder,
53
+ reason: 'a local element already exists',
54
+ },
55
+ };
56
+ }
57
+ return { status: 'write', folder };
58
+ }
59
+ function buildShadowFile(resolved) {
60
+ return {
61
+ [SHADOW_MARKER]: true,
62
+ name: resolved.name,
63
+ ...(resolved.description != null
64
+ ? { description: resolved.description }
65
+ : {}),
66
+ ...resolved.content?.data,
67
+ };
68
+ }
69
+ function writeOne(great, resolved, folder, options) {
70
+ const { root, pinnedFallback, fsImpl } = options;
71
+ const existingPath = existingFilePath(root, folder, resolved.key, fsImpl);
72
+ const writePath = existingPath ?? path.join(folderPath(root, folder), `${resolved.key}.json`);
73
+ fsImpl.mkdirSync(folderPath(root, folder), { recursive: true });
74
+ fsImpl.writeFileSync(writePath, JSON.stringify(buildShadowFile(resolved), undefined, 2));
75
+ const record = getElementRecord(great, folder, resolved.key) ?? {};
76
+ const timestamp = resolved.content?.sourceTimestamp ?? pinnedFallback;
77
+ record.source = {
78
+ id: resolved.content?.sourceId ?? '',
79
+ ...(timestamp ? { timestamp } : {}),
80
+ };
81
+ addProvenance(record, resolved.content?.provenance ?? []);
82
+ setElementRecord(great, folder, resolved.key, record);
83
+ }
84
+ export function writeShadowElements(great, resolved, options = {}) {
85
+ const fsImpl = options.fsImpl ?? fs;
86
+ const result = {
87
+ written: [],
88
+ skipped: [],
89
+ conflicts: [],
90
+ };
91
+ const toWrite = [];
92
+ for (const element of resolved) {
93
+ const classified = classify(great, element, options.root, fsImpl);
94
+ if (classified.status === 'skip') {
95
+ result.skipped.push(element);
96
+ }
97
+ else if (classified.status === 'conflict') {
98
+ result.conflicts.push(classified.conflict);
99
+ }
100
+ else {
101
+ toWrite.push({ resolved: element, folder: classified.folder });
102
+ }
103
+ }
104
+ if (result.conflicts.length > 0) {
105
+ return result;
106
+ }
107
+ for (const { resolved: element, folder } of toWrite) {
108
+ writeOne(great, element, folder, { ...options, fsImpl });
109
+ result.written.push({ folder, key: element.key });
110
+ }
111
+ return result;
112
+ }
113
+ export function logShadowConflicts(verb, conflicts, log) {
114
+ log(chalk.red(`${verb} aborted — ${conflicts.length} conflict(s):`));
115
+ for (const conflict of conflicts) {
116
+ log(` ${conflict.folder}/${conflict.key}: ${conflict.reason}`);
117
+ }
118
+ }
119
+ //# sourceMappingURL=writeShadowElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeShadowElement.js","sourceRoot":"","sources":["../../src/utils/writeShadowElement.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import Conf from 'conf';
3
3
  import { type GraphQLRequestClient } from '../utils/graphqlClient.js';
4
- import { type ConfigSchema } from '../utils/config.js';
4
+ import type { ConfigSchema } from '../utils/config.js';
5
5
  export declare const getValueAction: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>, fsImpl?: typeof fs) => (element: string, options?: {
6
6
  integration?: string;
7
7
  account?: string;
@@ -1,25 +1,24 @@
1
1
  import fs from 'node:fs';
2
2
  import chalk from 'chalk';
3
- import { createGraphQLClient, } from '../utils/graphqlClient.js';
4
- import { getApiBaseUrl } from '../utils/config.js';
3
+ import { getClient } from '../utils/graphqlClient.js';
5
4
  import { resolveAccountId } from '../utils/resolveAccount.js';
6
5
  import { resolveElement } from '../utils/resolveElement.js';
7
- import { fetchIdFromFile } from '../utils/fetchLocal.js';
8
- import { ElementType } from '../generated/graphql.js';
6
+ import { fetchIntegrationId } from '../utils/fetchLocal.js';
7
+ import { ElementType } from '../generated/schema.js';
9
8
  export const getValueAction = (log, apiToken, client, config, fsImpl = fs) => async (element, options) => {
10
9
  if (!apiToken) {
11
10
  log(chalk.red('Authentication required. Run `great login` first.'));
12
11
  return;
13
12
  }
14
- const graphQLClient = client ?? createGraphQLClient(apiToken, getApiBaseUrl(config));
13
+ const graphQLClient = getClient(apiToken, client, config);
15
14
  let integrationIdentifier = options?.integration;
16
15
  if (!integrationIdentifier) {
17
- integrationIdentifier = fetchIdFromFile(fsImpl);
16
+ integrationIdentifier = fetchIntegrationId(fsImpl);
18
17
  }
19
18
  let accountId;
20
19
  if (integrationIdentifier) {
21
- const { accountId: resolvedAccountId, error } = await resolveAccountId(options ?? {}, apiToken, graphQLClient, config);
22
- if (error && options?.integration) {
20
+ const { accountId: resolvedAccountId, error } = await resolveAccountId(options ?? {}, apiToken, graphQLClient, config, fsImpl);
21
+ if (error && (options?.account || options?.integration)) {
23
22
  log(chalk.red(error));
24
23
  return;
25
24
  }