great 0.0.4 → 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.
Files changed (59) hide show
  1. package/.codeclimate.yml +7 -0
  2. package/.editorconfig +11 -0
  3. package/.nvmrc +1 -0
  4. package/.prettierrc.json +6 -0
  5. package/README.md +17 -107
  6. package/dist/accounts/index.d.ts +4 -0
  7. package/dist/accounts/index.js +28 -0
  8. package/dist/accounts/index.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.js +18 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/now/index.d.ts +4 -0
  13. package/dist/now/index.js +9 -0
  14. package/dist/now/index.js.map +1 -0
  15. package/dist/now/index.test.d.ts +1 -0
  16. package/dist/now/index.test.js +18 -0
  17. package/dist/now/index.test.js.map +1 -0
  18. package/dist/projects/describe.d.ts +4 -0
  19. package/dist/projects/describe.js +44 -0
  20. package/dist/projects/describe.js.map +1 -0
  21. package/dist/projects/index.d.ts +4 -0
  22. package/dist/projects/index.js +39 -0
  23. package/dist/projects/index.js.map +1 -0
  24. package/dist/pull/index.d.ts +4 -0
  25. package/dist/pull/index.js +31 -0
  26. package/dist/pull/index.js.map +1 -0
  27. package/dist/run/index.d.ts +4 -0
  28. package/dist/run/index.js +55 -0
  29. package/dist/run/index.js.map +1 -0
  30. package/dist/utils/callApi.d.ts +5 -0
  31. package/dist/utils/callApi.js +20 -0
  32. package/dist/utils/callApi.js.map +1 -0
  33. package/dist/utils/fetchLocalProject.d.ts +1 -0
  34. package/dist/utils/fetchLocalProject.js +12 -0
  35. package/dist/utils/fetchLocalProject.js.map +1 -0
  36. package/dist/utils/saveProject.d.ts +2 -0
  37. package/dist/utils/saveProject.js +68 -0
  38. package/dist/utils/saveProject.js.map +1 -0
  39. package/dist/whoami/index.d.ts +4 -0
  40. package/dist/whoami/index.js +21 -0
  41. package/dist/whoami/index.js.map +1 -0
  42. package/eslint.config.js +27 -0
  43. package/package.json +46 -11
  44. package/src/accounts/index.ts +41 -0
  45. package/src/index.ts +22 -0
  46. package/src/now/index.test.ts +31 -0
  47. package/src/now/index.ts +15 -0
  48. package/src/projects/describe.ts +80 -0
  49. package/src/projects/index.ts +61 -0
  50. package/src/pull/index.ts +45 -0
  51. package/src/run/index.ts +81 -0
  52. package/src/utils/callApi.ts +29 -0
  53. package/src/utils/fetchLocalProject.ts +12 -0
  54. package/src/utils/saveProject.ts +106 -0
  55. package/src/whoami/index.ts +32 -0
  56. package/tsconfig.json +28 -0
  57. package/.npmignore +0 -6
  58. package/Greatfile.js +0 -30
  59. package/index.js +0 -166
@@ -0,0 +1,7 @@
1
+ version: '2'
2
+ exclude_patterns:
3
+ - '**/*-test.ts'
4
+ - 'tests/'
5
+ - 'node_modules/'
6
+ - 'coverage/'
7
+ - 'dist/'
package/.editorconfig ADDED
@@ -0,0 +1,11 @@
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 ADDED
@@ -0,0 +1 @@
1
+ 22.14
@@ -0,0 +1,6 @@
1
+ {
2
+ "semi": false,
3
+ "singleQuote": true,
4
+ "jsxSingleQuote": true,
5
+ "editorconfig": true
6
+ }
package/README.md CHANGED
@@ -1,112 +1,22 @@
1
- # great
1
+ # Integreat CLI
2
2
 
3
- Another task runner with js
3
+ A command line interface for Integreat.
4
4
 
5
- ## great vs gulp vs grunt
5
+ ## Usage
6
6
 
7
- Great compared to major Task Runners (or Build Systems)
7
+ Install with `npm i @integreat/great --global`
8
8
 
9
-   | great | gulp | grunt
10
- :-: | :-: | :-: | :-:
11
- Orienting | Data | File | File
12
- Flow | Clear | Clear | Mess
13
- Easy | Yes | No | No
9
+ ## Commands
14
10
 
15
- ## great vs nodeunit vs mocha
16
-
17
- Great compared to major Test Frameworks
18
-
19
-   | great | nodeunit | mocha
20
- :-: | :-: | :-: | :-:
21
- Test Only | No | Yes | Yes
22
- Event Driven | Yes | No | No
23
- Nested | Good | Bad | Good
24
- Browser | Good | Bad | Bad
25
-
26
- ## Quick Look
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,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare const action: (log: (message: string) => void, apiToken?: string) => () => Promise<void>;
3
+ declare const _default: (program: Command, apiToken?: string) => void;
4
+ export default _default;
@@ -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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
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,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare const action: (log: (message: string) => void) => () => void;
3
+ declare const _default: (program: Command) => Command;
4
+ export default _default;
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare const action: (log: (message: string) => void, apiToken?: string) => (projectId?: string) => Promise<void>;
3
+ declare const _default: (program: Command, apiToken?: string) => Command;
4
+ export default _default;
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare const action: (log: (message: string) => void, apiToken?: string) => (accountId?: string) => Promise<void>;
3
+ declare const _default: (program: Command, apiToken?: string) => void;
4
+ export default _default;
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare const action: (log: (message: string) => void, apiToken?: string) => (projectId?: string) => Promise<void>;
3
+ declare const _default: (program: Command, apiToken?: string) => Command;
4
+ export default _default;
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare const action: (log: (message: string) => void, apiToken?: string) => (projectId?: string) => Promise<void>;
3
+ declare const _default: (program: Command, apiToken?: string) => Command;
4
+ export default _default;
@@ -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":"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"}
@@ -0,0 +1,5 @@
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>;
@@ -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,2 @@
1
+ import type { Definitions } from 'integreat';
2
+ export default function saveProject(id: string, defs: Definitions, root?: string): void;
@@ -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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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare const action: (log: (message: string) => void, apiToken?: string) => () => Promise<void>;
3
+ declare const _default: (program: Command, apiToken?: string) => Command;
4
+ export default _default;