zard-cli 1.0.0-beta.84 → 1.1.0-alpha.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 +60 -60
- package/commands/add/component-installer.d.ts +2 -0
- package/commands/add/component-installer.d.ts.map +1 -1
- package/commands/add/component-installer.js +9 -4
- package/commands/add/component-installer.js.map +1 -1
- package/commands/add/component-selector.d.ts +6 -0
- package/commands/add/component-selector.d.ts.map +1 -1
- package/commands/add/component-selector.js +9 -27
- package/commands/add/component-selector.js.map +1 -1
- package/commands/add/dark-mode-setup.d.ts.map +1 -1
- package/commands/add/dark-mode-setup.js +2 -11
- package/commands/add/dark-mode-setup.js.map +1 -1
- package/commands/add/index.d.ts.map +1 -1
- package/commands/add/index.js +106 -86
- package/commands/add/index.js.map +1 -1
- package/commands/add/wizard.d.ts +31 -0
- package/commands/add/wizard.d.ts.map +1 -0
- package/commands/add/wizard.js +289 -0
- package/commands/add/wizard.js.map +1 -0
- package/commands/init/config-prompter.d.ts +47 -3
- package/commands/init/config-prompter.d.ts.map +1 -1
- package/commands/init/config-prompter.js +76 -74
- package/commands/init/config-prompter.js.map +1 -1
- package/commands/init/dependencies.d.ts +1 -8
- package/commands/init/dependencies.d.ts.map +1 -1
- package/commands/init/dependencies.js +35 -17
- package/commands/init/dependencies.js.map +1 -1
- package/commands/init/index.d.ts.map +1 -1
- package/commands/init/index.js +129 -81
- package/commands/init/index.js.map +1 -1
- package/commands/init/project-kind.d.ts +82 -0
- package/commands/init/project-kind.d.ts.map +1 -0
- package/commands/init/project-kind.js +166 -0
- package/commands/init/project-kind.js.map +1 -0
- package/commands/init/steps.d.ts +16 -0
- package/commands/init/steps.d.ts.map +1 -0
- package/commands/init/steps.js +151 -0
- package/commands/init/steps.js.map +1 -0
- package/commands/init/tailwind-setup.d.ts +9 -2
- package/commands/init/tailwind-setup.d.ts.map +1 -1
- package/commands/init/tailwind-setup.js +33 -12
- package/commands/init/tailwind-setup.js.map +1 -1
- package/commands/init/tsconfig-updater.d.ts +8 -1
- package/commands/init/tsconfig-updater.d.ts.map +1 -1
- package/commands/init/tsconfig-updater.js +30 -11
- package/commands/init/tsconfig-updater.js.map +1 -1
- package/commands/init/update-angular-config.d.ts.map +1 -1
- package/commands/init/update-angular-config.js +28 -50
- package/commands/init/update-angular-config.js.map +1 -1
- package/commands/init/vite-setup.d.ts +10 -0
- package/commands/init/vite-setup.d.ts.map +1 -0
- package/commands/init/vite-setup.js +60 -0
- package/commands/init/vite-setup.js.map +1 -0
- package/commands/init/wizard.d.ts +30 -0
- package/commands/init/wizard.d.ts.map +1 -0
- package/commands/init/wizard.js +560 -0
- package/commands/init/wizard.js.map +1 -0
- package/core/registry/registry-data.d.ts.map +1 -1
- package/core/registry/registry-data.js +8 -45
- package/core/registry/registry-data.js.map +1 -1
- package/index.js +5 -3
- package/index.js.map +1 -1
- package/package.json +58 -61
- package/ui/blocks.d.ts +70 -0
- package/ui/blocks.d.ts.map +1 -0
- package/ui/blocks.js +116 -0
- package/ui/blocks.js.map +1 -0
- package/ui/brand.d.ts +14 -0
- package/ui/brand.d.ts.map +1 -0
- package/ui/brand.js +35 -0
- package/ui/brand.js.map +1 -0
- package/ui/engine/animation/index.d.ts +39 -0
- package/ui/engine/animation/index.d.ts.map +1 -0
- package/ui/engine/animation/index.js +103 -0
- package/ui/engine/animation/index.js.map +1 -0
- package/ui/engine/ansi/index.d.ts +52 -0
- package/ui/engine/ansi/index.d.ts.map +1 -0
- package/ui/engine/ansi/index.js +117 -0
- package/ui/engine/ansi/index.js.map +1 -0
- package/ui/engine/components/index.d.ts +211 -0
- package/ui/engine/components/index.d.ts.map +1 -0
- package/ui/engine/components/index.js +109 -0
- package/ui/engine/components/index.js.map +1 -0
- package/ui/engine/cursor/index.d.ts +17 -0
- package/ui/engine/cursor/index.d.ts.map +1 -0
- package/ui/engine/cursor/index.js +41 -0
- package/ui/engine/cursor/index.js.map +1 -0
- package/ui/engine/diff/index.d.ts +27 -0
- package/ui/engine/diff/index.d.ts.map +1 -0
- package/ui/engine/diff/index.js +57 -0
- package/ui/engine/diff/index.js.map +1 -0
- package/ui/engine/events/index.d.ts +24 -0
- package/ui/engine/events/index.d.ts.map +1 -0
- package/ui/engine/events/index.js +60 -0
- package/ui/engine/events/index.js.map +1 -0
- package/ui/engine/focus/index.d.ts +25 -0
- package/ui/engine/focus/index.d.ts.map +1 -0
- package/ui/engine/focus/index.js +77 -0
- package/ui/engine/focus/index.js.map +1 -0
- package/ui/engine/frame/index.d.ts +48 -0
- package/ui/engine/frame/index.d.ts.map +1 -0
- package/ui/engine/frame/index.js +0 -0
- package/ui/engine/frame/index.js.map +1 -0
- package/ui/engine/index.d.ts +28 -0
- package/ui/engine/index.d.ts.map +1 -0
- package/ui/engine/index.js +28 -0
- package/ui/engine/index.js.map +1 -0
- package/ui/engine/input/index.d.ts +36 -0
- package/ui/engine/input/index.d.ts.map +1 -0
- package/ui/engine/input/index.js +224 -0
- package/ui/engine/input/index.js.map +1 -0
- package/ui/engine/layout/index.d.ts +42 -0
- package/ui/engine/layout/index.d.ts.map +1 -0
- package/ui/engine/layout/index.js +241 -0
- package/ui/engine/layout/index.js.map +1 -0
- package/ui/engine/renderer/index.d.ts +43 -0
- package/ui/engine/renderer/index.d.ts.map +1 -0
- package/ui/engine/renderer/index.js +619 -0
- package/ui/engine/renderer/index.js.map +1 -0
- package/ui/engine/scheduler/index.d.ts +22 -0
- package/ui/engine/scheduler/index.d.ts.map +1 -0
- package/ui/engine/scheduler/index.js +77 -0
- package/ui/engine/scheduler/index.js.map +1 -0
- package/ui/engine/screen/index.d.ts +39 -0
- package/ui/engine/screen/index.d.ts.map +1 -0
- package/ui/engine/screen/index.js +255 -0
- package/ui/engine/screen/index.js.map +1 -0
- package/ui/engine/terminal/index.d.ts +38 -0
- package/ui/engine/terminal/index.d.ts.map +1 -0
- package/ui/engine/terminal/index.js +104 -0
- package/ui/engine/terminal/index.js.map +1 -0
- package/ui/engine/testing/index.d.ts +27 -0
- package/ui/engine/testing/index.d.ts.map +1 -0
- package/ui/engine/testing/index.js +63 -0
- package/ui/engine/testing/index.js.map +1 -0
- package/ui/engine/theme/index.d.ts +27 -0
- package/ui/engine/theme/index.d.ts.map +1 -0
- package/ui/engine/theme/index.js +129 -0
- package/ui/engine/theme/index.js.map +1 -0
- package/ui/engine/utils/index.d.ts +12 -0
- package/ui/engine/utils/index.d.ts.map +1 -0
- package/ui/engine/utils/index.js +143 -0
- package/ui/engine/utils/index.js.map +1 -0
- package/ui/gate.d.ts +19 -0
- package/ui/gate.d.ts.map +1 -0
- package/ui/gate.js +36 -0
- package/ui/gate.js.map +1 -0
- package/ui/index.d.ts +18 -0
- package/ui/index.d.ts.map +1 -0
- package/ui/index.js +18 -0
- package/ui/index.js.map +1 -0
- package/ui/log-sink.d.ts +24 -0
- package/ui/log-sink.d.ts.map +1 -0
- package/ui/log-sink.js +35 -0
- package/ui/log-sink.js.map +1 -0
- package/ui/output.d.ts +14 -0
- package/ui/output.d.ts.map +1 -0
- package/ui/output.js +28 -0
- package/ui/output.js.map +1 -0
- package/ui/report.d.ts +30 -0
- package/ui/report.d.ts.map +1 -0
- package/ui/report.js +45 -0
- package/ui/report.js.map +1 -0
- package/ui/runner.d.ts +57 -0
- package/ui/runner.d.ts.map +1 -0
- package/ui/runner.js +119 -0
- package/ui/runner.js.map +1 -0
- package/ui/style.d.ts +24 -0
- package/ui/style.d.ts.map +1 -0
- package/ui/style.js +44 -0
- package/ui/style.js.map +1 -0
- package/ui/testing/fake-tty.d.ts +26 -0
- package/ui/testing/fake-tty.d.ts.map +1 -0
- package/ui/testing/fake-tty.js +61 -0
- package/ui/testing/fake-tty.js.map +1 -0
- package/ui/text-input.d.ts +30 -0
- package/ui/text-input.d.ts.map +1 -0
- package/ui/text-input.js +87 -0
- package/ui/text-input.js.map +1 -0
- package/ui/theme.d.ts +10 -0
- package/ui/theme.d.ts.map +1 -0
- package/ui/theme.js +20 -0
- package/ui/theme.js.map +1 -0
- package/utils/config.d.ts +22 -0
- package/utils/config.d.ts.map +1 -1
- package/utils/config.js +26 -1
- package/utils/config.js.map +1 -1
- package/utils/get-project-info.d.ts +29 -0
- package/utils/get-project-info.d.ts.map +1 -1
- package/utils/get-project-info.js +176 -1
- package/utils/get-project-info.js.map +1 -1
- package/utils/logger.d.ts +13 -1
- package/utils/logger.d.ts.map +1 -1
- package/utils/logger.js +95 -15
- package/utils/logger.js.map +1 -1
- package/utils/package-manager.d.ts +42 -1
- package/utils/package-manager.d.ts.map +1 -1
- package/utils/package-manager.js +204 -11
- package/utils/package-manager.js.map +1 -1
- package/utils/registry.d.ts +12 -2
- package/utils/registry.d.ts.map +1 -1
- package/utils/registry.js +21 -6
- package/utils/registry.js.map +1 -1
- package/utils/source-file.d.ts +40 -0
- package/utils/source-file.d.ts.map +1 -0
- package/utils/source-file.js +104 -0
- package/utils/source-file.js.map +1 -0
package/README.md
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
# Zard
|
|
2
|
-
|
|
3
|
-
Modern Angular component library inspired by shadcn/ui, built with TailwindCSS and designed for developers who value <b>beautiful</b>, <b>accessible</b>, and <b>completely free</b> open source components.
|
|
4
|
-
|
|
5
|
-
<a alt="Zard Ui logo" href="https://www.zardui.com/" target="_blank" rel="noreferrer">
|
|
6
|
-
<img align="center" width=100% src="https://www.zardui.com/images/github_banner.png"/>
|
|
7
|
-
</a>
|
|
8
|
-
|
|
9
|
-
<p align="center">Made with ❤️ from 🇧🇷</p>
|
|
10
|
-
<p align="center">
|
|
11
|
-
<img src="https://img.shields.io/github/stars/zard-ui/zardui" alt="zard ui repository stars"/>
|
|
12
|
-
</p>
|
|
13
|
-
|
|
14
|
-
## Stack
|
|
15
|
-
|
|
16
|
-

