@vltpkg/cli-sdk 0.0.0-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 (136) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +20 -0
  3. package/dist/esm/commands/config.d.ts +5 -0
  4. package/dist/esm/commands/config.d.ts.map +1 -0
  5. package/dist/esm/commands/config.js +153 -0
  6. package/dist/esm/commands/config.js.map +1 -0
  7. package/dist/esm/commands/exec.d.ts +5 -0
  8. package/dist/esm/commands/exec.d.ts.map +1 -0
  9. package/dist/esm/commands/exec.js +22 -0
  10. package/dist/esm/commands/exec.js.map +1 -0
  11. package/dist/esm/commands/gui.d.ts +6 -0
  12. package/dist/esm/commands/gui.d.ts.map +1 -0
  13. package/dist/esm/commands/gui.js +14 -0
  14. package/dist/esm/commands/gui.js.map +1 -0
  15. package/dist/esm/commands/help.d.ts +4 -0
  16. package/dist/esm/commands/help.d.ts.map +1 -0
  17. package/dist/esm/commands/help.js +10 -0
  18. package/dist/esm/commands/help.js.map +1 -0
  19. package/dist/esm/commands/init.d.ts +9 -0
  20. package/dist/esm/commands/init.d.ts.map +1 -0
  21. package/dist/esm/commands/init.js +25 -0
  22. package/dist/esm/commands/init.js.map +1 -0
  23. package/dist/esm/commands/install/reporter.d.ts +10 -0
  24. package/dist/esm/commands/install/reporter.d.ts.map +1 -0
  25. package/dist/esm/commands/install/reporter.js +66 -0
  26. package/dist/esm/commands/install/reporter.js.map +1 -0
  27. package/dist/esm/commands/install-exec.d.ts +4 -0
  28. package/dist/esm/commands/install-exec.d.ts.map +1 -0
  29. package/dist/esm/commands/install-exec.js +13 -0
  30. package/dist/esm/commands/install-exec.js.map +1 -0
  31. package/dist/esm/commands/install.d.ts +7 -0
  32. package/dist/esm/commands/install.d.ts.map +1 -0
  33. package/dist/esm/commands/install.js +21 -0
  34. package/dist/esm/commands/install.js.map +1 -0
  35. package/dist/esm/commands/list.d.ts +15 -0
  36. package/dist/esm/commands/list.d.ts.map +1 -0
  37. package/dist/esm/commands/list.js +91 -0
  38. package/dist/esm/commands/list.js.map +1 -0
  39. package/dist/esm/commands/login.d.ts +4 -0
  40. package/dist/esm/commands/login.d.ts.map +1 -0
  41. package/dist/esm/commands/login.js +13 -0
  42. package/dist/esm/commands/login.js.map +1 -0
  43. package/dist/esm/commands/logout.d.ts +4 -0
  44. package/dist/esm/commands/logout.d.ts.map +1 -0
  45. package/dist/esm/commands/logout.js +13 -0
  46. package/dist/esm/commands/logout.js.map +1 -0
  47. package/dist/esm/commands/pkg.d.ts +8 -0
  48. package/dist/esm/commands/pkg.d.ts.map +1 -0
  49. package/dist/esm/commands/pkg.js +121 -0
  50. package/dist/esm/commands/pkg.js.map +1 -0
  51. package/dist/esm/commands/query.d.ts +16 -0
  52. package/dist/esm/commands/query.d.ts.map +1 -0
  53. package/dist/esm/commands/query.js +75 -0
  54. package/dist/esm/commands/query.js.map +1 -0
  55. package/dist/esm/commands/run-exec.d.ts +5 -0
  56. package/dist/esm/commands/run-exec.d.ts.map +1 -0
  57. package/dist/esm/commands/run-exec.js +13 -0
  58. package/dist/esm/commands/run-exec.js.map +1 -0
  59. package/dist/esm/commands/run.d.ts +5 -0
  60. package/dist/esm/commands/run.d.ts.map +1 -0
  61. package/dist/esm/commands/run.js +39 -0
  62. package/dist/esm/commands/run.js.map +1 -0
  63. package/dist/esm/commands/token.d.ts +4 -0
  64. package/dist/esm/commands/token.d.ts.map +1 -0
  65. package/dist/esm/commands/token.js +30 -0
  66. package/dist/esm/commands/token.js.map +1 -0
  67. package/dist/esm/commands/uninstall.d.ts +4 -0
  68. package/dist/esm/commands/uninstall.d.ts.map +1 -0
  69. package/dist/esm/commands/uninstall.js +15 -0
  70. package/dist/esm/commands/uninstall.js.map +1 -0
  71. package/dist/esm/commands/whoami.d.ts +11 -0
  72. package/dist/esm/commands/whoami.d.ts.map +1 -0
  73. package/dist/esm/commands/whoami.js +19 -0
  74. package/dist/esm/commands/whoami.js.map +1 -0
  75. package/dist/esm/config/definition.d.ts +286 -0
  76. package/dist/esm/config/definition.d.ts.map +1 -0
  77. package/dist/esm/config/definition.js +475 -0
  78. package/dist/esm/config/definition.js.map +1 -0
  79. package/dist/esm/config/index.d.ts +213 -0
  80. package/dist/esm/config/index.d.ts.map +1 -0
  81. package/dist/esm/config/index.js +504 -0
  82. package/dist/esm/config/index.js.map +1 -0
  83. package/dist/esm/config/merge.d.ts +2 -0
  84. package/dist/esm/config/merge.d.ts.map +1 -0
  85. package/dist/esm/config/merge.js +23 -0
  86. package/dist/esm/config/merge.js.map +1 -0
  87. package/dist/esm/config/usage.d.ts +18 -0
  88. package/dist/esm/config/usage.d.ts.map +1 -0
  89. package/dist/esm/config/usage.js +40 -0
  90. package/dist/esm/config/usage.js.map +1 -0
  91. package/dist/esm/exec-command.d.ts +34 -0
  92. package/dist/esm/exec-command.d.ts.map +1 -0
  93. package/dist/esm/exec-command.js +159 -0
  94. package/dist/esm/exec-command.js.map +1 -0
  95. package/dist/esm/ignored-homedir-folder-names.d.ts +7 -0
  96. package/dist/esm/ignored-homedir-folder-names.d.ts.map +1 -0
  97. package/dist/esm/ignored-homedir-folder-names.js +35 -0
  98. package/dist/esm/ignored-homedir-folder-names.js.map +1 -0
  99. package/dist/esm/index.d.ts +17 -0
  100. package/dist/esm/index.d.ts.map +1 -0
  101. package/dist/esm/index.js +47 -0
  102. package/dist/esm/index.js.map +1 -0
  103. package/dist/esm/output.d.ts +25 -0
  104. package/dist/esm/output.d.ts.map +1 -0
  105. package/dist/esm/output.js +86 -0
  106. package/dist/esm/output.js.map +1 -0
  107. package/dist/esm/package.json +3 -0
  108. package/dist/esm/parse-add-remove-args.d.ts +22 -0
  109. package/dist/esm/parse-add-remove-args.d.ts.map +1 -0
  110. package/dist/esm/parse-add-remove-args.js +71 -0
  111. package/dist/esm/parse-add-remove-args.js.map +1 -0
  112. package/dist/esm/print-err.d.ts +3 -0
  113. package/dist/esm/print-err.d.ts.map +1 -0
  114. package/dist/esm/print-err.js +47 -0
  115. package/dist/esm/print-err.js.map +1 -0
  116. package/dist/esm/project-info.d.ts +32 -0
  117. package/dist/esm/project-info.d.ts.map +1 -0
  118. package/dist/esm/project-info.js +90 -0
  119. package/dist/esm/project-info.js.map +1 -0
  120. package/dist/esm/read-password.d.ts +8 -0
  121. package/dist/esm/read-password.d.ts.map +1 -0
  122. package/dist/esm/read-password.js +33 -0
  123. package/dist/esm/read-password.js.map +1 -0
  124. package/dist/esm/read-project-folders.d.ts +27 -0
  125. package/dist/esm/read-project-folders.d.ts.map +1 -0
  126. package/dist/esm/read-project-folders.js +66 -0
  127. package/dist/esm/read-project-folders.js.map +1 -0
  128. package/dist/esm/start-gui.d.ts +36 -0
  129. package/dist/esm/start-gui.d.ts.map +1 -0
  130. package/dist/esm/start-gui.js +357 -0
  131. package/dist/esm/start-gui.js.map +1 -0
  132. package/dist/esm/view.d.ts +31 -0
  133. package/dist/esm/view.d.ts.map +1 -0
  134. package/dist/esm/view.js +31 -0
  135. package/dist/esm/view.js.map +1 -0
  136. package/package.json +107 -0
