great 0.3.1 → 1.0.1

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 +121 -15
  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 +29 -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,103 @@
1
+ import fs from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import { gql } from 'graphql-tag';
4
+ import { createGraphQLClient, } from '../utils/graphqlClient.js';
5
+ import { getApiBaseUrl } from '../utils/config.js';
6
+ import { VALID_VALUE_TYPES, isValidValueElementType, castValue, } from '../utils/valueTypes.js';
7
+ import { resolveAccountId } from '../utils/resolveAccount.js';
8
+ import { resolveElement } from '../utils/resolveElement.js';
9
+ import { fetchIdFromFile } from '../utils/fetchLocal.js';
10
+ import { ElementType } from '../generated/graphql.js';
11
+ const SetValueMutationDocument = gql `
12
+ mutation SetValue($id: ID!, $value: PrimitiveValue!) {
13
+ setValue(id: $id, value: $value)
14
+ }
15
+ `;
16
+ export async function setValueForElement(elementId, valueStr, elementContent, graphQLClient) {
17
+ const valueType = elementContent.type;
18
+ if (!valueType || typeof valueType !== 'string') {
19
+ return {
20
+ success: false,
21
+ error: 'Value element has no type defined in content',
22
+ };
23
+ }
24
+ if (!isValidValueElementType(valueType)) {
25
+ return {
26
+ success: false,
27
+ error: `Invalid value type "${valueType}". Must be one of: ${VALID_VALUE_TYPES.join(', ')}`,
28
+ };
29
+ }
30
+ let castedValue;
31
+ try {
32
+ castedValue = castValue(valueStr, valueType);
33
+ }
34
+ catch (error) {
35
+ return {
36
+ success: false,
37
+ error: error.message,
38
+ };
39
+ }
40
+ const setValueResult = await graphQLClient.request(SetValueMutationDocument, { id: elementId, value: castedValue });
41
+ if (setValueResult.error) {
42
+ return {
43
+ success: false,
44
+ error: setValueResult.error.message,
45
+ };
46
+ }
47
+ if (!setValueResult.data?.setValue) {
48
+ return {
49
+ success: false,
50
+ error: 'Failed to set value',
51
+ };
52
+ }
53
+ return { success: true };
54
+ }
55
+ export const setValueAction = (log, apiToken, client, config, fsImpl = fs) => async (element, valueStr, options) => {
56
+ if (!apiToken) {
57
+ log(chalk.red('Authentication required. Run `great login` first.'));
58
+ return;
59
+ }
60
+ const graphQLClient = client ?? createGraphQLClient(apiToken, getApiBaseUrl(config));
61
+ let integrationIdentifier = options?.integration;
62
+ if (!integrationIdentifier) {
63
+ integrationIdentifier = fetchIdFromFile(fsImpl);
64
+ }
65
+ let accountId;
66
+ if (integrationIdentifier) {
67
+ const { accountId: resolvedAccountId, error } = await resolveAccountId(options ?? {}, apiToken, graphQLClient, config);
68
+ if (error && options?.integration) {
69
+ log(chalk.red(error));
70
+ return;
71
+ }
72
+ accountId = resolvedAccountId;
73
+ }
74
+ const resolvedElement = await resolveElement({
75
+ identifier: element,
76
+ type: ElementType.Value,
77
+ integrationIdentifier,
78
+ accountId,
79
+ apiToken,
80
+ client: graphQLClient,
81
+ log,
82
+ });
83
+ if (!resolvedElement) {
84
+ return;
85
+ }
86
+ if (resolvedElement.__typename !== 'Value') {
87
+ log(chalk.red(`Element "${element}" is not a Value element (type: ${resolvedElement.__typename})`));
88
+ return;
89
+ }
90
+ const content = resolvedElement.content?.data;
91
+ if (!content) {
92
+ log(chalk.red(`Value element "${element}" has no content`));
93
+ return;
94
+ }
95
+ const result = await setValueForElement(resolvedElement.id, valueStr, content, graphQLClient);
96
+ if (!result.success) {
97
+ log(chalk.red(result.error ?? 'Failed to set value'));
98
+ return;
99
+ }
100
+ const valueType = content.type;
101
+ log(chalk.green(`✓ Value set for element "${resolvedElement.key}" (${valueType})`));
102
+ };
103
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/value/set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type Conf from 'conf';
2
+ import type { SessionQuery } from '../generated/graphql.js';
3
+ import { type GraphQLRequestClient } from '../utils/graphqlClient.js';
4
+ import { type ConfigSchema } from '../utils/config.js';
5
+ export declare const SessionQueryDocument: import("graphql/index.js").DocumentNode;
6
+ export declare function fetchUserSession(apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>): Promise<{
7
+ data?: SessionQuery;
8
+ error?: Error;
9
+ }>;
@@ -0,0 +1,19 @@
1
+ import { gql } from 'graphql-tag';
2
+ import { createGraphQLClient, } from '../utils/graphqlClient.js';
3
+ import { getApiBaseUrl } from '../utils/config.js';
4
+ export const SessionQueryDocument = gql `
5
+ query Session {
6
+ session {
7
+ user {
8
+ id
9
+ name
10
+ }
11
+ }
12
+ }
13
+ `;
14
+ export async function fetchUserSession(apiToken, client, config) {
15
+ const apiBaseUrl = getApiBaseUrl(config);
16
+ const graphqlClient = client ?? createGraphQLClient(apiToken, apiBaseUrl);
17
+ return await graphqlClient.request(SessionQueryDocument, {});
18
+ }
19
+ //# sourceMappingURL=fetchSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchSession.js","sourceRoot":"","sources":["../../src/whoami/fetchSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAGjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,aAAa,EAAqB,MAAM,oBAAoB,CAAA;AAErE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAA;;;;;;;;;CAStC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAiB,EACjB,MAA6B,EAC7B,MAA2B;IAK3B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACzE,OAAO,MAAM,aAAa,CAAC,OAAO,CAAe,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC5E,CAAC"}
@@ -1,4 +1,12 @@
1
+ import type Conf from 'conf';
1
2
  import type { Command } from 'commander';
