@schematics/angular 22.0.1 → 22.1.0-next.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.
@@ -0,0 +1,22 @@
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 { Rule } from '@angular-devkit/schematics';
9
+ import { FileConfigurationHandlerOptions } from './types';
10
+ /**
11
+ * Create or update a JSON MCP configuration file to include the Angular MCP server.
12
+ */
13
+ export declare function addJsonMcpConfig({ tree, fileInfo }: FileConfigurationHandlerOptions, mcpServersProperty: string): Rule;
14
+ /**
15
+ * Create or update a TOML MCP configuration file to include the Angular MCP server.
16
+ */
17
+ export declare function addTomlMcpConfig({ tree, context, fileInfo, tool, }: FileConfigurationHandlerOptions): Rule;
18
+ /**
19
+ * Create an Angular best practices Markdown.
20
+ * If the file exists, the configuration is skipped.
21
+ */
22
+ export declare function addBestPracticesMarkdown({ tree, context, fileInfo, tool, }: FileConfigurationHandlerOptions): Rule;
@@ -0,0 +1,107 @@
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.addJsonMcpConfig = addJsonMcpConfig;
11
+ exports.addTomlMcpConfig = addTomlMcpConfig;
12
+ exports.addBestPracticesMarkdown = addBestPracticesMarkdown;
13
+ const schematics_1 = require("@angular-devkit/schematics");
14
+ const jsonc_parser_1 = require("jsonc-parser");
15
+ const json_file_1 = require("../utility/json-file");
16
+ const TOML_MCP_SERVERS_PROP = '[mcp_servers.angular-cli]';
17
+ /**
18
+ * Create or update a JSON MCP configuration file to include the Angular MCP server.
19
+ */
20
+ function addJsonMcpConfig({ tree, fileInfo }, mcpServersProperty) {
21
+ const { name, directory } = fileInfo;
22
+ return (0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)('./files'), [
23
+ (0, schematics_1.filter)((path) => path.includes('__jsonConfigName__')),
24
+ (0, schematics_1.applyTemplates)({
25
+ ...schematics_1.strings,
26
+ jsonConfigName: name,
27
+ mcpServersProperty,
28
+ }),
29
+ (0, schematics_1.move)(directory),
30
+ (0, schematics_1.forEach)((file) => {
31
+ if (!tree.exists(file.path)) {
32
+ return file;
33
+ }
34
+ // If we have an existing file, update the server property with
35
+ // Angular MCP server configuration.
36
+ const existingConfig = new json_file_1.JSONFile(tree, file.path);
37
+ const existingMcpServers = existingConfig.get([mcpServersProperty]) ?? {};
38
+ const templateServersProp = (0, jsonc_parser_1.parse)(file.content.toString())[mcpServersProperty];
39
+ existingConfig.modify([mcpServersProperty], {
40
+ ...existingMcpServers,
41
+ ...templateServersProp,
42
+ });
43
+ return null;
44
+ }),
45
+ ]));
46
+ }
47
+ /**
48
+ * Create or update a TOML MCP configuration file to include the Angular MCP server.
49
+ */
50
+ function addTomlMcpConfig({ tree, context, fileInfo, tool, }) {
51
+ const { name, directory } = fileInfo;
52
+ return (0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)('./files'), [
53
+ (0, schematics_1.filter)((path) => path.includes('__tomlConfigName__')),
54
+ (0, schematics_1.applyTemplates)({
55
+ ...schematics_1.strings,
56
+ tomlConfigName: name,
57
+ }),
58
+ (0, schematics_1.move)(directory),
59
+ (0, schematics_1.forEach)((file) => {
60
+ if (!tree.exists(file.path)) {
61
+ return file;
62
+ }
63
+ const existingFileBuffer = tree.read(file.path);
64
+ if (existingFileBuffer) {
65
+ let existing = existingFileBuffer.toString();
66
+ if (existing.includes(TOML_MCP_SERVERS_PROP)) {
67
+ const path = `${directory}/${name}`;
68
+ const toolName = schematics_1.strings.classify(tool);
69
+ context.logger.warn(`Skipping Angular MCP server configuration for '${toolName}'.\n` +
70
+ `Configuration already exists in '${path}'.\n`);
71
+ return null;
72
+ }
73
+ // Add the configuration at the end of the file.
74
+ const template = file.content.toString();
75
+ existing = existing.length ? existing + '\n\n' + template : template;
76
+ tree.overwrite(file.path, existing);
77
+ return null;
78
+ }
79
+ return file;
80
+ }),
81
+ ]));
82
+ }
83
+ /**
84
+ * Create an Angular best practices Markdown.
85
+ * If the file exists, the configuration is skipped.
86
+ */
87
+ function addBestPracticesMarkdown({ tree, context, fileInfo, tool, }) {
88
+ const { name, directory } = fileInfo;
89
+ const path = `${directory}/${name}`;
90
+ if (tree.exists(path)) {
91
+ const toolName = schematics_1.strings.classify(tool);
92
+ context.logger.warn(`Skipping configuration file for '${toolName}' at '${path}' because it already exists.\n` +
93
+ 'This is to prevent overwriting a potentially customized file. ' +
94
+ 'If you want to regenerate it with Angular recommended defaults, please delete the existing file and re-run the command.\n' +
95
+ 'You can review the latest recommendations at https://angular.dev/ai/develop-with-ai.\n');
96
+ return (0, schematics_1.noop)();
97
+ }
98
+ return (0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)('./files'), [
99
+ (0, schematics_1.filter)((path) => path.includes('__bestPracticesName__')),
100
+ (0, schematics_1.applyTemplates)({
101
+ ...schematics_1.strings,
102
+ bestPracticesName: name,
103
+ }),
104
+ (0, schematics_1.move)(directory),
105
+ ]));
106
+ }
107
+ //# sourceMappingURL=file_utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file_utils.js","sourceRoot":"","sources":["file_utils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- <% if (frontmatter) { %><%= frontmatter %>
2
- <% } %>
3
1
  You are an expert in TypeScript, Angular, and scalable web application development. You write functional, maintainable, performant, and accessible code following Angular and TypeScript best practices.
