@galaxy-tool-util/cli 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/bin/galaxy-tool-cache.js +2 -63
  2. package/dist/bin/galaxy-tool-cache.js.map +1 -1
  3. package/dist/bin/gxwf.js +2 -156
  4. package/dist/bin/gxwf.js.map +1 -1
  5. package/dist/commands/annotate-connections.d.ts +30 -0
  6. package/dist/commands/annotate-connections.d.ts.map +1 -0
  7. package/dist/commands/annotate-connections.js +42 -0
  8. package/dist/commands/annotate-connections.js.map +1 -0
  9. package/dist/commands/connection-validation.d.ts +20 -0
  10. package/dist/commands/connection-validation.d.ts.map +1 -0
  11. package/dist/commands/connection-validation.js +26 -0
  12. package/dist/commands/connection-validation.js.map +1 -0
  13. package/dist/commands/cytoscapejs/_template-bundled.d.ts +2 -0
  14. package/dist/commands/cytoscapejs/_template-bundled.d.ts.map +1 -0
  15. package/dist/commands/cytoscapejs/_template-bundled.js +182 -0
  16. package/dist/commands/cytoscapejs/_template-bundled.js.map +1 -0
  17. package/dist/commands/cytoscapejs.d.ts +12 -0
  18. package/dist/commands/cytoscapejs.d.ts.map +1 -0
  19. package/dist/commands/cytoscapejs.js +62 -0
  20. package/dist/commands/cytoscapejs.js.map +1 -0
  21. package/dist/commands/lint.d.ts.map +1 -1
  22. package/dist/commands/lint.js +14 -1
  23. package/dist/commands/lint.js.map +1 -1
  24. package/dist/commands/mermaid.d.ts +2 -0
  25. package/dist/commands/mermaid.d.ts.map +1 -1
  26. package/dist/commands/mermaid.js +5 -1
  27. package/dist/commands/mermaid.js.map +1 -1
  28. package/dist/commands/repo-search.d.ts +31 -0
  29. package/dist/commands/repo-search.d.ts.map +1 -0
  30. package/dist/commands/repo-search.js +100 -0
  31. package/dist/commands/repo-search.js.map +1 -0
  32. package/dist/commands/tool-revisions.d.ts +15 -0
  33. package/dist/commands/tool-revisions.d.ts.map +1 -0
  34. package/dist/commands/tool-revisions.js +56 -0
  35. package/dist/commands/tool-revisions.js.map +1 -0
  36. package/dist/commands/tool-search.d.ts +17 -0
  37. package/dist/commands/tool-search.d.ts.map +1 -0
  38. package/dist/commands/tool-search.js +107 -0
  39. package/dist/commands/tool-search.js.map +1 -0
  40. package/dist/commands/tool-versions.d.ts +11 -0
  41. package/dist/commands/tool-versions.d.ts.map +1 -0
  42. package/dist/commands/tool-versions.js +70 -0
  43. package/dist/commands/tool-versions.js.map +1 -0
  44. package/dist/commands/validate-workflow.d.ts +1 -0
  45. package/dist/commands/validate-workflow.d.ts.map +1 -1
  46. package/dist/commands/validate-workflow.js +38 -3
  47. package/dist/commands/validate-workflow.js.map +1 -1
  48. package/dist/index.d.ts +3 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +2 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/meta/extract-spec.d.ts +13 -0
  53. package/dist/meta/extract-spec.d.ts.map +1 -0
  54. package/dist/meta/extract-spec.js +90 -0
  55. package/dist/meta/extract-spec.js.map +1 -0
  56. package/dist/meta/index.d.ts +8 -0
  57. package/dist/meta/index.d.ts.map +1 -0
  58. package/dist/meta/index.js +21 -0
  59. package/dist/meta/index.js.map +1 -0
  60. package/dist/meta/spec-types.d.ts +40 -0
  61. package/dist/meta/spec-types.d.ts.map +1 -0
  62. package/dist/meta/spec-types.js +11 -0
  63. package/dist/meta/spec-types.js.map +1 -0
  64. package/dist/meta/specs.d.ts +4 -0
  65. package/dist/meta/specs.d.ts.map +1 -0
  66. package/dist/meta/specs.js +10 -0
  67. package/dist/meta/specs.js.map +1 -0
  68. package/dist/meta/types.d.ts +55 -0
  69. package/dist/meta/types.d.ts.map +1 -0
  70. package/dist/meta/types.js +9 -0
  71. package/dist/meta/types.js.map +1 -0
  72. package/dist/meta-build.d.ts +13 -0
  73. package/dist/meta-build.d.ts.map +1 -0
  74. package/dist/meta-build.js +60 -0
  75. package/dist/meta-build.js.map +1 -0
  76. package/dist/programs/galaxy-tool-cache.d.ts +7 -0
  77. package/dist/programs/galaxy-tool-cache.d.ts.map +1 -0
  78. package/dist/programs/galaxy-tool-cache.js +22 -0
  79. package/dist/programs/galaxy-tool-cache.js.map +1 -0
  80. package/dist/programs/gxwf.d.ts +9 -0
  81. package/dist/programs/gxwf.d.ts.map +1 -0
  82. package/dist/programs/gxwf.js +56 -0
  83. package/dist/programs/gxwf.js.map +1 -0
  84. package/dist/spec/build-program.d.ts +12 -0
  85. package/dist/spec/build-program.d.ts.map +1 -0
  86. package/dist/spec/build-program.js +102 -0
  87. package/dist/spec/build-program.js.map +1 -0
  88. package/package.json +10 -3
  89. package/spec/galaxy-tool-cache.json +152 -0
  90. package/spec/gxwf.json +693 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-build.d.ts","sourceRoot":"","sources":["../src/meta-build.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,WAAW,CAAC;AAC3D,OAAO,KAAK,EAIV,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAO/D"}
