From 6b544f70e706b9e13564d4ddbb0f0cb352942b2c Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 20 Aug 2024 09:58:22 -0400 Subject: [PATCH] fix(@angular/build): support reading on-disk files during i18n extraction If an application has JavaScript files that are sourced directly from disk, the extraction would previously fail due to the i18n extractor only able to access the in-memory generated JavaScript files. The extractor can now access both memory and disk-based JavaScript files. --- .../build/src/builders/extract-i18n/application-extraction.ts | 3 +++ .../src/builders/extract-i18n/application-extraction.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/packages/angular/build/src/builders/extract-i18n/application-extraction.ts b/packages/angular/build/src/builders/extract-i18n/application-extraction.ts index 0a1bf83e91e2..7640cba88366 100644 --- a/packages/angular/build/src/builders/extract-i18n/application-extraction.ts +++ b/packages/angular/build/src/builders/extract-i18n/application-extraction.ts @@ -9,6 +9,7 @@ import type { ɵParsedMessage as LocalizeMessage } from '@angular/localize'; import type { MessageExtractor } from '@angular/localize/tools'; import type { BuilderContext } from '@angular-devkit/architect'; +import { readFileSync } from 'node:fs'; import nodePath from 'node:path'; import { buildApplicationInternal } from '../application'; import type { @@ -101,6 +102,8 @@ function setupLocalizeExtractor( let content; if (file?.origin === 'memory') { content = textDecoder.decode(file.contents); + } else if (file?.origin === 'disk') { + content = readFileSync(file.inputPath, 'utf-8'); } if (content === undefined) { throw new Error('Unknown file requested: ' + requestedPath); diff --git a/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts b/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts index 4e89fad52fd1..f62208738507 100644 --- a/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts +++ b/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts @@ -11,6 +11,7 @@ import { ResultFile, ResultKind, buildApplicationInternal } from '@angular/build import type { ɵParsedMessage as LocalizeMessage } from '@angular/localize'; import type { MessageExtractor } from '@angular/localize/tools'; import type { BuilderContext } from '@angular-devkit/architect'; +import { readFileSync } from 'node:fs'; import nodePath from 'node:path'; import { BrowserBuilderOptions, convertBrowserOptions } from '../browser-esbuild'; import type { NormalizedExtractI18nOptions } from './options'; @@ -106,6 +107,8 @@ function setupLocalizeExtractor( let content; if (file?.origin === 'memory') { content = textDecoder.decode(file.contents); + } else if (file?.origin === 'disk') { + content = readFileSync(file.inputPath, 'utf-8'); } if (content === undefined) { throw new Error('Unknown file requested: ' + requestedPath);