@vltpkg/cli-sdk 1.0.7 → 1.0.8
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.
- package/dist/commands/bugs.js +3 -3
- package/dist/commands/docs.js +3 -3
- package/dist/commands/list.js +4 -0
- package/dist/commands/query.js +4 -0
- package/dist/commands/repo.js +3 -3
- package/dist/commands/uninstall.js +8 -1
- package/dist/index.js +3 -3
- package/dist/mermaid-image-view.js +3 -3
- package/dist/open-url.d.ts +7 -0
- package/dist/open-url.js +16 -0
- package/dist/output.d.ts +20 -0
- package/dist/output.js +26 -1
- package/dist/parse-add-remove-args.js +3 -7
- package/dist/query-auth.d.ts +8 -0
- package/dist/query-auth.js +7 -0
- package/package.json +25 -25
package/dist/commands/bugs.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { error } from '@vltpkg/error-cause';
|
|
2
2
|
import { PackageInfoClient } from '@vltpkg/package-info';
|
|
3
3
|
import { Spec } from '@vltpkg/spec';
|
|
4
|
-
import { urlOpen } from '@vltpkg/url-open';
|
|
5
4
|
import { actual } from '@vltpkg/graph';
|
|
6
5
|
import { Query } from '@vltpkg/query';
|
|
7
6
|
import { SecurityArchive } from '@vltpkg/security-archive';
|
|
7
|
+
import { openUrl } from "../open-url.js";
|
|
8
8
|
import { createHostContextsMap } from "../query-host-contexts.js";
|
|
9
9
|
import { commandUsage } from "../config/usage.js";
|
|
10
10
|
import hostedGitInfo from 'hosted-git-info';
|
|
@@ -138,7 +138,7 @@ export const command = async (conf) => {
|
|
|
138
138
|
if (!result) {
|
|
139
139
|
throw error('Unexpected empty result');
|
|
140
140
|
}
|
|
141
|
-
await
|
|
141
|
+
await openUrl(result.url);
|
|
142
142
|
return result;
|
|
143
143
|
}
|
|
144
144
|
// Multiple results, return the list
|
|
@@ -158,6 +158,6 @@ export const command = async (conf) => {
|
|
|
158
158
|
}
|
|
159
159
|
/* c8 ignore stop */
|
|
160
160
|
// Open the URL
|
|
161
|
-
await
|
|
161
|
+
await openUrl(url);
|
|
162
162
|
return { url, name };
|
|
163
163
|
};
|
package/dist/commands/docs.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { error } from '@vltpkg/error-cause';
|
|
2
2
|
import { PackageInfoClient } from '@vltpkg/package-info';
|
|
3
3
|
import { Spec } from '@vltpkg/spec';
|
|
4
|
-
import { urlOpen } from '@vltpkg/url-open';
|
|
5
4
|
import { actual } from '@vltpkg/graph';
|
|
6
5
|
import { Query } from '@vltpkg/query';
|
|
7
6
|
import { SecurityArchive } from '@vltpkg/security-archive';
|
|
7
|
+
import { openUrl } from "../open-url.js";
|
|
8
8
|
import { createHostContextsMap } from "../query-host-contexts.js";
|
|
9
9
|
import { commandUsage } from "../config/usage.js";
|
|
10
10
|
import hostedGitInfo from 'hosted-git-info';
|
|
@@ -128,7 +128,7 @@ export const command = async (conf) => {
|
|
|
128
128
|
if (!result) {
|
|
129
129
|
throw error('Unexpected empty result');
|
|
130
130
|
}
|
|
131
|
-
await
|
|
131
|
+
await openUrl(result.url);
|
|
132
132
|
return result;
|
|
133
133
|
}
|
|
134
134
|
// Multiple results, return the list
|
|
@@ -148,6 +148,6 @@ export const command = async (conf) => {
|
|
|
148
148
|
}
|
|
149
149
|
/* c8 ignore stop */
|
|
150
150
|
// Open the URL
|
|
151
|
-
await
|
|
151
|
+
await openUrl(url);
|
|
152
152
|
return { url, name };
|
|
153
153
|
};
|
package/dist/commands/list.js
CHANGED
|
@@ -4,6 +4,7 @@ import { SecurityArchive } from '@vltpkg/security-archive';
|
|
|
4
4
|
import { error } from '@vltpkg/error-cause';
|
|
5
5
|
import { commandUsage } from "../config/usage.js";
|
|
6
6
|
import { createHostContextsMap } from "../query-host-contexts.js";
|
|
7
|
+
import { createGetAuthHeader } from "../query-auth.js";
|
|
7
8
|
import { MermaidImageView } from "../mermaid-image-view.js";
|
|
8
9
|
export const needsRegistry = true;
|
|
9
10
|
export const usage = () => commandUsage({
|
|
@@ -104,6 +105,7 @@ export const command = async (conf) => {
|
|
|
104
105
|
const projectQueryString = ':workspace, :project > *';
|
|
105
106
|
const selectImporters = [];
|
|
106
107
|
const hostContexts = await createHostContextsMap(conf);
|
|
108
|
+
const getAuthHeader = createGetAuthHeader(conf);
|
|
107
109
|
const importers = new Set();
|
|
108
110
|
const scopeIDs = [];
|
|
109
111
|
// handle --scope option to add scope nodes as importers
|
|
@@ -123,6 +125,7 @@ export const command = async (conf) => {
|
|
|
123
125
|
importers,
|
|
124
126
|
securityArchive,
|
|
125
127
|
hostContexts,
|
|
128
|
+
getAuthHeader,
|
|
126
129
|
});
|
|
127
130
|
const { nodes: resultNodes } = await scopeQuery.search(scopeQueryString, {
|
|
128
131
|
signal: new AbortController().signal,
|
|
@@ -174,6 +177,7 @@ export const command = async (conf) => {
|
|
|
174
177
|
importers: importers_,
|
|
175
178
|
securityArchive,
|
|
176
179
|
hostContexts,
|
|
180
|
+
getAuthHeader,
|
|
177
181
|
});
|
|
178
182
|
const query = queryString ||
|
|
179
183
|
/* c8 ignore next */
|
package/dist/commands/query.js
CHANGED
|
@@ -6,6 +6,7 @@ import { createDiffFilesProvider } from "../query-diff-files.js";
|
|
|
6
6
|
import { SecurityArchive } from '@vltpkg/security-archive';
|
|
7
7
|
import { commandUsage } from "../config/usage.js";
|
|
8
8
|
import { createHostContextsMap } from "../query-host-contexts.js";
|
|
9
|
+
import { createGetAuthHeader } from "../query-auth.js";
|
|
9
10
|
import { MermaidImageView } from "../mermaid-image-view.js";
|
|
10
11
|
export const needsRegistry = true;
|
|
11
12
|
export const usage = () => commandUsage({
|
|
@@ -130,6 +131,7 @@ export const command = async (conf) => {
|
|
|
130
131
|
const queryString = targetQueryString || positionalQueryString;
|
|
131
132
|
const hostContexts = await createHostContextsMap(conf);
|
|
132
133
|
const diffFiles = createDiffFilesProvider(conf.options.projectRoot);
|
|
134
|
+
const getAuthHeader = createGetAuthHeader(conf);
|
|
133
135
|
const importers = new Set();
|
|
134
136
|
const scopeIDs = [];
|
|
135
137
|
// Handle --scope option to add scope nodes as importers
|
|
@@ -150,6 +152,7 @@ export const command = async (conf) => {
|
|
|
150
152
|
securityArchive,
|
|
151
153
|
hostContexts,
|
|
152
154
|
diffFiles,
|
|
155
|
+
getAuthHeader,
|
|
153
156
|
});
|
|
154
157
|
const { nodes: resultNodes } = await scopeQuery.search(scopeQueryString, {
|
|
155
158
|
signal: new AbortController().signal,
|
|
@@ -214,6 +217,7 @@ export const command = async (conf) => {
|
|
|
214
217
|
securityArchive,
|
|
215
218
|
hostContexts,
|
|
216
219
|
diffFiles,
|
|
220
|
+
getAuthHeader,
|
|
217
221
|
});
|
|
218
222
|
const query = queryString ||
|
|
219
223
|
(graph ? defaultProjectQueryString : defaultLocalScopeQueryString);
|
package/dist/commands/repo.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { error } from '@vltpkg/error-cause';
|
|
2
2
|
import { PackageInfoClient } from '@vltpkg/package-info';
|
|
3
3
|
import { Spec } from '@vltpkg/spec';
|
|
4
|
-
import { urlOpen } from '@vltpkg/url-open';
|
|
5
4
|
import { actual } from '@vltpkg/graph';
|
|
6
5
|
import { Query } from '@vltpkg/query';
|
|
7
6
|
import { SecurityArchive } from '@vltpkg/security-archive';
|
|
7
|
+
import { openUrl } from "../open-url.js";
|
|
8
8
|
import { createHostContextsMap } from "../query-host-contexts.js";
|
|
9
9
|
import { commandUsage } from "../config/usage.js";
|
|
10
10
|
import hostedGitInfo from 'hosted-git-info';
|
|
@@ -132,7 +132,7 @@ export const command = async (conf) => {
|
|
|
132
132
|
if (!result) {
|
|
133
133
|
throw error('Unexpected empty result');
|
|
134
134
|
}
|
|
135
|
-
await
|
|
135
|
+
await openUrl(result.url);
|
|
136
136
|
return result;
|
|
137
137
|
}
|
|
138
138
|
// Multiple results, return the list
|
|
@@ -152,6 +152,6 @@ export const command = async (conf) => {
|
|
|
152
152
|
}
|
|
153
153
|
/* c8 ignore stop */
|
|
154
154
|
// Open the URL
|
|
155
|
-
await
|
|
155
|
+
await openUrl(url);
|
|
156
156
|
return { url, name };
|
|
157
157
|
};
|
|
@@ -18,6 +18,9 @@ export const usage = () => commandUsage({
|
|
|
18
18
|
value: '<name>',
|
|
19
19
|
description: 'Limit uninstall targets to workspace groups.',
|
|
20
20
|
},
|
|
21
|
+
'lockfile-only': {
|
|
22
|
+
description: 'Only update lockfile and package.json files; skip node_modules operations.',
|
|
23
|
+
},
|
|
21
24
|
'allow-scripts': {
|
|
22
25
|
value: '<query>',
|
|
23
26
|
description: 'Filter which packages are allowed to run lifecycle scripts using DSS query syntax.',
|
|
@@ -36,6 +39,10 @@ export const command = async (conf) => {
|
|
|
36
39
|
String(conf.get('allow-scripts'))
|
|
37
40
|
: ':not(*)';
|
|
38
41
|
/* c8 ignore stop */
|
|
39
|
-
const { graph } = await uninstall({
|
|
42
|
+
const { graph } = await uninstall({
|
|
43
|
+
...conf.options,
|
|
44
|
+
allowScripts,
|
|
45
|
+
lockfileOnly: conf.options['lockfile-only'],
|
|
46
|
+
}, remove);
|
|
40
47
|
return { graph };
|
|
41
48
|
};
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { asRootError } from '@vltpkg/output/error';
|
|
|
3
3
|
import { loadPackageJson } from 'package-json-from-dist';
|
|
4
4
|
import { getSortedCliOptions, getSortedKeys, } from "./config/definition.js";
|
|
5
5
|
import { Config } from "./config/index.js";
|
|
6
|
-
import { outputCommand, stderr, stdout } from "./output.js";
|
|
6
|
+
import { flushAndExit, outputCommand, stderr, stdout, } from "./output.js";
|
|
7
7
|
import { indent } from "./print-err.js";
|
|
8
8
|
import { loadCommand } from "./load-command.js";
|
|
9
9
|
const { version } = loadPackageJson(import.meta.filename, process.env.__VLT_INTERNAL_CLI_PACKAGE_JSON);
|
|
@@ -35,7 +35,7 @@ const loadVlt = async (cwd, argv) => {
|
|
|
35
35
|
stderr(indent(validOptions.join('\n'), 4));
|
|
36
36
|
}
|
|
37
37
|
stderr(indent(`Run 'vlt help' for more information about available options.`));
|
|
38
|
-
return
|
|
38
|
+
return flushAndExit(process.exitCode || 1);
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
const run = async () => {
|
|
@@ -64,7 +64,7 @@ const run = async () => {
|
|
|
64
64
|
if (vlt.get('workspace-group')) {
|
|
65
65
|
stderr(indent(`Workspace Group: ${format(vlt.get('workspace-group'))}`));
|
|
66
66
|
}
|
|
67
|
-
return
|
|
67
|
+
return flushAndExit(process.exitCode || 1);
|
|
68
68
|
}
|
|
69
69
|
if (vlt.command === 'registry') {
|
|
70
70
|
const { dispatchRegistry } = await import("./commands/registry.js");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mermaidOutput } from '@vltpkg/graph';
|
|
2
|
-
import {
|
|
2
|
+
import { openUrl } from "./open-url.js";
|
|
3
3
|
import { stderr } from "./output.js";
|
|
4
4
|
import { ViewClass } from "./view.js";
|
|
5
5
|
/**
|
|
@@ -24,13 +24,13 @@ export class MermaidImageView extends ViewClass {
|
|
|
24
24
|
stderr(`Generating PNG image...`);
|
|
25
25
|
const filePath = await renderMermaidToPng(mermaidText);
|
|
26
26
|
stderr(`Image saved to: ${filePath}`);
|
|
27
|
-
await
|
|
27
|
+
await openUrl(filePath);
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
30
30
|
stderr(`Generating SVG image...`);
|
|
31
31
|
const filePath = await renderMermaidToFile(mermaidText);
|
|
32
32
|
stderr(`Image saved to: ${filePath}`);
|
|
33
|
-
await
|
|
33
|
+
await openUrl(filePath);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open a url in the system browser, without failing the command if the
|
|
3
|
+
* opener does. The opener command may exist but still be unable to launch
|
|
4
|
+
* anything, e.g: `xdg-open` on a headless server. The url was already
|
|
5
|
+
* printed, so the user can open it manually.
|
|
6
|
+
*/
|
|
7
|
+
export declare const openUrl: (url: string) => Promise<void>;
|
package/dist/open-url.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { urlOpen } from '@vltpkg/url-open';
|
|
2
|
+
import { stderr } from "./output.js";
|
|
3
|
+
/**
|
|
4
|
+
* Open a url in the system browser, without failing the command if the
|
|
5
|
+
* opener does. The opener command may exist but still be unable to launch
|
|
6
|
+
* anything, e.g: `xdg-open` on a headless server. The url was already
|
|
7
|
+
* printed, so the user can open it manually.
|
|
8
|
+
*/
|
|
9
|
+
export const openUrl = async (url) => {
|
|
10
|
+
try {
|
|
11
|
+
await urlOpen(url);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
stderr(`Could not open a browser. Please open ${url} manually.`);
|
|
15
|
+
}
|
|
16
|
+
};
|
package/dist/output.d.ts
CHANGED
|
@@ -4,6 +4,26 @@ import type { Command } from './index.ts';
|
|
|
4
4
|
import type { View, Views } from './view.ts';
|
|
5
5
|
export declare const stdout: (...args: unknown[]) => void;
|
|
6
6
|
export declare const stderr: (...args: unknown[]) => void;
|
|
7
|
+
/** the part of a stdio stream that {@link flushStream} waits on */
|
|
8
|
+
export type FlushableStream = {
|
|
9
|
+
writableLength: number;
|
|
10
|
+
write: (chunk: string, cb: () => void) => boolean;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Resolve once everything already handed to `stream` has reached the
|
|
14
|
+
* other end. A zero length write is enough: writes complete in order,
|
|
15
|
+
* so its callback cannot run ahead of the ones already queued.
|
|
16
|
+
*/
|
|
17
|
+
export declare const flushStream: (stream: FlushableStream) => Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Exit, but only once stdout and stderr have drained.
|
|
20
|
+
*
|
|
21
|
+
* Writes to a pipe are async, and `process.exit()` throws away whatever
|
|
22
|
+
* is still queued for one. Piped output is exactly what CI gives us, so
|
|
23
|
+
* exiting right after printing crops the output at the 64k pipe buffer,
|
|
24
|
+
* and since the error is printed last, the error is what gets lost.
|
|
25
|
+
*/
|
|
26
|
+
export declare const flushAndExit: (code?: Parameters<typeof process.exit>[0]) => Promise<never>;
|
|
7
27
|
type StyleTextFn = (format: Parameters<typeof utilStyleText>[0], s: string) => string;
|
|
8
28
|
export declare let styleTextStdout: StyleTextFn;
|
|
9
29
|
export declare let styleTextStderr: StyleTextFn;
|
package/dist/output.js
CHANGED
|
@@ -27,6 +27,31 @@ const supportsColor = (stream) => {
|
|
|
27
27
|
export const stdout = (...args) => console.log(...args);
|
|
28
28
|
// eslint-disable-next-line no-console
|
|
29
29
|
export const stderr = (...args) => console.error(...args);
|
|
30
|
+
/**
|
|
31
|
+
* Resolve once everything already handed to `stream` has reached the
|
|
32
|
+
* other end. A zero length write is enough: writes complete in order,
|
|
33
|
+
* so its callback cannot run ahead of the ones already queued.
|
|
34
|
+
*/
|
|
35
|
+
export const flushStream = (stream) => new Promise(res => {
|
|
36
|
+
if (!stream.writableLength)
|
|
37
|
+
return res();
|
|
38
|
+
stream.write('', () => res());
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Exit, but only once stdout and stderr have drained.
|
|
42
|
+
*
|
|
43
|
+
* Writes to a pipe are async, and `process.exit()` throws away whatever
|
|
44
|
+
* is still queued for one. Piped output is exactly what CI gives us, so
|
|
45
|
+
* exiting right after printing crops the output at the 64k pipe buffer,
|
|
46
|
+
* and since the error is printed last, the error is what gets lost.
|
|
47
|
+
*/
|
|
48
|
+
export const flushAndExit = async (code) => {
|
|
49
|
+
await Promise.all([
|
|
50
|
+
flushStream(process.stdout),
|
|
51
|
+
flushStream(process.stderr),
|
|
52
|
+
]);
|
|
53
|
+
return process.exit(code);
|
|
54
|
+
};
|
|
30
55
|
/* c8 ignore start */
|
|
31
56
|
const styleText = (f, s) => utilStyleText(f, s, { validateStream: false });
|
|
32
57
|
/* c8 ignore stop */
|
|
@@ -202,6 +227,6 @@ export const outputCommand = async (cliCommand, conf, { start, vltVersion } = {
|
|
|
202
227
|
...formatOptions,
|
|
203
228
|
colors: stderrColor,
|
|
204
229
|
});
|
|
205
|
-
|
|
230
|
+
await flushAndExit(process.exitCode);
|
|
206
231
|
}
|
|
207
232
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { asDependency } from '@vltpkg/graph';
|
|
1
|
+
import { addKey, asDependency } from '@vltpkg/graph';
|
|
2
2
|
import { joinDepIDTuple, splitDepID } from '@vltpkg/dep-id';
|
|
3
3
|
import { Spec } from '@vltpkg/spec';
|
|
4
4
|
import { isAbsolute, relative, resolve } from 'node:path';
|
|
@@ -85,10 +85,6 @@ export const parseAddArgs = (config, scurry, monorepo) => {
|
|
|
85
85
|
const type = getType(config.values);
|
|
86
86
|
const importers = getWorkspaceImporters(config.values, monorepo);
|
|
87
87
|
const specOptions = config.options;
|
|
88
|
-
// nameless spec definitions will need to use their full
|
|
89
|
-
// stringified spec result instead of their name in order
|
|
90
|
-
// to have an unique key name in the resulting Map
|
|
91
|
-
const getName = (s) => s.name === '(unknown)' ? s.spec : s.name;
|
|
92
88
|
// parses each positional argument into a Spec and
|
|
93
89
|
// adds it to the new dependencies Map
|
|
94
90
|
const parsedItems = [];
|
|
@@ -110,7 +106,7 @@ export const parseAddArgs = (config, scurry, monorepo) => {
|
|
|
110
106
|
const importerDeps = new Map();
|
|
111
107
|
for (const { spec, type: depType } of parsedItems) {
|
|
112
108
|
const rebased = rebaseFileSpec(spec, importerPath, scurryCwd, specOptions, monorepo);
|
|
113
|
-
importerDeps.set(
|
|
109
|
+
importerDeps.set(addKey(rebased), asDependency({ spec: rebased, type: depType }));
|
|
114
110
|
}
|
|
115
111
|
add.set(importer, importerDeps);
|
|
116
112
|
}
|
|
@@ -118,7 +114,7 @@ export const parseAddArgs = (config, scurry, monorepo) => {
|
|
|
118
114
|
else {
|
|
119
115
|
const newDependencies = new Map();
|
|
120
116
|
for (const { spec, type: depType } of parsedItems) {
|
|
121
|
-
newDependencies.set(
|
|
117
|
+
newDependencies.set(addKey(spec), asDependency({ spec, type: depType }));
|
|
122
118
|
}
|
|
123
119
|
for (const importer of importers) {
|
|
124
120
|
add.set(importer, newDependencies);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GetAuthHeader } from '@vltpkg/query';
|
|
2
|
+
import type { LoadedConfig } from './config/index.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Returns a {@link GetAuthHeader} implementation that looks up
|
|
5
|
+
* authorization tokens from the local keychain / env, used by
|
|
6
|
+
* network-reliant query selectors, e.g: `:outdated()`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const createGetAuthHeader: (conf: LoadedConfig) => GetAuthHeader;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { getTokenByURL } from '@vltpkg/registry-client';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a {@link GetAuthHeader} implementation that looks up
|
|
4
|
+
* authorization tokens from the local keychain / env, used by
|
|
5
|
+
* network-reliant query selectors, e.g: `:outdated()`.
|
|
6
|
+
*/
|
|
7
|
+
export const createGetAuthHeader = (conf) => async (url) => getTokenByURL(url, conf.options.identity);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vltpkg/cli-sdk",
|
|
3
3
|
"description": "The source for the vlt CLI",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.8",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/vltpkg/vltpkg.git",
|
|
@@ -14,30 +14,30 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@resvg/resvg-wasm": "^2.6.2",
|
|
17
|
-
"@vltpkg/config": "1.0.
|
|
18
|
-
"@vltpkg/dep-id": "1.0.
|
|
19
|
-
"@vltpkg/dot-prop": "1.0.
|
|
20
|
-
"@vltpkg/error-cause": "1.0.
|
|
21
|
-
"@vltpkg/git": "1.0.
|
|
22
|
-
"@vltpkg/graph": "1.0.
|
|
23
|
-
"@vltpkg/graph-run": "1.0.
|
|
24
|
-
"@vltpkg/init": "1.0.
|
|
25
|
-
"@vltpkg/output": "1.0.
|
|
26
|
-
"@vltpkg/package-info": "1.0.
|
|
27
|
-
"@vltpkg/package-json": "1.0.
|
|
28
|
-
"@vltpkg/promise-spawn": "1.0.
|
|
29
|
-
"@vltpkg/query": "1.0.
|
|
30
|
-
"@vltpkg/registry-client": "1.0.
|
|
31
|
-
"@vltpkg/rollback-remove": "1.0.
|
|
32
|
-
"@vltpkg/run": "1.0.
|
|
33
|
-
"@vltpkg/security-archive": "1.0.
|
|
34
|
-
"@vltpkg/spec": "1.0.
|
|
35
|
-
"@vltpkg/types": "1.0.
|
|
36
|
-
"@vltpkg/url-open": "1.0.
|
|
37
|
-
"@vltpkg/vlt-json": "1.0.
|
|
38
|
-
"@vltpkg/vlx": "1.0.
|
|
39
|
-
"@vltpkg/workspaces": "1.0.
|
|
40
|
-
"@vltpkg/xdg": "1.0.
|
|
17
|
+
"@vltpkg/config": "1.0.8",
|
|
18
|
+
"@vltpkg/dep-id": "1.0.8",
|
|
19
|
+
"@vltpkg/dot-prop": "1.0.8",
|
|
20
|
+
"@vltpkg/error-cause": "1.0.8",
|
|
21
|
+
"@vltpkg/git": "1.0.8",
|
|
22
|
+
"@vltpkg/graph": "1.0.8",
|
|
23
|
+
"@vltpkg/graph-run": "1.0.8",
|
|
24
|
+
"@vltpkg/init": "1.0.8",
|
|
25
|
+
"@vltpkg/output": "1.0.8",
|
|
26
|
+
"@vltpkg/package-info": "1.0.8",
|
|
27
|
+
"@vltpkg/package-json": "1.0.8",
|
|
28
|
+
"@vltpkg/promise-spawn": "1.0.8",
|
|
29
|
+
"@vltpkg/query": "1.0.8",
|
|
30
|
+
"@vltpkg/registry-client": "1.0.8",
|
|
31
|
+
"@vltpkg/rollback-remove": "1.0.8",
|
|
32
|
+
"@vltpkg/run": "1.0.8",
|
|
33
|
+
"@vltpkg/security-archive": "1.0.8",
|
|
34
|
+
"@vltpkg/spec": "1.0.8",
|
|
35
|
+
"@vltpkg/types": "1.0.8",
|
|
36
|
+
"@vltpkg/url-open": "1.0.8",
|
|
37
|
+
"@vltpkg/vlt-json": "1.0.8",
|
|
38
|
+
"@vltpkg/vlx": "1.0.8",
|
|
39
|
+
"@vltpkg/workspaces": "1.0.8",
|
|
40
|
+
"@vltpkg/xdg": "1.0.8",
|
|
41
41
|
"ansi-to-pre": "^1.0.6",
|
|
42
42
|
"beautiful-mermaid": "^1.1.3",
|
|
43
43
|
"chalk": "^5.6.2",
|