@vltpkg/cli-sdk 0.0.0-2 → 0.0.0-20

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 (153) hide show
  1. package/README.md +3 -0
  2. package/dist/esm/commands/cache.d.ts +65 -0
  3. package/dist/esm/commands/cache.d.ts.map +1 -0
  4. package/dist/esm/commands/cache.js +257 -0
  5. package/dist/esm/commands/cache.js.map +1 -0
  6. package/dist/esm/commands/ci.d.ts +10 -0
  7. package/dist/esm/commands/ci.d.ts.map +1 -0
  8. package/dist/esm/commands/ci.js +29 -0
  9. package/dist/esm/commands/ci.js.map +1 -0
  10. package/dist/esm/commands/config.d.ts.map +1 -1
  11. package/dist/esm/commands/config.js +2 -52
  12. package/dist/esm/commands/config.js.map +1 -1
  13. package/dist/esm/commands/exec-cache.d.ts +49 -0
  14. package/dist/esm/commands/exec-cache.d.ts.map +1 -0
  15. package/dist/esm/commands/exec-cache.js +134 -0
  16. package/dist/esm/commands/exec-cache.js.map +1 -0
  17. package/dist/esm/commands/exec-local.d.ts +6 -0
  18. package/dist/esm/commands/exec-local.d.ts.map +1 -0
  19. package/dist/esm/commands/exec-local.js +24 -0
  20. package/dist/esm/commands/exec-local.js.map +1 -0
  21. package/dist/esm/commands/exec.d.ts +4 -0
  22. package/dist/esm/commands/exec.d.ts.map +1 -1
  23. package/dist/esm/commands/exec.js +69 -10
  24. package/dist/esm/commands/exec.js.map +1 -1
  25. package/dist/esm/commands/gui.d.ts.map +1 -1
  26. package/dist/esm/commands/gui.js +1 -2
  27. package/dist/esm/commands/gui.js.map +1 -1
  28. package/dist/esm/commands/help.d.ts +1 -1
  29. package/dist/esm/commands/help.d.ts.map +1 -1
  30. package/dist/esm/commands/help.js +25 -3
  31. package/dist/esm/commands/help.js.map +1 -1
  32. package/dist/esm/commands/init.d.ts +4 -5
  33. package/dist/esm/commands/init.d.ts.map +1 -1
  34. package/dist/esm/commands/init.js +95 -9
  35. package/dist/esm/commands/init.js.map +1 -1
  36. package/dist/esm/commands/install/reporter.d.ts.map +1 -1
  37. package/dist/esm/commands/install/reporter.js +2 -1
  38. package/dist/esm/commands/install/reporter.js.map +1 -1
  39. package/dist/esm/commands/install.d.ts +5 -2
  40. package/dist/esm/commands/install.d.ts.map +1 -1
  41. package/dist/esm/commands/install.js +7 -1
  42. package/dist/esm/commands/install.js.map +1 -1
  43. package/dist/esm/commands/list.d.ts +2 -2
  44. package/dist/esm/commands/list.d.ts.map +1 -1
  45. package/dist/esm/commands/list.js +108 -31
  46. package/dist/esm/commands/list.js.map +1 -1
  47. package/dist/esm/commands/pack.d.ts +20 -0
  48. package/dist/esm/commands/pack.d.ts.map +1 -0
  49. package/dist/esm/commands/pack.js +81 -0
  50. package/dist/esm/commands/pack.js.map +1 -0
  51. package/dist/esm/commands/pkg.d.ts +2 -3
  52. package/dist/esm/commands/pkg.d.ts.map +1 -1
  53. package/dist/esm/commands/pkg.js +136 -34
  54. package/dist/esm/commands/pkg.js.map +1 -1
  55. package/dist/esm/commands/publish.d.ts +21 -0
  56. package/dist/esm/commands/publish.d.ts.map +1 -0
  57. package/dist/esm/commands/publish.js +169 -0
  58. package/dist/esm/commands/publish.js.map +1 -0
  59. package/dist/esm/commands/query.d.ts +2 -2
  60. package/dist/esm/commands/query.d.ts.map +1 -1
  61. package/dist/esm/commands/query.js +134 -21
  62. package/dist/esm/commands/query.js.map +1 -1
  63. package/dist/esm/commands/run-exec.d.ts +1 -0
  64. package/dist/esm/commands/run-exec.d.ts.map +1 -1
  65. package/dist/esm/commands/run-exec.js +1 -0
  66. package/dist/esm/commands/run-exec.js.map +1 -1
  67. package/dist/esm/commands/run.d.ts +1 -0
  68. package/dist/esm/commands/run.d.ts.map +1 -1
  69. package/dist/esm/commands/run.js +13 -16
  70. package/dist/esm/commands/run.js.map +1 -1
  71. package/dist/esm/commands/uninstall.d.ts +7 -1
  72. package/dist/esm/commands/uninstall.d.ts.map +1 -1
  73. package/dist/esm/commands/uninstall.js +7 -1
  74. package/dist/esm/commands/uninstall.js.map +1 -1
  75. package/dist/esm/commands/update.d.ts +10 -0
  76. package/dist/esm/commands/update.d.ts.map +1 -0
  77. package/dist/esm/commands/update.js +25 -0
  78. package/dist/esm/commands/update.js.map +1 -0
  79. package/dist/esm/commands/version.d.ts +22 -0
  80. package/dist/esm/commands/version.d.ts.map +1 -0
  81. package/dist/esm/commands/version.js +151 -0
  82. package/dist/esm/commands/version.js.map +1 -0
  83. package/dist/esm/commands/whoami.d.ts +4 -2
  84. package/dist/esm/commands/whoami.d.ts.map +1 -1
  85. package/dist/esm/commands/whoami.js +1 -1
  86. package/dist/esm/commands/whoami.js.map +1 -1
  87. package/dist/esm/config/definition.d.ts +85 -7
  88. package/dist/esm/config/definition.d.ts.map +1 -1
  89. package/dist/esm/config/definition.js +152 -23
  90. package/dist/esm/config/definition.js.map +1 -1
  91. package/dist/esm/config/index.d.ts +46 -40
  92. package/dist/esm/config/index.d.ts.map +1 -1
  93. package/dist/esm/config/index.js +124 -176
  94. package/dist/esm/config/index.js.map +1 -1
  95. package/dist/esm/config/merge.d.ts +3 -1
  96. package/dist/esm/config/merge.d.ts.map +1 -1
  97. package/dist/esm/config/merge.js +11 -6
  98. package/dist/esm/config/merge.js.map +1 -1
  99. package/dist/esm/config/usage.d.ts +3 -2
  100. package/dist/esm/config/usage.d.ts.map +1 -1
  101. package/dist/esm/config/usage.js.map +1 -1
  102. package/dist/esm/exec-command.d.ts +32 -14
  103. package/dist/esm/exec-command.d.ts.map +1 -1
  104. package/dist/esm/exec-command.js +195 -63
  105. package/dist/esm/exec-command.js.map +1 -1
  106. package/dist/esm/index.d.ts +1 -14
  107. package/dist/esm/index.d.ts.map +1 -1
  108. package/dist/esm/index.js +46 -20
  109. package/dist/esm/index.js.map +1 -1
  110. package/dist/esm/load-command.d.ts +16 -0
  111. package/dist/esm/load-command.d.ts.map +1 -0
  112. package/dist/esm/load-command.js +21 -0
  113. package/dist/esm/load-command.js.map +1 -0
  114. package/dist/esm/output.d.ts +6 -10
  115. package/dist/esm/output.d.ts.map +1 -1
  116. package/dist/esm/output.js +62 -32
  117. package/dist/esm/output.js.map +1 -1
  118. package/dist/esm/pack-tarball.d.ts +22 -0
  119. package/dist/esm/pack-tarball.d.ts.map +1 -0
  120. package/dist/esm/pack-tarball.js +247 -0
  121. package/dist/esm/pack-tarball.js.map +1 -0
  122. package/dist/esm/parse-add-remove-args.d.ts +1 -1
  123. package/dist/esm/parse-add-remove-args.d.ts.map +1 -1
  124. package/dist/esm/parse-add-remove-args.js +1 -1
  125. package/dist/esm/parse-add-remove-args.js.map +1 -1
  126. package/dist/esm/print-err.d.ts +12 -1
  127. package/dist/esm/print-err.d.ts.map +1 -1
  128. package/dist/esm/print-err.js +157 -26
  129. package/dist/esm/print-err.js.map +1 -1
  130. package/dist/esm/start-gui.d.ts +7 -33
  131. package/dist/esm/start-gui.d.ts.map +1 -1
  132. package/dist/esm/start-gui.js +33 -347
  133. package/dist/esm/start-gui.js.map +1 -1
  134. package/dist/esm/view.d.ts +2 -3
  135. package/dist/esm/view.d.ts.map +1 -1
  136. package/dist/esm/view.js.map +1 -1
  137. package/package.json +69 -44
  138. package/dist/esm/commands/install-exec.d.ts +0 -4
  139. package/dist/esm/commands/install-exec.d.ts.map +0 -1
  140. package/dist/esm/commands/install-exec.js +0 -13
  141. package/dist/esm/commands/install-exec.js.map +0 -1
  142. package/dist/esm/ignored-homedir-folder-names.d.ts +0 -7
  143. package/dist/esm/ignored-homedir-folder-names.d.ts.map +0 -1
  144. package/dist/esm/ignored-homedir-folder-names.js +0 -35
  145. package/dist/esm/ignored-homedir-folder-names.js.map +0 -1
  146. package/dist/esm/project-info.d.ts +0 -32
  147. package/dist/esm/project-info.d.ts.map +0 -1
  148. package/dist/esm/project-info.js +0 -90
  149. package/dist/esm/project-info.js.map +0 -1
  150. package/dist/esm/read-project-folders.d.ts +0 -27
  151. package/dist/esm/read-project-folders.d.ts.map +0 -1
  152. package/dist/esm/read-project-folders.js +0 -66
  153. package/dist/esm/read-project-folders.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/config/merge.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,wDAAwD;AAExD,uBAAuB;AACvB,0DAA0D;AAC1D,uDAAuD;AACvD,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,IAAO,EACP,GAAM,EACH,EAAE,CACL,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;KACjB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACf,CAAC;IACD,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,CAAC,CAAC,CACA,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,KAAK,QAAQ;oBACrB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACR,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAC3B,CAAC,CAAC;oBACD,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACT,CAAC;KACD,MAAM;AACL,iEAAiE;AACjE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAC3D,CACC,CAAA","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n\n// deep merge 2 objects\n// scalars are overwritten, objects are folded in together\n// if nothing to be added, then return the base object.\nexport const merge = <T extends Record<string, any>>(\n base: T,\n add: T,\n): T =>\n Object.fromEntries(\n Object.entries(base)\n .map(([k, v]) => [\n k,\n add[k] === undefined ? v\n : Array.isArray(v) && Array.isArray(add[k]) ?\n [...new Set([...v, ...add[k]])]\n : Array.isArray(v) || Array.isArray(add[k]) ? add[k]\n : (\n !!v &&\n typeof v === 'object' &&\n !!add[k] &&\n typeof add[k] === 'object'\n ) ?\n merge(v, add[k])\n : add[k],\n ])\n .concat(\n // already merged together if existing, so just get new additions\n Object.entries(add).filter(([k]) => base[k] === undefined),\n ),\n ) as T\n"]}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/config/merge.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,IAAO,EACP,GAAM,EACH,EAAE,CACL,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;KACjB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAqB,EAAE,CAAC;IAClC,CAAC;IACD,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C;gBACE,GAAG,IAAI,GAAG,CAAC;oBACT,GAAI,CAAoB;oBACxB,GAAI,GAAG,CAAC,CAAC,CAAoB;iBAC9B,CAAC;aACH;YACH,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,CAAC,CAAC,CACA,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,KAAK,QAAQ;oBACrB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACR,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAC3B,CAAC,CAAC;oBACD,KAAK,CAAC,CAAoB,EAAE,GAAG,CAAC,CAAC,CAAoB,CAAC;oBACxD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACT,CAAC;KACD,MAAM;AACL,iEAAiE;AACjE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAC3D,CACC,CAAA","sourcesContent":["type MergeableObject = Record<string, unknown>\ntype MergeableArray = unknown[]\n\n/*\n * deep merge 2 objects\n * scalars are overwritten, objects are folded in together\n * if nothing to be added, then return the base object.\n */\nexport const merge = <T extends MergeableObject>(\n base: T,\n add: T,\n): T =>\n Object.fromEntries(\n Object.entries(base)\n .map(([k, v]): [string, unknown] => [\n k,\n add[k] === undefined ? v\n : Array.isArray(v) && Array.isArray(add[k]) ?\n [\n ...new Set([\n ...(v as MergeableArray),\n ...(add[k] as MergeableArray),\n ]),\n ]\n : Array.isArray(v) || Array.isArray(add[k]) ? add[k]\n : (\n !!v &&\n typeof v === 'object' &&\n !!add[k] &&\n typeof add[k] === 'object'\n ) ?\n merge(v as MergeableObject, add[k] as MergeableObject)\n : add[k],\n ])\n .concat(\n // already merged together if existing, so just get new additions\n Object.entries(add).filter(([k]) => base[k] === undefined),\n ),\n ) as T\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { CommandUsage } from '../index.ts';
