Skip to content

Commit b3792de

Browse files
petebacondarwinmgechev
authored andcommitted
fix(@angular-devkit/build-angular): the path to source_file_utils changed in v10.0.0
1 parent 8f5ecd6 commit b3792de

File tree

2 files changed

+23
-48
lines changed

2 files changed

+23
-48
lines changed

packages/angular_devkit/build_angular/src/dev-server/index.ts

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { ExecutionTransformer } from '../transforms';
3333
import { BuildBrowserFeatures, normalizeOptimization } from '../utils';
3434
import { findCachePath } from '../utils/cache-path';
3535
import { I18nOptions } from '../utils/i18n-options';
36+
import { createI18nPlugins } from '../utils/process-bundle';
3637
import { assertCompatibleAngularVersion } from '../utils/version';
3738
import { getIndexInputFile, getIndexOutputFile } from '../utils/webpack-browser-config';
3839
import { Schema } from './schema';
@@ -54,48 +55,6 @@ const devServerBuildOverriddenKeys: (keyof DevServerBuilderOptions)[] = [
5455
'deployUrl',
5556
];
5657

57-
async function createI18nPlugins(
58-
locale: string,
59-
translation: unknown | undefined,
60-
missingTranslation?: 'error' | 'warning' | 'ignore',
61-
) {
62-
const plugins = [];
63-
// tslint:disable-next-line: no-implicit-dependencies
64-
const localizeDiag = await import('@angular/localize/src/tools/src/diagnostics');
65-
66-
const diagnostics = new localizeDiag.Diagnostics();
67-
68-
const es2015 = await import(
69-
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
70-
'@angular/localize/src/tools/src/translate/source_files/es2015_translate_plugin'
71-
);
72-
plugins.push(
73-
// tslint:disable-next-line: no-any
74-
es2015.makeEs2015TranslatePlugin(diagnostics, (translation || {}) as any, {
75-
missingTranslation: translation === undefined ? 'ignore' : missingTranslation,
76-
}),
77-
);
78-
79-
const es5 = await import(
80-
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
81-
'@angular/localize/src/tools/src/translate/source_files/es5_translate_plugin'
82-
);
83-
plugins.push(
84-
// tslint:disable-next-line: no-any
85-
es5.makeEs5TranslatePlugin(diagnostics, (translation || {}) as any, {
86-
missingTranslation: translation === undefined ? 'ignore' : missingTranslation,
87-
}),
88-
);
89-
90-
const inlineLocale = await import(
91-
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
92-
'@angular/localize/src/tools/src/translate/source_files/locale_plugin'
93-
);
94-
plugins.push(inlineLocale.makeLocalePlugin(locale));
95-
96-
return { diagnostics, plugins };
97-
}
98-
9958
export type DevServerBuilderOutput = DevServerBuildOutput & {
10059
baseUrl: string;
10160
};
@@ -328,7 +287,7 @@ async function setupLocalize(
328287
const { plugins, diagnostics } = await createI18nPlugins(
329288
locale,
330289
localeDescription && localeDescription.translation,
331-
browserOptions.i18nMissingTranslation,
290+
browserOptions.i18nMissingTranslation || 'ignore',
332291
);
333292

334293
// Modify main entrypoint to include locale data

packages/angular_devkit/build_angular/src/utils/process-bundle.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -511,11 +511,11 @@ function createReplacePlugin(replacements: [string, string][]): PluginObj {
511511

512512
const USE_LOCALIZE_PLUGINS = false;
513513

514-
async function createI18nPlugins(
514+
export async function createI18nPlugins(
515515
locale: string,
516516
translation: unknown | undefined,
517517
missingTranslation: 'error' | 'warning' | 'ignore',
518-
localeDataContent: string | undefined,
518+
localeDataContent?: string,
519519
) {
520520
const plugins = [];
521521
// tslint:disable-next-line: no-implicit-dependencies
@@ -693,10 +693,15 @@ async function inlineLocalesDirect(ast: ParseResult, options: InlineOptions) {
693693
}
694694

695695
const { default: generate } = await import('@babel/generator');
696-
const utils = await import(
697-
// tslint:disable-next-line: trailing-comma no-implicit-dependencies
698-
'@angular/localize/src/tools/src/translate/source_files/source_file_utils'
696+
697+
// In Angular v10.0.0 the `source_file_utils` file was moved.
698+
// (Remember to remove the `tryImport()` function when only one import path is required.)
699+
// tslint:disable-next-line: no-implicit-dependencies
700+
const utils = await tryImport<typeof import('@angular/localize/src/tools/src/translate/source_files/source_file_utils')>(
701+
'@angular/localize/src/tools/src/source_file_utils',
702+
'@angular/localize/src/tools/src/translate/source_files/source_file_utils',
699703
);
704+
700705
// tslint:disable-next-line: no-implicit-dependencies
701706
const localizeDiag = await import('@angular/localize/src/tools/src/diagnostics');
702707

@@ -778,6 +783,17 @@ async function inlineLocalesDirect(ast: ParseResult, options: InlineOptions) {
778783
return { file: options.filename, diagnostics: diagnostics.messages, count: positions.length };
779784
}
780785

786+
async function tryImport<T>(...importPaths: string[]): Promise<T> {
787+
for (const importPath of importPaths) {
788+
try {
789+
return await import(importPath);
790+
} catch {
791+
// Do nothing
792+
}
793+
}
794+
throw new Error('Unable to import from any of these paths:\n' + importPaths.map(p => ` - ${p}`).join('\n'));
795+
}
796+
781797
function inlineCopyOnly(options: InlineOptions) {
782798
if (!i18n) {
783799
throw new Error('i18n options are missing');

0 commit comments

Comments
 (0)