1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- "use strict";
- /**
- * @license
- * Copyright Google LLC All Rights Reserved.
- *
- * Use of this source code is governed by an MIT-style license that can be
- * found in the LICENSE file at https://angular.dev/license
- */
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.default = default_1;
- const workspace_1 = require("../../utility/workspace");
- const workspace_models_1 = require("../../utility/workspace-models");
- /**
- * Main entry point for the migration rule.
- *
- * This schematic migration performs updates to the Angular workspace configuration
- * to ensure that application projects are properly configured with polyfills
- * required for internationalization (`localize`).
- *
- * It specifically targets application projects that use either the `application`
- * or `browser-esbuild` builders.
- *
- * The migration process involves:
- *
- * 1. Iterating over all projects in the workspace.
- * 2. Checking each project to determine if it is an application-type project.
- * 3. For each application project, examining the associated build targets.
- * 4. If a build target's `localize` option is enabled but the polyfill
- * `@angular/localize/init` is missing from the `polyfills` array, the polyfill
- * is automatically added to ensure proper internationalization support.
- *
- * Additionally, this migration updates projects that use the `dev-server` or `extract-i18n`
- * builders to ensure that deprecated `browserTarget` options are migrated to the
- * newer `buildTarget` field.
- *
- */
- function default_1() {
- return (0, workspace_1.updateWorkspace)((workspace) => {
- for (const project of workspace.projects.values()) {
- if (project.extensions.projectType !== workspace_models_1.ProjectType.Application) {
- continue;
- }
- for (const target of project.targets.values()) {
- if (target.builder === workspace_models_1.Builders.DevServer || target.builder === workspace_models_1.Builders.ExtractI18n) {
- // Migrate `browserTarget` to `buildTarget`
- for (const [, options] of (0, workspace_1.allTargetOptions)(target, false)) {
- if (options['browserTarget'] && !options['buildTarget']) {
- options['buildTarget'] = options['browserTarget'];
- }
- delete options['browserTarget'];
- }
- }
- // Check if the target uses application-related builders
- if (target.builder !== workspace_models_1.Builders.BuildApplication &&
- target.builder !== workspace_models_1.Builders.Application &&
- target.builder !== workspace_models_1.Builders.BrowserEsbuild) {
- continue;
- }
- // Check if polyfills include '@angular/localize/init'
- const polyfills = target.options?.['polyfills'];
- if (Array.isArray(polyfills) &&
- polyfills.some((polyfill) => typeof polyfill === 'string' && polyfill.startsWith('@angular/localize'))) {
- // Skip if the polyfill is already present
- continue;
- }
- // Add '@angular/localize/init' polyfill if localize option is enabled
- for (const [, options] of (0, workspace_1.allTargetOptions)(target, false)) {
- if (options['localize']) {
- target.options ??= {};
- (target.options['polyfills'] ??= []).push('@angular/localize/init');
- break;
- }
- }
- }
- }
- });
- }
|