@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.
- package/ai-config/file_utils.d.ts +22 -0
- package/ai-config/file_utils.js +107 -0
- package/ai-config/file_utils.js.map +1 -0
- package/ai-config/files/{__rulesName__.template → __bestPracticesName__.template} +6 -3
- package/ai-config/files/__jsonConfigName__.template +8 -0
- package/ai-config/files/__tomlConfigName__.template +3 -0
- package/ai-config/index.js +75 -49
- package/ai-config/index.js.map +1 -1
- package/ai-config/schema.d.ts +9 -11
- package/ai-config/schema.js +4 -6
- package/ai-config/schema.js.map +1 -1
- package/ai-config/schema.json +13 -21
- package/ai-config/types.d.ts +36 -0
- package/ai-config/types.js +21 -0
- package/ai-config/types.js.map +1 -0
- package/config/index.js +1 -1
- package/ng-new/schema.d.ts +4 -6
- package/ng-new/schema.js +4 -6
- package/ng-new/schema.js.map +1 -1
- package/ng-new/schema.json +1 -1
- package/package.json +3 -3
- package/utility/latest-versions.js +5 -5
|
@@ -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
|
|
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
|
package/ai-config/index.js
CHANGED
|
@@ -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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
.
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
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
|
}
|
package/ai-config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
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"}
|
package/ai-config/schema.d.ts
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generates AI configuration files for Angular projects. This schematic creates
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
|
9
|
-
*
|
|
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
|
-
|
|
15
|
-
Claude = "claude",
|
|
16
|
-
Copilot = "copilot",
|
|
14
|
+
ClaudeCode = "claude-code",
|
|
17
15
|
Cursor = "cursor",
|
|
18
|
-
|
|
19
|
-
Jetbrains = "jetbrains",
|
|
16
|
+
GeminiCli = "gemini-cli",
|
|
20
17
|
None = "none",
|
|
21
|
-
|
|
18
|
+
OpenAiCodex = "open-ai-codex",
|
|
19
|
+
Vscode = "vscode"
|
|
22
20
|
}
|
package/ai-config/schema.js
CHANGED
|
@@ -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["
|
|
9
|
-
Tool["Claude"] = "claude";
|
|
10
|
-
Tool["Copilot"] = "copilot";
|
|
8
|
+
Tool["ClaudeCode"] = "claude-code";
|
|
11
9
|
Tool["Cursor"] = "cursor";
|
|
12
|
-
Tool["
|
|
13
|
-
Tool["Jetbrains"] = "jetbrains";
|
|
10
|
+
Tool["GeminiCli"] = "gemini-cli";
|
|
14
11
|
Tool["None"] = "none";
|
|
15
|
-
Tool["
|
|
12
|
+
Tool["OpenAiCodex"] = "open-ai-codex";
|
|
13
|
+
Tool["Vscode"] = "vscode";
|
|
16
14
|
})(Tool || (exports.Tool = Tool = {}));
|
|
17
15
|
//# sourceMappingURL=schema.js.map
|
package/ai-config/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF;;;AAepF,IAAY,
|
|
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"}
|
package/ai-config/schema.json
CHANGED
|
@@ -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
|
|
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
|
|
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": "
|
|
23
|
-
"label": "
|
|
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
|
|
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": "
|
|
39
|
-
"label": "
|
|
30
|
+
"value": "gemini-cli",
|
|
31
|
+
"label": "Gemini CLI [ `GEMINI.md` + Angular MCP server config ]"
|
|
40
32
|
},
|
|
41
33
|
{
|
|
42
|
-
"value": "
|
|
43
|
-
"label": "
|
|
34
|
+
"value": "open-ai-codex",
|
|
35
|
+
"label": "Open AI Codex [ `AGENTS.md` + Angular MCP server config ]"
|
|
44
36
|
},
|
|
45
37
|
{
|
|
46
|
-
"value": "
|
|
47
|
-
"label": "
|
|
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
|
|
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", "
|
|
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: '
|
|
72
|
+
(0, schematics_1.applyTemplates)({ baselineDate: '2026-05-07' }),
|
|
73
73
|
(0, schematics_1.move)(projectRoot),
|
|
74
74
|
]));
|
|
75
75
|
}
|
package/ng-new/schema.d.ts
CHANGED
|
@@ -126,14 +126,12 @@ export type Schema = {
|
|
|
126
126
|
zoneless?: boolean;
|
|
127
127
|
};
|
|
128
128
|
export declare enum AiConfig {
|
|
129
|
-
|
|
130
|
-
Claude = "claude",
|
|
131
|
-
Copilot = "copilot",
|
|
129
|
+
ClaudeCode = "claude-code",
|
|
132
130
|
Cursor = "cursor",
|
|
133
|
-
|
|
134
|
-
Jetbrains = "jetbrains",
|
|
131
|
+
GeminiCli = "gemini-cli",
|
|
135
132
|
None = "none",
|
|
136
|
-
|
|
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["
|
|
9
|
-
AiConfig["Claude"] = "claude";
|
|
10
|
-
AiConfig["Copilot"] = "copilot";
|
|
8
|
+
AiConfig["ClaudeCode"] = "claude-code";
|
|
11
9
|
AiConfig["Cursor"] = "cursor";
|
|
12
|
-
AiConfig["
|
|
13
|
-
AiConfig["Jetbrains"] = "jetbrains";
|
|
10
|
+
AiConfig["GeminiCli"] = "gemini-cli";
|
|
14
11
|
AiConfig["None"] = "none";
|
|
15
|
-
AiConfig["
|
|
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)
|
package/ng-new/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":";AACA,mFAAmF;AACnF,oFAAoF;;;AAkIpF,IAAY,
|
|
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"}
|
package/ng-new/schema.json
CHANGED
|
@@ -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", "
|
|
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.
|
|
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.
|
|
26
|
-
"@angular-devkit/schematics": "22.0.
|
|
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.
|
|
20
|
-
AngularBuild: '^22.0.
|
|
21
|
-
AngularSSR: '^22.0.
|
|
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
|