great 1.2.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -50
- package/dist/clone/index.d.ts +2 -2
- package/dist/clone/index.js.map +1 -1
- package/dist/deploy/index.d.ts +2 -2
- package/dist/deploy/index.js.map +1 -1
- package/dist/explode/index.d.ts +2 -2
- package/dist/explode/index.js.map +1 -1
- package/dist/generated/operations.d.ts +30 -8
- package/dist/generated/schema.d.ts +138 -2
- package/dist/generated/schema.js +15 -0
- package/dist/generated/schema.js.map +1 -1
- package/dist/implode/index.d.ts +2 -2
- package/dist/implode/index.js +1 -0
- package/dist/implode/index.js.map +1 -1
- package/dist/implode/transform.d.ts +1 -0
- package/dist/implode/transform.js +16 -2
- package/dist/implode/transform.js.map +1 -1
- package/dist/import/index.d.ts +4 -2
- package/dist/import/index.js +27 -6
- package/dist/import/index.js.map +1 -1
- package/dist/include/index.d.ts +4 -2
- package/dist/include/index.js +129 -11
- package/dist/include/index.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/init/index.d.ts +2 -2
- package/dist/init/index.js +3 -3
- package/dist/init/index.js.map +1 -1
- package/dist/integrations/create.js +1 -1
- package/dist/integrations/create.js.map +1 -1
- package/dist/integrations/index.js +6 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/list.d.ts +2 -0
- package/dist/integrations/list.js +30 -16
- package/dist/integrations/list.js.map +1 -1
- package/dist/migrate/index.d.ts +5 -2
- package/dist/migrate/index.js +102 -4
- package/dist/migrate/index.js.map +1 -1
- package/dist/pull/index.d.ts +2 -2
- package/dist/pull/index.js.map +1 -1
- package/dist/push/index.d.ts +3 -2
- package/dist/push/index.js +168 -73
- package/dist/push/index.js.map +1 -1
- package/dist/remove/index.d.ts +5 -0
- package/dist/remove/index.js +71 -0
- package/dist/remove/index.js.map +1 -0
- package/dist/rename/index.d.ts +2 -2
- package/dist/rename/index.js +54 -23
- package/dist/rename/index.js.map +1 -1
- package/dist/run/index.d.ts +29 -2
- package/dist/run/index.js.map +1 -1
- package/dist/status/index.d.ts +2 -2
- package/dist/status/index.js +1 -1
- package/dist/status/index.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/utils/createIntegrationFromFile.d.ts +2 -2
- package/dist/utils/createIntegrationFromFile.js.map +1 -1
- package/dist/utils/detectPullConflicts.d.ts +2 -2
- package/dist/utils/detectPullConflicts.js +9 -14
- package/dist/utils/detectPullConflicts.js.map +1 -1
- package/dist/utils/elementFiles.d.ts +24 -5
- package/dist/utils/elementFiles.js +147 -8
- package/dist/utils/elementFiles.js.map +1 -1
- package/dist/utils/fetchLocal.d.ts +4 -4
- package/dist/utils/fetchLocal.js.map +1 -1
- package/dist/utils/graphqlError.js +16 -2
- package/dist/utils/graphqlError.js.map +1 -1
- package/dist/utils/greatFile.d.ts +3 -3
- package/dist/utils/greatFile.js.map +1 -1
- package/dist/utils/mergeEndpointLists.d.ts +7 -0
- package/dist/utils/mergeEndpointLists.js +32 -0
- package/dist/utils/mergeEndpointLists.js.map +1 -0
- package/dist/utils/promptForDetach.d.ts +6 -0
- package/dist/utils/promptForDetach.js +15 -0
- package/dist/utils/promptForDetach.js.map +1 -0
- package/dist/utils/promptForEndpoints.d.ts +5 -0
- package/dist/utils/promptForEndpoints.js +37 -0
- package/dist/utils/promptForEndpoints.js.map +1 -0
- package/dist/utils/promptForReplaceLocal.d.ts +5 -0
- package/dist/utils/promptForReplaceLocal.js +18 -0
- package/dist/utils/promptForReplaceLocal.js.map +1 -0
- package/dist/utils/promptForValue.d.ts +1 -0
- package/dist/utils/promptForValue.js +5 -3
- package/dist/utils/promptForValue.js.map +1 -1
- package/dist/utils/resolveAccount.d.ts +2 -2
- package/dist/utils/resolveAccount.js.map +1 -1
- package/dist/utils/resolveElement.d.ts +2 -0
- package/dist/utils/resolveElement.js +8 -0
- package/dist/utils/resolveElement.js.map +1 -1
- package/dist/utils/resolveElementIncludes.d.ts +6 -0
- package/dist/utils/resolveElementIncludes.js +113 -0
- package/dist/utils/resolveElementIncludes.js.map +1 -0
- package/dist/utils/saveIntegration.d.ts +2 -2
- package/dist/utils/saveIntegration.js +54 -30
- package/dist/utils/saveIntegration.js.map +1 -1
- package/dist/utils/serviceFile.d.ts +34 -0
- package/dist/utils/serviceFile.js +95 -0
- package/dist/utils/serviceFile.js.map +1 -0
- package/dist/utils/shadowMarker.d.ts +5 -0
- package/dist/utils/shadowMarker.js +16 -0
- package/dist/utils/shadowMarker.js.map +1 -0
- package/dist/utils/writeShadowElement.d.ts +12 -10
- package/dist/utils/writeShadowElement.js +98 -58
- package/dist/utils/writeShadowElement.js.map +1 -1
- package/dist/values/get.d.ts +2 -2
- package/dist/values/get.js.map +1 -1
- package/dist/values/list.d.ts +2 -2
- package/dist/values/list.js.map +1 -1
- package/dist/values/set.d.ts +2 -2
- package/dist/values/set.js.map +1 -1
- package/dist/values/unset.d.ts +2 -2
- package/dist/values/unset.js.map +1 -1
- package/package.json +16 -17
- package/quality.toml +4 -0
- package/dist/utils/resolveElementInclude.d.ts +0 -3
- package/dist/utils/resolveElementInclude.js +0 -27
- package/dist/utils/resolveElementInclude.js.map +0 -1
package/dist/include/index.js
CHANGED
|
@@ -1,10 +1,127 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
1
2
|
import chalk from 'chalk';
|
|
2
3
|
import { getClient } from '../utils/graphqlClient.js';
|
|
3
4
|
import { fetchIntegrationFromFile } from '../utils/fetchLocal.js';
|
|
4
|
-
import {
|
|
5
|
-
import { readGreatFile, writeGreatFile } from '../utils/greatFile.js';
|
|
6
|
-
import { writeShadowElements, logShadowConflicts, } from '../utils/writeShadowElement.js';
|
|
7
|
-
|
|
5
|
+
import resolveElementIncludes, { resolveEndpointIncludes, } from '../utils/resolveElementIncludes.js';
|
|
6
|
+
import { getElementRecord, readGreatFile, removeElementRecord, setElementRecord, writeGreatFile, } from '../utils/greatFile.js';
|
|
7
|
+
import { findLocalOccupants, isLocalOccupant, writeShadowElements, logShadowConflicts, } from '../utils/writeShadowElement.js';
|
|
8
|
+
import { readEndpointListKeys, writeElementFile, } from '../utils/elementFiles.js';
|
|
9
|
+
import { ENDPOINT_LISTS_FOLDER, isEndpointKeys } from '../utils/serviceFile.js';
|
|
10
|
+
import promptForEndpoints from '../utils/promptForEndpoints.js';
|
|
11
|
+
import promptForReplaceLocal from '../utils/promptForReplaceLocal.js';
|
|
12
|
+
import { ElementType } from '../generated/schema.js';
|
|
13
|
+
async function selectEndpointShadows(graphqlClient, resolved, great, sourceTimestamp, log, promptForEndpointsFn) {
|
|
14
|
+
const list = resolved.find((element) => element.type === ElementType.EndpointList);
|
|
15
|
+
if (!list) {
|
|
16
|
+
return { shadows: resolved };
|
|
17
|
+
}
|
|
18
|
+
const endpoints = await resolveEndpointIncludes(graphqlClient, list, sourceTimestamp, log);
|
|
19
|
+
if (!endpoints) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
else if (endpoints.length === 0) {
|
|
23
|
+
return { shadows: resolved };
|
|
24
|
+
}
|
|
25
|
+
const hasShadowList = Boolean(getElementRecord(great, ENDPOINT_LISTS_FOLDER, list.key)?.source);
|
|
26
|
+
let selected;
|
|
27
|
+
try {
|
|
28
|
+
selected = await promptForEndpointsFn(list.key, endpoints, log, hasShadowList);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
log(chalk.yellow('\nInclude cancelled'));
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
if (selected.length === endpoints.length) {
|
|
35
|
+
return { shadows: [...resolved, ...endpoints] };
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
shadows: [
|
|
39
|
+
...resolved.filter((element) => element !== list),
|
|
40
|
+
...endpoints.filter((endpoint) => selected.includes(endpoint.key)),
|
|
41
|
+
],
|
|
42
|
+
localList: { key: list.key, endpoints: selected, total: endpoints.length },
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function replacementListKeys(selection, key) {
|
|
46
|
+
if (selection.localList?.key === key) {
|
|
47
|
+
return selection.localList.endpoints;
|
|
48
|
+
}
|
|
49
|
+
const list = selection.shadows.find((element) => element.type === ElementType.EndpointList && element.key === key);
|
|
50
|
+
const endpoints = list?.content?.data?.endpoints;
|
|
51
|
+
return isEndpointKeys(endpoints) ? endpoints : [];
|
|
52
|
+
}
|
|
53
|
+
function withDroppedKeys(target, selection, fsImpl) {
|
|
54
|
+
if (target.folder !== ENDPOINT_LISTS_FOLDER) {
|
|
55
|
+
return target;
|
|
56
|
+
}
|
|
57
|
+
const kept = new Set(replacementListKeys(selection, target.key));
|
|
58
|
+
const droppedKeys = readEndpointListKeys(undefined, target.key, fsImpl).filter((key) => !kept.has(key));
|
|
59
|
+
return { ...target, droppedKeys };
|
|
60
|
+
}
|
|
61
|
+
function findReplacedLocals(great, selection, fsImpl) {
|
|
62
|
+
const { localList } = selection;
|
|
63
|
+
const listSlot = localList &&
|
|
64
|
+
isLocalOccupant(great, ENDPOINT_LISTS_FOLDER, localList.key, undefined, fsImpl)
|
|
65
|
+
? [{ folder: ENDPOINT_LISTS_FOLDER, key: localList.key }]
|
|
66
|
+
: [];
|
|
67
|
+
return [
|
|
68
|
+
...findLocalOccupants(great, selection.shadows, undefined, fsImpl),
|
|
69
|
+
...listSlot,
|
|
70
|
+
]
|
|
71
|
+
.map((target) => withDroppedKeys(target, selection, fsImpl))
|
|
72
|
+
.filter((element) => element.droppedKeys?.length !== 0);
|
|
73
|
+
}
|
|
74
|
+
async function confirmReplaceLocals(replaced, log, promptForReplaceLocalFn) {
|
|
75
|
+
if (replaced.length === 0) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
let confirmed = false;
|
|
79
|
+
try {
|
|
80
|
+
confirmed = await promptForReplaceLocalFn(replaced, log);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
}
|
|
84
|
+
if (!confirmed) {
|
|
85
|
+
log(chalk.yellow('\nInclude cancelled'));
|
|
86
|
+
}
|
|
87
|
+
return confirmed;
|
|
88
|
+
}
|
|
89
|
+
function writeLocalEndpointList(great, localList, fsImpl) {
|
|
90
|
+
const existing = getElementRecord(great, ENDPOINT_LISTS_FOLDER, localList.key);
|
|
91
|
+
const record = {
|
|
92
|
+
...(existing?.id ? { id: existing.id } : {}),
|
|
93
|
+
...(existing?.timestamp ? { timestamp: existing.timestamp } : {}),
|
|
94
|
+
};
|
|
95
|
+
if (Object.keys(record).length > 0) {
|
|
96
|
+
setElementRecord(great, ENDPOINT_LISTS_FOLDER, localList.key, record);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
removeElementRecord(great, ENDPOINT_LISTS_FOLDER, localList.key);
|
|
100
|
+
}
|
|
101
|
+
writeElementFile(undefined, ENDPOINT_LISTS_FOLDER, localList.key, { endpoints: localList.endpoints }, great, fsImpl);
|
|
102
|
+
}
|
|
103
|
+
function writeSelection(great, selection, fsImpl, log) {
|
|
104
|
+
const result = writeShadowElements(great, selection.shadows, {
|
|
105
|
+
mode: 'include',
|
|
106
|
+
fsImpl,
|
|
107
|
+
});
|
|
108
|
+
if (result.conflicts.length > 0) {
|
|
109
|
+
logShadowConflicts('Include', result.conflicts, log);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (selection.localList) {
|
|
113
|
+
writeLocalEndpointList(great, selection.localList, fsImpl);
|
|
114
|
+
}
|
|
115
|
+
writeGreatFile(great, undefined, fsImpl);
|
|
116
|
+
for (const written of result.written) {
|
|
117
|
+
log(chalk.green(`Included ${written.folder}/${written.key} as a shadow element`));
|
|
118
|
+
}
|
|
119
|
+
if (selection.localList) {
|
|
120
|
+
const { key, endpoints, total } = selection.localList;
|
|
121
|
+
log(chalk.green(`Kept ${ENDPOINT_LISTS_FOLDER}/${key} as a local endpoint list with ${endpoints.length} of ${total} endpoints`));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export const action = (log, apiToken, client, fsImpl, config, promptForEndpointsFn = promptForEndpoints, promptForReplaceLocalFn = promptForReplaceLocal) => async function includeElement(elementId, options) {
|
|
8
125
|
if (!elementId) {
|
|
9
126
|
log(chalk.red('Element id is required'));
|
|
10
127
|
log(`Usage: ${chalk.bold('great include <element-id>')}`);
|
|
@@ -16,19 +133,20 @@ export const action = (log, apiToken, client, fsImpl, config) => async function
|
|
|
16
133
|
return;
|
|
17
134
|
}
|
|
18
135
|
const graphqlClient = getClient(apiToken, client, config);
|
|
19
|
-
const resolved = await
|
|
136
|
+
const resolved = await resolveElementIncludes(graphqlClient, elementId, options?.pinnedAt, log);
|
|
20
137
|
if (!resolved) {
|
|
21
138
|
return;
|
|
22
139
|
}
|
|
23
140
|
const great = readGreatFile(undefined, fsImpl);
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
26
|
-
logShadowConflicts('Include', result.conflicts, log);
|
|
141
|
+
const selection = await selectEndpointShadows(graphqlClient, resolved, great, options?.pinnedAt, log, promptForEndpointsFn);
|
|
142
|
+
if (!selection) {
|
|
27
143
|
return;
|
|
28
144
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
145
|
+
const replaced = findReplacedLocals(great, selection, fsImpl ?? fs);
|
|
146
|
+
if (!(await confirmReplaceLocals(replaced, log, promptForReplaceLocalFn))) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
writeSelection(great, selection, fsImpl, log);
|
|
32
150
|
};
|
|
33
151
|
export default (program, apiToken) => program
|
|
34
152
|
.command('include <element>')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/include/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/include/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ import now from './now/index.js';
|
|
|
18
18
|
import integrations from './integrations/index.js';
|
|
19
19
|
import pull from './pull/index.js';
|
|
20
20
|
import push from './push/index.js';
|
|
21
|
+
import remove from './remove/index.js';
|
|
21
22
|
import rename from './rename/index.js';
|
|
22
23
|
import repl from './repl/index.js';
|
|
23
24
|
import run from './run/index.js';
|
|
@@ -26,7 +27,7 @@ import value from './values/index.js';
|
|
|
26
27
|
import whoami from './whoami/index.js';
|
|
27
28
|
import { getStoredToken } from './utils/token.js';
|
|
28
29
|
const apiToken = getStoredToken();
|
|
29
|
-
program.version('1.
|
|
30
|
+
program.version('1.4.0', '-v, --version').description('Integreat CLI');
|
|
30
31
|
program.enablePositionalOptions();
|
|
31
32
|
accounts(program, apiToken);
|
|
32
33
|
clone(program, apiToken);
|
|
@@ -46,6 +47,7 @@ now(program);
|
|
|
46
47
|
integrations(program, apiToken);
|
|
47
48
|
pull(program, apiToken);
|
|
48
49
|
push(program, apiToken);
|
|
50
|
+
remove(program);
|
|
49
51
|
rename(program, apiToken);
|
|
50
52
|
repl(program, apiToken);
|
|
51
53
|
run(program, apiToken);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,MAAM,kBAAkB,CAAA;AACpC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,cAAc,MAAM,mBAAmB,CAAA;AAC9C,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,KAAK,MAAM,kBAAkB,CAAA;AACpC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,YAAY,MAAM,yBAAyB,CAAA;AAClD,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,KAAK,MAAM,mBAAmB,CAAA;AACrC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;AAEjC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAOtE,OAAO,CAAC,uBAAuB,EAAE,CAAA;AAEjC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC3B,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACxB,MAAM,CAAC,OAAO,CAAC,CAAA;AACf,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,GAAG,CAAC,OAAO,CAAC,CAAA;AACZ,OAAO,CAAC,OAAO,CAAC,CAAA;AAChB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC1B,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACjC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC1B,IAAI,CAAC,OAAO,CAAC,CAAA;AACb,KAAK,CAAC,OAAO,CAAC,CAAA;AACd,MAAM,CAAC,OAAO,CAAC,CAAA;AACf,OAAO,CAAC,OAAO,CAAC,CAAA;AAChB,GAAG,CAAC,OAAO,CAAC,CAAA;AACZ,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC/B,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACxB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAEzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/init/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
1
|
import type { Command } from 'commander';
|
|
3
|
-
|
|
2
|
+
import type { GreatFs } from '../types.js';
|
|
3
|
+
export declare const action: (log: (message: string) => void, fsImpl?: GreatFs) => (name?: string) => Promise<void>;
|
|
4
4
|
declare const _default: (program: Command) => Command;
|
|
5
5
|
export default _default;
|
package/dist/init/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { currentIntegrationKey } from '../utils/fetchLocal.js';
|
|
|
6
6
|
export const action = (log, fsImpl = fs) => async function init(name) {
|
|
7
7
|
if (fsImpl.existsSync('integration.json')) {
|
|
8
8
|
log(chalk.red('integration.json already exists in this directory'));
|
|
9
|
-
log(`Run ${chalk.bold('great pull')} to update from
|
|
9
|
+
log(`Run ${chalk.bold('great pull')} to update from Integreat`);
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
12
|
const key = currentIntegrationKey();
|
|
@@ -29,10 +29,10 @@ export const action = (log, fsImpl = fs) => async function init(name) {
|
|
|
29
29
|
log('');
|
|
30
30
|
log('Next steps:');
|
|
31
31
|
log(` 1. Create schemas, services, and other elements in their folders`);
|
|
32
|
-
log(` 2. Run ${chalk.bold('great push')} to sync local files to
|
|
32
|
+
log(` 2. Run ${chalk.bold('great push')} to sync local files to Integreat`);
|
|
33
33
|
};
|
|
34
34
|
export default (program) => program
|
|
35
35
|
.command('init [name]')
|
|
36
|
-
.description('Initialize a new integration workspace (local only,
|
|
36
|
+
.description('Initialize a new integration workspace (local only, nothing is created in Integreat)')
|
|
37
37
|
.action(action(console.log));
|
|
38
38
|
//# sourceMappingURL=index.js.map
|
package/dist/init/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAG9D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,SAAkB,EAAE,EAAE,EAAE,CAC7E,KAAK,UAAU,IAAI,CAAC,IAAa;IAE/B,IAAI,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAA;QACnE,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IAGD,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAA;IACnC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAChE,IAAI,IAAI,GAAG,CACZ,CAAA;IAGD,IAAI,IAAI,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAC/B,GAAG,CACD,KAAK,CAAC,MAAM,CACV,iDAAiD,GAAG,yCAAyC,CAC9F,CACF,CAAA;IACH,CAAC;IAGD,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,WAAW;KAClB,CAAA;IAED,MAAM,CAAC,aAAa,CAClB,kBAAkB,EAClB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CACzC,CAAA;IAGD,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAA;IACvD,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACzC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAA;IACpB,GAAG,CAAC,EAAE,CAAC,CAAA;IACP,GAAG,CAAC,aAAa,CAAC,CAAA;IAClB,GAAG,CAAC,oEAAoE,CAAC,CAAA;IACzE,GAAG,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,mCAAmC,CAAC,CAAA;AAC9E,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,EAAE,CAClC,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CACV,sFAAsF,CACvF;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA"}
|
|
@@ -57,7 +57,7 @@ export default function createIntegration(log, apiToken, client, config) {
|
|
|
57
57
|
log(chalk.red('Failed to create integration'));
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
log(chalk.green('✓ Integration created
|
|
60
|
+
log(chalk.green('✓ Integration created in Integreat'));
|
|
61
61
|
log(` Name: ${chalk.cyan(integration.name)}`);
|
|
62
62
|
log(` ID: ${integration.id}`);
|
|
63
63
|
log(` Key: ${integration.key}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/integrations/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAA6B,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAI7D,MAAM,iCAAiC,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;CAwB5C,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAA2B;IAE3B,OAAO,KAAK,UAAU,WAAW,CAC/B,eAAwB,EACxB,OAA8B;QAG9B,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAC9C,GAAG,CACD,UAAU,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,EAAE,CACvE,CAAA;YACD,OAAM;QACR,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAA;QAG1D,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACzD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,gBAAgB,CACjD,OAAO,IAAI,EAAE,EACb,QAAQ,IAAI,EAAE,EACd,aAAa,EACb,MAAM,CACP,CAAA;QACD,IAAI,KAAK,EAAE,CAAC;YACV,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QAGD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CACD,KAAK,CAAC,GAAG,CACP,qHAAqH,CACtH,CACF,CAAA;YACD,OAAM;QACR,CAAC;QAGD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,iCAAiC,EACjC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CACzB,CAAA;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAA;QAClD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAC9C,OAAM;QACR,CAAC;QAGD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/integrations/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAA6B,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAI7D,MAAM,iCAAiC,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;CAwB5C,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAA2B;IAE3B,OAAO,KAAK,UAAU,WAAW,CAC/B,eAAwB,EACxB,OAA8B;QAG9B,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAC9C,GAAG,CACD,UAAU,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,EAAE,CACvE,CAAA;YACD,OAAM;QACR,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAA;QAG1D,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACzD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,gBAAgB,CACjD,OAAO,IAAI,EAAE,EACb,QAAQ,IAAI,EAAE,EACd,aAAa,EACb,MAAM,CACP,CAAA;QACD,IAAI,KAAK,EAAE,CAAC;YACV,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QAGD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CACD,KAAK,CAAC,GAAG,CACP,qHAAqH,CACtH,CACF,CAAA;YACD,OAAM;QACR,CAAC;QAGD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,iCAAiC,EACjC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CACzB,CAAA;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAA;QAClD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAC9C,OAAM;QACR,CAAC;QAGD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAA;QACtD,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC9C,GAAG,CAAC,SAAS,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;QAC9B,GAAG,CAAC,UAAU,WAAW,CAAC,GAAG,EAAE,CAAC,CAAA;QAChC,GAAG,CAAC,EAAE,CAAC,CAAA;QACP,GAAG,CAAC,qCAAqC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACxE,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1,21 +1,26 @@
|
|
|
1
|
+
import { Option } from 'commander';
|
|
2
|
+
import { IntegrationType } from '../generated/schema.js';
|
|
1
3
|
import listIntegrationsAction from './list.js';
|
|
2
4
|
import createIntegrationAction from './create.js';
|
|
5
|
+
const typeOption = () => new Option('-t, --type <type>', 'only list integrations of this type').choices(Object.values(IntegrationType));
|
|
3
6
|
export default (program, apiToken) => {
|
|
4
7
|
const integrations = program
|
|
5
8
|
.command('integrations')
|
|
6
9
|
.description('commands for integrations, run `great integrations --help` to see options. `great integrations` is also a shortcut for `great integrations list`')
|
|
7
10
|
.option('-a, --account <id>', 'account id or key (uses default from config if not provided)')
|
|
8
11
|
.option('--all', 'list all integrations, ignoring default account')
|
|
12
|
+
.addOption(typeOption())
|
|
9
13
|
.action(listIntegrationsAction(console.log, apiToken));
|
|
10
14
|
integrations
|
|
11
15
|
.command('list')
|
|
12
16
|
.description('list all integrations you have access to')
|
|
13
17
|
.option('-a, --account <id>', 'account id or key (uses default from config if not provided)')
|
|
14
18
|
.option('--all', 'list all integrations, ignoring default account')
|
|
19
|
+
.addOption(typeOption())
|
|
15
20
|
.action(listIntegrationsAction(console.log, apiToken));
|
|
16
21
|
integrations
|
|
17
22
|
.command('create <name>')
|
|
18
|
-
.description('create a new integration
|
|
23
|
+
.description('create a new integration in Integreat')
|
|
19
24
|
.option('-a, --account <id>', 'account id or key (required, or set default with: great config set account)')
|
|
20
25
|
.action(createIntegrationAction(console.log, apiToken));
|
|
21
26
|
return integrations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,sBAAsB,MAAM,WAAW,CAAA;AAC9C,OAAO,uBAAuB,MAAM,aAAa,CAAA;AAGjD,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,IAAI,MAAM,CACR,mBAAmB,EACnB,qCAAqC,CACtC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAA;AAE3C,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE;IACrD,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CACV,kJAAkJ,CACnJ;SACA,MAAM,CACL,oBAAoB,EACpB,8DAA8D,CAC/D;SACA,MAAM,CAAC,OAAO,EAAE,iDAAiD,CAAC;SAClE,SAAS,CAAC,UAAU,EAAE,CAAC;SACvB,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAExD,YAAY;SACT,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CACL,oBAAoB,EACpB,8DAA8D,CAC/D;SACA,MAAM,CAAC,OAAO,EAAE,iDAAiD,CAAC;SAClE,SAAS,CAAC,UAAU,EAAE,CAAC;SACvB,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAExD,YAAY;SACT,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CACL,oBAAoB,EACpB,6EAA6E,CAC9E;SACA,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEzD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import Conf from 'conf';
|
|
2
2
|
import { type GraphQLRequestClient } from '../utils/graphqlClient.js';
|
|
3
|
+
import type { IntegrationType } from '../generated/schema.js';
|
|
3
4
|
import type { ConfigSchema } from '../utils/config.js';
|
|
4
5
|
export default function listIntegrations(log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>): (options?: {
|
|
5
6
|
account?: string;
|
|
6
7
|
all?: boolean;
|
|
8
|
+
type?: IntegrationType;
|
|
7
9
|
}) => Promise<void>;
|
|
@@ -5,59 +5,73 @@ import { handleGraphQLError } from '../utils/graphqlError.js';
|
|
|
5
5
|
import { gql } from 'graphql-tag';
|
|
6
6
|
import { resolveAccountId } from '../utils/resolveAccount.js';
|
|
7
7
|
const IntegrationsQueryDocument = gql `
|
|
8
|
-
query Integrations {
|
|
9
|
-
integrations(orderBy: name, direction: asc) {
|
|
8
|
+
query Integrations($type: IntegrationType) {
|
|
9
|
+
integrations(orderBy: name, direction: asc, type: $type) {
|
|
10
10
|
totalCount
|
|
11
11
|
nodes {
|
|
12
12
|
id
|
|
13
13
|
name
|
|
14
14
|
key
|
|
15
|
+
type
|
|
16
|
+
account {
|
|
17
|
+
key
|
|
18
|
+
}
|
|
15
19
|
}
|
|
16
20
|
}
|
|
17
21
|
}
|
|
18
22
|
`;
|
|
19
23
|
const IntegrationsForAccountQueryDocument = gql `
|
|
20
|
-
query IntegrationsForAccount($accountId: ID
|
|
24
|
+
query IntegrationsForAccount($accountId: ID!, $type: IntegrationType) {
|
|
21
25
|
account(id: $accountId) {
|
|
22
26
|
name
|
|
23
|
-
|
|
27
|
+
key
|
|
28
|
+
integrations(type: $type) {
|
|
24
29
|
totalCount
|
|
25
30
|
nodes {
|
|
26
31
|
id
|
|
27
32
|
name
|
|
28
33
|
key
|
|
34
|
+
type
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
37
|
}
|
|
32
38
|
}
|
|
33
39
|
`;
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
const typeVariables = (type) => (type ? { type } : {});
|
|
41
|
+
async function fetchAllIntegrations(client, log, type) {
|
|
42
|
+
const result = await client.request(IntegrationsQueryDocument, typeVariables(type));
|
|
36
43
|
if (result.error) {
|
|
37
44
|
handleGraphQLError(result.error, log);
|
|
38
45
|
return undefined;
|
|
39
46
|
}
|
|
40
47
|
return {
|
|
41
|
-
integrations: result.data?.integrations?.nodes ?? [],
|
|
48
|
+
integrations: (result.data?.integrations?.nodes ?? []).map(({ account, ...integration }) => ({
|
|
49
|
+
...integration,
|
|
50
|
+
account: account.key,
|
|
51
|
+
})),
|
|
42
52
|
count: result.data?.integrations?.totalCount ?? 0,
|
|
43
53
|
};
|
|
44
54
|
}
|
|
45
|
-
async function fetchAccountIntegrations(client, accountId, log) {
|
|
46
|
-
const result = await client.request(IntegrationsForAccountQueryDocument, { accountId });
|
|
55
|
+
async function fetchAccountIntegrations(client, accountId, log, type) {
|
|
56
|
+
const result = await client.request(IntegrationsForAccountQueryDocument, { accountId, ...typeVariables(type) });
|
|
47
57
|
if (result.error) {
|
|
48
58
|
handleGraphQLError(result.error, log);
|
|
49
59
|
return undefined;
|
|
50
60
|
}
|
|
61
|
+
const account = result.data?.account;
|
|
51
62
|
return {
|
|
52
|
-
integrations:
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
integrations: (account?.integrations.nodes ?? []).map((integration) => ({
|
|
64
|
+
...integration,
|
|
65
|
+
account: account?.key ?? '',
|
|
66
|
+
})),
|
|
67
|
+
count: account?.integrations.totalCount ?? 0,
|
|
68
|
+
accountName: account?.name ?? undefined,
|
|
55
69
|
};
|
|
56
70
|
}
|
|
57
71
|
function displayIntegrations({ integrations, count, accountName }, log) {
|
|
58
72
|
if (integrations.length > 0) {
|
|
59
73
|
log(columnify(integrations, {
|
|
60
|
-
columns: ['name', 'key', 'id'],
|
|
74
|
+
columns: ['name', 'key', 'type', 'account', 'id'],
|
|
61
75
|
columnSplitter: ' ',
|
|
62
76
|
config: {
|
|
63
77
|
name: {
|
|
@@ -81,7 +95,7 @@ export default function listIntegrations(log, apiToken, client, config) {
|
|
|
81
95
|
const graphqlClient = getClient(apiToken, client, config);
|
|
82
96
|
let result;
|
|
83
97
|
if (options?.all) {
|
|
84
|
-
result = await fetchAllIntegrations(graphqlClient, log);
|
|
98
|
+
result = await fetchAllIntegrations(graphqlClient, log, options.type);
|
|
85
99
|
}
|
|
86
100
|
else {
|
|
87
101
|
const { accountId, error } = await resolveAccountId(options ?? {}, apiToken ?? '', graphqlClient, config);
|
|
@@ -90,8 +104,8 @@ export default function listIntegrations(log, apiToken, client, config) {
|
|
|
90
104
|
return;
|
|
91
105
|
}
|
|
92
106
|
result = accountId
|
|
93
|
-
? await fetchAccountIntegrations(graphqlClient, accountId, log)
|
|
94
|
-
: await fetchAllIntegrations(graphqlClient, log);
|
|
107
|
+
? await fetchAccountIntegrations(graphqlClient, accountId, log, options?.type)
|
|
108
|
+
: await fetchAllIntegrations(graphqlClient, log, options?.type);
|
|
95
109
|
}
|
|
96
110
|
if (result) {
|
|
97
111
|
displayIntegrations(result, log);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/integrations/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,SAAS,EAA6B,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/integrations/list.ts"],"names":[],"mappings":"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"}
|
package/dist/migrate/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
1
|
import type { Command } from 'commander';
|
|
3
|
-
|
|
2
|
+
import type { GreatFs } from '../types.js';
|
|
3
|
+
export interface MigrateOptions {
|
|
4
|
+
prefix?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const action: (log: (message: string) => void, fsImpl?: GreatFs) => (options?: MigrateOptions) => Promise<void>;
|
|
4
7
|
declare const _default: (program: Command) => Command;
|
|
5
8
|
export default _default;
|
package/dist/migrate/index.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
+
import { camelCase } from 'change-case';
|
|
4
5
|
import parseJson from '../utils/parseJson.js';
|
|
5
6
|
import hashContent from '../utils/hashContent.js';
|
|
6
7
|
import { currentIntegrationKey } from '../utils/fetchLocal.js';
|
|
7
|
-
import { ELEMENT_FOLDERS, elementKeyFromFileName, } from '../utils/elementFiles.js';
|
|
8
|
+
import { ELEMENT_FOLDERS, elementKeyFromFileName, readElementFolder, } from '../utils/elementFiles.js';
|
|
9
|
+
import { ENDPOINTS_FOLDER, SERVICES_FOLDER, classifyEndpoints, mergeServiceFile, } from '../utils/serviceFile.js';
|
|
10
|
+
import { SHADOW_MARKER, isShadowMarker } from '../utils/shadowMarker.js';
|
|
8
11
|
import { readGreatFile, writeGreatFile, getElementRecord, setElementRecord, } from '../utils/greatFile.js';
|
|
12
|
+
const MAX_KEY_LENGTH = 50;
|
|
9
13
|
const hasMetaProps = (data) => '__id' in data || '__key' in data || '__timestamp' in data;
|
|
10
14
|
function migrateIntegrationFile(great, log, fsImpl) {
|
|
11
15
|
const filePath = 'integration.json';
|
|
@@ -77,7 +81,95 @@ function migrateElementFiles(great, fsImpl) {
|
|
|
77
81
|
}
|
|
78
82
|
return count;
|
|
79
83
|
}
|
|
80
|
-
|
|
84
|
+
function collectEndpointKeys(services, great, fsImpl) {
|
|
85
|
+
const keys = new Set();
|
|
86
|
+
for (const { key } of readElementFolder(ENDPOINTS_FOLDER, undefined, fsImpl)) {
|
|
87
|
+
keys.add(key);
|
|
88
|
+
}
|
|
89
|
+
for (const recordKey of Object.keys(great.elements)) {
|
|
90
|
+
if (recordKey.startsWith(`${ENDPOINTS_FOLDER}/`)) {
|
|
91
|
+
keys.add(recordKey.slice(ENDPOINTS_FOLDER.length + 1));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
for (const { data } of services) {
|
|
95
|
+
if (Array.isArray(data.endpoints)) {
|
|
96
|
+
for (const entry of data.endpoints) {
|
|
97
|
+
if (typeof entry === 'string') {
|
|
98
|
+
keys.add(entry);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return keys;
|
|
104
|
+
}
|
|
105
|
+
function endpointKeyFor(serviceKey, endpoint, index, prefix) {
|
|
106
|
+
const base = typeof endpoint.id === 'string' && endpoint.id
|
|
107
|
+
? endpoint.id
|
|
108
|
+
: `endpoint${index + 1}`;
|
|
109
|
+
const key = prefix
|
|
110
|
+
? `${camelCase(serviceKey)}-${camelCase(base)}`
|
|
111
|
+
: camelCase(base);
|
|
112
|
+
return key.slice(0, MAX_KEY_LENGTH);
|
|
113
|
+
}
|
|
114
|
+
function uniqueKey(key, existing) {
|
|
115
|
+
if (!existing.has(key)) {
|
|
116
|
+
return key;
|
|
117
|
+
}
|
|
118
|
+
for (let n = 2;; n++) {
|
|
119
|
+
const suffix = String(n);
|
|
120
|
+
const candidate = `${key.slice(0, MAX_KEY_LENGTH - suffix.length)}${suffix}`;
|
|
121
|
+
if (!existing.has(candidate)) {
|
|
122
|
+
return candidate;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
127
|
+
function extractEndpoints(serviceKey, endpoints, existingKeys, prefix, fsImpl) {
|
|
128
|
+
const keys = [];
|
|
129
|
+
let extracted = 0;
|
|
130
|
+
endpoints.forEach((entry, index) => {
|
|
131
|
+
if (typeof entry === 'string') {
|
|
132
|
+
keys.push(entry);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!isObject(entry)) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const key = uniqueKey(endpointKeyFor(serviceKey, entry, index, prefix), existingKeys);
|
|
139
|
+
existingKeys.add(key);
|
|
140
|
+
const { id: _id, ...content } = entry;
|
|
141
|
+
fsImpl.writeFileSync(path.join(ENDPOINTS_FOLDER, `${key}.json`), JSON.stringify(content, undefined, 2));
|
|
142
|
+
keys.push(key);
|
|
143
|
+
extracted++;
|
|
144
|
+
});
|
|
145
|
+
return { keys, extracted };
|
|
146
|
+
}
|
|
147
|
+
function migrateInlineEndpoints(great, options, log, fsImpl) {
|
|
148
|
+
const services = readElementFolder(SERVICES_FOLDER, undefined, fsImpl);
|
|
149
|
+
const existingKeys = collectEndpointKeys(services, great, fsImpl);
|
|
150
|
+
const prefix = options.prefix !== false;
|
|
151
|
+
let count = 0;
|
|
152
|
+
for (const { key, filePath, data } of services) {
|
|
153
|
+
const kind = classifyEndpoints(data.endpoints);
|
|
154
|
+
if (kind !== 'inline' && kind !== 'mixed') {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (getElementRecord(great, SERVICES_FOLDER, key)?.source) {
|
|
158
|
+
log(chalk.yellow(`Skipping ${filePath}: it is a shadow element, so its inline endpoints belong to the source`));
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (!fsImpl.existsSync(ENDPOINTS_FOLDER)) {
|
|
162
|
+
fsImpl.mkdirSync(ENDPOINTS_FOLDER, { recursive: true });
|
|
163
|
+
}
|
|
164
|
+
const { keys, extracted } = extractEndpoints(key, data.endpoints, existingKeys, prefix, fsImpl);
|
|
165
|
+
const { [SHADOW_MARKER]: marker, endpoints: _endpoints, ...service } = data;
|
|
166
|
+
fsImpl.writeFileSync(filePath, JSON.stringify(mergeServiceFile({ service, list: { endpoints: keys } }, isShadowMarker(marker) ? marker : undefined), undefined, 2));
|
|
167
|
+
log(` ${filePath}: ${extracted} endpoint(s) extracted`);
|
|
168
|
+
count += extracted;
|
|
169
|
+
}
|
|
170
|
+
return count;
|
|
171
|
+
}
|
|
172
|
+
export const action = (log, fsImpl = fs) => async function migrate(options = {}) {
|
|
81
173
|
if (!fsImpl.existsSync('integration.json')) {
|
|
82
174
|
log(chalk.red('No integration.json found in this directory'));
|
|
83
175
|
return;
|
|
@@ -85,10 +177,15 @@ export const action = (log, fsImpl = fs) => async function migrate() {
|
|
|
85
177
|
const great = readGreatFile(undefined, fsImpl);
|
|
86
178
|
const integrationMigrated = migrateIntegrationFile(great, log, fsImpl);
|
|
87
179
|
const elementCount = migrateElementFiles(great, fsImpl);
|
|
180
|
+
const endpointCount = migrateInlineEndpoints(great, options, log, fsImpl);
|
|
88
181
|
writeGreatFile(great, undefined, fsImpl);
|
|
89
|
-
if (integrationMigrated || elementCount > 0) {
|
|
182
|
+
if (integrationMigrated || elementCount > 0 || endpointCount > 0) {
|
|
90
183
|
log(chalk.green('✓ Migrated to .great.json'));
|
|
91
184
|
log(` Elements migrated: ${elementCount}`);
|
|
185
|
+
log(` Endpoints extracted: ${endpointCount}`);
|
|
186
|
+
if (endpointCount > 0) {
|
|
187
|
+
log(`Run ${chalk.bold('great push')} to create the endpoints in Integreat`);
|
|
188
|
+
}
|
|
92
189
|
}
|
|
93
190
|
else {
|
|
94
191
|
log(chalk.green('Already migrated — nothing to do'));
|
|
@@ -96,6 +193,7 @@ export const action = (log, fsImpl = fs) => async function migrate() {
|
|
|
96
193
|
};
|
|
97
194
|
export default (program) => program
|
|
98
195
|
.command('migrate')
|
|
99
|
-
.description('Migrate
|
|
196
|
+
.description('Migrate the workspace to the newest layout: sync bookkeeping in .great.json and endpoints as separate elements')
|
|
197
|
+
.option('--no-prefix', 'do not prefix extracted endpoint keys with the service key')
|
|
100
198
|
.action(action(console.log));
|
|
101
199
|
//# sourceMappingURL=index.js.map
|