@vltpkg/cli-sdk 0.0.0-17 → 0.0.0-19

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.
@@ -0,0 +1,10 @@
1
+ import type { Graph } from '@vltpkg/graph';
2
+ import type { CommandFn, CommandUsage } from '../index.ts';
3
+ import { InstallReporter } from './install/reporter.ts';
4
+ export declare const usage: CommandUsage;
5
+ export declare const views: {
6
+ readonly json: (g: Graph) => import("@vltpkg/graph").LockfileData;
7
+ readonly human: typeof InstallReporter;
8
+ };
9
+ export declare const command: CommandFn<Graph>;
10
+ //# sourceMappingURL=ci.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/commands/ci.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,eAAO,MAAM,KAAK,EAAE,YAWhB,CAAA;AAEJ,eAAO,MAAM,KAAK;;;CAGe,CAAA;AAEjC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,KAAK,CASpC,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { commandUsage } from "../config/usage.js";
2
+ import { install } from '@vltpkg/graph';
3
+ import { InstallReporter } from "./install/reporter.js";
4
+ export const usage = () => commandUsage({
5
+ command: 'ci',
6
+ usage: '',
7
+ description: `Clean install from lockfile. Deletes node_modules and installs
8
+ dependencies exactly as specified in vlt-lock.json. This is
9
+ similar to running 'vlt install --expect-lockfile' but performs
10
+ a clean install by removing node_modules first.`,
11
+ examples: {
12
+ '': { description: 'Clean install from lockfile' },
13
+ },
14
+ });
15
+ export const views = {
16
+ json: g => g.toJSON(),
17
+ human: InstallReporter,
18
+ };
19
+ export const command = async (conf) => {
20
+ const ciOptions = {
21
+ ...conf.options,
22
+ expectLockfile: true,
23
+ cleanInstall: true,
24
+ };
25
+ const { graph } = await install(ciOptions);
26
+ return graph;
27
+ };
28
+ //# sourceMappingURL=ci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/commands/ci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,MAAM,KAAK,GAAiB,GAAG,EAAE,CACtC,YAAY,CAAC;IACX,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE;IACT,WAAW,EAAE;;;kEAGiD;IAC9D,QAAQ,EAAE;QACR,EAAE,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE;KACnD;CACF,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,eAAe;CACS,CAAA;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAqB,KAAK,EAAC,IAAI,EAAC,EAAE;IACpD,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI,CAAC,OAAO;QACf,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,IAAI;KACnB,CAAA;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAA;IAC1C,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { Graph } from '@vltpkg/graph'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { install } from '@vltpkg/graph'\nimport type { Views } from '../view.ts'\nimport { InstallReporter } from './install/reporter.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'ci',\n usage: '',\n description: `Clean install from lockfile. Deletes node_modules and installs \n dependencies exactly as specified in vlt-lock.json. This is \n similar to running 'vlt install --expect-lockfile' but performs \n a clean install by removing node_modules first.`,\n examples: {\n '': { description: 'Clean install from lockfile' },\n },\n })\n\nexport const views = {\n json: g => g.toJSON(),\n human: InstallReporter,\n} as const satisfies Views<Graph>\n\nexport const command: CommandFn<Graph> = async conf => {\n const ciOptions = {\n ...conf.options,\n expectLockfile: true,\n cleanInstall: true,\n }\n\n const { graph } = await install(ciOptions)\n return graph\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1D,eAAO,MAAM,KAAK,EAAE,YA8ChB,CAAA;AAEJ,eAAO,MAAM,OAAO,EAAE,SAAS,CAC7B,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,WAAW,CA+B1D,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1D,eAAO,MAAM,KAAK,EAAE,YA8ChB,CAAA;AAEJ,eAAO,MAAM,OAAO,EAAE,SAAS,CAC7B,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,WAAW,CA+B1D,CAAA"}
@@ -1,11 +1,7 @@
1
1
  import { error } from '@vltpkg/error-cause';
2
- import * as dotProp from '@vltpkg/dot-prop';
3
- import { asRootError } from '@vltpkg/output/error';
4
- import { isObject } from '@vltpkg/types';
5
- import { spawnSync } from 'node:child_process';
6
- import { getSortedKeys } from "../config/definition.js";
7
- import { definition, isRecordField, pairsToRecords, recordsToPairs, } from "../config/index.js";
8
2
  import { commandUsage } from "../config/usage.js";
