great 0.0.3 → 0.3.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.
- package/.codeclimate.yml +7 -0
- package/.editorconfig +11 -0
- package/.nvmrc +1 -0
- package/.prettierrc.json +6 -0
- package/README.md +17 -107
- package/dist/accounts/index.d.ts +4 -0
- package/dist/accounts/index.js +28 -0
- package/dist/accounts/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/now/index.d.ts +4 -0
- package/dist/now/index.js +9 -0
- package/dist/now/index.js.map +1 -0
- package/dist/now/index.test.d.ts +1 -0
- package/dist/now/index.test.js +18 -0
- package/dist/now/index.test.js.map +1 -0
- package/dist/projects/describe.d.ts +4 -0
- package/dist/projects/describe.js +44 -0
- package/dist/projects/describe.js.map +1 -0
- package/dist/projects/index.d.ts +4 -0
- package/dist/projects/index.js +39 -0
- package/dist/projects/index.js.map +1 -0
- package/dist/pull/index.d.ts +4 -0
- package/dist/pull/index.js +31 -0
- package/dist/pull/index.js.map +1 -0
- package/dist/run/index.d.ts +4 -0
- package/dist/run/index.js +55 -0
- package/dist/run/index.js.map +1 -0
- package/dist/utils/callApi.d.ts +5 -0
- package/dist/utils/callApi.js +20 -0
- package/dist/utils/callApi.js.map +1 -0
- package/dist/utils/fetchLocalProject.d.ts +1 -0
- package/dist/utils/fetchLocalProject.js +12 -0
- package/dist/utils/fetchLocalProject.js.map +1 -0
- package/dist/utils/saveProject.d.ts +2 -0
- package/dist/utils/saveProject.js +68 -0
- package/dist/utils/saveProject.js.map +1 -0
- package/dist/whoami/index.d.ts +4 -0
- package/dist/whoami/index.js +21 -0
- package/dist/whoami/index.js.map +1 -0
- package/eslint.config.js +27 -0
- package/package.json +46 -11
- package/src/accounts/index.ts +41 -0
- package/src/index.ts +22 -0
- package/src/now/index.test.ts +31 -0
- package/src/now/index.ts +15 -0
- package/src/projects/describe.ts +80 -0
- package/src/projects/index.ts +61 -0
- package/src/pull/index.ts +45 -0
- package/src/run/index.ts +81 -0
- package/src/utils/callApi.ts +29 -0
- package/src/utils/fetchLocalProject.ts +12 -0
- package/src/utils/saveProject.ts +106 -0
- package/src/whoami/index.ts +32 -0
- package/tsconfig.json +28 -0
- package/.npmignore +0 -6
- package/Greatfile.js +0 -30
- package/index.js +0 -150
package/.codeclimate.yml
ADDED
package/.editorconfig
ADDED
package/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
22.14
|
package/.prettierrc.json
ADDED
package/README.md
CHANGED
|
@@ -1,112 +1,22 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Integreat CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A command line interface for Integreat.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Usage
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Install with `npm i @integreat/great --global`
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
:-: | :-: | :-: | :-:
|
|
11
|
-
Orienting | Data | File | File
|
|
12
|
-
Flow | Clear | Clear | Mess
|
|
13
|
-
Easy | Yes | No | No
|
|
9
|
+
## Commands
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
### A task file to load:
|
|
29
|
-
|
|
30
|
-
```js
|
|
31
|
-
module.exports = function() {
|
|
32
|
-
// upward emitting
|
|
33
|
-
this.emit('log', 'example: run');
|
|
34
|
-
|
|
35
|
-
// downward capturing
|
|
36
|
-
this.capture('title', function (title) {
|
|
37
|
-
this.emit('log', 'titled: ' + title);
|
|
38
|
-
this.set('title', title);
|
|
39
|
-
});
|
|
40
|
-
this.capture('end', function () {
|
|
41
|
-
this.emit('log', 'ended: ' + this.get('title'));
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// task loading
|
|
45
|
-
this.add(function () {
|
|
46
|
-
this.emit('title', 'series');
|
|
47
|
-
this.add(createBody('a-1'));
|
|
48
|
-
this.add(createBody('a-2'));
|
|
49
|
-
this.add(createBody('a-3'));
|
|
50
|
-
});
|
|
51
|
-
this.add(function () {
|
|
52
|
-
this.emit('title', 'parallel');
|
|
53
|
-
this.add([
|
|
54
|
-
createAsyncBody('b-1'),
|
|
55
|
-
createAsyncBody('b-2'),
|
|
56
|
-
createAsyncBody('b-3'),
|
|
57
|
-
createAsyncBody('b-4'),
|
|
58
|
-
createAsyncBody('b-5'),
|
|
59
|
-
createAsyncBody('b-6')
|
|
60
|
-
]);
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### `Greatfile.js` for entry:
|
|
66
|
-
|
|
67
|
-
```js
|
|
68
|
-
var great = require('great');
|
|
69
|
-
var args = process.argv.slice(2);
|
|
70
|
-
great(function () {
|
|
71
|
-
// task picking
|
|
72
|
-
if (args[0] === 'example') {
|
|
73
|
-
this.add(require('./example/' + args[1]));
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Run tasks from command line:
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
node Greatfile [arg1] [arg2] ..`
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Or after `alias great='node Greatfile'`:
|
|
85
|
-
|
|
86
|
-
```
|
|
87
|
-
great [arg1] [arg2] ..
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### Also this way on **browser**:
|
|
91
|
-
|
|
92
|
-
```html
|
|
93
|
-
<!-- include great.js -->
|
|
94
|
-
<script src="great.js"></script>
|
|
95
|
-
|
|
96
|
-
<!-- define tasks -->
|
|
97
|
-
<script src="task1.js"></script>
|
|
98
|
-
<script src="task2.js"></script>
|
|
99
|
-
|
|
100
|
-
<!-- configure tasks -->
|
|
101
|
-
<script>
|
|
102
|
-
great(function() {
|
|
103
|
-
this.add(task1);
|
|
104
|
-
this.add(task2);
|
|
105
|
-
});
|
|
106
|
-
</script>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### See for more:
|
|
110
|
-
|
|
111
|
-
- `Greatfile.js`: [Greatfile.js](Greatfile.js)
|
|
112
|
-
- Task files: [example/](example/)
|
|
11
|
+
- `great now` - Prints the current Unix timestamp
|
|
12
|
+
- `great whoami` - Displays your Integreat user
|
|
13
|
+
- `great account list` - Display list of accounts
|
|
14
|
+
- `great projects list` - Display list of projects. Specify an account id as the
|
|
15
|
+
first argument to only fetch for that account.
|
|
16
|
+
- `great projects describe` - Display details for a project. Specify project id
|
|
17
|
+
as the first argument.
|
|
18
|
+
- `great pull` - Pull a project config to local file structure. Specify a projec
|
|
19
|
+
id as the first argument or pull for the project in the current folder
|
|
20
|
+
- `great run` - Run a job for a project. The project id should either be given
|
|
21
|
+
as the first argument or it will be picked from the current folder. You will
|
|
22
|
+
be presented with a list of available jobs to select from.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import columnify from 'columnify';
|
|
3
|
+
import callApi from '../utils/callApi.js';
|
|
4
|
+
export const action = (log, apiToken) => async function accountsList() {
|
|
5
|
+
const response = await callApi('https://api.integreat.io/accounts', apiToken);
|
|
6
|
+
if (response.error) {
|
|
7
|
+
log(chalk.red(response.error));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const accounts = response.accounts;
|
|
11
|
+
if (Array.isArray(accounts) && accounts.length > 0) {
|
|
12
|
+
log(columnify(accounts, { columns: ['id', 'name'] }));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
log(chalk.white('No accounts.'));
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export default (program, apiToken) => {
|
|
19
|
+
const projects = program
|
|
20
|
+
.command('accounts')
|
|
21
|
+
.description('commands for accounts, run `great accounts --help` to see options. `great accounts` is also a shortcut for `great accounts list`')
|
|
22
|
+
.action(action(console.log, apiToken));
|
|
23
|
+
projects
|
|
24
|
+
.command('list')
|
|
25
|
+
.description('list all accounts you have access to')
|
|
26
|
+
.action(action(console.log, apiToken));
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,OAA0B,MAAM,qBAAqB,CAAA;AAO5D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,QAAiB,EAAE,EAAE,CAC1E,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,mCAAmC,EACnC,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,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;IACvD,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,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,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC1C,CAAC,CAAA"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { program } from 'commander';
|
|
3
|
+
import accounts from './accounts/index.js';
|
|
4
|
+
import now from './now/index.js';
|
|
5
|
+
import projects from './projects/index.js';
|
|
6
|
+
import pull from './pull/index.js';
|
|
7
|
+
import run from './run/index.js';
|
|
8
|
+
import whoami from './whoami/index.js';
|
|
9
|
+
const apiToken = process.env.GREAT_TOKEN;
|
|
10
|
+
program.version('0.3.1', '-v, --version').description('Integreat CLI');
|
|
11
|
+
accounts(program, apiToken);
|
|
12
|
+
now(program);
|
|
13
|
+
projects(program, apiToken);
|
|
14
|
+
pull(program, apiToken);
|
|
15
|
+
run(program, apiToken);
|
|
16
|
+
whoami(program, apiToken);
|
|
17
|
+
program.parse(process.argv);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAC1C,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;AAExC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAEtE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC3B,GAAG,CAAC,OAAO,CAAC,CAAA;AACZ,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC3B,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAEzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export const action = (log) => function now() {
|
|
3
|
+
log(chalk.white(Date.now()));
|
|
4
|
+
};
|
|
5
|
+
export default (program) => program
|
|
6
|
+
.command('now')
|
|
7
|
+
.description('display current time as a Unix time stamp (milliseconds since 1970-01-01')
|
|
8
|
+
.action(action(console.log));
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/now/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,EAAE,CACvD,SAAS,GAAG;IACV,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAC9B,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,EAAE,CAClC,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CACV,0EAA0E,CAC3E;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import callApi from '../utils/callApi.js';
|
|
3
|
+
import saveProject from '../utils/saveProject.js';
|
|
4
|
+
import { fetchIdFromIndex } from '../utils/fetchLocalProject.js';
|
|
5
|
+
export const action = (log, apiToken) => async function pullProject(projectId) {
|
|
6
|
+
const id = projectId ?? fetchIdFromIndex();
|
|
7
|
+
if (!id) {
|
|
8
|
+
log(chalk.red('No project argument and no local project'));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const url = `https://api.integreat.io/projects/${id}`;
|
|
12
|
+
const response = await callApi(url, apiToken);
|
|
13
|
+
if (response.error) {
|
|
14
|
+
log(chalk.red(response.error));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const defs = response.project?.definitions;
|
|
18
|
+
if (defs) {
|
|
19
|
+
const root = projectId ? projectId : undefined;
|
|
20
|
+
saveProject(id, defs, root);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
log(chalk.red('Project has no definitions'));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export default (program, apiToken) => program
|
|
27
|
+
.command('pull')
|
|
28
|
+
.description('pull a project config to a folder structure')
|
|
29
|
+
.argument('[project]', 'id of the project to pull, will override any id in the local index file')
|
|
30
|
+
.action(action(console.log, apiToken));
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pull/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,OAA0B,MAAM,qBAAqB,CAAA;AAC5D,OAAO,WAAW,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAQhE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,QAAiB,EAAE,EAAE,CAC1E,KAAK,UAAU,WAAW,CAAC,SAAkB;IAC3C,MAAM,EAAE,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAA;IAC1C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAA;QAC1D,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,qCAAqC,EAAE,EAAE,CAAA;IAErD,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,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC1C,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;QAC9C,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6CAA6C,CAAC;KAC1D,QAAQ,CACP,WAAW,EACX,yEAAyE,CAC1E;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { setTimeout } from 'timers/promises';
|
|
4
|
+
import { select } from '@inquirer/prompts';
|
|
5
|
+
import callApi from '../utils/callApi.js';
|
|
6
|
+
import { fetchIdFromIndex } from '../utils/fetchLocalProject.js';
|
|
7
|
+
export const action = (log, apiToken) => async function projectList(projectId) {
|
|
8
|
+
const id = projectId ?? fetchIdFromIndex();
|
|
9
|
+
if (!id) {
|
|
10
|
+
log(chalk.red('No project id given and none found in local project'));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const url = `https://api.integreat.io/projects/${id}/jobs`;
|
|
14
|
+
const response = await callApi(url, apiToken);
|
|
15
|
+
if (response.error) {
|
|
16
|
+
log(chalk.red(response.error));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const jobs = response.jobs;
|
|
20
|
+
if (Array.isArray(jobs) && jobs.length > 0) {
|
|
21
|
+
const hasWatchJobs = jobs.some((job) => job.watch);
|
|
22
|
+
const listJobs = (hasWatchJobs ? jobs.filter((job) => job.watch) : jobs).sort((a, b) => (a.sort ?? 0) - (b.sort ?? 0));
|
|
23
|
+
let jobId;
|
|
24
|
+
try {
|
|
25
|
+
jobId = await select({
|
|
26
|
+
message: 'Select a job to run',
|
|
27
|
+
choices: listJobs.map((job) => ({
|
|
28
|
+
name: job.name,
|
|
29
|
+
value: job.id,
|
|
30
|
+
description: job.description,
|
|
31
|
+
})),
|
|
32
|
+
pageSize: 20,
|
|
33
|
+
loop: false,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('Job failed', error);
|
|
38
|
+
}
|
|
39
|
+
if (jobId) {
|
|
40
|
+
const spinner = ora().start();
|
|
41
|
+
await setTimeout(1000);
|
|
42
|
+
spinner.stop();
|
|
43
|
+
log('Job would have run if we had implemented the run command ...');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
log(chalk.white('No jobs for this project.'));
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
export default (program, apiToken) => program
|
|
51
|
+
.command('run')
|
|
52
|
+
.description('run a job in the current project or the project with the provided id')
|
|
53
|
+
.argument('[project]', 'id of the project to run jobs for, will override any id in the local index file')
|
|
54
|
+
.action(action(console.log, apiToken));
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,OAA0B,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAgBhE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,QAAiB,EAAE,EAAE,CAC1E,KAAK,UAAU,WAAW,CAAC,SAAkB;IAC3C,MAAM,EAAE,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAA;IAC1C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAA;QACrE,OAAM;IACR,CAAC;IACD,MAAM,GAAG,GAAG,qCAAqC,EAAE,OAAO,CAAA;IAE1D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAe,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3D,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,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,CACf,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CACtD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;QAE/C,IAAI,KAAK,CAAA;QACT,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,MAAM,CAAC;gBACnB,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,KAAK,EAAE,GAAG,CAAC,EAAE;oBACb,WAAW,EAAE,GAAG,CAAC,WAAW;iBAC7B,CAAC,CAAC;gBACH,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,KAAK;aACZ,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;QACpC,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAA;YAC7B,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;YACtB,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,GAAG,CAAC,8DAA8D,CAAC,CAAA;QACrE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CACV,sEAAsE,CACvE;KACA,QAAQ,CACP,WAAW,EACX,iFAAiF,CAClF;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fetchIdFromIndex(): any;
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saveProject.js","sourceRoot":"","sources":["../../src/utils/saveProject.ts"],"names":[],"mappings":"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"}
|