zard-cli 1.4.2 → 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.
Files changed (53) hide show
  1. package/commands/add/build-setup.d.ts +29 -0
  2. package/commands/add/build-setup.d.ts.map +1 -0
  3. package/commands/add/build-setup.js +253 -0
  4. package/commands/add/build-setup.js.map +1 -0
  5. package/commands/add/dependency-resolver.d.ts +23 -1
  6. package/commands/add/dependency-resolver.d.ts.map +1 -1
  7. package/commands/add/dependency-resolver.js +49 -6
  8. package/commands/add/dependency-resolver.js.map +1 -1
  9. package/commands/add/index.d.ts.map +1 -1
  10. package/commands/add/index.js +50 -11
  11. package/commands/add/index.js.map +1 -1
  12. package/commands/add/stylesheet-setup.d.ts +8 -0
  13. package/commands/add/stylesheet-setup.d.ts.map +1 -1
  14. package/commands/add/stylesheet-setup.js +44 -4
  15. package/commands/add/stylesheet-setup.js.map +1 -1
  16. package/commands/add/wizard.d.ts +8 -1
  17. package/commands/add/wizard.d.ts.map +1 -1
  18. package/commands/add/wizard.js +16 -6
  19. package/commands/add/wizard.js.map +1 -1
  20. package/commands/init/steps.d.ts.map +1 -1
  21. package/commands/init/steps.js +10 -2
  22. package/commands/init/steps.js.map +1 -1
  23. package/commands/init/vite-setup.d.ts +7 -0
  24. package/commands/init/vite-setup.d.ts.map +1 -1
  25. package/commands/init/vite-setup.js +63 -1
  26. package/commands/init/vite-setup.js.map +1 -1
  27. package/core/icons/icon-map.d.ts.map +1 -1
  28. package/core/icons/icon-map.js +8 -0
  29. package/core/icons/icon-map.js.map +1 -1
  30. package/core/registry/registry-data.d.ts +33 -0
  31. package/core/registry/registry-data.d.ts.map +1 -1
  32. package/core/registry/registry-data.js +74 -0
  33. package/core/registry/registry-data.js.map +1 -1
  34. package/package.json +1 -1
  35. package/utils/angular-compat.d.ts +6 -1
  36. package/utils/angular-compat.d.ts.map +1 -1
  37. package/utils/angular-compat.js +32 -6
  38. package/utils/angular-compat.js.map +1 -1
  39. package/utils/json-text.d.ts +25 -0
  40. package/utils/json-text.d.ts.map +1 -0
  41. package/utils/json-text.js +176 -0
  42. package/utils/json-text.js.map +1 -0
  43. package/utils/package-manager.d.ts +13 -1
  44. package/utils/package-manager.d.ts.map +1 -1
  45. package/utils/package-manager.js +78 -4
  46. package/utils/package-manager.js.map +1 -1
  47. package/utils/registry.d.ts +7 -0
  48. package/utils/registry.d.ts.map +1 -1
  49. package/utils/registry.js.map +1 -1
  50. package/utils/source-file.d.ts +5 -3
  51. package/utils/source-file.d.ts.map +1 -1
  52. package/utils/source-file.js +10 -3
  53. 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":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,OAAO,EAKL,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;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACrC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC;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,CAiBvF;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,CA4C/B"}
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":"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"}
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":"AAuBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,GAAG,SAmGZ,CAAC"}
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"}
@@ -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
- await syncLibraryPeerDependencies(cwd, config, packages);
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
- await actions.installDependencies(dependencies);
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, false);
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