From 0bcfc80ab9cc4711cb0fa7d5194f6429ae2a32dd Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 9 Oct 2019 12:09:47 +0200 Subject: [PATCH] feat(@angular-devkit/build-angular): add support for i18n extraction with Ivy Re-enable i18n extraction in Ivy by using the legacy VE compiler. --- .../models/webpack-configs/typescript.ts | 7 +++++++ .../build_angular/src/extract-i18n/index.ts | 10 ---------- .../test/extract-i18n/works_spec_large.ts | 5 ++--- tests/legacy-cli/e2e_runner.ts | 3 +-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/typescript.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/typescript.ts index 1ea900c6a7be..7b82019d9eb3 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/typescript.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/typescript.ts @@ -68,6 +68,12 @@ function _createAotPlugin( i18nInFormat: buildOptions.i18nFormat, }; + const compilerOptions = options.compilerOptions || {}; + if (i18nExtract) { + // Extraction of i18n is still using the legacy VE pipeline + compilerOptions.enableIvy = false; + } + const additionalLazyModules: { [module: string]: string } = {}; if (buildOptions.lazyModules) { for (const lazyModule of buildOptions.lazyModules) { @@ -92,6 +98,7 @@ function _createAotPlugin( logger: wco.logger, directTemplateLoading: true, ...options, + compilerOptions, }; pluginOptions = _pluginOptionsOverrides(buildOptions, pluginOptions); diff --git a/packages/angular_devkit/build_angular/src/extract-i18n/index.ts b/packages/angular_devkit/build_angular/src/extract-i18n/index.ts index 92e44c6d9fc5..ae4076b8b939 100644 --- a/packages/angular_devkit/build_angular/src/extract-i18n/index.ts +++ b/packages/angular_devkit/build_angular/src/extract-i18n/index.ts @@ -20,7 +20,6 @@ import { getStatsConfig, getStylesConfig, } from '../angular-cli-files/models/webpack-configs'; -import { readTsconfig } from '../angular-cli-files/utilities/read-tsconfig'; import { statsErrorsToString, statsWarningsToString } from '../angular-cli-files/utilities/stats'; import { Schema as BrowserBuilderOptions } from '../browser/schema'; import { assertCompatibleAngularVersion } from '../utils/version'; @@ -59,15 +58,6 @@ async function execute(options: ExtractI18nBuilderOptions, context: BuilderConte await context.getBuilderNameForTarget(browserTarget), ); - // FIXME: i18n is not yet implemented in Ivy - // We should display a warning and exit gracefully. - const { options: compilerOptions } = readTsconfig(browserOptions.tsConfig, context.workspaceRoot); - if (compilerOptions.enableIvy) { - context.logger.warn('We are sorry but i18n is not yet implemented in Ivy.'); - - return { success: true }; - } - // We need to determine the outFile name so that AngularCompiler can retrieve it. let outFile = options.outFile || getI18nOutfile(options.i18nFormat); if (options.outputPath) { diff --git a/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts b/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts index cd64161c46d1..f22e39932655 100644 --- a/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/extract-i18n/works_spec_large.ts @@ -8,11 +8,10 @@ import { Architect } from '@angular-devkit/architect'; import { TestLogger } from '@angular-devkit/architect/testing'; import { join, normalize, virtualFs } from '@angular-devkit/core'; -import { createArchitect, extractI18nTargetSpec, host, veEnabled } from '../utils'; +import { createArchitect, extractI18nTargetSpec, host } from '../utils'; -// DISABLED_FOR_IVY These should pass but are currently not supported -(veEnabled ? describe : xdescribe)('Extract i18n Target', () => { +describe('Extract i18n Target', () => { const extractionFile = join(normalize('src'), 'messages.xlf'); let architect: Architect; diff --git a/tests/legacy-cli/e2e_runner.ts b/tests/legacy-cli/e2e_runner.ts index 00edf37edd56..851fbcc3ee57 100644 --- a/tests/legacy-cli/e2e_runner.ts +++ b/tests/legacy-cli/e2e_runner.ts @@ -100,8 +100,7 @@ if (!argv.ve) { // As we transition into using Ivy as the default this list should be reassessed. allTests = allTests // Ivy doesn't support i18n externally at the moment. - .filter(name => !name.includes('tests/i18n/')) - .filter(name => !name.endsWith('tests/build/aot/aot-i18n.ts')) + .filter(name => !name.endsWith('tests/build/aot/aot-i18n.ts')); } const shardId = 'shard' in argv ? argv['shard'] : null;