Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ import {
} from '../../utils/index-file/index-html-generator';
import { ensureOutputPaths } from '../../utils/output-paths';
import { generateEntryPoints } from '../../utils/package-chunk-sort';
import { readTsconfig } from '../../utils/read-tsconfig';
import { augmentAppWithServiceWorker } from '../../utils/service-worker';
import { Spinner } from '../../utils/spinner';
import { assertCompatibleAngularVersion } from '../../utils/version';
Expand Down Expand Up @@ -86,13 +85,14 @@ async function initialize(
projectRoot: string;
projectSourceRoot?: string;
i18n: I18nOptions;
target: ScriptTarget;
}> {
const originalOutputPath = options.outputPath;

// Assets are processed directly by the builder except when watching
const adjustedOptions = options.watch ? options : { ...options, assets: [] };

const { config, projectRoot, projectSourceRoot, i18n } =
const { config, projectRoot, projectSourceRoot, i18n, target } =
await generateI18nBrowserWebpackConfigFromContext(adjustedOptions, context, (wco) => [
getCommonConfig(wco),
getBrowserConfig(wco),
Expand Down Expand Up @@ -126,7 +126,7 @@ async function initialize(
deleteOutputDir(context.workspaceRoot, originalOutputPath);
}

return { config: transformedConfig || config, projectRoot, projectSourceRoot, i18n };
return { config: transformedConfig || config, projectRoot, projectSourceRoot, i18n, target };
}

/**
Expand Down Expand Up @@ -164,16 +164,11 @@ export function buildWebpackBrowser(
),
);

const { options: compilerOptions } = readTsconfig(options.tsConfig, context.workspaceRoot);
const target = compilerOptions.target || ScriptTarget.ES5;
const buildBrowserFeatures = new BuildBrowserFeatures(sysProjectRoot);

checkInternetExplorerSupport(buildBrowserFeatures.supportedBrowsers, context.logger);

return {
...(await initialize(options, context, transforms.webpackConfiguration)),
target,
};
return initialize(options, context, transforms.webpackConfiguration);
}),
switchMap(
// eslint-disable-next-line max-lines-per-function
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import { colors } from '../../utils/color';
import { I18nOptions } from '../../utils/i18n-options';
import { IndexHtmlTransform } from '../../utils/index-file/index-html-generator';
import { generateEntryPoints } from '../../utils/package-chunk-sort';
import { readTsconfig } from '../../utils/read-tsconfig';
import { assertCompatibleAngularVersion } from '../../utils/version';
import {
generateI18nBrowserWebpackConfigFromContext,
Expand Down Expand Up @@ -276,17 +275,13 @@ export function serveWebpackBrowser(

// If a locale is defined, setup localization
if (locale) {
// Only supported with Ivy
const tsConfig = readTsconfig(browserOptions.tsConfig, workspaceRoot);
if (tsConfig.options.enableIvy !== false) {
if (i18n.inlineLocales.size > 1) {
throw new Error(
'The development server only supports localizing a single locale per build.',
);
}

await setupLocalize(locale, i18n, browserOptions, webpackConfig);
if (i18n.inlineLocales.size > 1) {
throw new Error(
'The development server only supports localizing a single locale per build.',
);
}

await setupLocalize(locale, i18n, browserOptions, webpackConfig);
}

if (transforms.webpackConfiguration) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,12 +200,6 @@ export async function execute(
builderOptions,
context,
(wco) => {
if (wco.tsConfig.options.enableIvy === false) {
context.logger.warn(
'Ivy extraction enabled but application is not Ivy enabled. Extraction may fail.',
);
}

// Default value for legacy message ids is currently true
useLegacyIds = wco.tsConfig.options.enableI18nLegacyMessageIdFormat ?? true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import { NormalizedBrowserBuilderSchema, deleteOutputDir } from '../../utils';
import { i18nInlineEmittedFiles } from '../../utils/i18n-inlining';
import { I18nOptions } from '../../utils/i18n-options';
import { ensureOutputPaths } from '../../utils/output-paths';
import { readTsconfig } from '../../utils/read-tsconfig';
import { assertCompatibleAngularVersion } from '../../utils/version';
import { generateI18nBrowserWebpackConfigFromContext } from '../../utils/webpack-browser-config';
import {
Expand Down Expand Up @@ -62,8 +61,6 @@ export function execute(
// Check Angular version.
assertCompatibleAngularVersion(root);

const tsConfig = readTsconfig(options.tsConfig, root);
const target = tsConfig.options.target || ScriptTarget.ES5;
const baseOutputPath = path.resolve(root, options.outputPath);
let outputPaths: undefined | Map<string, string>;

Expand All @@ -74,7 +71,7 @@ export function execute(
);
}

if (!options.bundleDependencies && tsConfig.options.enableIvy) {
if (!options.bundleDependencies) {
// eslint-disable-next-line import/no-extraneous-dependencies
const { __processed_by_ivy_ngcc__, main = '' } = require('@angular/core/package.json');
if (
Expand All @@ -91,7 +88,7 @@ export function execute(
}

return from(initialize(options, context, transforms.webpackConfiguration)).pipe(
concatMap(({ config, i18n }) => {
concatMap(({ config, i18n, target }) => {
return runWebpack(config, context, {
webpackFactory: require('webpack') as typeof webpack,
logging: (stats, config) => {
Expand Down Expand Up @@ -153,9 +150,10 @@ async function initialize(
): Promise<{
config: webpack.Configuration;
i18n: I18nOptions;
target: ScriptTarget;
}> {
const originalOutputPath = options.outputPath;
const { config, i18n } = await generateI18nBrowserWebpackConfigFromContext(
const { config, i18n, target } = await generateI18nBrowserWebpackConfigFromContext(
{
...options,
buildOptimizer: false,
Expand All @@ -181,5 +179,5 @@ async function initialize(
deleteOutputDir(context.workspaceRoot, originalOutputPath);
}

return { config: transformedConfig || config, i18n };
return { config: transformedConfig || config, i18n, target };
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import { BuilderContext } from '@angular-devkit/architect';
import { getSystemPath, logging, normalize, resolve } from '@angular-devkit/core';
import * as path from 'path';
import { ScriptTarget } from 'typescript';
import { Configuration, javascript } from 'webpack';
import { merge as webpackMerge } from 'webpack-merge';
import { Schema as BrowserBuilderSchema } from '../builders/browser/schema';
Expand Down Expand Up @@ -69,12 +70,18 @@ export async function generateI18nBrowserWebpackConfigFromContext(
projectRoot: string;
projectSourceRoot?: string;
i18n: I18nOptions;
target: ScriptTarget;
}> {
const { buildOptions, i18n } = await configureI18nBuild(context, options);
let target = ScriptTarget.ES5;
const result = await generateBrowserWebpackConfigFromContext(
buildOptions,
context,
webpackPartialGenerator,
(wco) => {
target = wco.scriptTarget;

return webpackPartialGenerator(wco);
},
extraBuildOptions,
);
const config = result.config;
Expand Down Expand Up @@ -119,7 +126,7 @@ export async function generateI18nBrowserWebpackConfigFromContext(
});
}

return { ...result, i18n };
return { ...result, i18n, target };
}
export async function generateBrowserWebpackConfigFromContext(
options: BrowserBuilderSchema,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,6 @@ export function getAnalyticsConfig(

// The category is the builder name if it's an angular builder.
return {
plugins: [
new NgBuildAnalyticsPlugin(
wco.projectRoot,
context.analytics,
category,
!!wco.tsConfig.options.enableIvy,
),
],
plugins: [new NgBuildAnalyticsPlugin(wco.projectRoot, context.analytics, category, true)],
};
}
20 changes: 2 additions & 18 deletions tests/legacy-cli/e2e/tests/i18n/extract-ivy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,10 @@ import { updateJsonFile } from '../../utils/project';
import { expectToFail } from '../../utils/utils';
import { readNgVersion } from '../../utils/version';

export default async function() {
export default async function () {
// Setup an i18n enabled component
await ng('generate', 'component', 'i18n-test');
await writeFile(
join('src/app/i18n-test', 'i18n-test.component.html'),
'<p i18n>Hello world</p>',
);
await writeFile(join('src/app/i18n-test', 'i18n-test.component.html'), '<p i18n>Hello world</p>');

// Should fail if `@angular/localize` is missing
const { message: message1 } = await expectToFail(() => ng('extract-i18n'));
Expand All @@ -34,18 +31,5 @@ export default async function() {
throw new Error('Expected no warnings to be shown');
}

// Disable Ivy
await updateJsonFile('tsconfig.json', config => {
const { angularCompilerOptions = {} } = config;
angularCompilerOptions.enableIvy = false;
config.angularCompilerOptions = angularCompilerOptions;
});

// Should show ivy disabled application warning with enableIvy false
const { stderr: message4 } = await ng('extract-i18n');
if (!message4.includes(`Ivy extraction enabled but application is not Ivy enabled.`)) {
throw new Error('Expected ivy disabled application warning');
}

await uninstallPackage('@angular/localize');
}