@memberjunction/cli 6.1.4 → 6.2.0-edge.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/README.md +18 -7
- package/dist/baseline/cli-helpers.d.ts +4 -0
- package/dist/baseline/cli-helpers.d.ts.map +1 -1
- package/dist/baseline/cli-helpers.js +18 -10
- package/dist/baseline/cli-helpers.js.map +1 -1
- package/dist/baseline/comparator.d.ts +5 -3
- package/dist/baseline/comparator.d.ts.map +1 -1
- package/dist/baseline/comparator.js +142 -138
- package/dist/baseline/comparator.js.map +1 -1
- package/dist/baseline/connection.d.ts +8 -6
- package/dist/baseline/connection.d.ts.map +1 -1
- package/dist/baseline/connection.js +16 -12
- package/dist/baseline/connection.js.map +1 -1
- package/dist/baseline/data-dumper.d.ts +7 -3
- package/dist/baseline/data-dumper.d.ts.map +1 -1
- package/dist/baseline/data-dumper.js +33 -25
- package/dist/baseline/data-dumper.js.map +1 -1
- package/dist/baseline/emitter.d.ts +5 -3
- package/dist/baseline/emitter.d.ts.map +1 -1
- package/dist/baseline/emitter.js +114 -110
- package/dist/baseline/emitter.js.map +1 -1
- package/dist/baseline/index.d.ts +7 -7
- package/dist/baseline/index.d.ts.map +1 -1
- package/dist/baseline/index.js +7 -7
- package/dist/baseline/index.js.map +1 -1
- package/dist/baseline/introspector-mssql.d.ts +2 -0
- package/dist/baseline/introspector-mssql.d.ts.map +1 -1
- package/dist/baseline/introspector-mssql.js +68 -64
- package/dist/baseline/introspector-mssql.js.map +1 -1
- package/dist/baseline/introspector-postgres.d.ts +2 -0
- package/dist/baseline/introspector-postgres.d.ts.map +1 -1
- package/dist/baseline/introspector-postgres.js +34 -30
- package/dist/baseline/introspector-postgres.js.map +1 -1
- package/dist/baseline/report.d.ts +4 -0
- package/dist/baseline/report.d.ts.map +1 -1
- package/dist/baseline/report.js +25 -17
- package/dist/baseline/report.js.map +1 -1
- package/dist/baseline/types.d.ts +71 -71
- package/dist/baseline/util.d.ts +54 -6
- package/dist/baseline/util.d.ts.map +1 -1
- package/dist/baseline/util.js +112 -36
- package/dist/baseline/util.js.map +1 -1
- package/dist/commands/agent/init.d.ts +23 -0
- package/dist/commands/agent/init.d.ts.map +1 -0
- package/dist/commands/agent/init.js +222 -0
- package/dist/commands/agent/init.js.map +1 -0
- package/dist/commands/ai/actions/list.js +7 -7
- package/dist/commands/ai/actions/run.js +7 -7
- package/dist/commands/ai/agents/list.js +7 -7
- package/dist/commands/ai/agents/run.js +9 -9
- package/dist/commands/ai/audit/agent-run.js +7 -7
- package/dist/commands/ai/prompts/run.js +7 -7
- package/dist/commands/app/check-updates.js +5 -5
- package/dist/commands/app/disable.js +2 -2
- package/dist/commands/app/enable.js +2 -2
- package/dist/commands/app/info.js +2 -2
- package/dist/commands/app/install.js +2 -2
- package/dist/commands/app/list.js +2 -2
- package/dist/commands/app/remove.js +4 -4
- package/dist/commands/app/upgrade.js +2 -2
- package/dist/commands/artifacts/reclassify.js +2 -2
- package/dist/commands/baseline/build.js +31 -31
- package/dist/commands/baseline/build.js.map +1 -1
- package/dist/commands/baseline/compare.js +36 -36
- package/dist/commands/baseline/roundtrip.js +56 -54
- package/dist/commands/baseline/roundtrip.js.map +1 -1
- package/dist/commands/bundle/index.js +4 -4
- package/dist/commands/clean/index.js +3 -3
- package/dist/commands/codegen/manifest.d.ts +2 -0
- package/dist/commands/codegen/manifest.d.ts.map +1 -1
- package/dist/commands/codegen/manifest.js +8 -4
- package/dist/commands/codegen/manifest.js.map +1 -1
- package/dist/commands/dev/workspace/index.d.ts +2 -0
- package/dist/commands/dev/workspace/index.d.ts.map +1 -1
- package/dist/commands/dev/workspace/index.js +8 -4
- package/dist/commands/dev/workspace/index.js.map +1 -1
- package/dist/commands/doctor/index.d.ts +6 -4
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +43 -18
- package/dist/commands/doctor/index.js.map +1 -1
- package/dist/commands/install/claude.d.ts +2 -0
- package/dist/commands/install/claude.d.ts.map +1 -1
- package/dist/commands/install/claude.js +11 -7
- package/dist/commands/install/claude.js.map +1 -1
- package/dist/commands/install/index.js +3 -3
- package/dist/commands/migrate/convert.d.ts +21 -0
- package/dist/commands/migrate/convert.d.ts.map +1 -1
- package/dist/commands/migrate/convert.js +22 -6
- package/dist/commands/migrate/convert.js.map +1 -1
- package/dist/commands/migrate/create.js +2 -2
- package/dist/commands/migrate/index.js +16 -16
- package/dist/commands/sync/file-reset.js +2 -2
- package/dist/commands/sync/init.js +3 -3
- package/dist/commands/test/compare.js +6 -6
- package/dist/commands/test/history.js +6 -6
- package/dist/commands/test/list.js +6 -6
- package/dist/commands/test/regression/build.js +5 -5
- package/dist/commands/test/regression/compare.js +3 -3
- package/dist/commands/test/regression/down.js +4 -4
- package/dist/commands/test/regression/export.js +4 -4
- package/dist/commands/test/regression/gen-forms.js +3 -3
- package/dist/commands/test/regression/remote.js +10 -10
- package/dist/commands/test/regression/up.js +6 -6
- package/dist/commands/test/run.js +6 -6
- package/dist/commands/test/scripts.d.ts +13 -0
- package/dist/commands/test/scripts.d.ts.map +1 -0
- package/dist/commands/test/scripts.js +50 -0
- package/dist/commands/test/scripts.js.map +1 -0
- package/dist/commands/test/suite.js +6 -6
- package/dist/commands/test/validate.js +6 -6
- package/dist/commands/translate-sql/index.js +25 -25
- package/dist/commands/update/claude.js +7 -7
- package/dist/commands/usage.js +4 -4
- package/dist/config.d.ts +175 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -9
- package/dist/config.js.map +1 -1
- package/dist/hooks/postrun.js +2 -2
- package/dist/hooks/prerun.js +2 -2
- package/dist/hooks/prerun.js.map +1 -1
- package/dist/init-templates/citizen-builder/.agents/skills/new-agent/SKILL.md +66 -0
- package/dist/init-templates/citizen-builder/.agents/skills/package-agent/SKILL.md +69 -0
- package/dist/init-templates/citizen-builder/.agents/skills/test-agent/SKILL.md +61 -0
- package/dist/init-templates/citizen-builder/.claude/skills/new-agent/SKILL.md +66 -0
- package/dist/init-templates/citizen-builder/.claude/skills/package-agent/SKILL.md +69 -0
- package/dist/init-templates/citizen-builder/.claude/skills/test-agent/SKILL.md +61 -0
- package/dist/init-templates/citizen-builder/.env.example +30 -0
- package/dist/init-templates/citizen-builder/AGENTS.md +331 -0
- package/dist/init-templates/citizen-builder/README.md +259 -0
- package/dist/init-templates/citizen-builder/docker/Dockerfile +16 -0
- package/dist/init-templates/citizen-builder/docker-compose.yml +59 -0
- package/dist/init-templates/citizen-builder/docs/ENTERPRISE_ORG_SETUP.md +73 -0
- package/dist/init-templates/citizen-builder/docs/PROMOTION_GUIDE.md +70 -0
- package/dist/init-templates/citizen-builder/metadata/.mj-sync.json +7 -0
- package/dist/init-templates/citizen-builder/metadata/agents/.customer-insight-agent.json +55 -0
- package/dist/init-templates/citizen-builder/metadata/agents/.mj-sync.json +45 -0
- package/dist/init-templates/citizen-builder/metadata/prompts/.customer-insight-prompt.json +15 -0
- package/dist/init-templates/citizen-builder/metadata/prompts/.mj-sync.json +45 -0
- package/dist/init-templates/citizen-builder/metadata/prompts/templates/customer-insight.template.md +18 -0
- package/dist/init-templates/citizen-builder/scripts/bootstrap.sh +47 -0
- package/dist/init-templates/citizen-builder/scripts/docker-entrypoint.sh +184 -0
- package/dist/init-templates/citizen-builder/scripts/generate-capabilities.sh +74 -0
- package/dist/init-templates/citizen-builder/scripts/query-run-history.sh +34 -0
- package/dist/init-templates/citizen-builder/scripts/sync-metadata.sh +14 -0
- package/dist/init-templates/remote-mj/README.md +4 -4
- package/dist/lib/claude-pack/ManagedBlockEditor.d.ts +6 -0
- package/dist/lib/claude-pack/ManagedBlockEditor.d.ts.map +1 -1
- package/dist/lib/claude-pack/ManagedBlockEditor.js +18 -6
- package/dist/lib/claude-pack/ManagedBlockEditor.js.map +1 -1
- package/dist/lib/claude-pack/PackFetcher.d.ts +8 -3
- package/dist/lib/claude-pack/PackFetcher.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackFetcher.js +26 -18
- package/dist/lib/claude-pack/PackFetcher.js.map +1 -1
- package/dist/lib/claude-pack/PackInstaller.d.ts +6 -2
- package/dist/lib/claude-pack/PackInstaller.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackInstaller.js +19 -13
- package/dist/lib/claude-pack/PackInstaller.js.map +1 -1
- package/dist/lib/claude-pack/PackMerger.d.ts +8 -0
- package/dist/lib/claude-pack/PackMerger.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackMerger.js +63 -57
- package/dist/lib/claude-pack/PackMerger.js.map +1 -1
- package/dist/lib/claude-pack/PackOutputFormatter.d.ts +4 -0
- package/dist/lib/claude-pack/PackOutputFormatter.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackOutputFormatter.js +10 -2
- package/dist/lib/claude-pack/PackOutputFormatter.js.map +1 -1
- package/dist/lib/claude-pack/PackPaths.d.ts +12 -0
- package/dist/lib/claude-pack/PackPaths.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackPaths.js +31 -7
- package/dist/lib/claude-pack/PackPaths.js.map +1 -1
- package/dist/lib/claude-pack/PackTypes.d.ts +18 -14
- package/dist/lib/claude-pack/PackTypes.d.ts.map +1 -1
- package/dist/lib/claude-pack/PackTypes.js +11 -3
- package/dist/lib/claude-pack/PackTypes.js.map +1 -1
- package/dist/lib/claude-pack/SettingsMerger.d.ts +10 -0
- package/dist/lib/claude-pack/SettingsMerger.d.ts.map +1 -1
- package/dist/lib/claude-pack/SettingsMerger.js +36 -16
- package/dist/lib/claude-pack/SettingsMerger.js.map +1 -1
- package/dist/lib/cli-plugins.d.ts +2 -0
- package/dist/lib/cli-plugins.d.ts.map +1 -1
- package/dist/lib/cli-plugins.js +8 -4
- package/dist/lib/cli-plugins.js.map +1 -1
- package/dist/lib/db-preflight.d.ts +2 -0
- package/dist/lib/db-preflight.d.ts.map +1 -1
- package/dist/lib/db-preflight.js +12 -8
- package/dist/lib/db-preflight.js.map +1 -1
- package/dist/lib/db-version.d.ts +2 -0
- package/dist/lib/db-version.d.ts.map +1 -1
- package/dist/lib/db-version.js +5 -1
- package/dist/lib/db-version.js.map +1 -1
- package/dist/lib/derived-usage.d.ts +14 -8
- package/dist/lib/derived-usage.d.ts.map +1 -1
- package/dist/lib/derived-usage.js +30 -18
- package/dist/lib/derived-usage.js.map +1 -1
- package/dist/lib/domain-profiles.d.ts +4 -2
- package/dist/lib/domain-profiles.d.ts.map +1 -1
- package/dist/lib/domain-profiles.js +53 -49
- package/dist/lib/domain-profiles.js.map +1 -1
- package/dist/lib/domain-usage-command.js +4 -4
- package/dist/lib/dynamic-packages.d.ts +4 -2
- package/dist/lib/dynamic-packages.d.ts.map +1 -1
- package/dist/lib/dynamic-packages.js +9 -5
- package/dist/lib/dynamic-packages.js.map +1 -1
- package/dist/lib/format-compat.d.ts +9 -7
- package/dist/lib/format-compat.d.ts.map +1 -1
- package/dist/lib/format-compat.js +12 -8
- package/dist/lib/format-compat.js.map +1 -1
- package/dist/lib/interactive-guard.d.ts +16 -0
- package/dist/lib/interactive-guard.d.ts.map +1 -1
- package/dist/lib/interactive-guard.js +18 -6
- package/dist/lib/interactive-guard.js.map +1 -1
- package/dist/lib/migration-fetch.d.ts +16 -4
- package/dist/lib/migration-fetch.d.ts.map +1 -1
- package/dist/lib/migration-fetch.js +30 -18
- package/dist/lib/migration-fetch.js.map +1 -1
- package/dist/lib/regression/docker-helpers.d.ts +24 -0
- package/dist/lib/regression/docker-helpers.d.ts.map +1 -1
- package/dist/lib/regression/docker-helpers.js +46 -10
- package/dist/lib/regression/docker-helpers.js.map +1 -1
- package/dist/lib/usage-render.d.ts +6 -0
- package/dist/lib/usage-render.d.ts.map +1 -1
- package/dist/lib/usage-render.js +15 -3
- package/dist/lib/usage-render.js.map +1 -1
- package/dist/translate-sql/groundTruth.d.ts +3 -3
- package/dist/translate-sql/groundTruth.js +40 -40
- package/dist/translate-sql/reportGenerator.d.ts +7 -7
- package/dist/translate-sql/reportGenerator.js +18 -18
- package/dist/translate-sql/ruleTranslator.d.ts +3 -3
- package/dist/translate-sql/ruleTranslator.js +8 -8
- package/dist/translate-sql/ruleTranslator.js.map +1 -1
- package/dist/utils/open-app-context.d.ts +21 -0
- package/dist/utils/open-app-context.d.ts.map +1 -1
- package/dist/utils/open-app-context.js +26 -10
- package/dist/utils/open-app-context.js.map +1 -1
- package/oclif.manifest.json +1216 -1058
- package/package.json +22 -22
|
@@ -28,13 +28,17 @@ const PKG_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'
|
|
|
28
28
|
* who only `npm i -g @memberjunction/cli` still have it. Returns the first path
|
|
29
29
|
* that exists, or the bundled path (so the caller can surface a clear error).
|
|
30
30
|
*/
|
|
31
|
-
export function
|
|
31
|
+
export function ResolveStandaloneCompose(monorepoRelPath) {
|
|
32
32
|
const monorepo = path.resolve(monorepoRelPath);
|
|
33
33
|
if (existsSync(monorepo))
|
|
34
34
|
return monorepo;
|
|
35
35
|
const bundled = path.join(PKG_ROOT, 'regression-compose', path.basename(monorepoRelPath));
|
|
36
36
|
return existsSync(bundled) ? bundled : monorepo;
|
|
37
37
|
}
|
|
38
|
+
/** @deprecated Use {@link ResolveStandaloneCompose}. */
|
|
39
|
+
export function resolveStandaloneCompose(monorepoRelPath) {
|
|
40
|
+
return ResolveStandaloneCompose(monorepoRelPath);
|
|
41
|
+
}
|
|
38
42
|
export const ENV_FILE = `${REGRESSION_DIR}/.env.test`;
|
|
39
43
|
export const TARGETS_DIR = `${REGRESSION_DIR}/targets`;
|
|
40
44
|
export const LOAD_TARGET_SCRIPT = `${REGRESSION_DIR}/scripts/load-target-profile.cjs`;
|
|
@@ -53,7 +57,7 @@ export const AGENTIC_TEST_RUNNER_IMAGE = 'memberjunction/agentic-test-runner:lat
|
|
|
53
57
|
* print a helpful message and exit. Phase 4 still requires the user to be in
|
|
54
58
|
* the monorepo; Phase 8 will publish the docker image and lift this guard.
|
|
55
59
|
*/
|
|
56
|
-
export function
|
|
60
|
+
export function RequireMonorepoRoot() {
|
|
57
61
|
if (!existsSync(COMPOSE_FILE)) {
|
|
58
62
|
process.stderr.write(`✗ Expected to find ${COMPOSE_FILE} relative to the current directory.\n` +
|
|
59
63
|
` 'mj test regression *' commands must be run from the MemberJunction\n` +
|
|
@@ -62,6 +66,10 @@ export function requireMonorepoRoot() {
|
|
|
62
66
|
process.exit(1);
|
|
63
67
|
}
|
|
64
68
|
}
|
|
69
|
+
/** @deprecated Use {@link RequireMonorepoRoot}. */
|
|
70
|
+
export function requireMonorepoRoot() {
|
|
71
|
+
return RequireMonorepoRoot();
|
|
72
|
+
}
|
|
65
73
|
/**
|
|
66
74
|
* Soft check — returns true when there's an MJ monorepo at-or-above cwd.
|
|
67
75
|
* Used by commands (compare, up, export, remote) to pick monorepo-relative
|
|
@@ -71,7 +79,7 @@ export function requireMonorepoRoot() {
|
|
|
71
79
|
* The sentinel is the regression base compose file: it lives in every
|
|
72
80
|
* monorepo checkout and is never present in an external `npm i -g` install.
|
|
73
81
|
*/
|
|
74
|
-
export function
|
|
82
|
+
export function IsInsideMonorepo(startDir = process.cwd()) {
|
|
75
83
|
let dir = path.resolve(startDir);
|
|
76
84
|
const root = path.parse(dir).root;
|
|
77
85
|
while (dir !== root) {
|
|
@@ -81,16 +89,24 @@ export function isInsideMonorepo(startDir = process.cwd()) {
|
|
|
81
89
|
}
|
|
82
90
|
return false;
|
|
83
91
|
}
|
|
92
|
+
/** @deprecated Use {@link IsInsideMonorepo}. */
|
|
93
|
+
export function isInsideMonorepo(startDir = process.cwd()) {
|
|
94
|
+
return IsInsideMonorepo(startDir);
|
|
95
|
+
}
|
|
84
96
|
/** Returns true when `<cwd>/<ENV_FILE>` exists (e.g. user copied .env.test.example). */
|
|
85
|
-
export function
|
|
97
|
+
export function EnvFileExists() {
|
|
86
98
|
return existsSync(ENV_FILE);
|
|
87
99
|
}
|
|
100
|
+
/** @deprecated Use {@link EnvFileExists}. */
|
|
101
|
+
export function envFileExists() {
|
|
102
|
+
return EnvFileExists();
|
|
103
|
+
}
|
|
88
104
|
/**
|
|
89
105
|
* Spawn a child process inheriting stdio. Resolves with the exit code.
|
|
90
106
|
* The promise NEVER rejects on a non-zero exit code — callers inspect the
|
|
91
107
|
* resolved number and propagate it to the user.
|
|
92
108
|
*/
|
|
93
|
-
export function
|
|
109
|
+
export function SpawnInherit(command, args, options = {}) {
|
|
94
110
|
return new Promise((resolve) => {
|
|
95
111
|
const child = spawn(command, args, {
|
|
96
112
|
stdio: 'inherit',
|
|
@@ -103,12 +119,16 @@ export function spawnInherit(command, args, options = {}) {
|
|
|
103
119
|
});
|
|
104
120
|
});
|
|
105
121
|
}
|
|
122
|
+
/** @deprecated Use {@link SpawnInherit}. */
|
|
123
|
+
export function spawnInherit(command, args, options = {}) {
|
|
124
|
+
return SpawnInherit(command, args, options);
|
|
125
|
+
}
|
|
106
126
|
/**
|
|
107
127
|
* Capture stdout from a child process (stderr inherited so errors surface).
|
|
108
128
|
* Resolves with { code, stdout }. Used by the remote subcommand to read the
|
|
109
129
|
* target-profile loader's JSON output without printing it to the user.
|
|
110
130
|
*/
|
|
111
|
-
export function
|
|
131
|
+
export function SpawnCapture(command, args, options = {}) {
|
|
112
132
|
return new Promise((resolve) => {
|
|
113
133
|
const child = spawn(command, args, {
|
|
114
134
|
stdio: ['inherit', 'pipe', 'inherit'],
|
|
@@ -126,6 +146,10 @@ export function spawnCapture(command, args, options = {}) {
|
|
|
126
146
|
});
|
|
127
147
|
});
|
|
128
148
|
}
|
|
149
|
+
/** @deprecated Use {@link SpawnCapture}. */
|
|
150
|
+
export function spawnCapture(command, args, options = {}) {
|
|
151
|
+
return SpawnCapture(command, args, options);
|
|
152
|
+
}
|
|
129
153
|
/**
|
|
130
154
|
* Build the base `docker compose -f <file> --env-file <file>` argument list.
|
|
131
155
|
* Optionally prepends a profile and additional overlay files (Mode D).
|
|
@@ -136,12 +160,12 @@ export function spawnCapture(command, args, options = {}) {
|
|
|
136
160
|
* directory (the base compose file at `docker/regression/`), NOT against the
|
|
137
161
|
* overlay's own location.
|
|
138
162
|
*/
|
|
139
|
-
export function
|
|
163
|
+
export function DockerComposeArgs(profile, extra = [], overlays = []) {
|
|
140
164
|
const args = ['compose', '-f', COMPOSE_FILE];
|
|
141
165
|
for (const overlay of overlays) {
|
|
142
166
|
args.push('-f', overlay);
|
|
143
167
|
}
|
|
144
|
-
if (
|
|
168
|
+
if (EnvFileExists()) {
|
|
145
169
|
args.push('--env-file', ENV_FILE);
|
|
146
170
|
}
|
|
147
171
|
if (profile) {
|
|
@@ -149,6 +173,10 @@ export function dockerComposeArgs(profile, extra = [], overlays = []) {
|
|
|
149
173
|
}
|
|
150
174
|
return args.concat(extra);
|
|
151
175
|
}
|
|
176
|
+
/** @deprecated Use {@link DockerComposeArgs}. */
|
|
177
|
+
export function dockerComposeArgs(profile, extra = [], overlays = []) {
|
|
178
|
+
return DockerComposeArgs(profile, extra, overlays);
|
|
179
|
+
}
|
|
152
180
|
/**
|
|
153
181
|
* Resolve a target-profile argument to an absolute path. Accepts:
|
|
154
182
|
* - "staging-mj" → docker/regression/targets/staging-mj.target.json
|
|
@@ -156,7 +184,7 @@ export function dockerComposeArgs(profile, extra = [], overlays = []) {
|
|
|
156
184
|
* - "./my/elsewhere.target.json" → ./my/elsewhere.target.json (passthrough)
|
|
157
185
|
* - absolute path → unchanged
|
|
158
186
|
*/
|
|
159
|
-
export function
|
|
187
|
+
export function ResolveTargetPath(input) {
|
|
160
188
|
if (path.isAbsolute(input))
|
|
161
189
|
return input;
|
|
162
190
|
if (input.includes('/'))
|
|
@@ -164,13 +192,17 @@ export function resolveTargetPath(input) {
|
|
|
164
192
|
const withSuffix = input.endsWith('.target.json') ? input : `${input}.target.json`;
|
|
165
193
|
return path.resolve(TARGETS_DIR, withSuffix);
|
|
166
194
|
}
|
|
195
|
+
/** @deprecated Use {@link ResolveTargetPath}. */
|
|
196
|
+
export function resolveTargetPath(input) {
|
|
197
|
+
return ResolveTargetPath(input);
|
|
198
|
+
}
|
|
167
199
|
/**
|
|
168
200
|
* Build a `docker run …` argument list for the published image (external,
|
|
169
201
|
* no-monorepo path). Mounts are [hostPath, containerPath] pairs; envFile is
|
|
170
202
|
* injected with `--env-file`; `host.docker.internal` is always mapped so a DB
|
|
171
203
|
* published on the host is reachable on Linux too.
|
|
172
204
|
*/
|
|
173
|
-
export function
|
|
205
|
+
export function DockerRunArgs(image, subArgs, opts = {}) {
|
|
174
206
|
const args = ['run', '--rm', '--add-host', 'host.docker.internal:host-gateway'];
|
|
175
207
|
if (opts.envFile && existsSync(opts.envFile)) {
|
|
176
208
|
args.push('--env-file', opts.envFile);
|
|
@@ -181,4 +213,8 @@ export function dockerRunArgs(image, subArgs, opts = {}) {
|
|
|
181
213
|
args.push(image, ...subArgs);
|
|
182
214
|
return args;
|
|
183
215
|
}
|
|
216
|
+
/** @deprecated Use {@link DockerRunArgs}. */
|
|
217
|
+
export function dockerRunArgs(image, subArgs, opts = {}) {
|
|
218
|
+
return DockerRunArgs(image, subArgs, opts);
|
|
219
|
+
}
|
|
184
220
|
//# sourceMappingURL=docker-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-helpers.js","sourceRoot":"","sources":["../../../src/lib/regression/docker-helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docker-helpers.js","sourceRoot":"","sources":["../../../src/lib/regression/docker-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,cAAc,0BAA0B,CAAC;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,cAAc,4BAA4B,CAAC;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,cAAc,gCAAgC,CAAC;AACpF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,cAAc,uCAAuC,CAAC;AAElG;;;;GAIG;AACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE9F;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,eAAuB;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1F,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,wBAAwB,CAAC,eAAuB;IAC9D,OAAO,wBAAwB,CAAC,eAAe,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,cAAc,YAAY,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,cAAc,UAAU,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,cAAc,kCAAkC,CAAC;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,cAAc,eAAe,CAAC;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,cAAc,eAAe,CAAC;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,cAAc,4BAA4B,CAAC;AAElF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,2CAA2C,CAAC;AAErF;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,YAAY,uCAAuC;YACvE,yEAAyE;YACzE,0EAA0E;YAC1E,6DAA6D,CAChE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,mBAAmB;IACjC,OAAO,mBAAmB,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC/D,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAC/D,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,aAAa;IAC3B,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,UAAwB,EAAE;IAE1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,SAAS;YAChB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,UAAwB,EAAE;IAE1B,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,UAAwB,EAAE;IAE1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;YACrC,GAAG,OAAO;SACX,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACvE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,UAAwB,EAAE;IAE1B,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAgB,EAChB,QAAkB,EAAE,EACpB,WAAqB,EAAE;IAEvB,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,iBAAiB,CAC/B,OAAgB,EAChB,QAAkB,EAAE,EACpB,WAAqB,EAAE;IAEvB,OAAO,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,cAAc,CAAC;IACnF,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,OAAiB,EACjB,OAA+D,EAAE;IAEjE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,mCAAmC,CAAC,CAAC;IAChF,IAAI,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,IAAI,aAAa,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,OAAiB,EACjB,OAA+D,EAAE;IAEjE,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -5,10 +5,16 @@ type LogFn = (message: string) => void;
|
|
|
5
5
|
* {@link SerializeResult} the runtime host uses (single source of truth). For
|
|
6
6
|
* `text`, the caller supplies pre-rendered human lines.
|
|
7
7
|
*/
|
|
8
|
+
export declare function EmitUsage(log: LogFn, format: OutputFormat, result: MJCLIResult, textLines: string[]): void;
|
|
9
|
+
/** @deprecated Use {@link EmitUsage}. */
|
|
8
10
|
export declare function emitUsage(log: LogFn, format: OutputFormat, result: MJCLIResult, textLines: string[]): void;
|
|
9
11
|
/** Human-readable tier-1 domain map. */
|
|
12
|
+
export declare function RenderDomainMap(map: UsageDomainMap): string[];
|
|
13
|
+
/** @deprecated Use {@link RenderDomainMap}. */
|
|
10
14
|
export declare function renderDomainMap(map: UsageDomainMap): string[];
|
|
11
15
|
/** Human-readable tier-2 domain detail. */
|
|
16
|
+
export declare function RenderDomainDetail(detail: UsageDomainDetail): string[];
|
|
17
|
+
/** @deprecated Use {@link RenderDomainDetail}. */
|
|
12
18
|
export declare function renderDomainDetail(detail: UsageDomainDetail): string[];
|
|
13
19
|
export {};
|
|
14
20
|
//# sourceMappingURL=usage-render.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-render.d.ts","sourceRoot":"","sources":["../../src/lib/usage-render.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAoB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/J,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAO1G;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAa7D;AAED,2CAA2C;AAC3C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAsBtE"}
|
|
1
|
+
{"version":3,"file":"usage-render.d.ts","sourceRoot":"","sources":["../../src/lib/usage-render.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAoB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/J,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAO1G;AAED,yCAAyC;AACzC,wBAAgB,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAE1G;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAa7D;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,CAE7D;AAED,2CAA2C;AAC3C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAsBtE;AAED,kDAAkD;AAClD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAEtE"}
|
package/dist/lib/usage-render.js
CHANGED
|
@@ -5,7 +5,7 @@ import { SerializeResult } from '@memberjunction/cli-core';
|
|
|
5
5
|
* {@link SerializeResult} the runtime host uses (single source of truth). For
|
|
6
6
|
* `text`, the caller supplies pre-rendered human lines.
|
|
7
7
|
*/
|
|
8
|
-
export function
|
|
8
|
+
export function EmitUsage(log, format, result, textLines) {
|
|
9
9
|
if (format === 'json' || format === 'md') {
|
|
10
10
|
// Pretty only when a human is watching; a pipe gets one compact line.
|
|
11
11
|
log(SerializeResult(result, format, { pretty: process.stdout.isTTY === true }));
|
|
@@ -14,8 +14,12 @@ export function emitUsage(log, format, result, textLines) {
|
|
|
14
14
|
textLines.forEach((line) => log(line));
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
+
/** @deprecated Use {@link EmitUsage}. */
|
|
18
|
+
export function emitUsage(log, format, result, textLines) {
|
|
19
|
+
return EmitUsage(log, format, result, textLines);
|
|
20
|
+
}
|
|
17
21
|
/** Human-readable tier-1 domain map. */
|
|
18
|
-
export function
|
|
22
|
+
export function RenderDomainMap(map) {
|
|
19
23
|
const lines = [];
|
|
20
24
|
lines.push(chalk.bold('\nmj — command domains'));
|
|
21
25
|
lines.push(chalk.gray(map.guidance) + '\n');
|
|
@@ -29,8 +33,12 @@ export function renderDomainMap(map) {
|
|
|
29
33
|
lines.push(chalk.gray('Next: `mj <domain> usage` for that domain\'s commands, flags, and timeouts.'));
|
|
30
34
|
return lines;
|
|
31
35
|
}
|
|
36
|
+
/** @deprecated Use {@link RenderDomainMap}. */
|
|
37
|
+
export function renderDomainMap(map) {
|
|
38
|
+
return RenderDomainMap(map);
|
|
39
|
+
}
|
|
32
40
|
/** Human-readable tier-2 domain detail. */
|
|
33
|
-
export function
|
|
41
|
+
export function RenderDomainDetail(detail) {
|
|
34
42
|
const lines = [];
|
|
35
43
|
lines.push(chalk.bold(`\nmj ${detail.domain} — commands`));
|
|
36
44
|
if (detail.commands.length === 0) {
|
|
@@ -56,6 +64,10 @@ export function renderDomainDetail(detail) {
|
|
|
56
64
|
}
|
|
57
65
|
return lines;
|
|
58
66
|
}
|
|
67
|
+
/** @deprecated Use {@link RenderDomainDetail}. */
|
|
68
|
+
export function renderDomainDetail(detail) {
|
|
69
|
+
return RenderDomainDetail(detail);
|
|
70
|
+
}
|
|
59
71
|
function formatRuntime(cmd) {
|
|
60
72
|
const r = cmd.runtime;
|
|
61
73
|
const secs = r.typicalSeconds ? `~${r.typicalSeconds}s` : '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-render.js","sourceRoot":"","sources":["../../src/lib/usage-render.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usage-render.js","sourceRoot":"","sources":["../../src/lib/usage-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,15 +3,15 @@ import { DatabasePlatform } from '@memberjunction/core';
|
|
|
3
3
|
* A single translation example pairing source and target SQL.
|
|
4
4
|
*/
|
|
5
5
|
export interface TranslationExample {
|
|
6
|
-
|
|
6
|
+
Source: {
|
|
7
7
|
platform: DatabasePlatform;
|
|
8
8
|
sql: string;
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
Target: {
|
|
11
11
|
platform: DatabasePlatform;
|
|
12
12
|
sql: string;
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
Category: string;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Ground truth translation examples for SQL Server ↔ PostgreSQL.
|
|
@@ -5,75 +5,75 @@
|
|
|
5
5
|
export const GROUND_TRUTH_EXAMPLES = [
|
|
6
6
|
// Identifier quoting
|
|
7
7
|
{
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
Source: { platform: 'sqlserver', sql: "[Status] = 'Active' AND [Name] LIKE 'J%'" },
|
|
9
|
+
Target: { platform: 'postgresql', sql: '"Status" = \'Active\' AND "Name" LIKE \'J%\'' },
|
|
10
|
+
Category: 'identifier-quoting'
|
|
11
11
|
},
|
|
12
12
|
// Boolean literals
|
|
13
13
|
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
Source: { platform: 'sqlserver', sql: "[IsActive] = 1 AND [IsAdmin] = 0" },
|
|
15
|
+
Target: { platform: 'postgresql', sql: '"IsActive" = true AND "IsAdmin" = false' },
|
|
16
|
+
Category: 'boolean-literal'
|
|
17
17
|
},
|
|
18
18
|
// TOP → LIMIT
|
|
19
19
|
{
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
Source: { platform: 'sqlserver', sql: "SELECT TOP 10 [Name], [Email] FROM [__mj].[vwUsers] WHERE [IsActive] = 1 ORDER BY [Name]" },
|
|
21
|
+
Target: { platform: 'postgresql', sql: 'SELECT "Name", "Email" FROM __mj."vwUsers" WHERE "IsActive" = true ORDER BY "Name" LIMIT 10' },
|
|
22
|
+
Category: 'top-to-limit'
|
|
23
23
|
},
|
|
24
24
|
// GETUTCDATE → NOW()
|
|
25
25
|
{
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
Source: { platform: 'sqlserver', sql: "[CreatedAt] > GETUTCDATE() - 30" },
|
|
27
|
+
Target: { platform: 'postgresql', sql: '"CreatedAt" > NOW() - INTERVAL \'30 days\'' },
|
|
28
|
+
Category: 'date-function'
|
|
29
29
|
},
|
|
30
30
|
// ISNULL → COALESCE
|
|
31
31
|
{
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
Source: { platform: 'sqlserver', sql: "ISNULL([MiddleName], '') + ' ' + [LastName]" },
|
|
33
|
+
Target: { platform: 'postgresql', sql: "COALESCE(\"MiddleName\", '') || ' ' || \"LastName\"" },
|
|
34
|
+
Category: 'null-function'
|
|
35
35
|
},
|
|
36
36
|
// String concatenation (+ → ||)
|
|
37
37
|
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
Source: { platform: 'sqlserver', sql: "[FirstName] + ' ' + [LastName]" },
|
|
39
|
+
Target: { platform: 'postgresql', sql: '"FirstName" || \' \' || "LastName"' },
|
|
40
|
+
Category: 'string-concat'
|
|
41
41
|
},
|
|
42
42
|
// CONVERT → CAST
|
|
43
43
|
{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
Source: { platform: 'sqlserver', sql: "CONVERT(NVARCHAR(50), [Price])" },
|
|
45
|
+
Target: { platform: 'postgresql', sql: 'CAST("Price" AS VARCHAR(50))' },
|
|
46
|
+
Category: 'type-conversion'
|
|
47
47
|
},
|
|
48
48
|
// IIF → CASE
|
|
49
49
|
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
Source: { platform: 'sqlserver', sql: "IIF([Status] = 1, 'Active', 'Inactive')" },
|
|
51
|
+
Target: { platform: 'postgresql', sql: "CASE WHEN \"Status\" = true THEN 'Active' ELSE 'Inactive' END" },
|
|
52
|
+
Category: 'conditional'
|
|
53
53
|
},
|
|
54
54
|
// DATEADD → interval arithmetic
|
|
55
55
|
{
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
Source: { platform: 'sqlserver', sql: "DATEADD(day, -7, GETUTCDATE())" },
|
|
57
|
+
Target: { platform: 'postgresql', sql: "NOW() - INTERVAL '7 days'" },
|
|
58
|
+
Category: 'date-arithmetic'
|
|
59
59
|
},
|
|
60
60
|
// DATEDIFF → EXTRACT/date_part
|
|
61
61
|
{
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
Source: { platform: 'sqlserver', sql: "DATEDIFF(day, [StartDate], [EndDate])" },
|
|
63
|
+
Target: { platform: 'postgresql', sql: 'EXTRACT(DAY FROM ("EndDate" - "StartDate"))::integer' },
|
|
64
|
+
Category: 'date-diff'
|
|
65
65
|
},
|
|
66
66
|
// Schema-qualified with brackets
|
|
67
67
|
{
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
Source: { platform: 'sqlserver', sql: "SELECT * FROM [__mj].[vwEntities] WHERE [SchemaName] = '__mj'" },
|
|
69
|
+
Target: { platform: 'postgresql', sql: 'SELECT * FROM __mj."vwEntities" WHERE "SchemaName" = \'__mj\'' },
|
|
70
|
+
Category: 'schema-qualified'
|
|
71
71
|
},
|
|
72
72
|
// Complex WHERE clause
|
|
73
73
|
{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
Source: { platform: 'sqlserver', sql: "[EntityID] IN (SELECT [ID] FROM [__mj].[vwEntities] WHERE [IncludeInAPI] = 1)" },
|
|
75
|
+
Target: { platform: 'postgresql', sql: '"EntityID" IN (SELECT "ID" FROM __mj."vwEntities" WHERE "IncludeInAPI" = true)' },
|
|
76
|
+
Category: 'subquery'
|
|
77
77
|
},
|
|
78
78
|
];
|
|
79
79
|
/**
|
|
@@ -81,13 +81,13 @@ export const GROUND_TRUTH_EXAMPLES = [
|
|
|
81
81
|
*/
|
|
82
82
|
export function BuildGroundTruthPromptSection(from, to, maxExamples = 8) {
|
|
83
83
|
const relevant = GROUND_TRUTH_EXAMPLES
|
|
84
|
-
.filter(e => e.
|
|
84
|
+
.filter(e => e.Source.platform === from && e.Target.platform === to)
|
|
85
85
|
.slice(0, maxExamples);
|
|
86
86
|
if (relevant.length === 0)
|
|
87
87
|
return '';
|
|
88
|
-
const lines = relevant.map((ex, i) => `Example ${i + 1} (${ex.
|
|
89
|
-
` Source (${from}): ${ex.
|
|
90
|
-
` Target (${to}): ${ex.
|
|
88
|
+
const lines = relevant.map((ex, i) => `Example ${i + 1} (${ex.Category}):\n` +
|
|
89
|
+
` Source (${from}): ${ex.Source.sql}\n` +
|
|
90
|
+
` Target (${to}): ${ex.Target.sql}`);
|
|
91
91
|
return `## Translation Examples\n\n${lines.join('\n\n')}`;
|
|
92
92
|
}
|
|
93
93
|
//# sourceMappingURL=groundTruth.js.map
|
|
@@ -5,19 +5,19 @@ import { SQLClassification } from './classifier.js';
|
|
|
5
5
|
*/
|
|
6
6
|
export interface TranslationReportItem {
|
|
7
7
|
/** Source identifier (e.g., "Query: User Activity Report") */
|
|
8
|
-
|
|
8
|
+
Source: string;
|
|
9
9
|
/** The original SQL fragment */
|
|
10
|
-
|
|
10
|
+
OriginalSQL: string;
|
|
11
11
|
/** How the SQL was classified */
|
|
12
|
-
|
|
12
|
+
Classification: SQLClassification;
|
|
13
13
|
/** The translated SQL (null if not translated) */
|
|
14
|
-
|
|
14
|
+
TranslatedSQL: string | null;
|
|
15
15
|
/** Translation method used */
|
|
16
|
-
|
|
16
|
+
Method: 'rule-based' | 'llm' | 'skipped' | 'flagged';
|
|
17
17
|
/** Dialect markers found */
|
|
18
|
-
|
|
18
|
+
Markers: string[];
|
|
19
19
|
/** Any error or note */
|
|
20
|
-
|
|
20
|
+
Note?: string;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Generates a markdown report from translation results.
|
|
@@ -24,45 +24,45 @@ export function GenerateTranslationReport(items, from, to) {
|
|
|
24
24
|
if (summary.ruleBased > 0 || summary.llm > 0) {
|
|
25
25
|
lines.push(`## Translations`);
|
|
26
26
|
lines.push('');
|
|
27
|
-
const translated = items.filter(i => i.
|
|
27
|
+
const translated = items.filter(i => i.Method === 'rule-based' || i.Method === 'llm');
|
|
28
28
|
for (const item of translated) {
|
|
29
|
-
lines.push(`### ${item.
|
|
30
|
-
lines.push(`**Method:** ${item.
|
|
29
|
+
lines.push(`### ${item.Source}`);
|
|
30
|
+
lines.push(`**Method:** ${item.Method} | **Markers:** ${item.Markers.join(', ') || 'none'}`);
|
|
31
31
|
lines.push('');
|
|
32
32
|
lines.push('**Original:**');
|
|
33
33
|
lines.push('```sql');
|
|
34
|
-
lines.push(item.
|
|
34
|
+
lines.push(item.OriginalSQL);
|
|
35
35
|
lines.push('```');
|
|
36
36
|
lines.push('');
|
|
37
37
|
lines.push('**Translated:**');
|
|
38
38
|
lines.push('```sql');
|
|
39
|
-
lines.push(item.
|
|
39
|
+
lines.push(item.TranslatedSQL || '-- Translation failed');
|
|
40
40
|
lines.push('```');
|
|
41
|
-
if (item.
|
|
42
|
-
lines.push(`> ${item.
|
|
41
|
+
if (item.Note) {
|
|
42
|
+
lines.push(`> ${item.Note}`);
|
|
43
43
|
}
|
|
44
44
|
lines.push('');
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
// Flagged items
|
|
48
|
-
const flagged = items.filter(i => i.
|
|
48
|
+
const flagged = items.filter(i => i.Method === 'flagged');
|
|
49
49
|
if (flagged.length > 0) {
|
|
50
50
|
lines.push(`## Flagged for Human Review`);
|
|
51
51
|
lines.push('');
|
|
52
52
|
for (const item of flagged) {
|
|
53
|
-
lines.push(`### ${item.
|
|
54
|
-
lines.push(`**Markers:** ${item.
|
|
53
|
+
lines.push(`### ${item.Source}`);
|
|
54
|
+
lines.push(`**Markers:** ${item.Markers.join(', ')}`);
|
|
55
55
|
lines.push('```sql');
|
|
56
|
-
lines.push(item.
|
|
56
|
+
lines.push(item.OriginalSQL);
|
|
57
57
|
lines.push('```');
|
|
58
|
-
if (item.
|
|
59
|
-
lines.push(`> ${item.
|
|
58
|
+
if (item.Note) {
|
|
59
|
+
lines.push(`> ${item.Note}`);
|
|
60
60
|
}
|
|
61
61
|
lines.push('');
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
// Standard SQL items (collapsed)
|
|
65
|
-
const standard = items.filter(i => i.
|
|
65
|
+
const standard = items.filter(i => i.Classification === 'standard');
|
|
66
66
|
if (standard.length > 0) {
|
|
67
67
|
lines.push(`## Standard SQL (No Translation Needed)`);
|
|
68
68
|
lines.push('');
|
|
@@ -74,10 +74,10 @@ export function GenerateTranslationReport(items, from, to) {
|
|
|
74
74
|
function buildSummary(items) {
|
|
75
75
|
return {
|
|
76
76
|
total: items.length,
|
|
77
|
-
standard: items.filter(i => i.
|
|
78
|
-
ruleBased: items.filter(i => i.
|
|
79
|
-
llm: items.filter(i => i.
|
|
80
|
-
flagged: items.filter(i => i.
|
|
77
|
+
standard: items.filter(i => i.Classification === 'standard').length,
|
|
78
|
+
ruleBased: items.filter(i => i.Method === 'rule-based').length,
|
|
79
|
+
llm: items.filter(i => i.Method === 'llm').length,
|
|
80
|
+
flagged: items.filter(i => i.Method === 'flagged').length,
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
//# sourceMappingURL=reportGenerator.js.map
|
|
@@ -3,9 +3,9 @@ import { DatabasePlatform } from '@memberjunction/core';
|
|
|
3
3
|
* Result of a rule-based SQL translation.
|
|
4
4
|
*/
|
|
5
5
|
export interface RuleTranslationResult {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
Success: boolean;
|
|
7
|
+
TranslatedSQL: string;
|
|
8
|
+
AppliedRules: string[];
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* Translates SQL Server SQL to PostgreSQL using deterministic, rule-based transformations.
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export function RuleBasedTranslate(sql, from, to) {
|
|
12
12
|
if (from === to) {
|
|
13
|
-
return {
|
|
13
|
+
return { Success: true, TranslatedSQL: sql, AppliedRules: [] };
|
|
14
14
|
}
|
|
15
15
|
if (from === 'sqlserver' && to === 'postgresql') {
|
|
16
16
|
return translateSqlServerToPostgres(sql);
|
|
@@ -18,7 +18,7 @@ export function RuleBasedTranslate(sql, from, to) {
|
|
|
18
18
|
if (from === 'postgresql' && to === 'sqlserver') {
|
|
19
19
|
return translatePostgresToSqlServer(sql);
|
|
20
20
|
}
|
|
21
|
-
return {
|
|
21
|
+
return { Success: false, TranslatedSQL: sql, AppliedRules: [] };
|
|
22
22
|
}
|
|
23
23
|
function translateSqlServerToPostgres(sql) {
|
|
24
24
|
let result = sql;
|
|
@@ -40,9 +40,9 @@ function translateSqlServerToPostgres(sql) {
|
|
|
40
40
|
appliedRules.push('bit-0-to-false');
|
|
41
41
|
}
|
|
42
42
|
return {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
appliedRules
|
|
43
|
+
Success: appliedRules.length > 0,
|
|
44
|
+
TranslatedSQL: result,
|
|
45
|
+
AppliedRules: appliedRules
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
function translatePostgresToSqlServer(sql) {
|
|
@@ -66,9 +66,9 @@ function translatePostgresToSqlServer(sql) {
|
|
|
66
66
|
appliedRules.push('false-to-bit-0');
|
|
67
67
|
}
|
|
68
68
|
return {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
appliedRules
|
|
69
|
+
Success: appliedRules.length > 0,
|
|
70
|
+
TranslatedSQL: result,
|
|
71
|
+
AppliedRules: appliedRules
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
//# sourceMappingURL=ruleTranslator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleTranslator.js","sourceRoot":"","sources":["../../src/translate-sql/ruleTranslator.ts"],"names":[],"mappings":"AAWA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAC9B,GAAW,EACX,IAAsB,EACtB,EAAoB;IAEpB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,IAAI,EAAE,KAAK,YAAY,EAAE,CAAC;QAC9C,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAW;IAC7C,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,sEAAsE;IACtE,MAAM,YAAY,GAAG,YAAY,CAAC;IAClC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9C,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChD,CAAC;IAED,wCAAwC;IACxC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9C,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACH,OAAO,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;QAChC,aAAa,EAAE,MAAM;QACrB,YAAY;
|
|
1
|
+
{"version":3,"file":"ruleTranslator.js","sourceRoot":"","sources":["../../src/translate-sql/ruleTranslator.ts"],"names":[],"mappings":"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"}
|