@@ -0,0 +1,475 @@
1
+ import { XDG } from '@vltpkg/xdg';
2
+ import { jack } from 'jackspeak';
3
+ export const defaultView = process.stdout.isTTY ? 'human' : 'json';
4
+ const canonicalCommands = {
5
+ config: 'config',
6
+ exec: 'exec',
7
+ gui: 'gui',
8
+ help: 'help',
9
+ init: 'init',
10
+ 'install-exec': 'install-exec',
11
+ install: 'install',
12
+ login: 'login',
13
+ logout: 'logout',
14
+ list: 'list',
15
+ ls: 'ls',
16
+ pkg: 'pkg',
17
+ query: 'query',
18
+ 'run-exec': 'run-exec',
19
+ run: 'run',
20
+ token: 'token',
21
+ uninstall: 'uninstall',
22
+ whoami: 'whoami',
23
+ };
24
+ const aliases = {
25
+ i: 'install',
26
+ add: 'install',
27
+ rm: 'uninstall',
28
+ u: 'uninstall',
29
+ r: 'run',
30
+ 'run-script': 'run',
31
+ rx: 'run-exec',
32
+ x: 'exec',
33
+ h: 'help',
34
+ '?': 'help',
35
+ conf: 'config',
36
+ ix: 'install-exec',
37
+ ls: 'list',
38
+ };
39
+ /**
40
+ * Command aliases mapped to their canonical names
41
+ */
42
+ export const commands = {
43
+ ...canonicalCommands,
44
+ ...aliases,
45
+ };
46
+ /**
47
+ * Canonical command names mapped to an array of its aliases
48
+ */
49
+ export const commandAliases = Object.entries(aliases).reduce((acc, [alias, canonical]) => {
50
+ const commandAliases = acc.get(canonical);
51
+ if (commandAliases) {
52
+ commandAliases.push(alias);
53
+ }
54
+ else {
55
+ acc.set(canonical, [alias]);
56
+ }
57
+ return acc;
58
+ }, new Map());
59
+ export const getCommand = (s) => s && s in commands ? commands[s] : undefined;
60
+ const xdg = new XDG('vlt');
61
+ const cacheDir = xdg.cache();
62
+ /**
63
+ * Fields that are parsed as a set of key=value pairs
64
+ */
65
+ export const recordFields = [
66
+ 'git-hosts',
67
+ 'registries',
68
+ 'git-host-archives',
69
+ 'scope-registries',
70
+ ];
71
+ export const isRecordField = (s) => recordFields.includes(s);
72
+ const stopParsingCommands = [
73
+ 'run',
74
+ 'run-exec',
75
+ 'exec',
76
+ 'install-exec',
77
+ ];
78
+ let stopParsing = undefined;
79
+ const j = jack({
80
+ envPrefix: 'VLT',
81
+ allowPositionals: true,
82
+ usage: `vlt [<options>] [<cmd> [<args> ...]]`,
83
+ stopAtPositionalTest: arg => {
84
+ if (stopParsing)
85
+ return true;
86
+ const a = arg;
87
+ // we stop parsing AFTER the thing, so you can do
88
+ // vlt run --vlt --configs scriptName --args --for --script
89
+ // or
90
+ // vlt exec --vlt --configs command --args --for --command
91
+ if (stopParsingCommands.includes(commands[a])) {
92
+ stopParsing = true;
93
+ }
94
+ return false;
95
+ },
96
+ })
97
+ .heading('vlt')
98
+ .description(`More documentation available at <https://docs.vlt.sh>`)
99
+ .heading('Subcommands');
100
+ j.description(Object.keys(canonicalCommands).join(', '), {
101
+ pre: true,
102
+ }).description('Run `vlt <cmd> --help` for more information about a specific command');
103
+ export const definition = j
104
+ /**
105
+ * Definition of all configuration values used by vlt.
106
+ */
107
+ .heading('Configuration')
108
+ .description(`If a \`vlt.json\` file is present in the root of the current project,
109
+ then that will be used as a source of configuration information.
110
+
111
+ Next, the \`vlt.json\` file in the XDG specified config directory
112
+ will be checked, and loaded for any fields not set in the local project.
113
+
114
+ Object type values will be merged together. Set a field to \`null\` in
115
+ the JSON configuration to explicitly remove it.
116
+
117
+ Command-specific fields may be set in a nested \`command\` object that
118
+ overrides any options defined at the top level.
119
+ `)
120
+ .flag({
121
+ color: {
122
+ short: 'c',
123
+ description: 'Use colors (Default for TTY)',
124
+ },
125
+ 'no-color': {
126
+ short: 'C',
127
+ description: 'Do not use colors (Default for non-TTY)',
128
+ },
129
+ })
130
+ .opt({
131
+ registry: {
132
+ hint: 'url',
133
+ default: 'https://registry.npmjs.org/',
134
+ description: `Sets the registry for fetching packages, when no registry
135
+ is explicitly set on a specifier.
136
+
137
+ For example, \`express@latest\` will be resolved by looking
138
+ up the metadata from this registry.
139
+
140
+ Note that alias specifiers starting with \`npm:\` will
141
+ still map to \`https://registry.npmjs.org/\` if this is
142
+ changed, unless the a new mapping is created via the
143
+ \`--registries\` option.
144
+ `,
145
+ },
146
+ })
147
+ .optList({
148
+ registries: {
149
+ hint: 'name=url',
150
+ description: `Specify named registry hosts by their prefix. To set the
151
+ default registry used for non-namespaced specifiers,
152
+ use the \`--registry\` option.
153
+
154
+ Prefixes can be used as a package alias. For example:
155
+
156
+ \`\`\`
157
+ vlt --registries loc=http://reg.local install foo@loc:foo@1.x
158
+ \`\`\`
159
+
160
+ By default, the public npm registry is registered to the
161
+ \`npm:\` prefix. It is not recommended to change this
162
+ mapping in most cases.
163
+ `,
164
+ },
165
+ 'scope-registries': {
166
+ hint: '@scope=url',
167
+ description: `Map package name scopes to registry URLs.
168
+
169
+ For example,
170
+ \`--scope-registries @acme=https://registry.acme/\`
171
+ would tell vlt to fetch any packages named
172
+ \`@acme/...\` from the \`https://registry.acme/\`
173
+ registry.
174
+
175
+ Note: this way of specifying registries is more ambiguous,
176
+ compared with using the \`--registries\` field and explicit
177
+ prefixes, because instead of failing when the configuration
178
+ is absent, it will instead attempt to fetch from the
179
+ default registry.
180
+
181
+ By comparison, using
182
+ \`--registries acme=https://registry.acme/\` and then
183
+ specifying dependencies such as \`"foo": "acme:foo@1.x"\`
184
+ means that regardless of the name, the package will be
185
+ fetched from the explicitly named registry, or fail if
186
+ no registry is defined with that name.
187
+
188
+ However, custom registry aliases are not supported by other
189
+ package managers.`,
190
+ },
191
+ 'git-hosts': {
192
+ hint: `name=template`,
193
+ short: 'G',
194
+ description: `Map a shorthand name to a git remote URL template.
195
+
196
+ The \`template\` may contain placeholders, which will be
197
+ swapped with the relevant values.
198
+
199
+ \`$1\`, \`$2\`, etc. are replaced with the appropriate
200
+ n-th path portion. For example, \`github:user/project\`
201
+ would replace the \`$1\` in the template with \`user\`,
202
+ and \`$2\` with \`project\`.`,
203
+ },
204
+ 'git-host-archives': {
205
+ hint: `name=template`,
206
+ short: 'A',
207
+ description: `Similar to the \`--git-host <name>=<template>\` option,
208
+ this option can define a template string that will be
209
+ expanded to provide the URL to download a pre-built
210
+ tarball of the git repository.
211
+
212
+ In addition to the n-th path portion expansions performed
213
+ by \`--git-host\`, this field will also expand the
214
+ string \`$committish\` in the template, replacing it with
215
+ the resolved git committish value to be fetched.`,
216
+ },
217
+ })
218
+ .opt({
219
+ cache: {
220
+ hint: 'path',
221
+ description: `
222
+ Location of the vlt on-disk cache. Defaults to the platform-specific
223
+ directory recommended by the XDG specification.
224
+ `,
225
+ default: cacheDir,
226
+ },
227
+ tag: {
228
+ description: `Default \`dist-tag\` to install`,
229
+ default: 'latest',
230
+ },
231
+ before: {
232
+ hint: 'date',
233
+ description: `Do not install any packages published after this date`,
234
+ },
235
+ os: {
236
+ description: `The operating system to use as the selector when choosing
237
+ packages based on their \`os\` value.`,
238
+ default: process.platform,
239
+ },
240
+ arch: {
241
+ description: `CPU architecture to use as the selector when choosing
242
+ packages based on their \`cpu\` value.`,
243
+ default: process.arch,
244
+ },
245
+ 'node-version': {
246
+ hint: 'version',
247
+ description: `Node version to use when choosing packages based on
248
+ their \`engines.node\` value.`,
249
+ default: process.version,
250
+ },
251
+ })
252
+ .flag({
253
+ 'git-shallow': {
254
+ description: `Set to force \`--depth=1\` on all git clone actions.
255
+ When set explicitly to false with --no-git-shallow,
256
+ then \`--depth=1\` will not be used.
257
+
258
+ When not set explicitly, \`--depth=1\` will be used for
259
+ git hosts known to support this behavior.`,
260
+ },
261
+ })
262
+ .num({
263
+ 'fetch-retries': {
264
+ hint: 'n',
265
+ description: `Number of retries to perform when encountering network
266
+ errors or likely-transient errors from git hosts.`,
267
+ default: 3,
268
+ },
269
+ 'fetch-retry-factor': {
270
+ hint: 'n',
271
+ description: `The exponential backoff factor to use when retrying
272
+ requests due to network issues.`,
273
+ default: 2,
274
+ },
275
+ 'fetch-retry-mintimeout': {
276
+ hint: 'n',
277
+ description: `Number of milliseconds before starting first retry`,
278
+ default: 0,
279
+ },
280
+ 'fetch-retry-maxtimeout': {
281
+ hint: 'n',
282
+ description: `Maximum number of milliseconds between two retries`,
283
+ default: 30_000,
284
+ },
285
+ })
286
+ .opt({
287
+ identity: {
288
+ short: 'i',
289
+ validate: (v) => typeof v === 'string' && /^[a-z0-9]*$/.test(v),
290
+ hint: 'name',
291
+ default: '',
292
+ description: `Provide a string to define an identity for storing auth
293
+ information when logging into registries.
294
+
295
+ Authentication tokens will be stored in the XDG data
296
+ directory, in \`vlt/auth/$\{identity}/keychain.json\`.
297
+
298
+ If no identity is provided, then the default \`''\` will
299
+ be used, storing the file at \`vlt/auth/keychain.json\`.
300
+
301
+ May only contain lowercase alphanumeric characters.
302
+ `,
303
+ },
304
+ })
305
+ .optList({
306
+ workspace: {
307
+ hint: 'ws',
308
+ short: 'w',
309
+ description: `Set to limit the spaces being worked on when working on
310
+ workspaces.
311
+
312
+ Can be paths or glob patterns matching paths.
313
+
314
+ Specifying workspaces by package.json name is not
315
+ supported.`,
316
+ },
317
+ 'workspace-group': {
318
+ short: 'g',
319
+ description: `Specify named workspace group names to load and operate on
320
+ when doing recursive operations on workspaces.`,
321
+ },
322
+ })
323
+ .flag({
324
+ recursive: {
325
+ short: 'r',
326
+ description: `Run an operation across multiple workspaces.
327
+
328
+ No effect when used in non-monorepo projects.
329
+
330
+ Implied by setting --workspace or --workspace-group. If
331
+ not set, then the action is run on the project root.`,
332
+ },
333
+ bail: {
334
+ short: 'b',
335
+ description: `When running scripts across multiple workspaces, stop
336
+ on the first failure.`,
337
+ default: true,
338
+ },
339
+ 'no-bail': {
340
+ short: 'B',
341
+ description: `When running scripts across multiple workspaces, continue
342
+ on failure, running the script for all workspaces.`,
343
+ },
344
+ })
345
+ .opt({
346
+ config: {
347
+ hint: 'user | project',
348
+ description: `Specify whether to operate on user-level or project-level
349
+ configuration files when running \`vlt config\` commands.`,
350
+ validOptions: ['user', 'project'],
351
+ default: 'project',
352
+ },
353
+ editor: {
354
+ hint: 'program',
355
+ description: `The blocking editor to use for \`vlt config edit\` and
356
+ any other cases where a file should be opened for
357
+ editing.
358
+
359
+ Defaults to the \`EDITOR\` or \`VISUAL\` env if set, or
360
+ \`notepad.exe\` on Windows, or \`vi\` elsewhere.`,
361
+ default: process.env.EDITOR ||
362
+ process.env.VISUAL ||
363
+ (process.platform === 'win32' ?
364
+ `${process.env.SYSTEMROOT}\\notepad.exe`
365
+ : 'vi'),
366
+ },
367
+ 'script-shell': {
368
+ hint: 'program',
369
+ description: `The shell to use when executing \`package.json#scripts\`
370
+ (either as lifecycle scripts or explicitly with
371
+ \`vlt run\`) and \`vlt exec\`.
372
+
373
+ If not set, defaults to \`/bin/sh\` on POSIX systems,
374
+ and \`cmd.exe\` on Windows.
375
+
376
+ When no argument is provided to \`vlt exec\`, the \`SHELL\`
377
+ environment variable takes precedence if set.`,
378
+ },
379
+ 'fallback-command': {
380
+ hint: 'command',
381
+ description: `The command to run when the first argument doesn't
382
+ match any known commands.
383
+
384
+ For pnpm-style behavior, set this to 'run-exec'. e.g:
385
+ \`\`\`
386
+ vlt config set fallback-command=run-exec
387
+ \`\`\``,
388
+ default: 'help',
389
+ validOptions: Object.keys(canonicalCommands),
390
+ },
391
+ })
392
+ .opt({
393
+ package: {
394
+ hint: 'p',
395
+ description: `When running \`vlt install-exec\`, this allows you to
396
+ explicitly set the package to search for bins. If not
397
+ provided, then vlt will interpret the first argument as
398
+ the package, and attempt to run the default executable.`,
399
+ },
400
+ })
401
+ .opt({
402
+ view: {
403
+ hint: 'output',
404
+ default: defaultView,
405
+ description: `Configures the output format for commands.
406
+
407
+ Defaults to \`human\` if stdout is a TTY, or \`json\`
408
+ if it is not.
409
+
410
+ - human: Maximally ergonomic output reporting for human
411
+ consumption.
412
+ - json: Parseable JSON output for machines.
413
+ - inspect: Output results with \`util.inspect\`.
414
+ - gui: Start a local web server and opens a browser to
415
+ explore the results. (Only relevant for certain
416
+ commands.)
417
+ - mermaid: Output mermaid diagramming syntax. (Only
418
+ relevant for certain commands.)
419
+
420
+ If the requested view format is not supported for the
421
+ current command, or if no option is provided, then it
422
+ will fall back to the default.
423
+ `,
424
+ validOptions: [
425
+ 'human',
426
+ 'json',
427
+ 'mermaid',
428
+ 'gui',
429
+ 'inspect',
430
+ ],
431
+ },
432
+ })
433
+ .optList({
434
+ 'dashboard-root': {
435
+ hint: 'path',
436
+ description: `The root directory to use for the dashboard GUI.
437
+ If not set, the user home directory is used.`,
438
+ },
439
+ })
440
+ .flag({
441
+ 'save-dev': {
442
+ short: 'D',
443
+ description: `Save installed packages to a package.json file as
444
+ devDependencies`,
445
+ },
446
+ 'save-optional': {
447
+ short: 'O',
448
+ description: `Save installed packages to a package.json file as
449
+ optionalDependencies`,
450
+ },
451
+ 'save-peer': {
452
+ description: `Save installed packages to a package.json file as
453
+ peerDependencies`,
454
+ },
455
+ 'save-prod': {
456
+ short: 'P',
457
+ description: `Save installed packages into dependencies specifically.
458
+ This is useful if a package already exists in
459
+ devDependencies or optionalDependencies, but you want to
460
+ move it to be a non-optional production dependency.`,
461
+ },
462
+ })
463
+ .flag({
464
+ version: {
465
+ short: 'v',
466
+ description: 'Print the version',
467
+ },
468
+ })
469
+ .flag({
470
+ help: {
471
+ short: 'h',
472
+ description: 'Print helpful information',
473
+ },
474
+ });
475
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/config/definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { XDG } from '@vltpkg/xdg'\nimport { jack } from 'jackspeak'\n\nexport const defaultView = process.stdout.isTTY ? 'human' : 'json'\n\nconst canonicalCommands = {\n config: 'config',\n exec: 'exec',\n gui: 'gui',\n help: 'help',\n init: 'init',\n 'install-exec': 'install-exec',\n install: 'install',\n login: 'login',\n logout: 'logout',\n list: 'list',\n ls: 'ls',\n pkg: 'pkg',\n query: 'query',\n 'run-exec': 'run-exec',\n run: 'run',\n token: 'token',\n uninstall: 'uninstall',\n whoami: 'whoami',\n} as const\n\nconst aliases = {\n i: 'install',\n add: 'install',\n rm: 'uninstall',\n u: 'uninstall',\n r: 'run',\n 'run-script': 'run',\n rx: 'run-exec',\n x: 'exec',\n h: 'help',\n '?': 'help',\n conf: 'config',\n ix: 'install-exec',\n ls: 'list',\n} as const\n\n/**\n * Command aliases mapped to their canonical names\n */\nexport const commands = {\n ...canonicalCommands,\n ...aliases,\n} as const\n\n/**\n * Canonical command names mapped to an array of its aliases\n */\nexport const commandAliases = Object.entries(aliases).reduce(\n (acc, [alias, canonical]) => {\n const commandAliases = acc.get(canonical)\n if (commandAliases) {\n commandAliases.push(alias)\n } else {\n acc.set(canonical, [alias])\n }\n return acc\n },\n new Map<string, string[]>(),\n)\n\nexport type Commands = typeof commands\n\nexport const getCommand = (\n s?: string,\n): Commands[keyof Commands] | undefined =>\n s && s in commands ? commands[s as keyof Commands] : undefined\n\nconst xdg = new XDG('vlt')\nconst cacheDir = xdg.cache()\n\n/**\n * Fields that are parsed as a set of key=value pairs\n */\nexport const recordFields = [\n 'git-hosts',\n 'registries',\n 'git-host-archives',\n 'scope-registries',\n] as const\n\nexport type RecordField = (typeof recordFields)[number]\n\nexport const isRecordField = (s: string): s is RecordField =>\n recordFields.includes(s as RecordField)\n\nconst stopParsingCommands: Commands[keyof Commands][] = [\n 'run',\n 'run-exec',\n 'exec',\n 'install-exec',\n]\n\nlet stopParsing: boolean | undefined = undefined\n\nconst j = jack({\n envPrefix: 'VLT',\n allowPositionals: true,\n usage: `vlt [<options>] [<cmd> [<args> ...]]`,\n stopAtPositionalTest: arg => {\n if (stopParsing) return true\n const a = arg as keyof Commands\n // we stop parsing AFTER the thing, so you can do\n // vlt run --vlt --configs scriptName --args --for --script\n // or\n // vlt exec --vlt --configs command --args --for --command\n if (stopParsingCommands.includes(commands[a])) {\n stopParsing = true\n }\n return false\n },\n})\n .heading('vlt')\n .description(\n `More documentation available at <https://docs.vlt.sh>`,\n )\n .heading('Subcommands')\n\nj.description(Object.keys(canonicalCommands).join(', '), {\n pre: true,\n}).description(\n 'Run `vlt <cmd> --help` for more information about a specific command',\n)\n\nexport const definition = j\n /**\n * Definition of all configuration values used by vlt.\n */\n .heading('Configuration')\n .description(\n `If a \\`vlt.json\\` file is present in the root of the current project,\n then that will be used as a source of configuration information.\n\n Next, the \\`vlt.json\\` file in the XDG specified config directory\n will be checked, and loaded for any fields not set in the local project.\n\n Object type values will be merged together. Set a field to \\`null\\` in\n the JSON configuration to explicitly remove it.\n\n Command-specific fields may be set in a nested \\`command\\` object that\n overrides any options defined at the top level.\n `,\n )\n\n .flag({\n color: {\n short: 'c',\n description: 'Use colors (Default for TTY)',\n },\n 'no-color': {\n short: 'C',\n description: 'Do not use colors (Default for non-TTY)',\n },\n })\n\n .opt({\n registry: {\n hint: 'url',\n default: 'https://registry.npmjs.org/',\n description: `Sets the registry for fetching packages, when no registry\n is explicitly set on a specifier.\n\n For example, \\`express@latest\\` will be resolved by looking\n up the metadata from this registry.\n\n Note that alias specifiers starting with \\`npm:\\` will\n still map to \\`https://registry.npmjs.org/\\` if this is\n changed, unless the a new mapping is created via the\n \\`--registries\\` option.\n `,\n },\n })\n\n .optList({\n registries: {\n hint: 'name=url',\n description: `Specify named registry hosts by their prefix. To set the\n default registry used for non-namespaced specifiers,\n use the \\`--registry\\` option.\n\n Prefixes can be used as a package alias. For example:\n\n \\`\\`\\`\n vlt --registries loc=http://reg.local install foo@loc:foo@1.x\n \\`\\`\\`\n\n By default, the public npm registry is registered to the\n \\`npm:\\` prefix. It is not recommended to change this\n mapping in most cases.\n `,\n },\n\n 'scope-registries': {\n hint: '@scope=url',\n description: `Map package name scopes to registry URLs.\n\n For example,\n \\`--scope-registries @acme=https://registry.acme/\\`\n would tell vlt to fetch any packages named\n \\`@acme/...\\` from the \\`https://registry.acme/\\`\n registry.\n\n Note: this way of specifying registries is more ambiguous,\n compared with using the \\`--registries\\` field and explicit\n prefixes, because instead of failing when the configuration\n is absent, it will instead attempt to fetch from the\n default registry.\n\n By comparison, using\n \\`--registries acme=https://registry.acme/\\` and then\n specifying dependencies such as \\`\"foo\": \"acme:foo@1.x\"\\`\n means that regardless of the name, the package will be\n fetched from the explicitly named registry, or fail if\n no registry is defined with that name.\n\n However, custom registry aliases are not supported by other\n package managers.`,\n },\n\n 'git-hosts': {\n hint: `name=template`,\n short: 'G',\n description: `Map a shorthand name to a git remote URL template.\n\n The \\`template\\` may contain placeholders, which will be\n swapped with the relevant values.\n\n \\`$1\\`, \\`$2\\`, etc. are replaced with the appropriate\n n-th path portion. For example, \\`github:user/project\\`\n would replace the \\`$1\\` in the template with \\`user\\`,\n and \\`$2\\` with \\`project\\`.`,\n },\n\n 'git-host-archives': {\n hint: `name=template`,\n short: 'A',\n description: `Similar to the \\`--git-host <name>=<template>\\` option,\n this option can define a template string that will be\n expanded to provide the URL to download a pre-built\n tarball of the git repository.\n\n In addition to the n-th path portion expansions performed\n by \\`--git-host\\`, this field will also expand the\n string \\`$committish\\` in the template, replacing it with\n the resolved git committish value to be fetched.`,\n },\n })\n\n .opt({\n cache: {\n hint: 'path',\n description: `\n Location of the vlt on-disk cache. Defaults to the platform-specific\n directory recommended by the XDG specification.\n `,\n default: cacheDir,\n },\n tag: {\n description: `Default \\`dist-tag\\` to install`,\n default: 'latest',\n },\n before: {\n hint: 'date',\n description: `Do not install any packages published after this date`,\n },\n os: {\n description: `The operating system to use as the selector when choosing\n packages based on their \\`os\\` value.`,\n default: process.platform,\n },\n arch: {\n description: `CPU architecture to use as the selector when choosing\n packages based on their \\`cpu\\` value.`,\n default: process.arch,\n },\n 'node-version': {\n hint: 'version',\n description: `Node version to use when choosing packages based on\n their \\`engines.node\\` value.`,\n default: process.version,\n },\n })\n\n .flag({\n 'git-shallow': {\n description: `Set to force \\`--depth=1\\` on all git clone actions.\n When set explicitly to false with --no-git-shallow,\n then \\`--depth=1\\` will not be used.\n\n When not set explicitly, \\`--depth=1\\` will be used for\n git hosts known to support this behavior.`,\n },\n })\n .num({\n 'fetch-retries': {\n hint: 'n',\n description: `Number of retries to perform when encountering network\n errors or likely-transient errors from git hosts.`,\n default: 3,\n },\n 'fetch-retry-factor': {\n hint: 'n',\n description: `The exponential backoff factor to use when retrying\n requests due to network issues.`,\n default: 2,\n },\n 'fetch-retry-mintimeout': {\n hint: 'n',\n description: `Number of milliseconds before starting first retry`,\n default: 0,\n },\n 'fetch-retry-maxtimeout': {\n hint: 'n',\n description: `Maximum number of milliseconds between two retries`,\n default: 30_000,\n },\n })\n\n .opt({\n identity: {\n short: 'i',\n validate: (v: unknown) =>\n typeof v === 'string' && /^[a-z0-9]*$/.test(v),\n hint: 'name',\n default: '',\n description: `Provide a string to define an identity for storing auth\n information when logging into registries.\n\n Authentication tokens will be stored in the XDG data\n directory, in \\`vlt/auth/$\\{identity}/keychain.json\\`.\n\n If no identity is provided, then the default \\`''\\` will\n be used, storing the file at \\`vlt/auth/keychain.json\\`.\n\n May only contain lowercase alphanumeric characters.\n `,\n },\n })\n\n .optList({\n workspace: {\n hint: 'ws',\n short: 'w',\n description: `Set to limit the spaces being worked on when working on\n workspaces.\n\n Can be paths or glob patterns matching paths.\n\n Specifying workspaces by package.json name is not\n supported.`,\n },\n 'workspace-group': {\n short: 'g',\n description: `Specify named workspace group names to load and operate on\n when doing recursive operations on workspaces.`,\n },\n })\n\n .flag({\n recursive: {\n short: 'r',\n description: `Run an operation across multiple workspaces.\n\n No effect when used in non-monorepo projects.\n\n Implied by setting --workspace or --workspace-group. If\n not set, then the action is run on the project root.`,\n },\n\n bail: {\n short: 'b',\n description: `When running scripts across multiple workspaces, stop\n on the first failure.`,\n default: true,\n },\n\n 'no-bail': {\n short: 'B',\n description: `When running scripts across multiple workspaces, continue\n on failure, running the script for all workspaces.`,\n },\n })\n\n .opt({\n config: {\n hint: 'user | project',\n description: `Specify whether to operate on user-level or project-level\n configuration files when running \\`vlt config\\` commands.`,\n validOptions: ['user', 'project'] as const,\n default: 'project',\n },\n\n editor: {\n hint: 'program',\n description: `The blocking editor to use for \\`vlt config edit\\` and\n any other cases where a file should be opened for\n editing.\n\n Defaults to the \\`EDITOR\\` or \\`VISUAL\\` env if set, or\n \\`notepad.exe\\` on Windows, or \\`vi\\` elsewhere.`,\n default:\n process.env.EDITOR ||\n process.env.VISUAL ||\n (process.platform === 'win32' ?\n `${process.env.SYSTEMROOT}\\\\notepad.exe`\n : 'vi'),\n },\n\n 'script-shell': {\n hint: 'program',\n description: `The shell to use when executing \\`package.json#scripts\\`\n (either as lifecycle scripts or explicitly with\n \\`vlt run\\`) and \\`vlt exec\\`.\n\n If not set, defaults to \\`/bin/sh\\` on POSIX systems,\n and \\`cmd.exe\\` on Windows.\n\n When no argument is provided to \\`vlt exec\\`, the \\`SHELL\\`\n environment variable takes precedence if set.`,\n },\n\n 'fallback-command': {\n hint: 'command',\n description: `The command to run when the first argument doesn't\n match any known commands.\n\n For pnpm-style behavior, set this to 'run-exec'. e.g:\n \\`\\`\\`\n vlt config set fallback-command=run-exec\n \\`\\`\\``,\n default: 'help',\n validOptions: Object.keys(canonicalCommands),\n },\n })\n\n .opt({\n package: {\n hint: 'p',\n description: `When running \\`vlt install-exec\\`, this allows you to\n explicitly set the package to search for bins. If not\n provided, then vlt will interpret the first argument as\n the package, and attempt to run the default executable.`,\n },\n })\n\n .opt({\n view: {\n hint: 'output',\n default: defaultView,\n description: `Configures the output format for commands.\n\n Defaults to \\`human\\` if stdout is a TTY, or \\`json\\`\n if it is not.\n\n - human: Maximally ergonomic output reporting for human\n consumption.\n - json: Parseable JSON output for machines.\n - inspect: Output results with \\`util.inspect\\`.\n - gui: Start a local web server and opens a browser to\n explore the results. (Only relevant for certain\n commands.)\n - mermaid: Output mermaid diagramming syntax. (Only\n relevant for certain commands.)\n\n If the requested view format is not supported for the\n current command, or if no option is provided, then it\n will fall back to the default.\n `,\n validOptions: [\n 'human',\n 'json',\n 'mermaid',\n 'gui',\n 'inspect',\n ] as const,\n },\n })\n\n .optList({\n 'dashboard-root': {\n hint: 'path',\n description: `The root directory to use for the dashboard GUI.\n If not set, the user home directory is used.`,\n },\n })\n\n .flag({\n 'save-dev': {\n short: 'D',\n description: `Save installed packages to a package.json file as\n devDependencies`,\n },\n 'save-optional': {\n short: 'O',\n description: `Save installed packages to a package.json file as\n optionalDependencies`,\n },\n 'save-peer': {\n description: `Save installed packages to a package.json file as\n peerDependencies`,\n },\n 'save-prod': {\n short: 'P',\n description: `Save installed packages into dependencies specifically.\n This is useful if a package already exists in\n devDependencies or optionalDependencies, but you want to\n move it to be a non-optional production dependency.`,\n },\n })\n\n .flag({\n version: {\n short: 'v',\n description: 'Print the version',\n },\n })\n\n .flag({\n help: {\n short: 'h',\n description: 'Print helpful information',\n },\n })\n"]}