great 0.3.2 → 1.0.2

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 (185) hide show
  1. package/README.md +119 -13
  2. package/dist/accounts/create.d.ts +4 -0
  3. package/dist/accounts/create.js +42 -0
  4. package/dist/accounts/create.js.map +1 -0
  5. package/dist/accounts/index.d.ts +5 -2
  6. package/dist/accounts/index.js +48 -9
  7. package/dist/accounts/index.js.map +1 -1
  8. package/dist/clone/index.d.ts +8 -0
  9. package/dist/clone/index.js +61 -0
  10. package/dist/clone/index.js.map +1 -0
  11. package/dist/config/index.d.ts +8 -0
  12. package/dist/config/index.js +111 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/create/index.d.ts +3 -0
  15. package/dist/create/index.js +7 -0
  16. package/dist/create/index.js.map +1 -0
  17. package/dist/deploy/index.d.ts +11 -0
  18. package/dist/deploy/index.js +132 -0
  19. package/dist/deploy/index.js.map +1 -0
  20. package/dist/explode/index.d.ts +5 -0
  21. package/dist/explode/index.js +32 -0
  22. package/dist/explode/index.js.map +1 -0
  23. package/dist/explode/transform.d.ts +30 -0
  24. package/dist/explode/transform.js +100 -0
  25. package/dist/explode/transform.js.map +1 -0
  26. package/dist/explode/unescapeMongo.d.ts +1 -0
  27. package/dist/explode/unescapeMongo.js +15 -0
  28. package/dist/explode/unescapeMongo.js.map +1 -0
  29. package/dist/generated/graphql.d.ts +1784 -0
  30. package/dist/generated/graphql.js +73 -0
  31. package/dist/generated/graphql.js.map +1 -0
  32. package/dist/index.js +29 -4
  33. package/dist/index.js.map +1 -1
  34. package/dist/init/index.d.ts +5 -0
  35. package/dist/init/index.js +46 -0
  36. package/dist/init/index.js.map +1 -0
  37. package/dist/integrations/create.d.ts +6 -0
  38. package/dist/integrations/create.js +70 -0
  39. package/dist/integrations/create.js.map +1 -0
  40. package/dist/{projects/describe.d.ts → integrations/index.d.ts} +0 -1
  41. package/dist/integrations/index.js +23 -0
  42. package/dist/integrations/index.js.map +1 -0
  43. package/dist/integrations/list.d.ts +7 -0
  44. package/dist/integrations/list.js +103 -0
  45. package/dist/integrations/list.js.map +1 -0
  46. package/dist/login/index.d.ts +6 -0
  47. package/dist/login/index.js +25 -0
  48. package/dist/login/index.js.map +1 -0
  49. package/dist/logout/index.d.ts +6 -0
  50. package/dist/logout/index.js +11 -0
  51. package/dist/logout/index.js.map +1 -0
  52. package/dist/now/index.d.ts +3 -1
  53. package/dist/now/index.js +11 -2
  54. package/dist/now/index.js.map +1 -1
  55. package/dist/pull/index.d.ts +5 -1
  56. package/dist/pull/index.js +50 -19
  57. package/dist/pull/index.js.map +1 -1
  58. package/dist/push/index.d.ts +11 -0
  59. package/dist/push/index.js +481 -0
  60. package/dist/push/index.js.map +1 -0
  61. package/dist/repl/dispatch.d.ts +8 -0
  62. package/dist/repl/dispatch.js +75 -0
  63. package/dist/repl/dispatch.js.map +1 -0
  64. package/dist/repl/help.d.ts +2 -0
  65. package/dist/repl/help.js +14 -0
  66. package/dist/repl/help.js.map +1 -0
  67. package/dist/repl/index.d.ts +10 -0
  68. package/dist/repl/index.js +92 -0
  69. package/dist/repl/index.js.map +1 -0
  70. package/dist/run/index.d.ts +33 -1
  71. package/dist/run/index.js +109 -40
  72. package/dist/run/index.js.map +1 -1
  73. package/dist/status/index.d.ts +10 -0
  74. package/dist/status/index.js +122 -0
  75. package/dist/status/index.js.map +1 -0
  76. package/dist/types.d.ts +1 -0
  77. package/dist/types.js +2 -0
  78. package/dist/types.js.map +1 -0
  79. package/dist/utils/authServer.d.ts +4 -0
  80. package/dist/utils/authServer.js +49 -0
  81. package/dist/utils/authServer.js.map +1 -0
  82. package/dist/utils/config.d.ts +15 -0
  83. package/dist/utils/config.js +41 -0
  84. package/dist/utils/config.js.map +1 -0
  85. package/dist/utils/createIntegrationFromFile.d.ts +22 -0
  86. package/dist/utils/createIntegrationFromFile.js +116 -0
  87. package/dist/utils/createIntegrationFromFile.js.map +1 -0
  88. package/dist/utils/determineNameAndKey.d.ts +4 -0
  89. package/dist/utils/determineNameAndKey.js +8 -0
  90. package/dist/utils/determineNameAndKey.js.map +1 -0
  91. package/dist/utils/dispatch.d.ts +3 -0
  92. package/dist/utils/dispatch.js +37 -0
  93. package/dist/utils/dispatch.js.map +1 -0
  94. package/dist/utils/fetchLocal.d.ts +3 -0
  95. package/dist/utils/fetchLocal.js +21 -0
  96. package/dist/utils/fetchLocal.js.map +1 -0
  97. package/dist/utils/fetchSession.d.ts +7 -0
  98. package/dist/utils/fetchSession.js +34 -0
  99. package/dist/utils/fetchSession.js.map +1 -0
  100. package/dist/utils/graphqlClient.d.ts +10 -0
  101. package/dist/utils/graphqlClient.js +24 -0
  102. package/dist/utils/graphqlClient.js.map +1 -0
  103. package/dist/utils/graphqlError.d.ts +2 -0
  104. package/dist/utils/graphqlError.js +20 -0
  105. package/dist/utils/graphqlError.js.map +1 -0
  106. package/dist/utils/hashContent.d.ts +1 -0
  107. package/dist/utils/hashContent.js +7 -0
  108. package/dist/utils/hashContent.js.map +1 -0
  109. package/dist/utils/jwt.d.ts +6 -0
  110. package/dist/utils/jwt.js +24 -0
  111. package/dist/utils/jwt.js.map +1 -0
  112. package/dist/utils/promptForValue.d.ts +9 -0
  113. package/dist/utils/promptForValue.js +24 -0
  114. package/dist/utils/promptForValue.js.map +1 -0
  115. package/dist/utils/resolveAccount.d.ts +19 -0
  116. package/dist/utils/resolveAccount.js +75 -0
  117. package/dist/utils/resolveAccount.js.map +1 -0
  118. package/dist/utils/resolveElement.d.ts +20 -0
  119. package/dist/utils/resolveElement.js +67 -0
  120. package/dist/utils/resolveElement.js.map +1 -0
  121. package/dist/utils/resolveIntegration.d.ts +9 -0
  122. package/dist/utils/resolveIntegration.js +71 -0
  123. package/dist/utils/resolveIntegration.js.map +1 -0
  124. package/dist/utils/saveIntegration.d.ts +16 -0
  125. package/dist/utils/saveIntegration.js +117 -0
  126. package/dist/utils/saveIntegration.js.map +1 -0
  127. package/dist/utils/token.d.ts +6 -0
  128. package/dist/utils/token.js +31 -0
  129. package/dist/utils/token.js.map +1 -0
  130. package/dist/utils/valueTypes.d.ts +4 -0
  131. package/dist/utils/valueTypes.js +43 -0
  132. package/dist/utils/valueTypes.js.map +1 -0
  133. package/dist/value/get.d.ts +8 -0
  134. package/dist/value/get.js +50 -0
  135. package/dist/value/get.js.map +1 -0
  136. package/dist/{projects → value}/index.d.ts +1 -2
  137. package/dist/value/index.js +26 -0
  138. package/dist/value/index.js.map +1 -0
  139. package/dist/value/list.d.ts +8 -0
  140. package/dist/value/list.js +122 -0
  141. package/dist/value/list.js.map +1 -0
  142. package/dist/value/set.d.ts +12 -0
  143. package/dist/value/set.js +103 -0
  144. package/dist/value/set.js.map +1 -0
  145. package/dist/whoami/fetchSession.d.ts +9 -0
  146. package/dist/whoami/fetchSession.js +19 -0
  147. package/dist/whoami/fetchSession.js.map +1 -0
  148. package/dist/whoami/index.d.ts +9 -1
  149. package/dist/whoami/index.js +18 -10
  150. package/dist/whoami/index.js.map +1 -1
  151. package/package.json +30 -13
  152. package/.codeclimate.yml +0 -7
  153. package/.editorconfig +0 -11
  154. package/.nvmrc +0 -1
  155. package/.prettierrc.json +0 -6
  156. package/dist/now/index.test.d.ts +0 -1
  157. package/dist/now/index.test.js +0 -18
  158. package/dist/now/index.test.js.map +0 -1
  159. package/dist/projects/describe.js +0 -44
  160. package/dist/projects/describe.js.map +0 -1
  161. package/dist/projects/index.js +0 -39
  162. package/dist/projects/index.js.map +0 -1
  163. package/dist/utils/callApi.d.ts +0 -5
  164. package/dist/utils/callApi.js +0 -20
  165. package/dist/utils/callApi.js.map +0 -1
  166. package/dist/utils/fetchLocalProject.d.ts +0 -1
  167. package/dist/utils/fetchLocalProject.js +0 -12
  168. package/dist/utils/fetchLocalProject.js.map +0 -1
  169. package/dist/utils/saveProject.d.ts +0 -2
  170. package/dist/utils/saveProject.js +0 -68
  171. package/dist/utils/saveProject.js.map +0 -1
  172. package/eslint.config.js +0 -27
  173. package/src/accounts/index.ts +0 -41
  174. package/src/index.ts +0 -22
  175. package/src/now/index.test.ts +0 -31
  176. package/src/now/index.ts +0 -15
  177. package/src/projects/describe.ts +0 -80
  178. package/src/projects/index.ts +0 -61
  179. package/src/pull/index.ts +0 -45
  180. package/src/run/index.ts +0 -81
  181. package/src/utils/callApi.ts +0 -29
  182. package/src/utils/fetchLocalProject.ts +0 -12
  183. package/src/utils/saveProject.ts +0 -106
  184. package/src/whoami/index.ts +0 -32
  185. package/tsconfig.json +0 -28
