@angular/cli 21.0.0-next.0 → 21.0.0-next.10
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/lib/cli/index.js +1 -0
- package/lib/cli/index.js.map +1 -0
- package/lib/code-examples.db +0 -0
- package/lib/config/schema.json +276 -51
- package/lib/config/workspace-schema.d.ts +57 -2
- package/lib/config/workspace-schema.js +23 -2
- package/lib/config/workspace-schema.js.map +1 -0
- package/lib/init.js +1 -0
- package/lib/init.js.map +1 -0
- package/package.json +24 -23
- package/src/analytics/analytics-collector.js +1 -0
- package/src/analytics/analytics-collector.js.map +1 -0
- package/src/analytics/analytics-parameters.js +1 -0
- package/src/analytics/analytics-parameters.js.map +1 -0
- package/src/analytics/analytics.js +1 -0
- package/src/analytics/analytics.js.map +1 -0
- package/src/command-builder/architect-base-command-module.js +1 -0
- package/src/command-builder/architect-base-command-module.js.map +1 -0
- package/src/command-builder/architect-command-module.js +21 -7
- package/src/command-builder/architect-command-module.js.map +1 -0
- package/src/command-builder/command-module.js +1 -0
- package/src/command-builder/command-module.js.map +1 -0
- package/src/command-builder/command-runner.js +2 -2
- package/src/command-builder/command-runner.js.map +1 -0
- package/src/command-builder/schematics-command-module.js +8 -2
- package/src/command-builder/schematics-command-module.js.map +1 -0
- package/src/command-builder/utilities/command.js +1 -0
- package/src/command-builder/utilities/command.js.map +1 -0
- package/src/command-builder/utilities/json-help.js +1 -0
- package/src/command-builder/utilities/json-help.js.map +1 -0
- package/src/command-builder/utilities/json-schema.d.ts +13 -1
- package/src/command-builder/utilities/json-schema.js +180 -96
- package/src/command-builder/utilities/json-schema.js.map +1 -0
- package/src/command-builder/utilities/normalize-options-middleware.js +1 -0
- package/src/command-builder/utilities/normalize-options-middleware.js.map +1 -0
- package/src/command-builder/utilities/schematic-engine-host.js +5 -6
- package/src/command-builder/utilities/schematic-engine-host.js.map +1 -0
- package/src/command-builder/utilities/schematic-workflow.js +1 -0
- package/src/command-builder/utilities/schematic-workflow.js.map +1 -0
- package/src/commands/add/cli.d.ts +2 -1
- package/src/commands/add/cli.js +179 -94
- package/src/commands/add/cli.js.map +1 -0
- package/src/commands/analytics/cli.js +1 -0
- package/src/commands/analytics/cli.js.map +1 -0
- package/src/commands/analytics/info/cli.js +1 -0
- package/src/commands/analytics/info/cli.js.map +1 -0
- package/src/commands/analytics/settings/cli.js +1 -0
- package/src/commands/analytics/settings/cli.js.map +1 -0
- package/src/commands/build/cli.js +1 -0
- package/src/commands/build/cli.js.map +1 -0
- package/src/commands/cache/clean/cli.js +1 -0
- package/src/commands/cache/clean/cli.js.map +1 -0
- package/src/commands/cache/cli.js +1 -0
- package/src/commands/cache/cli.js.map +1 -0
- package/src/commands/cache/info/cli.js +36 -11
- package/src/commands/cache/info/cli.js.map +1 -0
- package/src/commands/cache/settings/cli.js +1 -0
- package/src/commands/cache/settings/cli.js.map +1 -0
- package/src/commands/cache/utilities.js +1 -0
- package/src/commands/cache/utilities.js.map +1 -0
- package/src/commands/command-config.js +1 -0
- package/src/commands/command-config.js.map +1 -0
- package/src/commands/completion/cli.js +1 -0
- package/src/commands/completion/cli.js.map +1 -0
- package/src/commands/config/cli.js +1 -0
- package/src/commands/config/cli.js.map +1 -0
- package/src/commands/deploy/cli.js +1 -0
- package/src/commands/deploy/cli.js.map +1 -0
- package/src/commands/e2e/cli.js +1 -0
- package/src/commands/e2e/cli.js.map +1 -0
- package/src/commands/extract-i18n/cli.js +1 -0
- package/src/commands/extract-i18n/cli.js.map +1 -0
- package/src/commands/generate/cli.js +1 -0
- package/src/commands/generate/cli.js.map +1 -0
- package/src/commands/lint/cli.js +1 -0
- package/src/commands/lint/cli.js.map +1 -0
- package/src/commands/make-this-awesome/cli.js +1 -0
- package/src/commands/make-this-awesome/cli.js.map +1 -0
- package/src/commands/mcp/cli.js +1 -0
- package/src/commands/mcp/cli.js.map +1 -0
- package/src/commands/mcp/constants.d.ts +1 -1
- package/src/commands/mcp/constants.js +2 -1
- package/src/commands/mcp/constants.js.map +1 -0
- package/src/commands/mcp/mcp-server.d.ts +3 -3
- package/src/commands/mcp/mcp-server.js +40 -4
- package/src/commands/mcp/mcp-server.js.map +1 -0
- package/src/commands/mcp/resources/ai-tutor.md +627 -0
- package/src/commands/mcp/resources/instructions.js +1 -0
- package/src/commands/mcp/resources/instructions.js.map +1 -0
- package/src/commands/mcp/tools/ai-tutor.d.ts +8 -0
- package/src/commands/mcp/tools/ai-tutor.js +62 -0
- package/src/commands/mcp/tools/ai-tutor.js.map +1 -0
- package/src/commands/mcp/tools/best-practices.d.ts +4 -1
- package/src/commands/mcp/tools/best-practices.js +167 -22
- package/src/commands/mcp/tools/best-practices.js.map +1 -0
- package/src/commands/mcp/tools/doc-search.d.ts +20 -1
- package/src/commands/mcp/tools/doc-search.js +186 -67
- package/src/commands/mcp/tools/doc-search.js.map +1 -0
- package/src/commands/mcp/tools/examples.d.ts +35 -1
- package/src/commands/mcp/tools/examples.js +414 -56
- package/src/commands/mcp/tools/examples.js.map +1 -0
- package/src/commands/mcp/tools/modernize.js +29 -27
- package/src/commands/mcp/tools/modernize.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/analyze_for_unsupported_zone_uses.d.ts +17 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/analyze_for_unsupported_zone_uses.js +62 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/analyze_for_unsupported_zone_uses.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate_single_file.d.ts +12 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate_single_file.js +73 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate_single_file.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate_test_file.d.ts +11 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate_test_file.js +106 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate_test_file.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/prompts.d.ts +15 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/prompts.js +238 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/prompts.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/send_debug_message.d.ts +10 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/send_debug_message.js +20 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/send_debug_message.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts_utils.d.ts +36 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts_utils.js +136 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts_utils.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/types.d.ts +13 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/types.js +10 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/types.js.map +1 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.d.ts +14 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js +228 -0
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js.map +1 -0
- package/src/commands/mcp/tools/projects.d.ts +75 -16
- package/src/commands/mcp/tools/projects.js +427 -30
- package/src/commands/mcp/tools/projects.js.map +1 -0
- package/src/commands/mcp/tools/tool-registry.d.ts +2 -1
- package/src/commands/mcp/tools/tool-registry.js +4 -2
- package/src/commands/mcp/tools/tool-registry.js.map +1 -0
- package/src/commands/new/cli.js +2 -0
- package/src/commands/new/cli.js.map +1 -0
- package/src/commands/run/cli.js +1 -0
- package/src/commands/run/cli.js.map +1 -0
- package/src/commands/serve/cli.js +1 -0
- package/src/commands/serve/cli.js.map +1 -0
- package/src/commands/test/cli.js +1 -0
- package/src/commands/test/cli.js.map +1 -0
- package/src/commands/update/cli.js +1 -0
- package/src/commands/update/cli.js.map +1 -0
- package/src/commands/update/schematic/index.js +1 -0
- package/src/commands/update/schematic/index.js.map +1 -0
- package/src/commands/update/schematic/schema.d.ts +0 -1
- package/src/commands/update/schematic/schema.js +1 -1
- package/src/commands/update/schematic/schema.js.map +1 -0
- package/src/commands/update/schematic/schema.json +1 -1
- package/src/commands/version/cli.d.ts +3 -7
- package/src/commands/version/cli.js +50 -49
- package/src/commands/version/cli.js.map +1 -0
- package/src/commands/version/version-info.d.ts +28 -10
- package/src/commands/version/version-info.js +34 -50
- package/src/commands/version/version-info.js.map +1 -0
- package/src/package-managers/discovery.d.ts +23 -0
- package/src/package-managers/discovery.js +110 -0
- package/src/package-managers/discovery.js.map +1 -0
- package/src/package-managers/error.d.ts +31 -0
- package/src/package-managers/error.js +41 -0
- package/src/package-managers/error.js.map +1 -0
- package/src/package-managers/factory.d.ts +25 -0
- package/src/package-managers/factory.js +123 -0
- package/src/package-managers/factory.js.map +1 -0
- package/src/package-managers/host.d.ts +64 -0
- package/src/package-managers/host.js +69 -0
- package/src/package-managers/host.js.map +1 -0
- package/src/package-managers/index.d.ts +12 -0
- package/src/package-managers/index.js +15 -0
- package/src/package-managers/index.js.map +1 -0
- package/src/package-managers/logger.d.ts +27 -0
- package/src/package-managers/logger.js +10 -0
- package/src/package-managers/logger.js.map +1 -0
- package/src/package-managers/package-manager-descriptor.d.ts +204 -0
- package/src/package-managers/package-manager-descriptor.js +147 -0
- package/src/package-managers/package-manager-descriptor.js.map +1 -0
- package/src/package-managers/package-manager.d.ts +144 -0
- package/src/package-managers/package-manager.js +304 -0
- package/src/package-managers/package-manager.js.map +1 -0
- package/src/package-managers/package-metadata.d.ts +87 -0
- package/src/package-managers/package-metadata.js +10 -0
- package/src/package-managers/package-metadata.js.map +1 -0
- package/src/package-managers/package-tree.d.ts +23 -0
- package/src/package-managers/package-tree.js +10 -0
- package/src/package-managers/package-tree.js.map +1 -0
- package/src/package-managers/parsers.d.ts +92 -0
- package/src/package-managers/parsers.js +234 -0
- package/src/package-managers/parsers.js.map +1 -0
- package/src/package-managers/testing/mock-host.d.ts +26 -0
- package/src/package-managers/testing/mock-host.js +53 -0
- package/src/package-managers/testing/mock-host.js.map +1 -0
- package/src/utilities/color.js +1 -0
- package/src/utilities/color.js.map +1 -0
- package/src/utilities/completion.js +1 -0
- package/src/utilities/completion.js.map +1 -0
- package/src/utilities/config.js +1 -0
- package/src/utilities/config.js.map +1 -0
- package/src/utilities/environment-options.js +1 -0
- package/src/utilities/environment-options.js.map +1 -0
- package/src/utilities/eol.js +1 -0
- package/src/utilities/eol.js.map +1 -0
- package/src/utilities/error.js +1 -0
- package/src/utilities/error.js.map +1 -0
- package/src/utilities/find-up.js +1 -0
- package/src/utilities/find-up.js.map +1 -0
- package/src/utilities/json-file.js +1 -0
- package/src/utilities/json-file.js.map +1 -0
- package/src/utilities/log-file.js +1 -0
- package/src/utilities/log-file.js.map +1 -0
- package/src/utilities/memoize.js +1 -0
- package/src/utilities/memoize.js.map +1 -0
- package/src/utilities/package-manager.d.ts +12 -0
- package/src/utilities/package-manager.js +52 -35
- package/src/utilities/package-manager.js.map +1 -0
- package/src/utilities/package-metadata.js +1 -0
- package/src/utilities/package-metadata.js.map +1 -0
- package/src/utilities/package-tree.js +1 -0
- package/src/utilities/package-tree.js.map +1 -0
- package/src/utilities/project.js +1 -0
- package/src/utilities/project.js.map +1 -0
- package/src/utilities/prompt.js +1 -0
- package/src/utilities/prompt.js.map +1 -0
- package/src/utilities/tty.js +1 -0
- package/src/utilities/tty.js.map +1 -0
- package/src/utilities/version.js +2 -1
- package/src/utilities/version.js.map +1 -0
|
@@ -11,15 +11,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.LIST_PROJECTS_TOOL = void 0;
|
|
14
|
+
const promises_1 = require("node:fs/promises");
|
|
14
15
|
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
const node_url_1 = require("node:url");
|
|
17
|
+
const semver_1 = __importDefault(require("semver"));
|
|
15
18
|
const zod_1 = __importDefault(require("zod"));
|
|
19
|
+
const config_1 = require("../../../utilities/config");
|
|
20
|
+
const error_1 = require("../../../utilities/error");
|
|
16
21
|
const tool_registry_1 = require("./tool-registry");
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
// Single source of truth for what constitutes a valid style language.
|
|
23
|
+
const styleLanguageSchema = zod_1.default.enum(['css', 'scss', 'sass', 'less']);
|
|
24
|
+
const VALID_STYLE_LANGUAGES = styleLanguageSchema.options;
|
|
25
|
+
// Explicitly ordered for the file system search heuristic.
|
|
26
|
+
const STYLE_LANGUAGE_SEARCH_ORDER = ['scss', 'sass', 'less', 'css'];
|
|
27
|
+
function isStyleLanguage(value) {
|
|
28
|
+
return (typeof value === 'string' && VALID_STYLE_LANGUAGES.includes(value));
|
|
29
|
+
}
|
|
30
|
+
function getStyleLanguageFromExtension(extension) {
|
|
31
|
+
const style = extension.toLowerCase().substring(1); // remove leading '.'
|
|
32
|
+
return isStyleLanguage(style) ? style : undefined;
|
|
33
|
+
}
|
|
34
|
+
const listProjectsOutputSchema = {
|
|
35
|
+
workspaces: zod_1.default.array(zod_1.default.object({
|
|
36
|
+
path: zod_1.default.string().describe('The path to the `angular.json` file for this workspace.'),
|
|
37
|
+
frameworkVersion: zod_1.default
|
|
38
|
+
.string()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe('The major version of the Angular framework (`@angular/core`) in this workspace, if found.'),
|
|
23
41
|
projects: zod_1.default.array(zod_1.default.object({
|
|
24
42
|
name: zod_1.default
|
|
25
43
|
.string()
|
|
@@ -28,6 +46,10 @@ exports.LIST_PROJECTS_TOOL = (0, tool_registry_1.declareTool)({
|
|
|
28
46
|
.enum(['application', 'library'])
|
|
29
47
|
.optional()
|
|
30
48
|
.describe(`The type of the project, either 'application' or 'library'.`),
|
|
49
|
+
builder: zod_1.default
|
|
50
|
+
.string()
|
|
51
|
+
.optional()
|
|
52
|
+
.describe('The primary builder for the project, typically from the "build" target.'),
|
|
31
53
|
root: zod_1.default
|
|
32
54
|
.string()
|
|
33
55
|
.describe('The root directory of the project, relative to the workspace root.'),
|
|
@@ -39,16 +61,399 @@ exports.LIST_PROJECTS_TOOL = (0, tool_registry_1.declareTool)({
|
|
|
39
61
|
.optional()
|
|
40
62
|
.describe('The prefix to use for component selectors.' +
|
|
41
63
|
` For example, a prefix of 'app' would result in selectors like '<app-my-component>'.`),
|
|
64
|
+
unitTestFramework: zod_1.default
|
|
65
|
+
.enum(['jasmine', 'jest', 'vitest', 'unknown'])
|
|
66
|
+
.optional()
|
|
67
|
+
.describe('The unit test framework used by the project, such as Jasmine, Jest, or Vitest. ' +
|
|
68
|
+
'This field is critical for generating correct and idiomatic unit tests. ' +
|
|
69
|
+
'When writing or modifying tests, you MUST use the APIs corresponding to this framework.'),
|
|
70
|
+
styleLanguage: styleLanguageSchema
|
|
71
|
+
.optional()
|
|
72
|
+
.describe('The default style language for the project (e.g., "scss"). ' +
|
|
73
|
+
'This determines the file extension for new component styles.'),
|
|
42
74
|
})),
|
|
43
|
-
},
|
|
75
|
+
})),
|
|
76
|
+
parsingErrors: zod_1.default
|
|
77
|
+
.array(zod_1.default.object({
|
|
78
|
+
filePath: zod_1.default.string().describe('The path to the file that could not be parsed.'),
|
|
79
|
+
message: zod_1.default.string().describe('The error message detailing why parsing failed.'),
|
|
80
|
+
}))
|
|
81
|
+
.default([])
|
|
82
|
+
.describe('A list of files that looked like workspaces but failed to parse.'),
|
|
83
|
+
versioningErrors: zod_1.default
|
|
84
|
+
.array(zod_1.default.object({
|
|
85
|
+
filePath: zod_1.default
|
|
86
|
+
.string()
|
|
87
|
+
.describe('The path to the workspace `angular.json` for which versioning failed.'),
|
|
88
|
+
message: zod_1.default.string().describe('The error message detailing why versioning failed.'),
|
|
89
|
+
}))
|
|
90
|
+
.default([])
|
|
91
|
+
.describe('A list of workspaces for which the framework version could not be determined.'),
|
|
92
|
+
};
|
|
93
|
+
exports.LIST_PROJECTS_TOOL = (0, tool_registry_1.declareTool)({
|
|
94
|
+
name: 'list_projects',
|
|
95
|
+
title: 'List Angular Projects',
|
|
96
|
+
description: `
|
|
97
|
+
<Purpose>
|
|
98
|
+
Provides a comprehensive overview of all Angular workspaces and projects within the repository.
|
|
99
|
+
It is essential to use this tool as a first step before performing any project-specific actions to understand the available projects,
|
|
100
|
+
their types, and their locations.
|
|
101
|
+
</Purpose>
|
|
102
|
+
<Use Cases>
|
|
103
|
+
* Finding the correct project name to use in other commands (e.g., \`ng generate component my-comp --project=my-app\`).
|
|
104
|
+
* Identifying the \`root\` and \`sourceRoot\` of a project to read, analyze, or modify its files.
|
|
105
|
+
* Determining a project's unit test framework (\`unitTestFramework\`) before writing or modifying tests.
|
|
106
|
+
* Identifying the project's style language (\`styleLanguage\`) to use the correct file extension (e.g., \`.scss\`).
|
|
107
|
+
* Getting the \`selectorPrefix\` for a project before generating a new component to ensure it follows conventions.
|
|
108
|
+
* Identifying the major version of the Angular framework for each workspace, which is crucial for monorepos.
|
|
109
|
+
* Determining a project's primary function by inspecting its builder (e.g., '@angular-devkit/build-angular:browser' for an application).
|
|
110
|
+
</Use Cases>
|
|
111
|
+
<Operational Notes>
|
|
112
|
+
* **Working Directory:** Shell commands for a project (like \`ng generate\`) **MUST**
|
|
113
|
+
be executed from the parent directory of the \`path\` field for the relevant workspace.
|
|
114
|
+
* **Unit Testing:** The \`unitTestFramework\` field tells you which testing API to use (e.g., Jasmine, Jest).
|
|
115
|
+
If the value is 'unknown', you **MUST** inspect the project's configuration files
|
|
116
|
+
(e.g., \`karma.conf.js\`, \`jest.config.js\`, or the 'test' target in \`angular.json\`) to determine the
|
|
117
|
+
framework before generating tests.
|
|
118
|
+
* **Disambiguation:** A monorepo may contain multiple workspaces (e.g., for different applications or even in output directories).
|
|
119
|
+
Use the \`path\` of each workspace to understand its context and choose the correct project.
|
|
120
|
+
</Operational Notes>`,
|
|
121
|
+
outputSchema: listProjectsOutputSchema,
|
|
44
122
|
isReadOnly: true,
|
|
45
123
|
isLocalOnly: true,
|
|
46
|
-
shouldRegister: (context) => !!context.workspace,
|
|
47
124
|
factory: createListProjectsHandler,
|
|
48
125
|
});
|
|
49
|
-
|
|
126
|
+
const EXCLUDED_DIRS = new Set(['node_modules', 'dist', 'out', 'coverage']);
|
|
127
|
+
/**
|
|
128
|
+
* Iteratively finds all 'angular.json' files with controlled concurrency and directory exclusions.
|
|
129
|
+
* This non-recursive implementation is suitable for very large directory trees,
|
|
130
|
+
* prevents file descriptor exhaustion (`EMFILE` errors), and handles symbolic link loops.
|
|
131
|
+
* @param rootDir The directory to start the search from.
|
|
132
|
+
* @returns An async generator that yields the full path of each found 'angular.json' file.
|
|
133
|
+
*/
|
|
134
|
+
async function* findAngularJsonFiles(rootDir) {
|
|
135
|
+
const CONCURRENCY_LIMIT = 50;
|
|
136
|
+
const queue = [rootDir];
|
|
137
|
+
const seenInodes = new Set();
|
|
138
|
+
try {
|
|
139
|
+
const rootStats = await (0, promises_1.stat)(rootDir);
|
|
140
|
+
seenInodes.add(rootStats.ino);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
(0, error_1.assertIsError)(error);
|
|
144
|
+
if (error.code === 'EACCES' || error.code === 'EPERM' || error.code === 'ENOENT') {
|
|
145
|
+
return; // Cannot access root, so there's nothing to do.
|
|
146
|
+
}
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
while (queue.length > 0) {
|
|
150
|
+
const batch = queue.splice(0, CONCURRENCY_LIMIT);
|
|
151
|
+
const foundFilesInBatch = [];
|
|
152
|
+
const promises = batch.map(async (dir) => {
|
|
153
|
+
try {
|
|
154
|
+
const entries = await (0, promises_1.readdir)(dir, { withFileTypes: true });
|
|
155
|
+
const subdirectories = [];
|
|
156
|
+
for (const entry of entries) {
|
|
157
|
+
const fullPath = node_path_1.default.join(dir, entry.name);
|
|
158
|
+
if (entry.isDirectory()) {
|
|
159
|
+
// Exclude dot-directories, build/cache directories, and node_modules
|
|
160
|
+
if (entry.name.startsWith('.') || EXCLUDED_DIRS.has(entry.name)) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
// Check for symbolic link loops
|
|
164
|
+
try {
|
|
165
|
+
const entryStats = await (0, promises_1.stat)(fullPath);
|
|
166
|
+
if (seenInodes.has(entryStats.ino)) {
|
|
167
|
+
continue; // Already visited this directory (symlink loop), skip.
|
|
168
|
+
}
|
|
169
|
+
seenInodes.add(entryStats.ino);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// Ignore errors from stat (e.g., broken symlinks)
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
subdirectories.push(fullPath);
|
|
176
|
+
}
|
|
177
|
+
else if (entry.name === 'angular.json') {
|
|
178
|
+
foundFilesInBatch.push(fullPath);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return subdirectories;
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
(0, error_1.assertIsError)(error);
|
|
185
|
+
if (error.code === 'EACCES' || error.code === 'EPERM') {
|
|
186
|
+
return []; // Silently ignore permission errors.
|
|
187
|
+
}
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
const nestedSubdirs = await Promise.all(promises);
|
|
192
|
+
queue.push(...nestedSubdirs.flat());
|
|
193
|
+
yield* foundFilesInBatch;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Searches upwards from a starting directory to find the version of '@angular/core'.
|
|
198
|
+
* It caches results to avoid redundant lookups.
|
|
199
|
+
* @param startDir The directory to start the search from.
|
|
200
|
+
* @param cache A map to store cached results.
|
|
201
|
+
* @param searchRoot The directory at which to stop the search.
|
|
202
|
+
* @returns The major version of '@angular/core' as a string, otherwise undefined.
|
|
203
|
+
*/
|
|
204
|
+
async function findAngularCoreVersion(startDir, cache, searchRoot) {
|
|
205
|
+
let currentDir = startDir;
|
|
206
|
+
const dirsToCache = [];
|
|
207
|
+
while (currentDir) {
|
|
208
|
+
dirsToCache.push(currentDir);
|
|
209
|
+
if (cache.has(currentDir)) {
|
|
210
|
+
const cachedResult = cache.get(currentDir);
|
|
211
|
+
// Populate cache for all intermediate directories.
|
|
212
|
+
for (const dir of dirsToCache) {
|
|
213
|
+
cache.set(dir, cachedResult);
|
|
214
|
+
}
|
|
215
|
+
return cachedResult;
|
|
216
|
+
}
|
|
217
|
+
const pkgPath = node_path_1.default.join(currentDir, 'package.json');
|
|
218
|
+
try {
|
|
219
|
+
const pkgContent = await (0, promises_1.readFile)(pkgPath, 'utf-8');
|
|
220
|
+
const pkg = JSON.parse(pkgContent);
|
|
221
|
+
const versionSpecifier = pkg.dependencies?.['@angular/core'] ?? pkg.devDependencies?.['@angular/core'];
|
|
222
|
+
if (versionSpecifier) {
|
|
223
|
+
const minVersion = semver_1.default.minVersion(versionSpecifier);
|
|
224
|
+
const result = minVersion ? String(minVersion.major) : undefined;
|
|
225
|
+
for (const dir of dirsToCache) {
|
|
226
|
+
cache.set(dir, result);
|
|
227
|
+
}
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
(0, error_1.assertIsError)(error);
|
|
233
|
+
if (error.code !== 'ENOENT') {
|
|
234
|
+
// Ignore missing package.json files, but rethrow other errors.
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Stop if we are at the search root or the filesystem root.
|
|
239
|
+
if (currentDir === searchRoot) {
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
const parentDir = node_path_1.default.dirname(currentDir);
|
|
243
|
+
if (parentDir === currentDir) {
|
|
244
|
+
break; // Reached the filesystem root.
|
|
245
|
+
}
|
|
246
|
+
currentDir = parentDir;
|
|
247
|
+
}
|
|
248
|
+
// Cache the failure for all traversed directories.
|
|
249
|
+
for (const dir of dirsToCache) {
|
|
250
|
+
cache.set(dir, undefined);
|
|
251
|
+
}
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Determines the unit test framework for a project based on its 'test' target configuration.
|
|
256
|
+
* It handles both the modern `@angular/build:unit-test` builder with its `runner` option
|
|
257
|
+
* and older builders where the framework is inferred from the builder name.
|
|
258
|
+
* @param testTarget The 'test' target definition from the workspace configuration.
|
|
259
|
+
* @returns The name of the unit test framework ('jasmine', 'jest', 'vitest'), 'unknown' if
|
|
260
|
+
* the framework can't be determined from a known builder, or `undefined` if there is no test target.
|
|
261
|
+
*/
|
|
262
|
+
function getUnitTestFramework(testTarget) {
|
|
263
|
+
if (!testTarget) {
|
|
264
|
+
return undefined;
|
|
265
|
+
}
|
|
266
|
+
// For the new unit-test builder, the runner option directly informs the framework.
|
|
267
|
+
if (testTarget.builder === '@angular/build:unit-test') {
|
|
268
|
+
const runner = testTarget.options?.['runner'];
|
|
269
|
+
if (runner === 'karma') {
|
|
270
|
+
return 'jasmine'; // Karma is a runner, but the framework is Jasmine.
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
return runner; // For 'vitest', the runner and framework are the same.
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Fallback for older builders where the framework is inferred from the builder name.
|
|
277
|
+
if (testTarget.builder) {
|
|
278
|
+
const testBuilder = testTarget.builder;
|
|
279
|
+
if (testBuilder.includes('karma') ||
|
|
280
|
+
testBuilder === '@angular-devkit/build-angular:web-test-runner') {
|
|
281
|
+
return 'jasmine';
|
|
282
|
+
}
|
|
283
|
+
else if (testBuilder.includes('jest')) {
|
|
284
|
+
return 'jest';
|
|
285
|
+
}
|
|
286
|
+
else if (testBuilder.includes('vitest')) {
|
|
287
|
+
return 'vitest';
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
return 'unknown';
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return undefined;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Determines the style language for a project using a prioritized heuristic.
|
|
297
|
+
* It checks project-specific schematics, then workspace-level schematics,
|
|
298
|
+
* and finally infers from the build target's inlineStyleLanguage option.
|
|
299
|
+
* @param project The project definition from the workspace configuration.
|
|
300
|
+
* @param workspace The loaded Angular workspace.
|
|
301
|
+
* @returns The determined style language ('css', 'scss', 'sass', 'less').
|
|
302
|
+
*/
|
|
303
|
+
async function getProjectStyleLanguage(project, workspace, fullSourceRoot) {
|
|
304
|
+
const projectSchematics = project.extensions.schematics;
|
|
305
|
+
const workspaceSchematics = workspace.extensions.schematics;
|
|
306
|
+
// 1. Check for a project-specific schematic setting.
|
|
307
|
+
let style = projectSchematics?.['@schematics/angular:component']?.['style'];
|
|
308
|
+
if (isStyleLanguage(style)) {
|
|
309
|
+
return style;
|
|
310
|
+
}
|
|
311
|
+
// 2. Check for a workspace-level schematic setting.
|
|
312
|
+
style = workspaceSchematics?.['@schematics/angular:component']?.['style'];
|
|
313
|
+
if (isStyleLanguage(style)) {
|
|
314
|
+
return style;
|
|
315
|
+
}
|
|
316
|
+
const buildTarget = project.targets.get('build');
|
|
317
|
+
if (buildTarget?.options) {
|
|
318
|
+
// 3. Infer from the build target's inlineStyleLanguage option.
|
|
319
|
+
style = buildTarget.options['inlineStyleLanguage'];
|
|
320
|
+
if (isStyleLanguage(style)) {
|
|
321
|
+
return style;
|
|
322
|
+
}
|
|
323
|
+
// 4. Infer from the 'styles' array (explicit).
|
|
324
|
+
const styles = buildTarget.options['styles'];
|
|
325
|
+
if (Array.isArray(styles)) {
|
|
326
|
+
for (const stylePath of styles) {
|
|
327
|
+
const style = getStyleLanguageFromExtension(node_path_1.default.extname(stylePath));
|
|
328
|
+
if (style) {
|
|
329
|
+
return style;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// 5. Infer from implicit default styles file (future-proofing).
|
|
335
|
+
for (const ext of STYLE_LANGUAGE_SEARCH_ORDER) {
|
|
336
|
+
try {
|
|
337
|
+
await (0, promises_1.stat)(node_path_1.default.join(fullSourceRoot, `styles.${ext}`));
|
|
338
|
+
return ext;
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
// Silently ignore all errors (e.g., file not found, permissions).
|
|
342
|
+
// If we can't read the file, we can't use it for detection.
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// 6. Fallback to 'css'.
|
|
346
|
+
return 'css';
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Loads, parses, and transforms a single angular.json file into the tool's output format.
|
|
350
|
+
* It checks a set of seen paths to avoid processing the same workspace multiple times.
|
|
351
|
+
* @param configFile The path to the angular.json file.
|
|
352
|
+
* @param seenPaths A Set of absolute paths that have already been processed.
|
|
353
|
+
* @returns A promise resolving to the workspace data or a parsing error.
|
|
354
|
+
*/
|
|
355
|
+
async function loadAndParseWorkspace(configFile, seenPaths) {
|
|
356
|
+
try {
|
|
357
|
+
const resolvedPath = node_path_1.default.resolve(configFile);
|
|
358
|
+
if (seenPaths.has(resolvedPath)) {
|
|
359
|
+
return { workspace: null, error: null }; // Already processed, skip.
|
|
360
|
+
}
|
|
361
|
+
seenPaths.add(resolvedPath);
|
|
362
|
+
const ws = await config_1.AngularWorkspace.load(configFile);
|
|
363
|
+
const projects = [];
|
|
364
|
+
const workspaceRoot = node_path_1.default.dirname(configFile);
|
|
365
|
+
for (const [name, project] of ws.projects.entries()) {
|
|
366
|
+
const sourceRoot = node_path_1.default.posix.join(project.root, project.sourceRoot ?? 'src');
|
|
367
|
+
const fullSourceRoot = node_path_1.default.join(workspaceRoot, sourceRoot);
|
|
368
|
+
const unitTestFramework = getUnitTestFramework(project.targets.get('test'));
|
|
369
|
+
const styleLanguage = await getProjectStyleLanguage(project, ws, fullSourceRoot);
|
|
370
|
+
projects.push({
|
|
371
|
+
name,
|
|
372
|
+
type: project.extensions['projectType'],
|
|
373
|
+
builder: project.targets.get('build')?.builder,
|
|
374
|
+
root: project.root,
|
|
375
|
+
sourceRoot,
|
|
376
|
+
selectorPrefix: project.extensions['prefix'],
|
|
377
|
+
unitTestFramework,
|
|
378
|
+
styleLanguage,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
return { workspace: { path: configFile, projects }, error: null };
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
let message;
|
|
385
|
+
if (error instanceof Error) {
|
|
386
|
+
message = error.message;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
message = 'An unknown error occurred while parsing the file.';
|
|
390
|
+
}
|
|
391
|
+
return { workspace: null, error: { filePath: configFile, message } };
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Processes a single `angular.json` file to extract workspace and framework version information.
|
|
396
|
+
* @param configFile The path to the `angular.json` file.
|
|
397
|
+
* @param searchRoot The directory at which to stop the upward search for `package.json`.
|
|
398
|
+
* @param seenPaths A Set of absolute paths that have already been processed to avoid duplicates.
|
|
399
|
+
* @param versionCache A Map to cache framework version lookups for performance.
|
|
400
|
+
* @returns A promise resolving to an object containing the processed data and any errors.
|
|
401
|
+
*/
|
|
402
|
+
async function processConfigFile(configFile, searchRoot, seenPaths, versionCache) {
|
|
403
|
+
const { workspace, error } = await loadAndParseWorkspace(configFile, seenPaths);
|
|
404
|
+
if (error) {
|
|
405
|
+
return { parsingError: error };
|
|
406
|
+
}
|
|
407
|
+
if (!workspace) {
|
|
408
|
+
return {}; // Skipped as it was already seen.
|
|
409
|
+
}
|
|
410
|
+
try {
|
|
411
|
+
const workspaceDir = node_path_1.default.dirname(configFile);
|
|
412
|
+
workspace.frameworkVersion = await findAngularCoreVersion(workspaceDir, versionCache, searchRoot);
|
|
413
|
+
return { workspace };
|
|
414
|
+
}
|
|
415
|
+
catch (e) {
|
|
416
|
+
return {
|
|
417
|
+
workspace,
|
|
418
|
+
versioningError: {
|
|
419
|
+
filePath: workspace.path,
|
|
420
|
+
message: e instanceof Error ? e.message : 'An unknown error occurred.',
|
|
421
|
+
},
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
async function createListProjectsHandler({ server }) {
|
|
50
426
|
return async () => {
|
|
51
|
-
|
|
427
|
+
const workspaces = [];
|
|
428
|
+
const parsingErrors = [];
|
|
429
|
+
const versioningErrors = [];
|
|
430
|
+
const seenPaths = new Set();
|
|
431
|
+
const versionCache = new Map();
|
|
432
|
+
let searchRoots;
|
|
433
|
+
const clientCapabilities = server.server.getClientCapabilities();
|
|
434
|
+
if (clientCapabilities?.roots) {
|
|
435
|
+
const { roots } = await server.server.listRoots();
|
|
436
|
+
searchRoots = roots?.map((r) => node_path_1.default.normalize((0, node_url_1.fileURLToPath)(r.uri))) ?? [];
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
// Fallback to the current working directory if client does not support roots
|
|
440
|
+
searchRoots = [process.cwd()];
|
|
441
|
+
}
|
|
442
|
+
for (const root of searchRoots) {
|
|
443
|
+
for await (const configFile of findAngularJsonFiles(root)) {
|
|
444
|
+
const { workspace, parsingError, versioningError } = await processConfigFile(configFile, root, seenPaths, versionCache);
|
|
445
|
+
if (workspace) {
|
|
446
|
+
workspaces.push(workspace);
|
|
447
|
+
}
|
|
448
|
+
if (parsingError) {
|
|
449
|
+
parsingErrors.push(parsingError);
|
|
450
|
+
}
|
|
451
|
+
if (versioningError) {
|
|
452
|
+
versioningErrors.push(versioningError);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
if (workspaces.length === 0 && parsingErrors.length === 0) {
|
|
52
457
|
return {
|
|
53
458
|
content: [
|
|
54
459
|
{
|
|
@@ -58,30 +463,22 @@ function createListProjectsHandler({ workspace }) {
|
|
|
58
463
|
' could not be located in the current directory or any of its parent directories.',
|
|
59
464
|
},
|
|
60
465
|
],
|
|
61
|
-
structuredContent: {
|
|
466
|
+
structuredContent: { workspaces: [] },
|
|
62
467
|
};
|
|
63
468
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
selectorPrefix: project.extensions['prefix'],
|
|
73
|
-
});
|
|
469
|
+
let text = `Found ${workspaces.length} workspace(s).\n${JSON.stringify({ workspaces })}`;
|
|
470
|
+
if (parsingErrors.length > 0) {
|
|
471
|
+
text += `\n\nWarning: The following ${parsingErrors.length} file(s) could not be parsed and were skipped:\n`;
|
|
472
|
+
text += parsingErrors.map((e) => `- ${e.filePath}: ${e.message}`).join('\n');
|
|
473
|
+
}
|
|
474
|
+
if (versioningErrors.length > 0) {
|
|
475
|
+
text += `\n\nWarning: The framework version for the following ${versioningErrors.length} workspace(s) could not be determined:\n`;
|
|
476
|
+
text += versioningErrors.map((e) => `- ${e.filePath}: ${e.message}`).join('\n');
|
|
74
477
|
}
|
|
75
|
-
// The structuredContent field is newer and may not be supported by all hosts.
|
|
76
|
-
// A text representation of the content is also provided for compatibility.
|
|
77
478
|
return {
|
|
78
|
-
content: [
|
|
79
|
-
|
|
80
|
-
type: 'text',
|
|
81
|
-
text: `Projects in the Angular workspace:\n${JSON.stringify(projects)}`,
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
structuredContent: { projects },
|
|
479
|
+
content: [{ type: 'text', text }],
|
|
480
|
+
structuredContent: { workspaces, parsingErrors, versioningErrors },
|
|
85
481
|
};
|
|
86
482
|
};
|
|
87
483
|
}
|
|
484
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ import { ZodRawShape } from 'zod';
|
|
|
10
10
|
import type { AngularWorkspace } from '../../../utilities/config';
|
|
11
11
|
type ToolConfig = Parameters<McpServer['registerTool']>[1];
|
|
12
12
|
export interface McpToolContext {
|
|
13
|
+
server: McpServer;
|
|
13
14
|
workspace?: AngularWorkspace;
|
|
14
15
|
logger: {
|
|
15
16
|
warn(text: string): void;
|
|
@@ -31,5 +32,5 @@ export interface McpToolDeclaration<TInput extends ZodRawShape, TOutput extends
|
|
|
31
32
|
}
|
|
32
33
|
export type AnyMcpToolDeclaration = McpToolDeclaration<any, any>;
|
|
33
34
|
export declare function declareTool<TInput extends ZodRawShape, TOutput extends ZodRawShape>(declaration: McpToolDeclaration<TInput, TOutput>): McpToolDeclaration<TInput, TOutput>;
|
|
34
|
-
export declare function registerTools(server: McpServer, context: McpToolContext, declarations: AnyMcpToolDeclaration[]): Promise<void>;
|
|
35
|
+
export declare function registerTools(server: McpServer, context: Omit<McpToolContext, 'server'>, declarations: AnyMcpToolDeclaration[]): Promise<void>;
|
|
35
36
|
export {};
|
|
@@ -14,11 +14,12 @@ function declareTool(declaration) {
|
|
|
14
14
|
}
|
|
15
15
|
async function registerTools(server, context, declarations) {
|
|
16
16
|
for (const declaration of declarations) {
|
|
17
|
-
|
|
17
|
+
const toolContext = { ...context, server };
|
|
18
|
+
if (declaration.shouldRegister && !(await declaration.shouldRegister(toolContext))) {
|
|
18
19
|
continue;
|
|
19
20
|
}
|
|
20
21
|
const { name, factory, shouldRegister, isReadOnly, isLocalOnly, ...config } = declaration;
|
|
21
|
-
const handler = await factory(
|
|
22
|
+
const handler = await factory(toolContext);
|
|
22
23
|
// Add declarative characteristics to annotations
|
|
23
24
|
config.annotations ??= {};
|
|
24
25
|
if (isReadOnly !== undefined) {
|
|
@@ -31,3 +32,4 @@ async function registerTools(server, context, declarations) {
|
|
|
31
32
|
server.registerTool(name, config, handler);
|
|
32
33
|
}
|
|
33
34
|
}
|
|
35
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["tool-registry.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAmCH,kCAIC;AAED,sCA2BC;AAjCD,SAAgB,WAAW,CACzB,WAAgD;IAEhD,OAAO,WAAW,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,MAAiB,EACjB,OAAuC,EACvC,YAAqC;IAErC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;QAC3C,IAAI,WAAW,CAAC,cAAc,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACnF,SAAS;QACX,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC;QAE1F,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;QAE3C,iDAAiD;QACjD,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC;QAC1B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,WAAW,CAAC,YAAY,GAAG,UAAU,CAAC;QAC/C,CAAC;QACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,wCAAwC;YACxC,MAAM,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,WAAW,CAAC;QAClD,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
package/src/commands/new/cli.js
CHANGED
|
@@ -46,6 +46,7 @@ class NewCommandModule extends schematics_command_module_1.SchematicsCommandModu
|
|
|
46
46
|
defaults,
|
|
47
47
|
});
|
|
48
48
|
workflow.registry.addSmartDefaultProvider('ng-cli-version', () => version_1.VERSION.full);
|
|
49
|
+
workflow.registry.addSmartDefaultProvider('packageManager', () => this.context.packageManager.name);
|
|
49
50
|
return this.runSchematic({
|
|
50
51
|
collectionName,
|
|
51
52
|
schematicName: this.schematicName,
|
|
@@ -72,3 +73,4 @@ class NewCommandModule extends schematics_command_module_1.SchematicsCommandModu
|
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
exports.default = NewCommandModule;
|
|
76
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":"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"}
|
package/src/commands/run/cli.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,6FAAwF;AAExF,sDAAiD;AAEjD,MAAqB,kBACnB,SAAQ,iDAAsB;IAG9B,WAAW,GAAG,KAAK,CAAC;IACpB,OAAO,GAAG,iBAAiB,CAAC;IAC5B,OAAO,GAAG,6BAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;IACxC,QAAQ,GAAG,iEAAiE,CAAC;IAC7E,mBAAmB,CAAsB;CAC1C;AATD,qCASC"}
|
package/src/commands/test/cli.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,yCAAiC;AACjC,6FAAwF;AAExF,sDAAiD;AAEjD,MAAqB,iBACnB,SAAQ,iDAAsB;IAG9B,WAAW,GAAG,IAAI,CAAC;IACnB,OAAO,GAAG,gBAAgB,CAAC;IAC3B,OAAO,GAAG,6BAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IACvC,QAAQ,GAAG,+BAA+B,CAAC;IAC3C,mBAAmB,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;CAC9D;AATD,oCASC"}
|