zard-cli 1.1.0-alpha.0 → 1.1.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/README.md +122 -60
- package/commands/add/component-installer.d.ts +2 -1
- package/commands/add/component-installer.d.ts.map +1 -1
- package/commands/add/component-installer.js +25 -7
- package/commands/add/component-installer.js.map +1 -1
- package/commands/add/component-selector.d.ts +3 -3
- package/commands/add/component-selector.js +4 -4
- package/commands/add/dark-mode-setup.d.ts +2 -0
- package/commands/add/dark-mode-setup.d.ts.map +1 -1
- package/commands/add/dark-mode-setup.js +15 -1
- package/commands/add/dark-mode-setup.js.map +1 -1
- package/commands/add/dependency-resolver.d.ts +8 -1
- package/commands/add/dependency-resolver.d.ts.map +1 -1
- package/commands/add/dependency-resolver.js +87 -16
- package/commands/add/dependency-resolver.js.map +1 -1
- package/commands/add/index.d.ts.map +1 -1
- package/commands/add/index.js +55 -29
- package/commands/add/index.js.map +1 -1
- package/commands/add/stylesheet-setup.d.ts +3 -0
- package/commands/add/stylesheet-setup.d.ts.map +1 -0
- package/commands/add/stylesheet-setup.js +92 -0
- package/commands/add/stylesheet-setup.js.map +1 -0
- package/commands/add/wizard.d.ts +12 -8
- package/commands/add/wizard.d.ts.map +1 -1
- package/commands/add/wizard.js +12 -2
- package/commands/add/wizard.js.map +1 -1
- package/commands/init/config-prompter.d.ts +36 -16
- package/commands/init/config-prompter.d.ts.map +1 -1
- package/commands/init/config-prompter.js +37 -17
- package/commands/init/config-prompter.js.map +1 -1
- package/commands/init/dependencies.d.ts.map +1 -1
- package/commands/init/dependencies.js +35 -23
- package/commands/init/dependencies.js.map +1 -1
- package/commands/init/index.d.ts.map +1 -1
- package/commands/init/index.js +74 -23
- package/commands/init/index.js.map +1 -1
- package/commands/init/library-peers.d.ts +28 -0
- package/commands/init/library-peers.d.ts.map +1 -0
- package/commands/init/library-peers.js +61 -0
- package/commands/init/library-peers.js.map +1 -0
- package/commands/init/project-kind.d.ts +39 -39
- package/commands/init/project-kind.d.ts.map +1 -1
- package/commands/init/project-kind.js +45 -45
- package/commands/init/project-kind.js.map +1 -1
- package/commands/init/rtl-setup.d.ts +12 -0
- package/commands/init/rtl-setup.d.ts.map +1 -0
- package/commands/init/rtl-setup.js +42 -0
- package/commands/init/rtl-setup.js.map +1 -0
- package/commands/init/steps.d.ts +3 -4
- package/commands/init/steps.d.ts.map +1 -1
- package/commands/init/steps.js +100 -39
- package/commands/init/steps.js.map +1 -1
- package/commands/init/tailwind-setup.d.ts +5 -5
- package/commands/init/tailwind-setup.d.ts.map +1 -1
- package/commands/init/tailwind-setup.js +29 -15
- package/commands/init/tailwind-setup.js.map +1 -1
- package/commands/init/tsconfig-updater.d.ts +4 -4
- package/commands/init/tsconfig-updater.js +12 -12
- package/commands/init/tsconfig-updater.js.map +1 -1
- package/commands/init/update-angular-config.js +4 -4
- package/commands/init/vite-setup.d.ts +5 -4
- package/commands/init/vite-setup.d.ts.map +1 -1
- package/commands/init/vite-setup.js +11 -10
- package/commands/init/vite-setup.js.map +1 -1
- package/commands/init/wizard.d.ts +10 -7
- package/commands/init/wizard.d.ts.map +1 -1
- package/commands/init/wizard.js +73 -46
- package/commands/init/wizard.js.map +1 -1
- package/constants/app.constants.d.ts +17 -0
- package/constants/app.constants.d.ts.map +1 -1
- package/constants/app.constants.js +39 -16
- package/constants/app.constants.js.map +1 -1
- package/core/icons/families.d.ts +38 -0
- package/core/icons/families.d.ts.map +1 -0
- package/core/icons/families.js +26 -0
- package/core/icons/families.js.map +1 -0
- package/core/icons/icon-map.d.ts +24 -0
- package/core/icons/icon-map.d.ts.map +1 -0
- package/core/icons/icon-map.js +150 -0
- package/core/icons/icon-map.js.map +1 -0
- package/core/icons/index.d.ts +107 -0
- package/core/icons/index.d.ts.map +1 -0
- package/core/icons/index.js +183 -0
- package/core/icons/index.js.map +1 -0
- package/core/registry/registry-data.d.ts.map +1 -1
- package/core/registry/registry-data.js +545 -63
- package/core/registry/registry-data.js.map +1 -1
- package/core/themes/index.d.ts +1 -1
- package/core/themes/index.js +1 -1
- package/core/themes/theme-definitions.d.ts.map +1 -1
- package/core/themes/theme-definitions.js +61 -72
- package/core/themes/theme-definitions.js.map +1 -1
- package/index.js +3 -2
- package/index.js.map +1 -1
- package/package.json +56 -58
- package/ui/blocks.d.ts +29 -28
- package/ui/blocks.d.ts.map +1 -1
- package/ui/blocks.js +27 -27
- package/ui/blocks.js.map +1 -1
- package/ui/brand.d.ts +5 -5
- package/ui/brand.d.ts.map +1 -1
- package/ui/brand.js +6 -6
- package/ui/brand.js.map +1 -1
- package/ui/engine/animation/index.d.ts +2 -3
- package/ui/engine/animation/index.d.ts.map +1 -1
- package/ui/engine/animation/index.js +2 -3
- package/ui/engine/animation/index.js.map +1 -1
- package/ui/engine/ansi/index.d.ts +10 -11
- package/ui/engine/ansi/index.d.ts.map +1 -1
- package/ui/engine/ansi/index.js +6 -7
- package/ui/engine/ansi/index.js.map +1 -1
- package/ui/engine/components/index.d.ts +3 -3
- package/ui/engine/components/index.js +4 -4
- package/ui/engine/cursor/index.d.ts +3 -4
- package/ui/engine/cursor/index.d.ts.map +1 -1
- package/ui/engine/cursor/index.js +2 -3
- package/ui/engine/cursor/index.js.map +1 -1
- package/ui/engine/diff/index.d.ts +2 -3
- package/ui/engine/diff/index.d.ts.map +1 -1
- package/ui/engine/diff/index.js +5 -6
- package/ui/engine/diff/index.js.map +1 -1
- package/ui/engine/events/index.d.ts +2 -2
- package/ui/engine/events/index.js +3 -3
- package/ui/engine/events/index.js.map +1 -1
- package/ui/engine/focus/index.d.ts +2 -2
- package/ui/engine/focus/index.js +2 -2
- package/ui/engine/frame/index.d.ts +4 -4
- package/ui/engine/frame/index.js +0 -0
- package/ui/engine/index.d.ts +7 -7
- package/ui/engine/index.js +7 -7
- package/ui/engine/input/index.d.ts +2 -2
- package/ui/engine/input/index.js +11 -11
- package/ui/engine/input/index.js.map +1 -1
- package/ui/engine/layout/index.d.ts +3 -3
- package/ui/engine/layout/index.js +7 -7
- package/ui/engine/layout/index.js.map +1 -1
- package/ui/engine/renderer/index.d.ts +4 -4
- package/ui/engine/renderer/index.d.ts.map +1 -1
- package/ui/engine/renderer/index.js +3 -3
- package/ui/engine/scheduler/index.d.ts +3 -3
- package/ui/engine/scheduler/index.js +5 -5
- package/ui/engine/scheduler/index.js.map +1 -1
- package/ui/engine/screen/index.d.ts +5 -5
- package/ui/engine/screen/index.d.ts.map +1 -1
- package/ui/engine/screen/index.js +7 -7
- package/ui/engine/screen/index.js.map +1 -1
- package/ui/engine/terminal/index.d.ts +49 -3
- package/ui/engine/terminal/index.d.ts.map +1 -1
- package/ui/engine/terminal/index.js +149 -18
- package/ui/engine/terminal/index.js.map +1 -1
- package/ui/engine/testing/index.d.ts +4 -4
- package/ui/engine/testing/index.d.ts.map +1 -1
- package/ui/engine/testing/index.js +2 -2
- package/ui/engine/theme/index.d.ts +2 -3
- package/ui/engine/theme/index.d.ts.map +1 -1
- package/ui/engine/theme/index.js +3 -4
- package/ui/engine/theme/index.js.map +1 -1
- package/ui/engine/utils/index.d.ts +2 -2
- package/ui/engine/utils/index.js +4 -4
- package/ui/engine/utils/index.js.map +1 -1
- package/ui/gate.d.ts +7 -7
- package/ui/gate.d.ts.map +1 -1
- package/ui/gate.js +5 -5
- package/ui/index.d.ts +3 -3
- package/ui/index.js +3 -3
- package/ui/log-sink.d.ts +9 -9
- package/ui/log-sink.d.ts.map +1 -1
- package/ui/log-sink.js +9 -9
- package/ui/log-sink.js.map +1 -1
- package/ui/output.d.ts +6 -6
- package/ui/output.d.ts.map +1 -1
- package/ui/output.js +6 -6
- package/ui/output.js.map +1 -1
- package/ui/report.d.ts +8 -8
- package/ui/report.d.ts.map +1 -1
- package/ui/report.js +7 -7
- package/ui/report.js.map +1 -1
- package/ui/runner.d.ts +31 -22
- package/ui/runner.d.ts.map +1 -1
- package/ui/runner.js +41 -25
- package/ui/runner.js.map +1 -1
- package/ui/style.d.ts +7 -7
- package/ui/style.d.ts.map +1 -1
- package/ui/style.js +8 -8
- package/ui/style.js.map +1 -1
- package/ui/testing/fake-tty.d.ts +4 -4
- package/ui/testing/fake-tty.js +4 -4
- package/ui/text-input.d.ts +15 -14
- package/ui/text-input.d.ts.map +1 -1
- package/ui/text-input.js +15 -13
- package/ui/text-input.js.map +1 -1
- package/ui/theme.d.ts +4 -4
- package/ui/theme.js +4 -4
- package/utils/angular-compat.d.ts +21 -0
- package/utils/angular-compat.d.ts.map +1 -0
- package/utils/angular-compat.js +52 -0
- package/utils/angular-compat.js.map +1 -0
- package/utils/config.d.ts +16 -9
- package/utils/config.d.ts.map +1 -1
- package/utils/config.js +35 -13
- package/utils/config.js.map +1 -1
- package/utils/errors.d.ts +11 -0
- package/utils/errors.d.ts.map +1 -1
- package/utils/errors.js +14 -0
- package/utils/errors.js.map +1 -1
- package/utils/get-project-info.d.ts +6 -6
- package/utils/get-project-info.d.ts.map +1 -1
- package/utils/get-project-info.js +106 -36
- package/utils/get-project-info.js.map +1 -1
- package/utils/http-client.d.ts.map +1 -1
- package/utils/http-client.js +20 -5
- package/utils/http-client.js.map +1 -1
- package/utils/icon-catalog.d.ts +34 -0
- package/utils/icon-catalog.d.ts.map +1 -0
- package/utils/icon-catalog.js +63 -0
- package/utils/icon-catalog.js.map +1 -0
- package/utils/logger.d.ts +3 -3
- package/utils/logger.js +9 -9
- package/utils/logger.js.map +1 -1
- package/utils/package-manager.d.ts +25 -25
- package/utils/package-manager.js +50 -50
- package/utils/package-manager.js.map +1 -1
- package/utils/registry.d.ts +100 -6
- package/utils/registry.d.ts.map +1 -1
- package/utils/registry.js +141 -22
- package/utils/registry.js.map +1 -1
- package/utils/schema-version.d.ts +21 -0
- package/utils/schema-version.d.ts.map +1 -0
- package/utils/schema-version.js +28 -0
- package/utils/schema-version.js.map +1 -0
- package/utils/source-file.d.ts +21 -21
- package/utils/source-file.d.ts.map +1 -1
- package/utils/source-file.js +24 -24
- package/utils/source-file.js.map +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { candidateProjects, detectProjectKind, fallbackRootFor, isLibraryKind, libraryBaseUrl, libraryStylesPath, } from '
|
|
1
|
+
import { candidateProjects, detectProjectKind, fallbackRootFor, isLibraryKind, libraryBaseUrl, libraryStylesPath, } from './project-kind.js';
|
|
2
|
+
import { SOURCE_ICON_FAMILY } from '../../core/icons/index.js';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { readFile } from 'node:fs/promises';
|
|
4
5
|
import * as path from 'node:path';
|
|
@@ -7,6 +8,8 @@ export const SCHEMA_URL = 'https://zardui.com/schema.json';
|
|
|
7
8
|
export const configSchema = z.object({
|
|
8
9
|
$schema: z.string(),
|
|
9
10
|
style: z.enum(['css']),
|
|
11
|
+
icons: z.string(),
|
|
12
|
+
rtl: z.boolean(),
|
|
10
13
|
projectType: z.enum(['angular', 'angular-library', 'nx', 'nx-library', 'analog']),
|
|
11
14
|
appConfigFile: z.string(),
|
|
12
15
|
packageManager: z.enum(['npm', 'yarn', 'pnpm', 'bun']),
|
|
@@ -20,24 +23,27 @@ export const configSchema = z.object({
|
|
|
20
23
|
utils: z.string(),
|
|
21
24
|
core: z.string(),
|
|
22
25
|
services: z.string(),
|
|
26
|
+
blocks: z.string(),
|
|
23
27
|
}),
|
|
24
28
|
});
|
|
25
29
|
/**
|
|
26
|
-
*
|
|
30
|
+
* The project the chosen type suggests as the target.
|
|
27
31
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
32
|
+
* When more than one is compatible the wizard asks — but something has to be
|
|
33
|
+
* preselected when the list opens, and the first declared project is the least
|
|
34
|
+
* surprising answer.
|
|
30
35
|
*/
|
|
31
36
|
function targetProject(projectInfo, kind, projectRoot) {
|
|
32
37
|
const candidates = candidateProjects(kind, projectInfo);
|
|
33
38
|
return candidates.find(project => project.root === projectRoot) ?? candidates[0];
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
36
|
-
*
|
|
41
|
+
* The paths suggested for the type the user chose.
|
|
37
42
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
43
|
+
* They come from the project declared in the workspace whenever there is one —
|
|
44
|
+
* the build target's `styles` is where the global CSS actually lives, and
|
|
45
|
+
* guessing it was what made init suggest paths that did not exist in monorepo
|
|
46
|
+
* layouts.
|
|
41
47
|
*/
|
|
42
48
|
export function defaultAnswers(projectInfo, kind = detectProjectKind(projectInfo), projectRoot) {
|
|
43
49
|
const project = targetProject(projectInfo, kind, projectRoot);
|
|
@@ -48,11 +54,13 @@ export function defaultAnswers(projectInfo, kind = detectProjectKind(projectInfo
|
|
|
48
54
|
theme: 'neutral',
|
|
49
55
|
componentsAlias: '@/shared/components',
|
|
50
56
|
utilsAlias: '@/shared/utils',
|
|
57
|
+
// Off unless the user says otherwise (`--rtl` or the wizard's question).
|
|
58
|
+
rtl: false,
|
|
51
59
|
};
|
|
52
60
|
if (isLibraryKind(kind)) {
|
|
53
61
|
return {
|
|
54
62
|
...shared,
|
|
55
|
-
//
|
|
63
|
+
// A library has no app.config; the field stays empty in components.json.
|
|
56
64
|
appConfig: '',
|
|
57
65
|
globalCss: libraryStylesPath(root),
|
|
58
66
|
};
|
|
@@ -65,26 +73,37 @@ export function defaultAnswers(projectInfo, kind = detectProjectKind(projectInfo
|
|
|
65
73
|
};
|
|
66
74
|
}
|
|
67
75
|
/**
|
|
68
|
-
*
|
|
76
|
+
* The defaults with whatever the flags already answered on top.
|
|
69
77
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* do app.config é exatamente a raiz do código do app.
|
|
78
|
+
* Headless, that is the whole answer; in the wizard, it is what each question
|
|
79
|
+
* opens filled with. A library has no app.config, so `--app-config` does not
|
|
80
|
+
* apply there — writing it would register providers in a file init never edits.
|
|
74
81
|
*/
|
|
82
|
+
export function withPresets(answers, presets = {}) {
|
|
83
|
+
const defined = Object.fromEntries(Object.entries(presets).filter(([, value]) => value));
|
|
84
|
+
if (isLibraryKind(answers.kind))
|
|
85
|
+
delete defined.appConfig;
|
|
86
|
+
return { ...answers, ...defined };
|
|
87
|
+
}
|
|
75
88
|
export function deriveBaseUrl(appConfigFile) {
|
|
76
|
-
const dir = path.dirname(appConfigFile
|
|
89
|
+
const dir = path.posix.dirname(appConfigFile.replace(/\\/g, '/'));
|
|
77
90
|
return dir === '.' ? 'src/app' : dir;
|
|
78
91
|
}
|
|
79
|
-
/**
|
|
92
|
+
/** In a library there is no app.config, so the library root decides. */
|
|
80
93
|
function baseUrlFor(answers) {
|
|
81
94
|
return isLibraryKind(answers.kind) ? libraryBaseUrl(answers.projectRoot) : deriveBaseUrl(answers.appConfig);
|
|
82
95
|
}
|
|
83
96
|
export function buildConfig(answers, packageManager) {
|
|
84
|
-
const sharedBase = path.dirname(answers.componentsAlias
|
|
97
|
+
const sharedBase = path.posix.dirname(answers.componentsAlias.replace(/\\/g, '/'));
|
|
85
98
|
return configSchema.parse({
|
|
86
99
|
$schema: SCHEMA_URL,
|
|
87
100
|
style: 'css',
|
|
101
|
+
// The icon family is not asked in the wizard: today there is only one. It goes
|
|
102
|
+
// into the file with its default so it can be edited later. RTL is asked (or
|
|
103
|
+
// given by `--rtl`): the components are direction-agnostic, so it only decides
|
|
104
|
+
// whether init sets `dir="rtl"` on the app's index.html.
|
|
105
|
+
icons: SOURCE_ICON_FAMILY,
|
|
106
|
+
rtl: answers.rtl,
|
|
88
107
|
projectType: answers.kind,
|
|
89
108
|
appConfigFile: answers.appConfig,
|
|
90
109
|
packageManager,
|
|
@@ -98,6 +117,7 @@ export function buildConfig(answers, packageManager) {
|
|
|
98
117
|
utils: answers.utilsAlias,
|
|
99
118
|
core: `${sharedBase}/core`,
|
|
100
119
|
services: `${sharedBase}/services`,
|
|
120
|
+
blocks: `${sharedBase}/blocks`,
|
|
101
121
|
},
|
|
102
122
|
});
|
|
103
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-prompter.js","sourceRoot":"","sources":["../../../src/commands/init/config-prompter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,GAElB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"config-prompter.js","sourceRoot":"","sources":["../../../src/commands/init/config-prompter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,GAElB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAE3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACjF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;CACH,CAAC,CAAC;AAgBH;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,WAAwB,EACxB,IAAiB,EACjB,WAAoB;IAEpB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAExD,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,WAAwB,EACxB,IAAI,GAAG,iBAAiB,CAAC,WAAW,CAAC,EACrC,WAAoB;IAEpB,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG;QACb,IAAI;QACJ,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,qBAAqB;QACtC,UAAU,EAAE,gBAAgB;QAC5B,yEAAyE;QACzE,GAAG,EAAE,KAAK;KACX,CAAC;IAEF,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,GAAG,MAAM;YACT,yEAAyE;YACzE,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEzE,OAAO;QACL,GAAG,MAAM;QACT,SAAS,EAAE,GAAG,UAAU,oBAAoB;QAC5C,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,aAAa;KAC5D,CAAC;AACJ,CAAC;AAmBD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB,EAAE,UAAyB,EAAE;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAkB,CAAC;IAC1G,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,SAAS,CAAC;IAE1D,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAClE,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC;AAED,wEAAwE;AACxE,SAAS,UAAU,CAAC,OAAoB;IACtC,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAoB,EAAE,cAA+C;IAC/F,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAEnF,OAAO,YAAY,CAAC,KAAK,CAAC;QACxB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,KAAK;QACZ,+EAA+E;QAC/E,6EAA6E;QAC7E,+EAA+E;QAC/E,yDAAyD;QACzD,KAAK,EAAE,kBAAkB;QACzB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,aAAa,EAAE,OAAO,CAAC,SAAS;QAChC,cAAc;QACd,QAAQ,EAAE;YACR,GAAG,EAAE,OAAO,CAAC,SAAS;YACtB,SAAS,EAAE,OAAO,CAAC,KAAK;SACzB;QACD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;QAC5B,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC,eAAe;YACnC,KAAK,EAAE,OAAO,CAAC,UAAU;YACzB,IAAI,EAAE,GAAG,UAAU,OAAO;YAC1B,QAAQ,EAAE,GAAG,UAAU,WAAW;YAClC,MAAM,EAAE,GAAG,UAAU,SAAS;SAC/B;KACF,CAAC,CAAC;AACL,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,YAAoB;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAE7C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAKlF,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C/G"}
|
|
@@ -1,39 +1,58 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { syncLibraryPeerDependencies } from './library-peers.js';
|
|
2
|
+
import { bundlerFor, isLibraryKind } from './project-kind.js';
|
|
3
|
+
import { iconPackagesFor } from '../../core/icons/index.js';
|
|
4
|
+
import { pinAllForAngular } from '../../utils/angular-compat.js';
|
|
2
5
|
import { getProjectInfo } from '../../utils/get-project-info.js';
|
|
6
|
+
import { iconCatalog } from '../../utils/icon-catalog.js';
|
|
3
7
|
import { logger } from '../../utils/logger.js';
|
|
4
8
|
import { filterInstalledPackages, installPackagesWithRetry } from '../../utils/package-manager.js';
|
|
5
9
|
export async function installDependencies(cwd, config, projectInfo) {
|
|
6
10
|
const info = projectInfo || (await getProjectInfo(cwd));
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
// The icon package comes from the family chosen in `components.json`, not from
|
|
12
|
+
// a fixed list: that is what makes `"icons"` mean something the day there is
|
|
13
|
+
// more than one family.
|
|
14
|
+
//
|
|
15
|
+
// Pinned against the project's Angular: the CDK and ng-icons both ship one
|
|
16
|
+
// release per Angular major and peer on `>=` it, so `latest` is the wrong
|
|
17
|
+
// answer for anyone not already on the newest Angular.
|
|
18
|
+
const deps = pinAllForAngular([
|
|
19
|
+
'@angular/cdk',
|
|
20
|
+
'class-variance-authority',
|
|
21
|
+
'clsx',
|
|
22
|
+
'tailwind-merge',
|
|
23
|
+
...iconPackagesFor(config.icons, iconCatalog()),
|
|
24
|
+
], info.angularVersion);
|
|
9
25
|
const devDeps = tailwindPackages(config.projectType);
|
|
10
26
|
if (info.hasTailwind) {
|
|
11
27
|
logger.info('Tailwind CSS is already installed. Only the missing pieces will be added.');
|
|
12
28
|
}
|
|
13
|
-
//
|
|
14
|
-
//
|
|
29
|
+
// Every batch that comes back empty is a whole manager invocation saved — and
|
|
30
|
+
// that is exactly the common case for a repeated `init`: nothing to install.
|
|
15
31
|
const [missingDeps, missingDevDeps] = await Promise.all([
|
|
16
32
|
filterInstalledPackages(deps, cwd),
|
|
17
33
|
filterInstalledPackages(devDeps, cwd),
|
|
18
34
|
]);
|
|
19
35
|
if (!missingDeps.length && !missingDevDeps.length) {
|
|
20
36
|
logger.info('All dependencies are already installed.');
|
|
21
|
-
return;
|
|
22
37
|
}
|
|
23
|
-
|
|
24
|
-
|
|
38
|
+
else {
|
|
39
|
+
await installPackagesWithRetry(missingDeps, cwd, config.packageManager, false);
|
|
40
|
+
await installPackagesWithRetry(missingDevDeps, cwd, config.packageManager, true);
|
|
41
|
+
}
|
|
42
|
+
// A library's components import these, and the theme it ships loads Tailwind and its plugin.
|
|
43
|
+
await syncLibraryPeerDependencies(cwd, config, [...deps, ...tailwindPackages(config.projectType)]);
|
|
25
44
|
}
|
|
26
45
|
/**
|
|
27
|
-
*
|
|
46
|
+
* What Tailwind needs to run in that kind of project.
|
|
28
47
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
48
|
+
* The list is always the complete one and the installed-filter decides what is
|
|
49
|
+
* left: checking only for `tailwindcss` missed the case of someone who had it
|
|
50
|
+
* installed but not the bundler adapter, and then the build emitted no
|
|
51
|
+
* utilities at all.
|
|
33
52
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
53
|
+
* A library has no bundler to configure — the consuming application compiles
|
|
54
|
+
* the CSS — but the packages stay because the theme init writes there declares
|
|
55
|
+
* them.
|
|
37
56
|
*/
|
|
38
57
|
function tailwindPackages(kind) {
|
|
39
58
|
const shared = ['tailwindcss', 'tailwindcss-animate'];
|
|
@@ -43,11 +62,4 @@ function tailwindPackages(kind) {
|
|
|
43
62
|
? [...shared, '@tailwindcss/vite']
|
|
44
63
|
: [...shared, '@tailwindcss/postcss', 'postcss'];
|
|
45
64
|
}
|
|
46
|
-
function getCdkVersion(angularVersion) {
|
|
47
|
-
if (!angularVersion) {
|
|
48
|
-
return '@angular/cdk';
|
|
49
|
-
}
|
|
50
|
-
const majorVersion = Number.parseInt(angularVersion.split('.')[0]);
|
|
51
|
-
return `@angular/cdk@^${majorVersion}`;
|
|
52
|
-
}
|
|
53
65
|
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAoB,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAElG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAc,EAAE,WAAyB;IAC9F,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAExD,+EAA+E;IAC/E,6EAA6E;IAC7E,wBAAwB;IACxB,EAAE;IACF,2EAA2E;IAC3E,0EAA0E;IAC1E,uDAAuD;IACvD,MAAM,IAAI,GAAG,gBAAgB,CAC3B;QACE,cAAc;QACd,0BAA0B;QAC1B,MAAM;QACN,gBAAgB;QAChB,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;KAChD,EACD,IAAI,CAAC,cAAc,CACpB,CAAC;IACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;IAED,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtD,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC;QAClC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC;KACtC,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,MAAM,wBAAwB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC/E,MAAM,wBAAwB,CAAC,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;IAED,6FAA6F;IAC7F,MAAM,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,gBAAgB,CAAC,IAA2B;IACnD,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;IAEtD,IAAI,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAEvC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,MAAM;QAChC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,mBAAmB,CAAC;QAClC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,IAAI,SA4Eb,CAAC"}
|
package/commands/init/index.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import { buildConfig, defaultAnswers, inspectCssFile } from '
|
|
2
|
-
import { candidateProjects, detectProjectKind, isLibraryKind, PROJECT_KINDS, } from '
|
|
3
|
-
import { buildInitSteps } from '
|
|
4
|
-
import { runInitWizard } from '
|
|
1
|
+
import { buildConfig, defaultAnswers, inspectCssFile, withPresets, } from './config-prompter.js';
|
|
2
|
+
import { candidateProjects, detectProjectKind, isLibraryKind, PROJECT_KINDS, } from './project-kind.js';
|
|
3
|
+
import { buildInitSteps } from './steps.js';
|
|
4
|
+
import { runInitWizard } from './wizard.js';
|
|
5
5
|
import { isInteractive, printReport, WizardCancelledError } from '../../ui/index.js';
|
|
6
6
|
import { CliError } from '../../utils/errors.js';
|
|
7
7
|
import { getProjectInfo } from '../../utils/get-project-info.js';
|
|
8
|
+
import { loadIconCatalog } from '../../utils/icon-catalog.js';
|
|
8
9
|
import { logger, spinner } from '../../utils/logger.js';
|
|
9
10
|
import { detectPackageManager, suggestedRunner } from '../../utils/package-manager.js';
|
|
11
|
+
import { getRegistryUrl } from '../../utils/registry.js';
|
|
12
|
+
import { getAvailableThemes } from '../../utils/theme-selector.js';
|
|
10
13
|
import { Command } from 'commander';
|
|
11
14
|
import { existsSync } from 'node:fs';
|
|
12
15
|
import * as path from 'node:path';
|
|
@@ -17,17 +20,29 @@ export const init = new Command()
|
|
|
17
20
|
.option('-c, --cwd <cwd>', 'the working directory. defaults to the current directory.', process.cwd())
|
|
18
21
|
.option('-t, --type <type>', `the project type: ${PROJECT_KINDS.map(kind => kind.value).join(', ')}.`)
|
|
19
22
|
.option('-p, --project <name>', 'the workspace project to configure. defaults to the first compatible one.')
|
|
23
|
+
.option('--css <path>', 'the global stylesheet that receives the theme (in a library, the file init creates).')
|
|
24
|
+
.option('--app-config <path>', 'the app.config.ts that receives provideZard(). ignored for libraries.')
|
|
25
|
+
.option('--base-color <color>', `the theme base color: ${getAvailableThemes().join(', ')}.`)
|
|
26
|
+
.option('--components-alias <alias>', 'the import alias for components. defaults to @/shared/components.')
|
|
27
|
+
.option('--utils-alias <alias>', 'the import alias for utils. defaults to @/shared/utils.')
|
|
28
|
+
.option('--rtl', 'the project reads right to left: sets dir="rtl" on <html> in index.html.')
|
|
29
|
+
.option('--no-rtl', 'the project reads left to right (the default).')
|
|
20
30
|
.action(async (options) => {
|
|
21
31
|
const cwd = path.resolve(options.cwd);
|
|
22
32
|
validateWorkingDirectory(cwd);
|
|
23
33
|
const projectInfo = await getProjectInfo(cwd);
|
|
24
34
|
validateAngularProject(projectInfo);
|
|
25
35
|
const kind = resolveKind(options.type);
|
|
36
|
+
const presets = resolvePresets(options);
|
|
26
37
|
const projectRoot = resolveProjectRoot(options.project, kind ?? detectProjectKind(projectInfo), projectInfo);
|
|
27
38
|
const isReInitializing = existsSync(path.resolve(cwd, 'components.json'));
|
|
28
39
|
const packageManager = await detectPackageManager(cwd);
|
|
40
|
+
// Before any step: the catalog is what says which icon package to install,
|
|
41
|
+
// and it comes from the registry so it does not depend on the CLI version.
|
|
42
|
+
await loadIconCatalog(getRegistryUrl());
|
|
29
43
|
const buildSteps = (config) => buildInitSteps(cwd, config, projectInfo, isReInitializing);
|
|
30
44
|
if (!isInteractive()) {
|
|
45
|
+
logHeadlessReason();
|
|
31
46
|
await runHeadless({
|
|
32
47
|
cwd,
|
|
33
48
|
projectInfo,
|
|
@@ -37,6 +52,7 @@ export const init = new Command()
|
|
|
37
52
|
yes: options.yes,
|
|
38
53
|
kind,
|
|
39
54
|
projectRoot,
|
|
55
|
+
presets,
|
|
40
56
|
});
|
|
41
57
|
return;
|
|
42
58
|
}
|
|
@@ -50,6 +66,7 @@ export const init = new Command()
|
|
|
50
66
|
buildSteps,
|
|
51
67
|
presetKind: kind,
|
|
52
68
|
presetProjectRoot: projectRoot,
|
|
69
|
+
presetAnswers: presets,
|
|
53
70
|
});
|
|
54
71
|
reportSuccess(config, buildSteps(config), logs);
|
|
55
72
|
}
|
|
@@ -65,6 +82,18 @@ export const init = new Command()
|
|
|
65
82
|
throw error;
|
|
66
83
|
}
|
|
67
84
|
});
|
|
85
|
+
/**
|
|
86
|
+
* Why the full screen was not mounted.
|
|
87
|
+
*
|
|
88
|
+
* The CLI falling back to text mode is, to whoever is watching, indistinguishable
|
|
89
|
+
* from the interface not existing — which is how the degradation on macOS and
|
|
90
|
+
* Linux went unnoticed until it turned into "it never showed up" reports. With
|
|
91
|
+
* `--debug`, the command answers for itself.
|
|
92
|
+
*/
|
|
93
|
+
function logHeadlessReason() {
|
|
94
|
+
logger.debug(`No terminal to draw on (stdin TTY: ${Boolean(process.stdin.isTTY)}, ` +
|
|
95
|
+
`stdout TTY: ${Boolean(process.stdout.isTTY)}, controlling terminal: unreachable) — running headless.`);
|
|
96
|
+
}
|
|
68
97
|
function validateWorkingDirectory(cwd) {
|
|
69
98
|
if (!existsSync(cwd)) {
|
|
70
99
|
throw new CliError(`The path ${cwd} does not exist. Please try again.`, 'INVALID_CWD');
|
|
@@ -76,10 +105,10 @@ function validateAngularProject(projectInfo) {
|
|
|
76
105
|
}
|
|
77
106
|
}
|
|
78
107
|
/**
|
|
79
|
-
*
|
|
108
|
+
* The type asked for with `--type`, when there is one.
|
|
80
109
|
*
|
|
81
|
-
*
|
|
82
|
-
* init
|
|
110
|
+
* It is the answer to the wizard's first question given up front — which is what
|
|
111
|
+
* makes init usable in CI, where nobody can pick from a menu.
|
|
83
112
|
*/
|
|
84
113
|
function resolveKind(value) {
|
|
85
114
|
if (!value)
|
|
@@ -90,7 +119,26 @@ function resolveKind(value) {
|
|
|
90
119
|
}
|
|
91
120
|
return kind.value;
|
|
92
121
|
}
|
|
93
|
-
/**
|
|
122
|
+
/**
|
|
123
|
+
* The answers given as flags.
|
|
124
|
+
*
|
|
125
|
+
* Every question the wizard asks has one, so CI — and anyone who already knows
|
|
126
|
+
* the answers — can configure a project without a terminal to draw on.
|
|
127
|
+
*/
|
|
128
|
+
function resolvePresets(options) {
|
|
129
|
+
if (options.baseColor && !getAvailableThemes().includes(options.baseColor)) {
|
|
130
|
+
throw new CliError(`Unknown base color "${options.baseColor}". Expected one of: ${getAvailableThemes().join(', ')}.`, 'UNKNOWN_BASE_COLOR');
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
globalCss: options.css,
|
|
134
|
+
appConfig: options.appConfig,
|
|
135
|
+
theme: options.baseColor,
|
|
136
|
+
componentsAlias: options.componentsAlias,
|
|
137
|
+
utilsAlias: options.utilsAlias,
|
|
138
|
+
rtl: options.rtl,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** The root of the project asked for with `--project`, looked up among the compatible ones. */
|
|
94
142
|
function resolveProjectRoot(name, kind, projectInfo) {
|
|
95
143
|
if (!name)
|
|
96
144
|
return undefined;
|
|
@@ -103,26 +151,26 @@ function resolveProjectRoot(name, kind, projectInfo) {
|
|
|
103
151
|
return project.root;
|
|
104
152
|
}
|
|
105
153
|
/**
|
|
106
|
-
*
|
|
154
|
+
* The path without a UI — CI, pipes and non-interactive terminals.
|
|
107
155
|
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
156
|
+
* Nobody can answer anything here, so the defaults apply and `--yes` is
|
|
157
|
+
* required: without it the CLI refuses to overwrite the project's global CSS.
|
|
110
158
|
*/
|
|
111
159
|
async function runHeadless(options) {
|
|
112
160
|
if (!options.yes) {
|
|
113
161
|
throw new CliError('Running without an interactive terminal requires --yes, since init overwrites your global CSS.', 'NOT_INTERACTIVE');
|
|
114
162
|
}
|
|
115
163
|
const kind = options.kind ?? detectProjectKind(options.projectInfo);
|
|
116
|
-
const answers = defaultAnswers(options.projectInfo, kind, options.projectRoot);
|
|
164
|
+
const answers = withPresets(defaultAnswers(options.projectInfo, kind, options.projectRoot), options.presets);
|
|
117
165
|
const cssState = await inspectCssFile(options.cwd, answers.globalCss);
|
|
118
|
-
//
|
|
119
|
-
//
|
|
166
|
+
// In a library the theme CSS is created by init, so its absence is expected;
|
|
167
|
+
// in an application the file has to be there and wired into the build.
|
|
120
168
|
if (cssState === 'missing' && !isLibraryKind(answers.kind)) {
|
|
121
|
-
throw new CliError(`CSS file not found at: ${answers.globalCss}.
|
|
169
|
+
throw new CliError(`CSS file not found at: ${answers.globalCss}. Pass the right one with --css, or run init in an interactive terminal.`, 'CSS_NOT_FOUND');
|
|
122
170
|
}
|
|
123
171
|
const config = buildConfig(answers, options.packageManager);
|
|
124
172
|
const steps = options.buildSteps(config);
|
|
125
|
-
logger.info(options.isReInitializing ? 'Re-initializing
|
|
173
|
+
logger.info(options.isReInitializing ? 'Re-initializing zard/ui...' : 'Initializing zard/ui...');
|
|
126
174
|
for (const step of steps) {
|
|
127
175
|
const stepSpinner = spinner(`${step.label} — ${step.note}`).start();
|
|
128
176
|
try {
|
|
@@ -139,7 +187,7 @@ async function runHeadless(options) {
|
|
|
139
187
|
function reportSuccess(config, steps, logs) {
|
|
140
188
|
printReport({
|
|
141
189
|
status: 'success',
|
|
142
|
-
headline: '
|
|
190
|
+
headline: 'zard/ui has been initialized successfully!',
|
|
143
191
|
items: steps.map(step => `${step.label} — ${step.note}`),
|
|
144
192
|
notes: nextStepsFor(config),
|
|
145
193
|
commands: [{ command: `${suggestedRunner(config.packageManager)} zard-cli add`, argument: '[component]' }],
|
|
@@ -147,19 +195,22 @@ function reportSuccess(config, steps, logs) {
|
|
|
147
195
|
});
|
|
148
196
|
}
|
|
149
197
|
/**
|
|
150
|
-
*
|
|
198
|
+
* What is still left to do by hand.
|
|
151
199
|
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
200
|
+
* In a library init has nowhere to register `provideZard()` and no way to import
|
|
201
|
+
* the tokens — both belong to the app consuming the library, and without this
|
|
202
|
+
* notice the user only finds out when the components do not render.
|
|
155
203
|
*/
|
|
156
204
|
function nextStepsFor(config) {
|
|
157
205
|
if (!isLibraryKind(config.projectType)) {
|
|
158
206
|
return ['You can now add components using:'];
|
|
159
207
|
}
|
|
160
208
|
return [
|
|
161
|
-
'The consuming app still needs
|
|
162
|
-
|
|
209
|
+
'The consuming app still needs the Tailwind PostCSS pipeline (tailwindcss, @tailwindcss/postcss,',
|
|
210
|
+
'postcss, tailwindcss-animate and a .postcssrc.json), to register provideZard() in its',
|
|
211
|
+
`app.config.ts and to import the theme tokens from this library's ${path.basename(config.tailwind.css)}.`,
|
|
212
|
+
// A library has no index.html, so `--rtl` could not set the direction anywhere.
|
|
213
|
+
...(config.rtl ? ['It also needs dir="rtl" on the <html> tag of its index.html to read right to left.'] : []),
|
|
163
214
|
'',
|
|
164
215
|
'You can now add components using:',
|
|
165
216
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Config } from '../../utils/config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Declares what the library's components import as its peer dependencies.
|
|
4
|
+
*
|
|
5
|
+
* The packages are installed at the workspace root, where the library builds
|
|
6
|
+
* against them — but ng-packagr leaves them external, and an app installing the
|
|
7
|
+
* published library learns it needs `@angular/cdk` or `echarts` only when its
|
|
8
|
+
* build fails to resolve them. As peers, the package manager says so up front.
|
|
9
|
+
*
|
|
10
|
+
* The range is the one the workspace installed. An entry the library already
|
|
11
|
+
* declares is left alone: whoever wrote it chose that range on purpose.
|
|
12
|
+
* Libraries without a `package.json` of their own — a non-buildable Nx library —
|
|
13
|
+
* publish nothing, so there is nothing to declare.
|
|
14
|
+
*/
|
|
15
|
+
export declare function syncLibraryPeerDependencies(cwd: string, config: Config, packages: string[]): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Whether the project is a library ng-packagr bundles — one with an `ng-package.json`.
|
|
18
|
+
*
|
|
19
|
+
* Only that kind needs relative imports: ng-packagr leaves aliased imports
|
|
20
|
+
* external. A non-buildable Nx library is compiled from source by the app that
|
|
21
|
+
* uses it, through the same aliases — and in a Vite build, reaching one file
|
|
22
|
+
* by alias and by relative path loads it twice, so rewriting there would only
|
|
23
|
+
* add risk. `baseUrl` is absolute; the library root sits two levels above it.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isPublishableLibrary(config: {
|
|
26
|
+
projectType?: Config['projectType'];
|
|
27
|
+
}, baseUrl: string): boolean;
|
|
28
|
+
//# sourceMappingURL=library-peers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library-peers.d.ts","sourceRoot":"","sources":["../../../src/commands/init/library-peers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAMnD;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BhH;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;CAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAK9G"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { isLibraryKind, projectRootOf } from './project-kind.js';
|
|
2
|
+
import { logger } from '../../utils/logger.js';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
/**
|
|
7
|
+
* Declares what the library's components import as its peer dependencies.
|
|
8
|
+
*
|
|
9
|
+
* The packages are installed at the workspace root, where the library builds
|
|
10
|
+
* against them — but ng-packagr leaves them external, and an app installing the
|
|
11
|
+
* published library learns it needs `@angular/cdk` or `echarts` only when its
|
|
12
|
+
* build fails to resolve them. As peers, the package manager says so up front.
|
|
13
|
+
*
|
|
14
|
+
* The range is the one the workspace installed. An entry the library already
|
|
15
|
+
* declares is left alone: whoever wrote it chose that range on purpose.
|
|
16
|
+
* Libraries without a `package.json` of their own — a non-buildable Nx library —
|
|
17
|
+
* publish nothing, so there is nothing to declare.
|
|
18
|
+
*/
|
|
19
|
+
export async function syncLibraryPeerDependencies(cwd, config, packages) {
|
|
20
|
+
if (!isLibraryKind(config.projectType) || packages.length === 0)
|
|
21
|
+
return;
|
|
22
|
+
const libraryPackageJson = path.resolve(cwd, projectRootOf(config.baseUrl), 'package.json');
|
|
23
|
+
if (!existsSync(libraryPackageJson)) {
|
|
24
|
+
logger.debug(`No package.json in ${path.relative(cwd, path.dirname(libraryPackageJson))}; no peers to declare.`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const workspace = JSON.parse(await readFile(path.resolve(cwd, 'package.json'), 'utf8'));
|
|
28
|
+
const installed = { ...workspace.devDependencies, ...workspace.dependencies };
|
|
29
|
+
const library = JSON.parse(await readFile(libraryPackageJson, 'utf8'));
|
|
30
|
+
const peers = { ...library.peerDependencies };
|
|
31
|
+
let changed = false;
|
|
32
|
+
for (const name of packages.map(packageName)) {
|
|
33
|
+
if (peers[name])
|
|
34
|
+
continue;
|
|
35
|
+
peers[name] = installed[name] ?? '*';
|
|
36
|
+
changed = true;
|
|
37
|
+
}
|
|
38
|
+
if (!changed)
|
|
39
|
+
return;
|
|
40
|
+
library.peerDependencies = peers;
|
|
41
|
+
await writeFile(libraryPackageJson, `${JSON.stringify(library, null, 2)}\n`, 'utf8');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Whether the project is a library ng-packagr bundles — one with an `ng-package.json`.
|
|
45
|
+
*
|
|
46
|
+
* Only that kind needs relative imports: ng-packagr leaves aliased imports
|
|
47
|
+
* external. A non-buildable Nx library is compiled from source by the app that
|
|
48
|
+
* uses it, through the same aliases — and in a Vite build, reaching one file
|
|
49
|
+
* by alias and by relative path loads it twice, so rewriting there would only
|
|
50
|
+
* add risk. `baseUrl` is absolute; the library root sits two levels above it.
|
|
51
|
+
*/
|
|
52
|
+
export function isPublishableLibrary(config, baseUrl) {
|
|
53
|
+
return (Boolean(config.projectType && isLibraryKind(config.projectType)) &&
|
|
54
|
+
existsSync(path.resolve(baseUrl, '..', '..', 'ng-package.json')));
|
|
55
|
+
}
|
|
56
|
+
/** `@angular/cdk@^22` → `@angular/cdk`; the `@` that opens a scope is not a version. */
|
|
57
|
+
function packageName(spec) {
|
|
58
|
+
const separator = spec.lastIndexOf('@');
|
|
59
|
+
return separator > 0 ? spec.slice(0, separator) : spec;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=library-peers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library-peers.js","sourceRoot":"","sources":["../../../src/commands/init/library-peers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,GAAW,EAAE,MAAc,EAAE,QAAkB;IAC/F,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAExE,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;IAC5F,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,wBAAwB,CAAC,CAAC;QACjH,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxF,MAAM,SAAS,GAA2B,EAAE,GAAG,SAAS,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;IAEtG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAA2B,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAEtE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACrC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACjC,MAAM,SAAS,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA+C,EAAE,OAAe;IACnG,OAAO,CACL,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAChE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC"}
|