@@ -0,0 +1,132 @@
1
+ import fs from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import { fetchIdFromFile } from '../utils/fetchLocal.js';
4
+ import { resolveIntegration } from '../utils/resolveIntegration.js';
5
+ import { createGraphQLClient, } from '../utils/graphqlClient.js';
6
+ import { handleGraphQLError } from '../utils/graphqlError.js';
7
+ import { resolveAccountId } from '../utils/resolveAccount.js';
8
+ import { getApiBaseUrl } from '../utils/config.js';
9
+ import { gql } from 'graphql-tag';
10
+ const CreateVersionMutationDocument = gql `
11
+ mutation CreateVersion(
12
+ $integrationId: ID!
13
+ $name: String
14
+ $timestamp: DateTime
15
+ ) {
16
+ createVersion(
17
+ integrationId: $integrationId
18
+ name: $name
19
+ timestamp: $timestamp
20
+ ) {
21
+ id
22
+ name
23
+ timestamp
24
+ isActive
25
+ }
26
+ }
27
+ `;
28
+ const StartIntegrationMutationDocument = gql `
29
+ mutation StartIntegration($id: ID!, $versionId: ID) {
30
+ startIntegration(id: $id, versionId: $versionId) {
31
+ id
32
+ name
33
+ status
34
+ }
35
+ }
36
+ `;
37
+ async function resolveIntegrationForDeploy(identifier, accountId, apiToken, client, log) {
38
+ const result = await resolveIntegration(identifier, accountId, apiToken, client);
39
+ if (result.error) {
40
+ log(chalk.red(result.error));
41
+ return undefined;
42
+ }
43
+ if (!result.id) {
44
+ log(chalk.red('Failed to resolve integration'));
45
+ return undefined;
46
+ }
47
+ return {
48
+ integrationId: result.id,
49
+ integrationName: result.name,
50
+ };
51
+ }
52
+ async function createVersion(graphqlClient, integrationId, versionName, log) {
53
+ const versionResult = await graphqlClient.request(CreateVersionMutationDocument, {
54
+ integrationId,
55
+ name: versionName,
56
+ });
57
+ if (versionResult.error) {
58
+ handleGraphQLError(versionResult.error, log);
59
+ return undefined;
60
+ }
61
+ const version = versionResult.data?.createVersion;
62
+ if (!version) {
63
+ log(chalk.red('Failed to create version'));
64
+ return undefined;
65
+ }
66
+ return version;
67
+ }
68
+ async function startIntegration(graphqlClient, integrationId, versionId, log) {
69
+ const startResult = await graphqlClient.request(StartIntegrationMutationDocument, {
70
+ id: integrationId,
71
+ versionId,
72
+ });
73
+ if (startResult.error) {
74
+ handleGraphQLError(startResult.error, log);
75
+ return undefined;
76
+ }
77
+ const integration = startResult.data?.startIntegration;
78
+ if (!integration) {
79
+ return undefined;
80
+ }
81
+ return integration;
82
+ }
83
+ function logPartialSuccess(versionId, log) {
84
+ log(chalk.yellow('⚠ Version created but failed to start integration'));
85
+ log(` Version ID: ${versionId}`);
86
+ log(` Try running ${chalk.bold('great deploy')} again to start with this version`);
87
+ }
88
+ function logSuccess(integrationName, version, integration, log) {
89
+ log(chalk.green('✓ Integration deployed successfully'));
90
+ log(` Name: ${integrationName || integration.name}`);
91
+ if (version.name) {
92
+ log(` Version: ${version.name} (${version.timestamp})`);
93
+ }
94
+ else {
95
+ log(` Version: ${version.timestamp}`);
96
+ }
97
+ log(` Status: ${integration.status}`);
98
+ }
99
+ export const action = (log, apiToken, client, fsImpl = fs, config) => async function deploy(integrationIdOrKey, options) {
100
+ const identifier = integrationIdOrKey ?? fetchIdFromFile(fsImpl);
101
+ if (!identifier) {
102
+ log(chalk.red('No integration argument and no local integration project'));
103
+ return;
104
+ }
105
+ const apiBaseUrl = getApiBaseUrl(config);
106
+ const graphqlClient = client ?? createGraphQLClient(apiToken, apiBaseUrl);
107
+ const { accountId, error } = await resolveAccountId(options ?? {}, apiToken ?? '', graphqlClient, config);
108
+ if (error) {
109
+ log(chalk.red(error));
110
+ return;
111
+ }
112
+ const integration = await resolveIntegrationForDeploy(identifier, accountId, apiToken, client, log);
113
+ if (!integration)
114
+ return;
115
+ const version = await createVersion(graphqlClient, integration.integrationId, options?.name, log);
116
+ if (!version)
117
+ return;
118
+ const startedIntegration = await startIntegration(graphqlClient, integration.integrationId, version.id, log);
119
+ if (!startedIntegration) {
120
+ logPartialSuccess(version.id, log);
121
+ return;
122
+ }
123
+ logSuccess(integration.integrationName, version, startedIntegration, log);
124
+ };
125
+ export default (program, apiToken) => program
126
+ .command('deploy')
127
+ .description('create a version and start the integration')
128
+ .argument('[integration]', 'integration id or key')
129
+ .option('-a, --account <id>', 'account id or key (uses default from config if not provided)')
130
+ .option('-n, --name <name>', 'version name')
131
+ .action(action(console.log, apiToken));
132
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deploy/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import fs from 'node:fs';
2
+ import type { Command } from 'commander';
3
+ export declare const action: (log: (message: string) => void, fsImpl?: typeof fs) => (filePath?: string) => Promise<void>;
4
+ declare const _default: (program: Command) => Command;
5
+ export default _default;
@@ -0,0 +1,32 @@
1
+ import fs from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import { transformLegacyIntegration } from './transform.js';
4
+ import saveIntegration from '../utils/saveIntegration.js';
5
+ export const action = (log, fsImpl = fs) => async function explodeIntegration(filePath) {
6
+ if (!filePath) {
7
+ log(chalk.red('No file path provided'));
8
+ return;
9
+ }
10
+ if (!fsImpl.existsSync(filePath)) {
11
+ log(chalk.red(`File not found: ${filePath}`));
12
+ return;
13
+ }
14
+ let legacyData;
15
+ try {
16
+ const fileContent = fsImpl.readFileSync(filePath, 'utf-8');
17
+ legacyData = JSON.parse(fileContent);
18
+ }
19
+ catch (error) {
20
+ log(chalk.red(`Failed to parse JSON: ${error}`));
21
+ return;
22
+ }
23
+ const [integration, definitions] = transformLegacyIntegration(legacyData);
24
+ const root = legacyData.projectId;
25
+ saveIntegration(integration, definitions, root, fsImpl);
26
+ };
27
+ export default (program) => program
28
+ .command('explode')
29
+ .description('Convert legacy integration JSON to new file structure')
30
+ .argument('<file>', 'Path to legacy JSON file')
31
+ .action(action(console.log));
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,eAAe,MAAM,6BAA6B,CAAA;AAGzD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CACpE,KAAK,UAAU,kBAAkB,CAAC,QAAiB;IAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAA;QACvC,OAAM;IACR,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC7C,OAAM;IACR,CAAC;IAGD,IAAI,UAAU,CAAA;IACd,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC1D,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC,CAAA;QAChD,OAAM;IACR,CAAC;IAGD,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAA;IAGzE,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAA;IACjC,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AACzD,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,EAAE,CAClC,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,uDAAuD,CAAC;KACpE,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA"}
@@ -0,0 +1,30 @@
1
+ import type { IntegrationMeta, IntegrationDefinitions } from '../utils/saveIntegration.js';
2
+ interface LegacyIntegration {
3
+ id: string;
4
+ projectId: string;
5
+ name: string;
6
+ status: string;
7
+ values?: Record<string, unknown>;
8
+ retryRules?: Record<string, unknown>[];
9
+ definitions?: {
10
+ flags?: Record<string, unknown>;
11
+ schemas?: Record<string, unknown>[];
12
+ services?: Record<string, unknown>[];
13
+ auths?: Record<string, unknown>[];
14
+ mutations?: Record<string, unknown>;
15
+ dictionaries?: Record<string, unknown>;
16
+ jobs?: Record<string, unknown>[];
17
+ };
18
+ }
19
+ export interface TransformedElement {
20
+ id: string;
21
+ key: string;
22
+ content?: unknown;
23
+ createdAt: unknown;
24
+ }
25
+ export declare function transformMutations(mutations: Record<string, unknown>): TransformedElement[];
26
+ export declare function transformDictionaries(dictionaries: Record<string, unknown>): TransformedElement[];
27
+ export declare function transformValues(values: Record<string, unknown>): TransformedElement[];
28
+ export declare function transformElement(element: Record<string, unknown>): TransformedElement;
29
+ export declare function transformLegacyIntegration(legacy: LegacyIntegration): [IntegrationMeta, IntegrationDefinitions];
30
+ export {};
@@ -0,0 +1,100 @@
1
+ import { unescapeMongo } from './unescapeMongo.js';
2
+ export function transformMutations(mutations) {
3
+ return Object.entries(mutations).map(([key, value]) => ({
4
+ id: '',
5
+ key,
6
+ content: { mutation: unescapeMongo(value) },
7
+ createdAt: undefined,
8
+ }));
9
+ }
10
+ export function transformDictionaries(dictionaries) {
11
+ return Object.entries(dictionaries).map(([key, value]) => ({
12
+ id: '',
13
+ key,
14
+ content: { dictionary: unescapeMongo(value) },
15
+ createdAt: undefined,
16
+ }));
17
+ }
18
+ const ISO_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d\d\d)?Z?$/;
19
+ function detectValueType(value, isSecret) {
20
+ if (isSecret) {
21
+ return 'secret';
22
+ }
23
+ if (typeof value === 'boolean') {
24
+ return 'boolean';
25
+ }
26
+ if (typeof value === 'number') {
27
+ return 'number';
28
+ }
29
+ if (typeof value === 'string' && ISO_DATE_PATTERN.test(value)) {
30
+ return 'date';
31
+ }
32
+ return 'string';
33
+ }
34
+ export function transformValues(values) {
35
+ return Object.entries(values).map(([key, val]) => {
36
+ const isSecret = key.endsWith('$secret');
37
+ const cleanKey = isSecret ? key.slice(0, -7) : key;
38
+ const type = detectValueType(val, isSecret);
39
+ return {
40
+ id: '',
41
+ key: cleanKey,
42
+ content: {
43
+ value: unescapeMongo(val),
44
+ type,
45
+ },
46
+ createdAt: undefined,
47
+ };
48
+ });
49
+ }
50
+ export function transformElement(element) {
51
+ const { id, ...rest } = element;
52
+ return {
53
+ id: '',
54
+ key: id,
55
+ content: unescapeMongo(rest),
56
+ createdAt: undefined,
57
+ };
58
+ }
59
+ function toElements(items, typename) {
60
+ return items.map((el) => ({
61
+ ...el,
62
+ __typename: typename,
63
+ content: { data: el.content },
64
+ }));
65
+ }
66
+ export function transformLegacyIntegration(legacy) {
67
+ const { projectId, name, status, values, retryRules, definitions } = legacy;
68
+ const elements = [
69
+ ...toElements(definitions?.schemas?.map(transformElement) || [], 'Schema'),
70
+ ...toElements(definitions?.services?.map(transformElement) || [], 'Service'),
71
+ ...toElements(definitions?.auths?.map(transformElement) || [], 'Auth'),
72
+ ...toElements(definitions?.mutations ? transformMutations(definitions.mutations) : [], 'SchemaMutation'),
73
+ ...toElements(definitions?.dictionaries
74
+ ? transformDictionaries(definitions.dictionaries)
75
+ : [], 'Dictionary'),
76
+ ...toElements(definitions?.jobs?.map(transformElement) || [], 'Job'),
77
+ ...toElements(values ? transformValues(values) : [], 'Value'),
78
+ ...toElements(retryRules?.map(transformElement) || [], 'RetryRule'),
79
+ ];
80
+ if (definitions?.flags) {
81
+ elements.push({
82
+ key: 'config',
83
+ __typename: 'ConfigElement',
84
+ content: { data: definitions.flags },
85
+ });
86
+ }
87
+ return [
88
+ {
89
+ key: projectId,
90
+ name,
91
+ description: undefined,
92
+ status: status,
93
+ },
94
+ {
95
+ timestamp: undefined,
96
+ elements,
97
+ },
98
+ ];
99
+ }
100
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/explode/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function unescapeMongo<T>(obj: T): T;
@@ -0,0 +1,15 @@
1
+ export function unescapeMongo(obj) {
2
+ if (obj === null || typeof obj !== 'object') {
3
+ return obj;
4
+ }
5
+ if (Array.isArray(obj)) {
6
+ return obj.map((item) => unescapeMongo(item));
7
+ }
8
+ const result = {};
9
+ for (const key in obj) {
10
+ const unescapedKey = key.startsWith('\\$') ? key.substring(1) : key;
11
+ result[unescapedKey] = unescapeMongo(obj[key]);
12
+ }
13
+ return result;
14
+ }
15
+ //# sourceMappingURL=unescapeMongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unescapeMongo.js","sourceRoot":"","sources":["../../src/explode/unescapeMongo.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAI,GAAM;IAErC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAA;IACZ,CAAC;IAGD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAM,CAAA;IACpD,CAAC;IAGD,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QAEtB,MAAM,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAGnE,MAAM,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,MAAW,CAAA;AACpB,CAAC"}