@@ -0,0 +1,60 @@
1
+ export function extractProgram(program) {
2
+ return {
3
+ name: program.name(),
4
+ description: program.description(),
5
+ version: program.version() ?? "",
6
+ commands: program.commands.map((c) => extractCommand(c, program.name())),
7
+ };
8
+ }
9
+ function extractCommand(cmd, parentPath) {
10
+ const name = cmd.name();
11
+ const fullName = `${parentPath} ${name}`.trim();
12
+ return {
13
+ name,
14
+ fullName,
15
+ description: cmd.description(),
16
+ synopsis: `${fullName} ${cmd.usage()}`.trim(),
17
+ args: cmd.registeredArguments.map(extractArg),
18
+ options: cmd.options.map(extractOption),
19
+ commands: cmd.commands.map((c) => extractCommand(c, fullName)),
20
+ };
21
+ }
22
+ function extractArg(arg) {
23
+ return {
24
+ raw: arg.name(),
25
+ name: arg.name(),
26
+ required: arg.required,
27
+ variadic: arg.variadic,
28
+ description: arg.description || undefined,
29
+ };
30
+ }
31
+ function extractOption(opt) {
32
+ const flags = opt.flags;
33
+ const name = opt.attributeName();
34
+ const short = opt.short || undefined;
35
+ const placeholder = extractPlaceholder(flags);
36
+ return {
37
+ flags,
38
+ name,
39
+ short,
40
+ description: opt.description,
41
+ takesArgument: placeholder !== undefined,
42
+ argumentPlaceholder: placeholder,
43
+ optionalArgument: placeholder?.startsWith("[") ?? false,
44
+ negatable: opt.long?.startsWith("--no-") ?? false,
45
+ defaultValue: serializableDefault(opt.defaultValue),
46
+ };
47
+ }
48
+ function extractPlaceholder(flags) {
49
+ const match = flags.match(/[<[][^>\]]+[>\]]/);
50
+ return match ? match[0] : undefined;
51
+ }
52
+ function serializableDefault(value) {
53
+ if (value === undefined || value === null)
54
+ return undefined;
55
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
56
+ return value;
57
+ }
58
+ return undefined;
59
+ }
60
+ //# sourceMappingURL=meta-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-build.js","sourceRoot":"","sources":["../src/meta-build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `galaxy-tool-cache` commander program — built at runtime from
3
+ * `spec/galaxy-tool-cache.json` plus the handler registry below.
4
+ */
5
+ import type { Command } from "commander";
6
+ export declare function buildGalaxyToolCacheProgram(): Command;
7
+ //# sourceMappingURL=galaxy-tool-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"galaxy-tool-cache.d.ts","sourceRoot":"","sources":["../../src/programs/galaxy-tool-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBzC,wBAAgB,2BAA2B,IAAI,OAAO,CAErD"}
@@ -0,0 +1,22 @@
1
+ import { runAdd } from "../commands/add.js";
2
+ import { runList } from "../commands/list.js";
3
+ import { runInfo } from "../commands/info.js";
4
+ import { runClear } from "../commands/clear.js";
5
+ import { runPopulateWorkflow } from "../commands/populate-workflow.js";
6
+ import { runSchema } from "../commands/schema.js";
7
+ import { runStructuralSchema } from "../commands/structural-schema.js";
8
+ import { buildProgramFromSpec } from "../spec/build-program.js";
9
+ import { galaxyToolCacheSpec } from "../meta/specs.js";
10
+ const handlers = {
11
+ add: runAdd,
12
+ list: runList,
13
+ info: runInfo,
14
+ clear: runClear,
15
+ schema: runSchema,
16
+ populateWorkflow: runPopulateWorkflow,
17
+ structuralSchema: runStructuralSchema,
18
+ };
19
+ export function buildGalaxyToolCacheProgram() {
20
+ return buildProgramFromSpec(galaxyToolCacheSpec, handlers);
21
+ }
22
+ //# sourceMappingURL=galaxy-tool-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"galaxy-tool-cache.js","sourceRoot":"","sources":["../../src/programs/galaxy-tool-cache.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAwB,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,QAAQ,GAAoB;IAChC,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,SAAS;IACjB,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;CACtC,CAAC;AAEF,MAAM,UAAU,2BAA2B;IACzC,OAAO,oBAAoB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `gxwf` commander program — built at runtime from `spec/gxwf.json`
3
+ * plus the handler registry below. The JSON spec is the source of truth
4
+ * for the command surface; this file just wires action functions to
5
+ * spec entries by name.
6
+ */
7
+ import type { Command } from "commander";
8
+ export declare function buildGxwfProgram(): Command;
9
+ //# sourceMappingURL=gxwf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gxwf.d.ts","sourceRoot":"","sources":["../../src/programs/gxwf.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuEzC,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C"}
@@ -0,0 +1,56 @@
1
+ import { runClean } from "../commands/clean.js";
2
+ import { runCleanTree } from "../commands/clean-tree.js";
3
+ import { runConvert } from "../commands/convert.js";
4
+ import { runConvertTree } from "../commands/convert-tree.js";
5
+ import { runRoundtrip } from "../commands/roundtrip.js";
6
+ import { runRoundtripTree } from "../commands/roundtrip-tree.js";
7
+ import { runLint } from "../commands/lint.js";
8
+ import { runMermaid } from "../commands/mermaid.js";
9
+ import { runCytoscapeJs } from "../commands/cytoscapejs.js";
10
+ import { runLintTree } from "../commands/lint-tree.js";
11
+ import { runValidateWorkflow } from "../commands/validate-workflow.js";
12
+ import { runValidateTests } from "../commands/validate-tests.js";
13
+ import { runValidateTestsTree } from "../commands/validate-tests-tree.js";
14
+ import { runValidateTree } from "../commands/validate-tree.js";
15
+ import { runToolSearch } from "../commands/tool-search.js";
16
+ import { runToolVersions } from "../commands/tool-versions.js";
17
+ import { runToolRevisions } from "../commands/tool-revisions.js";
18
+ import { runRepoSearch } from "../commands/repo-search.js";
19
+ import { buildProgramFromSpec } from "../spec/build-program.js";
20
+ import { gxwfSpec } from "../meta/specs.js";
21
+ const handlers = {
22
+ validateWorkflow: runValidateWorkflow,
23
+ validateTests: runValidateTests,
24
+ clean: runClean,
25
+ lint: runLint,
26
+ convert: runConvert,
27
+ roundtrip: runRoundtrip,
28
+ mermaid: (file, output, opts) => runMermaid(file, {
29
+ output,
30
+ comments: opts.comments,
31
+ annotateConnections: opts.annotateConnections,
32
+ cacheDir: opts.cacheDir,
33
+ }),
34
+ cytoscapeJs: (file, output, opts) => runCytoscapeJs(file, {
35
+ output,
36
+ html: opts.html,
37
+ json: opts.json,
38
+ annotateConnections: opts.annotateConnections,
39
+ cacheDir: opts.cacheDir,
40
+ layout: opts.layout,
41
+ }),
42
+ validateTree: runValidateTree,
43
+ lintTree: runLintTree,
44
+ cleanTree: runCleanTree,
45
+ convertTree: runConvertTree,
46
+ roundtripTree: runRoundtripTree,
47
+ validateTestsTree: runValidateTestsTree,
48
+ toolSearch: runToolSearch,
49
+ toolVersions: runToolVersions,
50
+ toolRevisions: runToolRevisions,
51
+ repoSearch: runRepoSearch,
52
+ };
53
+ export function buildGxwfProgram() {
54
+ return buildProgramFromSpec(gxwfSpec, handlers);
55
+ }
56
+ //# sourceMappingURL=gxwf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gxwf.js","sourceRoot":"","sources":["../../src/programs/gxwf.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAwB,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,QAAQ,GAAoB;IAChC,gBAAgB,EAAE,mBAAmB;IACrC,aAAa,EAAE,gBAAgB;IAC/B,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,CACP,IAAY,EACZ,MAA0B,EAC1B,IAA8E,EAC9E,EAAE,CACF,UAAU,CAAC,IAAI,EAAE;QACf,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;IACJ,WAAW,EAAE,CACX,IAAY,EACZ,MAA0B,EAC1B,IAMC,EACD,EAAE,CACF,cAAc,CAAC,IAAI,EAAE;QACnB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;IACJ,YAAY,EAAE,eAAe;IAC7B,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,iBAAiB,EAAE,oBAAoB;IACvC,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,aAAa;CAC1B,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Build a commander `Command` tree from a declarative `ProgramSpec` plus
3
+ * a name-keyed handler registry. The spec carries the static shape
4
+ * (commands, args, options, defaults); the registry supplies the
5
+ * runtime action functions.
6
+ */
7
+ import { Command } from "commander";
8
+ import type { ProgramSpec } from "../meta/spec-types.js";
9
+ export type HandlerFn = (...args: any[]) => void | Promise<void>;
10
+ export type HandlerRegistry = Record<string, HandlerFn>;
11
+ export declare function buildProgramFromSpec(spec: ProgramSpec, handlers: HandlerRegistry): Command;
12
+ //# sourceMappingURL=build-program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-program.d.ts","sourceRoot":"","sources":["../../src/spec/build-program.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAElF,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAExD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAS1F"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Build a commander `Command` tree from a declarative `ProgramSpec` plus
3
+ * a name-keyed handler registry. The spec carries the static shape
4
+ * (commands, args, options, defaults); the registry supplies the
5
+ * runtime action functions.
6
+ */
7
+ import { Command } from "commander";
8
+ export function buildProgramFromSpec(spec, handlers) {
9
+ validateSpec(spec, handlers);
10
+ const program = new Command();
11
+ program.name(spec.name).description(spec.description).version(spec.version);
12
+ const groups = spec.optionGroups ?? {};
13
+ for (const cmd of spec.commands) {
14
+ program.addCommand(buildCommand(cmd, groups, handlers));
15
+ }
16
+ return program;
17
+ }
18
+ /**
19
+ * Cheap structural checks the YAML loader doesn't catch — duplicate
20
+ * names, dangling refs, missing handlers. Runs before commander touches
21
+ * the spec so errors point at the YAML, not at a confusing commander
22
+ * stack trace.
23
+ */
24
+ function validateSpec(spec, handlers) {
25
+ const groups = spec.optionGroups ?? {};
26
+ const seenCommands = new Set();
27
+ for (const cmd of spec.commands) {
28
+ if (seenCommands.has(cmd.name)) {
29
+ throw new Error(`Duplicate command "${cmd.name}" in spec "${spec.name}"`);
30
+ }
31
+ seenCommands.add(cmd.name);
32
+ if (!handlers[cmd.handler]) {
33
+ throw new Error(`Missing handler "${cmd.handler}" for command "${cmd.name}"`);
34
+ }
35
+ const seenOptions = new Set();
36
+ const checkOptName = (flags) => {
37
+ const optName = attributeNameFromFlags(flags);
38
+ if (seenOptions.has(optName)) {
39
+ throw new Error(`Duplicate option "${optName}" on command "${cmd.name}"`);
40
+ }
41
+ seenOptions.add(optName);
42
+ };
43
+ for (const opt of cmd.options ?? [])
44
+ checkOptName(opt.flags);
45
+ for (const groupName of cmd.optionGroups ?? []) {
46
+ const group = groups[groupName];
47
+ if (!group) {
48
+ throw new Error(`Command "${cmd.name}" references unknown optionGroup "${groupName}"`);
49
+ }
50
+ for (const opt of group)
51
+ checkOptName(opt.flags);
52
+ }
53
+ }
54
+ }
55
+ /**
56
+ * Extract the option's attributeName the same way commander does — the
57
+ * first long flag, stripped of `--no-` prefix and camelCased. Used only
58
+ * for duplicate detection here; commander itself owns the canonical
59
+ * derivation at runtime.
60
+ */
61
+ function attributeNameFromFlags(flags) {
62
+ const long = flags.split(/[ ,|]+/).find((part) => part.startsWith("--"));
63
+ if (!long)
64
+ return flags;
65
+ const stripped = long.replace(/^--(no-)?/, "");
66
+ return stripped.replace(/-([a-z])/g, (_m, c) => c.toUpperCase());
67
+ }
68
+ function buildCommand(spec, groups, handlers) {
69
+ const cmd = new Command(spec.name).description(spec.description);
70
+ for (const arg of spec.args ?? []) {
71
+ if (arg.description !== undefined)
72
+ cmd.argument(arg.raw, arg.description);
73
+ else
74
+ cmd.argument(arg.raw);
75
+ }
76
+ for (const opt of spec.options ?? []) {
77
+ addOption(cmd, opt);
78
+ }
79
+ for (const groupName of spec.optionGroups ?? []) {
80
+ const group = groups[groupName];
81
+ if (!group) {
82
+ throw new Error(`Command "${spec.name}" references unknown optionGroup "${groupName}"`);
83
+ }
84
+ for (const opt of group)
85
+ addOption(cmd, opt);
86
+ }
87
+ const handler = handlers[spec.handler];
88
+ if (!handler) {
89
+ throw new Error(`Missing handler "${spec.handler}" for command "${spec.name}"`);
90
+ }
91
+ cmd.action(handler);
92
+ return cmd;
93
+ }
94
+ function addOption(cmd, opt) {
95
+ if (opt.default !== undefined) {
96
+ cmd.option(opt.flags, opt.description, String(opt.default));
97
+ }
98
+ else {
99
+ cmd.option(opt.flags, opt.description);
100
+ }
101
+ }
102
+ //# sourceMappingURL=build-program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-program.js","sourceRoot":"","sources":["../../src/spec/build-program.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,UAAU,oBAAoB,CAAC,IAAiB,EAAE,QAAyB;IAC/E,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAiB,EAAE,QAAyB;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,IAAI,cAAc,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,kBAAkB,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAQ,EAAE;YAC3C,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,iBAAiB,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5E,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE;YAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7D,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,qCAAqC,SAAS,GAAG,CAAC,CAAC;YACzF,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,KAAK;gBAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,YAAY,CACnB,IAAiB,EACjB,MAAoC,EACpC,QAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;YAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;;YACrE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QACrC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,qCAAqC,SAAS,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,KAAK;YAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,OAAO,kBAAkB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,GAAY,EAAE,GAAe;IAC9C,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galaxy-tool-util/cli",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "galaxy-tool-cache CLI — cache and inspect Galaxy tool metadata",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,10 +11,15 @@
11
11
  ".": {
12
12
  "types": "./dist/index.d.ts",
13
13
  "import": "./dist/index.js"
14
+ },
15
+ "./meta": {
16
+ "types": "./dist/meta/index.d.ts",
17
+ "import": "./dist/meta/index.js"
14
18
  }
