@memberjunction/cli 5.37.0 → 5.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -0
- package/dist/baseline/cli-helpers.d.ts +12 -0
- package/dist/baseline/cli-helpers.d.ts.map +1 -0
- package/dist/baseline/cli-helpers.js +40 -0
- package/dist/baseline/cli-helpers.js.map +1 -0
- package/dist/baseline/comparator.d.ts +26 -0
- package/dist/baseline/comparator.d.ts.map +1 -0
- package/dist/baseline/comparator.js +527 -0
- package/dist/baseline/comparator.js.map +1 -0
- package/dist/baseline/connection.d.ts +39 -0
- package/dist/baseline/connection.d.ts.map +1 -0
- package/dist/baseline/connection.js +104 -0
- package/dist/baseline/connection.js.map +1 -0
- package/dist/baseline/data-dumper.d.ts +23 -0
- package/dist/baseline/data-dumper.d.ts.map +1 -0
- package/dist/baseline/data-dumper.js +94 -0
- package/dist/baseline/data-dumper.js.map +1 -0
- package/dist/baseline/emitter.d.ts +36 -0
- package/dist/baseline/emitter.d.ts.map +1 -0
- package/dist/baseline/emitter.js +512 -0
- package/dist/baseline/emitter.js.map +1 -0
- package/dist/baseline/index.d.ts +18 -0
- package/dist/baseline/index.d.ts.map +1 -0
- package/dist/baseline/index.js +14 -0
- package/dist/baseline/index.js.map +1 -0
- package/dist/baseline/introspector-mssql.d.ts +15 -0
- package/dist/baseline/introspector-mssql.d.ts.map +1 -0
- package/dist/baseline/introspector-mssql.js +673 -0
- package/dist/baseline/introspector-mssql.js.map +1 -0
- package/dist/baseline/introspector-postgres.d.ts +14 -0
- package/dist/baseline/introspector-postgres.d.ts.map +1 -0
- package/dist/baseline/introspector-postgres.js +277 -0
- package/dist/baseline/introspector-postgres.js.map +1 -0
- package/dist/baseline/report.d.ts +7 -0
- package/dist/baseline/report.d.ts.map +1 -0
- package/dist/baseline/report.js +105 -0
- package/dist/baseline/report.js.map +1 -0
- package/dist/baseline/types.d.ts +286 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +10 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/baseline/util.d.ts +112 -0
- package/dist/baseline/util.d.ts.map +1 -0
- package/dist/baseline/util.js +325 -0
- package/dist/baseline/util.js.map +1 -0
- package/dist/commands/baseline/build.d.ts +29 -0
- package/dist/commands/baseline/build.d.ts.map +1 -0
- package/dist/commands/baseline/build.js +188 -0
- package/dist/commands/baseline/build.js.map +1 -0
- package/dist/commands/baseline/compare.d.ts +19 -0
- package/dist/commands/baseline/compare.d.ts.map +1 -0
- package/dist/commands/baseline/compare.js +133 -0
- package/dist/commands/baseline/compare.js.map +1 -0
- package/dist/commands/baseline/roundtrip.d.ts +23 -0
- package/dist/commands/baseline/roundtrip.d.ts.map +1 -0
- package/dist/commands/baseline/roundtrip.js +245 -0
- package/dist/commands/baseline/roundtrip.js.map +1 -0
- package/dist/commands/test/compare.d.ts +3 -0
- package/dist/commands/test/compare.d.ts.map +1 -1
- package/dist/commands/test/compare.js +23 -3
- package/dist/commands/test/compare.js.map +1 -1
- package/dist/commands/test/regression/build.d.ts +14 -0
- package/dist/commands/test/regression/build.d.ts.map +1 -0
- package/dist/commands/test/regression/build.js +48 -0
- package/dist/commands/test/regression/build.js.map +1 -0
- package/dist/commands/test/regression/compare.d.ts +15 -0
- package/dist/commands/test/regression/compare.d.ts.map +1 -0
- package/dist/commands/test/regression/compare.js +66 -0
- package/dist/commands/test/regression/compare.js.map +1 -0
- package/dist/commands/test/regression/down.d.ts +10 -0
- package/dist/commands/test/regression/down.d.ts.map +1 -0
- package/dist/commands/test/regression/down.js +29 -0
- package/dist/commands/test/regression/down.js.map +1 -0
- package/dist/commands/test/regression/export.d.ts +11 -0
- package/dist/commands/test/regression/export.d.ts.map +1 -0
- package/dist/commands/test/regression/export.js +56 -0
- package/dist/commands/test/regression/export.js.map +1 -0
- package/dist/commands/test/regression/gen-forms.d.ts +7 -0
- package/dist/commands/test/regression/gen-forms.d.ts.map +1 -0
- package/dist/commands/test/regression/gen-forms.js +18 -0
- package/dist/commands/test/regression/gen-forms.js.map +1 -0
- package/dist/commands/test/regression/index.d.ts +7 -0
- package/dist/commands/test/regression/index.d.ts.map +1 -0
- package/dist/commands/test/regression/index.js +33 -0
- package/dist/commands/test/regression/index.js.map +1 -0
- package/dist/commands/test/regression/init.d.ts +21 -0
- package/dist/commands/test/regression/init.d.ts.map +1 -0
- package/dist/commands/test/regression/init.js +111 -0
- package/dist/commands/test/regression/init.js.map +1 -0
- package/dist/commands/test/regression/remote.d.ts +23 -0
- package/dist/commands/test/regression/remote.d.ts.map +1 -0
- package/dist/commands/test/regression/remote.js +140 -0
- package/dist/commands/test/regression/remote.js.map +1 -0
- package/dist/commands/test/regression/up.d.ts +21 -0
- package/dist/commands/test/regression/up.d.ts.map +1 -0
- package/dist/commands/test/regression/up.js +111 -0
- package/dist/commands/test/regression/up.js.map +1 -0
- package/dist/commands/test/run.d.ts +1 -0
- package/dist/commands/test/run.d.ts.map +1 -1
- package/dist/commands/test/run.js +6 -0
- package/dist/commands/test/run.js.map +1 -1
- package/dist/commands/test/suite.d.ts +5 -0
- package/dist/commands/test/suite.d.ts.map +1 -1
- package/dist/commands/test/suite.js +27 -0
- package/dist/commands/test/suite.js.map +1 -1
- package/dist/commands/translate-sql/index.d.ts.map +1 -1
- package/dist/commands/translate-sql/index.js +3 -2
- package/dist/commands/translate-sql/index.js.map +1 -1
- package/dist/init-templates/bring-your-own-app/README.md +74 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/.mj-sync.json +10 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/test-suites/.byo-suite.json +51 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/test-suites/.mj-sync.json +12 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.T01-counter-increment.json +63 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.T02-contact-form-submit.json +63 -0
- package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.mj-sync.json +12 -0
- package/dist/init-templates/bring-your-own-app/docker-compose.app.yml +76 -0
- package/dist/init-templates/bring-your-own-app/target.json +23 -0
- package/dist/init-templates/generic-web/README.md +115 -0
- package/dist/init-templates/generic-web/metadata/.mj-sync.json +10 -0
- package/dist/init-templates/generic-web/metadata/test-suites/.generic-web-suite.json +48 -0
- package/dist/init-templates/generic-web/metadata/test-suites/.mj-sync.json +12 -0
- package/dist/init-templates/generic-web/metadata/tests/.GW01-home-loads.json +74 -0
- package/dist/init-templates/generic-web/metadata/tests/.GW02-search-array-map.json +82 -0
- package/dist/init-templates/generic-web/metadata/tests/.mj-sync.json +12 -0
- package/dist/init-templates/generic-web/oracles/mdn-oracles.cjs +121 -0
- package/dist/init-templates/generic-web/target.json +25 -0
- package/dist/init-templates/github-actions/README.md +26 -0
- package/dist/init-templates/github-actions/regression.yml +52 -0
- package/dist/init-templates/remote-mj/README.md +95 -0
- package/dist/init-templates/remote-mj/target.json +22 -0
- package/dist/init-templates/static-file-server/Dockerfile +23 -0
- package/dist/init-templates/static-file-server/README.md +88 -0
- package/dist/init-templates/static-file-server/docker-compose.app.yml +44 -0
- package/dist/init-templates/static-file-server/metadata/.mj-sync.json +10 -0
- package/dist/init-templates/static-file-server/metadata/test-suites/.mj-sync.json +12 -0
- package/dist/init-templates/static-file-server/metadata/test-suites/.static-server-suite.json +27 -0
- package/dist/init-templates/static-file-server/metadata/tests/.SS01-home-loads.json +45 -0
- package/dist/init-templates/static-file-server/metadata/tests/.SS02-navigate-about.json +45 -0
- package/dist/init-templates/static-file-server/metadata/tests/.mj-sync.json +12 -0
- package/dist/init-templates/static-file-server/public/about.html +12 -0
- package/dist/init-templates/static-file-server/public/index.html +27 -0
- package/dist/init-templates/static-file-server/target.json +16 -0
- package/dist/lib/regression/docker-helpers.d.ts +98 -0
- package/dist/lib/regression/docker-helpers.d.ts.map +1 -0
- package/dist/lib/regression/docker-helpers.js +184 -0
- package/dist/lib/regression/docker-helpers.js.map +1 -0
- package/oclif.manifest.json +1356 -509
- package/package.json +22 -17
- package/regression-compose/docker-compose.bacpac-standalone.yml +109 -0
- package/regression-compose/docker-compose.standalone.yml +50 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for `mj test regression *` subcommands.
|
|
3
|
+
*
|
|
4
|
+
* The CLI commands themselves are thin oclif wrappers — they just spawn
|
|
5
|
+
* `docker compose` / `bash` with the right flags. All the wiring (path
|
|
6
|
+
* resolution, profile selection, error reporting) lives here so the same
|
|
7
|
+
* conventions apply across every subcommand.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from 'node:child_process';
|
|
10
|
+
import { existsSync } from 'node:fs';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
export const REGRESSION_DIR = 'docker/regression';
|
|
14
|
+
export const COMPOSE_FILE = `${REGRESSION_DIR}/docker-compose.test.yml`;
|
|
15
|
+
export const BACPAC_OVERLAY = `${REGRESSION_DIR}/docker-compose.bacpac.yml`;
|
|
16
|
+
export const STANDALONE_COMPOSE = `${REGRESSION_DIR}/docker-compose.standalone.yml`;
|
|
17
|
+
export const BACPAC_STANDALONE_COMPOSE = `${REGRESSION_DIR}/docker-compose.bacpac-standalone.yml`;
|
|
18
|
+
/**
|
|
19
|
+
* Package root of @memberjunction/cli (resolved from this compiled module at
|
|
20
|
+
* dist/lib/regression/docker-helpers.js → up 3). Used to locate compose assets
|
|
21
|
+
* bundled into the published package for external (no-monorepo) use.
|
|
22
|
+
*/
|
|
23
|
+
const PKG_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a standalone compose file. Prefers the monorepo copy (cwd-relative
|
|
26
|
+
* `docker/regression/<name>`); falls back to the copy bundled into this CLI
|
|
27
|
+
* package at build time (`<pkg>/regression-compose/<name>`) so external users
|
|
28
|
+
* who only `npm i -g @memberjunction/cli` still have it. Returns the first path
|
|
29
|
+
* that exists, or the bundled path (so the caller can surface a clear error).
|
|
30
|
+
*/
|
|
31
|
+
export function resolveStandaloneCompose(monorepoRelPath) {
|
|
32
|
+
const monorepo = path.resolve(monorepoRelPath);
|
|
33
|
+
if (existsSync(monorepo))
|
|
34
|
+
return monorepo;
|
|
35
|
+
const bundled = path.join(PKG_ROOT, 'regression-compose', path.basename(monorepoRelPath));
|
|
36
|
+
return existsSync(bundled) ? bundled : monorepo;
|
|
37
|
+
}
|
|
38
|
+
export const ENV_FILE = `${REGRESSION_DIR}/.env.test`;
|
|
39
|
+
export const TARGETS_DIR = `${REGRESSION_DIR}/targets`;
|
|
40
|
+
export const LOAD_TARGET_SCRIPT = `${REGRESSION_DIR}/scripts/load-target-profile.cjs`;
|
|
41
|
+
export const GEN_FORMS_SCRIPT = `${REGRESSION_DIR}/gen-forms.sh`;
|
|
42
|
+
export const RESULTS_DIR = `${REGRESSION_DIR}/test-results`;
|
|
43
|
+
export const INLINE_REPORT_SCRIPT = `${REGRESSION_DIR}/scripts/inline-report.cjs`;
|
|
44
|
+
/**
|
|
45
|
+
* The pinned runner image tag used when `init` (and future external invocations)
|
|
46
|
+
* shell out to `docker run memberjunction/agentic-test-runner …`. Kept here so
|
|
47
|
+
* a single bump updates every CLI command that consumes the image. The
|
|
48
|
+
* version is pinned to the most recent release that includes Phase 8.
|
|
49
|
+
*/
|
|
50
|
+
export const AGENTIC_TEST_RUNNER_IMAGE = 'memberjunction/agentic-test-runner:latest';
|
|
51
|
+
/**
|
|
52
|
+
* Verify the current working directory is the MJ monorepo root. If it isn't,
|
|
53
|
+
* print a helpful message and exit. Phase 4 still requires the user to be in
|
|
54
|
+
* the monorepo; Phase 8 will publish the docker image and lift this guard.
|
|
55
|
+
*/
|
|
56
|
+
export function requireMonorepoRoot() {
|
|
57
|
+
if (!existsSync(COMPOSE_FILE)) {
|
|
58
|
+
process.stderr.write(`✗ Expected to find ${COMPOSE_FILE} relative to the current directory.\n` +
|
|
59
|
+
` 'mj test regression *' commands must be run from the MemberJunction\n` +
|
|
60
|
+
` monorepo root. (Phase 8 will lift this requirement by publishing the\n` +
|
|
61
|
+
` test-runner image; for now, cd into the MJ repo first.)\n`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Soft check — returns true when there's an MJ monorepo at-or-above cwd.
|
|
67
|
+
* Used by commands (compare, up, export, remote) to pick monorepo-relative
|
|
68
|
+
* paths over external/published-image paths. Unlike `requireMonorepoRoot()`,
|
|
69
|
+
* this does NOT exit on failure.
|
|
70
|
+
*
|
|
71
|
+
* The sentinel is the regression base compose file: it lives in every
|
|
72
|
+
* monorepo checkout and is never present in an external `npm i -g` install.
|
|
73
|
+
*/
|
|
74
|
+
export function isInsideMonorepo(startDir = process.cwd()) {
|
|
75
|
+
let dir = path.resolve(startDir);
|
|
76
|
+
const root = path.parse(dir).root;
|
|
77
|
+
while (dir !== root) {
|
|
78
|
+
if (existsSync(path.join(dir, COMPOSE_FILE)))
|
|
79
|
+
return true;
|
|
80
|
+
dir = path.dirname(dir);
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
/** Returns true when `<cwd>/<ENV_FILE>` exists (e.g. user copied .env.test.example). */
|
|
85
|
+
export function envFileExists() {
|
|
86
|
+
return existsSync(ENV_FILE);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Spawn a child process inheriting stdio. Resolves with the exit code.
|
|
90
|
+
* The promise NEVER rejects on a non-zero exit code — callers inspect the
|
|
91
|
+
* resolved number and propagate it to the user.
|
|
92
|
+
*/
|
|
93
|
+
export function spawnInherit(command, args, options = {}) {
|
|
94
|
+
return new Promise((resolve) => {
|
|
95
|
+
const child = spawn(command, args, {
|
|
96
|
+
stdio: 'inherit',
|
|
97
|
+
...options,
|
|
98
|
+
});
|
|
99
|
+
child.on('exit', (code) => resolve(code ?? 1));
|
|
100
|
+
child.on('error', (err) => {
|
|
101
|
+
process.stderr.write(`✗ failed to spawn ${command}: ${err.message}\n`);
|
|
102
|
+
resolve(1);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Capture stdout from a child process (stderr inherited so errors surface).
|
|
108
|
+
* Resolves with { code, stdout }. Used by the remote subcommand to read the
|
|
109
|
+
* target-profile loader's JSON output without printing it to the user.
|
|
110
|
+
*/
|
|
111
|
+
export function spawnCapture(command, args, options = {}) {
|
|
112
|
+
return new Promise((resolve) => {
|
|
113
|
+
const child = spawn(command, args, {
|
|
114
|
+
stdio: ['inherit', 'pipe', 'inherit'],
|
|
115
|
+
...options,
|
|
116
|
+
});
|
|
117
|
+
let stdout = '';
|
|
118
|
+
child.stdout?.setEncoding('utf8');
|
|
119
|
+
child.stdout?.on('data', (chunk) => {
|
|
120
|
+
stdout += chunk;
|
|
121
|
+
});
|
|
122
|
+
child.on('exit', (code) => resolve({ code: code ?? 1, stdout }));
|
|
123
|
+
child.on('error', (err) => {
|
|
124
|
+
process.stderr.write(`✗ failed to spawn ${command}: ${err.message}\n`);
|
|
125
|
+
resolve({ code: 1, stdout: '' });
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Build the base `docker compose -f <file> --env-file <file>` argument list.
|
|
131
|
+
* Optionally prepends a profile and additional overlay files (Mode D).
|
|
132
|
+
*
|
|
133
|
+
* Overlays are passed as additional `-f` flags AFTER the base compose file —
|
|
134
|
+
* compose merges them in order, so later overlays override earlier ones.
|
|
135
|
+
* Relative paths inside an overlay resolve against the FIRST `-f` file's
|
|
136
|
+
* directory (the base compose file at `docker/regression/`), NOT against the
|
|
137
|
+
* overlay's own location.
|
|
138
|
+
*/
|
|
139
|
+
export function dockerComposeArgs(profile, extra = [], overlays = []) {
|
|
140
|
+
const args = ['compose', '-f', COMPOSE_FILE];
|
|
141
|
+
for (const overlay of overlays) {
|
|
142
|
+
args.push('-f', overlay);
|
|
143
|
+
}
|
|
144
|
+
if (envFileExists()) {
|
|
145
|
+
args.push('--env-file', ENV_FILE);
|
|
146
|
+
}
|
|
147
|
+
if (profile) {
|
|
148
|
+
args.push('--profile', profile);
|
|
149
|
+
}
|
|
150
|
+
return args.concat(extra);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Resolve a target-profile argument to an absolute path. Accepts:
|
|
154
|
+
* - "staging-mj" → docker/regression/targets/staging-mj.target.json
|
|
155
|
+
* - "staging-mj.target.json" → docker/regression/targets/staging-mj.target.json
|
|
156
|
+
* - "./my/elsewhere.target.json" → ./my/elsewhere.target.json (passthrough)
|
|
157
|
+
* - absolute path → unchanged
|
|
158
|
+
*/
|
|
159
|
+
export function resolveTargetPath(input) {
|
|
160
|
+
if (path.isAbsolute(input))
|
|
161
|
+
return input;
|
|
162
|
+
if (input.includes('/'))
|
|
163
|
+
return path.resolve(input);
|
|
164
|
+
const withSuffix = input.endsWith('.target.json') ? input : `${input}.target.json`;
|
|
165
|
+
return path.resolve(TARGETS_DIR, withSuffix);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Build a `docker run …` argument list for the published image (external,
|
|
169
|
+
* no-monorepo path). Mounts are [hostPath, containerPath] pairs; envFile is
|
|
170
|
+
* injected with `--env-file`; `host.docker.internal` is always mapped so a DB
|
|
171
|
+
* published on the host is reachable on Linux too.
|
|
172
|
+
*/
|
|
173
|
+
export function dockerRunArgs(image, subArgs, opts = {}) {
|
|
174
|
+
const args = ['run', '--rm', '--add-host', 'host.docker.internal:host-gateway'];
|
|
175
|
+
if (opts.envFile && existsSync(opts.envFile)) {
|
|
176
|
+
args.push('--env-file', opts.envFile);
|
|
177
|
+
}
|
|
178
|
+
for (const [hostPath, containerPath] of opts.mounts ?? []) {
|
|
179
|
+
args.push('-v', `${hostPath}:${containerPath}`);
|
|
180
|
+
}
|
|
181
|
+
args.push(image, ...subArgs);
|
|
182
|
+
return args;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=docker-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-helpers.js","sourceRoot":"","sources":["../../../src/lib/regression/docker-helpers.ts"],"names":[],"mappings":"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"}
|