2
- export declare const commandUsage: ({ command, usage, description, subcommands, examples, options, }: {
2
+ export type CommandUsageDefinition = {
3
3
  command: string;
4
4
  usage: string | string[];
5
5
  description: string;
@@ -14,5 +14,6 @@ export declare const commandUsage: ({ command, usage, description, subcommands,
14
14
  value?: string;
15
15
  description: string;
16
16
  }>;
17
- }) => ReturnType<CommandUsage>;
17
+ };
18
+ export declare const commandUsage: ({ command, usage, description, subcommands, examples, options, }: CommandUsageDefinition) => ReturnType<CommandUsage>;
18
19
  //# sourceMappingURL=usage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/config/usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,eAAO,MAAM,YAAY,qEAOtB;IACD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAClB,MAAM,EACN;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CACnD,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAClE,KAAG,UAAU,CAAC,YAAY,CA+C1B,CAAA"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/config/usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAClB,MAAM,EACN;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CACnD,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAClE,CAAA;AAED,eAAO,MAAM,YAAY,qEAOtB,sBAAsB,KAAG,UAAU,CAAC,YAAY,CA+ClD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/config/usage.ts"],"names":[],"mappings":"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","sourcesContent":["import { jack } from 'jackspeak'\nimport type { CommandUsage } from '../index.ts'\nimport { commandAliases } from './definition.ts'\n\nconst toArr = <T>(v: T | T[]): T[] => (Array.isArray(v) ? v : [v])\n\nconst code = (v: string) => [v, { pre: true }] as const\n\nconst join = (args: (string | undefined)[], joiner = ' ') =>\n args.filter(Boolean).join(joiner)\n\nexport const commandUsage = ({\n command,\n usage,\n description,\n subcommands,\n examples,\n options,\n}: {\n command: string\n usage: string | string[]\n description: string\n subcommands?: Record<\n string,\n { usage?: string | string[]; description: string }\n >\n examples?: Record<string, { description: string }>\n options?: Record<string, { value?: string; description: string }>\n}): ReturnType<CommandUsage> => {\n const vlt = (s?: string) => join([`vlt`, command, s])\n\n const joinUsage = (usages?: string | string[]) =>\n toArr(usages).map(vlt).filter(Boolean).join('\\n')\n\n const j = jack({ usage: joinUsage(usage) }).description(description)\n\n const aliases = commandAliases.get(command)\n if (aliases) {\n j.heading('Aliases', 2).description(aliases.join(', '), {\n pre: true,\n })\n }\n\n if (subcommands) {\n j.heading('Subcommands', 2)\n for (const [k, v] of Object.entries(subcommands)) {\n j.heading(k, 3)\n .description(v.description)\n .description(\n ...code(joinUsage(toArr(v.usage).map(u => join([k, u])))),\n )\n }\n }\n\n if (examples) {\n j.heading('Examples', 2)\n for (const [k, v] of Object.entries(examples)) {\n j.description(v.description).description(...code(vlt(k)))\n }\n }\n\n if (options) {\n j.heading('Options', 2)\n for (const [k, v] of Object.entries(options)) {\n j.heading(k, 3)\n .description(v.description)\n .description(\n ...code(\n join(['--', k, v.value ? '=' : undefined, v.value], ''),\n ),\n )\n }\n }\n\n return j\n}\n"]}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/config/usage.ts"],"names":[],"mappings":"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","sourcesContent":["import { jack } from 'jackspeak'\nimport type { CommandUsage } from '../index.ts'\nimport { commandAliases } from './definition.ts'\n\nconst toArr = <T>(v: T | T[]): T[] => (Array.isArray(v) ? v : [v])\n\nconst code = (v: string) => [v, { pre: true }] as const\n\nconst join = (args: (string | undefined)[], joiner = ' ') =>\n args.filter(Boolean).join(joiner)\n\nexport type CommandUsageDefinition = {\n command: string\n usage: string | string[]\n description: string\n subcommands?: Record<\n string,\n { usage?: string | string[]; description: string }\n >\n examples?: Record<string, { description: string }>\n options?: Record<string, { value?: string; description: string }>\n}\n\nexport const commandUsage = ({\n command,\n usage,\n description,\n subcommands,\n examples,\n options,\n}: CommandUsageDefinition): ReturnType<CommandUsage> => {\n const vlt = (s?: string) => join([`vlt`, command, s])\n\n const joinUsage = (usages?: string | string[]) =>\n toArr(usages).map(vlt).filter(Boolean).join('\\n')\n\n const j = jack({ usage: joinUsage(usage) }).description(description)\n\n const aliases = commandAliases.get(command)\n if (aliases) {\n j.heading('Aliases', 2).description(aliases.join(', '), {\n pre: true,\n })\n }\n\n if (subcommands) {\n j.heading('Subcommands', 2)\n for (const [k, v] of Object.entries(subcommands)) {\n j.heading(k, 3)\n .description(v.description)\n .description(\n ...code(joinUsage(toArr(v.usage).map(u => join([k, u])))),\n )\n }\n }\n\n if (examples) {\n j.heading('Examples', 2)\n for (const [k, v] of Object.entries(examples)) {\n j.description(v.description).description(...code(vlt(k)))\n }\n }\n\n if (options) {\n j.heading('Options', 2)\n for (const [k, v] of Object.entries(options)) {\n j.heading(k, 3)\n .description(v.description)\n .description(\n ...code(\n join(['--', k, v.value ? '=' : undefined, v.value], ''),\n ),\n )\n }\n }\n\n return j\n}\n"]}
@@ -1,34 +1,52 @@
1
1
  /**
2
- * Implementation shared between `vlt run`, `vlt run-exec`, and `vlt exec`
2
+ * impl for `vlt run`, `vlt run-exec`, `vlt exec-local`, `vlt exec`
3
+ * @module
3
4
  */
4
- import type { exec, execFG, ExecOptions, run, runExec, runExecFG, RunExecOptions, runFG, RunOptions, RunResult } from '@vltpkg/run';
5
- import { Monorepo } from '@vltpkg/workspaces';
6
- import type { Workspace } from '@vltpkg/workspaces';
5
+ import type { NormalizedManifest } from '@vltpkg/types';
6
+ import type { exec, execFG, ExecOptions, run, runExec, runExecFG, RunExecOptions, runFG, RunFGResult, RunOptions, RunResult } from '@vltpkg/run';
7
7
  import type { LoadedConfig } from './config/index.ts';
8
- import type { SpawnResultNoStdio } from '@vltpkg/promise-spawn';
9
8
  export type RunnerBG = typeof exec | typeof run | typeof runExec;
10
9
  export type RunnerFG = typeof execFG | typeof runExecFG | typeof runFG;
11
10
  export type RunnerOptions = ExecOptions & RunExecOptions & RunOptions;
12
- export type ExecResult = undefined | SpawnResultNoStdio | Record<string, RunResult>;
11
+ export type MultiRunResult = Record<string, RunResult>;
12
+ export type ScriptSet = Record<string, string>;
13
+ export type MultiScriptSet = Record<string, ScriptSet>;
14
+ export type ExecResult = RunFGResult | MultiRunResult | ScriptSet | MultiScriptSet;
15
+ export declare const views: {
16
+ readonly human: (result: ExecResult) => void;
17
+ readonly json: (result: ExecResult) => ExecResult | undefined;
18
+ };
19
+ type ViewValues = 'human' | 'json' | 'inspect' | 'silent';
13
20
  export declare class ExecCommand<B extends RunnerBG, F extends RunnerFG> {
21
+ #private;
14
22
  bg: B;
15
23
  fg: F;
16
24
  arg0?: string;
17
25
  args: string[];
18
- monorepo?: Monorepo;
19
- /** how many places are we doing things in? */
20
- spaces: number;
21
26
  conf: LoadedConfig;
22
27
  projectRoot: string;
28
+ view: ViewValues;
29
+ validViewValues: Map<string, ViewValues>;
23
30
  constructor(conf: LoadedConfig, bg: B, fg: F);
31
+ hasArg0(): this is this & {
32
+ arg0: string;
33
+ };
24
34
  run(): Promise<ExecResult>;
25
- printResult(ws: Workspace, result: RunResult): void;
26
- setExitCode(result: RunResult): void;
35
+ printResult(path: string, result: RunResult): void;
27
36
  interactiveShell(): string;
28
37
  defaultArg0(): string | undefined;
38
+ getCwd(): string;
29
39
  fgArg(): RunnerOptions | undefined;
30
- /** If this returns undefined, then nothing to do */
31
- bgArg(ws: Workspace): RunnerOptions;
32
- noArgsMulti(): void;
40
+ bgArg(this: this & {
41
+ arg0: string;
42
+ }, cwd: string): RunnerOptions;
43
+ noArgsSingle(): ScriptSet;
44
+ noArgsMulti(): MultiScriptSet;
45
+ getTargets(): {
46
+ label: string;
47
+ cwd: string;
48
+ manifest: NormalizedManifest;
49
+ }[];
33
50
  }
51
+ export {};
34
52
  //# sourceMappingURL=exec-command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec-command.d.ts","sourceRoot":"","sources":["../../src/exec-command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,IAAI,EACJ,MAAM,EACN,WAAW,EACX,GAAG,EACH,OAAO,EACP,SAAS,EACT,cAAc,EACd,KAAK,EACL,UAAU,EACV,SAAS,EACV,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,MAAM,MAAM,QAAQ,GAAG,OAAO,IAAI,GAAG,OAAO,GAAG,GAAG,OAAO,OAAO,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,OAAO,MAAM,GAAG,OAAO,SAAS,GAAG,OAAO,KAAK,CAAA;AACtE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,cAAc,GAAG,UAAU,CAAA;AACrE,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,kBAAkB,GAClB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAE7B,qBAAa,WAAW,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ;IAC7D,EAAE,EAAE,CAAC,CAAA;IACL,EAAE,EAAE,CAAC,CAAA;IACL,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;gBAEP,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAsBtC,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;IAmDhC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;IAgB5C,WAAW,CAAC,MAAM,EAAE,SAAS;IAM7B,gBAAgB,IAAI,MAAM;IAU1B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,KAAK,IAAI,aAAa,GAAG,SAAS;IAoBlC,oDAAoD;IACpD,KAAK,CAAC,EAAE,EAAE,SAAS,GAAG,aAAa;IAqBnC,WAAW;CAKZ"}
1
+ {"version":3,"file":"exec-command.d.ts","sourceRoot":"","sources":["../../src/exec-command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EACV,IAAI,EACJ,MAAM,EACN,WAAW,EACX,GAAG,EACH,OAAO,EACP,SAAS,EACT,cAAc,EACd,KAAK,EACL,WAAW,EACX,UAAU,EACV,SAAS,EACV,MAAM,aAAa,CAAA;AAMpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAOrD,MAAM,MAAM,QAAQ,GAAG,OAAO,IAAI,GAAG,OAAO,GAAG,GAAG,OAAO,OAAO,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,OAAO,MAAM,GAAG,OAAO,SAAS,GAAG,OAAO,KAAK,CAAA;AACtE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,cAAc,GAAG,UAAU,CAAA;AACrE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AACtD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC9C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AACtD,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,cAAc,GACd,SAAS,GACT,cAAc,CAAA;AA6BlB,eAAO,MAAM,KAAK;;;CAeoB,CAAA;AAEtC,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEzD,qBAAa,WAAW,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ;;IAC7D,EAAE,EAAE,CAAC,CAAA;IACL,EAAE,EAAE,CAAC,CAAA;IACL,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,EAAE,CAAA;IAGd,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,UAAU,CAAA;IAChB,eAAe,0BAKb;gBAEU,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAmB5C,OAAO,IAAI,IAAI,IAAI,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAIpC,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;IAgHhC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IA0B3C,gBAAgB,IAAI,MAAM;IAU1B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,MAAM,IAAI,MAAM;IAYhB,KAAK,IAAI,aAAa,GAAG,SAAS;IAmBlC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa;IAchE,YAAY,IAAI,SAAS;IAKzB,WAAW,IAAI,cAAc;IAM7B,UAAU,IAAI;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;QACX,QAAQ,EAAE,kBAAkB,CAAA;KAC7B,EAAE;CAsBJ"}
@@ -1,95 +1,201 @@
1
1
  /**
2
- * Implementation shared between `vlt run`, `vlt run-exec`, and `vlt exec`
2
+ * impl for `vlt run`, `vlt run-exec`, `vlt exec-local`, `vlt exec`
3
+ * @module
3
4
  */
4
- import { error, isErrorRoot } from '@vltpkg/error-cause';
5
+ import { error } from '@vltpkg/error-cause';
6
+ import { isErrorWithCause } from '@vltpkg/types';
7
+ import { Query } from '@vltpkg/query';
8
+ import { actual } from '@vltpkg/graph';
5
9
  import { isRunResult } from '@vltpkg/run';
6
10
  import { Monorepo } from '@vltpkg/workspaces';
7
11
  import { ansiToAnsi } from 'ansi-to-pre';
8
- import chalk from 'chalk';
9
- import { stdout, stderr } from "./output.js";
12
+ import { stderr, stdout, styleTextStdout } from "./output.js";
13
+ import assert from 'node:assert';
14
+ import { resolve } from 'node:path';
15
+ const isScriptSet = (o) => {
16
+ if (!o || typeof o !== 'object')
17
+ return false;
18
+ for (const v of Object.values(o)) {
19
+ if (typeof v !== 'string')
20
+ return false;
21
+ }
22
+ return true;
23
+ };
24
+ const isMultiScriptSet = (o) => {
25
+ for (const v of Object.values(o)) {
26
+ if (!isScriptSet(v))
27
+ return false;
28
+ }
29
+ return true;
30
+ };
31
+ const isSingleSuccess = (o) => o.signal === null && o.status === 0;
32
+ const setExitCode = (result) => {
33
+ /* c8 ignore next */
34
+ process.exitCode = process.exitCode || (result.status ?? 1);
35
+ };
36
+ export const views = {
37
+ // run results for single or multiple will be printed along the way.
38
+ human: result => {
39
+ if (isScriptSet(result))
40
+ stdout('Scripts available:', result);
41
+ else if (isMultiScriptSet(result)) {
42
+ stdout('Scripts available:');
43
+ for (const [path, scripts] of Object.entries(result)) {
44
+ stdout(path, scripts);
45
+ }
46
+ }
47
+ },
48
+ json: result => isRunResult(result) && isSingleSuccess(result) ?
49
+ undefined
50
+ : result,
51
+ };
10
52
  export class ExecCommand {
11
53
  bg;
12
54
  fg;
13
55
  arg0;
14
56
  args;
15
- monorepo;
16
- /** how many places are we doing things in? */
17
- spaces;
57
+ #monorepo;
58
+ #nodes;
18
59
  conf;
19
60
  projectRoot;
61
+ view;
62
+ validViewValues = new Map([
63
+ ['human', 'human'],
64
+ ['json', 'json'],
65
+ ['inspect', 'inspect'],
66
+ ['silent', 'silent'],
67
+ ]);
20
68
  constructor(conf, bg, fg) {
21
69
  this.conf = conf;
22
70
  this.bg = bg;
23
71
  this.fg = fg;
72
+ this.view = this.validViewValues.get(conf.values.view) ?? 'human';
24
73
  const { projectRoot, positionals: [arg0, ...args], } = conf;
25
74
  this.arg0 = arg0;
26
75
  this.args = args;
27
- const paths = conf.get('workspace');
28
- const groups = conf.get('workspace-group');
29
- const recursive = conf.get('recursive');
30
- this.monorepo =
31
- paths?.length || groups?.length || recursive ?
32
- Monorepo.load(projectRoot, { load: { paths, groups } })
33
- : undefined;
34
- this.spaces = this.monorepo?.size ?? 1;
35
76
  this.projectRoot = projectRoot;
36
77
  }
78
+ #targetCount() {
79
+ if (this.#nodes)
80
+ return this.#nodes.length;
81
+ return this.#monorepo?.size ?? 1;
82
+ }
83
+ hasArg0() {
84
+ return !!this.arg0;
85
+ }
37
86
  async run() {
38
- if (this.spaces === 1) {
87
+ const { conf } = this;
88
+ const queryString = conf.get('scope');
89
+ // scope takes precedence over workspaces or groups
90
+ if (queryString) {
91
+ const graph = actual.load({
92
+ ...conf.options,
93
+ mainManifest: conf.options.packageJson.read(this.projectRoot),
94
+ monorepo: Monorepo.load(this.projectRoot),
95
+ loadManifests: false,
96
+ });
97
+ const query = new Query({
98
+ graph,
99
+ specOptions: conf.options,
100
+ securityArchive: undefined,
101
+ });
102
+ const { nodes } = await query.search(queryString, {
103
+ signal: new AbortController().signal,
104
+ });
105
+ this.#nodes = [];
106
+ for (const node of nodes) {
107
+ const { location } = node.toJSON();
108
+ assert(location, error(`node ${node.id} has no location`, {
109
+ found: node,
110
+ }));
111
+ this.#nodes.push(location);
112
+ }
113
+ }
114
+ else {
115
+ const paths = conf.get('workspace');
116
+ const groups = conf.get('workspace-group');
117
+ const recursive = conf.get('recursive');
118
+ this.#monorepo =
119
+ paths?.length || groups?.length || recursive ?
120
+ Monorepo.load(this.projectRoot, {
121
+ load: { paths, groups },
122
+ })
123
+ : undefined;
124
+ }
125
+ if (this.#targetCount() === 1) {
39
126
  const arg = this.fgArg();
40
127
  if (!arg)
41
- return;
128
+ return this.noArgsSingle();
42
129
  const result = await this.fg(arg);
43
- stdout(result);
44
130
  if (isRunResult(result)) {
45
- this.setExitCode(result);
131
+ setExitCode(result);
46
132
  }
47
133
  return result;
48
134
  }
49
- const m = this.monorepo;
50
- if (!m || this.spaces === 0) {
51
- throw error('no matching workspaces found', {
52
- /* c8 ignore next - already guarded */
53
- validOptions: [...(this.monorepo?.load().paths() ?? [])],
54
- });
135
+ if (this.#targetCount() === 0) {
136
+ if (queryString) {
137
+ throw error('no matching nodes found for query', {
138
+ found: queryString,
139
+ });
140
+ }
141
+ else {
142
+ throw error('no matching workspaces found', {
143
+ /* c8 ignore next - already guarded */
144
+ validOptions: [...(this.#monorepo?.load().paths() ?? [])],
145
+ });
146
+ }
55
147
  }
56
- const arg0 = this.arg0;
57
- if (!arg0) {
58
- this.noArgsMulti();
59
- return;
148
+ if (!this.hasArg0()) {
149
+ return this.noArgsMulti();
60
150
  }
61
151
  // run across workspaces
62
152
  let failed = false;
63
- const resultMap = await m.run(async (ws) => {
64
- if (!failed)
65
- stderr(`${ws.path} ${arg0}`);
66
- const result = await this.bg(this.bgArg(ws)).catch((er) => {
67
- if (isErrorRoot(er) && isRunResult(er.cause)) {
68
- this.printResult(ws, er.cause);
153
+ const runInDir = async (cwd, label) => {
154
+ const result = await this.bg(this.bgArg(cwd)).catch((er) => {
155
+ if (isErrorWithCause(er) && isRunResult(er.cause)) {
156
+ this.printResult(label, er.cause);
69
157
  }
70
158
  failed = true;
71
159
  throw er;
72
160
  });
73
161
  if (!failed)
74
- this.printResult(ws, result);
162
+ this.printResult(label, result);
75
163
  return result;
76
- });
164
+ };
165
+ const resultMap = new Map();
166
+ if (this.#nodes) {
167
+ for (const { label, cwd } of this.getTargets()) {
168
+ const result = await runInDir(cwd, label);
169
+ resultMap.set(label, result);
170
+ }
171
+ }
172
+ else if (this.#monorepo) {
173
+ const wsResultMap = await this.#monorepo.run(async (ws) => {
174
+ return runInDir(ws.fullpath, ws.path);
175
+ });
176
+ for (const [ws, result] of wsResultMap) {
177
+ resultMap.set(ws.path, result);
178
+ }
179
+ }
77
180
  const results = {};
78
- for (const [ws, result] of resultMap) {
181
+ for (const [path, result] of resultMap) {
79
182
  if (result.status === 0 && result.signal === null) {
80
183
  result.stdout = '';
81
184
  result.stderr = '';
82
185
  }
83
- results[ws.path] = result;
186
+ results[path] = result;
84
187
  }
85
188
  return results;
86
189
  }
87
- printResult(ws, result) {
190
+ printResult(path, result) {
191
+ // non-human results just get printed at the end
192
+ if (this.view !== 'human')
193
+ return;
88
194
  if (result.status === 0 && result.signal === null) {
89
- stdout(ws.path, 'ok');
195
+ stdout(path, 'ok');
90
196
  }
91
197
  else {
92
- stdout(chalk.bgWhiteBright.black.bold(ws.path + ' failure'), {
198
+ stdout(styleTextStdout(['bgWhiteBright', 'black', 'bold'], path + ' failure'), {
93
199
  status: result.status,
94
200
  signal: result.signal,
95
201
  });
@@ -99,13 +205,9 @@ export class ExecCommand {
99
205
  if (result.stdout)
100
206
  stdout(ansiToAnsi(result.stdout));
101
207
  /* c8 ignore stop */
102
- this.setExitCode(result);
208
+ setExitCode(result);
103
209
  }
104
210
  }
105
- setExitCode(result) {
106
- /* c8 ignore next */
107
- process.exitCode = process.exitCode || (result.status ?? 1);
108
- }
109
211
  /* c8 ignore start - env specific */
110
212
  interactiveShell() {
111
213
  return (process.env.SHELL ??
@@ -113,47 +215,77 @@ export class ExecCommand {
113
215
  (process.platform === 'win32' ? 'cmd.exe' : '/bin/sh'));
114
216
  }
115
217
  /* c8 ignore stop */
116
- // overridden by 'vlt run' to print options and return undefined
218
+ // overridden by 'vlt run' which returns undefined
117
219
  defaultArg0() {
118
220
  return this.interactiveShell();
119
221
  }
222
+ getCwd() {
223
+ if (this.#nodes) {
224
+ const [first] = this.#nodes;
225
+ assert(first, error('no nodes found'));
226
+ return resolve(this.projectRoot, first);
227
+ }
228
+ return (this.#monorepo?.values().next().value?.fullpath ??
229
+ this.projectRoot);
230
+ }
120
231
  fgArg() {
121
- const ws = this.monorepo?.values().next().value;
122
- const cwd = ws?.fullpath ?? this.projectRoot;
232
+ const cwd = this.getCwd();
123
233
  const arg0 = this.arg0 ?? this.defaultArg0();
124
- if (!arg0) {
125
- return undefined;
126
- }
234
+ // return undefined so noArgsSingle will be called instead
235
+ if (typeof arg0 !== 'string')
236
+ return;
127
237
  return {
128
238
  cwd,
129
239
  /* c8 ignore next - already guarded */
130
240
  arg0,
131
241
  args: this.args,
132
242
  projectRoot: this.projectRoot,
133
- packageJson: this.monorepo?.packageJson,
243
+ packageJson: this.conf.options.packageJson,
134
244
  'script-shell': this.arg0 ? this.conf.get('script-shell') : false,
135
245
  };
136
246
  }
137
- /** If this returns undefined, then nothing to do */
138
- bgArg(ws) {
139
- /* c8 ignore start - already guarded */
140
- if (!this.arg0)
141
- throw error('Cannot spawn interactive shells in multiple workspaces');
142
- /* c8 ignore stop */
247
+ bgArg(cwd) {
143
248
  return {
144
- cwd: ws.fullpath,
249
+ cwd,
145
250
  acceptFail: !this.conf.get('bail'),
146
251
  ignoreMissing: true,
147
252
  arg0: this.arg0,
148
253
  args: this.args,
149
254
  projectRoot: this.projectRoot,
150
- packageJson: this.monorepo?.packageJson,
255
+ packageJson: this.conf.options.packageJson,
151
256
  'script-shell': this.conf.get('script-shell'),
152
257
  };
153
258
  }
154
- // overridden in `vlt run` to print available scripts
259
+ /* c8 ignore start - not used, only here to override */
260
+ noArgsSingle() {
261
+ throw error('Failed to determine interactive shell to spawn');
262
+ }
263
+ /* c8 ignore stop - not used, only here to override */
155
264
  noArgsMulti() {
156
265
  throw error('Cannot spawn interactive shells in multiple workspaces');
157
266
  }
267
+ getTargets() {
268
+ const targets = [];
269
+ if (this.#nodes) {
270
+ for (const location of this.#nodes) {
271
+ const manifest = this.conf.options.packageJson.read(location);
272
+ const label =
273
+ /* c8 ignore next */
274
+ location.startsWith('./') ? location.slice(2) : location;
275
+ const cwd = resolve(this.projectRoot, location);
276
+ targets.push({ label, cwd, manifest });
277
+ }
278
+ }
279
+ else if (this.#monorepo) {
280
+ this.#monorepo.runSync(ws => {
281
+ targets.push({
282
+ label: ws.path,
283
+ cwd: ws.fullpath,
284
+ manifest: ws.manifest,
285
+ });
286
+ });
287
+ }
288
+ return targets;
289
+ }
158
290
  }
159
291
  //# sourceMappingURL=exec-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec-command.js","sourceRoot":"","sources":["../../src/exec-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Implementation shared between `vlt run`, `vlt run-exec`, and `vlt exec`\n */\n\nimport { error, isErrorRoot } from '@vltpkg/error-cause'\nimport { isRunResult } from '@vltpkg/run'\nimport type {\n exec,\n execFG,\n ExecOptions,\n run,\n runExec,\n runExecFG,\n RunExecOptions,\n runFG,\n RunOptions,\n RunResult,\n} from '@vltpkg/run'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport type { Workspace } from '@vltpkg/workspaces'\nimport { ansiToAnsi } from 'ansi-to-pre'\nimport chalk from 'chalk'\nimport type { LoadedConfig } from './config/index.ts'\nimport { stdout, stderr } from './output.ts'\nimport type { SpawnResultNoStdio } from '@vltpkg/promise-spawn'\n\nexport type RunnerBG = typeof exec | typeof run | typeof runExec\nexport type RunnerFG = typeof execFG | typeof runExecFG | typeof runFG\nexport type RunnerOptions = ExecOptions & RunExecOptions & RunOptions\nexport type ExecResult =\n | undefined\n | SpawnResultNoStdio\n | Record<string, RunResult>\n\nexport class ExecCommand<B extends RunnerBG, F extends RunnerFG> {\n bg: B\n fg: F\n arg0?: string\n args: string[]\n monorepo?: Monorepo\n /** how many places are we doing things in? */\n spaces: number\n conf: LoadedConfig\n projectRoot: string\n\n constructor(conf: LoadedConfig, bg: B, fg: F) {\n this.conf = conf\n this.bg = bg\n this.fg = fg\n const {\n projectRoot,\n positionals: [arg0, ...args],\n } = conf\n this.arg0 = arg0\n this.args = args\n\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n this.monorepo =\n paths?.length || groups?.length || recursive ?\n Monorepo.load(projectRoot, { load: { paths, groups } })\n : undefined\n this.spaces = this.monorepo?.size ?? 1\n this.projectRoot = projectRoot\n }\n\n async run(): Promise<ExecResult> {\n if (this.spaces === 1) {\n const arg = this.fgArg()\n if (!arg) return\n const result = await this.fg(arg)\n stdout(result)\n if (isRunResult(result)) {\n this.setExitCode(result)\n }\n return result\n }\n const m = this.monorepo\n if (!m || this.spaces === 0) {\n throw error('no matching workspaces found', {\n /* c8 ignore next - already guarded */\n validOptions: [...(this.monorepo?.load().paths() ?? [])],\n })\n }\n const arg0 = this.arg0\n if (!arg0) {\n this.noArgsMulti()\n return\n }\n // run across workspaces\n let failed = false\n const resultMap = await m.run(async ws => {\n if (!failed) stderr(`${ws.path} ${arg0}`)\n const result = await this.bg(this.bgArg(ws)).catch(\n (er: unknown) => {\n if (isErrorRoot(er) && isRunResult(er.cause)) {\n this.printResult(ws, er.cause)\n }\n failed = true\n throw er\n },\n )\n if (!failed) this.printResult(ws, result)\n return result\n })\n\n const results: Record<string, RunResult> = {}\n for (const [ws, result] of resultMap) {\n if (result.status === 0 && result.signal === null) {\n result.stdout = ''\n result.stderr = ''\n }\n results[ws.path] = result\n }\n return results\n }\n\n printResult(ws: Workspace, result: RunResult) {\n if (result.status === 0 && result.signal === null) {\n stdout(ws.path, 'ok')\n } else {\n stdout(chalk.bgWhiteBright.black.bold(ws.path + ' failure'), {\n status: result.status,\n signal: result.signal,\n })\n /* c8 ignore start */\n if (result.stderr) stderr(ansiToAnsi(result.stderr))\n if (result.stdout) stdout(ansiToAnsi(result.stdout))\n /* c8 ignore stop */\n this.setExitCode(result)\n }\n }\n\n setExitCode(result: RunResult) {\n /* c8 ignore next */\n process.exitCode = process.exitCode || (result.status ?? 1)\n }\n\n /* c8 ignore start - env specific */\n interactiveShell(): string {\n return (\n process.env.SHELL ??\n this.conf.get('script-shell') ??\n (process.platform === 'win32' ? 'cmd.exe' : '/bin/sh')\n )\n }\n /* c8 ignore stop */\n\n // overridden by 'vlt run' to print options and return undefined\n defaultArg0(): string | undefined {\n return this.interactiveShell()\n }\n\n fgArg(): RunnerOptions | undefined {\n const ws = this.monorepo?.values().next().value\n const cwd = ws?.fullpath ?? this.projectRoot\n const arg0 = this.arg0 ?? this.defaultArg0()\n if (!arg0) {\n return undefined\n }\n\n return {\n cwd,\n /* c8 ignore next - already guarded */\n arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.monorepo?.packageJson,\n 'script-shell':\n this.arg0 ? this.conf.get('script-shell') : false,\n }\n }\n\n /** If this returns undefined, then nothing to do */\n bgArg(ws: Workspace): RunnerOptions {\n /* c8 ignore start - already guarded */\n if (!this.arg0)\n throw error(\n 'Cannot spawn interactive shells in multiple workspaces',\n )\n /* c8 ignore stop */\n\n return {\n cwd: ws.fullpath,\n acceptFail: !this.conf.get('bail'),\n ignoreMissing: true,\n arg0: this.arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.monorepo?.packageJson,\n 'script-shell': this.conf.get('script-shell'),\n }\n }\n\n // overridden in `vlt run` to print available scripts\n noArgsMulti() {\n throw error(\n 'Cannot spawn interactive shells in multiple workspaces',\n )\n }\n}\n"]}
1
+ {"version":3,"file":"exec-command.js","sourceRoot":"","sources":["../../src/exec-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * impl for `vlt run`, `vlt run-exec`, `vlt exec-local`, `vlt exec`\n * @module\n */\n\nimport { error } from '@vltpkg/error-cause'\nimport { isErrorWithCause } from '@vltpkg/types'\nimport type { NormalizedManifest } from '@vltpkg/types'\nimport type {\n exec,\n execFG,\n ExecOptions,\n run,\n runExec,\n runExecFG,\n RunExecOptions,\n runFG,\n RunFGResult,\n RunOptions,\n RunResult,\n} from '@vltpkg/run'\nimport { Query } from '@vltpkg/query'\nimport { actual } from '@vltpkg/graph'\nimport { isRunResult } from '@vltpkg/run'\nimport { Monorepo } from '@vltpkg/workspaces'\nimport { ansiToAnsi } from 'ansi-to-pre'\nimport type { LoadedConfig } from './config/index.ts'\nimport { stderr, stdout, styleTextStdout } from './output.ts'\nimport type { Views } from './view.ts'\nimport type { SpawnResultStdioStrings } from '@vltpkg/promise-spawn'\nimport assert from 'node:assert'\nimport { resolve } from 'node:path'\n\nexport type RunnerBG = typeof exec | typeof run | typeof runExec\nexport type RunnerFG = typeof execFG | typeof runExecFG | typeof runFG\nexport type RunnerOptions = ExecOptions & RunExecOptions & RunOptions\nexport type MultiRunResult = Record<string, RunResult>\nexport type ScriptSet = Record<string, string>\nexport type MultiScriptSet = Record<string, ScriptSet>\nexport type ExecResult =\n | RunFGResult\n | MultiRunResult\n | ScriptSet\n | MultiScriptSet\n\nconst isScriptSet = (o: unknown): o is ScriptSet => {\n if (!o || typeof o !== 'object') return false\n for (const v of Object.values(o)) {\n if (typeof v !== 'string') return false\n }\n return true\n}\n\nconst isMultiScriptSet = (\n o: ExecResult,\n): o is Record<string, ScriptSet> => {\n for (const v of Object.values(o)) {\n if (!isScriptSet(v)) return false\n }\n return true\n}\n\nconst isSingleSuccess = (\n o: RunResult,\n): o is RunResult & { status: 0; signal: null } =>\n o.signal === null && o.status === 0\n\nconst setExitCode = (result: RunResult) => {\n /* c8 ignore next */\n process.exitCode = process.exitCode || (result.status ?? 1)\n}\n\nexport const views = {\n // run results for single or multiple will be printed along the way.\n human: result => {\n if (isScriptSet(result)) stdout('Scripts available:', result)\n else if (isMultiScriptSet(result)) {\n stdout('Scripts available:')\n for (const [path, scripts] of Object.entries(result)) {\n stdout(path, scripts)\n }\n }\n },\n json: result =>\n isRunResult(result) && isSingleSuccess(result) ?\n undefined\n : result,\n} as const satisfies Views<ExecResult>\n\ntype ViewValues = 'human' | 'json' | 'inspect' | 'silent'\n\nexport class ExecCommand<B extends RunnerBG, F extends RunnerFG> {\n bg: B\n fg: F\n arg0?: string\n args: string[]\n #monorepo?: Monorepo\n #nodes?: string[]\n conf: LoadedConfig\n projectRoot: string\n view: ViewValues\n validViewValues = new Map<string, ViewValues>([\n ['human', 'human'],\n ['json', 'json'],\n ['inspect', 'inspect'],\n ['silent', 'silent'],\n ])\n\n constructor(conf: LoadedConfig, bg: B, fg: F) {\n this.conf = conf\n this.bg = bg\n this.fg = fg\n this.view = this.validViewValues.get(conf.values.view) ?? 'human'\n const {\n projectRoot,\n positionals: [arg0, ...args],\n } = conf\n this.arg0 = arg0\n this.args = args\n this.projectRoot = projectRoot\n }\n\n #targetCount(): number {\n if (this.#nodes) return this.#nodes.length\n return this.#monorepo?.size ?? 1\n }\n\n hasArg0(): this is this & { arg0: string } {\n return !!this.arg0\n }\n\n async run(): Promise<ExecResult> {\n const { conf } = this\n\n const queryString = conf.get('scope')\n // scope takes precedence over workspaces or groups\n if (queryString) {\n const graph = actual.load({\n ...conf.options,\n mainManifest: conf.options.packageJson.read(this.projectRoot),\n monorepo: Monorepo.load(this.projectRoot),\n loadManifests: false,\n })\n const query = new Query({\n graph,\n specOptions: conf.options,\n securityArchive: undefined,\n })\n const { nodes } = await query.search(queryString, {\n signal: new AbortController().signal,\n })\n this.#nodes = []\n for (const node of nodes) {\n const { location } = node.toJSON()\n assert(\n location,\n error(`node ${node.id} has no location`, {\n found: node,\n }),\n )\n this.#nodes.push(location)\n }\n } else {\n const paths = conf.get('workspace')\n const groups = conf.get('workspace-group')\n const recursive = conf.get('recursive')\n this.#monorepo =\n paths?.length || groups?.length || recursive ?\n Monorepo.load(this.projectRoot, {\n load: { paths, groups },\n })\n : undefined\n }\n\n if (this.#targetCount() === 1) {\n const arg = this.fgArg()\n if (!arg) return this.noArgsSingle()\n const result = await this.fg(arg)\n if (isRunResult(result)) {\n setExitCode(result)\n }\n return result\n }\n\n if (this.#targetCount() === 0) {\n if (queryString) {\n throw error('no matching nodes found for query', {\n found: queryString,\n })\n } else {\n throw error('no matching workspaces found', {\n /* c8 ignore next - already guarded */\n validOptions: [...(this.#monorepo?.load().paths() ?? [])],\n })\n }\n }\n\n if (!this.hasArg0()) {\n return this.noArgsMulti()\n }\n\n // run across workspaces\n let failed = false as boolean\n const runInDir = async (cwd: string, label: string) => {\n const result = await this.bg(this.bgArg(cwd)).catch(\n (er: unknown) => {\n if (isErrorWithCause(er) && isRunResult(er.cause)) {\n this.printResult(label, er.cause)\n }\n failed = true\n throw er\n },\n )\n if (!failed) this.printResult(label, result)\n return result\n }\n\n const resultMap = new Map<string, SpawnResultStdioStrings>()\n if (this.#nodes) {\n for (const { label, cwd } of this.getTargets()) {\n const result = await runInDir(cwd, label)\n resultMap.set(label, result)\n }\n } else if (this.#monorepo) {\n const wsResultMap = await this.#monorepo.run(async ws => {\n return runInDir(ws.fullpath, ws.path)\n })\n for (const [ws, result] of wsResultMap) {\n resultMap.set(ws.path, result)\n }\n }\n\n const results: Record<string, RunResult> = {}\n for (const [path, result] of resultMap) {\n if (result.status === 0 && result.signal === null) {\n result.stdout = ''\n result.stderr = ''\n }\n results[path] = result\n }\n return results\n }\n\n printResult(path: string, result: RunResult) {\n // non-human results just get printed at the end\n if (this.view !== 'human') return\n\n if (result.status === 0 && result.signal === null) {\n stdout(path, 'ok')\n } else {\n stdout(\n styleTextStdout(\n ['bgWhiteBright', 'black', 'bold'],\n path + ' failure',\n ),\n {\n status: result.status,\n signal: result.signal,\n },\n )\n /* c8 ignore start */\n if (result.stderr) stderr(ansiToAnsi(result.stderr))\n if (result.stdout) stdout(ansiToAnsi(result.stdout))\n /* c8 ignore stop */\n setExitCode(result)\n }\n }\n\n /* c8 ignore start - env specific */\n interactiveShell(): string {\n return (\n process.env.SHELL ??\n this.conf.get('script-shell') ??\n (process.platform === 'win32' ? 'cmd.exe' : '/bin/sh')\n )\n }\n /* c8 ignore stop */\n\n // overridden by 'vlt run' which returns undefined\n defaultArg0(): string | undefined {\n return this.interactiveShell()\n }\n\n getCwd(): string {\n if (this.#nodes) {\n const [first] = this.#nodes\n assert(first, error('no nodes found'))\n return resolve(this.projectRoot, first)\n }\n return (\n this.#monorepo?.values().next().value?.fullpath ??\n this.projectRoot\n )\n }\n\n fgArg(): RunnerOptions | undefined {\n const cwd = this.getCwd()\n const arg0 = this.arg0 ?? this.defaultArg0()\n\n // return undefined so noArgsSingle will be called instead\n if (typeof arg0 !== 'string') return\n\n return {\n cwd,\n /* c8 ignore next - already guarded */\n arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.conf.options.packageJson,\n 'script-shell':\n this.arg0 ? this.conf.get('script-shell') : false,\n }\n }\n\n bgArg(this: this & { arg0: string }, cwd: string): RunnerOptions {\n return {\n cwd,\n acceptFail: !this.conf.get('bail'),\n ignoreMissing: true,\n arg0: this.arg0,\n args: this.args,\n projectRoot: this.projectRoot,\n packageJson: this.conf.options.packageJson,\n 'script-shell': this.conf.get('script-shell'),\n }\n }\n\n /* c8 ignore start - not used, only here to override */\n noArgsSingle(): ScriptSet {\n throw error('Failed to determine interactive shell to spawn')\n }\n /* c8 ignore stop - not used, only here to override */\n\n noArgsMulti(): MultiScriptSet {\n throw error(\n 'Cannot spawn interactive shells in multiple workspaces',\n )\n }\n\n getTargets(): {\n label: string\n cwd: string\n manifest: NormalizedManifest\n }[] {\n const targets = []\n if (this.#nodes) {\n for (const location of this.#nodes) {\n const manifest = this.conf.options.packageJson.read(location)\n const label =\n /* c8 ignore next */\n location.startsWith('./') ? location.slice(2) : location\n const cwd = resolve(this.projectRoot, location)\n targets.push({ label, cwd, manifest })\n }\n } else if (this.#monorepo) {\n this.#monorepo.runSync(ws => {\n targets.push({\n label: ws.path,\n cwd: ws.fullpath,\n manifest: ws.manifest,\n })\n })\n }\n return targets\n }\n}\n"]}
@@ -1,17 +1,4 @@
1
- import type { Jack } from 'jackspeak';
2
- import type { LoadedConfig } from './config/index.ts';
3
- import type { Views } from './view.ts';
4
- export type CommandUsage = () => Jack;
5
- /**
6
- * A command function that may return a result of `T`.
7
- * If the result is `undefined`, no final output will be displayed by default.
8
- */
9
- export type CommandFn<T = unknown> = (conf: LoadedConfig) => Promise<T>;
10
- export type Command<T> = {
11
- command: CommandFn<T>;
12
- usage: CommandUsage;
13
- views: Views<T>;
14
- };
1
+ export type { Command, CommandFn, CommandUsage, } from './load-command.ts';
15
2
  declare const run: () => Promise<void>;
16
3
  export default run;
17
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,mBAAmB,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAEtC,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAA;AAErC;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,CACnC,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,CAAC,CAAC,CAAA;AAEf,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;CAChB,CAAA;AAwBD,QAAA,MAAM,GAAG,qBAsBR,CAAA;AAED,eAAe,GAAG,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAYA,YAAY,EACV,OAAO,EACP,SAAS,EACT,YAAY,GACb,MAAM,mBAAmB,CAAA;AAgD1B,QAAA,MAAM,GAAG,qBA2CR,CAAA;AAED,eAAe,GAAG,CAAA"}