15
19
  },
16
20
  "files": [
17
21
  "dist",
22
+ "spec",
18
23
  "README.md",
19
24
  "LICENSE"
20
25
  ],
@@ -34,8 +39,10 @@
34
39
  "effect": "^3.21.0",
35
40
  "nunjucks": "^3.2.4",
36
41
  "yaml": "^2.8.3",
37
- "@galaxy-tool-util/core": "1.0.0",
38
- "@galaxy-tool-util/schema": "1.0.0"
42
+ "@galaxy-tool-util/connection-validation": "1.2.0",
43
+ "@galaxy-tool-util/core": "1.2.0",
44
+ "@galaxy-tool-util/schema": "1.2.0",
45
+ "@galaxy-tool-util/search": "1.2.0"
39
46
  },
40
47
  "devDependencies": {
41
48
  "@types/node": "^25.5.0",
@@ -0,0 +1,152 @@
1
+ {
2
+ "name": "galaxy-tool-cache",
3
+ "description": "Cache and inspect Galaxy tool metadata",
4
+ "version": "1.0.0",
5
+ "commands": [
6
+ {
7
+ "name": "add",
8
+ "description": "Fetch a tool from ToolShed/Galaxy and cache it",
9
+ "handler": "add",
10
+ "args": [
11
+ {
12
+ "raw": "<tool_id>",
13
+ "description": "Tool ID (full toolshed path or TRS ID)"
14
+ }
15
+ ],
16
+ "options": [
17
+ {
18
+ "flags": "--version <ver>",
19
+ "description": "Tool version"
20
+ },
21
+ {
22
+ "flags": "--cache-dir <dir>",
23
+ "description": "Cache directory"
24
+ },
25
+ {
26
+ "flags": "--galaxy-url <url>",
27
+ "description": "Galaxy instance URL for fallback"
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ "name": "list",
33
+ "description": "List cached tools",
34
+ "handler": "list",
35
+ "options": [
36
+ {
37
+ "flags": "--json",
38
+ "description": "Output as JSON"
39
+ },
40
+ {
41
+ "flags": "--cache-dir <dir>",
42
+ "description": "Cache directory"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "name": "info",
48
+ "description": "Show metadata for a cached tool",
49
+ "handler": "info",
50
+ "args": [
51
+ {
52
+ "raw": "<tool_id>",
53
+ "description": "Tool ID"
54
+ }
55
+ ],
56
+ "options": [
57
+ {
58
+ "flags": "--version <ver>",
59
+ "description": "Tool version"
60
+ },
61
+ {
62
+ "flags": "--cache-dir <dir>",
63
+ "description": "Cache directory"
64
+ }
65
+ ]
66
+ },
67
+ {
68
+ "name": "clear",
69
+ "description": "Clear cached tools",
70
+ "handler": "clear",
71
+ "args": [
72
+ {
73
+ "raw": "[prefix]",
74
+ "description": "Only clear tools matching this prefix"
75
+ }
76
+ ],
77
+ "options": [
78
+ {
79
+ "flags": "--cache-dir <dir>",
80
+ "description": "Cache directory"
81
+ }
82
+ ]
83
+ },
84
+ {
85
+ "name": "schema",
86
+ "description": "Export JSON Schema for a cached tool's parameters",
87
+ "handler": "schema",
88
+ "args": [
89
+ {
90
+ "raw": "<tool_id>",
91
+ "description": "Tool ID"
92
+ }
93
+ ],
94
+ "options": [
95
+ {
96
+ "flags": "--version <ver>",
97
+ "description": "Tool version"
98
+ },
99
+ {
100
+ "flags": "--representation <rep>",
101
+ "description": "State representation (e.g., workflow_step)",
102
+ "default": "workflow_step"
103
+ },
104
+ {
105
+ "flags": "--output <file>",
106
+ "description": "Output file (default: stdout)"
107
+ },
108
+ {
109
+ "flags": "--cache-dir <dir>",
110
+ "description": "Cache directory"
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "name": "populate-workflow",
116
+ "description": "Scan a workflow and cache all referenced tools",
117
+ "handler": "populateWorkflow",
118
+ "args": [
119
+ {
120
+ "raw": "<file>",
121
+ "description": "Workflow file (.ga, .gxwf.yml)"
122
+ }
123
+ ],
124
+ "options": [
125
+ {
126
+ "flags": "--cache-dir <dir>",
127
+ "description": "Cache directory"
128
+ },
129
+ {
130
+ "flags": "--galaxy-url <url>",
131
+ "description": "Galaxy instance URL for fallback"
132
+ }
133
+ ]
134
+ },
135
+ {
136
+ "name": "structural-schema",
137
+ "description": "Export the structural JSON Schema for Galaxy workflows",
138
+ "handler": "structuralSchema",
139
+ "options": [
140
+ {
141
+ "flags": "--format <fmt>",
142
+ "description": "Workflow format: format2 (default) or native",
143
+ "default": "format2"
144
+ },
145
+ {
146
+ "flags": "--output <file>",
147
+ "description": "Output file (default: stdout)"
148
+ }
149
+ ]
150
+ }
151
+ ]
152
+ }