4
2
 
5
3
  ## TypeScript Best Practices
@@ -12,6 +10,7 @@ You are an expert in TypeScript, Angular, and scalable web application developme
12
10
 
13
11
  - Always use standalone components over NgModules
14
12
  - Must NOT set `standalone: true` inside Angular decorators. It's the default in Angular v20+.
13
+ - Do NOT set `changeDetection: ChangeDetectionStrategy.OnPush` explicitly. `OnPush` is the default in Angular v22+.
15
14
  - Use signals for state management
16
15
  - Implement lazy loading for feature routes
17
16
  - Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead
@@ -27,9 +26,12 @@ You are an expert in TypeScript, Angular, and scalable web application developme
27
26
 
28
27
  - Keep components small and focused on a single responsibility
29
28
  - Use `input()` and `output()` functions instead of decorators
29
+ - Use `model()` for two-way bound properties with `[(prop)]` syntax instead of pairing `input()` with `output()`
30
30
  - Use `computed()` for derived state
31
+ - Use `linkedSignal()` for state derived from multiple reactive sources that must stay synchronized
31
32
  - Prefer inline templates for small components
32
- - Prefer Reactive forms instead of Template-driven ones
33
+ - Prefer Signal Forms (`@angular/forms/signals`) for new forms. They are stable in Angular v22+ and provide signal-based state, type-safe field access, and schema-based validation
34
+ - When not using Signal Forms, prefer Reactive forms instead of Template-driven ones
33
35
  - Do NOT use `ngClass`, use `class` bindings instead
34
36
  - Do NOT use `ngStyle`, use `style` bindings instead
35
37
  - When using external templates/styles, use paths relative to the component TS file.
@@ -52,4 +54,5 @@ You are an expert in TypeScript, Angular, and scalable web application developme
52
54
 
53
55
  - Design services around a single responsibility
54
56
  - Use the `providedIn: 'root'` option for singleton services
57
+ - Prefer the `@Service` decorator over `@Injectable({providedIn: 'root'})` for new singleton services (Angular v22+)
55
58
  - Use the `inject()` function instead of constructor injection
