zard-cli 1.4.1 → 1.5.0
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/commands/add/build-setup.d.ts +29 -0
- package/commands/add/build-setup.d.ts.map +1 -0
- package/commands/add/build-setup.js +253 -0
- package/commands/add/build-setup.js.map +1 -0
- package/commands/add/dependency-resolver.d.ts +23 -1
- package/commands/add/dependency-resolver.d.ts.map +1 -1
- package/commands/add/dependency-resolver.js +49 -6
- package/commands/add/dependency-resolver.js.map +1 -1
- package/commands/add/index.d.ts.map +1 -1
- package/commands/add/index.js +50 -11
- package/commands/add/index.js.map +1 -1
- package/commands/add/stylesheet-setup.d.ts +8 -0
- package/commands/add/stylesheet-setup.d.ts.map +1 -1
- package/commands/add/stylesheet-setup.js +44 -4
- package/commands/add/stylesheet-setup.js.map +1 -1
- package/commands/add/wizard.d.ts +8 -1
- package/commands/add/wizard.d.ts.map +1 -1
- package/commands/add/wizard.js +16 -6
- package/commands/add/wizard.js.map +1 -1
- package/commands/init/steps.d.ts.map +1 -1
- package/commands/init/steps.js +10 -2
- package/commands/init/steps.js.map +1 -1
- package/commands/init/vite-setup.d.ts +7 -0
- package/commands/init/vite-setup.d.ts.map +1 -1
- package/commands/init/vite-setup.js +63 -1
- package/commands/init/vite-setup.js.map +1 -1
- package/core/icons/icon-map.d.ts.map +1 -1
- package/core/icons/icon-map.js +8 -0
- package/core/icons/icon-map.js.map +1 -1
- package/core/registry/registry-data.d.ts +33 -0
- package/core/registry/registry-data.d.ts.map +1 -1
- package/core/registry/registry-data.js +74 -0
- package/core/registry/registry-data.js.map +1 -1
- package/package.json +1 -1
- package/utils/angular-compat.d.ts +6 -1
- package/utils/angular-compat.d.ts.map +1 -1
- package/utils/angular-compat.js +32 -6
- package/utils/angular-compat.js.map +1 -1
- package/utils/json-text.d.ts +25 -0
- package/utils/json-text.d.ts.map +1 -0
- package/utils/json-text.js +176 -0
- package/utils/json-text.js.map +1 -0
- package/utils/package-manager.d.ts +13 -1
- package/utils/package-manager.d.ts.map +1 -1
- package/utils/package-manager.js +78 -4
- package/utils/package-manager.js.map +1 -1
- package/utils/registry.d.ts +7 -0
- package/utils/registry.d.ts.map +1 -1
- package/utils/registry.js.map +1 -1
- package/utils/source-file.d.ts +5 -3
- package/utils/source-file.d.ts.map +1 -1
- package/utils/source-file.js +10 -3
- package/utils/source-file.js.map +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { RegistryBuild } from '../../core/registry/registry-data.js';
|
|
2
|
+
import type { Config } from '../../utils/config.js';
|
|
3
|
+
import type { WorkspaceProject } from '../../utils/get-project-info.js';
|
|
4
|
+
/**
|
|
5
|
+
* Wires into the project what an installed item declares in its `build` field (global styles, served assets):
|
|
6
|
+
* the build target's `assets` in Angular / Nx, Vite's public directory in Analog, printed steps for a library.
|
|
7
|
+
* Idempotent; a file that cannot be edited safely is left alone and the snippet to paste is printed.
|
|
8
|
+
*/
|
|
9
|
+
export interface BuildItem {
|
|
10
|
+
/** The registry item that declared the requirement. */
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly build: RegistryBuild;
|
|
13
|
+
/** Absolute directory its files were written to. */
|
|
14
|
+
readonly dir: string;
|
|
15
|
+
}
|
|
16
|
+
export interface BuildSetupContext {
|
|
17
|
+
/** Where `components.json` lives. */
|
|
18
|
+
readonly cwd: string;
|
|
19
|
+
/** The workspace root: where `angular.json` sits and what an asset's `input` is relative to. */
|
|
20
|
+
readonly workspaceRoot: string;
|
|
21
|
+
readonly projectType: Config['projectType'];
|
|
22
|
+
/** `config.baseUrl`: the project's source directory for components, from which its root is derived. */
|
|
23
|
+
readonly baseUrl: string;
|
|
24
|
+
/** Absolute path of the global stylesheet (`tailwind.css` in components.json). */
|
|
25
|
+
readonly globalCss: string;
|
|
26
|
+
readonly projects: readonly Pick<WorkspaceProject, 'name' | 'root' | 'projectType'>[];
|
|
27
|
+
}
|
|
28
|
+
export declare function setupBuild(items: readonly BuildItem[], context: BuildSetupContext): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=build-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-setup.d.ts","sourceRoot":"","sources":["../../../src/commands/add/build-setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAQvE;;;;GAIG;AAEH,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,gGAAgG;IAChG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC5C,uGAAuG;IACvG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC;CACvF;AAID,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BvG"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { importStylesIntoGlobalCss, relativeImportTarget } from './stylesheet-setup.js';
|
|
2
|
+
import { isLibraryKind, projectRootOf } from '../init/project-kind.js';
|
|
3
|
+
import { findViteConfig } from '../init/vite-setup.js';
|
|
4
|
+
import { appendToArray } from '../../utils/json-text.js';
|
|
5
|
+
import { logger } from '../../utils/logger.js';
|
|
6
|
+
import * as commentJson from 'comment-json';
|
|
7
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
8
|
+
import { copyFile, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
export async function setupBuild(items, context) {
|
|
11
|
+
if (!items.length)
|
|
12
|
+
return;
|
|
13
|
+
const merged = mergeBuilds(items, context.globalCss);
|
|
14
|
+
const assets = availableAssets(merged.assets, context.workspaceRoot);
|
|
15
|
+
const names = items.map(item => item.name).join(', ');
|
|
16
|
+
if (isLibraryKind(context.projectType)) {
|
|
17
|
+
printLibrarySteps(names, merged.styles, merged.libraryStyles, assets, context);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (merged.styles.length) {
|
|
21
|
+
const result = await importStylesIntoGlobalCss(context.globalCss, merged.styles);
|
|
22
|
+
if (result === 'added')
|
|
23
|
+
logger.info(`Global stylesheet updated for ${names}.`);
|
|
24
|
+
else if (result === 'present')
|
|
25
|
+
logger.info(`Global stylesheet already set up for ${names}.`);
|
|
26
|
+
}
|
|
27
|
+
if (!assets.length)
|
|
28
|
+
return;
|
|
29
|
+
if (context.projectType === 'analog') {
|
|
30
|
+
await copyAssetsToPublicDir(assets, context);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
await registerBuildAssets(assets, context);
|
|
34
|
+
}
|
|
35
|
+
/** Every item's styles and assets as one ordered, de-duplicated list. */
|
|
36
|
+
function mergeBuilds(items, globalCss) {
|
|
37
|
+
const styles = [];
|
|
38
|
+
const libraryStyles = [];
|
|
39
|
+
const assets = [];
|
|
40
|
+
for (const item of items) {
|
|
41
|
+
for (const style of item.build.styles ?? []) {
|
|
42
|
+
const target = 'import' in style ? style.import : relativeImportTarget(globalCss, path.join(item.dir, style.file));
|
|
43
|
+
const printed = 'import' in style ? style.import : path.join(item.dir, style.file);
|
|
44
|
+
if (!styles.includes(target)) {
|
|
45
|
+
styles.push(target);
|
|
46
|
+
libraryStyles.push(printed);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const asset of item.build.assets ?? []) {
|
|
50
|
+
if (!assets.some(known => sameAsset(known, asset)))
|
|
51
|
+
assets.push(asset);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { styles, libraryStyles, assets };
|
|
55
|
+
}
|
|
56
|
+
function sameAsset(a, b) {
|
|
57
|
+
return a.glob === b.glob && normalizeInput(a.input) === normalizeInput(b.input);
|
|
58
|
+
}
|
|
59
|
+
function normalizeInput(input) {
|
|
60
|
+
return String(input ?? '')
|
|
61
|
+
.replace(/\\/g, '/')
|
|
62
|
+
.replace(/^\.\//, '')
|
|
63
|
+
.replace(/\/+$/, '');
|
|
64
|
+
}
|
|
65
|
+
const WILDCARD = /[*?]/;
|
|
66
|
+
/** The files of `directory` that a flat glob (`*` and `?` in the file name) selects. */
|
|
67
|
+
function expandGlob(directory, glob) {
|
|
68
|
+
if (!WILDCARD.test(glob))
|
|
69
|
+
return existsSync(path.join(directory, glob)) ? [glob] : [];
|
|
70
|
+
const pattern = new RegExp(`^${glob
|
|
71
|
+
.split('')
|
|
72
|
+
.map(char => (char === '*' ? '[^/]*' : char === '?' ? '[^/]' : char.replace(/[.+^${}()|[\]\\]/g, '\\$&')))
|
|
73
|
+
.join('')}$`);
|
|
74
|
+
return readdirSync(directory).filter(file => pattern.test(file));
|
|
75
|
+
}
|
|
76
|
+
/** `node_modules` can sit above the workspace; the first copy found going up is the one the build resolves. */
|
|
77
|
+
function resolveInput(workspaceRoot, input) {
|
|
78
|
+
const relative = normalizeInput(input);
|
|
79
|
+
let dir = path.resolve(workspaceRoot);
|
|
80
|
+
for (;;) {
|
|
81
|
+
const candidate = path.resolve(dir, relative);
|
|
82
|
+
if (existsSync(candidate))
|
|
83
|
+
return candidate;
|
|
84
|
+
const parent = path.dirname(dir);
|
|
85
|
+
if (parent === dir || !relative.startsWith('node_modules'))
|
|
86
|
+
return null;
|
|
87
|
+
dir = parent;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Drops the assets the installed package does not ship (MapLibre 5 has no worker file). When the package cannot be
|
|
92
|
+
* found, the asset is kept and the build decides.
|
|
93
|
+
*/
|
|
94
|
+
function availableAssets(assets, workspaceRoot) {
|
|
95
|
+
return assets.filter(asset => {
|
|
96
|
+
const directory = resolveInput(workspaceRoot, asset.input);
|
|
97
|
+
if (!directory)
|
|
98
|
+
return true;
|
|
99
|
+
const present = expandGlob(directory, asset.glob).length > 0;
|
|
100
|
+
if (!present)
|
|
101
|
+
logger.debug(`${asset.glob} is not in ${asset.input}; this release does not need it.`);
|
|
102
|
+
return present;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** Where the build target's `assets` live: `angular.json` for Angular, the project's own `project.json` for Nx. */
|
|
106
|
+
function locateBuildTarget(context) {
|
|
107
|
+
const root = projectRootOf(context.baseUrl);
|
|
108
|
+
const projectRoot = root === '.' ? '' : root;
|
|
109
|
+
const applications = context.projects.filter(project => project.projectType === 'application');
|
|
110
|
+
const project = applications.find(candidate => candidate.root === projectRoot) ??
|
|
111
|
+
(applications.length === 1 ? applications[0] : undefined);
|
|
112
|
+
if (!project)
|
|
113
|
+
return null;
|
|
114
|
+
if (context.projectType === 'nx') {
|
|
115
|
+
return {
|
|
116
|
+
file: path.posix.join(project.root, 'project.json'),
|
|
117
|
+
keys: ['targets', 'build', 'options', 'assets'],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return { file: 'angular.json', keys: ['projects', project.name, 'architect', 'build', 'options', 'assets'] };
|
|
121
|
+
}
|
|
122
|
+
async function registerBuildAssets(assets, context) {
|
|
123
|
+
const target = locateBuildTarget(context);
|
|
124
|
+
const snippet = (reason) => printAssetsSnippet(reason, assets, target?.file ?? 'angular.json');
|
|
125
|
+
if (!target) {
|
|
126
|
+
snippet('Could not tell which project the build belongs to.');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const filePath = path.resolve(context.workspaceRoot, target.file);
|
|
130
|
+
if (!existsSync(filePath)) {
|
|
131
|
+
snippet(`${target.file} not found.`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const original = await readFile(filePath, 'utf8');
|
|
135
|
+
let existing;
|
|
136
|
+
try {
|
|
137
|
+
existing = readAssets(original, target.keys);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
snippet(`Could not parse ${target.file}.`);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const missing = assets.filter(asset => !existing.some(entry => typeof entry === 'object' &&
|
|
144
|
+
entry !== null &&
|
|
145
|
+
sameAsset(entry, asset)));
|
|
146
|
+
if (!missing.length) {
|
|
147
|
+
logger.info(`Build assets already registered in ${target.file}.`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
let updated;
|
|
151
|
+
try {
|
|
152
|
+
updated = appendToArray(original, target.keys, missing);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
updated = null;
|
|
156
|
+
}
|
|
157
|
+
if (updated === null) {
|
|
158
|
+
snippet(`Could not find the build target's "options" in ${target.file}.`);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
await writeFile(filePath, updated, 'utf8');
|
|
162
|
+
logger.info(`Registered ${missing.map(asset => asset.glob).join(', ')} as build assets in ${target.file}.`);
|
|
163
|
+
}
|
|
164
|
+
/** The `assets` array at the key path, or an empty list when the path (or the array) does not exist. */
|
|
165
|
+
function readAssets(text, keys) {
|
|
166
|
+
let node = commentJson.parse(text);
|
|
167
|
+
for (const key of keys) {
|
|
168
|
+
if (typeof node !== 'object' || node === null || !(key in node))
|
|
169
|
+
return [];
|
|
170
|
+
node = node[key];
|
|
171
|
+
}
|
|
172
|
+
return Array.isArray(node) ? [...node] : [];
|
|
173
|
+
}
|
|
174
|
+
function printAssetsSnippet(reason, assets, file) {
|
|
175
|
+
logger.warn(`${reason} Add the build assets by hand — in ${file}, under the build target's options:\n` +
|
|
176
|
+
`"assets": [\n${assets.map(asset => ` ${JSON.stringify(asset)}`).join(',\n')}\n]`);
|
|
177
|
+
}
|
|
178
|
+
/** Analog has no `assets` option, so the files are copied into Vite's public directory, refreshed on every run. */
|
|
179
|
+
async function copyAssetsToPublicDir(assets, context) {
|
|
180
|
+
const projectDir = path.resolve(context.cwd, projectRootOf(context.baseUrl));
|
|
181
|
+
const publicDir = await vitePublicDir(projectDir);
|
|
182
|
+
const names = assets.map(asset => asset.glob).join(', ');
|
|
183
|
+
if (publicDir === null) {
|
|
184
|
+
logger.warn(`The Vite config disables or moves the public directory, so ${names} cannot be placed automatically. ` +
|
|
185
|
+
`Copy ${assets.map(asset => `${asset.input}/${asset.glob}`).join(' and ')} to the root of whatever your ` +
|
|
186
|
+
'build serves.');
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const copied = [];
|
|
190
|
+
let upToDate = 0;
|
|
191
|
+
for (const asset of assets) {
|
|
192
|
+
const sourceDir = resolveInput(context.workspaceRoot, asset.input);
|
|
193
|
+
if (!sourceDir) {
|
|
194
|
+
logger.warn(`${asset.input} not found. Install the dependencies, then run this command again.`);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
for (const file of expandGlob(sourceDir, asset.glob)) {
|
|
198
|
+
const destination = path.join(publicDir, normalizeInput(asset.output), file);
|
|
199
|
+
const source = path.join(sourceDir, file);
|
|
200
|
+
if (existsSync(destination) && (await sameContent(source, destination))) {
|
|
201
|
+
upToDate++;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
await mkdir(path.dirname(destination), { recursive: true });
|
|
205
|
+
await copyFile(source, destination);
|
|
206
|
+
copied.push(file);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const where = path.relative(context.cwd, publicDir).split(path.sep).join('/') || '.';
|
|
210
|
+
if (copied.length)
|
|
211
|
+
logger.info(`Copied ${copied.join(', ')} to ${where}/ so Vite serves them from the site root.`);
|
|
212
|
+
else if (upToDate)
|
|
213
|
+
logger.info(`${names} already in ${where}/.`);
|
|
214
|
+
}
|
|
215
|
+
async function sameContent(a, b) {
|
|
216
|
+
const [left, right] = await Promise.all([readFile(a), readFile(b)]);
|
|
217
|
+
return left.equals(right);
|
|
218
|
+
}
|
|
219
|
+
/** Vite's public directory for the project, or null when the config turns it off or points it somewhere unreadable. */
|
|
220
|
+
async function vitePublicDir(projectDir) {
|
|
221
|
+
const config = findViteConfig(projectDir);
|
|
222
|
+
const text = config ? await readFile(config, 'utf8') : '';
|
|
223
|
+
if (/\bpublicDir\s*:\s*false\b/.test(text))
|
|
224
|
+
return null;
|
|
225
|
+
const declared = /\bpublicDir\s*:\s*(['"`])([^'"`]+)\1/.exec(text)?.[2];
|
|
226
|
+
if (declared)
|
|
227
|
+
return path.resolve(projectDir, declared);
|
|
228
|
+
// Anything else (`publicDir: someVariable`) is a decision this cannot read.
|
|
229
|
+
if (/\bpublicDir\s*:/.test(text))
|
|
230
|
+
return null;
|
|
231
|
+
return path.join(projectDir, 'public');
|
|
232
|
+
}
|
|
233
|
+
function printLibrarySteps(names, styles, printedStyles, assets, context) {
|
|
234
|
+
const lines = [
|
|
235
|
+
`${names} needs setup in the application that renders it: a library has no global stylesheet or build of its own.`,
|
|
236
|
+
];
|
|
237
|
+
if (styles.length) {
|
|
238
|
+
const imports = printedStyles.map(style => {
|
|
239
|
+
const target = path.isAbsolute(style)
|
|
240
|
+
? `<path from the app's stylesheet to>/${path.relative(context.workspaceRoot, style).split(path.sep).join('/')}`
|
|
241
|
+
: style;
|
|
242
|
+
return ` @import '${target}';`;
|
|
243
|
+
});
|
|
244
|
+
lines.push(`1. In the application's global stylesheet, in this order and unlayered:\n${imports.join('\n')}`);
|
|
245
|
+
}
|
|
246
|
+
if (assets.length) {
|
|
247
|
+
lines.push(`${styles.length ? '2' : '1'}. In the application's build target (angular.json, or project.json in Nx), ` +
|
|
248
|
+
`under options:\n "assets": [\n${assets.map(asset => ` ${JSON.stringify(asset)}`).join(',\n')}\n ]\n` +
|
|
249
|
+
' In an Analog/Vite application, copy the files to its public directory instead.');
|
|
250
|
+
}
|
|
251
|
+
logger.warn(lines.join('\n'));
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=build-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-setup.js","sourceRoot":"","sources":["../../../src/commands/add/build-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Config } from '../../utils/config.js';
|
|
2
|
-
import { type RegistryIcons, type RegistryIndex } from '../../utils/registry.js';
|
|
2
|
+
import { type RegistryBuild, type RegistryIcons, type RegistryIndex } from '../../utils/registry.js';
|
|
3
3
|
export declare function isItemInstalled(dir: string, files: readonly string[]): boolean;
|
|
4
4
|
export declare function getTargetDir(component: ComponentMeta, resolvedConfig: Config & {
|
|
5
5
|
resolvedPaths: any;
|
|
@@ -13,12 +13,32 @@ export interface ComponentMeta {
|
|
|
13
13
|
dependencies?: string[];
|
|
14
14
|
devDependencies?: string[];
|
|
15
15
|
registryDependencies?: string[];
|
|
16
|
+
build?: RegistryBuild;
|
|
17
|
+
minAngularMajor?: number;
|
|
16
18
|
icons?: RegistryIcons;
|
|
17
19
|
}
|
|
18
20
|
export interface ResolvedDependencies {
|
|
19
21
|
componentsToInstall: ComponentMeta[];
|
|
20
22
|
dependenciesToInstall: Set<string>;
|
|
23
|
+
/** Packages only the type checker needs, e.g. `@types/geojson`. Installed with `--save-dev`. */
|
|
24
|
+
devDependenciesToInstall: Set<string>;
|
|
21
25
|
}
|
|
26
|
+
/** An installed item that asks something of the build, with the directory its files were written to. */
|
|
27
|
+
export interface BuildRequirement {
|
|
28
|
+
name: string;
|
|
29
|
+
build: RegistryBuild;
|
|
30
|
+
dir: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The `build` requirements of the requested items and their dependencies, including those already on disk, so
|
|
34
|
+
* running `add` again repairs a lost setup.
|
|
35
|
+
*/
|
|
36
|
+
export declare function collectBuildRequirements(names: readonly string[], resolvedConfig: Config & {
|
|
37
|
+
resolvedPaths: any;
|
|
38
|
+
}, cwd: string, options: {
|
|
39
|
+
path?: string;
|
|
40
|
+
skip?: readonly string[];
|
|
41
|
+
}): Promise<BuildRequirement[]>;
|
|
22
42
|
export declare function getRegistryIndex(forceRefresh?: boolean): Promise<RegistryIndex>;
|
|
23
43
|
export declare function getComponentMeta(name: string): Promise<ComponentMeta | undefined>;
|
|
24
44
|
export declare function getAllComponentNames(): Promise<string[]>;
|
|
@@ -31,4 +51,6 @@ export declare function resolveDependencies(selectedComponents: string[], resolv
|
|
|
31
51
|
path?: string;
|
|
32
52
|
overwrite?: boolean;
|
|
33
53
|
}): Promise<ResolvedDependencies>;
|
|
54
|
+
/** Stops before anything is written when an item cannot compile on the project's Angular (`minAngularMajor`). */
|
|
55
|
+
export declare function assertAngularSupported(components: readonly ComponentMeta[], angularVersion: string | null): void;
|
|
34
56
|
//# sourceMappingURL=dependency-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AAUjC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK9E;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EAC/C,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CA8CR;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACrC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,gGAAgG;IAChG,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvC;AAED,wGAAwG;AACxG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EAC/C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACnD,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsB7B;AAED,wBAAsB,gBAAgB,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAKnF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAmBvF;AAoBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG9D;AAED,uEAAuE;AACvE,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhE;AAED,wBAAsB,mBAAmB,CACvC,kBAAkB,EAAE,MAAM,EAAE,EAC5B,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EAC/C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,oBAAoB,CAAC,CA+C/B;AAqED,iHAAiH;AACjH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAahH"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { iconPackagesFor } from '../../core/icons/index.js';
|
|
4
|
+
import { angularMajorOf } from '../../utils/angular-compat.js';
|
|
5
|
+
import { CliError } from '../../utils/errors.js';
|
|
4
6
|
import { iconCatalog } from '../../utils/icon-catalog.js';
|
|
5
7
|
import { logger } from '../../utils/logger.js';
|
|
6
8
|
import { fetchBlocksIndex, fetchRegistryIndex, getAvailableBlocks, invalidateRegistryCache, } from '../../utils/registry.js';
|
|
@@ -59,6 +61,30 @@ export function getTargetDir(component, resolvedConfig, cwd, customPath) {
|
|
|
59
61
|
}
|
|
60
62
|
return path.resolve(resolvedConfig.resolvedPaths.components, basePath);
|
|
61
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* The `build` requirements of the requested items and their dependencies, including those already on disk, so
|
|
66
|
+
* running `add` again repairs a lost setup.
|
|
67
|
+
*/
|
|
68
|
+
export async function collectBuildRequirements(names, resolvedConfig, cwd, options) {
|
|
69
|
+
const seen = new Set(options.skip ?? []);
|
|
70
|
+
const queue = [...names];
|
|
71
|
+
const found = [];
|
|
72
|
+
while (queue.length) {
|
|
73
|
+
const name = queue.shift();
|
|
74
|
+
if (seen.has(name))
|
|
75
|
+
continue;
|
|
76
|
+
seen.add(name);
|
|
77
|
+
const meta = await getComponentMeta(name);
|
|
78
|
+
if (!meta)
|
|
79
|
+
continue;
|
|
80
|
+
// Walked outwards from what was asked, so each find goes in front: what an item builds on is wired first.
|
|
81
|
+
queue.push(...(meta.registryDependencies ?? []));
|
|
82
|
+
if (meta.build) {
|
|
83
|
+
found.unshift({ name: meta.name, build: meta.build, dir: getTargetDir(meta, resolvedConfig, cwd, options.path) });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return found;
|
|
87
|
+
}
|
|
62
88
|
export async function getRegistryIndex(forceRefresh = false) {
|
|
63
89
|
if (forceRefresh) {
|
|
64
90
|
invalidateRegistryCache();
|
|
@@ -79,6 +105,8 @@ export async function getComponentMeta(name) {
|
|
|
79
105
|
dependencies: item.dependencies,
|
|
80
106
|
devDependencies: item.devDependencies,
|
|
81
107
|
registryDependencies: item.registryDependencies,
|
|
108
|
+
build: item.build,
|
|
109
|
+
minAngularMajor: item.minAngularMajor,
|
|
82
110
|
icons: item.icons,
|
|
83
111
|
};
|
|
84
112
|
}
|
|
@@ -121,6 +149,7 @@ export async function resolveDependencies(selectedComponents, resolvedConfig, cw
|
|
|
121
149
|
process.exit(1);
|
|
122
150
|
}
|
|
123
151
|
const dependenciesToInstall = new Set();
|
|
152
|
+
const devDependenciesToInstall = new Set();
|
|
124
153
|
const componentsToInstall = [];
|
|
125
154
|
for (const component of componentMetas) {
|
|
126
155
|
const targetDir = getTargetDir(component, resolvedConfig, cwd, options.path);
|
|
@@ -128,14 +157,15 @@ export async function resolveDependencies(selectedComponents, resolvedConfig, cw
|
|
|
128
157
|
continue;
|
|
129
158
|
}
|
|
130
159
|
componentsToInstall.push(component);
|
|
131
|
-
addComponentDependencies(component, dependenciesToInstall, resolvedConfig.icons);
|
|
160
|
+
addComponentDependencies(component, dependenciesToInstall, devDependenciesToInstall, resolvedConfig.icons);
|
|
132
161
|
if (component.registryDependencies && !options.all) {
|
|
133
|
-
await resolveRegistryDependencies(component, componentsToInstall, dependenciesToInstall, resolvedConfig, cwd, options);
|
|
162
|
+
await resolveRegistryDependencies(component, componentsToInstall, dependenciesToInstall, devDependenciesToInstall, resolvedConfig, cwd, options);
|
|
134
163
|
}
|
|
135
164
|
}
|
|
136
165
|
return {
|
|
137
166
|
componentsToInstall,
|
|
138
167
|
dependenciesToInstall,
|
|
168
|
+
devDependenciesToInstall,
|
|
139
169
|
};
|
|
140
170
|
}
|
|
141
171
|
/**
|
|
@@ -147,13 +177,14 @@ export async function resolveDependencies(selectedComponents, resolvedConfig, cw
|
|
|
147
177
|
* from is the installing project's decision. Installing inside `add` also
|
|
148
178
|
* covers anyone who switched family after init.
|
|
149
179
|
*/
|
|
150
|
-
function addComponentDependencies(component, dependenciesToInstall, iconFamily) {
|
|
180
|
+
function addComponentDependencies(component, dependenciesToInstall, devDependenciesToInstall, iconFamily) {
|
|
151
181
|
component.dependencies?.forEach(dep => dependenciesToInstall.add(dep));
|
|
182
|
+
component.devDependencies?.forEach(dep => devDependenciesToInstall.add(dep));
|
|
152
183
|
if (component.icons?.symbols?.length) {
|
|
153
184
|
iconPackagesFor(iconFamily, iconCatalog()).forEach(pkg => dependenciesToInstall.add(pkg));
|
|
154
185
|
}
|
|
155
186
|
}
|
|
156
|
-
async function resolveRegistryDependencies(component, componentsToInstall, dependenciesToInstall, resolvedConfig, cwd, options) {
|
|
187
|
+
async function resolveRegistryDependencies(component, componentsToInstall, dependenciesToInstall, devDependenciesToInstall, resolvedConfig, cwd, options) {
|
|
157
188
|
if (!component.registryDependencies)
|
|
158
189
|
return;
|
|
159
190
|
for (const dep of component.registryDependencies) {
|
|
@@ -168,11 +199,23 @@ async function resolveRegistryDependencies(component, componentsToInstall, depen
|
|
|
168
199
|
const depTargetDir = getTargetDir(depComponent, resolvedConfig, cwd, options.path);
|
|
169
200
|
if (!isItemInstalled(depTargetDir, depComponent.files ?? []) || options.overwrite) {
|
|
170
201
|
componentsToInstall.push(depComponent);
|
|
171
|
-
addComponentDependencies(depComponent, dependenciesToInstall, resolvedConfig.icons);
|
|
202
|
+
addComponentDependencies(depComponent, dependenciesToInstall, devDependenciesToInstall, resolvedConfig.icons);
|
|
172
203
|
if (depComponent.registryDependencies) {
|
|
173
|
-
await resolveRegistryDependencies(depComponent, componentsToInstall, dependenciesToInstall, resolvedConfig, cwd, options);
|
|
204
|
+
await resolveRegistryDependencies(depComponent, componentsToInstall, dependenciesToInstall, devDependenciesToInstall, resolvedConfig, cwd, options);
|
|
174
205
|
}
|
|
175
206
|
}
|
|
176
207
|
}
|
|
177
208
|
}
|
|
209
|
+
/** Stops before anything is written when an item cannot compile on the project's Angular (`minAngularMajor`). */
|
|
210
|
+
export function assertAngularSupported(components, angularVersion) {
|
|
211
|
+
const major = angularMajorOf(angularVersion);
|
|
212
|
+
if (major === null)
|
|
213
|
+
return;
|
|
214
|
+
const unsupported = components.filter(component => (component.minAngularMajor ?? 0) > major);
|
|
215
|
+
if (!unsupported.length)
|
|
216
|
+
return;
|
|
217
|
+
const needed = Math.max(...unsupported.map(component => component.minAngularMajor ?? 0));
|
|
218
|
+
throw new CliError(`${unsupported.map(component => component.name).join(', ')} requires Angular ${needed} or newer, ` +
|
|
219
|
+
`and this project is on Angular ${major}. Nothing was installed.`, 'ANGULAR_VERSION_UNSUPPORTED');
|
|
220
|
+
}
|
|
178
221
|
//# sourceMappingURL=dependency-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,GAAG,SAmHZ,CAAC"}
|
package/commands/add/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { setupBuild } from './build-setup.js';
|
|
1
2
|
import { installComponent, validateTargetPath } from './component-installer.js';
|
|
2
3
|
import { selectComponents } from './component-selector.js';
|
|
3
4
|
import { updateProvideZardWithDarkMode } from './dark-mode-setup.js';
|
|
4
|
-
import { getAllInstallableNames, getTargetDir, resolveDependencies, } from './dependency-resolver.js';
|
|
5
|
+
import { assertAngularSupported, collectBuildRequirements, getAllInstallableNames, getTargetDir, resolveDependencies, } from './dependency-resolver.js';
|
|
5
6
|
import { setupTypeset, setupUtilities } from './stylesheet-setup.js';
|
|
6
7
|
import { runAddWizard } from './wizard.js';
|
|
7
8
|
import { syncLibraryPeerDependencies } from '../init/library-peers.js';
|
|
@@ -14,7 +15,7 @@ import { CliError } from '../../utils/errors.js';
|
|
|
14
15
|
import { getProjectInfo } from '../../utils/get-project-info.js';
|
|
15
16
|
import { assertIconFamily, loadIconCatalog } from '../../utils/icon-catalog.js';
|
|
16
17
|
import { logger, spinner } from '../../utils/logger.js';
|
|
17
|
-
import { filterInstalledPackages, installPackagesWithRetry } from '../../utils/package-manager.js';
|
|
18
|
+
import { filterInstalledPackages, findOutdatedInstalls, installPackagesWithRetry } from '../../utils/package-manager.js';
|
|
18
19
|
import { getRegistryUrl } from '../../utils/registry.js';
|
|
19
20
|
import { Command } from 'commander';
|
|
20
21
|
import { existsSync } from 'node:fs';
|
|
@@ -47,15 +48,32 @@ export const add = new Command()
|
|
|
47
48
|
const actions = {
|
|
48
49
|
loadNames: () => getAllInstallableNames(),
|
|
49
50
|
resolve: async (names) => {
|
|
50
|
-
const { componentsToInstall, dependenciesToInstall } = await resolveDependencies(names, resolvedConfig, cwd, options);
|
|
51
|
+
const { componentsToInstall, dependenciesToInstall, devDependenciesToInstall } = await resolveDependencies(names, resolvedConfig, cwd, options);
|
|
52
|
+
assertAngularSupported(componentsToInstall, projectInfo.angularVersion);
|
|
51
53
|
return {
|
|
52
54
|
components: componentsToInstall,
|
|
53
55
|
dependencies: pinAllForAngular(dependenciesToInstall, projectInfo.angularVersion),
|
|
56
|
+
devDependencies: pinAllForAngular(devDependenciesToInstall, projectInfo.angularVersion),
|
|
54
57
|
};
|
|
55
58
|
},
|
|
56
|
-
installDependencies: async (packages) => {
|
|
57
|
-
await installDependencies(packages, cwd, config.packageManager);
|
|
58
|
-
|
|
59
|
+
installDependencies: async (packages, dev = false) => {
|
|
60
|
+
await installDependencies(packages, cwd, config.packageManager, dev);
|
|
61
|
+
if (!dev)
|
|
62
|
+
await syncLibraryPeerDependencies(cwd, config, packages);
|
|
63
|
+
},
|
|
64
|
+
setupBuild: async (names, failed) => {
|
|
65
|
+
const items = await collectBuildRequirements(names, resolvedConfig, cwd, {
|
|
66
|
+
path: options.path,
|
|
67
|
+
skip: failed,
|
|
68
|
+
});
|
|
69
|
+
await setupBuild(items, {
|
|
70
|
+
cwd,
|
|
71
|
+
workspaceRoot: projectInfo.root,
|
|
72
|
+
projectType: config.projectType,
|
|
73
|
+
baseUrl: config.baseUrl,
|
|
74
|
+
globalCss: resolvedConfig.resolvedPaths.tailwindCss,
|
|
75
|
+
projects: projectInfo.projects,
|
|
76
|
+
});
|
|
59
77
|
},
|
|
60
78
|
installComponent: (component) => installComponent(component.name, getTargetDir(component, resolvedConfig, cwd, options.path), resolvedConfig, {
|
|
61
79
|
customPath: Boolean(options.path),
|
|
@@ -113,15 +131,19 @@ async function runHeadless(preselected, options, actions) {
|
|
|
113
131
|
throw new CliError('No components specified. Pass the component names or --all when running without an interactive terminal.', 'NO_COMPONENTS');
|
|
114
132
|
}
|
|
115
133
|
const resolveSpinner = spinner('Resolving components...').start();
|
|
116
|
-
const { components, dependencies } = await actions.resolve(preselected);
|
|
134
|
+
const { components, dependencies, devDependencies = [] } = await actions.resolve(preselected);
|
|
117
135
|
resolveSpinner.stop();
|
|
118
136
|
if (components.length === 0) {
|
|
137
|
+
await actions.setupBuild(preselected, []);
|
|
119
138
|
logger.info('All components already installed.');
|
|
120
139
|
return;
|
|
121
140
|
}
|
|
122
|
-
if (dependencies.length) {
|
|
141
|
+
if (dependencies.length || devDependencies.length) {
|
|
123
142
|
const depsSpinner = spinner('Installing dependencies...').start();
|
|
124
|
-
|
|
143
|
+
if (dependencies.length)
|
|
144
|
+
await actions.installDependencies(dependencies);
|
|
145
|
+
if (devDependencies.length)
|
|
146
|
+
await actions.installDependencies(devDependencies, true);
|
|
125
147
|
depsSpinner.succeed('Dependencies installed');
|
|
126
148
|
}
|
|
127
149
|
const installed = [];
|
|
@@ -145,6 +167,7 @@ async function runHeadless(preselected, options, actions) {
|
|
|
145
167
|
if (installed.includes('utilities')) {
|
|
146
168
|
await actions.setupUtilities();
|
|
147
169
|
}
|
|
170
|
+
await actions.setupBuild(preselected, failed);
|
|
148
171
|
// `--index-html` answers what the wizard asks; without it, the project's own index.html.
|
|
149
172
|
if (installed.includes('dark-mode')) {
|
|
150
173
|
await actions.setupDarkMode(actions.defaultIndexHtml);
|
|
@@ -190,7 +213,7 @@ function warnOnPrereleaseAngular(angularVersionRaw) {
|
|
|
190
213
|
logger.warn(`You are using a pre-release version of Angular (${angularVersionRaw}). Some dependencies may have compatibility issues.`);
|
|
191
214
|
}
|
|
192
215
|
}
|
|
193
|
-
async function installDependencies(packages, cwd, packageManager) {
|
|
216
|
+
async function installDependencies(packages, cwd, packageManager, dev = false) {
|
|
194
217
|
if (packages.length === 0)
|
|
195
218
|
return;
|
|
196
219
|
// An already-initialized project usually has all of them: without the filter,
|
|
@@ -200,6 +223,22 @@ async function installDependencies(packages, cwd, packageManager) {
|
|
|
200
223
|
logger.debug(`Dependencies already installed: ${packages.join(', ')}`);
|
|
201
224
|
return;
|
|
202
225
|
}
|
|
203
|
-
await installPackagesWithRetry(missing, cwd, packageManager,
|
|
226
|
+
await installPackagesWithRetry(missing, cwd, packageManager, dev);
|
|
227
|
+
await assertNoOutdatedInstalls(packages, cwd, packageManager);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Stops when a package the install asked for is still on an older major.
|
|
231
|
+
*
|
|
232
|
+
* The retry with relaxed peers exists so one stubborn peer does not abort the whole install, but it also lets the
|
|
233
|
+
* manager keep an old release: a project already on `maplibre-gl@5` that another package pins would end here with
|
|
234
|
+
* 5 installed and ng-mapcn 22 needing 6, and the first sign would be a blank map.
|
|
235
|
+
*/
|
|
236
|
+
async function assertNoOutdatedInstalls(packages, cwd, packageManager) {
|
|
237
|
+
const outdated = await findOutdatedInstalls(packages, cwd);
|
|
238
|
+
if (!outdated.length)
|
|
239
|
+
return;
|
|
240
|
+
const list = outdated.map(item => `${item.name} ${item.installed} is installed, ${item.wanted} is required`);
|
|
241
|
+
throw new CliError(`${list.join('; ')}. Another package in the project is holding it back — check \`${packageManager} ls ${outdated[0].name}\`, ` +
|
|
242
|
+
'upgrade or remove the one that depends on the old version, then run this command again.', 'DEPENDENCY_CONFLICT');
|
|
204
243
|
}
|
|
205
244
|
//# sourceMappingURL=index.js.map
|