-
Notifications
You must be signed in to change notification settings - Fork 12k
refactor(@angular/cli): add a get Zoneless/OnPush MCP tool #30868
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
1eedbec
to
3e10340
Compare
This change adds a tool that identifies the next steps for migrating a project file or directory to Zoneless or OnPush. The priorities for migration are: 1. Find and report any unsupported uses of ZoneJS APIs. These are easily verifiable. If they exist, they need to be removed and the tool provides suggested replacements 2. Provide requirements for OnPush compatibility for any files with a Component. It is suggested to use an explicit `ChangeDetectionStrategy.Default` until it can be verified the migration is complete. The tool skips any components with explicit change detection strategy definitions. This is required since we have no way of statically verifying a component is compatible with OnPush, so we need some way to indicate the tool should move on from a component 3. When nothing is identified in the above two steps, move on to test files and suggest migrating those to use zoneless. This is the best method to verify that components are zoneless compatible.
3e10340
to
f336ca0
Compare
import { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types'; | ||
import { glob } from 'fast-glob'; | ||
import * as fs from 'fs'; | ||
import ts from 'typescript'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the MCP server is run outside a project, typescript
won't be available. This is appears to be the source for some of the CI failures. Probably would need to dynamically import within the tool itself.
|
||
import { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol'; | ||
import { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types'; | ||
import { glob } from 'fast-glob'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can use import { glob } from 'node:fs/promises';
here since this is experimental (Node.js v22+ has support). Return value is slightly different but doesn't require an extra dependency.
import { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol'; | ||
import { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types'; | ||
import { glob } from 'fast-glob'; | ||
import * as fs from 'fs'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
import * as fs from 'fs'; | |
import * as fs from 'node:fs'; |
*/ | ||
|
||
import { glob } from 'fast-glob'; | ||
import * as fs from 'fs'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
import * as fs from 'fs'; | |
import * as fs from 'node:fs'; |
|
||
import { glob } from 'fast-glob'; | ||
import * as fs from 'fs'; | ||
import { dirname, join } from 'path'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
import { dirname, join } from 'path'; | |
import { dirname, join } from 'node:path'; |
* found in the LICENSE file at https://angular.dev/license | ||
*/ | ||
|
||
import * as fs from 'fs'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
import * as fs from 'fs'; | |
import * as fs from 'node:fs'; |
This change adds a tool that identifies the next steps for migrating a project file or directory to Zoneless or OnPush. The priorities for migration are:
ChangeDetectionStrategy.Default
until it can be verified the migration is complete. The tool skips any components with explicit change detection strategy definitions. This is required since we have no way of statically verifying a component is compatible with OnPush, so we need some way to indicate the tool should move on from a component