@@ -0,0 +1,8 @@
1
+ {
2
+ "<%= mcpServersProperty %>": {
3
+ "angular-cli": {
4
+ "command": "npx",
5
+ "args": ["-y", "@angular/cli", "mcp"]
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,3 @@
1
+ [mcp_servers.angular-cli]
2
+ command = "npx"
3
+ args = ["-y", "@angular/cli", "mcp"]
@@ -9,38 +9,59 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.default = default_1;
11
11
  const schematics_1 = require("@angular-devkit/schematics");
12
+ const file_utils_1 = require("./file_utils");
12
13
  const schema_1 = require("./schema");
14
+ const types_1 = require("./types");
15
+ const AGENTS_MD_CFG = {
16
+ type: types_1.ContextFileType.BestPracticesMd,
17
+ name: 'AGENTS.md',
18
+ directory: '.',
19
+ };
13
20
  const AI_TOOLS = {
14
- agents: {
15
- rulesName: 'AGENTS.md',
16
- directory: '.',
17
- },
18
- gemini: {
19
- rulesName: 'GEMINI.md',
20
- directory: '.gemini',
21
- },
22
- claude: {
23
- rulesName: 'CLAUDE.md',
24
- directory: '.claude',
25
- },
26
- copilot: {
27
- rulesName: 'copilot-instructions.md',
28
- directory: '.github',
29
- },
30
- windsurf: {
31
- rulesName: 'guidelines.md',
32
- directory: '.windsurf/rules',
33
- },
34
- jetbrains: {
35
- rulesName: 'guidelines.md',
36
- directory: '.junie',
37
- },
38
- // Cursor file has a front matter section.
39
- cursor: {
40
- rulesName: 'cursor.mdc',
41
- directory: '.cursor/rules',
42
- frontmatter: `---\ncontext: true\npriority: high\nscope: project\n---`,
43
- },
21
+ ['claude-code']: [
22
+ AGENTS_MD_CFG,
23
+ {
24
+ type: types_1.ContextFileType.McpConfig,
25
+ name: '.mcp.json',
26
+ directory: '.',
27
+ },
28
+ ],
29
+ cursor: [
30
+ AGENTS_MD_CFG,
31
+ {
32
+ type: types_1.ContextFileType.McpConfig,
33
+ name: 'mcp.json',
34
+ directory: '.cursor',
35
+ },
36
+ ],
37
+ ['gemini-cli']: [
38
+ {
39
+ type: types_1.ContextFileType.BestPracticesMd,
40
+ name: 'GEMINI.md',
41
+ directory: '.gemini',
42
+ },
43
+ {
44
+ type: types_1.ContextFileType.McpConfig,
45
+ name: 'settings.json',
46
+ directory: '.gemini',
47
+ },
48
+ ],
49
+ ['open-ai-codex']: [
50
+ AGENTS_MD_CFG,
51
+ {
52
+ type: types_1.ContextFileType.McpConfig,
53
+ name: 'config.toml',
54
+ directory: '.codex',
55
+ },
56
+ ],
57
+ vscode: [
58
+ AGENTS_MD_CFG,
59
+ {
60
+ type: types_1.ContextFileType.McpConfig,
61
+ name: 'mcp.json',
62
+ directory: '.vscode',
63
+ },
64
+ ],
44
65
  };
45
66
  function default_1({ tool }) {
46
67
  return (tree, context) => {
@@ -49,26 +70,31 @@ function default_1({ tool }) {
49
70
  }
50
71
  const rules = tool
51
72
  .filter((tool) => tool !== schema_1.Tool.None)
52
- .map((selectedTool) => {
53
- const { rulesName, directory, frontmatter } = AI_TOOLS[selectedTool];
54
- const path = `${directory}/${rulesName}`;
55
- if (tree.exists(path)) {
56
- const toolName = schematics_1.strings.classify(selectedTool);
57
- context.logger.warn(`Skipping configuration file for '${toolName}' at '${path}' because it already exists.\n` +
58
- 'This is to prevent overwriting a potentially customized file. ' +
59
- 'If you want to regenerate it with Angular recommended defaults, please delete the existing file and re-run the command.\n' +
60
- 'You can review the latest recommendations at https://angular.dev/ai/develop-with-ai.');
61
- return (0, schematics_1.noop)();
73
+ .flatMap((selectedTool) => AI_TOOLS[selectedTool].map((fileInfo) => {
74
+ const fileCfgOpts = {
75
+ tree,
76
+ context,
77
+ fileInfo,
78
+ tool: selectedTool,
79
+ };
80
+ switch (fileInfo.type) {
81
+ case types_1.ContextFileType.BestPracticesMd:
82
+ return (0, file_utils_1.addBestPracticesMarkdown)(fileCfgOpts);
83
+ case types_1.ContextFileType.McpConfig:
84
+ switch (selectedTool) {
85
+ case schema_1.Tool.ClaudeCode:
86
+ case schema_1.Tool.Cursor:
87
+ case schema_1.Tool.GeminiCli:
88
+ return (0, file_utils_1.addJsonMcpConfig)(fileCfgOpts, 'mcpServers');
89
+ case schema_1.Tool.OpenAiCodex:
90
+ return (0, file_utils_1.addTomlMcpConfig)(fileCfgOpts);
91
+ case schema_1.Tool.Vscode:
92
+ return (0, file_utils_1.addJsonMcpConfig)(fileCfgOpts, 'servers');
93
+ default:
94
+ throw new Error(`Unsupported '${schematics_1.strings.classify(selectedTool)}' MCP server configuraiton.`);
95
+ }
62
96
  }
63
- return (0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)('./files'), [
64
- (0, schematics_1.applyTemplates)({
65
- ...schematics_1.strings,
66
- rulesName,
67
- frontmatter,
68
- }),
69
- (0, schematics_1.move)(directory),
70
- ]));
71
- });
97
+ }));
72
98
  return (0, schematics_1.chain)(rules);
73
99
  };
74
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAsDH,4BAsCC;AA1FD,2DAUoC;AACpC,qCAAyD;AAEzD,MAAM,QAAQ,GAA2D;IACvE,MAAM,EAAE;QACN,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,GAAG;KACf;IACD,MAAM,EAAE;QACN,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,SAAS;KACrB;IACD,MAAM,EAAE;QACN,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,SAAS;KACrB;IACD,OAAO,EAAE;QACP,SAAS,EAAE,yBAAyB;QACpC,SAAS,EAAE,SAAS;KACrB;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,eAAe;QAC1B,SAAS,EAAE,iBAAiB;KAC7B;IACD,SAAS,EAAE;QACT,SAAS,EAAE,eAAe;QAC1B,SAAS,EAAE,QAAQ;KACpB;IACD,0CAA0C;IAC1C,MAAM,EAAE;QACN,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,eAAe;QAC1B,WAAW,EAAE,yDAAyD;KACvE;CACF,CAAC;AAQF,mBAAyB,EAAE,IAAI,EAAiB;IAC9C,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAA,iBAAI,GAAE,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI;aACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,aAAI,CAAC,IAAI,CAAC;aACpC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YACpB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;YAEzC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,oBAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAChD,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,oCAAoC,QAAQ,SAAS,IAAI,gCAAgC;oBACvF,gEAAgE;oBAChE,2HAA2H;oBAC3H,sFAAsF,CACzF,CAAC;gBAEF,OAAO,IAAA,iBAAI,GAAE,CAAC;YAChB,CAAC;YAED,OAAO,IAAA,sBAAS,EACd,IAAA,kBAAK,EAAC,IAAA,gBAAG,EAAC,SAAS,CAAC,EAAE;gBACpB,IAAA,2BAAc,EAAC;oBACb,GAAG,oBAAO;oBACV,SAAS;oBACT,WAAW;iBACZ,CAAC;gBACF,IAAA,iBAAI,EAAC,SAAS,CAAC;aAChB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,OAAO,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA4DH,4BAyCC;AAnGD,2DAAwE;AACxE,6CAA4F;AAC5F,qCAAyD;AACzD,mCAA4F;AAE5F,MAAM,aAAa,GAAoB;IACrC,IAAI,EAAE,uBAAe,CAAC,eAAe;IACrC,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,GAAG;CACf,CAAC;AAEF,MAAM,QAAQ,GAA6D;IACzE,CAAC,aAAa,CAAC,EAAE;QACf,aAAa;QACb;YACE,IAAI,EAAE,uBAAe,CAAC,SAAS;YAC/B,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,GAAG;SACf;KACF;IACD,MAAM,EAAE;QACN,aAAa;QACb;YACE,IAAI,EAAE,uBAAe,CAAC,SAAS;YAC/B,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,SAAS;SACrB;KACF;IACD,CAAC,YAAY,CAAC,EAAE;QACd;YACE,IAAI,EAAE,uBAAe,CAAC,eAAe;YACrC,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,SAAS;SACrB;QACD;YACE,IAAI,EAAE,uBAAe,CAAC,SAAS;YAC/B,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,SAAS;SACrB;KACF;IACD,CAAC,eAAe,CAAC,EAAE;QACjB,aAAa;QACb;YACE,IAAI,EAAE,uBAAe,CAAC,SAAS;YAC/B,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,QAAQ;SACpB;KACF;IACD,MAAM,EAAE;QACN,aAAa;QACb;YACE,IAAI,EAAE,uBAAe,CAAC,SAAS;YAC/B,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,SAAS;SACrB;KACF;CACF,CAAC;AAEF,mBAAyB,EAAE,IAAI,EAAiB;IAC9C,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAA,iBAAI,GAAE,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI;aACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,aAAI,CAAC,IAAI,CAAC;aACpC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CACxB,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACtC,MAAM,WAAW,GAAoC;gBACnD,IAAI;gBACJ,OAAO;gBACP,QAAQ;gBACR,IAAI,EAAE,YAAY;aACnB,CAAC;YAEF,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,KAAK,uBAAe,CAAC,eAAe;oBAClC,OAAO,IAAA,qCAAwB,EAAC,WAAW,CAAC,CAAC;gBAC/C,KAAK,uBAAe,CAAC,SAAS;oBAC5B,QAAQ,YAAY,EAAE,CAAC;wBACrB,KAAK,aAAI,CAAC,UAAU,CAAC;wBACrB,KAAK,aAAI,CAAC,MAAM,CAAC;wBACjB,KAAK,aAAI,CAAC,SAAS;4BACjB,OAAO,IAAA,6BAAgB,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;wBACrD,KAAK,aAAI,CAAC,WAAW;4BACnB,OAAO,IAAA,6BAAgB,EAAC,WAAW,CAAC,CAAC;wBACvC,KAAK,aAAI,CAAC,MAAM;4BACd,OAAO,IAAA,6BAAgB,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;wBAClD;4BACE,MAAM,IAAI,KAAK,CACb,gBAAgB,oBAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,6BAA6B,CAC5E,CAAC;oBACN,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEJ,OAAO,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC"}
@@ -1,22 +1,20 @@
1
1
  /**
2
- * Generates AI configuration files for Angular projects. This schematic creates
3
- * configuration files that help AI tools follow Angular best practices, improving the
4
- * quality of AI-generated code and suggestions.
2
+ * Generates AI configuration files for Angular projects. This schematic creates AGENTS.md
3
+ * file and Angular MCP server configuration, improving the quality of AI-generated code and
4
+ * suggestions.
5
5
  */
6
6
  export type Schema = {
7
7
  /**
8
- * Specifies which AI tools to generate configuration files for. These file are used to
9
- * improve the outputs of AI tools by following the best practices.
8
+ * Specifies which AI tools to generate configuration files (AGENTS.md, MCP server config)
9
+ * for.
10
10
  */
11
11
  tool?: Tool[];
12
12
  };
13
13
  export declare enum Tool {
14
- Agents = "agents",
15
- Claude = "claude",
16
- Copilot = "copilot",
14
+ ClaudeCode = "claude-code",
17
15
  Cursor = "cursor",
18
- Gemini = "gemini",
19
- Jetbrains = "jetbrains",
16
+ GeminiCli = "gemini-cli",
20
17
  None = "none",
21
- Windsurf = "windsurf"
18
+ OpenAiCodex = "open-ai-codex",
19
+ Vscode = "vscode"
22
20
  }
@@ -5,13 +5,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.Tool = void 0;
6
6
  var Tool;
7
7
  (function (Tool) {
8
- Tool["Agents"] = "agents";
9
- Tool["Claude"] = "claude";
10
- Tool["Copilot"] = "copilot";
8
+ Tool["ClaudeCode"] = "claude-code";
11
9
  Tool["Cursor"] = "cursor";
12
- Tool["Gemini"] = "gemini";
13
- Tool["Jetbrains"] = "jetbrains";
10
+ Tool["GeminiCli"] = "gemini-cli";
14
11
  Tool["None"] = "none";
15
- Tool["Windsurf"] = "windsurf";
12
+ Tool["OpenAiCodex"] = "open-ai-codex";
13
+ Tool["Vscode"] = "vscode";
16
14
  })(Tool || (exports.Tool = Tool = {}));
17
15
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF;;;AAepF,IAAY,IASX;AATD,WAAY,IAAI;IACZ,yBAAiB,CAAA;IACjB,yBAAiB,CAAA;IACjB,2BAAmB,CAAA;IACnB,yBAAiB,CAAA;IACjB,yBAAiB,CAAA;IACjB,+BAAuB,CAAA;IACvB,qBAAa,CAAA;IACb,6BAAqB,CAAA;AACzB,CAAC,EATW,IAAI,oBAAJ,IAAI,QASf"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF;;;AAepF,IAAY,IAOX;AAPD,WAAY,IAAI;IACZ,kCAA0B,CAAA;IAC1B,yBAAiB,CAAA;IACjB,gCAAwB,CAAA;IACxB,qBAAa,CAAA;IACb,qCAA6B,CAAA;IAC7B,yBAAiB,CAAA;AACrB,CAAC,EAPW,IAAI,oBAAJ,IAAI,QAOf"}
@@ -4,14 +4,14 @@
4
4
  "title": "Angular AI Config File Options Schema",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
- "description": "Generates AI configuration files for Angular projects. This schematic creates configuration files that help AI tools follow Angular best practices, improving the quality of AI-generated code and suggestions.",
7
+ "description": "Generates AI configuration files for Angular projects. This schematic creates AGENTS.md file and Angular MCP server configuration, improving the quality of AI-generated code and suggestions.",
8
8
  "properties": {
9
9
  "tool": {
10
10
  "type": "array",
11
11
  "uniqueItems": true,
12
12
  "default": ["none"],
13
13
  "x-prompt": {
14
- "message": "Which AI tools do you want to configure with Angular best practices? https://angular.dev/ai/develop-with-ai",
14
+ "message": "Which AI tools should Angular integrate with? https://angular.dev/ai/develop-with-ai",
15
15
  "type": "list",
16
16
  "items": [
17
17
  {
@@ -19,39 +19,31 @@
19
19
  "label": "None"
20
20
  },
21
21
  {
22
- "value": "agents",
23
- "label": "Agents.md [ https://agents.md/ ]"
24
- },
25
- {
26
- "value": "claude",
27
- "label": "Claude [ https://docs.anthropic.com/en/docs/claude-code/memory ]"
22
+ "value": "claude-code",
23
+ "label": "Claude Code [ `AGENTS.md` + Angular MCP server config ]"
28
24
  },
29
25
  {
30
26
  "value": "cursor",
31
- "label": "Cursor [ https://docs.cursor.com/en/context/rules ]"
32
- },
33
- {
34
- "value": "gemini",
35
- "label": "Gemini [ https://ai.google.dev/gemini-api/docs ]"
27
+ "label": "Cursor [ `AGENTS.md` + Angular MCP server config ]"
36
28
  },
37
29
  {
38
- "value": "copilot",
39
- "label": "GitHub Copilot [ https://code.visualstudio.com/docs/copilot/copilot-customization ]"
30
+ "value": "gemini-cli",
31
+ "label": "Gemini CLI [ `GEMINI.md` + Angular MCP server config ]"
40
32
  },
41
33
  {
42
- "value": "jetbrains",
43
- "label": "JetBrains AI [ https://www.jetbrains.com/help/junie/customize-guidelines.html ]"
34
+ "value": "open-ai-codex",
35
+ "label": "Open AI Codex [ `AGENTS.md` + Angular MCP server config ]"
44
36
  },
45
37
  {
46
- "value": "windsurf",
47
- "label": "Windsurf [ https://docs.windsurf.com/windsurf/cascade/memories#rules ]"
38
+ "value": "vscode",
39
+ "label": "VSCode [ `AGENTS.md` + Angular MCP server config ]"
48
40
  }
49
41
  ]
50
42
  },
51
- "description": "Specifies which AI tools to generate configuration files for. These file are used to improve the outputs of AI tools by following the best practices.",
43
+ "description": "Specifies which AI tools to generate configuration files (AGENTS.md, MCP server config) for.",
52
44
  "items": {
53
45
  "type": "string",
54
- "enum": ["none", "gemini", "copilot", "claude", "cursor", "jetbrains", "windsurf", "agents"]
46
+ "enum": ["none", "claude-code", "cursor", "gemini-cli", "open-ai-codex", "vscode"]
55
47
  }
56
48
  }
57
49
  }
@@ -0,0 +1,36 @@
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 { SchematicContext, Tree } from '@angular-devkit/schematics';
9
+ import { Tool } from './schema';
10
+ /**
11
+ * Types of supported AI configuration files.
12
+ */
13
+ export declare enum ContextFileType {
14
+ /** Represents a Markdown AI instructions file (e.g. AGENTS.md). */
15
+ BestPracticesMd = 0,
16
+ /** Represents an MCP server configuration (e.g. Angular MCP). */
17
+ McpConfig = 1
18
+ }
19
+ /**
20
+ * AI configuration file metadata.
21
+ */
22
+ export interface ContextFileInfo {
23
+ type: ContextFileType;
24
+ name: string;
25
+ directory: string;
26
+ }
27
+ /**
28
+ * Represents the file configuration handler options
29
+ * that are normally passed to the handler functions.
30
+ */
31
+ export type FileConfigurationHandlerOptions = {
32
+ tree: Tree;
33
+ context: SchematicContext;
34
+ fileInfo: ContextFileInfo;
35
+ tool: Tool;
36
+ };
@@ -0,0 +1,21 @@
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.ContextFileType = void 0;
11
+ /**
12
+ * Types of supported AI configuration files.
13
+ */
14
+ var ContextFileType;
15
+ (function (ContextFileType) {
16
+ /** Represents a Markdown AI instructions file (e.g. AGENTS.md). */
17
+ ContextFileType[ContextFileType["BestPracticesMd"] = 0] = "BestPracticesMd";
18
+ /** Represents an MCP server configuration (e.g. Angular MCP). */
19
+ ContextFileType[ContextFileType["McpConfig"] = 1] = "McpConfig";
20
+ })(ContextFileType || (exports.ContextFileType = ContextFileType = {}));
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAKH;;GAEG;AACH,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,mEAAmE;IACnE,2EAAmB,CAAA;IAEnB,kEAAkE;IAClE,+DAAa,CAAA;AACf,CAAC,EANW,eAAe,+BAAf,eAAe,QAM1B"}
package/config/index.js CHANGED
@@ -69,7 +69,7 @@ async function addBrowserslistConfig(projectRoot) {
69
69
  return (0, schematics_1.mergeWith)((0, schematics_1.apply)((0, schematics_1.url)('./files'), [
70
70
  (0, schematics_1.filter)((p) => p.endsWith('.browserslistrc.template')),
71
71
  // The below is replaced by bazel `npm_package`.
72
- (0, schematics_1.applyTemplates)({ baselineDate: '2025-10-20' }),
72
+ (0, schematics_1.applyTemplates)({ baselineDate: '2026-05-07' }),
73
73
  (0, schematics_1.move)(projectRoot),
74
74
  ]));
75
75
  }
@@ -126,14 +126,12 @@ export type Schema = {
126
126
  zoneless?: boolean;
127
127
  };
128
128
  export declare enum AiConfig {
129
- Agents = "agents",
130
- Claude = "claude",
131
- Copilot = "copilot",
129
+ ClaudeCode = "claude-code",
132
130
  Cursor = "cursor",
133
- Gemini = "gemini",
134
- Jetbrains = "jetbrains",
131
+ GeminiCli = "gemini-cli",
135
132
  None = "none",
136
- Windsurf = "windsurf"
133
+ OpenAiCodex = "open-ai-codex",
134
+ Vscode = "vscode"
137
135
  }
138
136
  /**
139
137
  * Configure the initial Git commit for the new repository.
package/ng-new/schema.js CHANGED
@@ -5,14 +5,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.ViewEncapsulation = exports.TestRunner = exports.Style = exports.PackageManager = exports.FileNameStyleGuide = exports.AiConfig = void 0;
6
6
  var AiConfig;
7
7
  (function (AiConfig) {
8
- AiConfig["Agents"] = "agents";
9
- AiConfig["Claude"] = "claude";
10
- AiConfig["Copilot"] = "copilot";
8
+ AiConfig["ClaudeCode"] = "claude-code";
11
9
  AiConfig["Cursor"] = "cursor";
12
- AiConfig["Gemini"] = "gemini";
13
- AiConfig["Jetbrains"] = "jetbrains";
10
+ AiConfig["GeminiCli"] = "gemini-cli";
14
11
  AiConfig["None"] = "none";
15
- AiConfig["Windsurf"] = "windsurf";
12
+ AiConfig["OpenAiCodex"] = "open-ai-codex";
13
+ AiConfig["Vscode"] = "vscode";
16
14
  })(AiConfig || (exports.AiConfig = AiConfig = {}));
17
15
  /**
18
16
  * The file naming convention to use for generated files. The '2025' style guide (default)
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF;;;AAkIpF,IAAY,QASX;AATD,WAAY,QAAQ;IAChB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,mCAAuB,CAAA;IACvB,yBAAa,CAAA;IACb,iCAAqB,CAAA;AACzB,CAAC,EATW,QAAQ,wBAAR,QAAQ,QASnB;AAcD;;;;;GAKG;AACH,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,sCAAgB,CAAA;IAChB,sCAAgB,CAAA;AACpB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAED;;GAEG;AACH,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,6BAAW,CAAA;IACX,6BAAW,CAAA;IACX,+BAAa,CAAA;IACb,+BAAa,CAAA;AACjB,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAED;;GAEG;AACH,IAAY,KAMX;AAND,WAAY,KAAK;IACb,oBAAW,CAAA;IACX,sBAAa,CAAA;IACb,sBAAa,CAAA;IACb,sBAAa,CAAA;IACb,8BAAqB,CAAA;AACzB,CAAC,EANW,KAAK,qBAAL,KAAK,QAMhB;AAED;;GAEG;AACH,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,6BAAe,CAAA;IACf,+BAAiB,CAAA;AACrB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED;;;;;GAKG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,0CAAqB,CAAA;IACrB,kCAAa,CAAA;IACb,4CAAuB,CAAA;AAC3B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF;;;AAkIpF,IAAY,QAOX;AAPD,WAAY,QAAQ;IAChB,sCAA0B,CAAA;IAC1B,6BAAiB,CAAA;IACjB,oCAAwB,CAAA;IACxB,yBAAa,CAAA;IACb,yCAA6B,CAAA;IAC7B,6BAAiB,CAAA;AACrB,CAAC,EAPW,QAAQ,wBAAR,QAAQ,QAOnB;AAcD;;;;;GAKG;AACH,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,sCAAgB,CAAA;IAChB,sCAAgB,CAAA;AACpB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAED;;GAEG;AACH,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,6BAAW,CAAA;IACX,6BAAW,CAAA;IACX,+BAAa,CAAA;IACb,+BAAa,CAAA;AACjB,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAED;;GAEG;AACH,IAAY,KAMX;AAND,WAAY,KAAK;IACb,oBAAW,CAAA;IACX,sBAAa,CAAA;IACb,sBAAa,CAAA;IACb,sBAAa,CAAA;IACb,8BAAqB,CAAA;AACzB,CAAC,EANW,KAAK,qBAAL,KAAK,QAMhB;AAED;;GAEG;AACH,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,6BAAe,CAAA;IACf,+BAAiB,CAAA;AACrB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAED;;;;;GAKG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,0CAAqB,CAAA;IACrB,kCAAa,CAAA;IACb,4CAAuB,CAAA;AAC3B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B"}
@@ -155,7 +155,7 @@
155
155
  "description": "Specifies which AI tools to generate configuration files for. These file are used to improve the outputs of AI tools by following the best practices.",
156
156
  "items": {
157
157
  "type": "string",
158
- "enum": ["none", "gemini", "copilot", "claude", "cursor", "jetbrains", "windsurf", "agents"]
158
+ "enum": ["none", "claude-code", "cursor", "gemini-cli", "open-ai-codex", "vscode"]
159
159
  }
160
160
  },
161
161
  "fileNameStyleGuide": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schematics/angular",
3
- "version": "22.0.1",
3
+ "version": "22.1.0-next.0",
4
4
  "description": "Schematics specific to Angular",
5
5
  "homepage": "https://github.com/angular/angular-cli",
6
6
  "keywords": [
@@ -22,8 +22,8 @@
22
22
  },
23
23
  "schematics": "./collection.json",
24
24
  "dependencies": {
25
- "@angular-devkit/core": "22.0.1",
26
- "@angular-devkit/schematics": "22.0.1",
25
+ "@angular-devkit/core": "22.1.0-next.0",
26
+ "@angular-devkit/schematics": "22.1.0-next.0",
27
27
  "jsonc-parser": "3.3.1",
28
28
  "typescript": "6.0.3"
29
29
  },
@@ -14,10 +14,10 @@ const dependencies = require('./latest-versions/package.json')['dependencies'];
14
14
  exports.latestVersions = {
15
15
  ...dependencies,
16
16
  // As Angular CLI works with same minor versions of Angular Framework, a tilde match for the current
17
- Angular: '^22.0.0',
18
- NgPackagr: '^22.0.0',
19
- DevkitBuildAngular: '^22.0.1',
20
- AngularBuild: '^22.0.1',
21
- AngularSSR: '^22.0.1',
17
+ Angular: '^22.1.0-next.0',
18
+ NgPackagr: '^22.1.0-next.0',
19
+ DevkitBuildAngular: '^22.1.0-next.0',
20
+ AngularBuild: '^22.1.0-next.0',
21
+ AngularSSR: '^22.1.0-next.0',
22
22
  };
23
23
  //# sourceMappingURL=latest-versions.js.map