@@ -10,7 +10,7 @@ import { BuilderContext, createBuilder, targetFromTargetString } from '@angular-
1010import { BuildResult , runWebpack } from '@angular-devkit/build-webpack' ;
1111import { JsonObject } from '@angular-devkit/core' ;
1212import type { ɵParsedMessage as LocalizeMessage } from '@angular/localize' ;
13- import type { Diagnostics } from '@angular/localize/src/ tools/src/diagnostics ' ;
13+ import type { Diagnostics } from '@angular/localize/tools' ;
1414import * as fs from 'fs' ;
1515import * as path from 'path' ;
1616import webpack from 'webpack' ;
@@ -32,24 +32,6 @@ import { Format, Schema } from './schema';
3232
3333export type ExtractI18nBuilderOptions = Schema & JsonObject ;
3434
35- /**
36- * The manually constructed type for the `@angular/localize/tools` module.
37- * This type only contains the exports that are need for this file.
38- *
39- * TODO_ESM: Remove once the `tools` entry point exists in a published package version
40- */
41- interface LocalizeToolsModule {
42- /* eslint-disable max-len */
43- checkDuplicateMessages : typeof import ( '@angular/localize/src/tools/src/extract/duplicates' ) . checkDuplicateMessages ;
44- XmbTranslationSerializer : typeof import ( '@angular/localize/src/tools/src/extract/translation_files/xmb_translation_serializer' ) . XmbTranslationSerializer ;
45- SimpleJsonTranslationSerializer : typeof import ( '@angular/localize/src/tools/src/extract/translation_files/json_translation_serializer' ) . SimpleJsonTranslationSerializer ;
46- Xliff1TranslationSerializer : typeof import ( '@angular/localize/src/tools/src/extract/translation_files/xliff1_translation_serializer' ) . Xliff1TranslationSerializer ;
47- Xliff2TranslationSerializer : typeof import ( '@angular/localize/src/tools/src/extract/translation_files/xliff2_translation_serializer' ) . Xliff2TranslationSerializer ;
48- ArbTranslationSerializer : typeof import ( '@angular/localize/src/tools/src/extract/translation_files/arb_translation_serializer' ) . ArbTranslationSerializer ;
49- LegacyMessageIdMigrationSerializer : typeof import ( '@angular/localize/src/tools/src/extract/translation_files/legacy_message_id_migration_serializer' ) . LegacyMessageIdMigrationSerializer ;
50- /* eslint-enable max-len */
51- }
52-
5335function getI18nOutfile ( format : string | undefined ) {
5436 switch ( format ) {
5537 case 'xmb' :
@@ -71,67 +53,40 @@ function getI18nOutfile(format: string | undefined) {
7153}
7254
7355async function getSerializer (
74- localizeToolsModule : LocalizeToolsModule | undefined ,
56+ localizeToolsModule : typeof import ( '@angular/localize/tools' ) ,
7557 format : Format ,
7658 sourceLocale : string ,
7759 basePath : string ,
7860 useLegacyIds : boolean ,
7961 diagnostics : Diagnostics ,
8062) {
63+ const {
64+ XmbTranslationSerializer,
65+ LegacyMessageIdMigrationSerializer,
66+ ArbTranslationSerializer,
67+ Xliff1TranslationSerializer,
68+ Xliff2TranslationSerializer,
69+ SimpleJsonTranslationSerializer,
70+ } = localizeToolsModule ;
71+
8172 switch ( format ) {
8273 case Format . Xmb :
83- const { XmbTranslationSerializer } =
84- localizeToolsModule ??
85- ( await import (
86- '@angular/localize/src/tools/src/extract/translation_files/xmb_translation_serializer'
87- ) ) ;
88-
8974 // eslint-disable-next-line @typescript-eslint/no-explicit-any
9075 return new XmbTranslationSerializer ( basePath as any , useLegacyIds ) ;
9176 case Format . Xlf :
9277 case Format . Xlif :
9378 case Format . Xliff :
94- const { Xliff1TranslationSerializer } =
95- localizeToolsModule ??
96- ( await import (
97- '@angular/localize/src/tools/src/extract/translation_files/xliff1_translation_serializer'
98- ) ) ;
99-
10079 // eslint-disable-next-line @typescript-eslint/no-explicit-any
10180 return new Xliff1TranslationSerializer ( sourceLocale , basePath as any , useLegacyIds , { } ) ;
10281 case Format . Xlf2 :
10382 case Format . Xliff2 :
104- const { Xliff2TranslationSerializer } =
105- localizeToolsModule ??
106- ( await import (
107- '@angular/localize/src/tools/src/extract/translation_files/xliff2_translation_serializer'
108- ) ) ;
109-
11083 // eslint-disable-next-line @typescript-eslint/no-explicit-any
11184 return new Xliff2TranslationSerializer ( sourceLocale , basePath as any , useLegacyIds , { } ) ;
11285 case Format . Json :
113- const { SimpleJsonTranslationSerializer } =
114- localizeToolsModule ??
115- ( await import (
116- '@angular/localize/src/tools/src/extract/translation_files/json_translation_serializer'
117- ) ) ;
118-
11986 return new SimpleJsonTranslationSerializer ( sourceLocale ) ;
12087 case Format . LegacyMigrate :
121- const { LegacyMessageIdMigrationSerializer } =
122- localizeToolsModule ??
123- ( await import (
124- '@angular/localize/src/tools/src/extract/translation_files/legacy_message_id_migration_serializer'
125- ) ) ;
126-
12788 return new LegacyMessageIdMigrationSerializer ( diagnostics ) ;
12889 case Format . Arb :
129- const { ArbTranslationSerializer } =
130- localizeToolsModule ??
131- ( await import (
132- '@angular/localize/src/tools/src/extract/translation_files/arb_translation_serializer'
133- ) ) ;
134-
13590 const fileSystem = {
13691 relative ( from : string , to : string ) : string {
13792 return path . relative ( from , to ) ;
@@ -287,15 +242,9 @@ export async function execute(
287242
288243 // All the localize usages are setup to first try the ESM entry point then fallback to the deep imports.
289244 // This provides interim compatibility while the framework is transitioned to bundled ESM packages.
290- // TODO_ESM: Remove all deep imports once `@angular/localize` is published with the `tools` entry point
291- let localizeToolsModule ;
292- try {
293- // Load ESM `@angular/localize/tools` using the TypeScript dynamic import workaround.
294- // Once TypeScript provides support for keeping the dynamic import this workaround can be
295- // changed to a direct dynamic import.
296- localizeToolsModule = await loadEsmModule < LocalizeToolsModule > ( '@angular/localize/tools' ) ;
297- } catch { }
298-
245+ const localizeToolsModule = await loadEsmModule < typeof import ( '@angular/localize/tools' ) > (
246+ '@angular/localize/tools' ,
247+ ) ;
299248 const webpackResult = await runWebpack (
300249 ( await transforms ?. webpackConfiguration ?.( config ) ) || config ,
301250 context ,
@@ -315,8 +264,7 @@ export async function execute(
315264
316265 const basePath = config . context || projectRoot ;
317266
318- const { checkDuplicateMessages } =
319- localizeToolsModule ?? ( await import ( '@angular/localize/src/tools/src/extract/duplicates' ) ) ;
267+ const { checkDuplicateMessages } = localizeToolsModule ;
320268
321269 // The filesystem is used to create a relative path for each file
322270 // from the basePath. This relative path is then used in the error message.
0 commit comments