2
- export declare const action: (log: (message: string) => void, apiToken?: string) => () => Promise<void>;
3
+ import type { SessionQuery } from '../generated/graphql.js';
4
+ import type { GraphQLRequestClient } from '../utils/graphqlClient.js';
5
+ import type { ConfigSchema } from '../utils/config.js';
6
+ export declare function whoamiAction(log: (message: string) => void, result: {
7
+ data?: SessionQuery;
8
+ error?: Error;
9
+ }): Promise<void>;
10
+ export declare const action: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>) => () => Promise<void>;
3
11
  declare const _default: (program: Command, apiToken?: string) => Command;
4
12
  export default _default;
@@ -1,21 +1,29 @@
1
1
  import chalk from 'chalk';
2
- import callApi from '../utils/callApi.js';
3
- export const action = (log, apiToken) => async function whoami() {
4
- const response = await callApi('https://api.integreat.io/whoami', apiToken);
5
- if (response.error) {
6
- log(chalk.red(response.error));
2
+ import { handleGraphQLError } from '../utils/graphqlError.js';
3
+ import { fetchUserSession } from './fetchSession.js';
4
+ export async function whoamiAction(log, result) {
5
+ if (result.error) {
6
+ handleGraphQLError(result.error, log);
7
7
  return;
8
8
  }
9
- const username = response.user?.id;
10
- if (username) {
11
- log(chalk.white(username));
9
+ const user = result.data?.session?.user;
10
+ if (!user?.id) {
11
+ log(chalk.red(`Not logged in. Run ${chalk.bold('great login')}.`));
12
+ return;
13
+ }
14
+ if (user.name) {
15
+ log(`${chalk.cyan.bold(user.name)} ${chalk.gray(`(${user.id})`)}`);
12
16
  }
13
17
  else {
14
- log(chalk.red('You are not logged in to Integreat.'));
18
+ log(chalk.white(user.id));
15
19
  }
20
+ }
21
+ export const action = (log, apiToken, client, config) => async function whoami() {
22
+ const result = await fetchUserSession(apiToken, client, config);
23
+ await whoamiAction(log, result);
16
24
  };
17
25
  export default (program, apiToken) => program
18
26
  .command('whoami')
19
- .description('display your Integreat user name')
27
+ .description('display your name and user id in Integreat')
20
28
  .action(action(console.log, apiToken));
21
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/whoami/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,OAA0B,MAAM,qBAAqB,CAAA;AAO5D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,QAAiB,EAAE,EAAE,CAC1E,KAAK,UAAU,MAAM;IACnB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,iCAAiC,EACjC,QAAQ,CACT,CAAA;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAA;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC5B,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;IACvD,CAAC;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/whoami/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAMpD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAA8B,EAC9B,MAGC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACrC,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAA;IACvC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;QACd,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IACpE,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAA2B,EAC3B,EAAE,CACF,KAAK,UAAU,MAAM;IACnB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/D,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AACjC,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "great",
3
- "version": "0.3.1",
3
+ "version": "1.0.1",
4
4
  "description": "A CLI for Integreat",
5
5
  "author": "Kjell-Morten Bratsberg Thorsen <kjellmorten@integreat.io>",
6
6
  "license": "UNLICENSED",
7
+ "engines": {
8
+ "node": ">=22"
9
+ },
7
10
  "type": "module",
8
11
  "exports": {
9
12
  ".": {
@@ -16,14 +19,16 @@
16
19
  },
17
20
  "scripts": {
18
21
  "test": "node --import tsx --no-deprecation --test --enable-source-maps --experimental-test-coverage --test-reporter node-test-reporter \"src/**/*.test.ts\"",
22
+ "test:ci": "node --import tsx --no-deprecation --test --enable-source-maps --experimental-test-coverage --test-reporter spec \"src/**/*.test.ts\"",
19
23
  "test:watch": "npm run dev",
20
24
  "dev": "node --import tsx --no-deprecation --test --enable-source-maps --test-reporter node-test-reporter --watch \"src/**/*.test.ts\" || exit 0",
21
25
  "build": "tsc",
22
26
  "prepublishOnly": "npm run build",
23
27
  "coverage": "c8 report",
24
28
  "lint": "eslint --ext .ts src",
25
- "typecheck": "tsc --noEmit --strict",
26
- "verify": "npm run lint && npm run typecheck && npm test"
29
+ "check-types": "tsc --noEmit --strict",
30
+ "verify": "npm run lint && npm run check-types && npm test",
31
+ "codegen": "graphql-codegen --config codegen.ts"
27
32
  },
28
33
  "repository": {
29
34
  "type": "git",
@@ -34,19 +39,30 @@
34
39
  },
35
40
  "homepage": "https://github.com/integreat-io/great#readme",
36
41
  "dependencies": {
37
- "@inquirer/prompts": "^7.4.0",
38
- "chalk": "^5.4.1",
42
+ "@inquirer/prompts": "^8.2.1",
43
+ "chalk": "^5.6.2",
44
+ "change-case": "^5.4.4",
45
+ "clipboardy": "^5.3.0",
39
46
  "columnify": "^1.6.0",
40
- "commander": "^13.1.0",
41
- "ky": "^1.7.5",
42
- "ora": "^8.2.0"
47
+ "commander": "^14.0.3",
48
+ "conf": "^15.1.0",
49
+ "graphql": "^16.12.0",
50
+ "graphql-request": "^7.4.0",
51
+ "ky": "^1.14.3",
52
+ "nanospinner": "^1.2.2",
53
+ "open": "^11.0.0"
43
54
  },
44
55
  "devDependencies": {
45
- "@integreat/ts-dev-setup": "^8.1.2",
56
+ "@graphql-codegen/cli": "^6.1.1",
57
+ "@graphql-codegen/typescript": "^5.0.8",
58
+ "@graphql-codegen/typescript-operations": "^5.0.8",
59
+ "@graphql-codegen/typescript-urql": "^4.0.1",
60
+ "@integreat/ts-dev-setup": "^8.2.0",
46
61
  "@types/columnify": "^1.5.4",
47
- "@types/node": "^22.13.10",
48
- "@types/sinon": "^17.0.4",
49
- "integreat": "^1.6.1",
50
- "sinon": "^19.0.2"
62
+ "@types/node": "^25.3.0",
63
+ "@types/sinon": "^21.0.0",
64
+ "integreat": "^1.6.4",
65
+ "sinon": "^21.0.1",
66
+ "strip-ansi": "^7.1.2"
51
67
  }
52
68
  }
package/.codeclimate.yml DELETED
@@ -1,7 +0,0 @@
1
- version: '2'
2
- exclude_patterns:
3
- - '**/*-test.ts'
4
- - 'tests/'
5
- - 'node_modules/'
6
- - 'coverage/'
7
- - 'dist/'
package/.editorconfig DELETED
@@ -1,11 +0,0 @@
1
- # editorconfig.org
2
- root = true
3
-
4
- [*]
5
- indent_style = space
6
- indent_size = 2
7
- end_of_line = lf
8
- charset = utf-8
9
- trim_trailing_whitespace = true
10
- insert_final_newline = true
11
- max_line_length = 80
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 22.14
package/.prettierrc.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "semi": false,
3
- "singleQuote": true,
4
- "jsxSingleQuote": true,
5
- "editorconfig": true
6
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,18 +0,0 @@
1
- import test from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import sinon from 'sinon';
4
- import { action } from './index.js';
5
- test('should return timestamp', () => {
6
- const log = sinon.stub();
7
- const before = Date.now();
8
- action(log)();
9
- const after = Date.now();
10
- assert.equal(log.callCount, 1);
11
- const message = log.args[0][0];
12
- assert.equal(typeof message, 'string');
13
- const ms = Number.parseInt(message.slice(5, 18));
14
- assert.equal(typeof ms, 'number');
15
- assert.equal(ms >= before, true, 'Milliseconds should be greater than or equal the before timestamp');
16
- assert.equal(ms <= after, true, 'Milliseconds should be less than or equal the after timestamp');
17
- });
18
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/now/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAInC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAExB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;IACb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAExB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAA;IACtC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAChD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAA;IACjC,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,MAAM,EACZ,IAAI,EACJ,mEAAmE,CACpE,CAAA;IACD,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,KAAK,EACX,IAAI,EACJ,+DAA+D,CAChE,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -1,44 +0,0 @@
1
- import chalk from 'chalk';
2
- import columnify from 'columnify';
3
- import callApi from '../utils/callApi.js';
4
- const prepareDetails = ({ id, name, status, shared, createdAt, updatedAt, }) => ({
5
- id,
6
- name,
7
- status,
8
- shared: shared ?? false,
9
- createdAt,
10
- updatedAt,
11
- });
12
- const prepareValues = (values) => Object.fromEntries(Object.entries(values).map(([key, value]) => key.endsWith('$secret')
13
- ? [key.slice(0, key.length - 7), `🔒 ${value}`]
14
- : [key, value]));
15
- export const action = (log, apiToken) => async function projectList(projectId) {
16
- const url = `https://api.integreat.io/projects/${projectId}`;
17
- const response = await callApi(url, apiToken);
18
- if (response.error) {
19
- log(chalk.red(response.error));
20
- return;
21
- }
22
- const project = response.project;
23
- if (project) {
24
- const details = prepareDetails(project);
25
- log(columnify(details, { columns: ['key', 'value'] }));
26
- if (project.values) {
27
- log(chalk.yellow('\nValues:'));
28
- const values = prepareValues(project.values);
29
- log(columnify(values, { columns: ['key', 'value'] }));
30
- }
31
- else {
32
- log('\nNo values');
33
- }
34
- }
35
- else {
36
- log(chalk.white('No project.'));
37
- }
38
- };
39
- export default (program, apiToken) => program
40
- .command('describe')
41
- .description('show project details')
42
- .argument('[project]', 'id of the project. if not given, the id of the local project is used')
43
- .action(action(console.log, apiToken));
44
- //# sourceMappingURL=describe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/projects/describe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,OAA0B,MAAM,qBAAqB,CAAA;AAiB5D,MAAM,cAAc,GAAG,CAAC,EACtB,EAAE,EACF,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAS,GACD,EAAE,EAAE,CAAC,CAAC;IACd,EAAE;IACF,IAAI;IACJ,MAAM;IACN,MAAM,EAAE,MAAM,IAAI,KAAK;IACvB,SAAS;IACT,SAAS;CACV,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,CAAC,MAA8B,EAAE,EAAE,CACvD,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAC1C,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;IACrB,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CACjB,CACF,CAAA;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,QAAiB,EAAE,EAAE,CAC1E,KAAK,UAAU,WAAW,CAAC,SAAkB;IAC3C,MAAM,GAAG,GAAG,qCAAqC,SAAS,EAAE,CAAA;IAE5D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAkB,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC9D,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;IAChC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACvC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QAEtD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;YAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAC5C,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,aAAa,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;IACjC,CAAC;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,sBAAsB,CAAC;KACnC,QAAQ,CACP,WAAW,EACX,sEAAsE,CACvE;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
@@ -1,39 +0,0 @@
1
- import chalk from 'chalk';
2
- import columnify from 'columnify';
3
- import callApi from '../utils/callApi.js';
4
- import describe from './describe.js';
5
- export const action = (log, apiToken) => async function projectList(accountId) {
6
- const url = accountId
7
- ? `https://api.integreat.io/accounts/${accountId}/projects?pageSize=50`
8
- : 'https://api.integreat.io/projects?pageSize=50';
9
- const response = await callApi(url, apiToken);
10
- if (response.error) {
11
- log(chalk.red(response.error));
12
- return;
13
- }
14
- const projects = response.projects;
15
- if (Array.isArray(projects) && projects.length > 0) {
16
- log(columnify(projects, { columns: ['id', 'name'] }));
17
- const count = response.meta?.totalCount;
18
- if (count) {
19
- log(`\n${count} projects`);
20
- }
21
- }
22
- else {
23
- log(chalk.white('No projects.'));
24
- }
25
- };
26
- export default (program, apiToken) => {
27
- const projects = program
28
- .command('projects')
29
- .description('commands for projects, run `great projects --help` to see options. `great projects` is also a shortcut for `great projects list`')
30
- .argument('[account]', 'id of an account to fetch projects for, or leave it out to fetch all projects')
31
- .action(action(console.log, apiToken));
32
- projects
33
- .command('list')
34
- .description('list all projects you have access to')
35
- .argument('[account]', 'id of an account to fetch projects for, or leave it out to fetch all projects')
36
- .action(action(console.log, apiToken));
37
- describe(projects, apiToken);
38
- };
39
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/projects/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,OAA0B,MAAM,qBAAqB,CAAA;AAC5D,OAAO,QAAQ,MAAM,eAAe,CAAA;AAUpC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,QAAiB,EAAE,EAAE,CAC1E,KAAK,UAAU,WAAW,CAAC,SAAkB;IAC3C,MAAM,GAAG,GAAG,SAAS;QACnB,CAAC,CAAC,qCAAqC,SAAS,uBAAuB;QACvE,CAAC,CAAC,+CAA+C,CAAA;IAEnD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAmB,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC/D,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAA;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAErD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,KAAK,KAAK,WAAW,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IAClC,CAAC;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE;IACrD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CACV,kIAAkI,CACnI;SACA,QAAQ,CACP,WAAW,EACX,+EAA+E,CAChF;SACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAExC,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sCAAsC,CAAC;SACnD,QAAQ,CACP,WAAW,EACX,+EAA+E,CAChF;SACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAExC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAC9B,CAAC,CAAA"}
@@ -1,5 +0,0 @@
1
- export interface Response {
2
- status?: string;
3
- error?: string;
4
- }
5
- export default function callApi<T extends Response>(uri: string, token?: string): Promise<T>;
@@ -1,20 +0,0 @@
1
- import ky from 'ky';
2
- import ora from 'ora';
3
- export default async function callApi(uri, token) {
4
- if (!token) {
5
- return {
6
- status: 'noaccess',
7
- error: 'You are not logged in to Integreat.',
8
- };
9
- }
10
- const spinner = ora().start();
11
- const response = await ky
12
- .get(uri, {
13
- headers: { Authorization: `Bearer ${token}` },
14
- throwHttpErrors: false,
15
- })
16
- .json();
17
- spinner.stop();
18
- return response;
19
- }
20
- //# sourceMappingURL=callApi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"callApi.js","sourceRoot":"","sources":["../../src/utils/callApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,GAAG,MAAM,KAAK,CAAA;AAOrB,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,OAAO,CACnC,GAAW,EACX,KAAc;IAEd,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,qCAAqC;SACxC,CAAA;IACR,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAG,MAAM,EAAE;SACtB,GAAG,CAAC,GAAG,EAAE;QACR,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;QAC7C,eAAe,EAAE,KAAK;KACvB,CAAC;SACD,IAAI,EAAK,CAAA;IACZ,OAAO,CAAC,IAAI,EAAE,CAAA;IACd,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -1 +0,0 @@
1
- export declare function fetchIdFromIndex(): any;
@@ -1,12 +0,0 @@
1
- import fs from 'node:fs';
2
- export function fetchIdFromIndex() {
3
- try {
4
- const content = fs.readFileSync('index.json', 'utf8');
5
- const index = JSON.parse(content);
6
- return index.id;
7
- }
8
- catch {
9
- return undefined;
10
- }
11
- }
12
- //# sourceMappingURL=fetchLocalProject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetchLocalProject.js","sourceRoot":"","sources":["../../src/utils/fetchLocalProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjC,OAAO,KAAK,CAAC,EAAE,CAAA;IACjB,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Definitions } from 'integreat';
2
- export default function saveProject(id: string, defs: Definitions, root?: string): void;
@@ -1,68 +0,0 @@
1
- import fs from 'node:fs';
2
- const normalizeFolderName = (folder) => folder.replace(':', '_');
3
- function createFolderIfMissing(root) {
4
- const rootPath = root ? `${root}/` : '';
5
- return (name) => {
6
- const path = `${rootPath}${name}`;
7
- if (!fs.existsSync(path)) {
8
- fs.mkdirSync(path);
9
- }
10
- };
11
- }
12
- function writeJsonFile(root) {
13
- const rootPath = root ? `${root}/` : '';
14
- return (folder, name, content) => {
15
- const path = folder
16
- ? `${rootPath}${folder}/${name}.json`
17
- : `${rootPath}${name}.json`;
18
- fs.writeFileSync(path, JSON.stringify(content, undefined, 2));
19
- };
20
- }
21
- export default function saveProject(id, defs, root) {
22
- const { identConfig, nonvalues, queueService, flags, schemas, services, mutations, auths, dictionaries, jobs, } = defs;
23
- const rootFolder = root ? normalizeFolderName(root) : undefined;
24
- const createFolder = createFolderIfMissing(rootFolder);
25
- const writeFile = writeJsonFile(rootFolder);
26
- if (rootFolder) {
27
- createFolderIfMissing()(rootFolder);
28
- }
29
- const index = { id, flags, identConfig, nonvalues, queueService };
30
- writeFile(null, 'index', index);
31
- createFolder('schemas');
32
- if (schemas) {
33
- schemas.forEach((schema) => {
34
- writeFile('schemas', schema.id, schema);
35
- });
36
- }
37
- createFolder('services');
38
- if (services) {
39
- services.forEach((service) => {
40
- writeFile('services', service.id, service);
41
- });
42
- }
43
- createFolder('mutations');
44
- if (mutations) {
45
- Object.entries(mutations).forEach(([id, mutation]) => {
46
- writeFile('mutations', id, { id, pipeline: mutation });
47
- });
48
- }
49
- createFolder('auths');
50
- if (auths) {
51
- auths.forEach((auth) => {
52
- writeFile('auths', auth.id, auth);
53
- });
54
- }
55
- createFolder('dictionaries');
56
- if (dictionaries) {
57
- Object.entries(dictionaries).forEach(([id, dictionary]) => {
58
- writeFile('dictionaries', id, dictionary);
59
- });
60
- }
61
- createFolder('jobs');
62
- if (jobs) {
63
- jobs.forEach((job, index) => {
64
- writeFile('jobs', job.id ?? `job${index}`, job);
65
- });
66
- }
67
- }
68
- //# sourceMappingURL=saveProject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"saveProject.js","sourceRoot":"","sources":["../../src/utils/saveProject.ts"],"names":[],"mappings":"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"}
package/eslint.config.js DELETED
@@ -1,27 +0,0 @@
1
- import pluginPromise from 'eslint-plugin-promise'
2
- import pluginSecurity from 'eslint-plugin-security'
3
- import eslintConfigPrettier from 'eslint-config-prettier'
4
-
5
- import eslint from '@eslint/js'
6
- import tseslint from 'typescript-eslint'
7
-
8
- export default tseslint.config(
9
- eslint.configs.recommended,
10
- tseslint.configs.strict,
11
- tseslint.configs.stylistic,
12
- eslintConfigPrettier,
13
- pluginPromise.configs['flat/recommended'],
14
- pluginSecurity.configs.recommended,
15
- {
16
- rules: {
17
- 'no-unused-vars': 0,
18
- '@typescript-eslint/no-unused-vars': [
19
- 'error',
20
- { argsIgnorePattern: '^_', ignoreRestSiblings: true },
21
- ],
22
- },
23
- linterOptions: {
24
- reportUnusedDisableDirectives: 'error',
25
- },
26
- },
27
- )