@angular/cli 21.0.0-rc.0 → 21.0.0-rc.1
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/config/schema.json +1 -1
- package/package.json +14 -14
- package/src/commands/mcp/host.d.ts +55 -0
- package/src/commands/mcp/host.js +79 -0
- package/src/commands/mcp/host.js.map +1 -0
- package/src/commands/mcp/mcp-server.d.ts +3 -0
- package/src/commands/mcp/tools/modernize.d.ts +24 -7
- package/src/commands/mcp/tools/modernize.js +114 -41
- package/src/commands/mcp/tools/modernize.js.map +1 -1
- package/src/commands/version/version-info.js +1 -0
- package/src/commands/version/version-info.js.map +1 -1
- package/src/utilities/version.js +1 -1
package/lib/config/schema.json
CHANGED
|
@@ -2665,7 +2665,7 @@
|
|
|
2665
2665
|
},
|
|
2666
2666
|
"outputMode": {
|
|
2667
2667
|
"type": "string",
|
|
2668
|
-
"description": "Defines the build output
|
|
2668
|
+
"description": "Defines the type of build output artifact. 'static': Generates a static site build artifact for deployment on any static hosting service. 'server': Generates a server application build artifact, required for applications using hybrid rendering or APIs.",
|
|
2669
2669
|
"enum": [
|
|
2670
2670
|
"static",
|
|
2671
2671
|
"server"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/cli",
|
|
3
|
-
"version": "21.0.0-rc.
|
|
3
|
+
"version": "21.0.0-rc.1",
|
|
4
4
|
"description": "CLI tool for Angular",
|
|
5
5
|
"main": "lib/cli/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -25,13 +25,13 @@
|
|
|
25
25
|
},
|
|
26
26
|
"homepage": "https://github.com/angular/angular-cli",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@angular-devkit/architect": "0.2100.0-rc.
|
|
29
|
-
"@angular-devkit/core": "21.0.0-rc.
|
|
30
|
-
"@angular-devkit/schematics": "21.0.0-rc.
|
|
28
|
+
"@angular-devkit/architect": "0.2100.0-rc.1",
|
|
29
|
+
"@angular-devkit/core": "21.0.0-rc.1",
|
|
30
|
+
"@angular-devkit/schematics": "21.0.0-rc.1",
|
|
31
31
|
"@inquirer/prompts": "7.9.0",
|
|
32
32
|
"@listr2/prompt-adapter-inquirer": "3.0.5",
|
|
33
33
|
"@modelcontextprotocol/sdk": "1.20.1",
|
|
34
|
-
"@schematics/angular": "21.0.0-rc.
|
|
34
|
+
"@schematics/angular": "21.0.0-rc.1",
|
|
35
35
|
"@yarnpkg/lockfile": "1.1.0",
|
|
36
36
|
"algoliasearch": "5.40.1",
|
|
37
37
|
"ini": "5.0.0",
|
|
@@ -48,17 +48,17 @@
|
|
|
48
48
|
"ng-update": {
|
|
49
49
|
"migrations": "@schematics/angular/migrations/migration-collection.json",
|
|
50
50
|
"packageGroup": {
|
|
51
|
-
"@angular/cli": "21.0.0-rc.
|
|
52
|
-
"@angular/build": "21.0.0-rc.
|
|
53
|
-
"@angular/ssr": "21.0.0-rc.
|
|
54
|
-
"@angular-devkit/architect": "0.2100.0-rc.
|
|
55
|
-
"@angular-devkit/build-angular": "21.0.0-rc.
|
|
56
|
-
"@angular-devkit/build-webpack": "0.2100.0-rc.
|
|
57
|
-
"@angular-devkit/core": "21.0.0-rc.
|
|
58
|
-
"@angular-devkit/schematics": "21.0.0-rc.
|
|
51
|
+
"@angular/cli": "21.0.0-rc.1",
|
|
52
|
+
"@angular/build": "21.0.0-rc.1",
|
|
53
|
+
"@angular/ssr": "21.0.0-rc.1",
|
|
54
|
+
"@angular-devkit/architect": "0.2100.0-rc.1",
|
|
55
|
+
"@angular-devkit/build-angular": "21.0.0-rc.1",
|
|
56
|
+
"@angular-devkit/build-webpack": "0.2100.0-rc.1",
|
|
57
|
+
"@angular-devkit/core": "21.0.0-rc.1",
|
|
58
|
+
"@angular-devkit/schematics": "21.0.0-rc.1"
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
|
-
"packageManager": "pnpm@10.
|
|
61
|
+
"packageManager": "pnpm@10.20.0",
|
|
62
62
|
"engines": {
|
|
63
63
|
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
64
64
|
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
import { Stats } from 'node:fs';
|
|
9
|
+
/**
|
|
10
|
+
* An error thrown when a command fails to execute.
|
|
11
|
+
*/
|
|
12
|
+
export declare class CommandError extends Error {
|
|
13
|
+
readonly stdout: string;
|
|
14
|
+
readonly stderr: string;
|
|
15
|
+
readonly code: number | null;
|
|
16
|
+
constructor(message: string, stdout: string, stderr: string, code: number | null);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* An abstraction layer for operating-system or file-system operations.
|
|
20
|
+
*/
|
|
21
|
+
export interface Host {
|
|
22
|
+
/**
|
|
23
|
+
* Gets the stats of a file or directory.
|
|
24
|
+
* @param path The path to the file or directory.
|
|
25
|
+
* @returns A promise that resolves to the stats.
|
|
26
|
+
*/
|
|
27
|
+
stat(path: string): Promise<Stats>;
|
|
28
|
+
/**
|
|
29
|
+
* Checks if a path exists on the file system.
|
|
30
|
+
* @param path The path to check.
|
|
31
|
+
* @returns A boolean indicating whether the path exists.
|
|
32
|
+
*/
|
|
33
|
+
existsSync(path: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Spawns a child process and returns a promise that resolves with the process's
|
|
36
|
+
* output or rejects with a structured error.
|
|
37
|
+
* @param command The command to run.
|
|
38
|
+
* @param args The arguments to pass to the command.
|
|
39
|
+
* @param options Options for the child process.
|
|
40
|
+
* @returns A promise that resolves with the standard output and standard error of the command.
|
|
41
|
+
*/
|
|
42
|
+
runCommand(command: string, args: readonly string[], options?: {
|
|
43
|
+
timeout?: number;
|
|
44
|
+
stdio?: 'pipe' | 'ignore';
|
|
45
|
+
cwd?: string;
|
|
46
|
+
env?: Record<string, string>;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
stdout: string;
|
|
49
|
+
stderr: string;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A concrete implementation of the `Host` interface that runs on a local workspace.
|
|
54
|
+
*/
|
|
55
|
+
export declare const LocalWorkspaceHost: Host;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.LocalWorkspaceHost = exports.CommandError = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* @fileoverview
|
|
13
|
+
* This file defines an abstraction layer for operating-system or file-system operations, such as
|
|
14
|
+
* command execution. This allows for easier testing by enabling the injection of mock or
|
|
15
|
+
* test-specific implementations.
|
|
16
|
+
*/
|
|
17
|
+
const fs_1 = require("fs");
|
|
18
|
+
const node_child_process_1 = require("node:child_process");
|
|
19
|
+
const promises_1 = require("node:fs/promises");
|
|
20
|
+
/**
|
|
21
|
+
* An error thrown when a command fails to execute.
|
|
22
|
+
*/
|
|
23
|
+
class CommandError extends Error {
|
|
24
|
+
stdout;
|
|
25
|
+
stderr;
|
|
26
|
+
code;
|
|
27
|
+
constructor(message, stdout, stderr, code) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.stdout = stdout;
|
|
30
|
+
this.stderr = stderr;
|
|
31
|
+
this.code = code;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.CommandError = CommandError;
|
|
35
|
+
/**
|
|
36
|
+
* A concrete implementation of the `Host` interface that runs on a local workspace.
|
|
37
|
+
*/
|
|
38
|
+
exports.LocalWorkspaceHost = {
|
|
39
|
+
stat: promises_1.stat,
|
|
40
|
+
existsSync: fs_1.existsSync,
|
|
41
|
+
runCommand: async (command, args, options = {}) => {
|
|
42
|
+
const signal = options.timeout ? AbortSignal.timeout(options.timeout) : undefined;
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
const childProcess = (0, node_child_process_1.spawn)(command, args, {
|
|
45
|
+
shell: false,
|
|
46
|
+
stdio: options.stdio ?? 'pipe',
|
|
47
|
+
signal,
|
|
48
|
+
cwd: options.cwd,
|
|
49
|
+
env: {
|
|
50
|
+
...process.env,
|
|
51
|
+
...options.env,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
let stdout = '';
|
|
55
|
+
childProcess.stdout?.on('data', (data) => (stdout += data.toString()));
|
|
56
|
+
let stderr = '';
|
|
57
|
+
childProcess.stderr?.on('data', (data) => (stderr += data.toString()));
|
|
58
|
+
childProcess.on('close', (code) => {
|
|
59
|
+
if (code === 0) {
|
|
60
|
+
resolve({ stdout, stderr });
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const message = `Process exited with code ${code}.`;
|
|
64
|
+
reject(new CommandError(message, stdout, stderr, code));
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
childProcess.on('error', (err) => {
|
|
68
|
+
if (err.name === 'AbortError') {
|
|
69
|
+
const message = `Process timed out.`;
|
|
70
|
+
reject(new CommandError(message, stdout, stderr, null));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const message = `Process failed with error: ${err.message}`;
|
|
74
|
+
reject(new CommandError(message, stdout, stderr, null));
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["host.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH;;;;;GAKG;AAEH,2BAAkD;AAClD,2DAA2C;AAE3C,+CAAwC;AAExC;;GAEG;AACH,MAAa,YAAa,SAAQ,KAAK;IAGnB;IACA;IACA;IAJlB,YACE,OAAe,EACC,MAAc,EACd,MAAc,EACd,IAAmB;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAe;IAGrC,CAAC;CACF;AATD,oCASC;AAwCD;;GAEG;AACU,QAAA,kBAAkB,GAAS;IACtC,IAAI,EAAJ,eAAI;IACJ,UAAU,EAAE,eAAc;IAC1B,UAAU,EAAE,KAAK,EACf,OAAe,EACf,IAAuB,EACvB,UAKI,EAAE,EACuC,EAAE;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAElF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,YAAY,GAAG,IAAA,0BAAK,EAAC,OAAO,EAAE,IAAI,EAAE;gBACxC,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;gBAC9B,MAAM;gBACN,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,GAAG,OAAO,CAAC,GAAG;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAEvE,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAEvE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,OAAO,GAAG,4BAA4B,IAAI,GAAG,CAAC;oBACpD,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,oBAAoB,CAAC;oBACrC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;oBAExD,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -13,9 +13,12 @@ import { AnyMcpToolDeclaration } from './tools/tool-registry';
|
|
|
13
13
|
* These tools are considered experimental and may have limitations.
|
|
14
14
|
*/
|
|
15
15
|
export declare const EXPERIMENTAL_TOOLS: readonly [import("./tools/tool-registry").McpToolDeclaration<{
|
|
16
|
+
directories: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
16
17
|
transformations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEnum<[string, ...string[]]>, "many">>;
|
|
17
18
|
}, {
|
|
18
19
|
instructions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
20
|
+
stdout: import("zod").ZodOptional<import("zod").ZodString>;
|
|
21
|
+
stderr: import("zod").ZodOptional<import("zod").ZodString>;
|
|
19
22
|
}>, import("./tools/tool-registry").McpToolDeclaration<{
|
|
20
23
|
fileOrDirPath: import("zod").ZodString;
|
|
21
24
|
}, import("zod").ZodRawShape>];
|
|
@@ -6,26 +6,43 @@
|
|
|
6
6
|
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
8
|
import { z } from 'zod';
|
|
9
|
+
import { Host } from '../host';
|
|
10
|
+
import { McpToolDeclaration } from './tool-registry';
|
|
9
11
|
declare const modernizeInputSchema: z.ZodObject<{
|
|
12
|
+
directories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
10
13
|
transformations: z.ZodOptional<z.ZodArray<z.ZodEnum<[string, ...string[]]>, "many">>;
|
|
11
14
|
}, "strip", z.ZodTypeAny, {
|
|
15
|
+
directories?: string[] | undefined;
|
|
12
16
|
transformations?: string[] | undefined;
|
|
13
17
|
}, {
|
|
18
|
+
directories?: string[] | undefined;
|
|
14
19
|
transformations?: string[] | undefined;
|
|
15
20
|
}>;
|
|
21
|
+
declare const modernizeOutputSchema: z.ZodObject<{
|
|
22
|
+
instructions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
23
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
24
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
stdout?: string | undefined;
|
|
27
|
+
stderr?: string | undefined;
|
|
28
|
+
instructions?: string[] | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
stdout?: string | undefined;
|
|
31
|
+
stderr?: string | undefined;
|
|
32
|
+
instructions?: string[] | undefined;
|
|
33
|
+
}>;
|
|
16
34
|
export type ModernizeInput = z.infer<typeof modernizeInputSchema>;
|
|
17
|
-
export
|
|
35
|
+
export type ModernizeOutput = z.infer<typeof modernizeOutputSchema>;
|
|
36
|
+
export declare function runModernization(input: ModernizeInput, host: Host): Promise<{
|
|
18
37
|
content: {
|
|
19
38
|
type: "text";
|
|
20
39
|
text: string;
|
|
21
40
|
}[];
|
|
22
41
|
structuredContent: {
|
|
23
|
-
|
|
42
|
+
stdout?: string | undefined;
|
|
43
|
+
stderr?: string | undefined;
|
|
44
|
+
instructions?: string[] | undefined;
|
|
24
45
|
};
|
|
25
46
|
}>;
|
|
26
|
-
export declare const MODERNIZE_TOOL:
|
|
27
|
-
transformations: z.ZodOptional<z.ZodArray<z.ZodEnum<[string, ...string[]]>, "many">>;
|
|
28
|
-
}, {
|
|
29
|
-
instructions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
30
|
-
}>;
|
|
47
|
+
export declare const MODERNIZE_TOOL: McpToolDeclaration<typeof modernizeInputSchema.shape, typeof modernizeOutputSchema.shape>;
|
|
31
48
|
export {};
|
|
@@ -9,16 +9,18 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.MODERNIZE_TOOL = void 0;
|
|
11
11
|
exports.runModernization = runModernization;
|
|
12
|
+
const path_1 = require("path");
|
|
12
13
|
const zod_1 = require("zod");
|
|
14
|
+
const host_1 = require("../host");
|
|
13
15
|
const tool_registry_1 = require("./tool-registry");
|
|
14
16
|
const TRANSFORMATIONS = [
|
|
15
17
|
{
|
|
16
|
-
name: 'control-flow
|
|
18
|
+
name: 'control-flow',
|
|
17
19
|
description: 'Migrates from `*ngIf`, `*ngFor`, and `*ngSwitch` to the new `@if`, `@for`, and `@switch` block syntax in templates.',
|
|
18
20
|
documentationUrl: 'https://angular.dev/reference/migrations/control-flow',
|
|
19
21
|
},
|
|
20
22
|
{
|
|
21
|
-
name: 'self-closing-
|
|
23
|
+
name: 'self-closing-tag',
|
|
22
24
|
description: 'Converts tags for elements with no content to be self-closing (e.g., `<app-foo></app-foo>` becomes `<app-foo />`).',
|
|
23
25
|
documentationUrl: 'https://angular.dev/reference/migrations/self-closing-tags',
|
|
24
26
|
},
|
|
@@ -56,45 +58,120 @@ const TRANSFORMATIONS = [
|
|
|
56
58
|
},
|
|
57
59
|
];
|
|
58
60
|
const modernizeInputSchema = zod_1.z.object({
|
|
59
|
-
|
|
61
|
+
directories: zod_1.z
|
|
62
|
+
.array(zod_1.z.string())
|
|
63
|
+
.optional()
|
|
64
|
+
.describe('A list of paths to directories with files to modernize.'),
|
|
60
65
|
transformations: zod_1.z
|
|
61
66
|
.array(zod_1.z.enum(TRANSFORMATIONS.map((t) => t.name)))
|
|
62
67
|
.optional()
|
|
63
|
-
.describe('A list of specific transformations to
|
|
64
|
-
|
|
68
|
+
.describe('A list of specific transformations to apply.'),
|
|
69
|
+
});
|
|
70
|
+
const modernizeOutputSchema = zod_1.z.object({
|
|
71
|
+
instructions: zod_1.z
|
|
72
|
+
.array(zod_1.z.string())
|
|
73
|
+
.optional()
|
|
74
|
+
.describe('Migration summary, as well as any instructions that need to be performed to complete the migrations.'),
|
|
75
|
+
stdout: zod_1.z.string().optional().describe('The stdout from the executed commands.'),
|
|
76
|
+
stderr: zod_1.z.string().optional().describe('The stderr from the executed commands.'),
|
|
65
77
|
});
|
|
66
|
-
function
|
|
78
|
+
function createToolOutput(structuredContent) {
|
|
79
|
+
return {
|
|
80
|
+
content: [{ type: 'text', text: JSON.stringify(structuredContent, null, 2) }],
|
|
81
|
+
structuredContent,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function findAngularJsonDir(startDir, host) {
|
|
85
|
+
let currentDir = startDir;
|
|
86
|
+
while (true) {
|
|
87
|
+
if (host.existsSync((0, path_1.join)(currentDir, 'angular.json'))) {
|
|
88
|
+
return currentDir;
|
|
89
|
+
}
|
|
90
|
+
const parentDir = (0, path_1.dirname)(currentDir);
|
|
91
|
+
if (parentDir === currentDir) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
currentDir = parentDir;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async function runModernization(input, host) {
|
|
98
|
+
const transformationNames = input.transformations ?? [];
|
|
99
|
+
const directories = input.directories ?? [];
|
|
67
100
|
if (transformationNames.length === 0) {
|
|
68
|
-
return
|
|
69
|
-
|
|
70
|
-
'
|
|
71
|
-
|
|
101
|
+
return createToolOutput({
|
|
102
|
+
instructions: [
|
|
103
|
+
'See https://angular.dev/best-practices for Angular best practices. ' +
|
|
104
|
+
'You can call this tool if you have specific transformation you want to run.',
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (directories.length === 0) {
|
|
109
|
+
return createToolOutput({
|
|
110
|
+
instructions: [
|
|
111
|
+
'Provide this tool with a list of directory paths in your workspace ' +
|
|
112
|
+
'to run the modernization on.',
|
|
113
|
+
],
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const firstDir = directories[0];
|
|
117
|
+
const executionDir = (await host.stat(firstDir)).isDirectory() ? firstDir : (0, path_1.dirname)(firstDir);
|
|
118
|
+
const angularProjectRoot = findAngularJsonDir(executionDir, host);
|
|
119
|
+
if (!angularProjectRoot) {
|
|
120
|
+
return createToolOutput({
|
|
121
|
+
instructions: ['Could not find an angular.json file in the current or parent directories.'],
|
|
122
|
+
});
|
|
72
123
|
}
|
|
73
124
|
const instructions = [];
|
|
74
|
-
const
|
|
125
|
+
const stdoutMessages = [];
|
|
126
|
+
const stderrMessages = [];
|
|
127
|
+
const transformationsToRun = TRANSFORMATIONS.filter((t) => transformationNames.includes(t.name));
|
|
75
128
|
for (const transformation of transformationsToRun) {
|
|
76
|
-
let transformationInstructions = '';
|
|
77
129
|
if (transformation.instructions) {
|
|
78
|
-
|
|
130
|
+
// This is a complex case, return instructions.
|
|
131
|
+
let transformationInstructions = transformation.instructions;
|
|
132
|
+
if (transformation.documentationUrl) {
|
|
133
|
+
transformationInstructions += `\nFor more information, see ${transformation.documentationUrl}.`;
|
|
134
|
+
}
|
|
135
|
+
instructions.push(transformationInstructions);
|
|
79
136
|
}
|
|
80
137
|
else {
|
|
81
|
-
//
|
|
82
|
-
const
|
|
83
|
-
|
|
138
|
+
// Simple case, run the command.
|
|
139
|
+
for (const dir of directories) {
|
|
140
|
+
const relativePath = (0, path_1.relative)(angularProjectRoot, dir) || '.';
|
|
141
|
+
const command = 'ng';
|
|
142
|
+
const args = ['generate', `@angular/core:${transformation.name}`, '--path', relativePath];
|
|
143
|
+
try {
|
|
144
|
+
const { stdout, stderr } = await host.runCommand(command, args, {
|
|
145
|
+
cwd: angularProjectRoot,
|
|
146
|
+
});
|
|
147
|
+
if (stdout) {
|
|
148
|
+
stdoutMessages.push(stdout);
|
|
149
|
+
}
|
|
150
|
+
if (stderr) {
|
|
151
|
+
stderrMessages.push(stderr);
|
|
152
|
+
}
|
|
153
|
+
instructions.push(`Migration ${transformation.name} on directory ${relativePath} completed successfully.`);
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
if (e instanceof host_1.CommandError) {
|
|
157
|
+
if (e.stdout) {
|
|
158
|
+
stdoutMessages.push(e.stdout);
|
|
159
|
+
}
|
|
160
|
+
if (e.stderr) {
|
|
161
|
+
stderrMessages.push(e.stderr);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
stderrMessages.push(e.message);
|
|
165
|
+
instructions.push(`Migration ${transformation.name} on directory ${relativePath} failed.`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
84
168
|
}
|
|
85
|
-
if (transformation.documentationUrl) {
|
|
86
|
-
transformationInstructions += `\nFor more information, see ${transformation.documentationUrl}.`;
|
|
87
|
-
}
|
|
88
|
-
instructions.push(transformationInstructions);
|
|
89
169
|
}
|
|
90
|
-
return
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
content: [{ type: 'text', text: JSON.stringify(structuredContent) }],
|
|
96
|
-
structuredContent,
|
|
97
|
-
};
|
|
170
|
+
return createToolOutput({
|
|
171
|
+
instructions: instructions.length > 0 ? instructions : undefined,
|
|
172
|
+
stdout: stdoutMessages?.join('\n\n') || undefined,
|
|
173
|
+
stderr: stderrMessages?.join('\n\n') || undefined,
|
|
174
|
+
});
|
|
98
175
|
}
|
|
99
176
|
exports.MODERNIZE_TOOL = (0, tool_registry_1.declareTool)({
|
|
100
177
|
name: 'modernize',
|
|
@@ -114,24 +191,20 @@ generating the exact steps needed to perform specific migrations.
|
|
|
114
191
|
general best practices guide.
|
|
115
192
|
</Use Cases>
|
|
116
193
|
<Operational Notes>
|
|
117
|
-
* **Execution:** This tool
|
|
118
|
-
|
|
194
|
+
* **Execution:** This tool executes 'ng generate' commands for simple migrations in a temporary
|
|
195
|
+
environment using the provided file content. For complex migrations like 'standalone', it
|
|
196
|
+
provides instructions which you **MUST** then execute as shell commands.
|
|
197
|
+
* **File Modifications:** This tool has been fixed and now correctly finds the node_modules directory in a Bazel environment.
|
|
119
198
|
* **Standalone Migration:** The 'standalone' transformation is a special, multi-step process.
|
|
120
|
-
You **MUST** execute the commands in the exact order
|
|
121
|
-
between each step.
|
|
199
|
+
The tool will provide instructions. You **MUST** execute the commands in the exact order
|
|
200
|
+
provided and validate your application between each step.
|
|
122
201
|
* **Transformation List:** The following transformations are available:
|
|
123
202
|
${TRANSFORMATIONS.map((t) => ` * ${t.name}: ${t.description}`).join('\n')}
|
|
124
203
|
</Operational Notes>`,
|
|
125
204
|
inputSchema: modernizeInputSchema.shape,
|
|
126
|
-
outputSchema:
|
|
127
|
-
instructions: zod_1.z
|
|
128
|
-
.array(zod_1.z.string())
|
|
129
|
-
.optional()
|
|
130
|
-
.describe('A list of instructions and shell commands to run the requested modernizations. ' +
|
|
131
|
-
'Each string in the array is a separate step or command.'),
|
|
132
|
-
},
|
|
205
|
+
outputSchema: modernizeOutputSchema.shape,
|
|
133
206
|
isLocalOnly: true,
|
|
134
|
-
isReadOnly:
|
|
135
|
-
factory: () => (input) => runModernization(input),
|
|
207
|
+
isReadOnly: false,
|
|
208
|
+
factory: () => (input) => runModernization(input, host_1.LocalWorkspaceHost),
|
|
136
209
|
});
|
|
137
210
|
//# sourceMappingURL=modernize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modernize.js","sourceRoot":"","sources":["modernize.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"modernize.js","sourceRoot":"","sources":["modernize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-info.js","sourceRoot":"","sources":["version-info.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"version-info.js","sourceRoot":"","sources":["version-info.ts"],"names":[],"mappings":"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"}
|
package/src/utilities/version.js
CHANGED