|
|
17
|
-

|
|
18
|
-

|
|
19
|
-
|
|
20
|
-
## Documentation
|
|
21
|
-
|
|
22
|
-
Visit https://www.zardui.com/docs to view the documentation
|
|
23
|
-
|
|
24
|
-
## Contributing
|
|
25
|
-
|
|
26
|
-
We follow a **simple GitHub Flow** with automated releases. Please read our [contributing guide](/CONTRIBUTING.md) to get started.
|
|
27
|
-
|
|
28
|
-
### Quick Start for Contributors
|
|
29
|
-
|
|
30
|
-
1. Fork the repository
|
|
31
|
-
2. Create your feature branch: `git checkout -b feat/#123-your-feature`
|
|
32
|
-
3. Develop with as many commits as you want
|
|
33
|
-
4. Open a PR to `master`
|
|
34
|
-
5. After review + merge = automatic release!
|
|
35
|
-
|
|
36
|
-
### Development Commands
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npm start # Start dev server (port 4222)
|
|
40
|
-
npm test # Run all tests
|
|
41
|
-
npm run build # Build production
|
|
42
|
-
npm run release # Automated release
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## License
|
|
46
|
-
|
|
47
|
-
Licensed under the [MIT license](/LICENSE.md).
|
|
48
|
-
|
|
49
|
-
## Get In Touch
|
|
50
|
-
|
|
51
|
-
<p>Click on one of the icons and Help us on this journey and be part of our community.</p>
|
|
52
|
-
|
|
53
|
-
<a href="https://chat.whatsapp.com/Dctdh6Huhvm24OX6js5XKT" target="_blank">
|
|
54
|
-
<img src="https://img.shields.io/badge/WhatsApp-25D366?style=for-the-badge&logo=whatsapp&logoColor=white" alt="whatsapp" />
|
|
55
|
-
</a>
|
|
56
|
-
<img src="https://dcbadge.limes.pink/api/server/https://discord.com/invite/yP8Uj9rAX9" alt="discord" />
|
|
57
|
-
|
|
58
|
-
<span>Follow us in</span> <a href="https://x.com/zard_ui" target="_blank">
|
|
59
|
-
<img src="https://img.shields.io/badge/X-%23000000.svg?logo=X&logoColor=white" alt="X" />
|
|
60
|
-
</a>
|
|
1
|
+
# Zard
|
|
2
|
+
|
|
3
|
+
Modern Angular component library inspired by shadcn/ui, built with TailwindCSS and designed for developers who value <b>beautiful</b>, <b>accessible</b>, and <b>completely free</b> open source components.
|
|
4
|
+
|
|
5
|
+
<a alt="Zard Ui logo" href="https://www.zardui.com/" target="_blank" rel="noreferrer">
|
|
6
|
+
<img align="center" width=100% src="https://www.zardui.com/images/github_banner.png"/>
|
|
7
|
+
</a>
|
|
8
|
+
|
|
9
|
+
<p align="center">Made with ❤️ from 🇧🇷</p>
|
|
10
|
+
<p align="center">
|
|
11
|
+
<img src="https://img.shields.io/github/stars/zard-ui/zardui" alt="zard ui repository stars"/>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
## Stack
|
|
15
|
+
|
|
16
|
+