3
+ import { isRecordField, definition } from "../config/index.js";
4
+ import { get, set, edit, list, del } from '@vltpkg/config';
9
5
  export const usage = () => commandUsage({
10
6
  command: 'config',
11
7
  usage: '<command> [flags]',
@@ -104,161 +100,4 @@ const help = (conf) => {
104
100
  }
105
101
  return res.join('\n');
106
102
  };
107
- const list = (conf) => {
108
- return recordsToPairs(conf.options);
109
- };
110
- const del = async (conf) => {
111
- const fields = conf.positionals.slice(1);
112
- if (!fields.length) {
113
- throw error('At least one key is required', {
114
- code: 'EUSAGE',
115
- });
116
- }
117
- await conf.deleteConfigKeys(conf.get('config'), fields);
118
- };
119
- const get = async (conf) => {
120
- const keys = conf.positionals.slice(1);
121
- const k = keys[0];
122
- if (!k || keys.length > 1) {
123
- throw error('Exactly one key is required', {
124
- code: 'EUSAGE',
125
- });
126
- }
127
- // check if this is a dot-prop path into a record field, in which case
128
- // we need to get the record first and then use dot-prop to get the value
129
- if (k.includes('.')) {
130
- const [field, ...rest] = k.split('.');
131
- const subKey = rest.join('.');
132
- if (!field || !subKey) {
133
- throw error('Could not read property', {
134
- found: k,
135
- });
136
- }
137
- // we'd need a type assertion helper from jackspeak definition
138
- // options in order to cast the field to a known name type
139
- // @ts-expect-error @typescript-eslint/no-unsafe-argument
140
- const record = conf.getRecord(field);
141
- return dotProp.get(record, subKey);
142
- }
143
- // otherwise just get the value directly from the config getter
144
- return isRecordField(k) ?
145
- conf.getRecord(k)
146
- : conf.get(k);
147
- };
148
- const edit = async (conf) => {
149
- const [command, ...args] = conf.get('editor').split(' ');
150
- if (!command) {
151
- throw error(`editor is empty`);
152
- }
153
- await conf.editConfigFile(conf.get('config'), file => {
154
- args.push(file);
155
- const res = spawnSync(command, args, {
156
- stdio: 'inherit',
157
- });
158
- if (res.status !== 0) {
159
- throw error(`${command} command failed`, {
160
- ...res,
161
- command,
162
- args,
163
- });
164
- }
165
- });
166
- };
167
- const set = async (conf) => {
168
- const pairs = conf.positionals.slice(1);
169
- if (!pairs.length) {
170
- // Create an empty config file
171
- await conf.addConfigToFile(conf.get('config'), {});
172
- return;
173
- }
174
- const which = conf.get('config');
175
- // separate dot-prop paths from simple keys for different handling
176
- // any keys that include a dot (.) will be treated as dotPropPairs
177
- // other keys/value pairs are handled as simplePairs
178
- const dotPropPairs = [];
179
- const simplePairs = [];
180
- for (const pair of pairs) {
181
- const eq = pair.indexOf('=');
182
- if (eq === -1) {
183
- throw error('Set arguments must contain `=`', {
184
- code: 'EUSAGE',
185
- });
186
- }
187
- const key = pair.substring(0, eq);
188
- const value = pair.substring(eq + 1);
189
- if (key.includes('.')) {
190
- const [field, ...rest] = key.split('.');
191
- const subKey = rest.join('.');
192
- if (field && subKey) {
193
- dotPropPairs.push({ key, field, subKey, value });
194
- }
195
- else {
196
- throw error('Could not read property', {
197
- found: pair,
198
- });
199
- }
200
- }
201
- else {
202
- simplePairs.push(pair);
203
- }
204
- }
205
- // Handle keys that consists of a single name (e.g., `--foo`)
206
- // so that it doesn't need the dot-prop logic to handle values
207
- if (simplePairs.length > 0) {
208
- try {
209
- const parsed = conf.jack.parseRaw(simplePairs.map(kv => `--${kv}`)).values;
210
- await conf.addConfigToFile(which, pairsToRecords(parsed));
211
- }
212
- catch (err) {
213
- handleSetError(simplePairs, err);
214
- }
215
- }
216
- // Handle dot-prop paths for record fields
217
- if (dotPropPairs.length > 0) {
218
- for (const { field, subKey, value } of dotPropPairs) {
219
- if (isRecordField(field)) {
220
- // For record fields, we add entries in the format field=key=value
221
- const recordPair = `${field}=${subKey}=${value}`;
222
- try {
223
- const parsed = conf.jack.parseRaw([
224
- `--${recordPair}`,
225
- ]).values;
226
- await conf.addConfigToFile(which, pairsToRecords(parsed));
227
- /* c8 ignore start */
228
- }
229
- catch (err) {
230
- handleSetError([recordPair], err);
231
- }
232
- /* c8 ignore end */
233
- }
234
- }
235
- }
236
- };
237
- const handleSetError = (simplePairs, err) => {
238
- const { name, found, validOptions } = asRootError(err).cause;
239
- // when a boolean gets a value, it throw a parse error
240
- if (isObject(found) &&
241
- typeof found.name === 'string' &&
242
- typeof found.value === 'string') {
243
- const { name, value } = found;
244
- throw error(`Boolean flag must be "${name}" or "no-${name}", not a value`, {
245
- code: 'ECONFIG',
246
- name,
247
- found: `${name}=${value}`,
248
- });
249
- }
250
- if (Array.isArray(validOptions)) {
251
- throw error(`Invalid value provided for ${name}`, {
252
- code: 'ECONFIG',
253
- found,
254
- validOptions,
255
- });
256
- }
257
- // an unknown property
258
- throw error('Invalid config keys', {
259
- code: 'ECONFIG',
260
- found: simplePairs.map(kv => kv.split('=')[0]),
261
- validOptions: getSortedKeys(),
262
- });
263
- };
264
103
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport * as dotProp from '@vltpkg/dot-prop'\nimport { asRootError } from '@vltpkg/output/error'\nimport { isObject } from '@vltpkg/types'\nimport { spawnSync } from 'node:child_process'\nimport { getSortedKeys } from '../config/definition.ts'\nimport {\n definition,\n isRecordField,\n pairsToRecords,\n recordsToPairs,\n} from '../config/index.ts'\nimport { commandUsage } from '../config/usage.ts'\nimport type {\n ConfigDefinitions,\n LoadedConfig,\n RecordPairs,\n} from '../config/index.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'config',\n usage: '<command> [flags]',\n description: 'Work with vlt configuration',\n\n subcommands: {\n get: {\n usage: '<key> [<key> ...]',\n description: 'Print the named config value',\n },\n\n list: {\n description:\n 'Print all configuration settings currently in effect',\n },\n\n set: {\n usage:\n '<key>=<value> [<key>=<value> ...] [--config=<user | project>]',\n description: `Set config values. By default, these are\n written to the project config file, \\`vlt.json\\`\n in the root of the project. To set things for all\n projects, run with \\`--config=user\\``,\n },\n\n del: {\n usage: '<key> [<key> ...] [--config=<user | project>]',\n description: `Delete the named config fields. If no values remain in\n the config file, delete the file as well. By default,\n operates on the \\`vlt.json\\` file in the root of the\n current project. To delete a config field from the user\n config file, specify \\`--config=user\\`.`,\n },\n\n edit: {\n usage: '[--config=<user | project>]',\n description: 'Edit the configuration file',\n },\n\n help: {\n usage: '[field ...]',\n description: `Get information about a config field, or show a list\n of known config field names.`,\n },\n },\n })\n\nexport const command: CommandFn<\n string | number | boolean | void | string[] | RecordPairs\n> = async conf => {\n const sub = conf.positionals[0]\n switch (sub) {\n case 'set':\n return set(conf)\n\n case 'get':\n return get(conf)\n\n case 'ls':\n case 'list':\n return list(conf)\n\n case 'edit':\n return edit(conf)\n\n case 'help':\n return help(conf)\n\n case 'del':\n return del(conf)\n\n default: {\n throw error('Unrecognized config command', {\n code: 'EUSAGE',\n found: sub,\n validOptions: ['set', 'get', 'list', 'edit', 'help', 'del'],\n })\n }\n }\n}\n\nconst help = (conf: LoadedConfig) => {\n const j = definition.toJSON()\n const fields = conf.positionals.slice(1)\n if (!fields.length) {\n return [\n 'Specify one or more options to see information:',\n ...Object.keys(j)\n .sort((a, b) => a.localeCompare(b, 'en'))\n .map(c => ` ${c}`),\n ].join('\\n')\n }\n\n // TODO: some kind of fuzzy search?\n const res: string[] = []\n for (const f of fields) {\n const def = j[f]\n if (!def) {\n res.push(`unknown config field: ${f}`)\n } else {\n const hint = def.hint ? `=<${def.hint}>` : ''\n const type =\n isRecordField(f) ?\n 'Record<string, string>'\n : def.type + (def.multiple ? '[]' : '')\n\n res.push(`--${f}${hint}`)\n res.push(` type: ${type}`)\n if (def.default) {\n res.push(` default: ${JSON.stringify(def.default)}`)\n }\n if (def.description) {\n res.push(def.description)\n }\n }\n }\n return res.join('\\n')\n}\n\nconst list = (conf: LoadedConfig) => {\n return recordsToPairs(conf.options)\n}\n\nconst del = async (conf: LoadedConfig) => {\n const fields = conf.positionals.slice(1)\n if (!fields.length) {\n throw error('At least one key is required', {\n code: 'EUSAGE',\n })\n }\n\n await conf.deleteConfigKeys(conf.get('config'), fields)\n}\n\nconst get = async (conf: LoadedConfig) => {\n const keys = conf.positionals.slice(1)\n const k = keys[0]\n if (!k || keys.length > 1) {\n throw error('Exactly one key is required', {\n code: 'EUSAGE',\n })\n }\n // check if this is a dot-prop path into a record field, in which case\n // we need to get the record first and then use dot-prop to get the value\n if (k.includes('.')) {\n const [field, ...rest] = k.split('.')\n const subKey = rest.join('.')\n\n if (!field || !subKey) {\n throw error('Could not read property', {\n found: k,\n })\n }\n\n // we'd need a type assertion helper from jackspeak definition\n // options in order to cast the field to a known name type\n // @ts-expect-error @typescript-eslint/no-unsafe-argument\n const record = conf.getRecord(field)\n\n return dotProp.get(record, subKey) as\n | string\n | number\n | boolean\n | string[]\n | undefined\n }\n\n // otherwise just get the value directly from the config getter\n return isRecordField(k) ?\n conf.getRecord(k)\n : conf.get(k as keyof ConfigDefinitions)\n}\n\nconst edit = async (conf: LoadedConfig) => {\n const [command, ...args] = conf.get('editor').split(' ')\n if (!command) {\n throw error(`editor is empty`)\n }\n await conf.editConfigFile(conf.get('config'), file => {\n args.push(file)\n const res = spawnSync(command, args, {\n stdio: 'inherit',\n })\n if (res.status !== 0) {\n throw error(`${command} command failed`, {\n ...res,\n command,\n args,\n })\n }\n })\n}\n\nconst set = async (conf: LoadedConfig) => {\n const pairs = conf.positionals.slice(1)\n if (!pairs.length) {\n // Create an empty config file\n await conf.addConfigToFile(conf.get('config'), {})\n return\n }\n\n const which = conf.get('config')\n\n // separate dot-prop paths from simple keys for different handling\n // any keys that include a dot (.) will be treated as dotPropPairs\n // other keys/value pairs are handled as simplePairs\n const dotPropPairs: {\n key: string\n field: string\n subKey: string\n value: string\n }[] = []\n const simplePairs: string[] = []\n\n for (const pair of pairs) {\n const eq = pair.indexOf('=')\n if (eq === -1) {\n throw error('Set arguments must contain `=`', {\n code: 'EUSAGE',\n })\n }\n\n const key = pair.substring(0, eq)\n const value = pair.substring(eq + 1)\n if (key.includes('.')) {\n const [field, ...rest] = key.split('.')\n const subKey = rest.join('.')\n if (field && subKey) {\n dotPropPairs.push({ key, field, subKey, value })\n } else {\n throw error('Could not read property', {\n found: pair,\n })\n }\n } else {\n simplePairs.push(pair)\n }\n }\n\n // Handle keys that consists of a single name (e.g., `--foo`)\n // so that it doesn't need the dot-prop logic to handle values\n if (simplePairs.length > 0) {\n try {\n const parsed = conf.jack.parseRaw(\n simplePairs.map(kv => `--${kv}`),\n ).values\n await conf.addConfigToFile(which, pairsToRecords(parsed))\n } catch (err) {\n handleSetError(simplePairs, err)\n }\n }\n\n // Handle dot-prop paths for record fields\n if (dotPropPairs.length > 0) {\n for (const { field, subKey, value } of dotPropPairs) {\n if (isRecordField(field)) {\n // For record fields, we add entries in the format field=key=value\n const recordPair = `${field}=${subKey}=${value}`\n try {\n const parsed = conf.jack.parseRaw([\n `--${recordPair}`,\n ]).values\n await conf.addConfigToFile(which, pairsToRecords(parsed))\n /* c8 ignore start */\n } catch (err) {\n handleSetError([recordPair], err)\n }\n /* c8 ignore end */\n }\n }\n }\n}\n\nconst handleSetError = (simplePairs: string[], err: unknown) => {\n const { name, found, validOptions } = asRootError(err).cause\n // when a boolean gets a value, it throw a parse error\n if (\n isObject(found) &&\n typeof found.name === 'string' &&\n typeof found.value === 'string'\n ) {\n const { name, value } = found\n throw error(\n `Boolean flag must be \"${name}\" or \"no-${name}\", not a value`,\n {\n code: 'ECONFIG',\n name,\n found: `${name}=${value}`,\n },\n )\n }\n if (Array.isArray(validOptions)) {\n throw error(`Invalid value provided for ${name}`, {\n code: 'ECONFIG',\n found,\n validOptions,\n })\n }\n // an unknown property\n throw error('Invalid config keys', {\n code: 'ECONFIG',\n found: simplePairs.map(kv => kv.split('=')[0]),\n validOptions: getSortedKeys(),\n })\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { commandUsage } from '../config/usage.ts'\nimport { isRecordField, definition } from '../config/index.ts'\nimport { get, set, edit, list, del } from '@vltpkg/config'\nimport type { LoadedConfig, RecordPairs } from '../config/index.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'config',\n usage: '<command> [flags]',\n description: 'Work with vlt configuration',\n\n subcommands: {\n get: {\n usage: '<key> [<key> ...]',\n description: 'Print the named config value',\n },\n\n list: {\n description:\n 'Print all configuration settings currently in effect',\n },\n\n set: {\n usage:\n '<key>=<value> [<key>=<value> ...] [--config=<user | project>]',\n description: `Set config values. By default, these are\n written to the project config file, \\`vlt.json\\`\n in the root of the project. To set things for all\n projects, run with \\`--config=user\\``,\n },\n\n del: {\n usage: '<key> [<key> ...] [--config=<user | project>]',\n description: `Delete the named config fields. If no values remain in\n the config file, delete the file as well. By default,\n operates on the \\`vlt.json\\` file in the root of the\n current project. To delete a config field from the user\n config file, specify \\`--config=user\\`.`,\n },\n\n edit: {\n usage: '[--config=<user | project>]',\n description: 'Edit the configuration file',\n },\n\n help: {\n usage: '[field ...]',\n description: `Get information about a config field, or show a list\n of known config field names.`,\n },\n },\n })\n\nexport const command: CommandFn<\n string | number | boolean | void | string[] | RecordPairs\n> = async conf => {\n const sub = conf.positionals[0]\n switch (sub) {\n case 'set':\n return set(conf)\n\n case 'get':\n return get(conf)\n\n case 'ls':\n case 'list':\n return list(conf)\n\n case 'edit':\n return edit(conf)\n\n case 'help':\n return help(conf)\n\n case 'del':\n return del(conf)\n\n default: {\n throw error('Unrecognized config command', {\n code: 'EUSAGE',\n found: sub,\n validOptions: ['set', 'get', 'list', 'edit', 'help', 'del'],\n })\n }\n }\n}\n\nconst help = (conf: LoadedConfig) => {\n const j = definition.toJSON()\n const fields = conf.positionals.slice(1)\n if (!fields.length) {\n return [\n 'Specify one or more options to see information:',\n ...Object.keys(j)\n .sort((a, b) => a.localeCompare(b, 'en'))\n .map(c => ` ${c}`),\n ].join('\\n')\n }\n\n // TODO: some kind of fuzzy search?\n const res: string[] = []\n for (const f of fields) {\n const def = j[f]\n if (!def) {\n res.push(`unknown config field: ${f}`)\n } else {\n const hint = def.hint ? `=<${def.hint}>` : ''\n const type =\n isRecordField(f) ?\n 'Record<string, string>'\n : def.type + (def.multiple ? '[]' : '')\n\n res.push(`--${f}${hint}`)\n res.push(` type: ${type}`)\n if (def.default) {\n res.push(` default: ${JSON.stringify(def.default)}`)\n }\n if (def.description) {\n res.push(def.description)\n }\n }\n }\n return res.join('\\n')\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,eAAO,MAAM,KAAK,EAAE,YAMhB,CAAA;AAEJ,eAAO,MAAM,KAAK;;;CAGe,CAAA;AAEjC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,KAAK,CAKpC,CAAA"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,eAAO,MAAM,KAAK,EAAE,YAMhB,CAAA;AAEJ,eAAO,MAAM,KAAK;;;CAGe,CAAA;AAEjC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,KAAK,CAcpC,CAAA"}
@@ -15,7 +15,13 @@ export const views = {
15
15
  export const command = async (conf) => {
16
16
  const monorepo = conf.options.monorepo;
17
17
  const { add } = parseAddArgs(conf, monorepo);
18
- const { graph } = await install(conf.options, add);
18
+ const frozenLockfile = conf.options['frozen-lockfile'];
19
+ const expectLockfile = conf.options['expect-lockfile'];
20
+ const { graph } = await install({
21
+ ...conf.options,
22
+ frozenLockfile,
23
+ expectLockfile,
24
+ }, add);
19
25
  return graph;
20
26
  };
21
27
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,MAAM,KAAK,GAAiB,GAAG,EAAE,CACtC,YAAY,CAAC;IACX,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE;+CAC8B;CAC5C,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,eAAe;CACS,CAAA;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAqB,KAAK,EAAC,IAAI,EAAC,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;IACtC,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAClD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { Graph } from '@vltpkg/graph'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { install } from '@vltpkg/graph'\nimport { parseAddArgs } from '../parse-add-remove-args.ts'\nimport type { Views } from '../view.ts'\nimport { InstallReporter } from './install/reporter.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'install',\n usage: '[packages ...]',\n description: `Install the specified packages, updating package.json and\n vlt-lock.json appropriately.`,\n })\n\nexport const views = {\n json: g => g.toJSON(),\n human: InstallReporter,\n} as const satisfies Views<Graph>\n\nexport const command: CommandFn<Graph> = async conf => {\n const monorepo = conf.options.monorepo\n const { add } = parseAddArgs(conf, monorepo)\n const { graph } = await install(conf.options, add)\n return graph\n}\n"]}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,MAAM,KAAK,GAAiB,GAAG,EAAE,CACtC,YAAY,CAAC;IACX,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE;+CAC8B;CAC5C,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,eAAe;CACS,CAAA;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAqB,KAAK,EAAC,IAAI,EAAC,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;IACtC,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACtD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACtD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC7B;QACE,GAAG,IAAI,CAAC,OAAO;QACf,cAAc;QACd,cAAc;KACf,EACD,GAAG,CACJ,CAAA;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import type { Graph } from '@vltpkg/graph'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { install } from '@vltpkg/graph'\nimport { parseAddArgs } from '../parse-add-remove-args.ts'\nimport type { Views } from '../view.ts'\nimport { InstallReporter } from './install/reporter.ts'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'install',\n usage: '[packages ...]',\n description: `Install the specified packages, updating package.json and\n vlt-lock.json appropriately.`,\n })\n\nexport const views = {\n json: g => g.toJSON(),\n human: InstallReporter,\n} as const satisfies Views<Graph>\n\nexport const command: CommandFn<Graph> = async conf => {\n const monorepo = conf.options.monorepo\n const { add } = parseAddArgs(conf, monorepo)\n const frozenLockfile = conf.options['frozen-lockfile']\n const expectLockfile = conf.options['expect-lockfile']\n const { graph } = await install(\n {\n ...conf.options,\n frozenLockfile,\n expectLockfile,\n },\n add,\n )\n return graph\n}\n"]}
@@ -21,17 +21,17 @@ export const usage = () => commandUsage({
21
21
  export const views = {
22
22
  human: r => {
23
23
  const lines = [
24
- `📦 ${r.name}@${r.version}`,
25
- `📄 ${r.filename}`,
26
- `📁 ${r.files.length} files`,
24
+ `📦 Package: ${r.id}`,
25
+ `📄 File: ${r.filename}`,
26
+ `📁 ${r.files.length} Files`,
27
27
  ...r.files.map(f => ` - ${f}`),
28
- `📊 package size: ${prettyBytes(r.size)}`,
29
- `📂 unpacked size: ${prettyBytes(r.unpackedSize)}`,
28
+ `📊 Package Size: ${prettyBytes(r.size)}`,
29
+ `📂 Unpacked Size: ${prettyBytes(r.unpackedSize)}`,
30
30
  ];
31
31
  if (r.shasum)
32
- lines.push(`🔒 shasum: ${r.shasum}`);
32
+ lines.push(`🔒 Shasum: ${r.shasum}`);
33
33
  if (r.integrity)
34
- lines.push(`🔐 integrity: ${r.integrity}`);
34
+ lines.push(`🔐 Integrity: ${r.integrity}`);
35
35
  return lines.join('\n');
36
36
  },
37
37
  json: r => r,
@@ -1 +1 @@
1
- {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../../src/commands/pack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,WAAW,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,KAAK,GAAiB,GAAG,EAAE,CACtC,YAAY,CAAC;IACX,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,EAAE;IACT,WAAW,EAAE;;;0BAGS;IACtB,OAAO,EAAE;QACP,SAAS,EAAE;YACT,WAAW,EACT,sDAAsD;SACzD;KACF;CACF,CAAC,CAAA;AAcJ,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,CAAC,CAAC,EAAE;QACT,MAAM,KAAK,GAAG;YACZ,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE;YAC3B,MAAM,CAAC,CAAC,QAAQ,EAAE;YAClB,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,QAAQ;YAC5B,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,oBAAoB,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACzC,qBAAqB,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;SACnD,CAAA;QACD,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAClD,IAAI,CAAC,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;QAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IACD,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CAC2B,CAAA;AAEzC,MAAM,CAAC,MAAM,OAAO,GAA6B,KAAK,EAAC,IAAI,EAAC,EAAE;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IACpD,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAA;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG;QACjB,GAAG,EAAE,WAAW;QAChB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;QACrC,QAAQ;QACR,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,IAAI;KACpB,CAAA;IAED,MAAM,GAAG,CAAC;QACR,GAAG,UAAU;QACb,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IAEF,MAAM,GAAG,CAAC;QACR,GAAG,UAAU;QACb,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IAEF,MAAM,EACJ,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,KAAK,EACL,SAAS,EACT,MAAM,GACP,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;IAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,GAAG,CAAC;QACR,GAAG,UAAU;QACb,IAAI,EAAE,UAAU;KACjB,CAAC,CAAA;IAEF,OAAO;QACL,EAAE,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE;QACxB,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,KAAK;QACL,IAAI,EAAE,WAAW,CAAC,MAAM;QACxB,YAAY;QACZ,MAAM;QACN,SAAS;KACV,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport assert from 'node:assert'\nimport { run } from '@vltpkg/run'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { packTarball } from '../pack-tarball.ts'\nimport type { Views } from '../view.ts'\nimport prettyBytes from 'pretty-bytes'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'pack',\n usage: '',\n description: `Create a tarball from a package in the current directory or specified folder.\n \n The tarball will be saved to the current directory with the name\n <name>-<version>.tgz.`,\n options: {\n 'dry-run': {\n description:\n 'Show what would be packed without creating a tarball',\n },\n },\n })\n\ntype CommandResult = {\n id: string\n name: string\n version: string\n filename: string\n files: string[]\n size: number\n unpackedSize: number\n shasum?: string\n integrity?: string\n}\n\nexport const views = {\n human: r => {\n const lines = [\n `📦 ${r.name}@${r.version}`,\n `📄 ${r.filename}`,\n `📁 ${r.files.length} files`,\n ...r.files.map(f => ` - ${f}`),\n `📊 package size: ${prettyBytes(r.size)}`,\n `📂 unpacked size: ${prettyBytes(r.unpackedSize)}`,\n ]\n if (r.shasum) lines.push(`🔒 shasum: ${r.shasum}`)\n if (r.integrity) lines.push(`🔐 integrity: ${r.integrity}`)\n return lines.join('\\n')\n },\n json: r => r,\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const manifestPath = conf.options.packageJson.find()\n assert(manifestPath, 'No package.json found')\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n const isDryRun = conf.options['dry-run']\n const runOptions = {\n cwd: manifestDir,\n projectRoot: conf.projectRoot,\n packageJson: conf.options.packageJson,\n manifest,\n ignoreMissing: true,\n ignorePrePost: true,\n }\n\n await run({\n ...runOptions,\n arg0: 'prepack',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepare',\n })\n\n const {\n name,\n version,\n filename,\n tarballData,\n unpackedSize,\n files,\n integrity,\n shasum,\n } = await packTarball(manifest, manifestDir, conf)\n\n if (!isDryRun) {\n await writeFile(join(manifestDir, filename), tarballData)\n }\n\n await run({\n ...runOptions,\n arg0: 'postpack',\n })\n\n return {\n id: `${name}@${version}`,\n name,\n version,\n filename,\n files,\n size: tarballData.length,\n unpackedSize,\n shasum,\n integrity,\n }\n}\n"]}
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../../src/commands/pack.ts"],"names":[],"mappings":"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","sourcesContent":["import { writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport assert from 'node:assert'\nimport { run } from '@vltpkg/run'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { packTarball } from '../pack-tarball.ts'\nimport type { Views } from '../view.ts'\nimport prettyBytes from 'pretty-bytes'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'pack',\n usage: '',\n description: `Create a tarball from a package in the current directory or specified folder.\n \n The tarball will be saved to the current directory with the name\n <name>-<version>.tgz.`,\n options: {\n 'dry-run': {\n description:\n 'Show what would be packed without creating a tarball',\n },\n },\n })\n\ntype CommandResult = {\n id: string\n name: string\n version: string\n filename: string\n files: string[]\n size: number\n unpackedSize: number\n shasum?: string\n integrity?: string\n}\n\nexport const views = {\n human: r => {\n const lines = [\n `📦 Package: ${r.id}`,\n `📄 File: ${r.filename}`,\n `📁 ${r.files.length} Files`,\n ...r.files.map(f => ` - ${f}`),\n `📊 Package Size: ${prettyBytes(r.size)}`,\n `📂 Unpacked Size: ${prettyBytes(r.unpackedSize)}`,\n ]\n if (r.shasum) lines.push(`🔒 Shasum: ${r.shasum}`)\n if (r.integrity) lines.push(`🔐 Integrity: ${r.integrity}`)\n return lines.join('\\n')\n },\n json: r => r,\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const manifestPath = conf.options.packageJson.find()\n assert(manifestPath, 'No package.json found')\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n const isDryRun = conf.options['dry-run']\n const runOptions = {\n cwd: manifestDir,\n projectRoot: conf.projectRoot,\n packageJson: conf.options.packageJson,\n manifest,\n ignoreMissing: true,\n ignorePrePost: true,\n }\n\n await run({\n ...runOptions,\n arg0: 'prepack',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepare',\n })\n\n const {\n name,\n version,\n filename,\n tarballData,\n unpackedSize,\n files,\n integrity,\n shasum,\n } = await packTarball(manifest, manifestDir, conf)\n\n if (!isDryRun) {\n await writeFile(join(manifestDir, filename), tarballData)\n }\n\n await run({\n ...runOptions,\n arg0: 'postpack',\n })\n\n return {\n id: `${name}@${version}`,\n name,\n version,\n filename,\n files,\n size: tarballData.length,\n unpackedSize,\n shasum,\n integrity,\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pkg.js","sourceRoot":"","sources":["../../../src/commands/pkg.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolve } from 'node:path'\nimport * as dotProp from '@vltpkg/dot-prop'\nimport { error } from '@vltpkg/error-cause'\nimport type { PackageJson } from '@vltpkg/package-json'\nimport type { Manifest } from '@vltpkg/types'\nimport assert from 'node:assert'\nimport type { LoadedConfig } from '../config/index.ts'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { init } from '@vltpkg/init'\nimport type { InitFileResults } from '@vltpkg/init'\nimport type { Views } from '../view.ts'\nimport { views as initViews } from './init.ts'\nimport { actual, GraphModifier } from '@vltpkg/graph'\nimport { Query } from '@vltpkg/query'\nimport { SecurityArchive } from '@vltpkg/security-archive'\nimport type { Monorepo as _Monorepo } from '@vltpkg/workspaces'\nimport type { QueryResponseNode } from '@vltpkg/query'\n\ntype ManifestWithLocation = {\n manifest: Manifest\n location: string\n}\n\nconst json = (\n results: ManifestWithLocation[] | ManifestWithLocation,\n) => JSON.stringify(results, null, 2)\n\nexport const views = {\n human: (_results, _options, config) => {\n const results = _results as\n | ManifestWithLocation[]\n | ManifestWithLocation\n // `vlt pkg init` is an alias for `vlt init`\n // use the same output handling\n if (config.positionals[0] === 'init') {\n return initViews.human(results as InitFileResults)\n }\n\n return (\n Array.isArray(results) ?\n typeof results[0] === 'string' ?\n (results as unknown as string[]).join('\\n')\n : json(results)\n : json(results)\n )\n },\n} as const satisfies Views\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'pkg',\n usage: '[<command>] [<args>]',\n description: 'Get or manipulate package.json values',\n subcommands: {\n get: {\n usage: '[<key>]',\n description: 'Get a single value',\n },\n init: {\n usage: '',\n description:\n 'Initialize a new package.json file in the current directory',\n },\n pick: {\n usage: '[<key> [<key> ...]]',\n description: 'Get multiple values or the entire package',\n },\n set: {\n usage: '<key>=<value> [<key>=<value> ...]',\n description: 'Set one or more key value pairs',\n },\n delete: {\n usage: '<key> [<key> ...]',\n description: 'Delete one or more keys from the package',\n },\n },\n examples: {\n 'set \"array[1].key=value\"': {\n description: 'Set a value on an object inside an array',\n },\n 'set \"array[]=value\"': {\n description: 'Append a value to an array',\n },\n },\n })\n\nexport const command: CommandFn = async conf => {\n const [sub, ...args] = conf.positionals\n if (sub === 'init') {\n return await init({ cwd: process.cwd() })\n }\n\n const pkg = conf.options.packageJson\n\n // Handle --scope option to get multiple manifests\n const scopeQueryString = conf.get('scope')\n let manifests: ManifestWithLocation[]\n\n if (scopeQueryString) {\n const modifiers = GraphModifier.maybeLoad(conf.options)\n const monorepo = conf.options.monorepo\n const mainManifest = conf.options.packageJson.read(\n conf.options.projectRoot,\n )\n const graph = actual.load({\n ...conf.options,\n mainManifest,\n modifiers,\n monorepo,\n loadManifests: false,\n })\n\n const securityArchive =\n Query.hasSecuritySelectors(scopeQueryString) ?\n await SecurityArchive.start({\n graph,\n specOptions: conf.options,\n })\n : undefined\n\n const query = new Query({\n graph,\n specOptions: conf.options,\n securityArchive,\n })\n\n const { nodes } = await query.search(scopeQueryString, {\n signal: new AbortController().signal,\n })\n\n // collects the paths of the nodes selected using --scope\n const scopePaths = nodes\n .filter(\n (n): n is QueryResponseNode & { location: string } =>\n n.location !== undefined,\n )\n .map(n => resolve(conf.options.projectRoot, n.location))\n\n // reads multiple manifests for each selected scope\n manifests = scopePaths.map(location => ({\n manifest: pkg.read(location),\n location,\n }))\n\n if (manifests.length === 0) {\n throw error('No matching package found using scope', {\n found: scopeQueryString,\n })\n }\n } else {\n // Single manifest mode\n const location = pkg.find() ?? conf.projectRoot\n manifests = [\n {\n manifest: pkg.read(location),\n location,\n },\n ]\n }\n\n switch (sub) {\n case 'get':\n return get(manifests, args)\n case 'pick':\n return pick(manifests, args)\n case 'set':\n return set(conf, manifests, pkg, args)\n case 'rm':\n case 'remove':\n case 'unset':\n case 'delete':\n return rm(conf, manifests, pkg, args)\n default: {\n throw error('Unrecognized pkg command', {\n code: 'EUSAGE',\n found: sub,\n validOptions: ['get', 'set', 'rm'],\n })\n }\n }\n}\n\nconst get = (manifests: ManifestWithLocation[], args: string[]) => {\n const noArg = () =>\n error(\n 'get requires not more than 1 argument. use `pick` to get more than 1.',\n { code: 'EUSAGE' },\n noArg,\n )\n if (args.length !== 1) {\n if (args.length > 1) {\n throw noArg()\n }\n return pick(manifests, args)\n }\n assert(args[0] != null, noArg())\n\n const [key] = args\n\n if (manifests.length === 1) {\n const [firstManifest] = manifests\n if (!firstManifest?.manifest) {\n /* c8 ignore start */\n throw error(\n 'No manifest found',\n firstManifest?.location ?\n { path: firstManifest.location }\n : {},\n )\n /* c8 ignore stop */\n }\n return dotProp.get(firstManifest.manifest, key)\n }\n\n return manifests.map(manifest =>\n dotProp.get(manifest.manifest, key),\n )\n}\n\nconst pick = (manifests: ManifestWithLocation[], args: string[]) => {\n if (manifests.length === 1) {\n const [firstManifest] = manifests\n /* c8 ignore start */\n if (!firstManifest?.manifest) {\n throw error(\n 'No manifest found',\n firstManifest?.location ?\n { path: firstManifest.location }\n : {},\n )\n }\n /* c8 ignore stop */\n const { manifest } = firstManifest\n return args.length ?\n args.reduce(\n (acc, key) =>\n dotProp.set(acc, key, dotProp.get(manifest, key)),\n {},\n )\n : manifest\n }\n\n // Multiple manifests - return results keyed by location\n return manifests.map(manifest =>\n args.length ?\n args.reduce(\n (acc, key) =>\n dotProp.set(acc, key, dotProp.get(manifest.manifest, key)),\n {},\n )\n : manifest.manifest,\n )\n}\n\nconst set = (\n _conf: LoadedConfig,\n manifests: ManifestWithLocation[],\n pkg: PackageJson,\n args: string[],\n) => {\n if (args.length < 1) {\n throw error('set requires arguments', { code: 'EUSAGE' })\n }\n\n for (const { manifest, location } of manifests) {\n const res = args.reduce((acc, p) => {\n const index = p.indexOf('=')\n if (index === -1) {\n throw error('set arguments must contain `=`', {\n code: 'EUSAGE',\n })\n }\n return dotProp.set(\n acc,\n p.substring(0, index),\n p.substring(index + 1),\n )\n }, manifest)\n\n pkg.write(location, res)\n }\n}\n\nconst rm = (\n _conf: LoadedConfig,\n manifests: ManifestWithLocation[],\n pkg: PackageJson,\n args: string[],\n) => {\n if (args.length < 1) {\n throw error('rm requires arguments', { code: 'EUSAGE' })\n }\n\n const results: ManifestWithLocation[] = []\n\n for (const { manifest, location } of manifests) {\n const res = args.reduce((acc, key) => {\n dotProp.del(acc, key)\n return acc\n }, manifest)\n\n pkg.write(location, res)\n results.push({\n manifest: res,\n location,\n })\n }\n\n if (manifests.length === 1) {\n return results[0]\n }\n return results\n}\n"]}
1
+ {"version":3,"file":"pkg.js","sourceRoot":"","sources":["../../../src/commands/pkg.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolve } from 'node:path'\nimport * as dotProp from '@vltpkg/dot-prop'\nimport { error } from '@vltpkg/error-cause'\nimport type { PackageJson } from '@vltpkg/package-json'\nimport type { NormalizedManifest } from '@vltpkg/types'\nimport assert from 'node:assert'\nimport type { LoadedConfig } from '../config/index.ts'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { init } from '@vltpkg/init'\nimport type { InitFileResults } from '@vltpkg/init'\nimport type { Views } from '../view.ts'\nimport { views as initViews } from './init.ts'\nimport { actual, GraphModifier } from '@vltpkg/graph'\nimport { Query } from '@vltpkg/query'\nimport { SecurityArchive } from '@vltpkg/security-archive'\nimport type { Monorepo as _Monorepo } from '@vltpkg/workspaces'\nimport type { QueryResponseNode } from '@vltpkg/query'\n\ntype ManifestWithLocation = {\n manifest: NormalizedManifest\n location: string\n}\n\nconst json = (\n results: ManifestWithLocation[] | ManifestWithLocation,\n) => JSON.stringify(results, null, 2)\n\nexport const views = {\n human: (_results, _options, config) => {\n const results = _results as\n | ManifestWithLocation[]\n | ManifestWithLocation\n // `vlt pkg init` is an alias for `vlt init`\n // use the same output handling\n if (config.positionals[0] === 'init') {\n return initViews.human(results as InitFileResults)\n }\n\n return (\n Array.isArray(results) ?\n typeof results[0] === 'string' ?\n (results as unknown as string[]).join('\\n')\n : json(results)\n : json(results)\n )\n },\n} as const satisfies Views\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'pkg',\n usage: '[<command>] [<args>]',\n description: 'Get or manipulate package.json values',\n subcommands: {\n get: {\n usage: '[<key>]',\n description: 'Get a single value',\n },\n init: {\n usage: '',\n description:\n 'Initialize a new package.json file in the current directory',\n },\n pick: {\n usage: '[<key> [<key> ...]]',\n description: 'Get multiple values or the entire package',\n },\n set: {\n usage: '<key>=<value> [<key>=<value> ...]',\n description: 'Set one or more key value pairs',\n },\n delete: {\n usage: '<key> [<key> ...]',\n description: 'Delete one or more keys from the package',\n },\n },\n examples: {\n 'set \"array[1].key=value\"': {\n description: 'Set a value on an object inside an array',\n },\n 'set \"array[]=value\"': {\n description: 'Append a value to an array',\n },\n },\n })\n\nexport const command: CommandFn = async conf => {\n const [sub, ...args] = conf.positionals\n if (sub === 'init') {\n return await init({ cwd: process.cwd() })\n }\n\n const pkg = conf.options.packageJson\n\n // Handle --scope option to get multiple manifests\n const scopeQueryString = conf.get('scope')\n let manifests: ManifestWithLocation[]\n\n if (scopeQueryString) {\n const modifiers = GraphModifier.maybeLoad(conf.options)\n const monorepo = conf.options.monorepo\n const mainManifest = conf.options.packageJson.read(\n conf.options.projectRoot,\n )\n const graph = actual.load({\n ...conf.options,\n mainManifest,\n modifiers,\n monorepo,\n loadManifests: false,\n })\n\n const securityArchive =\n Query.hasSecuritySelectors(scopeQueryString) ?\n await SecurityArchive.start({\n graph,\n specOptions: conf.options,\n })\n : undefined\n\n const query = new Query({\n graph,\n specOptions: conf.options,\n securityArchive,\n })\n\n const { nodes } = await query.search(scopeQueryString, {\n signal: new AbortController().signal,\n })\n\n // collects the paths of the nodes selected using --scope\n const scopePaths = nodes\n .filter(\n (n): n is QueryResponseNode & { location: string } =>\n n.location !== undefined,\n )\n .map(n => resolve(conf.options.projectRoot, n.location))\n\n // reads multiple manifests for each selected scope\n manifests = scopePaths.map(location => ({\n manifest: pkg.read(location),\n location,\n }))\n\n if (manifests.length === 0) {\n throw error('No matching package found using scope', {\n found: scopeQueryString,\n })\n }\n } else {\n // Single manifest mode\n const location = pkg.find() ?? conf.projectRoot\n manifests = [\n {\n manifest: pkg.read(location),\n location,\n },\n ]\n }\n\n switch (sub) {\n case 'get':\n return get(manifests, args)\n case 'pick':\n return pick(manifests, args)\n case 'set':\n return set(conf, manifests, pkg, args)\n case 'rm':\n case 'remove':\n case 'unset':\n case 'delete':\n return rm(conf, manifests, pkg, args)\n default: {\n throw error('Unrecognized pkg command', {\n code: 'EUSAGE',\n found: sub,\n validOptions: ['get', 'set', 'rm'],\n })\n }\n }\n}\n\nconst get = (manifests: ManifestWithLocation[], args: string[]) => {\n const noArg = () =>\n error(\n 'get requires not more than 1 argument. use `pick` to get more than 1.',\n { code: 'EUSAGE' },\n noArg,\n )\n if (args.length !== 1) {\n if (args.length > 1) {\n throw noArg()\n }\n return pick(manifests, args)\n }\n assert(args[0] != null, noArg())\n\n const [key] = args\n\n if (manifests.length === 1) {\n const [firstManifest] = manifests\n if (!firstManifest?.manifest) {\n /* c8 ignore start */\n throw error(\n 'No manifest found',\n firstManifest?.location ?\n { path: firstManifest.location }\n : {},\n )\n /* c8 ignore stop */\n }\n return dotProp.get(firstManifest.manifest, key)\n }\n\n return manifests.map(manifest =>\n dotProp.get(manifest.manifest, key),\n )\n}\n\nconst pick = (manifests: ManifestWithLocation[], args: string[]) => {\n if (manifests.length === 1) {\n const [firstManifest] = manifests\n /* c8 ignore start */\n if (!firstManifest?.manifest) {\n throw error(\n 'No manifest found',\n firstManifest?.location ?\n { path: firstManifest.location }\n : {},\n )\n }\n /* c8 ignore stop */\n const { manifest } = firstManifest\n return args.length ?\n args.reduce(\n (acc, key) =>\n dotProp.set(acc, key, dotProp.get(manifest, key)),\n {},\n )\n : manifest\n }\n\n // Multiple manifests - return results keyed by location\n return manifests.map(manifest =>\n args.length ?\n args.reduce(\n (acc, key) =>\n dotProp.set(acc, key, dotProp.get(manifest.manifest, key)),\n {},\n )\n : manifest.manifest,\n )\n}\n\nconst set = (\n _conf: LoadedConfig,\n manifests: ManifestWithLocation[],\n pkg: PackageJson,\n args: string[],\n) => {\n if (args.length < 1) {\n throw error('set requires arguments', { code: 'EUSAGE' })\n }\n\n for (const { manifest, location } of manifests) {\n const res = args.reduce((acc, p) => {\n const index = p.indexOf('=')\n if (index === -1) {\n throw error('set arguments must contain `=`', {\n code: 'EUSAGE',\n })\n }\n return dotProp.set(\n acc,\n p.substring(0, index),\n p.substring(index + 1),\n )\n }, manifest)\n\n pkg.write(location, res)\n }\n}\n\nconst rm = (\n _conf: LoadedConfig,\n manifests: ManifestWithLocation[],\n pkg: PackageJson,\n args: string[],\n) => {\n if (args.length < 1) {\n throw error('rm requires arguments', { code: 'EUSAGE' })\n }\n\n const results: ManifestWithLocation[] = []\n\n for (const { manifest, location } of manifests) {\n const res = args.reduce((acc, key) => {\n dotProp.del(acc, key)\n return acc\n }, manifest)\n\n pkg.write(location, res)\n results.push({\n manifest: res,\n location,\n })\n }\n\n if (manifests.length === 1) {\n return results[0]\n }\n return results\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQ1D,eAAO,MAAM,KAAK,EAAE,YAsBhB,CAAA;AAEJ,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,KAAK;;;CAkBuB,CAAA;AAEzC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,aAAa,CAuJ5C,CAAA"}
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQ1D,eAAO,MAAM,KAAK,EAAE,YAsBhB,CAAA;AAEJ,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,KAAK;;;CAiBuB,CAAA;AAEzC,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,aAAa,CAyJ5C,CAAA"}
@@ -32,19 +32,18 @@ export const usage = () => commandUsage({
32
32
  export const views = {
33
33
  human: r => {
34
34
  const lines = [
35
- `✅ Published ${r.name}@${r.version}`,
36
35
  `📦 Package: ${r.id}`,
37
36
  `🏷️ Tag: ${r.tag}`,
38
37
  `📡 Registry: ${r.registry}`,
39
- `📁 ${r.files.length} files`,
38
+ `📁 ${r.files.length} Files`,
40
39
  ...r.files.map(f => ` - ${f}`),
41
- `📊 package size: ${prettyBytes(r.size)}`,
42
- `📂 unpacked size: ${prettyBytes(r.unpackedSize)}`,
40
+ `📊 Package Size: ${prettyBytes(r.size)}`,
41
+ `📂 Unpacked Size: ${prettyBytes(r.unpackedSize)}`,
43
42
  ];
44
43
  if (r.shasum)
45
- lines.push(`🔒 shasum: ${r.shasum}`);
44
+ lines.push(`🔒 Shasum: ${r.shasum}`);
46
45
  if (r.integrity)
47
- lines.push(`🔐 integrity: ${r.integrity}`);
46
+ lines.push(`🔐 Integrity: ${r.integrity}`);
48
47
  return lines.join('\n');
49
48
  },
50
49
  json: r => r,
@@ -81,7 +80,7 @@ export const command = async (conf) => {
81
80
  ...runOptions,
82
81
  arg0: 'prepare',
83
82
  });
84
- const { name, version, filename, tarballData, unpackedSize, files, integrity, shasum, } = await packTarball(manifest, manifestDir, conf);
83
+ const { name, version, tarballName, tarballData, unpackedSize, files, integrity, shasum, } = await packTarball(manifest, manifestDir, conf);
85
84
  await run({
86
85
  ...runOptions,
87
86
  arg0: 'postpack',
@@ -106,13 +105,14 @@ export const command = async (conf) => {
106
105
  ...manifest.dist,
107
106
  integrity,
108
107
  shasum,
109
- tarball: new URL(`${name}/-/${filename}`, registryUrl).href,
108
+ tarball: new URL(`${name}/-/${tarballName}`, registryUrl)
109
+ .href,
110
110
  },
111
111
  },
112
112
  },
113
113
  access,
114
114
  _attachments: {
115
- [filename]: {
115
+ [tarballName]: {
116
116
  content_type: 'application/octet-stream',
117
117
  data: tarballData.toString('base64'),
118
118
  length: tarballData.length,
@@ -143,6 +143,7 @@ export const command = async (conf) => {
143
143
  }
144
144
  if (response.statusCode !== 200 && response.statusCode !== 201) {
145
145
  throw error('Failed to publish package', {
146
+ url: publishUrl,
146
147
  response,
147
148
  });
148
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { RegistryClient } from '@vltpkg/registry-client'\nimport type { CacheEntry } from '@vltpkg/registry-client'\nimport { run } from '@vltpkg/run'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { packTarball } from '../pack-tarball.ts'\nimport type { Views } from '../view.ts'\nimport assert from 'node:assert'\nimport { asError } from '@vltpkg/types'\nimport { dirname } from 'node:path'\nimport prettyBytes from 'pretty-bytes'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'publish',\n usage: '',\n description: `Create a tarball from a package and publish it to the configured registry.\n \n This command will pack the package in the current directory or specified folder,\n and then upload it to the configured registry.`,\n options: {\n tag: {\n description: 'Publish the package with the given tag',\n value: '<tag>',\n },\n access: {\n description: 'Set access level (public or restricted)',\n value: '<level>',\n },\n otp: {\n description: `Provide an OTP to use when publishing a package.`,\n value: '<otp>',\n },\n },\n })\n\nexport type CommandResult = {\n id: string\n name: string\n version: string\n tag: string\n registry: string\n shasum?: string\n integrity?: string\n size: number\n access: string\n unpackedSize: number\n files: string[]\n}\n\nexport const views = {\n human: r => {\n const lines = [\n `✅ Published ${r.name}@${r.version}`,\n `📦 Package: ${r.id}`,\n `🏷️ Tag: ${r.tag}`,\n `📡 Registry: ${r.registry}`,\n `📁 ${r.files.length} files`,\n ...r.files.map(f => ` - ${f}`),\n `📊 package size: ${prettyBytes(r.size)}`,\n `📂 unpacked size: ${prettyBytes(r.unpackedSize)}`,\n ]\n if (r.shasum) lines.push(`🔒 shasum: ${r.shasum}`)\n if (r.integrity) lines.push(`🔐 integrity: ${r.integrity}`)\n\n return lines.join('\\n')\n },\n json: r => r,\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const manifestPath = conf.options.packageJson.find()\n assert(manifestPath, 'No package.json found')\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n assert(\n !manifest.private,\n error('Package has been marked as private'),\n )\n\n const {\n tag = 'latest',\n access,\n registry,\n 'dry-run': dry = false,\n otp,\n } = conf.options\n const registryUrl = new URL(registry)\n\n const runOptions = {\n cwd: manifestDir,\n projectRoot: conf.projectRoot,\n packageJson: conf.options.packageJson,\n manifest,\n ignoreMissing: true,\n ignorePrePost: true,\n }\n\n await run({\n ...runOptions,\n arg0: 'prepublishOnly',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepublish',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepack',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepare',\n })\n\n const {\n name,\n version,\n filename,\n tarballData,\n unpackedSize,\n files,\n integrity,\n shasum,\n } = await packTarball(manifest, manifestDir, conf)\n\n await run({\n ...runOptions,\n arg0: 'postpack',\n })\n\n await run({\n ...runOptions,\n arg0: 'publish',\n })\n\n const publishMetadata = {\n _id: name,\n name,\n description: manifest.description || '',\n 'dist-tags': {\n [tag]: version,\n },\n versions: {\n [version]: {\n ...manifest,\n _id: `${name}@${version}`,\n _nodeVersion: process.versions.node,\n dist: {\n ...manifest.dist,\n integrity,\n shasum,\n tarball: new URL(`${name}/-/${filename}`, registryUrl).href,\n },\n },\n },\n access,\n _attachments: {\n [filename]: {\n content_type: 'application/octet-stream',\n data: tarballData.toString('base64'),\n length: tarballData.length,\n },\n },\n }\n\n const rc = new RegistryClient(conf.options)\n const publishUrl = new URL(\n name.startsWith('@') ? name.replace('/', '%2F') : name,\n registryUrl,\n )\n\n if (!dry) {\n let response: CacheEntry\n try {\n response = await rc.request(publishUrl, {\n method: 'PUT',\n headers: {\n 'content-type': 'application/json',\n // These control what type of OTP auth flow is used\n 'npm-auth-type': 'web',\n 'npm-command': 'publish',\n },\n body: JSON.stringify(publishMetadata),\n otp,\n })\n } catch (err) {\n throw error('Failed to publish package', {\n cause: asError(err),\n })\n }\n\n if (response.statusCode !== 200 && response.statusCode !== 201) {\n throw error('Failed to publish package', {\n response,\n })\n }\n }\n\n await run({\n ...runOptions,\n arg0: 'postpublish',\n })\n\n return {\n id: `${name}@${version}`,\n name,\n version,\n tag,\n access,\n registry: registryUrl.origin,\n integrity,\n shasum,\n size: tarballData.length,\n unpackedSize,\n files,\n }\n}\n"]}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { RegistryClient } from '@vltpkg/registry-client'\nimport type { CacheEntry } from '@vltpkg/registry-client'\nimport { run } from '@vltpkg/run'\nimport { commandUsage } from '../config/usage.ts'\nimport type { CommandFn, CommandUsage } from '../index.ts'\nimport { packTarball } from '../pack-tarball.ts'\nimport type { Views } from '../view.ts'\nimport assert from 'node:assert'\nimport { asError } from '@vltpkg/types'\nimport { dirname } from 'node:path'\nimport prettyBytes from 'pretty-bytes'\n\nexport const usage: CommandUsage = () =>\n commandUsage({\n command: 'publish',\n usage: '',\n description: `Create a tarball from a package and publish it to the configured registry.\n \n This command will pack the package in the current directory or specified folder,\n and then upload it to the configured registry.`,\n options: {\n tag: {\n description: 'Publish the package with the given tag',\n value: '<tag>',\n },\n access: {\n description: 'Set access level (public or restricted)',\n value: '<level>',\n },\n otp: {\n description: `Provide an OTP to use when publishing a package.`,\n value: '<otp>',\n },\n },\n })\n\nexport type CommandResult = {\n id: string\n name: string\n version: string\n tag: string\n registry: string\n shasum?: string\n integrity?: string\n size: number\n access: string\n unpackedSize: number\n files: string[]\n}\n\nexport const views = {\n human: r => {\n const lines = [\n `📦 Package: ${r.id}`,\n `🏷️ Tag: ${r.tag}`,\n `📡 Registry: ${r.registry}`,\n `📁 ${r.files.length} Files`,\n ...r.files.map(f => ` - ${f}`),\n `📊 Package Size: ${prettyBytes(r.size)}`,\n `📂 Unpacked Size: ${prettyBytes(r.unpackedSize)}`,\n ]\n if (r.shasum) lines.push(`🔒 Shasum: ${r.shasum}`)\n if (r.integrity) lines.push(`🔐 Integrity: ${r.integrity}`)\n\n return lines.join('\\n')\n },\n json: r => r,\n} as const satisfies Views<CommandResult>\n\nexport const command: CommandFn<CommandResult> = async conf => {\n const manifestPath = conf.options.packageJson.find()\n assert(manifestPath, 'No package.json found')\n const manifestDir = dirname(manifestPath)\n const manifest = conf.options.packageJson.read(manifestDir)\n\n assert(\n !manifest.private,\n error('Package has been marked as private'),\n )\n\n const {\n tag = 'latest',\n access,\n registry,\n 'dry-run': dry = false,\n otp,\n } = conf.options\n const registryUrl = new URL(registry)\n\n const runOptions = {\n cwd: manifestDir,\n projectRoot: conf.projectRoot,\n packageJson: conf.options.packageJson,\n manifest,\n ignoreMissing: true,\n ignorePrePost: true,\n }\n\n await run({\n ...runOptions,\n arg0: 'prepublishOnly',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepublish',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepack',\n })\n\n await run({\n ...runOptions,\n arg0: 'prepare',\n })\n\n const {\n name,\n version,\n tarballName,\n tarballData,\n unpackedSize,\n files,\n integrity,\n shasum,\n } = await packTarball(manifest, manifestDir, conf)\n\n await run({\n ...runOptions,\n arg0: 'postpack',\n })\n\n await run({\n ...runOptions,\n arg0: 'publish',\n })\n\n const publishMetadata = {\n _id: name,\n name,\n description: manifest.description || '',\n 'dist-tags': {\n [tag]: version,\n },\n versions: {\n [version]: {\n ...manifest,\n _id: `${name}@${version}`,\n _nodeVersion: process.versions.node,\n dist: {\n ...manifest.dist,\n integrity,\n shasum,\n tarball: new URL(`${name}/-/${tarballName}`, registryUrl)\n .href,\n },\n },\n },\n access,\n _attachments: {\n [tarballName]: {\n content_type: 'application/octet-stream',\n data: tarballData.toString('base64'),\n length: tarballData.length,\n },\n },\n }\n\n const rc = new RegistryClient(conf.options)\n const publishUrl = new URL(\n name.startsWith('@') ? name.replace('/', '%2F') : name,\n registryUrl,\n )\n\n if (!dry) {\n let response: CacheEntry\n try {\n response = await rc.request(publishUrl, {\n method: 'PUT',\n headers: {\n 'content-type': 'application/json',\n // These control what type of OTP auth flow is used\n 'npm-auth-type': 'web',\n 'npm-command': 'publish',\n },\n body: JSON.stringify(publishMetadata),\n otp,\n })\n } catch (err) {\n throw error('Failed to publish package', {\n cause: asError(err),\n })\n }\n\n if (response.statusCode !== 200 && response.statusCode !== 201) {\n throw error('Failed to publish package', {\n url: publishUrl,\n response,\n })\n }\n }\n\n await run({\n ...runOptions,\n arg0: 'postpublish',\n })\n\n return {\n id: `${name}@${version}`,\n name,\n version,\n tag,\n access,\n registry: registryUrl.origin,\n integrity,\n shasum,\n size: tarballData.length,\n unpackedSize,\n files,\n }\n}\n"]}