revisium 2.5.0-alpha.0 → 2.5.0-alpha.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/AGENTS.md +54 -0
- package/dist/e2e/utils/cli-runner.js +21 -3
- package/dist/e2e/utils/cli-runner.js.map +1 -1
- package/dist/e2e/utils/matrix-fixtures.js +1 -1
- package/dist/e2e/utils/matrix-fixtures.js.map +1 -1
- package/dist/e2e/utils/standalone-api.d.ts +0 -1
- package/dist/e2e/utils/standalone-api.js +30 -20
- package/dist/e2e/utils/standalone-api.js.map +1 -1
- package/dist/e2e/utils/standalone-runner.d.ts +0 -1
- package/dist/e2e/utils/standalone-runner.js +70 -44
- package/dist/e2e/utils/standalone-runner.js.map +1 -1
- package/dist/package.json +4 -3
- package/dist/src/commands/context/context-list.command.d.ts +6 -1
- package/dist/src/commands/context/context-list.command.js +37 -5
- package/dist/src/commands/context/context-list.command.js.map +1 -1
- package/dist/src/commands/instance/instance-add.command.d.ts +2 -0
- package/dist/src/commands/instance/instance-add.command.js +17 -1
- package/dist/src/commands/instance/instance-add.command.js.map +1 -1
- package/dist/src/commands/instance/instance-list.command.d.ts +6 -1
- package/dist/src/commands/instance/instance-list.command.js +28 -4
- package/dist/src/commands/instance/instance-list.command.js.map +1 -1
- package/dist/src/commands/instance/instance-remove.command.d.ts +9 -2
- package/dist/src/commands/instance/instance-remove.command.js +35 -2
- package/dist/src/commands/instance/instance-remove.command.js.map +1 -1
- package/dist/src/services/bootstrap/bootstrap.service.js +1 -0
- package/dist/src/services/bootstrap/bootstrap.service.js.map +1 -1
- package/dist/src/services/common/logger.service.d.ts +1 -0
- package/dist/src/services/common/logger.service.js +3 -0
- package/dist/src/services/common/logger.service.js.map +1 -1
- package/dist/src/services/connection/connection.service.js +1 -1
- package/dist/src/services/connection/connection.service.js.map +1 -1
- package/dist/src/services/workspace/workspace-config.service.js +8 -1
- package/dist/src/services/workspace/workspace-config.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/e2e/matrix/README.md +37 -3
- package/e2e/tests/07-workspace-config.e2e-spec.ts +23 -8
- package/e2e/utils/cli-runner.ts +53 -3
- package/e2e/utils/matrix-fixtures.ts +1 -1
- package/e2e/utils/standalone-api.ts +46 -29
- package/e2e/utils/standalone-runner.ts +114 -55
- package/package.json +4 -3
- package/src/commands/context/__tests__/context-list.command.spec.ts +102 -0
- package/src/commands/context/context-list.command.ts +46 -6
- package/src/commands/instance/__tests__/instance-add.command.spec.ts +93 -0
- package/src/commands/instance/__tests__/instance-list.command.spec.ts +91 -0
- package/src/commands/instance/__tests__/instance-remove.command.spec.ts +113 -0
- package/src/commands/instance/instance-add.command.ts +17 -1
- package/src/commands/instance/instance-list.command.ts +31 -5
- package/src/commands/instance/instance-remove.command.ts +38 -2
- package/src/services/bootstrap/__tests__/bootstrap.service.spec.ts +15 -1
- package/src/services/bootstrap/bootstrap.service.ts +1 -0
- package/src/services/common/logger.service.ts +9 -0
- package/src/services/connection/__tests__/connection.service.spec.ts +4 -3
- package/src/services/connection/connection.service.ts +1 -1
- package/src/services/workspace/__tests__/workspace-config.service.spec.ts +11 -0
- package/src/services/workspace/workspace-config.service.ts +9 -1
package/AGENTS.md
CHANGED
|
@@ -31,6 +31,7 @@ Primary command groups:
|
|
|
31
31
|
| Build the binary | `npm run build` (outputs `dist/src/main.js`) |
|
|
32
32
|
| E2E (default) | `npm run test:e2e` (expects standalone running on `localhost:8082`; bring it up with `test:e2e:up`/`test:e2e:down`) |
|
|
33
33
|
| E2E matrix | `npm run test:e2e:matrix` — opt-in; see `e2e/matrix/README.md` |
|
|
34
|
+
| E2E matrix (alpha) | `npm run test:e2e:matrix:alpha` — runs the matrix against the latest published alpha CLI (resolved from the `revisium@alpha` dist-tag); override with `REVISIUM_CLI_PACKAGE=revisium@<version>` |
|
|
34
35
|
|
|
35
36
|
Local CLI invocation: `node dist/src/main.js <command>` (the `revisium` shim points at the same file).
|
|
36
37
|
|
|
@@ -91,6 +92,59 @@ npm run build
|
|
|
91
92
|
|
|
92
93
|
If touching e2e helpers or matrix specs, ensure the additions still type-check and lint clean (the matrix is intentionally not run on default CI).
|
|
93
94
|
|
|
95
|
+
## Running the e2e matrix against an alpha CLI
|
|
96
|
+
|
|
97
|
+
The matrix in `e2e/matrix/` boots a fresh `@revisium/standalone` per suite and exercises a CLI binary against it. By default that's the locally-built `dist/src/main.js`; for release validation you can swap in a published version without rebuilding.
|
|
98
|
+
|
|
99
|
+
`runCli()` honours two env vars (in order of precedence):
|
|
100
|
+
|
|
101
|
+
| Env var | Effect |
|
|
102
|
+
| ---------------------- | ----------------------------------------------------------------------------------------------- |
|
|
103
|
+
| `REVISIUM_CLI_PACKAGE` | invoke via `npx -y --package=<spec> revisium ...` — accepts a dist-tag (`revisium@alpha`, `revisium@latest`) or an exact version (`revisium@2.5.0-alpha.0`) |
|
|
104
|
+
| `REVISIUM_CLI_BIN` | invoke via `node <abs-path>` — useful for a side-checkout build |
|
|
105
|
+
|
|
106
|
+
Stable standalone is pinned via the `@revisium/standalone` `devDependency` in `package.json`; `startStandalone()` resolves it through `npx --yes`, so `npm ci` locks the version.
|
|
107
|
+
|
|
108
|
+
### Quick recipes
|
|
109
|
+
|
|
110
|
+
```sh
|
|
111
|
+
# Run the entire matrix against whatever revisium@alpha currently resolves to
|
|
112
|
+
npm run test:e2e:matrix:alpha
|
|
113
|
+
|
|
114
|
+
# Pin to a specific alpha version for the same script
|
|
115
|
+
REVISIUM_CLI_PACKAGE=revisium@2.5.0-alpha.1 npm run test:e2e:matrix:alpha
|
|
116
|
+
|
|
117
|
+
# Drive the matrix by hand against any spec
|
|
118
|
+
REVISIUM_CLI_PACKAGE=revisium@alpha npm run test:e2e:matrix
|
|
119
|
+
|
|
120
|
+
# One suite only (useful for triage)
|
|
121
|
+
REVISIUM_CLI_PACKAGE=revisium@alpha npm run test:e2e:matrix -- --testPathPattern=M06
|
|
122
|
+
|
|
123
|
+
# Stream standalone logs to stderr (debug startup or seeding issues)
|
|
124
|
+
E2E_STANDALONE_LOGS=1 REVISIUM_CLI_PACKAGE=revisium@alpha npm run test:e2e:matrix
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Prompt template for triaging an alpha matrix run
|
|
128
|
+
|
|
129
|
+
When a suite fails against `revisium@<alpha>`, paste this into your assistant:
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
Run `REVISIUM_CLI_PACKAGE=revisium@<alpha-version> npm run test:e2e:matrix -- --testPathPattern=<M0X>` from the revisium-cli repo root.
|
|
133
|
+
|
|
134
|
+
Goal: figure out whether the failure is
|
|
135
|
+
(a) a regression in the alpha CLI vs the previous stable, or
|
|
136
|
+
(b) a stale assumption in the matrix spec.
|
|
137
|
+
|
|
138
|
+
When investigating:
|
|
139
|
+
- Read the failing assertion and the surrounding `it(...)` description in `e2e/matrix/<M0X>-*.e2e-spec.ts`
|
|
140
|
+
- Compare alpha behaviour against the `master` CLI by also running the same suite without `REVISIUM_CLI_PACKAGE`
|
|
141
|
+
- Check the standalone version is the pinned one (`@revisium/standalone` in package.json devDependencies)
|
|
142
|
+
- Inspect `process.stderr` from `runCli` (set `E2E_STANDALONE_LOGS=1` for the sandbox process)
|
|
143
|
+
- Do NOT modify matrix specs to "make them pass" against the alpha unless the spec was wrong; otherwise file a regression issue against revisium-cli with the failing case.
|
|
144
|
+
|
|
145
|
+
Report: failing-suite name, alpha version, root cause, and whether the fix belongs in the CLI or the spec.
|
|
146
|
+
```
|
|
147
|
+
|
|
94
148
|
## When to update this file
|
|
95
149
|
|
|
96
150
|
Whenever a convention changes — e.g., a new command surface, a non-obvious testing pattern, a new lint rule — update both the relevant section and the commands table.
|
|
@@ -14,12 +14,16 @@ async function runCli(args, options = {}) {
|
|
|
14
14
|
if (isInstrumented && !fs.existsSync(nycOutputDir)) {
|
|
15
15
|
fs.mkdirSync(nycOutputDir, { recursive: true });
|
|
16
16
|
}
|
|
17
|
+
const effectiveEnv = {
|
|
18
|
+
...process.env,
|
|
19
|
+
...env,
|
|
20
|
+
};
|
|
21
|
+
const { command, commandArgs } = resolveCliInvocation(args, mainPath, effectiveEnv);
|
|
17
22
|
return new Promise((resolve, reject) => {
|
|
18
|
-
const child = (0, child_process_1.spawn)(
|
|
23
|
+
const child = (0, child_process_1.spawn)(command, commandArgs, {
|
|
19
24
|
cwd,
|
|
20
25
|
env: {
|
|
21
|
-
...
|
|
22
|
-
...env,
|
|
26
|
+
...effectiveEnv,
|
|
23
27
|
...(isInstrumented ? { NYC_OUTPUT_DIR: nycOutputDir } : {}),
|
|
24
28
|
},
|
|
25
29
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
@@ -57,6 +61,20 @@ async function runCli(args, options = {}) {
|
|
|
57
61
|
});
|
|
58
62
|
});
|
|
59
63
|
}
|
|
64
|
+
function resolveCliInvocation(args, defaultMainPath, env) {
|
|
65
|
+
const pkg = env.REVISIUM_CLI_PACKAGE;
|
|
66
|
+
if (pkg && pkg.length > 0) {
|
|
67
|
+
return {
|
|
68
|
+
command: 'npx',
|
|
69
|
+
commandArgs: ['-y', `--package=${pkg}`, 'revisium', ...args],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const bin = env.REVISIUM_CLI_BIN;
|
|
73
|
+
if (bin && bin.length > 0) {
|
|
74
|
+
return { command: 'node', commandArgs: [bin, ...args] };
|
|
75
|
+
}
|
|
76
|
+
return { command: 'node', commandArgs: [defaultMainPath, ...args] };
|
|
77
|
+
}
|
|
60
78
|
function buildUrl(projectName, options = {}) {
|
|
61
79
|
const { orgId = 'admin', branch = 'master', revision, token, protocol, } = options;
|
|
62
80
|
const scheme = protocol ? `revisium+${protocol}` : 'revisium';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../../../e2e/utils/cli-runner.ts"],"names":[],"mappings":";;AAkBA,
|
|
1
|
+
{"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../../../e2e/utils/cli-runner.ts"],"names":[],"mappings":";;AAkBA,wBAkFC;AAqCD,4BA8BC;AAvKD,iDAAsC;AACtC,yBAAyB;AACzB,6BAA6B;AAgBtB,KAAK,UAAU,MAAM,CAC1B,IAAc,EACd,UAAsB,EAAE;IAExB,MAAM,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG,CAAC;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,WAAW,EACX,cAAc,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,kBAAkB,CACtE,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC3D,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAOD,MAAM,YAAY,GAAuC;QACvD,GAAG,OAAO,CAAC,GAAG;QACd,GAAG,GAAG;KACP,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,oBAAoB,CACnD,IAAI,EACJ,QAAQ,EACR,YAAY,CACb,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,WAAW,EAAE;YACxC,GAAG;YACH,GAAG,EAAE;gBACH,GAAG,YAAY;gBAEf,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D;YACD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,OAAO,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC7B,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,CAAC;gBACN,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,QAAQ,IAAI,CAAC;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAkBD,SAAS,oBAAoB,CAC3B,IAAc,EACd,eAAuB,EACvB,GAAuC;IAEvC,MAAM,GAAG,GAAG,GAAG,CAAC,oBAAoB,CAAC;IACrC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;SAC7D,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC;IACjC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,SAAgB,QAAQ,CACtB,WAAmB,EACnB,UAMI,EAAE;IAEN,MAAM,EACJ,KAAK,GAAG,OAAO,EACf,MAAM,GAAG,QAAQ,EACjB,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9D,IAAI,GAAG,GAAG,GAAG,MAAM,qBAAqB,KAAK,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;IAEzE,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -38,7 +38,7 @@ function questSchema() {
|
|
|
38
38
|
additionalProperties: false,
|
|
39
39
|
properties: {
|
|
40
40
|
title: { type: 'string', default: '' },
|
|
41
|
-
points: { type: '
|
|
41
|
+
points: { type: 'number', default: 0 },
|
|
42
42
|
published: { type: 'boolean', default: false },
|
|
43
43
|
},
|
|
44
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-fixtures.js","sourceRoot":"","sources":["../../../e2e/utils/matrix-fixtures.ts"],"names":[],"mappings":";;AA2BA,8BAUC;AAED,8BAUC;AAED,kCAWC;AAID,0BAMC;AAED,0BAaC;AAED,8BAUC;AAID,0CASC;AAED,gDASC;AAED,gDASC;AA3GD,SAAgB,SAAS;IACvB,OAAO,KAAK,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACtC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;SACtC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,KAAK,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;SACzC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,KAAK,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACtC,MAAM,EAAE,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"matrix-fixtures.js","sourceRoot":"","sources":["../../../e2e/utils/matrix-fixtures.ts"],"names":[],"mappings":";;AA2BA,8BAUC;AAED,8BAUC;AAED,kCAWC;AAID,0BAMC;AAED,0BAaC;AAED,8BAUC;AAID,0CASC;AAED,gDASC;AAED,gDASC;AA3GD,SAAgB,SAAS;IACvB,OAAO,KAAK,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACtC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;SACtC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,KAAK,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;SACzC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,KAAK,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACtC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;YACtC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;SAC/C;KACF,CAAC,CAAC;AACL,CAAC;AAID,SAAgB,OAAO,CAAC,QAAgB,CAAC;IACvC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;KACtD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,OAAO;IACrB,OAAO;QACL;YACE,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAuB,EAAE;SAC5D;QACD;YACE,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;SACpD;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,QAAgB,EAAE;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,SAAS,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAChD,IAAI,EAAE;YACJ,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;YACvB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;YACpB,SAAS,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;SACvB;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAID,SAAgB,eAAe,CAC7B,UAAgC,EAAE;IAElC,OAAO,KAAK,CAAC;QACX,SAAS,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QAClC,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,OAAO,eAAe,CAAC;QACrB,WAAW;QACX,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,CAAC,UAAU,CAAC;QACvB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QAC5C,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAChB,aAAa,EAAE,uBAAuB;KACvC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,OAAO,eAAe,CAAC;QACrB,WAAW;QACX,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QAClC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QACpD,IAAI,EAAE,OAAO,EAAE;QACf,aAAa,EAAE,uBAAuB;KACvC,CAAC,CAAC;AACL,CAAC;AAID,SAAS,KAAK,CAAI,KAAQ;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;AAChD,CAAC"}
|
|
@@ -19,14 +19,23 @@ class StandaloneApiClient {
|
|
|
19
19
|
this.token = undefined;
|
|
20
20
|
}
|
|
21
21
|
async mintApiKey(organization, options) {
|
|
22
|
-
const
|
|
23
|
-
|
|
22
|
+
const data = await this.graphql(`mutation($data: CreatePersonalApiKeyInput!) {
|
|
23
|
+
createPersonalApiKey(data: $data) {
|
|
24
|
+
apiKey { id name }
|
|
25
|
+
secret
|
|
26
|
+
}
|
|
27
|
+
}`, {
|
|
28
|
+
data: {
|
|
29
|
+
name: options.name,
|
|
30
|
+
organizationId: organization,
|
|
31
|
+
...(options.expiresAt ? { expiresAt: options.expiresAt } : {}),
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
id: data.createPersonalApiKey.apiKey.id,
|
|
36
|
+
apiKey: data.createPersonalApiKey.secret,
|
|
37
|
+
name: data.createPersonalApiKey.apiKey.name,
|
|
24
38
|
};
|
|
25
|
-
if (options.expiresAt)
|
|
26
|
-
body.expiresAt = options.expiresAt;
|
|
27
|
-
if (options.role)
|
|
28
|
-
body.role = options.role;
|
|
29
|
-
return this.request('POST', `/api/organizations/${encodeURIComponent(organization)}/api-keys`, body);
|
|
30
39
|
}
|
|
31
40
|
async createProject(organization, projectName, branchName = 'master') {
|
|
32
41
|
await this.graphql(`mutation($data: CreateProjectInput!) { createProject(data: $data) { id } }`, { data: { organizationId: organization, projectName, branchName } });
|
|
@@ -47,25 +56,26 @@ class StandaloneApiClient {
|
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
58
|
async getDraftRevisionId(organization, projectName, branchName = 'master') {
|
|
50
|
-
const data = await this.graphql(`query($data:
|
|
51
|
-
|
|
52
|
-
branch(name: $branch) { draft { id } }
|
|
53
|
-
}
|
|
59
|
+
const data = await this.graphql(`query($data: GetBranchInput!) {
|
|
60
|
+
branch(data: $data) { draft { id } }
|
|
54
61
|
}`, {
|
|
55
|
-
data: { organizationId: organization, projectName },
|
|
56
|
-
branch: branchName,
|
|
62
|
+
data: { organizationId: organization, projectName, branchName },
|
|
57
63
|
});
|
|
58
|
-
return data.
|
|
64
|
+
return data.branch.draft.id;
|
|
59
65
|
}
|
|
60
66
|
async seedTable(input) {
|
|
61
67
|
const revisionId = await this.getDraftRevisionId(input.organization, input.project, input.branch);
|
|
62
|
-
await this.graphql(`mutation($data: CreateTableInput!) {
|
|
68
|
+
await this.graphql(`mutation($data: CreateTableInput!) {
|
|
69
|
+
createTable(data: $data) { table { versionId } }
|
|
70
|
+
}`, {
|
|
63
71
|
data: { revisionId, tableId: input.tableId, schema: input.schema },
|
|
64
72
|
});
|
|
65
73
|
}
|
|
66
74
|
async seedRow(input) {
|
|
67
75
|
const revisionId = await this.getDraftRevisionId(input.organization, input.project, input.branch);
|
|
68
|
-
await this.graphql(`mutation($data: CreateRowInput!) {
|
|
76
|
+
await this.graphql(`mutation($data: CreateRowInput!) {
|
|
77
|
+
createRow(data: $data) { row { versionId } }
|
|
78
|
+
}`, {
|
|
69
79
|
data: {
|
|
70
80
|
revisionId,
|
|
71
81
|
tableId: input.tableId,
|
|
@@ -90,10 +100,10 @@ class StandaloneApiClient {
|
|
|
90
100
|
}
|
|
91
101
|
async listEndpoints(organization, projectName, branchName = 'master') {
|
|
92
102
|
const revisionId = await this.getDraftRevisionId(organization, projectName, branchName);
|
|
93
|
-
const data = await this.graphql(`query($
|
|
94
|
-
|
|
95
|
-
}`, { revisionId });
|
|
96
|
-
return data.endpoints;
|
|
103
|
+
const data = await this.graphql(`query($data: GetRevisionInput!) {
|
|
104
|
+
revision(data: $data) { endpoints { id type } }
|
|
105
|
+
}`, { data: { revisionId } });
|
|
106
|
+
return data.revision.endpoints;
|
|
97
107
|
}
|
|
98
108
|
async request(method, path, body) {
|
|
99
109
|
const headers = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-api.js","sourceRoot":"","sources":["../../../e2e/utils/standalone-api.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"standalone-api.js","sourceRoot":"","sources":["../../../e2e/utils/standalone-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,26 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.startStandalone = startStandalone;
|
|
4
4
|
const node_child_process_1 = require("node:child_process");
|
|
5
|
-
const node_crypto_1 = require("node:crypto");
|
|
6
5
|
const promises_1 = require("node:fs/promises");
|
|
7
6
|
const node_os_1 = require("node:os");
|
|
8
7
|
const node_path_1 = require("node:path");
|
|
9
8
|
const standalone_api_1 = require("./standalone-api");
|
|
10
9
|
async function startStandalone(options = {}) {
|
|
11
|
-
const { auth = false, adminPassword, version, env: extraEnv = {}, readinessTimeoutMs =
|
|
10
|
+
const { auth = false, adminPassword, version, env: extraEnv = {}, readinessTimeoutMs = 180_000, } = options;
|
|
12
11
|
if (auth && !adminPassword) {
|
|
13
12
|
throw new TypeError('startStandalone: adminPassword is required when auth=true');
|
|
14
13
|
}
|
|
15
14
|
const dataDir = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'revisium-standalone-'));
|
|
16
|
-
const port = await pickFreePort(9222);
|
|
17
|
-
const pgPort = await pickFreePort(5440);
|
|
18
15
|
const args = [
|
|
19
16
|
'--yes',
|
|
20
17
|
version ? `@revisium/standalone@${version}` : '@revisium/standalone',
|
|
21
|
-
'--port',
|
|
22
|
-
String(port),
|
|
23
|
-
'--pg-port',
|
|
24
|
-
String(pgPort),
|
|
25
18
|
'--data',
|
|
26
19
|
dataDir,
|
|
27
20
|
];
|
|
@@ -36,21 +29,24 @@ async function startStandalone(options = {}) {
|
|
|
36
29
|
},
|
|
37
30
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
38
31
|
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
let resolvedPort = null;
|
|
33
|
+
attachLogPipes(child, () => resolvedPort);
|
|
34
|
+
let port;
|
|
42
35
|
try {
|
|
43
|
-
await
|
|
36
|
+
port = await waitForBanner(child, readinessTimeoutMs);
|
|
37
|
+
resolvedPort = port;
|
|
38
|
+
await waitForReady(`http://localhost:${port}/health/readiness`, 30_000);
|
|
44
39
|
}
|
|
45
40
|
catch (error) {
|
|
46
41
|
await stopProcess(child, dataDir);
|
|
47
42
|
throw error;
|
|
48
43
|
}
|
|
44
|
+
const baseUrl = `http://localhost:${port}`;
|
|
45
|
+
const api = new standalone_api_1.StandaloneApiClient(baseUrl);
|
|
49
46
|
let stopped = false;
|
|
50
47
|
return {
|
|
51
48
|
baseUrl,
|
|
52
49
|
port,
|
|
53
|
-
pgPort,
|
|
54
50
|
auth,
|
|
55
51
|
api,
|
|
56
52
|
url: (parts) => buildRevisiumUrl(port, parts),
|
|
@@ -73,6 +69,58 @@ function buildRevisiumUrl(port, parts = {}) {
|
|
|
73
69
|
const tail = parts.revision ? `:${parts.revision}` : '';
|
|
74
70
|
return `revisium://${host}/${org}/${parts.project}/${branch}${tail}`;
|
|
75
71
|
}
|
|
72
|
+
function waitForBanner(child, timeoutMs) {
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
let buffer = '';
|
|
75
|
+
let settled = false;
|
|
76
|
+
const bannerRegex = /URL:\s+http:\/\/localhost:(\d+)/;
|
|
77
|
+
const timer = setTimeout(() => {
|
|
78
|
+
if (!settled) {
|
|
79
|
+
settled = true;
|
|
80
|
+
cleanup();
|
|
81
|
+
const tail = buffer.slice(-2_000) || '<no output>';
|
|
82
|
+
reject(new Error(`Standalone did not announce a URL within ${timeoutMs}ms. Tail: ${tail}`));
|
|
83
|
+
}
|
|
84
|
+
}, timeoutMs);
|
|
85
|
+
const onData = (chunk) => {
|
|
86
|
+
if (settled)
|
|
87
|
+
return;
|
|
88
|
+
buffer += chunk.toString();
|
|
89
|
+
const match = bannerRegex.exec(buffer);
|
|
90
|
+
if (match) {
|
|
91
|
+
settled = true;
|
|
92
|
+
cleanup();
|
|
93
|
+
resolve(Number(match[1]));
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const onExit = (code) => {
|
|
97
|
+
if (settled)
|
|
98
|
+
return;
|
|
99
|
+
settled = true;
|
|
100
|
+
cleanup();
|
|
101
|
+
const tail = buffer.slice(-2_000) || '<no output>';
|
|
102
|
+
reject(new Error(`Standalone exited (code=${code ?? 'null'}) before announcing a URL. Tail: ${tail}`));
|
|
103
|
+
};
|
|
104
|
+
const onError = (error) => {
|
|
105
|
+
if (settled)
|
|
106
|
+
return;
|
|
107
|
+
settled = true;
|
|
108
|
+
cleanup();
|
|
109
|
+
reject(error);
|
|
110
|
+
};
|
|
111
|
+
function cleanup() {
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
child.stdout?.off('data', onData);
|
|
114
|
+
child.stderr?.off('data', onData);
|
|
115
|
+
child.off('exit', onExit);
|
|
116
|
+
child.off('error', onError);
|
|
117
|
+
}
|
|
118
|
+
child.stdout?.on('data', onData);
|
|
119
|
+
child.stderr?.on('data', onData);
|
|
120
|
+
child.once('exit', onExit);
|
|
121
|
+
child.once('error', onError);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
76
124
|
async function waitForReady(url, timeoutMs) {
|
|
77
125
|
const start = Date.now();
|
|
78
126
|
let lastError;
|
|
@@ -119,46 +167,24 @@ function waitForExit(child, timeoutMs) {
|
|
|
119
167
|
});
|
|
120
168
|
});
|
|
121
169
|
}
|
|
122
|
-
function attachLogPipes(child,
|
|
170
|
+
function attachLogPipes(child, getPort) {
|
|
171
|
+
const tag = () => {
|
|
172
|
+
const port = getPort();
|
|
173
|
+
return port === null ? '[standalone:<pending>]' : `[standalone:${port}]`;
|
|
174
|
+
};
|
|
123
175
|
if (process.env.E2E_STANDALONE_LOGS === '1') {
|
|
124
|
-
const tag = `[standalone:${port}]`;
|
|
125
176
|
child.stdout?.on('data', (chunk) => {
|
|
126
|
-
process.stderr.write(`${tag} ${chunk.toString()}`);
|
|
177
|
+
process.stderr.write(`${tag()} ${chunk.toString()}`);
|
|
127
178
|
});
|
|
128
179
|
child.stderr?.on('data', (chunk) => {
|
|
129
|
-
process.stderr.write(`${tag} ${chunk.toString()}`);
|
|
180
|
+
process.stderr.write(`${tag()} ${chunk.toString()}`);
|
|
130
181
|
});
|
|
131
182
|
}
|
|
132
183
|
else {
|
|
133
|
-
child.stdout?.
|
|
134
|
-
child.stderr?.
|
|
184
|
+
child.stdout?.on('data', () => { });
|
|
185
|
+
child.stderr?.on('data', () => { });
|
|
135
186
|
}
|
|
136
187
|
}
|
|
137
|
-
async function pickFreePort(preferred) {
|
|
138
|
-
const candidates = [preferred, ...randomOffsets(preferred, 16)];
|
|
139
|
-
for (const candidate of candidates) {
|
|
140
|
-
if (await isPortFree(candidate)) {
|
|
141
|
-
return candidate;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return preferred;
|
|
145
|
-
}
|
|
146
|
-
function randomOffsets(base, count) {
|
|
147
|
-
const offsets = new Set();
|
|
148
|
-
while (offsets.size < count) {
|
|
149
|
-
offsets.add(base + ((0, node_crypto_1.randomBytes)(2).readUInt16LE() % 2_000));
|
|
150
|
-
}
|
|
151
|
-
return Array.from(offsets);
|
|
152
|
-
}
|
|
153
|
-
async function isPortFree(port) {
|
|
154
|
-
const net = await Promise.resolve().then(() => require('node:net'));
|
|
155
|
-
return await new Promise((resolve) => {
|
|
156
|
-
const server = net.createServer();
|
|
157
|
-
server.once('error', () => resolve(false));
|
|
158
|
-
server.once('listening', () => server.close(() => resolve(true)));
|
|
159
|
-
server.listen(port, '127.0.0.1');
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
188
|
function sleep(ms) {
|
|
163
189
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
164
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-runner.js","sourceRoot":"","sources":["../../../e2e/utils/standalone-runner.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"standalone-runner.js","sourceRoot":"","sources":["../../../e2e/utils/standalone-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "revisium",
|
|
3
|
-
"version": "2.5.0-alpha.
|
|
3
|
+
"version": "2.5.0-alpha.1",
|
|
4
4
|
"homepage": "https://revisium.io",
|
|
5
5
|
"description": "A CLI tool for interacting with Revisium instances, providing migration management, schema export, and data export capabilities.",
|
|
6
6
|
"author": "Anton Kashirov",
|
|
@@ -27,10 +27,11 @@
|
|
|
27
27
|
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
|
|
28
28
|
"test:e2e": "jest --config ./e2e/jest-e2e.json",
|
|
29
29
|
"test:e2e:cov": "npm run build:instrumented && E2E_INSTRUMENTED=1 jest --config ./e2e/jest-e2e.json",
|
|
30
|
-
"test:e2e:up": "
|
|
30
|
+
"test:e2e:up": "npx @revisium/standalone --auth --port 8082 --data .e2e-test & echo $! > .e2e-test.pid",
|
|
31
31
|
"test:e2e:down": "if [ -f .e2e-test.pid ]; then kill $(cat .e2e-test.pid) 2>/dev/null; rm -f .e2e-test.pid; fi; rm -rf .e2e-test",
|
|
32
32
|
"test:e2e:matrix": "npm run build && jest --config ./e2e/jest-matrix.json",
|
|
33
33
|
"test:e2e:matrix:cov": "npm run build:instrumented && E2E_INSTRUMENTED=1 jest --config ./e2e/jest-matrix.json",
|
|
34
|
+
"test:e2e:matrix:alpha": "REVISIUM_CLI_PACKAGE=${REVISIUM_CLI_PACKAGE:-revisium@alpha} jest --config ./e2e/jest-matrix.json",
|
|
34
35
|
"build:instrumented": "npm run build && rm -rf dist-instrumented && mkdir -p dist-instrumented && cp dist/package.json dist-instrumented/ && npx nyc instrument dist/src dist-instrumented/src --include='**/*.js'",
|
|
35
36
|
"test:all": "npm run test:cov && npm run test:e2e:cov && npm run coverage:merge",
|
|
36
37
|
"coverage:merge": "node scripts/merge-coverage.js"
|
|
@@ -62,7 +63,7 @@
|
|
|
62
63
|
"@nestjs/cli": "^11.0.0",
|
|
63
64
|
"@nestjs/schematics": "^11.0.0",
|
|
64
65
|
"@nestjs/testing": "^11.0.1",
|
|
65
|
-
"@revisium/standalone": "2.8.
|
|
66
|
+
"@revisium/standalone": "2.8.2-alpha.0",
|
|
66
67
|
"@swc/cli": "^0.6.0",
|
|
67
68
|
"@swc/core": "^1.10.7",
|
|
68
69
|
"@types/express": "^5.0.0",
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { CommandRunner } from 'nest-commander';
|
|
2
2
|
import { LoggerService } from 'src/services/common';
|
|
3
3
|
import { WorkspaceConfigService } from 'src/services/workspace';
|
|
4
|
+
interface Options {
|
|
5
|
+
json?: boolean;
|
|
6
|
+
}
|
|
4
7
|
export declare class ContextListCommand extends CommandRunner {
|
|
5
8
|
private readonly workspaceConfig;
|
|
6
9
|
private readonly logger;
|
|
7
10
|
constructor(workspaceConfig: WorkspaceConfigService, logger: LoggerService);
|
|
8
|
-
run(): Promise<void>;
|
|
11
|
+
run(_inputs: string[], options?: Options): Promise<void>;
|
|
12
|
+
parseJson(value?: string): boolean;
|
|
9
13
|
}
|
|
14
|
+
export {};
|
|
@@ -13,6 +13,7 @@ exports.ContextListCommand = void 0;
|
|
|
13
13
|
const nest_commander_1 = require("nest-commander");
|
|
14
14
|
const common_1 = require("../../services/common");
|
|
15
15
|
const workspace_1 = require("../../services/workspace");
|
|
16
|
+
const parse_boolean_utils_1 = require("../../utils/parse-boolean.utils");
|
|
16
17
|
let ContextListCommand = class ContextListCommand extends nest_commander_1.CommandRunner {
|
|
17
18
|
workspaceConfig;
|
|
18
19
|
logger;
|
|
@@ -21,20 +22,51 @@ let ContextListCommand = class ContextListCommand extends nest_commander_1.Comma
|
|
|
21
22
|
this.workspaceConfig = workspaceConfig;
|
|
22
23
|
this.logger = logger;
|
|
23
24
|
}
|
|
24
|
-
async run() {
|
|
25
|
+
async run(_inputs, options = {}) {
|
|
25
26
|
const loaded = await this.workspaceConfig.load();
|
|
26
|
-
|
|
27
|
+
const entries = loaded ? Object.entries(loaded.config.contexts) : [];
|
|
28
|
+
const sorted = [...entries].sort(([a], [b]) => a.localeCompare(b));
|
|
29
|
+
if (options.json) {
|
|
30
|
+
const contexts = sorted.map(([name, context]) => ({
|
|
31
|
+
name,
|
|
32
|
+
instance: context.instance,
|
|
33
|
+
organization: context.organization,
|
|
34
|
+
project: context.project,
|
|
35
|
+
branch: context.branch || workspace_1.DEFAULT_BRANCH,
|
|
36
|
+
revision: context.revision || workspace_1.DEFAULT_REVISION,
|
|
37
|
+
credential: context.credential,
|
|
38
|
+
current: loaded?.config.currentContext === name,
|
|
39
|
+
}));
|
|
40
|
+
console.log(JSON.stringify({
|
|
41
|
+
currentContext: loaded?.config.currentContext,
|
|
42
|
+
contexts,
|
|
43
|
+
}, null, 2));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (sorted.length === 0) {
|
|
27
47
|
this.logger.info('No Revisium contexts configured in this workspace.');
|
|
28
48
|
return;
|
|
29
49
|
}
|
|
30
|
-
this.logger.info(`Config: ${loaded
|
|
31
|
-
for (const [name, context] of
|
|
32
|
-
const marker = loaded
|
|
50
|
+
this.logger.info(`Config: ${loaded?.path}`);
|
|
51
|
+
for (const [name, context] of sorted) {
|
|
52
|
+
const marker = loaded?.config.currentContext === name ? '*' : ' ';
|
|
33
53
|
this.logger.info(`${marker} ${name}\t${context.instance}\t${context.organization}/${context.project}/${context.branch || workspace_1.DEFAULT_BRANCH}:${context.revision || workspace_1.DEFAULT_REVISION}`);
|
|
34
54
|
}
|
|
35
55
|
}
|
|
56
|
+
parseJson(value) {
|
|
57
|
+
return (0, parse_boolean_utils_1.parseBooleanOption)(value);
|
|
58
|
+
}
|
|
36
59
|
};
|
|
37
60
|
exports.ContextListCommand = ContextListCommand;
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, nest_commander_1.Option)({
|
|
63
|
+
flags: '--json [boolean]',
|
|
64
|
+
description: 'Print machine-readable JSON',
|
|
65
|
+
}),
|
|
66
|
+
__metadata("design:type", Function),
|
|
67
|
+
__metadata("design:paramtypes", [String]),
|
|
68
|
+
__metadata("design:returntype", Boolean)
|
|
69
|
+
], ContextListCommand.prototype, "parseJson", null);
|
|
38
70
|
exports.ContextListCommand = ContextListCommand = __decorate([
|
|
39
71
|
(0, nest_commander_1.SubCommand)({
|
|
40
72
|
name: 'list',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-list.command.js","sourceRoot":"","sources":["../../../../src/commands/context/context-list.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"context-list.command.js","sourceRoot":"","sources":["../../../../src/commands/context/context-list.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { WorkspaceAuthMode, WorkspaceConfigService } from 'src/services/workspac
|
|
|
4
4
|
interface Options {
|
|
5
5
|
url?: string;
|
|
6
6
|
auth?: WorkspaceAuthMode;
|
|
7
|
+
force?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export declare class InstanceAddCommand extends CommandRunner {
|
|
9
10
|
private readonly workspaceConfig;
|
|
@@ -12,5 +13,6 @@ export declare class InstanceAddCommand extends CommandRunner {
|
|
|
12
13
|
run(inputs: string[], options: Options): Promise<void>;
|
|
13
14
|
parseUrl(value: string): string;
|
|
14
15
|
parseAuth(value: string): WorkspaceAuthMode;
|
|
16
|
+
parseForce(value?: string): boolean;
|
|
15
17
|
}
|
|
16
18
|
export {};
|