|
|
17
|
+

|
|
18
|
+

|
|
19
|
+
|
|
20
|
+
## Documentation
|
|
21
|
+
|
|
22
|
+
Visit https://www.zardui.com/docs to view the documentation
|
|
23
|
+
|
|
24
|
+
## Contributing
|
|
25
|
+
|
|
26
|
+
We follow a **simple GitHub Flow** with automated releases. Please read our [contributing guide](/CONTRIBUTING.md) to get started.
|
|
27
|
+
|
|
28
|
+
### Quick Start for Contributors
|
|
29
|
+
|
|
30
|
+
1. Fork the repository
|
|
31
|
+
2. Create your feature branch: `git checkout -b feat/#123-your-feature`
|
|
32
|
+
3. Develop with as many commits as you want
|
|
33
|
+
4. Open a PR to `master`
|
|
34
|
+
5. After review + merge = automatic release!
|
|
35
|
+
|
|
36
|
+
### Development Commands
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm start # Start dev server (port 4222)
|
|
40
|
+
npm test # Run all tests
|
|
41
|
+
npm run build # Build production
|
|
42
|
+
npm run release # Automated release
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## License
|
|
46
|
+
|
|
47
|
+
Licensed under the [MIT license](/LICENSE.md).
|
|
48
|
+
|
|
49
|
+
## Get In Touch
|
|
50
|
+
|
|
51
|
+
<p>Click on one of the icons and Help us on this journey and be part of our community.</p>
|
|
52
|
+
|
|
53
|
+
<a href="https://chat.whatsapp.com/Dctdh6Huhvm24OX6js5XKT" target="_blank">
|
|
54
|
+
<img src="https://img.shields.io/badge/WhatsApp-25D366?style=for-the-badge&logo=whatsapp&logoColor=white" alt="whatsapp" />
|
|
55
|
+
</a>
|
|
56
|
+
<img src="https://dcbadge.limes.pink/api/server/https://discord.com/invite/yP8Uj9rAX9" alt="discord" />
|
|
57
|
+
|
|
58
|
+
<span>Follow us in</span> <a href="https://x.com/zard_ui" target="_blank">
|
|
59
|
+
<img src="https://img.shields.io/badge/X-%23000000.svg?logo=X&logoColor=white" alt="X" />
|
|
60
|
+
</a>
|
|
@@ -2,5 +2,7 @@ import { Config } from '../../utils/config';
|
|
|
2
2
|
export declare function validateTargetPath(targetDir: string, projectRoot: string): void;
|
|
3
3
|
export declare function installComponent(componentName: string, targetDir: string, config: Config & {
|
|
4
4
|
resolvedPaths: any;
|
|
5
|
+
}, options?: {
|
|
6
|
+
customPath?: boolean;
|
|
5
7
|
}): Promise<void>;
|
|
6
8
|
//# sourceMappingURL=component-installer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-installer.d.ts","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3C,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"component-installer.d.ts","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3C,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAS/E;AAED,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EACvC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -4,13 +4,18 @@ import { fetchComponent } from '../../utils/registry.js';
|
|
|
4
4
|
import { promises as fs } from 'node:fs';
|
|
5
5
|
import * as path from 'node:path';
|
|
6
6
|
export function validateTargetPath(targetDir, projectRoot) {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// Comparar prefixo de string deixava passar o diretório vizinho: `/proj-evil`
|
|
8
|
+
// começa com `/proj` sem estar dentro dele. O caminho relativo responde a
|
|
9
|
+
// pergunta certa — está contido? — e ainda normaliza os `..` do meio.
|
|
10
|
+
const relative = path.relative(path.resolve(projectRoot), path.resolve(targetDir));
|
|
11
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
9
12
|
throw new CliError('Target path must be within the project directory', 'INVALID_PATH');
|
|
10
13
|
}
|
|
11
14
|
}
|
|
12
|
-
export async function installComponent(componentName, targetDir, config) {
|
|
13
|
-
const component = await fetchComponent(componentName, config
|
|
15
|
+
export async function installComponent(componentName, targetDir, config, options = {}) {
|
|
16
|
+
const component = await fetchComponent(componentName, config, undefined, {
|
|
17
|
+
siblingComponents: options.customPath,
|
|
18
|
+
});
|
|
14
19
|
await fs.mkdir(targetDir, { recursive: true });
|
|
15
20
|
const writtenFiles = [];
|
|
16
21
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-installer.js","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAgB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,WAAmB;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"component-installer.js","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAgB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,WAAmB;IACvE,8EAA8E;IAC9E,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnF,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,QAAQ,CAAC,kDAAkD,EAAE,cAAc,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,SAAiB,EACjB,MAAuC,EACvC,UAAoC,EAAE;IAEtC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE;QACvE,iBAAiB,EAAE,OAAO,CAAC,UAAU;KACtC,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7D,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qCAAqC;QACrC,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACnC,2BAA2B;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,eAAe,YAAY,CAAC,MAAM,2BAA2B,aAAa,GAAG,CAAC,CAAC;QAE5F,MAAM,IAAI,YAAY,CACpB,gCAAgC,aAAa,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EACnG,aAAa,CACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAA8B,EAAE,SAAiB;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEnD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve quais componentes o comando deve instalar a partir dos argumentos.
|
|
3
|
+
*
|
|
4
|
+
* Devolve uma lista vazia quando não há nada informado: nesse caso quem escolhe
|
|
5
|
+
* é o wizard (ou, sem terminal interativo, o comando falha pedindo os nomes).
|
|
6
|
+
*/
|
|
1
7
|
export declare function selectComponents(components: string[], allFlag: boolean): Promise<string[]>;
|
|
2
8
|
//# sourceMappingURL=component-selector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-selector.d.ts","sourceRoot":"","sources":["../../../src/commands/add/component-selector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"component-selector.d.ts","sourceRoot":"","sources":["../../../src/commands/add/component-selector.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhG"}
|
|
@@ -1,31 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { getAllComponentNames } from '../../commands/add/dependency-resolver.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve quais componentes o comando deve instalar a partir dos argumentos.
|
|
4
|
+
*
|
|
5
|
+
* Devolve uma lista vazia quando não há nada informado: nesse caso quem escolhe
|
|
6
|
+
* é o wizard (ou, sem terminal interativo, o comando falha pedindo os nomes).
|
|
7
|
+
*/
|
|
4
8
|
export async function selectComponents(components, allFlag) {
|
|
5
|
-
if (allFlag)
|
|
9
|
+
if (allFlag)
|
|
6
10
|
return getAllComponentNames();
|
|
7
|
-
|
|
8
|
-
if (!components?.length) {
|
|
9
|
-
return await promptForComponents();
|
|
10
|
-
}
|
|
11
|
-
return components;
|
|
12
|
-
}
|
|
13
|
-
async function promptForComponents() {
|
|
14
|
-
const allNames = await getAllComponentNames();
|
|
15
|
-
const { components: selected } = await prompts({
|
|
16
|
-
type: 'multiselect',
|
|
17
|
-
name: 'components',
|
|
18
|
-
message: 'Which components would you like to add?',
|
|
19
|
-
hint: 'Space to select. A to toggle all. Enter to submit.',
|
|
20
|
-
choices: allNames.map(name => ({
|
|
21
|
-
title: name,
|
|
22
|
-
value: name,
|
|
23
|
-
})),
|
|
24
|
-
});
|
|
25
|
-
if (!selected?.length) {
|
|
26
|
-
logger.warn('No components selected. Exiting.');
|
|
27
|
-
process.exit(0);
|
|
28
|
-
}
|
|
29
|
-
return selected;
|
|
11
|
+
return components ?? [];
|
|
30
12
|
}
|
|
31
13
|
//# sourceMappingURL=component-selector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-selector.js","sourceRoot":"","sources":["../../../src/commands/add/component-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"component-selector.js","sourceRoot":"","sources":["../../../src/commands/add/component-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAoB,EAAE,OAAgB;IAC3E,IAAI,OAAO;QAAE,OAAO,oBAAoB,EAAE,CAAC;IAC3C,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dark-mode-setup.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"dark-mode-setup.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAanD,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,MAAM,EACX,cAAc,EAAE;IAAE,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;CAAE,GACjG,OAAO,CAAC,IAAI,CAAC,CAwCf"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { logger } from '../../utils/logger.js';
|
|
2
|
+
import { withImport } from '../../utils/source-file.js';
|
|
2
3
|
import { existsSync } from 'fs';
|
|
3
4
|
import * as fsPromises from 'fs/promises';
|
|
4
5
|
import * as path from 'path';
|
|
@@ -23,17 +24,7 @@ export async function updateProvideZardWithDarkMode(cwd, resolvedConfig) {
|
|
|
23
24
|
if (!content.includes('provideAppInitializer')) {
|
|
24
25
|
content = content.replace(/import \{ (.*) \} from '@angular\/core';/, "import { $1, provideAppInitializer } from '@angular/core';");
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
let lastImportMatch = null;
|
|
28
|
-
let match;
|
|
29
|
-
while ((match = importRegex.exec(content)) !== null) {
|
|
30
|
-
lastImportMatch = match;
|
|
31
|
-
}
|
|
32
|
-
if (lastImportMatch) {
|
|
33
|
-
const insertionIndex = lastImportMatch.index + lastImportMatch[0].length;
|
|
34
|
-
const darkModeImport = getDarkModeImport(resolvedConfig.aliases?.services);
|
|
35
|
-
content = content.slice(0, insertionIndex) + darkModeImport + '\n' + content.slice(insertionIndex);
|
|
36
|
-
}
|
|
27
|
+
content = withImport(content, getDarkModeImport(resolvedConfig.aliases?.services));
|
|
37
28
|
content = content.replace(/return makeEnvironmentProviders\(\[(.*?)\]\);/s, (match, providers) => {
|
|
38
29
|
const trimmedProviders = providers.trim();
|
|
39
30
|
if (trimmedProviders) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dark-mode-setup.js","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,SAAS,iBAAiB,CAAC,aAAsB;IAC/C,OAAO,iCAAiC,aAAa,IAAI,mBAAmB,cAAc,CAAC;AAC7F,CAAC;AAED,MAAM,qBAAqB,GAAG,0DAA0D,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,GAAW,EACX,cAAkG;IAElG,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAEhG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"dark-mode-setup.js","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,SAAS,iBAAiB,CAAC,aAAsB;IAC/C,OAAO,iCAAiC,aAAa,IAAI,mBAAmB,cAAc,CAAC;AAC7F,CAAC;AAED,MAAM,qBAAqB,GAAG,0DAA0D,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,GAAW,EACX,cAAkG;IAElG,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAEhG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gDAAgD,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC/F,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,oCAAoC,qBAAqB,KAAK,gBAAgB,KAAK,CAAC;QAC7F,CAAC;QACD,OAAO,oCAAoC,qBAAqB,KAAK,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -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":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,GAAG,SAwEZ,CAAC"}
|
package/commands/add/index.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { installComponent, validateTargetPath } from '../../commands/add/component-installer.js';
|
|
2
2
|
import { selectComponents } from '../../commands/add/component-selector.js';
|
|
3
3
|
import { updateProvideZardWithDarkMode } from '../../commands/add/dark-mode-setup.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getAllComponentNames, getTargetDir, resolveDependencies, } from '../../commands/add/dependency-resolver.js';
|
|
5
|
+
import { runAddWizard } from '../../commands/add/wizard.js';
|
|
6
|
+
import { indexHtmlFor } from '../../commands/init/project-kind.js';
|
|
5
7
|
import { injectThemeScript } from '../../commands/init/theme-loader.js';
|
|
8
|
+
import { isInteractive, printReport, WizardCancelledError } from '../../ui/index.js';
|
|
6
9
|
import { getConfig, resolveConfigPaths } from '../../utils/config.js';
|
|
7
10
|
import { CliError } from '../../utils/errors.js';
|
|
8
11
|
import { getProjectInfo } from '../../utils/get-project-info.js';
|
|
9
12
|
import { logger, spinner } from '../../utils/logger.js';
|
|
10
|
-
import {
|
|
11
|
-
import chalk from 'chalk';
|
|
13
|
+
import { filterInstalledPackages, installPackagesWithRetry } from '../../utils/package-manager.js';
|
|
12
14
|
import { Command } from 'commander';
|
|
13
15
|
import { existsSync } from 'node:fs';
|
|
14
16
|
import * as path from 'node:path';
|
|
15
|
-
import prompts from 'prompts';
|
|
16
17
|
export const add = new Command()
|
|
17
18
|
.name('add')
|
|
18
19
|
.description('add a component to your project')
|
|
@@ -31,33 +32,104 @@ export const add = new Command()
|
|
|
31
32
|
const config = await loadConfiguration(cwd);
|
|
32
33
|
const projectInfo = await validateProject(cwd);
|
|
33
34
|
const resolvedConfig = await resolveConfigPaths(cwd, config);
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
const preselected = await selectComponents(components, options.all);
|
|
36
|
+
warnOnPrereleaseAngular(projectInfo.angularVersionRaw);
|
|
37
|
+
const actions = {
|
|
38
|
+
loadNames: () => getAllComponentNames(),
|
|
39
|
+
resolve: async (names) => {
|
|
40
|
+
const { componentsToInstall, dependenciesToInstall } = await resolveDependencies(names, resolvedConfig, cwd, options);
|
|
41
|
+
return {
|
|
42
|
+
components: componentsToInstall,
|
|
43
|
+
dependencies: resolveCompatibleVersions(dependenciesToInstall, projectInfo.angularVersion),
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
installDependencies: (packages) => installDependencies(packages, cwd, config.packageManager),
|
|
47
|
+
installComponent: (component) => installComponent(component.name, getTargetDir(component, resolvedConfig, cwd, options.path), resolvedConfig, {
|
|
48
|
+
customPath: Boolean(options.path),
|
|
49
|
+
}),
|
|
50
|
+
setupDarkMode: async (indexHtml) => {
|
|
51
|
+
await injectThemeScript(cwd, indexHtml);
|
|
52
|
+
await updateProvideZardWithDarkMode(cwd, resolvedConfig);
|
|
53
|
+
},
|
|
54
|
+
defaultIndexHtml: indexHtmlFor(config.projectType, config.baseUrl),
|
|
55
|
+
};
|
|
56
|
+
if (!isInteractive()) {
|
|
57
|
+
await runHeadless(preselected, options, actions);
|
|
40
58
|
return;
|
|
41
59
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
60
|
+
try {
|
|
61
|
+
const { installed, logs } = await runAddWizard({
|
|
62
|
+
preselected,
|
|
63
|
+
skipConfirmation: options.yes,
|
|
64
|
+
...actions,
|
|
65
|
+
});
|
|
66
|
+
reportSuccess(installed, logs);
|
|
45
67
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error instanceof WizardCancelledError) {
|
|
70
|
+
printReport({ status: 'cancelled', headline: error.message, notes: ['No files were written.'] });
|
|
49
71
|
process.exit(0);
|
|
50
72
|
}
|
|
73
|
+
throw error;
|
|
51
74
|
}
|
|
52
|
-
await installDependencies(resolvedDeps, cwd, config.packageManager);
|
|
53
|
-
await installComponents(componentsToInstall, cwd, resolvedConfig, options);
|
|
54
|
-
const isDarkModeBeingInstalled = componentsToInstall.some(c => c.name === 'dark-mode');
|
|
55
|
-
if (isDarkModeBeingInstalled) {
|
|
56
|
-
await setupDarkMode(cwd, resolvedConfig);
|
|
57
|
-
}
|
|
58
|
-
logger.break();
|
|
59
|
-
logger.success('Done!');
|
|
60
75
|
});
|
|
76
|
+
/**
|
|
77
|
+
* Caminho sem UI — CI, pipes e terminais não interativos.
|
|
78
|
+
*
|
|
79
|
+
* Sem alguém para escolher na lista, os componentes precisam vir por argumento
|
|
80
|
+
* ou via `--all`; a confirmação é dispensada porque não há como respondê-la.
|
|
81
|
+
*/
|
|
82
|
+
async function runHeadless(preselected, options, actions) {
|
|
83
|
+
if (!preselected.length) {
|
|
84
|
+
throw new CliError('No components specified. Pass the component names or --all when running without an interactive terminal.', 'NO_COMPONENTS');
|
|
85
|
+
}
|
|
86
|
+
const resolveSpinner = spinner('Resolving components...').start();
|
|
87
|
+
const { components, dependencies } = await actions.resolve(preselected);
|
|
88
|
+
resolveSpinner.stop();
|
|
89
|
+
if (components.length === 0) {
|
|
90
|
+
logger.info('All components already installed.');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (dependencies.length) {
|
|
94
|
+
const depsSpinner = spinner('Installing dependencies...').start();
|
|
95
|
+
await actions.installDependencies(dependencies);
|
|
96
|
+
depsSpinner.succeed('Dependencies installed');
|
|
97
|
+
}
|
|
98
|
+
const installed = [];
|
|
99
|
+
const failed = [];
|
|
100
|
+
for (const component of components) {
|
|
101
|
+
const componentSpinner = spinner(`Installing ${component.name}...`).start();
|
|
102
|
+
try {
|
|
103
|
+
await actions.installComponent(component);
|
|
104
|
+
installed.push(component.name);
|
|
105
|
+
componentSpinner.succeed(component.name);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
failed.push(component.name);
|
|
109
|
+
componentSpinner.fail(component.name);
|
|
110
|
+
logger.debug(`Failed to install ${component.name}: ${error instanceof Error ? error.message : error}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (components.some(component => component.name === 'dark-mode')) {
|
|
114
|
+
logger.warn('Dark mode needs an index.html path; run `zard-cli add dark-mode` interactively to configure it.');
|
|
115
|
+
}
|
|
116
|
+
if (failed.length) {
|
|
117
|
+
throw new CliError(`Failed to install: ${failed.join(', ')}`, 'INSTALL_FAILED');
|
|
118
|
+
}
|
|
119
|
+
reportSuccess(installed, []);
|
|
120
|
+
}
|
|
121
|
+
function reportSuccess(installed, logs) {
|
|
122
|
+
if (!installed.length) {
|
|
123
|
+
printReport({ status: 'success', headline: 'All components are already installed.', logs });
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
printReport({
|
|
127
|
+
status: 'success',
|
|
128
|
+
headline: `Installed ${installed.length} component${installed.length > 1 ? 's' : ''}.`,
|
|
129
|
+
items: [...installed],
|
|
130
|
+
logs,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
61
133
|
function validateWorkingDirectory(cwd) {
|
|
62
134
|
if (!existsSync(cwd)) {
|
|
63
135
|
throw new CliError(`The path ${cwd} does not exist. Please try again.`, 'INVALID_CWD');
|
|
@@ -77,14 +149,10 @@ async function validateProject(cwd) {
|
|
|
77
149
|
}
|
|
78
150
|
return projectInfo;
|
|
79
151
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
message: `Ready to install ${componentsCount} component(s) and ${depsCount} dependencies. Proceed?`,
|
|
85
|
-
initial: true,
|
|
86
|
-
});
|
|
87
|
-
return proceed;
|
|
152
|
+
function warnOnPrereleaseAngular(angularVersionRaw) {
|
|
153
|
+
if (angularVersionRaw && /-(rc|next|canary)/.test(angularVersionRaw)) {
|
|
154
|
+
logger.warn(`You are using a pre-release version of Angular (${angularVersionRaw}). Some dependencies may have compatibility issues.`);
|
|
155
|
+
}
|
|
88
156
|
}
|
|
89
157
|
const ANGULAR_VERSION_PACKAGES = ['embla-carousel-angular'];
|
|
90
158
|
function resolveCompatibleVersions(dependencies, angularVersion) {
|
|
@@ -99,61 +167,13 @@ function resolveCompatibleVersions(dependencies, angularVersion) {
|
|
|
99
167
|
async function installDependencies(packages, cwd, packageManager) {
|
|
100
168
|
if (packages.length === 0)
|
|
101
169
|
return;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
depsSpinner.text = 'Retrying with --legacy-peer-deps...';
|
|
108
|
-
await installPackages(packages, cwd, packageManager, false, true);
|
|
109
|
-
}
|
|
110
|
-
depsSpinner.succeed('Dependencies installed');
|
|
111
|
-
}
|
|
112
|
-
async function installComponents(componentsToInstall, cwd, resolvedConfig, options) {
|
|
113
|
-
const installSpinner = spinner('Installing components...').start();
|
|
114
|
-
const installed = [];
|
|
115
|
-
const failed = [];
|
|
116
|
-
for (const component of componentsToInstall) {
|
|
117
|
-
try {
|
|
118
|
-
installSpinner.text = `Installing ${component.name}...`;
|
|
119
|
-
const targetDir = getTargetDir(component, resolvedConfig, cwd, options.path);
|
|
120
|
-
await installComponent(component.name, targetDir, resolvedConfig);
|
|
121
|
-
installed.push(component.name);
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
failed.push(component.name);
|
|
125
|
-
logger.debug(`Failed to install ${component.name}: ${error instanceof Error ? error.message : error}`);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
if (failed.length > 0) {
|
|
129
|
-
installSpinner.fail(`Failed to install: ${failed.join(', ')}`);
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
installSpinner.succeed(`Installed ${installed.length} component${installed.length > 1 ? 's' : ''}`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
async function setupDarkMode(cwd, resolvedConfig) {
|
|
136
|
-
logger.break();
|
|
137
|
-
logger.info('Dark mode requires additional configuration.');
|
|
138
|
-
const { indexFile } = await prompts({
|
|
139
|
-
type: 'text',
|
|
140
|
-
name: 'indexFile',
|
|
141
|
-
message: `Where is your ${chalk.cyan('index.html')} file?`,
|
|
142
|
-
initial: 'src/index.html',
|
|
143
|
-
});
|
|
144
|
-
if (!indexFile) {
|
|
145
|
-
logger.warn('Skipping dark mode script injection.');
|
|
170
|
+
// Um projeto já inicializado costuma ter todas elas: sem o filtro, cada `add`
|
|
171
|
+
// pagaria uma revalidação completa da árvore para não instalar nada.
|
|
172
|
+
const missing = await filterInstalledPackages(packages, cwd);
|
|
173
|
+
if (missing.length === 0) {
|
|
174
|
+
logger.debug(`Dependencies already installed: ${packages.join(', ')}`);
|
|
146
175
|
return;
|
|
147
176
|
}
|
|
148
|
-
|
|
149
|
-
try {
|
|
150
|
-
await injectThemeScript(cwd, indexFile);
|
|
151
|
-
await updateProvideZardWithDarkMode(cwd, resolvedConfig);
|
|
152
|
-
darkModeSpinner.succeed('Dark mode configured');
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
darkModeSpinner.fail('Failed to configure dark mode');
|
|
156
|
-
logger.debug(`Dark mode error: ${error instanceof Error ? error.message : error}`);
|
|
157
|
-
}
|
|
177
|
+
await installPackagesWithRetry(missing, cwd, packageManager, false);
|
|
158
178
|
}
|
|
159
179
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ComponentMeta } from '../../commands/add/dependency-resolver.js';
|
|
2
|
+
import { type LogRecord } from '../../ui/index.js';
|
|
3
|
+
export interface AddWizardOptions {
|
|
4
|
+
/** Componentes já informados na linha de comando — pulam a seleção. */
|
|
5
|
+
readonly preselected: readonly string[];
|
|
6
|
+
/** Carrega os nomes disponíveis; só é chamado quando há seleção a fazer. */
|
|
7
|
+
loadNames(): Promise<string[]>;
|
|
8
|
+
resolve(names: string[]): Promise<{
|
|
9
|
+
components: ComponentMeta[];
|
|
10
|
+
dependencies: string[];
|
|
11
|
+
}>;
|
|
12
|
+
/** Pula a confirmação (`--yes`). */
|
|
13
|
+
readonly skipConfirmation: boolean;
|
|
14
|
+
installDependencies(packages: string[]): Promise<void>;
|
|
15
|
+
installComponent(component: ComponentMeta): Promise<void>;
|
|
16
|
+
/** Só é chamado quando dark-mode entra na instalação. */
|
|
17
|
+
setupDarkMode(indexHtml: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Onde o index.html deve estar, segundo o tipo de projeto configurado.
|
|
20
|
+
*
|
|
21
|
+
* Um `src/index.html` fixo só existe no app Angular único: num workspace ele
|
|
22
|
+
* está sob `apps/<app>/`, e no Analog é a página de entrada do Vite, na raiz.
|
|
23
|
+
*/
|
|
24
|
+
readonly defaultIndexHtml: string;
|
|
25
|
+
}
|
|
26
|
+
export interface AddWizardResult {
|
|
27
|
+
readonly installed: readonly string[];
|
|
28
|
+
readonly logs: readonly LogRecord[];
|
|
29
|
+
}
|
|
30
|
+
export declare function runAddWizard(options: AddWizardOptions): Promise<AddWizardResult>;
|
|
31
|
+
//# sourceMappingURL=wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../../src/commands/add/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAuBL,KAAK,SAAS,EAKf,MAAM,kBAAkB,CAAC;AA6B1B,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,4EAA4E;IAC5E,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,aAAa,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC3F,oCAAoC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,yDAAyD;IACzD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;CACrC;AAID,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwKtF"}
|