@vltpkg/cli-sdk 0.0.0-3 → 0.0.0-30
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/README.md +3 -0
- package/dist/esm/commands/cache.d.ts +65 -0
- package/dist/esm/commands/cache.d.ts.map +1 -0
- package/dist/esm/commands/cache.js +257 -0
- package/dist/esm/commands/cache.js.map +1 -0
- package/dist/esm/commands/ci.d.ts +10 -0
- package/dist/esm/commands/ci.d.ts.map +1 -0
- package/dist/esm/commands/ci.js +29 -0
- package/dist/esm/commands/ci.js.map +1 -0
- package/dist/esm/commands/config.d.ts.map +1 -1
- package/dist/esm/commands/config.js +2 -52
- package/dist/esm/commands/config.js.map +1 -1
- package/dist/esm/commands/exec-cache.d.ts +49 -0
- package/dist/esm/commands/exec-cache.d.ts.map +1 -0
- package/dist/esm/commands/exec-cache.js +134 -0
- package/dist/esm/commands/exec-cache.js.map +1 -0
- package/dist/esm/commands/exec-local.d.ts +6 -0
- package/dist/esm/commands/exec-local.d.ts.map +1 -0
- package/dist/esm/commands/exec-local.js +24 -0
- package/dist/esm/commands/exec-local.js.map +1 -0
- package/dist/esm/commands/exec.d.ts +4 -0
- package/dist/esm/commands/exec.d.ts.map +1 -1
- package/dist/esm/commands/exec.js +69 -10
- package/dist/esm/commands/exec.js.map +1 -1
- package/dist/esm/commands/help.d.ts +1 -1
- package/dist/esm/commands/help.d.ts.map +1 -1
- package/dist/esm/commands/help.js +25 -3
- package/dist/esm/commands/help.js.map +1 -1
- package/dist/esm/commands/init.d.ts +4 -5
- package/dist/esm/commands/init.d.ts.map +1 -1
- package/dist/esm/commands/init.js +95 -9
- package/dist/esm/commands/init.js.map +1 -1
- package/dist/esm/commands/install/reporter.d.ts +1 -1
- package/dist/esm/commands/install/reporter.d.ts.map +1 -1
- package/dist/esm/commands/install/reporter.js +10 -11
- package/dist/esm/commands/install/reporter.js.map +1 -1
- package/dist/esm/commands/install.d.ts +5 -2
- package/dist/esm/commands/install.d.ts.map +1 -1
- package/dist/esm/commands/install.js +7 -1
- package/dist/esm/commands/install.js.map +1 -1
- package/dist/esm/commands/list.d.ts +1 -1
- package/dist/esm/commands/list.d.ts.map +1 -1
- package/dist/esm/commands/list.js +150 -42
- package/dist/esm/commands/list.js.map +1 -1
- package/dist/esm/commands/pack.d.ts +32 -0
- package/dist/esm/commands/pack.d.ts.map +1 -0
- package/dist/esm/commands/pack.js +147 -0
- package/dist/esm/commands/pack.js.map +1 -0
- package/dist/esm/commands/pkg.d.ts +2 -3
- package/dist/esm/commands/pkg.d.ts.map +1 -1
- package/dist/esm/commands/pkg.js +123 -38
- package/dist/esm/commands/pkg.js.map +1 -1
- package/dist/esm/commands/publish.d.ts +22 -0
- package/dist/esm/commands/publish.d.ts.map +1 -0
- package/dist/esm/commands/publish.js +239 -0
- package/dist/esm/commands/publish.js.map +1 -0
- package/dist/esm/commands/query.d.ts +1 -1
- package/dist/esm/commands/query.d.ts.map +1 -1
- package/dist/esm/commands/query.js +171 -32
- package/dist/esm/commands/query.js.map +1 -1
- package/dist/esm/commands/run-exec.d.ts +1 -0
- package/dist/esm/commands/run-exec.d.ts.map +1 -1
- package/dist/esm/commands/run-exec.js +1 -0
- package/dist/esm/commands/run-exec.js.map +1 -1
- package/dist/esm/commands/run.d.ts +1 -0
- package/dist/esm/commands/run.d.ts.map +1 -1
- package/dist/esm/commands/run.js +13 -16
- package/dist/esm/commands/run.js.map +1 -1
- package/dist/esm/commands/serve.d.ts +14 -0
- package/dist/esm/commands/serve.d.ts.map +1 -0
- package/dist/esm/commands/serve.js +97 -0
- package/dist/esm/commands/serve.js.map +1 -0
- package/dist/esm/commands/uninstall.d.ts +7 -1
- package/dist/esm/commands/uninstall.d.ts.map +1 -1
- package/dist/esm/commands/uninstall.js +7 -1
- package/dist/esm/commands/uninstall.js.map +1 -1
- package/dist/esm/commands/update.d.ts +10 -0
- package/dist/esm/commands/update.d.ts.map +1 -0
- package/dist/esm/commands/update.js +25 -0
- package/dist/esm/commands/update.js.map +1 -0
- package/dist/esm/commands/version.d.ts +26 -0
- package/dist/esm/commands/version.d.ts.map +1 -0
- package/dist/esm/commands/version.js +226 -0
- package/dist/esm/commands/version.js.map +1 -0
- package/dist/esm/commands/whoami.d.ts +4 -2
- package/dist/esm/commands/whoami.d.ts.map +1 -1
- package/dist/esm/commands/whoami.js +1 -1
- package/dist/esm/commands/whoami.js.map +1 -1
- package/dist/esm/config/definition.d.ts +102 -8
- package/dist/esm/config/definition.d.ts.map +1 -1
- package/dist/esm/config/definition.js +174 -25
- package/dist/esm/config/definition.js.map +1 -1
- package/dist/esm/config/index.d.ts +46 -40
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/index.js +126 -176
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/merge.d.ts +3 -1
- package/dist/esm/config/merge.d.ts.map +1 -1
- package/dist/esm/config/merge.js +11 -6
- package/dist/esm/config/merge.js.map +1 -1
- package/dist/esm/config/usage.d.ts +3 -2
- package/dist/esm/config/usage.d.ts.map +1 -1
- package/dist/esm/config/usage.js.map +1 -1
- package/dist/esm/exec-command.d.ts +33 -14
- package/dist/esm/exec-command.d.ts.map +1 -1
- package/dist/esm/exec-command.js +214 -65
- package/dist/esm/exec-command.js.map +1 -1
- package/dist/esm/index.d.ts +1 -14
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +46 -20
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/load-command.d.ts +16 -0
- package/dist/esm/load-command.d.ts.map +1 -0
- package/dist/esm/load-command.js +21 -0
- package/dist/esm/load-command.js.map +1 -0
- package/dist/esm/output.d.ts +6 -10
- package/dist/esm/output.d.ts.map +1 -1
- package/dist/esm/output.js +63 -33
- package/dist/esm/output.js.map +1 -1
- package/dist/esm/pack-tarball.d.ts +22 -0
- package/dist/esm/pack-tarball.d.ts.map +1 -0
- package/dist/esm/pack-tarball.js +247 -0
- package/dist/esm/pack-tarball.js.map +1 -0
- package/dist/esm/parse-add-remove-args.d.ts +1 -1
- package/dist/esm/parse-add-remove-args.d.ts.map +1 -1
- package/dist/esm/parse-add-remove-args.js +1 -1
- package/dist/esm/parse-add-remove-args.js.map +1 -1
- package/dist/esm/print-err.d.ts +12 -1
- package/dist/esm/print-err.d.ts.map +1 -1
- package/dist/esm/print-err.js +157 -26
- package/dist/esm/print-err.js.map +1 -1
- package/dist/esm/query-host-contexts.d.ts +16 -0
- package/dist/esm/query-host-contexts.d.ts.map +1 -0
- package/dist/esm/query-host-contexts.js +135 -0
- package/dist/esm/query-host-contexts.js.map +1 -0
- package/dist/esm/start-gui.d.ts +7 -33
- package/dist/esm/start-gui.d.ts.map +1 -1
- package/dist/esm/start-gui.js +40 -347
- package/dist/esm/start-gui.js.map +1 -1
- package/dist/esm/view.d.ts +2 -3
- package/dist/esm/view.d.ts.map +1 -1
- package/dist/esm/view.js +1 -1
- package/dist/esm/view.js.map +1 -1
- package/package.json +73 -45
- package/dist/esm/commands/gui.d.ts +0 -6
- package/dist/esm/commands/gui.d.ts.map +0 -1
- package/dist/esm/commands/gui.js +0 -14
- package/dist/esm/commands/gui.js.map +0 -1
- package/dist/esm/commands/install-exec.d.ts +0 -4
- package/dist/esm/commands/install-exec.d.ts.map +0 -1
- package/dist/esm/commands/install-exec.js +0 -13
- package/dist/esm/commands/install-exec.js.map +0 -1
- package/dist/esm/ignored-homedir-folder-names.d.ts +0 -7
- package/dist/esm/ignored-homedir-folder-names.d.ts.map +0 -1
- package/dist/esm/ignored-homedir-folder-names.js +0 -35
- package/dist/esm/ignored-homedir-folder-names.js.map +0 -1
- package/dist/esm/project-info.d.ts +0 -32
- package/dist/esm/project-info.d.ts.map +0 -1
- package/dist/esm/project-info.js +0 -90
- package/dist/esm/project-info.js.map +0 -1
- package/dist/esm/read-project-folders.d.ts +0 -27
- package/dist/esm/read-project-folders.d.ts.map +0 -1
- package/dist/esm/read-project-folders.js +0 -66
- package/dist/esm/read-project-folders.js.map +0 -1
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { create as tarCreate, list as tarList } from 'tar';
|
|
2
|
+
import { minimatch } from 'minimatch';
|
|
3
|
+
import { error } from '@vltpkg/error-cause';
|
|
4
|
+
import * as ssri from 'ssri';
|
|
5
|
+
import assert from 'node:assert';
|
|
6
|
+
import { existsSync, statSync } from 'node:fs';
|
|
7
|
+
import { Spec } from '@vltpkg/spec';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
/**
|
|
10
|
+
* Replace workspace: and catalog: specs with actual versions
|
|
11
|
+
* @param {NormalizedManifest} manifest_ - The manifest to process
|
|
12
|
+
* @param {LoadedConfig} config - The loaded configuration containing project root, monorepo, and catalog data
|
|
13
|
+
* @returns {NormalizedManifest} The manifest with replaced specs
|
|
14
|
+
*/
|
|
15
|
+
const replaceWorkspaceAndCatalogSpecs = (manifest_, config) => {
|
|
16
|
+
// Create a deep copy of the manifest to avoid modifying the original
|
|
17
|
+
const manifest = structuredClone(manifest_);
|
|
18
|
+
// Get workspace and catalog configuration from config
|
|
19
|
+
const { monorepo, catalog = {}, catalogs = {} } = config.options;
|
|
20
|
+
// Process dependency types
|
|
21
|
+
const depTypes = [
|
|
22
|
+
'dependencies',
|
|
23
|
+
'devDependencies',
|
|
24
|
+
'optionalDependencies',
|
|
25
|
+
'peerDependencies',
|
|
26
|
+
];
|
|
27
|
+
for (const depType of depTypes) {
|
|
28
|
+
const deps = manifest[depType];
|
|
29
|
+
/* c8 ignore next */
|
|
30
|
+
if (!deps || typeof deps !== 'object')
|
|
31
|
+
continue;
|
|
32
|
+
const depsObj = deps;
|
|
33
|
+
for (const [depName, depSpec] of Object.entries(depsObj)) {
|
|
34
|
+
/* c8 ignore next */
|
|
35
|
+
if (typeof depSpec !== 'string')
|
|
36
|
+
continue;
|
|
37
|
+
const spec = Spec.parse(`${depName}@${depSpec}`, {
|
|
38
|
+
catalog,
|
|
39
|
+
catalogs,
|
|
40
|
+
});
|
|
41
|
+
switch (spec.type) {
|
|
42
|
+
case 'workspace': {
|
|
43
|
+
assert(monorepo, error(`No workspace configuration found for ${depName}`, {
|
|
44
|
+
found: depName,
|
|
45
|
+
}));
|
|
46
|
+
const workspaceName = spec.workspace;
|
|
47
|
+
assert(workspaceName, error(`No workspace name found for ${depName}`, {
|
|
48
|
+
found: depName,
|
|
49
|
+
}));
|
|
50
|
+
const workspace = monorepo.get(workspaceName);
|
|
51
|
+
assert(workspace, error(`Workspace '${workspaceName}' not found`, {
|
|
52
|
+
found: workspaceName,
|
|
53
|
+
validOptions: Array.from(monorepo.keys()),
|
|
54
|
+
}));
|
|
55
|
+
const actualVersion = workspace.manifest.version;
|
|
56
|
+
assert(actualVersion, error(`No version found for workspace '${workspaceName}'`, {
|
|
57
|
+
found: workspaceName,
|
|
58
|
+
wanted: 'package version',
|
|
59
|
+
}));
|
|
60
|
+
depsObj[depName] = actualVersion;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case 'catalog': {
|
|
64
|
+
const catalogName = spec.catalog || '';
|
|
65
|
+
const targetCatalog = catalogName ? catalogs[catalogName] : catalog;
|
|
66
|
+
assert(targetCatalog, error(`Catalog '${catalogName}' not found`, {
|
|
67
|
+
found: catalogName,
|
|
68
|
+
validOptions: Object.keys(catalogs),
|
|
69
|
+
}));
|
|
70
|
+
const actualVersion = targetCatalog[depName];
|
|
71
|
+
assert(actualVersion, error(`Package '${depName}' not found in catalog '${catalogName || 'default'}'`, {
|
|
72
|
+
found: depName,
|
|
73
|
+
validOptions: Object.keys(targetCatalog),
|
|
74
|
+
}));
|
|
75
|
+
depsObj[depName] = actualVersion;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return manifest;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Create a tarball from a package directory
|
|
85
|
+
* @param {NormalizedManifest} manifest - The manifest of the package to pack
|
|
86
|
+
* @param {string} dir - The directory containing the package to pack
|
|
87
|
+
* @param {LoadedConfig} [config] - The loaded configuration (for workspace/catalog resolution)
|
|
88
|
+
* @returns {Promise<PackTarballResult>} The manifest, filename, and tarball data (unless dry run)
|
|
89
|
+
*/
|
|
90
|
+
export const packTarball = async (manifest, dir, config) => {
|
|
91
|
+
let packDir = dir;
|
|
92
|
+
// Check if publishDirectory is configured
|
|
93
|
+
const publishDirectory = config.get('publish-directory');
|
|
94
|
+
if (publishDirectory) {
|
|
95
|
+
// Validate that the publish directory exists and is a directory
|
|
96
|
+
assert(existsSync(publishDirectory), error(`Publish directory does not exist: ${publishDirectory}`, {
|
|
97
|
+
found: publishDirectory,
|
|
98
|
+
}));
|
|
99
|
+
assert(statSync(publishDirectory).isDirectory(), error(`Publish directory is not a directory: ${publishDirectory}`, {
|
|
100
|
+
found: publishDirectory,
|
|
101
|
+
wanted: 'directory',
|
|
102
|
+
}));
|
|
103
|
+
if (existsSync(join(publishDirectory, 'package.json'))) {
|
|
104
|
+
manifest = config.options.packageJson.read(publishDirectory);
|
|
105
|
+
}
|
|
106
|
+
packDir = publishDirectory;
|
|
107
|
+
}
|
|
108
|
+
assert(manifest.name && manifest.version, error('Package must have a name and version'));
|
|
109
|
+
const processedManifest = replaceWorkspaceAndCatalogSpecs(manifest, config);
|
|
110
|
+
const filename = `${manifest.name.replace('@', '').replace('/', '-')}-${manifest.version}.tgz`;
|
|
111
|
+
const tarballName = `${manifest.name}-${manifest.version}.tgz`;
|
|
112
|
+
try {
|
|
113
|
+
config.options.packageJson.write(packDir, processedManifest);
|
|
114
|
+
const tarballData = await tarCreate({
|
|
115
|
+
cwd: packDir,
|
|
116
|
+
gzip: true,
|
|
117
|
+
portable: true,
|
|
118
|
+
prefix: 'package/',
|
|
119
|
+
filter: (path) => {
|
|
120
|
+
// Normalize path - remove leading './'
|
|
121
|
+
const normalizedPath = path.replace(/^\.\//, '');
|
|
122
|
+
// Always include root directory
|
|
123
|
+
if (path === '.' || normalizedPath === '') {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
// Always exclude certain files/directories
|
|
127
|
+
const alwaysExcludePatterns = [
|
|
128
|
+
/^\.?\/?\.git(\/|$)/,
|
|
129
|
+
/^\.?\/?node_modules(\/|$)/,
|
|
130
|
+
/^\.?\/?\.nyc_output(\/|$)/,
|
|
131
|
+
/^\.?\/?coverage(\/|$)/,
|
|
132
|
+
/^\.?\/?\.DS_Store$/,
|
|
133
|
+
/^\.?\/?\.npmrc$/,
|
|
134
|
+
/^\.?\/?package-lock\.json$/,
|
|
135
|
+
/^\.?\/?yarn\.lock$/,
|
|
136
|
+
/^\.?\/?pnpm-lock\.yaml$/,
|
|
137
|
+
/^\.?\/?bun\.lockb$/,
|
|
138
|
+
/^\.?\/?bun\.lock$/,
|
|
139
|
+
/^\.?\/?vlt-lock\.json$/,
|
|
140
|
+
/~$/,
|
|
141
|
+
/\.swp$/,
|
|
142
|
+
];
|
|
143
|
+
if (alwaysExcludePatterns.some(pattern => pattern.test(normalizedPath))) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
// Always include certain files
|
|
147
|
+
const alwaysIncludePatterns = [
|
|
148
|
+
/^README(\..*)?$/i,
|
|
149
|
+
/^CHANGELOG(\..*)?$/i,
|
|
150
|
+
/^HISTORY(\..*)?$/i,
|
|
151
|
+
/^LICENSE(\..*)?$/i,
|
|
152
|
+
/^LICENCE(\..*)?$/i,
|
|
153
|
+
];
|
|
154
|
+
if (alwaysIncludePatterns.some(pattern => pattern.test(normalizedPath))) {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
// Always include package.json
|
|
158
|
+
if (normalizedPath === 'package.json') {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
// If files field is specified in package.json, use it for inclusion
|
|
162
|
+
const manifestWithFiles = manifest;
|
|
163
|
+
if (manifestWithFiles.files &&
|
|
164
|
+
Array.isArray(manifestWithFiles.files)) {
|
|
165
|
+
// Empty files array means exclude everything except always-included files
|
|
166
|
+
if (manifestWithFiles.files.length === 0) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
return manifestWithFiles.files.some((pattern) => {
|
|
170
|
+
if (pattern.endsWith('/')) {
|
|
171
|
+
const dirName = pattern.slice(0, -1);
|
|
172
|
+
const globPattern = pattern.replace(/\/$/, '/**');
|
|
173
|
+
const matchesDir = normalizedPath === dirName;
|
|
174
|
+
const matchesContents = minimatch(normalizedPath, globPattern, {
|
|
175
|
+
dot: true,
|
|
176
|
+
});
|
|
177
|
+
return matchesDir || matchesContents;
|
|
178
|
+
}
|
|
179
|
+
// File pattern: check direct match and if this path is a directory that could contain the pattern
|
|
180
|
+
const directMatch = minimatch(normalizedPath, pattern, {
|
|
181
|
+
dot: true,
|
|
182
|
+
});
|
|
183
|
+
// Check if this path is a directory that could contain the pattern
|
|
184
|
+
const isParentDir = pattern.includes('/') &&
|
|
185
|
+
pattern.startsWith(normalizedPath + '/');
|
|
186
|
+
return directMatch || isParentDir;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
// Default behavior when no files field - exclude common development files
|
|
190
|
+
const defaultExcludePatterns = [
|
|
191
|
+
/^\.?\/?\.vscode(\/|$)/,
|
|
192
|
+
/^\.?\/?\.idea(\/|$)/,
|
|
193
|
+
/^\.?\/?\.gitignore$/,
|
|
194
|
+
/^\.?\/?\.npmignore$/,
|
|
195
|
+
/^\.?\/?\.editorconfig$/,
|
|
196
|
+
];
|
|
197
|
+
return !defaultExcludePatterns.some(pattern => pattern.test(normalizedPath));
|
|
198
|
+
},
|
|
199
|
+
}, ['.']).concat();
|
|
200
|
+
let unpackedSize = 0;
|
|
201
|
+
const files = [];
|
|
202
|
+
await new Promise((resolve, reject) => {
|
|
203
|
+
const stream = tarList({
|
|
204
|
+
onentry: entry => {
|
|
205
|
+
if (entry.type === 'File') {
|
|
206
|
+
unpackedSize += entry.size;
|
|
207
|
+
// Remove the package/ prefix for cleaner file listing
|
|
208
|
+
const cleanPath = entry.path.replace(/^[^/]+\//, '');
|
|
209
|
+
if (cleanPath) {
|
|
210
|
+
// Skip empty paths
|
|
211
|
+
files.push(cleanPath);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
stream
|
|
217
|
+
.on('end', () => resolve())
|
|
218
|
+
.on('error', reject)
|
|
219
|
+
.write(tarballData);
|
|
220
|
+
stream.end();
|
|
221
|
+
});
|
|
222
|
+
const integrityMap = ssri.fromData(tarballData, {
|
|
223
|
+
algorithms: [...new Set(['sha1', 'sha512'])],
|
|
224
|
+
});
|
|
225
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
226
|
+
const integrity = integrityMap.sha512?.[0]?.toString();
|
|
227
|
+
// @ts-expect-error -- types from DT are missing hexDigest
|
|
228
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
229
|
+
const shasum = integrityMap.sha1?.[0]?.hexDigest();
|
|
230
|
+
return {
|
|
231
|
+
name: manifest.name,
|
|
232
|
+
version: manifest.version,
|
|
233
|
+
filename,
|
|
234
|
+
tarballName,
|
|
235
|
+
tarballData,
|
|
236
|
+
unpackedSize,
|
|
237
|
+
files,
|
|
238
|
+
integrity,
|
|
239
|
+
shasum,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
finally {
|
|
243
|
+
// Restore the original package.json to the pack directory
|
|
244
|
+
config.options.packageJson.write(packDir, manifest);
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
//# sourceMappingURL=pack-tarball.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-tarball.js","sourceRoot":"","sources":["../../src/pack-tarball.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NormalizedManifest } from '@vltpkg/types'\nimport { create as tarCreate, list as tarList } from 'tar'\nimport { minimatch } from 'minimatch'\nimport { error } from '@vltpkg/error-cause'\nimport * as ssri from 'ssri'\nimport assert from 'node:assert'\nimport { existsSync, statSync } from 'node:fs'\nimport { Spec } from '@vltpkg/spec'\nimport type { LoadedConfig } from './config/index.ts'\nimport { join } from 'node:path'\n\nexport type PackTarballResult = {\n name: string\n version: string\n filename: string\n tarballName: string\n tarballData: Buffer\n unpackedSize: number\n files: string[]\n integrity?: string\n shasum?: string\n}\n\n/**\n * Replace workspace: and catalog: specs with actual versions\n * @param {NormalizedManifest} manifest_ - The manifest to process\n * @param {LoadedConfig} config - The loaded configuration containing project root, monorepo, and catalog data\n * @returns {NormalizedManifest} The manifest with replaced specs\n */\nconst replaceWorkspaceAndCatalogSpecs = (\n manifest_: NormalizedManifest,\n config: LoadedConfig,\n): NormalizedManifest => {\n // Create a deep copy of the manifest to avoid modifying the original\n const manifest = structuredClone(manifest_)\n\n // Get workspace and catalog configuration from config\n const { monorepo, catalog = {}, catalogs = {} } = config.options\n\n // Process dependency types\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'optionalDependencies',\n 'peerDependencies',\n ] as const\n\n for (const depType of depTypes) {\n const deps = manifest[depType]\n /* c8 ignore next */\n if (!deps || typeof deps !== 'object') continue\n\n const depsObj = deps as Record<string, unknown>\n for (const [depName, depSpec] of Object.entries(depsObj)) {\n /* c8 ignore next */\n if (typeof depSpec !== 'string') continue\n\n const spec = Spec.parse(`${depName}@${depSpec}`, {\n catalog,\n catalogs,\n })\n\n switch (spec.type) {\n case 'workspace': {\n assert(\n monorepo,\n error(`No workspace configuration found for ${depName}`, {\n found: depName,\n }),\n )\n\n const workspaceName = spec.workspace\n assert(\n workspaceName,\n error(`No workspace name found for ${depName}`, {\n found: depName,\n }),\n )\n\n const workspace = monorepo.get(workspaceName)\n assert(\n workspace,\n error(`Workspace '${workspaceName}' not found`, {\n found: workspaceName,\n validOptions: Array.from(monorepo.keys()),\n }),\n )\n\n const actualVersion = workspace.manifest.version\n assert(\n actualVersion,\n error(\n `No version found for workspace '${workspaceName}'`,\n {\n found: workspaceName,\n wanted: 'package version',\n },\n ),\n )\n\n depsObj[depName] = actualVersion\n\n break\n }\n\n case 'catalog': {\n const catalogName = spec.catalog || ''\n const targetCatalog =\n catalogName ? catalogs[catalogName] : catalog\n assert(\n targetCatalog,\n error(`Catalog '${catalogName}' not found`, {\n found: catalogName,\n validOptions: Object.keys(catalogs),\n }),\n )\n\n const actualVersion = targetCatalog[depName]\n assert(\n actualVersion,\n error(\n `Package '${depName}' not found in catalog '${catalogName || 'default'}'`,\n {\n found: depName,\n validOptions: Object.keys(targetCatalog),\n },\n ),\n )\n\n depsObj[depName] = actualVersion\n\n break\n }\n }\n }\n }\n\n return manifest\n}\n\n/**\n * Create a tarball from a package directory\n * @param {NormalizedManifest} manifest - The manifest of the package to pack\n * @param {string} dir - The directory containing the package to pack\n * @param {LoadedConfig} [config] - The loaded configuration (for workspace/catalog resolution)\n * @returns {Promise<PackTarballResult>} The manifest, filename, and tarball data (unless dry run)\n */\nexport const packTarball = async (\n manifest: NormalizedManifest,\n dir: string,\n config: LoadedConfig,\n): Promise<PackTarballResult> => {\n let packDir = dir\n\n // Check if publishDirectory is configured\n const publishDirectory = config.get('publish-directory')\n if (publishDirectory) {\n // Validate that the publish directory exists and is a directory\n assert(\n existsSync(publishDirectory),\n error(`Publish directory does not exist: ${publishDirectory}`, {\n found: publishDirectory,\n }),\n )\n assert(\n statSync(publishDirectory).isDirectory(),\n error(\n `Publish directory is not a directory: ${publishDirectory}`,\n {\n found: publishDirectory,\n wanted: 'directory',\n },\n ),\n )\n if (existsSync(join(publishDirectory, 'package.json'))) {\n manifest = config.options.packageJson.read(publishDirectory)\n }\n packDir = publishDirectory\n }\n\n assert(\n manifest.name && manifest.version,\n error('Package must have a name and version'),\n )\n\n const processedManifest = replaceWorkspaceAndCatalogSpecs(\n manifest,\n config,\n )\n\n const filename = `${manifest.name.replace('@', '').replace('/', '-')}-${manifest.version}.tgz`\n const tarballName = `${manifest.name}-${manifest.version}.tgz`\n\n try {\n config.options.packageJson.write(packDir, processedManifest)\n\n const tarballData = await tarCreate(\n {\n cwd: packDir,\n gzip: true,\n portable: true,\n prefix: 'package/',\n filter: (path: string) => {\n // Normalize path - remove leading './'\n const normalizedPath = path.replace(/^\\.\\//, '')\n\n // Always include root directory\n if (path === '.' || normalizedPath === '') {\n return true\n }\n\n // Always exclude certain files/directories\n const alwaysExcludePatterns = [\n /^\\.?\\/?\\.git(\\/|$)/,\n /^\\.?\\/?node_modules(\\/|$)/,\n /^\\.?\\/?\\.nyc_output(\\/|$)/,\n /^\\.?\\/?coverage(\\/|$)/,\n /^\\.?\\/?\\.DS_Store$/,\n /^\\.?\\/?\\.npmrc$/,\n /^\\.?\\/?package-lock\\.json$/,\n /^\\.?\\/?yarn\\.lock$/,\n /^\\.?\\/?pnpm-lock\\.yaml$/,\n /^\\.?\\/?bun\\.lockb$/,\n /^\\.?\\/?bun\\.lock$/,\n /^\\.?\\/?vlt-lock\\.json$/,\n /~$/,\n /\\.swp$/,\n ]\n\n if (\n alwaysExcludePatterns.some(pattern =>\n pattern.test(normalizedPath),\n )\n ) {\n return false\n }\n\n // Always include certain files\n const alwaysIncludePatterns = [\n /^README(\\..*)?$/i,\n /^CHANGELOG(\\..*)?$/i,\n /^HISTORY(\\..*)?$/i,\n /^LICENSE(\\..*)?$/i,\n /^LICENCE(\\..*)?$/i,\n ]\n\n if (\n alwaysIncludePatterns.some(pattern =>\n pattern.test(normalizedPath),\n )\n ) {\n return true\n }\n\n // Always include package.json\n if (normalizedPath === 'package.json') {\n return true\n }\n\n // If files field is specified in package.json, use it for inclusion\n const manifestWithFiles = manifest as NormalizedManifest & {\n files?: string[]\n }\n if (\n manifestWithFiles.files &&\n Array.isArray(manifestWithFiles.files)\n ) {\n // Empty files array means exclude everything except always-included files\n if (manifestWithFiles.files.length === 0) {\n return false\n }\n return manifestWithFiles.files.some((pattern: string) => {\n if (pattern.endsWith('/')) {\n const dirName = pattern.slice(0, -1)\n const globPattern = pattern.replace(/\\/$/, '/**')\n const matchesDir = normalizedPath === dirName\n const matchesContents = minimatch(\n normalizedPath,\n globPattern,\n {\n dot: true,\n },\n )\n return matchesDir || matchesContents\n }\n\n // File pattern: check direct match and if this path is a directory that could contain the pattern\n const directMatch = minimatch(normalizedPath, pattern, {\n dot: true,\n })\n // Check if this path is a directory that could contain the pattern\n const isParentDir =\n pattern.includes('/') &&\n pattern.startsWith(normalizedPath + '/')\n return directMatch || isParentDir\n })\n }\n\n // Default behavior when no files field - exclude common development files\n const defaultExcludePatterns = [\n /^\\.?\\/?\\.vscode(\\/|$)/,\n /^\\.?\\/?\\.idea(\\/|$)/,\n /^\\.?\\/?\\.gitignore$/,\n /^\\.?\\/?\\.npmignore$/,\n /^\\.?\\/?\\.editorconfig$/,\n ]\n\n return !defaultExcludePatterns.some(pattern =>\n pattern.test(normalizedPath),\n )\n },\n },\n ['.'],\n ).concat()\n\n let unpackedSize = 0\n const files: string[] = []\n await new Promise<void>((resolve, reject) => {\n const stream = tarList({\n onentry: entry => {\n if (entry.type === 'File') {\n unpackedSize += entry.size\n // Remove the package/ prefix for cleaner file listing\n const cleanPath = entry.path.replace(/^[^/]+\\//, '')\n if (cleanPath) {\n // Skip empty paths\n files.push(cleanPath)\n }\n }\n },\n })\n stream\n .on('end', () => resolve())\n .on('error', reject)\n .write(tarballData)\n stream.end()\n })\n\n const integrityMap = ssri.fromData(tarballData, {\n algorithms: [...new Set(['sha1', 'sha512'])],\n })\n\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const integrity = integrityMap.sha512?.[0]?.toString()\n // @ts-expect-error -- types from DT are missing hexDigest\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n const shasum = integrityMap.sha1?.[0]?.hexDigest() as\n | string\n | undefined\n\n return {\n name: manifest.name,\n version: manifest.version,\n filename,\n tarballName,\n tarballData,\n unpackedSize,\n files,\n integrity,\n shasum,\n }\n } finally {\n // Restore the original package.json to the pack directory\n config.options.packageJson.write(packDir, manifest)\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AddImportersDependenciesMap, RemoveImportersDependenciesMap } from '@vltpkg/graph';
|
|
2
|
-
import type { LoadedConfig } from './config/index.ts';
|
|
3
2
|
import type { Monorepo } from '@vltpkg/workspaces';
|
|
3
|
+
import type { LoadedConfig } from './config/index.ts';
|
|
4
4
|
export type ParsedAddArgs = {
|
|
5
5
|
add: AddImportersDependenciesMap;
|
|
6
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-add-remove-args.d.ts","sourceRoot":"","sources":["../../src/parse-add-remove-args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-add-remove-args.d.ts","sourceRoot":"","sources":["../../src/parse-add-remove-args.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAE3B,8BAA8B,EAC/B,MAAM,eAAe,CAAA;AAKtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,2BAA2B,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,8BAA8B,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B,CAAA;AAqDD,eAAO,MAAM,YAAY,WACf,YAAY,aACT,QAAQ,KAClB,aA4BF,CAAA;AAED,eAAO,MAAM,eAAe,WAClB,YAAY,aACT,QAAQ,KAClB,gBAaF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-add-remove-args.js","sourceRoot":"","sources":["../../src/parse-add-remove-args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-add-remove-args.js","sourceRoot":"","sources":["../../src/parse-add-remove-args.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DepID } from '@vltpkg/dep-id'\nimport { joinDepIDTuple } from '@vltpkg/dep-id'\nimport type {\n AddImportersDependenciesMap,\n Dependency,\n RemoveImportersDependenciesMap,\n} from '@vltpkg/graph'\nimport { asDependency } from '@vltpkg/graph'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport { Spec } from '@vltpkg/spec'\nimport type { DependencySaveType } from '@vltpkg/types'\nimport type { Monorepo } from '@vltpkg/workspaces'\nimport type { LoadedConfig } from './config/index.ts'\n\nexport type ParsedAddArgs = {\n add: AddImportersDependenciesMap\n}\n\nexport type ParsedRemoveArgs = {\n remove: RemoveImportersDependenciesMap\n}\n\nexport type SaveTypes = {\n 'save-dev'?: boolean\n 'save-optional'?: boolean\n 'save-peer'?: boolean\n 'save-prod'?: boolean\n}\n\nexport type WorkspaceTypes = {\n workspace?: string[]\n 'workspace-group'?: string[]\n}\n\nconst rootDepID = joinDepIDTuple(['file', '.'])\n\n/**\n * Get the list of importers that are currently selected\n * in {@link WorkspaceTypes}.\n */\nconst getImporters = (\n opts: WorkspaceTypes,\n monorepo?: Monorepo,\n): Set<DepID> => {\n const res = new Set<DepID>()\n\n // collects DepID references to any selected workspace\n if (monorepo) {\n for (const ws of monorepo.filter(opts)) {\n res.add(ws.id)\n }\n }\n\n // if no references were found, default behavior is to point to project root\n if (!res.size) {\n res.add(rootDepID)\n }\n\n return res\n}\n\nconst getType = (opts: SaveTypes): DependencySaveType =>\n opts['save-prod'] ? 'prod'\n : opts['save-dev'] ? 'dev'\n : opts['save-peer'] ?\n opts['save-optional'] ?\n 'peerOptional'\n : 'peer'\n : opts['save-optional'] ? 'optional'\n : 'implicit'\n\nclass AddImportersDependenciesMapImpl\n extends Map\n implements AddImportersDependenciesMap\n{\n modifiedDependencies = false\n}\n\nclass RemoveImportersDependenciesMapImpl\n extends Map\n implements RemoveImportersDependenciesMap\n{\n modifiedDependencies = false\n}\n\nexport const parseAddArgs = (\n config: LoadedConfig,\n monorepo?: Monorepo,\n): ParsedAddArgs => {\n const add: AddImportersDependenciesMap =\n new AddImportersDependenciesMapImpl()\n const items = config.positionals\n const type = getType(config.values)\n const importers = getImporters(config.values, monorepo)\n const newDependencies = new Map<string, Dependency>()\n const specOptions: SpecOptions = config.options\n\n // nameless spec definitions will need to use their full\n // stringified spec result instead of their name in order\n // to have an unique key name in the resulting Map\n const getName = (s: Spec): string =>\n s.name === '(unknown)' ? s.spec : s.name\n\n for (const item of items) {\n const spec = Spec.parseArgs(item, specOptions)\n newDependencies.set(getName(spec), asDependency({ spec, type }))\n add.modifiedDependencies = true\n }\n\n for (const importer of importers) {\n add.set(importer, newDependencies)\n }\n\n return {\n add,\n }\n}\n\nexport const parseRemoveArgs = (\n config: LoadedConfig,\n monorepo?: Monorepo,\n): ParsedRemoveArgs => {\n const remove: RemoveImportersDependenciesMap =\n new RemoveImportersDependenciesMapImpl()\n const importers = getImporters(config.values, monorepo)\n\n for (const importer of importers) {\n remove.set(importer, new Set(config.positionals))\n remove.modifiedDependencies = true\n }\n\n return {\n remove,\n }\n}\n"]}
|
package/dist/esm/print-err.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import type { InspectOptions } from 'node:util';
|
|
1
2
|
import type { CommandUsage } from './index.ts';
|
|
2
|
-
export declare const
|
|
3
|
+
export declare const formatOptions: {
|
|
4
|
+
readonly depth: number;
|
|
5
|
+
readonly maxArrayLength: number;
|
|
6
|
+
readonly maxStringLength: number;
|
|
7
|
+
};
|
|
8
|
+
export type ErrorFormatOptions = InspectOptions & {
|
|
9
|
+
maxLines?: number;
|
|
10
|
+
};
|
|
11
|
+
export type Formatter = (arg: unknown, options?: ErrorFormatOptions) => string;
|
|
12
|
+
export declare const indent: (lines: string, num?: number) => string;
|
|
13
|
+
export declare const printErr: (e: unknown, usage: CommandUsage, stderr: (...a: string[]) => void, baseOpts?: ErrorFormatOptions) => void;
|
|
3
14
|
//# sourceMappingURL=print-err.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-err.d.ts","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"print-err.d.ts","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,eAAO,MAAM,aAAa;;;;CAIS,CAAA;AAEnC,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,kBAAkB,KACzB,MAAM,CAAA;AAWX,eAAO,MAAM,MAAM,UAAW,MAAM,yBAIrB,CAAA;AAoBf,eAAO,MAAM,QAAQ,MAChB,OAAO,SACH,YAAY,UACX,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,aACrB,kBAAkB,SAwC9B,CAAA"}
|
package/dist/esm/print-err.js
CHANGED
|
@@ -1,47 +1,178 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { splitDepID } from '@vltpkg/dep-id';
|
|
2
|
+
import { parseError } from '@vltpkg/output/error';
|
|
3
|
+
import { isErrorWithCause, isObject } from '@vltpkg/types';
|
|
4
|
+
import { XDG } from '@vltpkg/xdg';
|
|
5
|
+
import { isGraphRunError } from 'graph-run';
|
|
6
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { formatWithOptions } from 'node:util';
|
|
9
|
+
export const formatOptions = {
|
|
10
|
+
depth: Infinity,
|
|
11
|
+
maxArrayLength: Infinity,
|
|
12
|
+
maxStringLength: Infinity,
|
|
13
|
+
};
|
|
14
|
+
const isNonEmptyString = (v) => !!v && typeof v === 'string';
|
|
15
|
+
const formatURL = (v, format) => v instanceof URL ? v.toString() : /* c8 ignore next */ format(v);
|
|
16
|
+
const formatArray = (v, format, joiner = ', ') => Array.isArray(v) ? v.join(joiner) : /* c8 ignore next */ format(v);
|
|
17
|
+
export const indent = (lines, num = 2) => lines
|
|
18
|
+
.split('\n')
|
|
19
|
+
.map(l => ' '.repeat(num) + l)
|
|
20
|
+
.join('\n');
|
|
21
|
+
const writeErrorLog = (e, format) => {
|
|
22
|
+
try {
|
|
23
|
+
const dir = new XDG('vlt/error-logs').data();
|
|
24
|
+
const file = join(dir, `error-${process.pid}.log`);
|
|
25
|
+
mkdirSync(dir, { recursive: true });
|
|
26
|
+
writeFileSync(file, format(e, {
|
|
27
|
+
colors: false,
|
|
28
|
+
maxLines: Infinity,
|
|
29
|
+
}));
|
|
30
|
+
return file;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
9
34
|
}
|
|
10
|
-
if (isErrorRoot(err) && print(err, usage, stderr))
|
|
11
|
-
return;
|
|
12
|
-
stderr(err);
|
|
13
35
|
};
|
|
14
|
-
const
|
|
15
|
-
|
|
36
|
+
export const printErr = (e, usage, stderr, baseOpts) => {
|
|
37
|
+
const format = (arg, opts) => {
|
|
38
|
+
const { maxLines = 200, ...rest } = {
|
|
39
|
+
...formatOptions,
|
|
40
|
+
...baseOpts,
|
|
41
|
+
...opts,
|
|
42
|
+
};
|
|
43
|
+
const lines = formatWithOptions(rest, arg).split('\n');
|
|
44
|
+
const totalLines = lines.length;
|
|
45
|
+
if (totalLines > maxLines) {
|
|
46
|
+
lines.length = maxLines;
|
|
47
|
+
lines.push(`... ${totalLines - maxLines} lines hidden ...`);
|
|
48
|
+
}
|
|
49
|
+
return lines.join('\n');
|
|
50
|
+
};
|
|
51
|
+
const err = parseError(e);
|
|
52
|
+
const knownError = printCode(err, usage, stderr, format);
|
|
53
|
+
const fileWritten = !knownError || knownError.file ? writeErrorLog(e, format) : null;
|
|
54
|
+
// We could not write an error log and its not a know error,
|
|
55
|
+
// so we print the entire formatted value.
|
|
56
|
+
if (!fileWritten && !knownError) {
|
|
57
|
+
return stderr(format(e));
|
|
58
|
+
}
|
|
59
|
+
if (err && !knownError) {
|
|
60
|
+
stderr(`${err.name}: ${err.message}`);
|
|
61
|
+
}
|
|
62
|
+
if (fileWritten) {
|
|
63
|
+
stderr('');
|
|
64
|
+
stderr(`Full details written to: ${fileWritten}`);
|
|
65
|
+
}
|
|
66
|
+
if (!knownError || knownError.bug) {
|
|
67
|
+
stderr('');
|
|
68
|
+
stderr('Open an issue with the full error details at:');
|
|
69
|
+
stderr(indent('https://github.com/vltpkg/vltpkg/issues/new'));
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const printCode = (err, usage, stderr, format) => {
|
|
73
|
+
if (!err)
|
|
74
|
+
return;
|
|
75
|
+
switch (err.cause?.code) {
|
|
76
|
+
case 'GRAPHRUN_TRAVERSAL': {
|
|
77
|
+
if (!isGraphRunError(err))
|
|
78
|
+
break;
|
|
79
|
+
const { node, path, cause } = err.cause;
|
|
80
|
+
stderr(`Graph traversal failure at: ${splitDepID(node.id).join(' ')}`);
|
|
81
|
+
if (Array.isArray(path) && path.length) {
|
|
82
|
+
stderr(indent(`Path: ${path.map(n => n.id).join(',')}`));
|
|
83
|
+
}
|
|
84
|
+
if (isErrorWithCause(cause) &&
|
|
85
|
+
isObject(cause.cause) &&
|
|
86
|
+
'command' in cause.cause &&
|
|
87
|
+
'stdout' in cause.cause &&
|
|
88
|
+
'stderr' in cause.cause &&
|
|
89
|
+
'status' in cause.cause &&
|
|
90
|
+
'signal' in cause.cause &&
|
|
91
|
+
'cwd' in cause.cause) {
|
|
92
|
+
const { command, args, cwd, stdout: cmdStdout, stderr: cmdStderr, status, signal, } = cause.cause;
|
|
93
|
+
stderr(`Command: ${command}`);
|
|
94
|
+
if (args && Array.isArray(args) && args.length) {
|
|
95
|
+
stderr(`Args: ${args.map(a => JSON.stringify(a)).join(', ')}`);
|
|
96
|
+
}
|
|
97
|
+
stderr(`Cwd: ${cwd}`);
|
|
98
|
+
if (cmdStderr || cmdStdout) {
|
|
99
|
+
stderr('');
|
|
100
|
+
if (isNonEmptyString(cmdStderr)) {
|
|
101
|
+
stderr(cmdStderr);
|
|
102
|
+
}
|
|
103
|
+
if (isNonEmptyString(cmdStdout)) {
|
|
104
|
+
stderr(cmdStdout);
|
|
105
|
+
}
|
|
106
|
+
stderr('');
|
|
107
|
+
}
|
|
108
|
+
if (signal !== null)
|
|
109
|
+
stderr(`Signal: ${format(signal)}`);
|
|
110
|
+
if (status !== null)
|
|
111
|
+
stderr(`Status: ${format(status)}`);
|
|
112
|
+
}
|
|
113
|
+
return { file: true };
|
|
114
|
+
}
|
|
16
115
|
case 'EUSAGE': {
|
|
116
|
+
const { found, validOptions } = err.cause;
|
|
17
117
|
stderr(usage().usage());
|
|
18
|
-
stderr(`Error: ${err.message}`);
|
|
19
|
-
if (
|
|
20
|
-
stderr(`
|
|
118
|
+
stderr(`Usage Error: ${err.message}`);
|
|
119
|
+
if (found) {
|
|
120
|
+
stderr(indent(`Found: ${format(found)}`));
|
|
21
121
|
}
|
|
22
|
-
if (
|
|
23
|
-
stderr(`
|
|
122
|
+
if (validOptions) {
|
|
123
|
+
stderr(indent(`Valid options: ${formatArray(validOptions, format)}`));
|
|
24
124
|
}
|
|
25
|
-
return
|
|
125
|
+
return {};
|
|
26
126
|
}
|
|
27
127
|
case 'ERESOLVE': {
|
|
28
|
-
stderr(`Resolve Error: ${err.message}`);
|
|
29
128
|
const { url, from, response, spec } = err.cause;
|
|
129
|
+
stderr(`Resolve Error: ${err.message}`);
|
|
30
130
|
if (url) {
|
|
31
|
-
stderr(`
|
|
131
|
+
stderr(indent(`While fetching: ${formatURL(url, format)}`));
|
|
32
132
|
}
|
|
33
133
|
if (spec) {
|
|
34
|
-
stderr(`
|
|
134
|
+
stderr(indent(`To satisfy: ${format(spec)}`));
|
|
35
135
|
}
|
|
36
136
|
if (from) {
|
|
37
|
-
stderr(`
|
|
137
|
+
stderr(indent(`From: ${format(from)}`));
|
|
38
138
|
}
|
|
39
139
|
if (response) {
|
|
40
|
-
stderr(
|
|
140
|
+
stderr(indent(`Response: ${format(response)}`));
|
|
141
|
+
}
|
|
142
|
+
return { file: true };
|
|
143
|
+
}
|
|
144
|
+
case 'EREQUEST': {
|
|
145
|
+
const { url, method } = err.cause;
|
|
146
|
+
const { code, syscall } = err.cause.cause ?? {};
|
|
147
|
+
stderr(`Request Error: ${err.message}`);
|
|
148
|
+
if (code) {
|
|
149
|
+
stderr(indent(`Code: ${format(code)}`));
|
|
150
|
+
}
|
|
151
|
+
if (syscall) {
|
|
152
|
+
stderr(indent(`Syscall: ${format(syscall)}`));
|
|
153
|
+
}
|
|
154
|
+
if (url) {
|
|
155
|
+
stderr(indent(`URL: ${formatURL(url, format)}`));
|
|
156
|
+
}
|
|
157
|
+
if (method) {
|
|
158
|
+
stderr(indent(`Method: ${format(method)}`));
|
|
159
|
+
}
|
|
160
|
+
return { file: true };
|
|
161
|
+
}
|
|
162
|
+
case 'ECONFIG': {
|
|
163
|
+
const { found, wanted, validOptions } = err.cause;
|
|
164
|
+
stderr(`Config Error: ${err.message}`);
|
|
165
|
+
if (found) {
|
|
166
|
+
stderr(indent(`Found: ${format(found)}`));
|
|
167
|
+
}
|
|
168
|
+
if (wanted) {
|
|
169
|
+
stderr(indent(`Wanted: ${format(wanted)}`));
|
|
170
|
+
}
|
|
171
|
+
if (validOptions) {
|
|
172
|
+
stderr(indent(`Valid Options: ${format(validOptions)}`));
|
|
41
173
|
}
|
|
42
|
-
return
|
|
174
|
+
return {};
|
|
43
175
|
}
|
|
44
176
|
}
|
|
45
|
-
return false;
|
|
46
177
|
};
|
|
47
178
|
//# sourceMappingURL=print-err.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-err.js","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKjD,mDAAmD;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,GAAY,EACZ,KAAmB,EACnB,MAAiC,EACjC,EAAE;IACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,oEAAoE;QACpE,0EAA0E;QAC1E,uBAAuB;QACvB,OAAM;IACR,CAAC;IACD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC;QAAE,OAAM;IACzD,MAAM,CAAC,GAAG,CAAC,CAAA;AACb,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CACZ,GAAyB,EACzB,KAAmB,EACnB,MAAiC,EACxB,EAAE;IACX,QAAQ,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;YACvB,MAAM,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YAC/B,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpB,MAAM,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;YACvC,CAAC;YACD,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC3B,MAAM,CACJ,oBAAoB,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxD,CAAA;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,kBAAkB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YACvC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAA;YAC/C,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;YACpC,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,CAAC,iBAAiB,IAAqB,EAAE,CAAC,CAAA;YAClD,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;YAC3B,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC/B,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import { isErrorRoot } from '@vltpkg/error-cause'\nimport type { ErrorWithCauseObject } from '@vltpkg/error-cause'\nimport type { CommandUsage } from './index.ts'\nimport type { Spec } from '@vltpkg/spec'\n\n// returns true if error was printed nicely already\nexport const printErr = (\n err: unknown,\n usage: CommandUsage,\n stderr: (...a: unknown[]) => void,\n) => {\n if (!isErrorRoot(err)) {\n // TODO: print _something_ here, but we're in weird broken territory\n // don't just dump it and flood the terminal, though, maybe sniff for code\n // message, stack, etc?\n return\n }\n if (isErrorRoot(err) && print(err, usage, stderr)) return\n stderr(err)\n}\n\nconst print = (\n err: ErrorWithCauseObject,\n usage: CommandUsage,\n stderr: (...a: unknown[]) => void,\n): boolean => {\n switch (err.cause.code) {\n case 'EUSAGE': {\n stderr(usage().usage())\n stderr(`Error: ${err.message}`)\n if (err.cause.found) {\n stderr(` Found: ${err.cause.found}`)\n }\n if (err.cause.validOptions) {\n stderr(\n ` Valid options: ${err.cause.validOptions.join(', ')}`,\n )\n }\n return true\n }\n\n case 'ERESOLVE': {\n stderr(`Resolve Error: ${err.message}`)\n const { url, from, response, spec } = err.cause\n if (url) {\n stderr(` While fetching: ${url}`)\n }\n if (spec) {\n stderr(` To satisfy: ${spec as string | Spec}`)\n }\n if (from) {\n stderr(` From: ${from}`)\n }\n if (response) {\n stderr('Response:', response)\n }\n return true\n }\n }\n\n return false\n}\n"]}
|
|
1
|
+
{"version":3,"file":"print-err.js","sourceRoot":"","sources":["../../src/print-err.ts"],"names":[],"mappings":"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","sourcesContent":["import { splitDepID } from '@vltpkg/dep-id'\nimport type { Node } from '@vltpkg/graph'\nimport type { ParsedError } from '@vltpkg/output/error'\nimport { parseError } from '@vltpkg/output/error'\nimport { isErrorWithCause, isObject } from '@vltpkg/types'\nimport { XDG } from '@vltpkg/xdg'\nimport { isGraphRunError } from 'graph-run'\nimport { mkdirSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { InspectOptions } from 'node:util'\nimport { formatWithOptions } from 'node:util'\nimport type { CommandUsage } from './index.ts'\n\nexport const formatOptions = {\n depth: Infinity,\n maxArrayLength: Infinity,\n maxStringLength: Infinity,\n} as const satisfies InspectOptions\n\nexport type ErrorFormatOptions = InspectOptions & {\n maxLines?: number\n}\n\nexport type Formatter = (\n arg: unknown,\n options?: ErrorFormatOptions,\n) => string\n\nconst isNonEmptyString = (v: unknown): v is string =>\n !!v && typeof v === 'string'\n\nconst formatURL = (v: unknown, format: Formatter) =>\n v instanceof URL ? v.toString() : /* c8 ignore next */ format(v)\n\nconst formatArray = (v: unknown, format: Formatter, joiner = ', ') =>\n Array.isArray(v) ? v.join(joiner) : /* c8 ignore next */ format(v)\n\nexport const indent = (lines: string, num = 2) =>\n lines\n .split('\\n')\n .map(l => ' '.repeat(num) + l)\n .join('\\n')\n\nconst writeErrorLog = (e: unknown, format: Formatter) => {\n try {\n const dir = new XDG('vlt/error-logs').data()\n const file = join(dir, `error-${process.pid}.log`)\n mkdirSync(dir, { recursive: true })\n writeFileSync(\n file,\n format(e, {\n colors: false,\n maxLines: Infinity,\n }),\n )\n return file\n } catch {\n return null\n }\n}\n\nexport const printErr = (\n e: unknown,\n usage: CommandUsage,\n stderr: (...a: string[]) => void,\n baseOpts?: ErrorFormatOptions,\n) => {\n const format: Formatter = (arg: unknown, opts) => {\n const { maxLines = 200, ...rest } = {\n ...formatOptions,\n ...baseOpts,\n ...opts,\n }\n const lines = formatWithOptions(rest, arg).split('\\n')\n const totalLines = lines.length\n if (totalLines > maxLines) {\n lines.length = maxLines\n lines.push(`... ${totalLines - maxLines} lines hidden ...`)\n }\n return lines.join('\\n')\n }\n\n const err = parseError(e)\n const knownError = printCode(err, usage, stderr, format)\n const fileWritten =\n !knownError || knownError.file ? writeErrorLog(e, format) : null\n\n // We could not write an error log and its not a know error,\n // so we print the entire formatted value.\n if (!fileWritten && !knownError) {\n return stderr(format(e))\n }\n\n if (err && !knownError) {\n stderr(`${err.name}: ${err.message}`)\n }\n if (fileWritten) {\n stderr('')\n stderr(`Full details written to: ${fileWritten}`)\n }\n if (!knownError || knownError.bug) {\n stderr('')\n stderr('Open an issue with the full error details at:')\n stderr(indent('https://github.com/vltpkg/vltpkg/issues/new'))\n }\n}\n\nconst printCode = (\n err: ParsedError | null,\n usage: CommandUsage,\n stderr: (...a: string[]) => void,\n format: Formatter,\n): void | { bug?: boolean; file?: boolean } => {\n if (!err) return\n\n switch (err.cause?.code) {\n case 'GRAPHRUN_TRAVERSAL': {\n if (!isGraphRunError<Node>(err)) break\n const { node, path, cause } = err.cause\n stderr(\n `Graph traversal failure at: ${splitDepID(node.id).join(' ')}`,\n )\n if (Array.isArray(path) && path.length) {\n stderr(indent(`Path: ${path.map(n => n.id).join(',')}`))\n }\n if (\n isErrorWithCause(cause) &&\n isObject(cause.cause) &&\n 'command' in cause.cause &&\n 'stdout' in cause.cause &&\n 'stderr' in cause.cause &&\n 'status' in cause.cause &&\n 'signal' in cause.cause &&\n 'cwd' in cause.cause\n ) {\n const {\n command,\n args,\n cwd,\n stdout: cmdStdout,\n stderr: cmdStderr,\n status,\n signal,\n } = cause.cause\n stderr(`Command: ${command}`)\n if (args && Array.isArray(args) && args.length) {\n stderr(\n `Args: ${args.map(a => JSON.stringify(a)).join(', ')}`,\n )\n }\n stderr(`Cwd: ${cwd}`)\n\n if (cmdStderr || cmdStdout) {\n stderr('')\n if (isNonEmptyString(cmdStderr)) {\n stderr(cmdStderr)\n }\n if (isNonEmptyString(cmdStdout)) {\n stderr(cmdStdout)\n }\n stderr('')\n }\n\n if (signal !== null) stderr(`Signal: ${format(signal)}`)\n if (status !== null) stderr(`Status: ${format(status)}`)\n }\n return { file: true }\n }\n\n case 'EUSAGE': {\n const { found, validOptions } = err.cause\n stderr(usage().usage())\n stderr(`Usage Error: ${err.message}`)\n if (found) {\n stderr(indent(`Found: ${format(found)}`))\n }\n if (validOptions) {\n stderr(\n indent(\n `Valid options: ${formatArray(validOptions, format)}`,\n ),\n )\n }\n return {}\n }\n\n case 'ERESOLVE': {\n const { url, from, response, spec } = err.cause\n stderr(`Resolve Error: ${err.message}`)\n if (url) {\n stderr(indent(`While fetching: ${formatURL(url, format)}`))\n }\n if (spec) {\n stderr(indent(`To satisfy: ${format(spec)}`))\n }\n if (from) {\n stderr(indent(`From: ${format(from)}`))\n }\n if (response) {\n stderr(indent(`Response: ${format(response)}`))\n }\n return { file: true }\n }\n\n case 'EREQUEST': {\n const { url, method } = err.cause\n const { code, syscall } = err.cause.cause ?? {}\n stderr(`Request Error: ${err.message}`)\n if (code) {\n stderr(indent(`Code: ${format(code)}`))\n }\n if (syscall) {\n stderr(indent(`Syscall: ${format(syscall)}`))\n }\n if (url) {\n stderr(indent(`URL: ${formatURL(url, format)}`))\n }\n if (method) {\n stderr(indent(`Method: ${format(method)}`))\n }\n return { file: true }\n }\n\n case 'ECONFIG': {\n const { found, wanted, validOptions } = err.cause\n stderr(`Config Error: ${err.message}`)\n if (found) {\n stderr(indent(`Found: ${format(found)}`))\n }\n if (wanted) {\n stderr(indent(`Wanted: ${format(wanted)}`))\n }\n if (validOptions) {\n stderr(indent(`Valid Options: ${format(validOptions)}`))\n }\n return {}\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SecurityArchive } from '@vltpkg/security-archive';
|
|
2
|
+
import type { EdgeLike, NodeLike } from '@vltpkg/types';
|
|
3
|
+
import type { LoadedConfig } from './config/index.ts';
|
|
4
|
+
export type HostContextsMapResult = {
|
|
5
|
+
initialEdges: EdgeLike[];
|
|
6
|
+
initialNodes: NodeLike[];
|
|
7
|
+
edges: EdgeLike[];
|
|
8
|
+
nodes: NodeLike[];
|
|
9
|
+
securityArchive: SecurityArchive;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Creates a Map of host context functions that can be used by the :host
|
|
13
|
+
* pseudo selector to dynamically load graphs from different sources.
|
|
14
|
+
*/
|
|
15
|
+
export declare const createHostContextsMap: (conf: LoadedConfig) => Promise<Map<string, () => Promise<HostContextsMapResult>>>;
|
|
16
|
+
//# sourceMappingURL=query-host-contexts.d.ts.map
|