@memberjunction/cli 6.2.0-edge.0 → 6.2.0-edge.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/dist/baseline/cli-helpers.d.ts +4 -0
  2. package/dist/baseline/cli-helpers.d.ts.map +1 -1
  3. package/dist/baseline/cli-helpers.js +18 -10
  4. package/dist/baseline/cli-helpers.js.map +1 -1
  5. package/dist/baseline/comparator.d.ts +5 -3
  6. package/dist/baseline/comparator.d.ts.map +1 -1
  7. package/dist/baseline/comparator.js +142 -138
  8. package/dist/baseline/comparator.js.map +1 -1
  9. package/dist/baseline/connection.d.ts +8 -6
  10. package/dist/baseline/connection.d.ts.map +1 -1
  11. package/dist/baseline/connection.js +16 -12
  12. package/dist/baseline/connection.js.map +1 -1
  13. package/dist/baseline/data-dumper.d.ts +7 -3
  14. package/dist/baseline/data-dumper.d.ts.map +1 -1
  15. package/dist/baseline/data-dumper.js +33 -25
  16. package/dist/baseline/data-dumper.js.map +1 -1
  17. package/dist/baseline/emitter.d.ts +5 -3
  18. package/dist/baseline/emitter.d.ts.map +1 -1
  19. package/dist/baseline/emitter.js +114 -110
  20. package/dist/baseline/emitter.js.map +1 -1
  21. package/dist/baseline/index.d.ts +7 -7
  22. package/dist/baseline/index.d.ts.map +1 -1
  23. package/dist/baseline/index.js +7 -7
  24. package/dist/baseline/index.js.map +1 -1
  25. package/dist/baseline/introspector-mssql.d.ts +2 -0
  26. package/dist/baseline/introspector-mssql.d.ts.map +1 -1
  27. package/dist/baseline/introspector-mssql.js +68 -64
  28. package/dist/baseline/introspector-mssql.js.map +1 -1
  29. package/dist/baseline/introspector-postgres.d.ts +2 -0
  30. package/dist/baseline/introspector-postgres.d.ts.map +1 -1
  31. package/dist/baseline/introspector-postgres.js +34 -30
  32. package/dist/baseline/introspector-postgres.js.map +1 -1
  33. package/dist/baseline/report.d.ts +4 -0
  34. package/dist/baseline/report.d.ts.map +1 -1
  35. package/dist/baseline/report.js +25 -17
  36. package/dist/baseline/report.js.map +1 -1
  37. package/dist/baseline/types.d.ts +71 -71
  38. package/dist/baseline/util.d.ts +54 -6
  39. package/dist/baseline/util.d.ts.map +1 -1
  40. package/dist/baseline/util.js +112 -36
  41. package/dist/baseline/util.js.map +1 -1
  42. package/dist/commands/agent/init.d.ts +12 -0
  43. package/dist/commands/agent/init.d.ts.map +1 -1
  44. package/dist/commands/agent/init.js +42 -8
  45. package/dist/commands/agent/init.js.map +1 -1
  46. package/dist/commands/ai/actions/list.js +7 -7
  47. package/dist/commands/ai/actions/run.js +7 -7
  48. package/dist/commands/ai/agents/list.js +7 -7
  49. package/dist/commands/ai/agents/run.js +9 -9
  50. package/dist/commands/ai/audit/agent-run.js +7 -7
  51. package/dist/commands/ai/prompts/run.js +7 -7
  52. package/dist/commands/app/check-updates.js +5 -5
  53. package/dist/commands/app/disable.js +2 -2
  54. package/dist/commands/app/enable.js +2 -2
  55. package/dist/commands/app/info.js +2 -2
  56. package/dist/commands/app/install.js +2 -2
  57. package/dist/commands/app/list.js +2 -2
  58. package/dist/commands/app/remove.js +4 -4
  59. package/dist/commands/app/upgrade.js +2 -2
  60. package/dist/commands/artifacts/reclassify.js +2 -2
  61. package/dist/commands/baseline/build.js +31 -31
  62. package/dist/commands/baseline/build.js.map +1 -1
  63. package/dist/commands/baseline/compare.js +36 -36
  64. package/dist/commands/baseline/roundtrip.js +56 -54
  65. package/dist/commands/baseline/roundtrip.js.map +1 -1
  66. package/dist/commands/bundle/index.js +4 -4
  67. package/dist/commands/clean/index.js +3 -3
  68. package/dist/commands/codegen/manifest.d.ts +2 -0
  69. package/dist/commands/codegen/manifest.d.ts.map +1 -1
  70. package/dist/commands/codegen/manifest.js +8 -4
  71. package/dist/commands/codegen/manifest.js.map +1 -1
  72. package/dist/commands/dev/workspace/index.d.ts +2 -0
  73. package/dist/commands/dev/workspace/index.d.ts.map +1 -1
  74. package/dist/commands/dev/workspace/index.js +8 -4
  75. package/dist/commands/dev/workspace/index.js.map +1 -1
  76. package/dist/commands/install/claude.d.ts +2 -0
  77. package/dist/commands/install/claude.d.ts.map +1 -1
  78. package/dist/commands/install/claude.js +11 -7
  79. package/dist/commands/install/claude.js.map +1 -1
  80. package/dist/commands/install/index.js +3 -3
  81. package/dist/commands/migrate/convert.d.ts +21 -0
  82. package/dist/commands/migrate/convert.d.ts.map +1 -1
  83. package/dist/commands/migrate/convert.js +37 -7
  84. package/dist/commands/migrate/convert.js.map +1 -1
  85. package/dist/commands/migrate/create.js +2 -2
  86. package/dist/commands/migrate/index.js +16 -16
  87. package/dist/commands/migrate/rebake.d.ts.map +1 -1
  88. package/dist/commands/migrate/rebake.js +7 -0
  89. package/dist/commands/migrate/rebake.js.map +1 -1
  90. package/dist/commands/rubric/diff.d.ts +11 -0
  91. package/dist/commands/rubric/diff.d.ts.map +1 -0
  92. package/dist/commands/rubric/diff.js +20 -0
  93. package/dist/commands/rubric/diff.js.map +1 -0
  94. package/dist/commands/rubric/evaluate.d.ts +12 -0
  95. package/dist/commands/rubric/evaluate.d.ts.map +1 -0
  96. package/dist/commands/rubric/evaluate.js +21 -0
  97. package/dist/commands/rubric/evaluate.js.map +1 -0
  98. package/dist/commands/rubric/index.d.ts +6 -0
  99. package/dist/commands/rubric/index.d.ts.map +1 -0
  100. package/dist/commands/rubric/index.js +13 -0
  101. package/dist/commands/rubric/index.js.map +1 -0
  102. package/dist/commands/rubric/list.d.ts +6 -0
  103. package/dist/commands/rubric/list.d.ts.map +1 -0
  104. package/dist/commands/rubric/list.js +14 -0
  105. package/dist/commands/rubric/list.js.map +1 -0
  106. package/dist/commands/rubric/show.d.ts +9 -0
  107. package/dist/commands/rubric/show.d.ts.map +1 -0
  108. package/dist/commands/rubric/show.js +16 -0
  109. package/dist/commands/rubric/show.js.map +1 -0
  110. package/dist/commands/rubric/validate.d.ts +9 -0
  111. package/dist/commands/rubric/validate.d.ts.map +1 -0
  112. package/dist/commands/rubric/validate.js +16 -0
  113. package/dist/commands/rubric/validate.js.map +1 -0
  114. package/dist/commands/sync/file-reset.js +2 -2
  115. package/dist/commands/sync/init.js +3 -3
  116. package/dist/commands/test/compare.js +6 -6
  117. package/dist/commands/test/history.js +6 -6
  118. package/dist/commands/test/index.d.ts.map +1 -1
  119. package/dist/commands/test/index.js +2 -0
  120. package/dist/commands/test/index.js.map +1 -1
  121. package/dist/commands/test/list.js +6 -6
  122. package/dist/commands/test/promote-criteria.d.ts +10 -0
  123. package/dist/commands/test/promote-criteria.d.ts.map +1 -0
  124. package/dist/commands/test/promote-criteria.js +25 -0
  125. package/dist/commands/test/promote-criteria.js.map +1 -0
  126. package/dist/commands/test/regression/build.js +5 -5
  127. package/dist/commands/test/regression/compare.js +3 -3
  128. package/dist/commands/test/regression/down.js +4 -4
  129. package/dist/commands/test/regression/export.js +4 -4
  130. package/dist/commands/test/regression/gen-forms.js +3 -3
  131. package/dist/commands/test/regression/remote.js +10 -10
  132. package/dist/commands/test/regression/up.js +6 -6
  133. package/dist/commands/test/report.d.ts +9 -0
  134. package/dist/commands/test/report.d.ts.map +1 -0
  135. package/dist/commands/test/report.js +18 -0
  136. package/dist/commands/test/report.js.map +1 -0
  137. package/dist/commands/test/run.d.ts +1 -0
  138. package/dist/commands/test/run.d.ts.map +1 -1
  139. package/dist/commands/test/run.js +10 -6
  140. package/dist/commands/test/run.js.map +1 -1
  141. package/dist/commands/test/suite.d.ts +1 -0
  142. package/dist/commands/test/suite.d.ts.map +1 -1
  143. package/dist/commands/test/suite.js +10 -6
  144. package/dist/commands/test/suite.js.map +1 -1
  145. package/dist/commands/test/validate.js +6 -6
  146. package/dist/commands/translate-sql/index.js +25 -25
  147. package/dist/commands/update/claude.js +7 -7
  148. package/dist/commands/usage.js +4 -4
  149. package/dist/config.d.ts +175 -1
  150. package/dist/config.d.ts.map +1 -1
  151. package/dist/config.js +23 -9
  152. package/dist/config.js.map +1 -1
  153. package/dist/hooks/postrun.js +2 -2
  154. package/dist/hooks/prerun.js +2 -2
  155. package/dist/hooks/prerun.js.map +1 -1
  156. package/dist/init-templates/citizen-builder/.env.example +6 -0
  157. package/dist/init-templates/citizen-builder/docker/Dockerfile +10 -2
  158. package/dist/init-templates/citizen-builder/docker-compose.yml +6 -0
  159. package/dist/init-templates/citizen-builder/scripts/docker-entrypoint.sh +56 -20
  160. package/dist/lib/claude-pack/ManagedBlockEditor.d.ts +6 -0
  161. package/dist/lib/claude-pack/ManagedBlockEditor.d.ts.map +1 -1
  162. package/dist/lib/claude-pack/ManagedBlockEditor.js +18 -6
  163. package/dist/lib/claude-pack/ManagedBlockEditor.js.map +1 -1
  164. package/dist/lib/claude-pack/PackFetcher.d.ts +8 -3
  165. package/dist/lib/claude-pack/PackFetcher.d.ts.map +1 -1
  166. package/dist/lib/claude-pack/PackFetcher.js +26 -18
  167. package/dist/lib/claude-pack/PackFetcher.js.map +1 -1
  168. package/dist/lib/claude-pack/PackInstaller.d.ts +6 -2
  169. package/dist/lib/claude-pack/PackInstaller.d.ts.map +1 -1
  170. package/dist/lib/claude-pack/PackInstaller.js +19 -13
  171. package/dist/lib/claude-pack/PackInstaller.js.map +1 -1
  172. package/dist/lib/claude-pack/PackMerger.d.ts +8 -0
  173. package/dist/lib/claude-pack/PackMerger.d.ts.map +1 -1
  174. package/dist/lib/claude-pack/PackMerger.js +63 -57
  175. package/dist/lib/claude-pack/PackMerger.js.map +1 -1
  176. package/dist/lib/claude-pack/PackOutputFormatter.d.ts +4 -0
  177. package/dist/lib/claude-pack/PackOutputFormatter.d.ts.map +1 -1
  178. package/dist/lib/claude-pack/PackOutputFormatter.js +10 -2
  179. package/dist/lib/claude-pack/PackOutputFormatter.js.map +1 -1
  180. package/dist/lib/claude-pack/PackPaths.d.ts +12 -0
  181. package/dist/lib/claude-pack/PackPaths.d.ts.map +1 -1
  182. package/dist/lib/claude-pack/PackPaths.js +31 -7
  183. package/dist/lib/claude-pack/PackPaths.js.map +1 -1
  184. package/dist/lib/claude-pack/PackTypes.d.ts +18 -14
  185. package/dist/lib/claude-pack/PackTypes.d.ts.map +1 -1
  186. package/dist/lib/claude-pack/PackTypes.js +11 -3
  187. package/dist/lib/claude-pack/PackTypes.js.map +1 -1
  188. package/dist/lib/claude-pack/SettingsMerger.d.ts +10 -0
  189. package/dist/lib/claude-pack/SettingsMerger.d.ts.map +1 -1
  190. package/dist/lib/claude-pack/SettingsMerger.js +36 -16
  191. package/dist/lib/claude-pack/SettingsMerger.js.map +1 -1
  192. package/dist/lib/cli-plugins.d.ts +2 -0
  193. package/dist/lib/cli-plugins.d.ts.map +1 -1
  194. package/dist/lib/cli-plugins.js +8 -4
  195. package/dist/lib/cli-plugins.js.map +1 -1
  196. package/dist/lib/db-preflight.d.ts +2 -0
  197. package/dist/lib/db-preflight.d.ts.map +1 -1
  198. package/dist/lib/db-preflight.js +12 -8
  199. package/dist/lib/db-preflight.js.map +1 -1
  200. package/dist/lib/db-version.d.ts +2 -0
  201. package/dist/lib/db-version.d.ts.map +1 -1
  202. package/dist/lib/db-version.js +5 -1
  203. package/dist/lib/db-version.js.map +1 -1
  204. package/dist/lib/derived-usage.d.ts +14 -8
  205. package/dist/lib/derived-usage.d.ts.map +1 -1
  206. package/dist/lib/derived-usage.js +30 -18
  207. package/dist/lib/derived-usage.js.map +1 -1
  208. package/dist/lib/domain-profiles.d.ts +4 -2
  209. package/dist/lib/domain-profiles.d.ts.map +1 -1
  210. package/dist/lib/domain-profiles.js +53 -49
  211. package/dist/lib/domain-profiles.js.map +1 -1
  212. package/dist/lib/domain-usage-command.js +4 -4
  213. package/dist/lib/dynamic-packages.d.ts +4 -2
  214. package/dist/lib/dynamic-packages.d.ts.map +1 -1
  215. package/dist/lib/dynamic-packages.js +9 -5
  216. package/dist/lib/dynamic-packages.js.map +1 -1
  217. package/dist/lib/format-compat.d.ts +9 -7
  218. package/dist/lib/format-compat.d.ts.map +1 -1
  219. package/dist/lib/format-compat.js +12 -8
  220. package/dist/lib/format-compat.js.map +1 -1
  221. package/dist/lib/interactive-guard.d.ts +16 -0
  222. package/dist/lib/interactive-guard.d.ts.map +1 -1
  223. package/dist/lib/interactive-guard.js +18 -6
  224. package/dist/lib/interactive-guard.js.map +1 -1
  225. package/dist/lib/migration-fetch.d.ts +16 -4
  226. package/dist/lib/migration-fetch.d.ts.map +1 -1
  227. package/dist/lib/migration-fetch.js +30 -18
  228. package/dist/lib/migration-fetch.js.map +1 -1
  229. package/dist/lib/regression/docker-helpers.d.ts +24 -0
  230. package/dist/lib/regression/docker-helpers.d.ts.map +1 -1
  231. package/dist/lib/regression/docker-helpers.js +46 -10
  232. package/dist/lib/regression/docker-helpers.js.map +1 -1
  233. package/dist/lib/usage-render.d.ts +6 -0
  234. package/dist/lib/usage-render.d.ts.map +1 -1
  235. package/dist/lib/usage-render.js +15 -3
  236. package/dist/lib/usage-render.js.map +1 -1
  237. package/dist/translate-sql/groundTruth.d.ts +3 -3
  238. package/dist/translate-sql/groundTruth.js +40 -40
  239. package/dist/translate-sql/reportGenerator.d.ts +7 -7
  240. package/dist/translate-sql/reportGenerator.js +18 -18
  241. package/dist/translate-sql/ruleTranslator.d.ts +3 -3
  242. package/dist/translate-sql/ruleTranslator.js +8 -8
  243. package/dist/translate-sql/ruleTranslator.js.map +1 -1
  244. package/dist/utils/open-app-context.d.ts +21 -0
  245. package/dist/utils/open-app-context.d.ts.map +1 -1
  246. package/dist/utils/open-app-context.js +26 -10
  247. package/dist/utils/open-app-context.js.map +1 -1
  248. package/oclif.manifest.json +1419 -1160
  249. package/package.json +22 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/rubric/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;aACvC,gBAAW,GAAG,mDAAmD,CAAC;IAEzE,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACnF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class RubricList extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/rubric/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAAmB;IAE/B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ3B"}
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class RubricList extends Command {
3
+ static { this.description = 'List rubrics.'; }
4
+ async run() {
5
+ const { CloseMJProvider, RubricCommands } = await import('@memberjunction/testing-cli');
6
+ try {
7
+ await new RubricCommands().List();
8
+ }
9
+ finally {
10
+ await CloseMJProvider();
11
+ }
12
+ }
13
+ }
14
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/rubric/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;aACtC,gBAAW,GAAG,eAAe,CAAC;IAErC,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACxF,IAAI,CAAC;YACH,MAAM,IAAI,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,MAAM,eAAe,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class RubricShow extends Command {
3
+ static description: string;
4
+ static args: {
5
+ rubric: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ run(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/rubric/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA6C;IAC/D,MAAM,CAAC,IAAI;;MAAsG;IAE3G,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
@@ -0,0 +1,16 @@
1
+ import { Args, Command } from '@oclif/core';
2
+ export default class RubricShow extends Command {
3
+ static { this.description = 'Show a rubric version and its criteria.'; }
4
+ static { this.args = { rubric: Args.string({ description: 'Rubric name or id, optionally @version', required: true }) }; }
5
+ async run() {
6
+ const { CloseMJProvider, RubricCommands } = await import('@memberjunction/testing-cli');
7
+ const { args } = await this.parse(RubricShow);
8
+ try {
9
+ await new RubricCommands().Show(args.rubric);
10
+ }
11
+ finally {
12
+ await CloseMJProvider();
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/rubric/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;aACtC,gBAAW,GAAG,yCAAyC,CAAC;aACxD,SAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAEjH,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACxF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,MAAM,eAAe,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class RubricValidate extends Command {
3
+ static description: string;
4
+ static args: {
5
+ file: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ run(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/rubric/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,SAAkF;IACpG,MAAM,CAAC,IAAI;;MAAgF;IAErF,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
@@ -0,0 +1,16 @@
1
+ import { Args, Command } from '@oclif/core';
2
+ export default class RubricValidate extends Command {
3
+ static { this.description = 'Check a rubric snapshot file for duplicate keys, gates, weights, and scales.'; }
4
+ static { this.args = { file: Args.string({ description: 'JSON snapshot file', required: true }) }; }
5
+ async run() {
6
+ const { CloseMJProvider, RubricCommands } = await import('@memberjunction/testing-cli');
7
+ const { args } = await this.parse(RubricValidate);
8
+ try {
9
+ new RubricCommands().Validate(args.file);
10
+ }
11
+ finally {
12
+ await CloseMJProvider();
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/rubric/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;aAC1C,gBAAW,GAAG,8EAA8E,CAAC;aAC7F,SAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAE3F,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACxF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,IAAI,cAAc,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;gBAAS,CAAC;YACT,MAAM,eAAe,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
2
  import { confirm, checkbox } from '@inquirer/prompts';
3
- import { NonInteractiveError, resolveOrPrompt, withNonInteractiveHandling } from '../../lib/interactive-guard.js';
3
+ import { NonInteractiveError, resolveOrPrompt, WithNonInteractiveHandling } from '../../lib/interactive-guard.js';
4
4
  import ora from 'ora-classic';
5
5
  import chalk from 'chalk';
6
6
  import * as path from 'path';
@@ -24,7 +24,7 @@ export default class FileReset extends Command {
24
24
  const { FileResetService, loadMJConfig, initializeProvider, getSyncEngine, getSystemUser, resetSyncEngine, configManager, } = await import('@memberjunction/metadata-sync');
25
25
  const { flags } = await this.parse(FileReset);
26
26
  const spinner = ora();
27
- await withNonInteractiveHandling(this, async () => {
27
+ await WithNonInteractiveHandling(this, async () => {
28
28
  try {
29
29
  // Load configuration
30
30
  spinner.start('Loading configuration');
@@ -3,7 +3,7 @@ import path from 'node:path';
3
3
  import { Command, Flags } from '@oclif/core';
4
4
  import { input, select } from '@inquirer/prompts';
5
5
  import ora from 'ora-classic';
6
- import { NonInteractiveError, isInteractiveRun, resolveOrPrompt, withNonInteractiveHandling, } from '../../lib/interactive-guard.js';
6
+ import { NonInteractiveError, IsInteractiveRun, resolveOrPrompt, WithNonInteractiveHandling, } from '../../lib/interactive-guard.js';
7
7
  export default class Init extends Command {
8
8
  static { this.description = `Initialize a directory for metadata synchronization.
9
9
 
@@ -35,7 +35,7 @@ pass --setup-entity (and --entity/--dir when setting up "other").`; }
35
35
  }; }
36
36
  async run() {
37
37
  const { flags } = await this.parse(Init);
38
- await withNonInteractiveHandling(this, async () => {
38
+ await WithNonInteractiveHandling(this, async () => {
39
39
  const { InitService } = await import('@memberjunction/metadata-sync');
40
40
  const spinner = ora();
41
41
  try {
@@ -92,7 +92,7 @@ pass --setup-entity (and --entity/--dir when setting up "other").`; }
92
92
  options.dirName = await resolveOrPrompt({
93
93
  // A directory name always has a sane default derived from the entity, so
94
94
  // headless runs fall back to it rather than failing.
95
- flagValue: flags.dir ?? (isInteractiveRun() ? undefined : defaultDir),
95
+ flagValue: flags.dir ?? (IsInteractiveRun() ? undefined : defaultDir),
96
96
  what: 'A directory name',
97
97
  suggestion: `Pass --dir ${defaultDir}.`,
98
98
  prompt: () => input({ message: 'Enter the directory name:', default: defaultDir }),
@@ -1,5 +1,5 @@
1
1
  import { Command, Flags, Args } from '@oclif/core';
2
- import { TEST_FORMAT_FLAG, TEST_FORMAT_MAP, resolveLegacyFormat } from '../../lib/format-compat.js';
2
+ import { TEST_FORMAT_FLAG, TEST_FORMAT_MAP, ResolveLegacyFormat } from '../../lib/format-compat.js';
3
3
  export default class TestCompare extends Command {
4
4
  static { this.description = 'Compare test runs for regression detection'; }
5
5
  static { this.examples = [
@@ -73,11 +73,11 @@ export default class TestCompare extends Command {
73
73
  diffOnly: flags['diff-only'],
74
74
  latest: flags.latest,
75
75
  fromJson: flags['from-json'],
76
- format: resolveLegacyFormat({
77
- format: flags.format,
78
- legacy: 'console',
79
- legacyDefault: 'console',
80
- map: TEST_FORMAT_MAP,
76
+ format: ResolveLegacyFormat({
77
+ Format: flags.format,
78
+ Legacy: 'console',
79
+ LegacyDefault: 'console',
80
+ Map: TEST_FORMAT_MAP,
81
81
  }),
82
82
  output: flags.output,
83
83
  verbose: flags.verbose,
@@ -1,5 +1,5 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
- import { TEST_FORMAT_FLAG, TEST_FORMAT_MAP, resolveLegacyFormat } from '../../lib/format-compat.js';
2
+ import { TEST_FORMAT_FLAG, TEST_FORMAT_MAP, ResolveLegacyFormat } from '../../lib/format-compat.js';
3
3
  export default class TestHistory extends Command {
4
4
  static { this.description = 'View test execution history'; }
5
5
  static { this.examples = [
@@ -47,11 +47,11 @@ export default class TestHistory extends Command {
47
47
  recent: flags.recent,
48
48
  from: flags.from,
49
49
  status: flags.status,
50
- format: resolveLegacyFormat({
51
- format: flags.format,
52
- legacy: 'console',
53
- legacyDefault: 'console',
54
- map: TEST_FORMAT_MAP,
50
+ format: ResolveLegacyFormat({
51
+ Format: flags.format,
52
+ Legacy: 'console',
53
+ LegacyDefault: 'console',
54
+ Map: TEST_FORMAT_MAP,
55
55
  }),
56
56
  output: flags.output,
57
57
  verbose: flags.verbose,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,SAAiE;IAEnF,MAAM,CAAC,QAAQ,WAOb;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,SAAiE;IAEnF,MAAM,CAAC,QAAQ,WAOb;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB3B"}
@@ -16,6 +16,8 @@ export default class Test extends Command {
16
16
  this.log(' mj test suite <suite-id> - Execute a test suite');
17
17
  this.log(' mj test list - List available tests');
18
18
  this.log(' mj test validate - Validate test definitions');
19
+ this.log(' mj test promote-criteria <test> - Copy inline criteria into a Draft rubric');
20
+ this.log(' mj test report <run-id> - Print the per-criterion rubric breakdown');
19
21
  this.log(' mj test history - View test execution history');
20
22
  this.log(' mj test compare - Compare test runs for regressions');
21
23
  this.log('');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;aAChC,gBAAW,GAAG,6DAA6D,CAAC;aAE5E,aAAQ,GAAG;QAChB,mDAAmD;QACnD,uEAAuE;QACvE,sDAAsD;QACtD,0CAA0C;QAC1C,mDAAmD;QACnD,oDAAoD;KACrD,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAC9E,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;aAChC,gBAAW,GAAG,6DAA6D,CAAC;aAE5E,aAAQ,GAAG;QAChB,mDAAmD;QACnD,uEAAuE;QACvE,sDAAsD;QACtD,0CAA0C;QAC1C,mDAAmD;QACnD,oDAAoD;KACrD,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;QACxF,IAAI,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAC9E,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
- import { TEST_FORMAT_FLAG, TEST_FORMAT_MAP, resolveLegacyFormat } from '../../lib/format-compat.js';
2
+ import { TEST_FORMAT_FLAG, TEST_FORMAT_MAP, ResolveLegacyFormat } from '../../lib/format-compat.js';
3
3
  export default class TestList extends Command {
4
4
  static { this.description = 'List available tests, suites, and types'; }
5
5
  static { this.examples = [
@@ -54,11 +54,11 @@ export default class TestList extends Command {
54
54
  type: flags.type,
55
55
  tag: flags.tag,
56
56
  status: flags.status,
57
- format: resolveLegacyFormat({
58
- format: flags.format,
59
- legacy: 'console',
60
- legacyDefault: 'console',
61
- map: TEST_FORMAT_MAP,
57
+ format: ResolveLegacyFormat({
58
+ Format: flags.format,
59
+ Legacy: 'console',
60
+ LegacyDefault: 'console',
61
+ Map: TEST_FORMAT_MAP,
62
62
  }),
63
63
  output: flags.output,
64
64
  verbose: flags.verbose,
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class TestPromoteCriteria extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ test: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=promote-criteria.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote-criteria.d.ts","sourceRoot":"","sources":["../../../src/commands/test/promote-criteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,OAAO;IACtD,MAAM,CAAC,WAAW,SAAuG;IAEzH,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
@@ -0,0 +1,25 @@
1
+ import { Args, Command } from '@oclif/core';
2
+ export default class TestPromoteCriteria extends Command {
3
+ static { this.description = 'Copy a test\'s inline judge criteria into a Draft rubric and set Test.RubricID. Does not publish.'; }
4
+ static { this.examples = [
5
+ '<%= config.bin %> <%= command.id %> <test-id>',
6
+ '<%= config.bin %> <%= command.id %> "Reply check"',
7
+ ]; }
8
+ static { this.args = {
9
+ test: Args.string({
10
+ description: 'Test name or ID',
11
+ required: true,
12
+ }),
13
+ }; }
14
+ async run() {
15
+ const { PromoteCriteriaCommand } = await import('@memberjunction/testing-cli');
16
+ const { args } = await this.parse(TestPromoteCriteria);
17
+ try {
18
+ await new PromoteCriteriaCommand().Execute(args.test);
19
+ }
20
+ catch (error) {
21
+ this.error(error);
22
+ }
23
+ }
24
+ }
25
+ //# sourceMappingURL=promote-criteria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote-criteria.js","sourceRoot":"","sources":["../../../src/commands/test/promote-criteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,OAAO;aAC/C,gBAAW,GAAG,mGAAmG,CAAC;aAElH,aAAQ,GAAG;QAChB,+CAA+C;QAC/C,mDAAmD;KACpD,CAAC;aAEK,SAAI,GAAG;QACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QAC/E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,IAAI,sBAAsB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { Args, Command, Flags } from '@oclif/core';
2
2
  import { existsSync } from 'node:fs';
3
3
  import path from 'node:path';
4
- import { dockerComposeArgs, GEN_FORMS_SCRIPT, requireMonorepoRoot, spawnInherit, } from '../../../lib/regression/docker-helpers.js';
4
+ import { DockerComposeArgs, GEN_FORMS_SCRIPT, RequireMonorepoRoot, SpawnInherit, } from '../../../lib/regression/docker-helpers.js';
5
5
  const GENERATED_FORMS_DIR = 'docker/regression/.docker-generated/MJExplorer-forms/Entities';
6
6
  export default class TestRegressionBuild extends Command {
7
7
  static { this.description = 'Build Docker images for the regression stack. On first run (or whenever ' +
@@ -29,18 +29,18 @@ export default class TestRegressionBuild extends Command {
29
29
  }; }
30
30
  async run() {
31
31
  const { argv, flags } = await this.parse(TestRegressionBuild);
32
- requireMonorepoRoot();
32
+ RequireMonorepoRoot();
33
33
  if (!flags['skip-gen-forms'] && !existsSync(path.resolve(GENERATED_FORMS_DIR))) {
34
34
  this.log('▶ .docker-generated/ is empty — running `gen-forms` first (one-time, ~5 min)...');
35
- const genCode = await spawnInherit('bash', [GEN_FORMS_SCRIPT]);
35
+ const genCode = await SpawnInherit('bash', [GEN_FORMS_SCRIPT]);
36
36
  if (genCode !== 0)
37
37
  this.exit(genCode);
38
38
  }
39
39
  // Pass-through any positional service names so users can rebuild a
40
40
  // single image (e.g. `mj test regression build mjexplorer`).
41
41
  const services = argv.filter(Boolean);
42
- const composeArgs = dockerComposeArgs('full', ['build', ...services]);
43
- const code = await spawnInherit('docker', composeArgs);
42
+ const composeArgs = DockerComposeArgs('full', ['build', ...services]);
43
+ const code = await SpawnInherit('docker', composeArgs);
44
44
  if (code !== 0)
45
45
  this.exit(code);
46
46
  }
@@ -1,5 +1,5 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
- import { isInsideMonorepo, spawnInherit } from '../../../lib/regression/docker-helpers.js';
2
+ import { IsInsideMonorepo, SpawnInherit } from '../../../lib/regression/docker-helpers.js';
3
3
  import { TEST_FORMAT_FLAG } from '../../../lib/format-compat.js';
4
4
  const REGRESSION_RESULTS_DIR = 'docker/regression/test-results';
5
5
  const EXTERNAL_RESULTS_DIR = 'test-results';
@@ -35,7 +35,7 @@ export default class TestRegressionCompare extends Command {
35
35
  const { flags } = await this.parse(TestRegressionCompare);
36
36
  // Results live under docker/regression/test-results in the monorepo, or
37
37
  // ./test-results when running externally (where remote/up wrote them).
38
- const resultsDir = isInsideMonorepo() ? REGRESSION_RESULTS_DIR : EXTERNAL_RESULTS_DIR;
38
+ const resultsDir = IsInsideMonorepo() ? REGRESSION_RESULTS_DIR : EXTERNAL_RESULTS_DIR;
39
39
  // --tag flips us to DB mode (results.json doesn't carry Tags), so drop
40
40
  // --from-json when the user asks for tag filtering.
41
41
  const args = ['test', 'compare'];
@@ -56,7 +56,7 @@ export default class TestRegressionCompare extends Command {
56
56
  args.push('--verbose');
57
57
  // Re-invoke the same `mj` binary. argv[1] is the entry script path.
58
58
  const mjBin = process.argv[1] ?? 'mj';
59
- const code = await spawnInherit(process.execPath, [mjBin, ...args]);
59
+ const code = await SpawnInherit(process.execPath, [mjBin, ...args]);
60
60
  if (code !== 0)
61
61
  this.exit(code);
62
62
  }
@@ -1,5 +1,5 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
- import { dockerComposeArgs, requireMonorepoRoot, spawnInherit, } from '../../../lib/regression/docker-helpers.js';
2
+ import { DockerComposeArgs, RequireMonorepoRoot, SpawnInherit, } from '../../../lib/regression/docker-helpers.js';
3
3
  export default class TestRegressionDown extends Command {
4
4
  static { this.description = 'Stop the regression stack and wipe DB volumes (docker compose down -v).'; }
5
5
  static { this.examples = [
@@ -14,14 +14,14 @@ export default class TestRegressionDown extends Command {
14
14
  }; }
15
15
  async run() {
16
16
  const { flags } = await this.parse(TestRegressionDown);
17
- requireMonorepoRoot();
17
+ RequireMonorepoRoot();
18
18
  // Use `--profile *` so compose tears down services in every profile,
19
19
  // not just the active one. Otherwise `down` leaves orphan containers
20
20
  // from a profile we haven't named.
21
- const composeArgs = dockerComposeArgs(undefined, ['--profile', '*', 'down']);
21
+ const composeArgs = DockerComposeArgs(undefined, ['--profile', '*', 'down']);
22
22
  if (!flags['keep-volumes'])
23
23
  composeArgs.push('-v');
24
- const code = await spawnInherit('docker', composeArgs);
24
+ const code = await SpawnInherit('docker', composeArgs);
25
25
  if (code !== 0)
26
26
  this.exit(code);
27
27
  }
@@ -1,7 +1,7 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
2
  import { existsSync } from 'node:fs';
3
3
  import path from 'node:path';
4
- import { AGENTIC_TEST_RUNNER_IMAGE, dockerRunArgs, INLINE_REPORT_SCRIPT, isInsideMonorepo, RESULTS_DIR, spawnInherit, } from '../../../lib/regression/docker-helpers.js';
4
+ import { AGENTIC_TEST_RUNNER_IMAGE, DockerRunArgs, INLINE_REPORT_SCRIPT, IsInsideMonorepo, RESULTS_DIR, SpawnInherit, } from '../../../lib/regression/docker-helpers.js';
5
5
  export default class TestRegressionExport extends Command {
6
6
  static { this.description = 'Export a regression run\'s HTML report as a single self-contained file ' +
7
7
  '(screenshots inlined as base64), producing report.standalone.html. ' +
@@ -22,7 +22,7 @@ export default class TestRegressionExport extends Command {
22
22
  }; }
23
23
  async run() {
24
24
  const { flags } = await this.parse(TestRegressionExport);
25
- if (isInsideMonorepo()) {
25
+ if (IsInsideMonorepo()) {
26
26
  // On-disk inline-report.cjs against docker/regression/test-results.
27
27
  if (!existsSync(INLINE_REPORT_SCRIPT))
28
28
  this.error(`✗ Exporter missing: ${INLINE_REPORT_SCRIPT}`);
@@ -35,7 +35,7 @@ export default class TestRegressionExport extends Command {
35
35
  this.error(`✗ Run directory not found: ${runDir}`);
36
36
  args.push(runDir);
37
37
  }
38
- const code = await spawnInherit(process.execPath, args);
38
+ const code = await SpawnInherit(process.execPath, args);
39
39
  if (code !== 0)
40
40
  this.exit(code);
41
41
  return;
@@ -48,7 +48,7 @@ export default class TestRegressionExport extends Command {
48
48
  this.error(`✗ No ./test-results directory found to export from.`);
49
49
  const runArg = flags.run ? `/app/test-results/${path.basename(flags.run)}` : '/app/test-results/latest';
50
50
  this.log(`▶ docker run ${image} export ${runArg}`);
51
- const code = await spawnInherit('docker', dockerRunArgs(image, ['export', runArg], { mounts: [[resultsDir, '/app/test-results']] }));
51
+ const code = await SpawnInherit('docker', DockerRunArgs(image, ['export', runArg], { mounts: [[resultsDir, '/app/test-results']] }));
52
52
  if (code !== 0)
53
53
  this.exit(code);
54
54
  }
@@ -1,16 +1,16 @@
1
1
  import { Command } from '@oclif/core';
2
2
  import { existsSync } from 'node:fs';
3
- import { GEN_FORMS_SCRIPT, requireMonorepoRoot, spawnInherit, } from '../../../lib/regression/docker-helpers.js';
3
+ import { GEN_FORMS_SCRIPT, RequireMonorepoRoot, SpawnInherit, } from '../../../lib/regression/docker-helpers.js';
4
4
  export default class TestRegressionGenForms extends Command {
5
5
  static { this.description = 'Regenerate Angular entity forms used by the regression MJExplorer image. ' +
6
6
  'Slow (~5 min) — only required after schema or codegen changes.'; }
7
7
  static { this.examples = ['<%= config.bin %> <%= command.id %>']; }
8
8
  async run() {
9
- requireMonorepoRoot();
9
+ RequireMonorepoRoot();
10
10
  if (!existsSync(GEN_FORMS_SCRIPT)) {
11
11
  this.error(`✗ ${GEN_FORMS_SCRIPT} not found. Verify the docker/regression/ directory is intact.`);
12
12
  }
13
- const code = await spawnInherit('bash', [GEN_FORMS_SCRIPT]);
13
+ const code = await SpawnInherit('bash', [GEN_FORMS_SCRIPT]);
14
14
  if (code !== 0)
15
15
  this.exit(code);
16
16
  }
@@ -1,7 +1,7 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
2
  import { existsSync } from 'node:fs';
3
3
  import path from 'node:path';
4
- import { AGENTIC_TEST_RUNNER_IMAGE, dockerComposeArgs, dockerRunArgs, isInsideMonorepo, LOAD_TARGET_SCRIPT, resolveStandaloneCompose, resolveTargetPath, spawnCapture, spawnInherit, STANDALONE_COMPOSE, } from '../../../lib/regression/docker-helpers.js';
4
+ import { AGENTIC_TEST_RUNNER_IMAGE, DockerComposeArgs, DockerRunArgs, IsInsideMonorepo, LOAD_TARGET_SCRIPT, ResolveStandaloneCompose, ResolveTargetPath, SpawnCapture, SpawnInherit, STANDALONE_COMPOSE, } from '../../../lib/regression/docker-helpers.js';
5
5
  export default class TestRegressionRemote extends Command {
6
6
  static { this.description = 'Run the regression suite against a remote URL (Mode B/C/D). Inside the MJ ' +
7
7
  'monorepo it drives the local compose stack; outside it runs the published ' +
@@ -40,7 +40,7 @@ export default class TestRegressionRemote extends Command {
40
40
  }; }
41
41
  async run() {
42
42
  const { flags } = await this.parse(TestRegressionRemote);
43
- if (isInsideMonorepo()) {
43
+ if (IsInsideMonorepo()) {
44
44
  await this.runInMonorepo(flags);
45
45
  }
46
46
  else {
@@ -51,11 +51,11 @@ export default class TestRegressionRemote extends Command {
51
51
  async runInMonorepo(flags) {
52
52
  if (!existsSync(LOAD_TARGET_SCRIPT))
53
53
  this.error(`✗ Loader missing: ${LOAD_TARGET_SCRIPT}`);
54
- const targetPath = resolveTargetPath(flags.target);
54
+ const targetPath = ResolveTargetPath(flags.target);
55
55
  if (!existsSync(targetPath))
56
56
  this.error(`✗ Target profile not found: ${targetPath}`);
57
57
  this.log(`▶ Loading target profile: ${targetPath}`);
58
- const loaded = await spawnCapture(process.execPath, [LOAD_TARGET_SCRIPT, '--format=json', targetPath]);
58
+ const loaded = await SpawnCapture(process.execPath, [LOAD_TARGET_SCRIPT, '--format=json', targetPath]);
59
59
  if (loaded.code !== 0)
60
60
  this.error(`✗ Target profile loader failed (exit ${loaded.code})`);
61
61
  let envFromProfile;
@@ -76,11 +76,11 @@ export default class TestRegressionRemote extends Command {
76
76
  });
77
77
  if (overlays.length > 0)
78
78
  this.log(` Overlays: ${overlays.join(', ')}`);
79
- const composeArgs = dockerComposeArgs(composeProfile, ['up'], overlays);
79
+ const composeArgs = DockerComposeArgs(composeProfile, ['up'], overlays);
80
80
  if (flags.detach)
81
81
  composeArgs.push('-d');
82
82
  this.log(`▶ docker compose --profile ${composeProfile} up`);
83
- const code = await spawnInherit('docker', composeArgs, { env: childEnv });
83
+ const code = await SpawnInherit('docker', composeArgs, { env: childEnv });
84
84
  if (code !== 0)
85
85
  this.exit(code);
86
86
  }
@@ -90,7 +90,7 @@ export default class TestRegressionRemote extends Command {
90
90
  * with the bundled standalone compose + the user's app overlay.
91
91
  */
92
92
  async runExternal(flags) {
93
- const targetPath = resolveTargetPath(flags.target);
93
+ const targetPath = ResolveTargetPath(flags.target);
94
94
  if (!existsSync(targetPath)) {
95
95
  this.error(`✗ Target profile not found: ${targetPath}\n Outside the monorepo, pass a path (e.g. --target=./my-suite/target.json).`);
96
96
  }
@@ -106,7 +106,7 @@ export default class TestRegressionRemote extends Command {
106
106
  });
107
107
  if (overlays.length > 0) {
108
108
  // Mode D — boot the app overlay alongside the runner via the standalone compose.
109
- const standalone = resolveStandaloneCompose(STANDALONE_COMPOSE);
109
+ const standalone = ResolveStandaloneCompose(STANDALONE_COMPOSE);
110
110
  if (!existsSync(standalone)) {
111
111
  this.error(`✗ Standalone compose not found (${standalone}). Reinstall @memberjunction/cli or run from the monorepo.`);
112
112
  }
@@ -122,14 +122,14 @@ export default class TestRegressionRemote extends Command {
122
122
  args.push('-f', o);
123
123
  args.push('up', '--abort-on-container-exit', '--exit-code-from', 'test-runner');
124
124
  this.log(`▶ docker compose (standalone + ${overlays.length} overlay) — image ${image}`);
125
- const code = await spawnInherit('docker', args, { env: childEnv });
125
+ const code = await SpawnInherit('docker', args, { env: childEnv });
126
126
  if (code !== 0)
127
127
  this.exit(code);
128
128
  return;
129
129
  }
130
130
  // Mode B/C — single `docker run` against the published image.
131
131
  this.log(`▶ docker run ${image} run --target=/work/${targetFile}`);
132
- const code = await spawnInherit('docker', dockerRunArgs(image, ['run', `--target=/work/${targetFile}`], {
132
+ const code = await SpawnInherit('docker', DockerRunArgs(image, ['run', `--target=/work/${targetFile}`], {
133
133
  mounts: [[targetDir, '/work'], [resultsDir, '/app/test-results']],
134
134
  envFile,
135
135
  }));
@@ -1,7 +1,7 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
2
  import { existsSync, statSync } from 'node:fs';
3
3
  import path from 'node:path';
4
- import { AGENTIC_TEST_RUNNER_IMAGE, BACPAC_OVERLAY, BACPAC_STANDALONE_COMPOSE, dockerComposeArgs, isInsideMonorepo, resolveStandaloneCompose, spawnInherit, } from '../../../lib/regression/docker-helpers.js';
4
+ import { AGENTIC_TEST_RUNNER_IMAGE, BACPAC_OVERLAY, BACPAC_STANDALONE_COMPOSE, DockerComposeArgs, IsInsideMonorepo, ResolveStandaloneCompose, SpawnInherit, } from '../../../lib/regression/docker-helpers.js';
5
5
  export default class TestRegressionUp extends Command {
6
6
  static { this.description = 'Run the self-contained MJ regression stack (Mode A). With --bacpac, the DB is imported ' +
7
7
  'from a .bacpac. Inside the monorepo this builds from source; outside, --bacpac runs the ' +
@@ -30,7 +30,7 @@ export default class TestRegressionUp extends Command {
30
30
  if ((flags['bacpac-no-upgrade'] || flags.metadata) && !flags.bacpac) {
31
31
  this.error('--bacpac-no-upgrade and --metadata require --bacpac.');
32
32
  }
33
- if (isInsideMonorepo()) {
33
+ if (IsInsideMonorepo()) {
34
34
  await this.runInMonorepo(flags);
35
35
  }
36
36
  else {
@@ -63,10 +63,10 @@ export default class TestRegressionUp extends Command {
63
63
  childEnv.TEST_SUITE_NAME = flags.suite;
64
64
  this.log(` Suite: ${flags.suite}`);
65
65
  }
66
- const composeArgs = dockerComposeArgs('full', ['up'], overlays);
66
+ const composeArgs = DockerComposeArgs('full', ['up'], overlays);
67
67
  if (flags.detach)
68
68
  composeArgs.push('-d');
69
- const code = await spawnInherit('docker', composeArgs, { env: childEnv });
69
+ const code = await SpawnInherit('docker', composeArgs, { env: childEnv });
70
70
  if (code !== 0)
71
71
  this.exit(code);
72
72
  }
@@ -85,7 +85,7 @@ export default class TestRegressionUp extends Command {
85
85
  const metaAbs = path.resolve(flags.metadata);
86
86
  if (!existsSync(metaAbs) || !statSync(metaAbs).isDirectory())
87
87
  this.error(`✗ --metadata directory not found: ${metaAbs}`);
88
- const compose = resolveStandaloneCompose(BACPAC_STANDALONE_COMPOSE);
88
+ const compose = ResolveStandaloneCompose(BACPAC_STANDALONE_COMPOSE);
89
89
  if (!existsSync(compose))
90
90
  this.error(`✗ Standalone bacpac compose not found (${compose}). Reinstall @memberjunction/cli.`);
91
91
  const childEnv = {
@@ -103,7 +103,7 @@ export default class TestRegressionUp extends Command {
103
103
  this.warn('External bacpac requires the `memberjunction/explorer` image (a published-Explorer prerequisite ' +
104
104
  'that is a separate workstream). If it cannot be pulled, the explorer service will fail to start.');
105
105
  this.log(`▶ docker compose (bacpac-standalone) — bacpac=${abs} upgrade=${childEnv.BACPAC_UPGRADE}`);
106
- const code = await spawnInherit('docker', ['compose', '-f', compose, 'up', '--abort-on-container-exit', '--exit-code-from', 'test-runner'], { env: childEnv });
106
+ const code = await SpawnInherit('docker', ['compose', '-f', compose, 'up', '--abort-on-container-exit', '--exit-code-from', 'test-runner'], { env: childEnv });
107
107
  if (code !== 0)
108
108
  this.exit(code);
109
109
  }
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class TestReport extends Command {
3
+ static description: string;
4
+ static args: {
5
+ runId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ run(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/commands/test/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA8D;IAEhF,MAAM,CAAC,IAAI;;MAET;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
@@ -0,0 +1,18 @@
1
+ import { Args, Command } from '@oclif/core';
2
+ export default class TestReport extends Command {
3
+ static { this.description = 'Print the per-criterion rubric breakdown for a test run.'; }
4
+ static { this.args = {
5
+ runId: Args.string({ description: 'Test run ID', required: true }),
6
+ }; }
7
+ async run() {
8
+ const { CloseMJProvider, ReportCommand } = await import('@memberjunction/testing-cli');
9
+ const { args } = await this.parse(TestReport);
10
+ try {
11
+ await new ReportCommand().execute(args.runId, {}, undefined);
12
+ }
13
+ finally {
14
+ await CloseMJProvider();
15
+ }
16
+ }
17
+ }
18
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/commands/test/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;aACtC,gBAAW,GAAG,0DAA0D,CAAC;aAEzE,SAAI,GAAG;QACZ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACnE,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACvF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,SAAkB,CAAC,CAAC;QACxE,CAAC;gBAAS,CAAC;YACT,MAAM,eAAe,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC"}
@@ -13,6 +13,7 @@ export default class TestRun extends Command {
13
13
  'dry-run': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
14
14
  verbose: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
15
15
  'checks-module': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
16
+ rubric: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
16
17
  'oracles-module': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
17
18
  };
18
19
  run(): Promise<void>;