@rushstack/webpack5-localization-plugin 0.11.12 → 0.11.14
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.json +35 -0
- package/CHANGELOG.md +13 -1
- package/lib/LocalizationPlugin.js.map +1 -1
- package/lib/trueHashes.d.ts.map +1 -1
- package/lib/trueHashes.js +3 -1
- package/lib/trueHashes.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.json
CHANGED
@@ -1,6 +1,41 @@
|
|
1
1
|
{
|
2
2
|
"name": "@rushstack/webpack5-localization-plugin",
|
3
3
|
"entries": [
|
4
|
+
{
|
5
|
+
"version": "0.11.14",
|
6
|
+
"tag": "@rushstack/webpack5-localization-plugin_v0.11.14",
|
7
|
+
"date": "Tue, 15 Oct 2024 00:12:31 GMT",
|
8
|
+
"comments": {
|
9
|
+
"dependency": [
|
10
|
+
{
|
11
|
+
"comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.12.7`"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"comment": "Updating dependency \"@rushstack/heft\" to `0.68.3`"
|
15
|
+
}
|
16
|
+
]
|
17
|
+
}
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"version": "0.11.13",
|
21
|
+
"tag": "@rushstack/webpack5-localization-plugin_v0.11.13",
|
22
|
+
"date": "Wed, 02 Oct 2024 00:11:19 GMT",
|
23
|
+
"comments": {
|
24
|
+
"patch": [
|
25
|
+
{
|
26
|
+
"comment": "Ensure compatibility with webpack 5.95.0"
|
27
|
+
}
|
28
|
+
],
|
29
|
+
"dependency": [
|
30
|
+
{
|
31
|
+
"comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.12.6`"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"comment": "Updating dependency \"@rushstack/heft\" to `0.68.2`"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
},
|
4
39
|
{
|
5
40
|
"version": "0.11.12",
|
6
41
|
"tag": "@rushstack/webpack5-localization-plugin_v0.11.12",
|
package/CHANGELOG.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
# Change Log - @rushstack/webpack5-localization-plugin
|
2
2
|
|
3
|
-
This log was last generated on Tue,
|
3
|
+
This log was last generated on Tue, 15 Oct 2024 00:12:31 GMT and should not be manually modified.
|
4
|
+
|
5
|
+
## 0.11.14
|
6
|
+
Tue, 15 Oct 2024 00:12:31 GMT
|
7
|
+
|
8
|
+
_Version update only_
|
9
|
+
|
10
|
+
## 0.11.13
|
11
|
+
Wed, 02 Oct 2024 00:11:19 GMT
|
12
|
+
|
13
|
+
### Patches
|
14
|
+
|
15
|
+
- Ensure compatibility with webpack 5.95.0
|
4
16
|
|
5
17
|
## 0.11.12
|
6
18
|
Tue, 01 Oct 2024 00:11:28 GMT
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalizationPlugin.js","sourceRoot":"","sources":["../src/LocalizationPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as path from 'path';\n\nimport type {\n Asset,\n Chunk,\n ChunkGraph,\n Compilation,\n Compiler,\n LoaderContext,\n Module,\n runtime,\n WebpackError,\n WebpackPluginInstance\n} from 'webpack';\n\nimport { getPseudolocalizer, type ILocalizationFile, parseResJson } from '@rushstack/localization-utilities';\n\nimport * as Constants from './utilities/Constants';\nimport type {\n ILocalizationPluginOptions,\n ILocalizationStats,\n ILocaleFileData,\n ILocaleFileObject,\n IResolvedMissingTranslations\n} from './interfaces';\nimport type { IAssetPathOptions } from './webpackInterfaces';\nimport { markEntity, getMark } from './utilities/EntityMarker';\nimport { processLocalizedAsset, processNonLocalizedAsset } from './AssetProcessor';\nimport { getHashFunction, type HashFn, updateAssetHashes } from './trueHashes';\nimport { chunkIsJs } from './utilities/chunkUtilities';\n\n/**\n * @public\n */\nexport interface IStringPlaceholder {\n /**\n * The literal string that will be injected for later replacement.\n */\n value: string;\n /**\n * The identifier for this particular placeholder, for lookup.\n */\n suffix: string;\n /**\n * The values of this string in each output locale.\n */\n valuesByLocale: Map<string, string>;\n /**\n * The key used to identify the source file containing the string.\n */\n locFilePath: string;\n /**\n * The identifier of the string within its original source file.\n */\n stringName: string;\n}\n\nconst PLUGIN_NAME: 'localization' = 'localization';\n\nconst pluginForCompiler: WeakMap<Compiler, LocalizationPlugin> = new WeakMap();\n\n/**\n * Gets the instance of the LocalizationPlugin bound to the specified webpack compiler.\n * Used by loaders.\n */\nexport function getPluginInstance(compiler: Compiler | undefined): LocalizationPlugin {\n const instance: LocalizationPlugin | undefined = compiler && pluginForCompiler.get(compiler);\n if (!instance) {\n throw new Error(`Could not find a LocalizationPlugin instance for the current webpack compiler!`);\n }\n return instance;\n}\n\n/**\n * This plugin facilitates localization in webpack.\n *\n * @public\n */\nexport class LocalizationPlugin implements WebpackPluginInstance {\n public readonly stringKeys: Map<string, IStringPlaceholder> = new Map();\n\n /**\n * @internal\n */\n public readonly _options: ILocalizationPluginOptions;\n private readonly _resolvedTranslatedStringsFromOptions: Map<\n string,\n Map<string, ILocaleFileObject | string | ReadonlyMap<string, string>>\n > = new Map();\n private _stringPlaceholderCounter: number = 0;\n private readonly _stringPlaceholderMap: Map<string, IStringPlaceholder> = new Map();\n private _passthroughLocaleName!: string;\n private _defaultLocale!: string;\n private _noStringsLocaleName!: string;\n private _fillMissingTranslationStrings!: boolean;\n private _formatLocaleForFilename!: (loc: string) => string;\n private readonly _pseudolocalizers: Map<string, (str: string) => string> = new Map();\n\n /**\n * The outermost map's keys are the locale names.\n * The middle map's keys are the resolved, file names.\n * The innermost map's keys are the string identifiers and its values are the string values.\n */\n private _resolvedLocalizedStrings: Map<string, Map<string, Map<string, string>>> = new Map();\n\n public constructor(options: ILocalizationPluginOptions) {\n this._options = options;\n }\n\n /**\n * Apply this plugin to the specified webpack compiler.\n */\n public apply(compiler: Compiler): void {\n pluginForCompiler.set(compiler, this);\n\n // https://github.com/webpack/webpack-dev-server/pull/1929/files#diff-15fb51940da53816af13330d8ce69b4eR66\n const isWebpackDevServer: boolean = process.env.WEBPACK_DEV_SERVER === 'true';\n\n const { errors, warnings } = this._initializeAndValidateOptions(compiler, isWebpackDevServer);\n\n if (errors.length > 0 || warnings.length > 0) {\n compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation: Compilation) => {\n compilation.errors.push(...errors);\n compilation.warnings.push(...warnings);\n });\n\n if (errors.length > 0) {\n // If there are any errors, just pass through the resources in source and don't do any\n // additional configuration\n return;\n }\n }\n\n const { webpack: thisWebpack } = compiler;\n const {\n WebpackError,\n runtime: { GetChunkFilenameRuntimeModule }\n } = thisWebpack;\n\n // Side-channel for async chunk URL generator chunk, since the actual chunk is completely inaccessible\n // from the assetPath hook below when invoked to build the async URL generator\n let chunkWithAsyncURLGenerator: Chunk | undefined;\n\n const originalGenerate: typeof GetChunkFilenameRuntimeModule.prototype.generate =\n GetChunkFilenameRuntimeModule.prototype.generate;\n GetChunkFilenameRuntimeModule.prototype.generate = function (\n this: runtime.GetChunkFilenameRuntimeModule\n ) {\n // `originalGenerate` will invoke `getAssetPath` to produce the async URL generator\n // Need to know the identity of the containing chunk to correctly produce the asset path expression\n chunkWithAsyncURLGenerator = this.chunk;\n const result: string = originalGenerate.call(this);\n // Unset after the call finishes because we are no longer generating async URL generators\n chunkWithAsyncURLGenerator = undefined;\n return result;\n };\n\n const asyncGeneratorTest: RegExp = /^\\\" \\+/;\n\n const { runtimeLocaleExpression } = this._options;\n\n compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation: Compilation) => {\n let hashFn: HashFn | undefined;\n if (this._options.realContentHash) {\n if (runtimeLocaleExpression) {\n compilation.errors.push(\n new WebpackError(\n `The \"realContentHash\" option cannot be used in conjunction with \"runtimeLocaleExpression\".`\n )\n );\n } else {\n hashFn = getHashFunction({ thisWebpack, compilation });\n }\n } else if (compiler.options.optimization?.realContentHash) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `The \\`optimization.realContentHash\\` option is set and the ${LocalizationPlugin.name}'s ` +\n '`realContentHash` option is not set. This will likely produce invalid results. Consider setting the ' +\n `\\`realContentHash\\` option in the ${LocalizationPlugin.name} plugin.`\n )\n );\n }\n\n compilation.hooks.assetPath.tap(\n PLUGIN_NAME,\n (assetPath: string, options: IAssetPathOptions): string => {\n const { chunkGraph } = compilation;\n\n if (\n options.contentHashType === 'javascript' &&\n assetPath.match(Constants.LOCALE_FILENAME_TOKEN_REGEX)\n ) {\n // Does this look like an async chunk URL generator?\n if (typeof options.chunk?.id === 'string' && options.chunk.id.match(asyncGeneratorTest)) {\n const chunkIdsWithStrings: Set<number | string> = new Set<number | string>();\n const chunkIdsWithoutStrings: Set<number | string> = new Set<number | string>();\n\n if (!chunkWithAsyncURLGenerator) {\n compilation.errors.push(\n new WebpackError(`No active chunk while constructing async chunk URL generator!`)\n );\n return assetPath;\n }\n\n const asyncChunks: Set<Chunk> = chunkWithAsyncURLGenerator!.getAllAsyncChunks();\n for (const asyncChunk of asyncChunks) {\n const chunkId: number | string | null = asyncChunk.id;\n\n if (chunkId === null || chunkId === undefined) {\n throw new Error(`Chunk \"${asyncChunk.name}\"'s ID is null or undefined.`);\n }\n\n if (_chunkHasLocalizedModules(chunkGraph, asyncChunk, runtimeLocaleExpression)) {\n chunkIdsWithStrings.add(chunkId);\n } else {\n chunkIdsWithoutStrings.add(chunkId);\n }\n }\n\n return assetPath.replace(Constants.LOCALE_FILENAME_TOKEN_REGEX, () => {\n // Use a replacer function so that we don't need to escape anything in the return value\n\n // If the runtime chunk is itself localized, forcibly match the locale of the runtime chunk\n // Otherwise prefer the runtime expression if specified\n const localeExpression: string =\n (!_chunkHasLocalizedModules(\n chunkGraph,\n chunkWithAsyncURLGenerator!,\n runtimeLocaleExpression\n ) &&\n runtimeLocaleExpression) ||\n Constants.JSONP_PLACEHOLDER;\n\n if (chunkIdsWithStrings.size === 0) {\n return this._formatLocaleForFilename(this._noStringsLocaleName);\n } else if (chunkIdsWithoutStrings.size === 0) {\n return `\" + ${localeExpression} + \"`;\n } else {\n // Generate an object that is used to select between <locale> and <nostrings locale> for each chunk ID\n // Method: pick the smaller set of (localized, non-localized) and map that to 1 (a truthy value)\n // All other IDs map to `undefined` (a falsy value), so we then use the ternary operator to select\n // the appropriate token\n //\n // This can be improved in the future. We can maybe sort the chunks such that the chunks below a certain ID\n // number are localized and the those above are not.\n const chunkMapping: { [chunkId: string]: 1 } = {};\n // Use the map with the fewest values to shorten the expression\n const isLocalizedSmaller: boolean = chunkIdsWithStrings.size <= chunkIdsWithoutStrings.size;\n // These are the ids for which the expression should evaluate to a truthy value\n const smallerSet: Set<number | string> = isLocalizedSmaller\n ? chunkIdsWithStrings\n : chunkIdsWithoutStrings;\n for (const id of smallerSet) {\n chunkMapping[id] = 1;\n }\n\n const noLocaleExpression: string = JSON.stringify(\n this._formatLocaleForFilename(this._noStringsLocaleName)\n );\n\n return `\" + (${JSON.stringify(chunkMapping)}[chunkId]?${\n isLocalizedSmaller ? localeExpression : noLocaleExpression\n }:${isLocalizedSmaller ? noLocaleExpression : localeExpression}) + \"`;\n }\n });\n } else {\n let locale: string | undefined = options.locale;\n if (!locale) {\n const isLocalized: boolean = _chunkHasLocalizedModules(\n chunkGraph,\n options.chunk as Chunk,\n runtimeLocaleExpression\n );\n // Ensure that the initial name maps to a file that should exist in the final output\n locale = isLocalized ? this._defaultLocale : this._noStringsLocaleName;\n }\n return assetPath.replace(\n Constants.LOCALE_FILENAME_TOKEN_REGEX,\n this._formatLocaleForFilename(locale)\n );\n }\n } else {\n return assetPath;\n }\n }\n );\n\n const { outputOptions } = compilation;\n\n // For compatibility with minifiers, need to generate the additional assets after the optimize process runs\n compilation.hooks.processAssets.tapPromise(\n {\n name: PLUGIN_NAME,\n // Generating derived assets, but explicitly want to create them *after* asset optimization\n stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING - 1\n },\n async (): Promise<void> => {\n const locales: Set<string> = new Set(this._resolvedLocalizedStrings.keys());\n\n const { chunkGraph, chunks } = compilation;\n const { localizationStats: statsOptions } = this._options;\n\n const filesByChunkName: Map<string, Record<string, string>> | undefined = statsOptions\n ? new Map()\n : undefined;\n const localizedEntryPointNames: string[] = [];\n const localizedChunkNames: string[] = [];\n\n for (const chunk of chunks) {\n if (!chunkIsJs(chunk, chunkGraph)) {\n continue;\n }\n\n const isLocalized: boolean = _chunkHasLocalizedModules(\n chunkGraph,\n chunk,\n runtimeLocaleExpression\n );\n\n const template: Parameters<typeof Compilation.prototype.getAssetPath>[0] =\n chunk.filenameTemplate ||\n (chunk.hasRuntime() ? outputOptions.filename : outputOptions.chunkFilename)!;\n\n const defaultAssetName: string = compilation.getPath(template, {\n chunk,\n contentHashType: 'javascript'\n // Without locale this should return the name of the default asset\n });\n\n const asset: Asset | undefined = compilation.getAsset(defaultAssetName);\n if (!asset) {\n compilation.errors.push(new WebpackError(`Missing expected chunk asset ${defaultAssetName}`));\n continue;\n }\n\n if (isLocalized) {\n const localizedAssets: Record<string, string> = processLocalizedAsset({\n // Global values\n plugin: this,\n compilation,\n locales,\n defaultLocale: this._defaultLocale,\n fillMissingTranslationStrings: this._fillMissingTranslationStrings,\n formatLocaleForFilenameFn: this._formatLocaleForFilename,\n // Chunk-specific values\n chunk,\n asset,\n filenameTemplate: template\n });\n\n if (filesByChunkName && chunk.name) {\n filesByChunkName.set(chunk.name, localizedAssets);\n (chunk.hasRuntime() ? localizedEntryPointNames : localizedChunkNames).push(chunk.name);\n }\n } else {\n processNonLocalizedAsset({\n // Global values\n plugin: this,\n compilation,\n noStringsLocaleName: this._noStringsLocaleName,\n formatLocaleForFilenameFn: this._formatLocaleForFilename,\n // Chunk-specific values\n chunk,\n asset,\n fileName: defaultAssetName\n });\n }\n }\n\n if (hashFn) {\n updateAssetHashes({\n thisWebpack,\n compilation,\n hashFn,\n filesByChunkName\n });\n }\n\n // Since the stats generation doesn't depend on content, do it immediately\n if (statsOptions && filesByChunkName) {\n const localizationStats: ILocalizationStats = {\n entrypoints: {},\n namedChunkGroups: {}\n };\n\n // Sort in lexicographic order to ensure stable output\n localizedChunkNames.sort();\n for (const chunkName of localizedChunkNames) {\n localizationStats.namedChunkGroups[chunkName] = {\n localizedAssets: filesByChunkName.get(chunkName)!\n };\n }\n\n // Sort in lexicographic order to ensure stable output\n localizedEntryPointNames.sort();\n for (const chunkName of localizedEntryPointNames) {\n localizationStats.entrypoints[chunkName] = {\n localizedAssets: filesByChunkName.get(chunkName)!\n };\n }\n\n const { dropPath, callback } = statsOptions;\n\n if (dropPath) {\n compilation.emitAsset(\n dropPath,\n new compiler.webpack.sources.RawSource(JSON.stringify(localizationStats))\n );\n }\n\n if (callback) {\n try {\n callback(localizationStats, compilation);\n } catch (e) {\n /* swallow errors from the callback */\n }\n }\n }\n }\n );\n });\n }\n\n /**\n * @public\n *\n * @returns An object mapping the string keys to placeholders\n */\n public async addDefaultLocFileAsync(\n context: LoaderContext<{}>,\n localizedFileKey: string,\n localizedResourceData: ILocalizationFile\n ): Promise<Record<string, string>> {\n const locFileData: ReadonlyMap<string, string> = convertLocalizationFileToLocData(localizedResourceData);\n const resultObject: Record<string, string> = this._addLocFileAndGetPlaceholders(\n this._defaultLocale,\n localizedFileKey,\n locFileData\n );\n\n const missingLocales: string[] = [];\n for (const [translatedLocaleName, translatedStrings] of this._resolvedTranslatedStringsFromOptions) {\n const translatedLocFileFromOptions: ILocaleFileData | undefined =\n translatedStrings.get(localizedFileKey);\n\n if (!translatedLocFileFromOptions) {\n missingLocales.push(translatedLocaleName);\n } else {\n const translatedLocFileData: ReadonlyMap<string, string> = await normalizeLocalizedData(\n context,\n translatedLocFileFromOptions\n );\n this._addTranslations(translatedLocaleName, localizedFileKey, translatedLocFileData);\n }\n }\n\n const { resolveMissingTranslatedStrings } = this._options.localizedData;\n\n if (missingLocales.length > 0 && resolveMissingTranslatedStrings) {\n let resolvedTranslatedData: IResolvedMissingTranslations | undefined = undefined;\n try {\n resolvedTranslatedData = await resolveMissingTranslatedStrings(\n missingLocales,\n localizedFileKey,\n context\n );\n } catch (e) {\n context.emitError(e);\n }\n\n if (resolvedTranslatedData) {\n const iterable: Iterable<[string, ILocaleFileData]> =\n resolvedTranslatedData instanceof Map\n ? resolvedTranslatedData.entries()\n : Object.entries(resolvedTranslatedData);\n for (const [resolvedLocaleName, resolvedLocaleData] of iterable) {\n if (resolvedLocaleData) {\n const translatedLocFileData: ReadonlyMap<string, string> = await normalizeLocalizedData(\n context,\n resolvedLocaleData\n );\n this._addTranslations(resolvedLocaleName, localizedFileKey, translatedLocFileData);\n }\n }\n }\n }\n\n for (const [pseudolocaleName, pseudolocalizer] of this._pseudolocalizers) {\n const pseudolocFileData: Map<string, string> = new Map();\n\n for (const [stringName, stringValue] of locFileData) {\n pseudolocFileData.set(stringName, pseudolocalizer(stringValue));\n }\n\n this._addTranslations(pseudolocaleName, localizedFileKey, pseudolocFileData);\n }\n\n markEntity(context._module!, true);\n\n return resultObject;\n }\n\n /**\n * @public\n */\n public getPlaceholder(localizedFileKey: string, stringName: string): IStringPlaceholder | undefined {\n const stringKey: string = `${localizedFileKey}?${stringName}`;\n return this.stringKeys.get(stringKey);\n }\n\n /**\n * @internal\n */\n public getDataForSerialNumber(serialNumber: string): IStringPlaceholder | undefined {\n return this._stringPlaceholderMap.get(serialNumber);\n }\n\n private _addLocFileAndGetPlaceholders(\n localeName: string,\n localizedFileKey: string,\n localizedFileData: ReadonlyMap<string, string>\n ): Record<string, string> {\n const filesMap: Map<string, ReadonlyMap<string, string>> = this._resolvedLocalizedStrings.get(\n localeName\n )!;\n\n filesMap.set(localizedFileKey, localizedFileData);\n\n const resultObject: Record<string, string> = {};\n for (const [stringName, stringValue] of localizedFileData) {\n const stringKey: string = `${localizedFileKey}?${stringName}`;\n let placeholder: IStringPlaceholder | undefined = this.stringKeys.get(stringKey);\n if (!placeholder) {\n // TODO: This may need to be a deterministic identifier to support watch / incremental compilation\n const suffix: string = `${this._stringPlaceholderCounter++}`;\n\n const values: Map<string, string> = new Map();\n values.set(this._passthroughLocaleName, stringName);\n\n placeholder = {\n value: `${Constants.STRING_PLACEHOLDER_PREFIX}_\\\\_${Constants.STRING_PLACEHOLDER_LABEL}_${suffix}`,\n suffix,\n valuesByLocale: values,\n locFilePath: localizedFileKey,\n stringName\n };\n\n this.stringKeys.set(stringKey, placeholder);\n this._stringPlaceholderMap.set(suffix, placeholder);\n }\n\n resultObject[stringName] = placeholder.value;\n\n placeholder.valuesByLocale.set(localeName, stringValue);\n }\n\n return resultObject;\n }\n\n private _addTranslations(\n localeName: string,\n localizedFileKey: string,\n localizedFileData: ReadonlyMap<string, string>\n ): void {\n for (const [stringName, stringValue] of localizedFileData) {\n const stringKey: string = `${localizedFileKey}?${stringName}`;\n const placeholder: IStringPlaceholder | undefined = this.stringKeys.get(stringKey);\n if (placeholder) {\n placeholder.valuesByLocale.set(localeName, stringValue);\n }\n }\n }\n\n private _initializeAndValidateOptions(\n compiler: Compiler,\n isWebpackDevServer: boolean\n ): { errors: WebpackError[]; warnings: WebpackError[] } {\n const errors: WebpackError[] = [];\n const warnings: WebpackError[] = [];\n\n const { WebpackError } = compiler.webpack;\n const { options: configuration } = compiler;\n\n const LOCALE_NAME_REGEX: RegExp = /[a-z-]/i;\n function ensureValidLocaleName(localeName: string): boolean {\n if (!localeName.match(LOCALE_NAME_REGEX)) {\n errors.push(\n new WebpackError(\n `Invalid locale name: ${localeName}. Locale names may only contain letters and hyphens.`\n )\n );\n return false;\n } else {\n return true;\n }\n }\n\n // START configuration\n if (\n !configuration.output ||\n !configuration.output.filename ||\n typeof configuration.output.filename !== 'string' ||\n configuration.output.filename.indexOf(Constants.LOCALE_FILENAME_TOKEN) === -1\n ) {\n errors.push(\n new WebpackError(\n 'The configuration.output.filename property must be provided, must be a string, and must include ' +\n `the ${Constants.LOCALE_FILENAME_TOKEN} placeholder`\n )\n );\n }\n // END configuration\n\n // START misc options\n // START options.localizedData\n const { localizedData } = this._options;\n if (localizedData) {\n // START options.localizedData.passthroughLocale\n const { passthroughLocale } = localizedData;\n if (passthroughLocale) {\n const { usePassthroughLocale, passthroughLocaleName = 'passthrough' } = passthroughLocale;\n if (usePassthroughLocale) {\n this._passthroughLocaleName = passthroughLocaleName;\n this._resolvedLocalizedStrings.set(passthroughLocaleName, new Map());\n }\n }\n // END options.localizedData.passthroughLocale\n\n // START options.localizedData.translatedStrings\n const resolveRelativeToContext: (relative: string) => string = (\n configuration.context?.startsWith('/') ? path.posix.resolve : path.resolve\n ).bind(0, configuration.context!);\n const { translatedStrings } = localizedData;\n this._resolvedTranslatedStringsFromOptions.clear();\n if (translatedStrings) {\n for (const [localeName, locale] of Object.entries(translatedStrings)) {\n if (this._resolvedLocalizedStrings.has(localeName)) {\n errors.push(\n new WebpackError(\n `The locale \"${localeName}\" appears multiple times. ` +\n 'There may be multiple instances with different casing.'\n )\n );\n return { errors, warnings };\n }\n\n if (!ensureValidLocaleName(localeName)) {\n return { errors, warnings };\n }\n\n this._resolvedLocalizedStrings.set(localeName, new Map());\n const resolvedFromOptionsForLocale: Map<string, ILocaleFileData> = new Map();\n this._resolvedTranslatedStringsFromOptions.set(localeName, resolvedFromOptionsForLocale);\n\n for (const [locFilePath, locFileDataFromOptions] of Object.entries(locale)) {\n const normalizedLocFilePath: string = resolveRelativeToContext(locFilePath);\n\n if (resolvedFromOptionsForLocale.has(normalizedLocFilePath)) {\n errors.push(\n new WebpackError(\n `The localization file path \"${locFilePath}\" appears multiple times in locale ${localeName}. ` +\n 'There may be multiple instances with different casing.'\n )\n );\n return { errors, warnings };\n }\n\n const normalizedLocFileDataFromOptions: ILocaleFileData =\n typeof locFileDataFromOptions === 'string'\n ? resolveRelativeToContext(locFileDataFromOptions)\n : locFileDataFromOptions;\n\n resolvedFromOptionsForLocale.set(normalizedLocFilePath, normalizedLocFileDataFromOptions);\n }\n }\n }\n // END options.localizedData.translatedStrings\n\n // START options.localizedData.defaultLocale\n const { defaultLocale } = localizedData;\n if (defaultLocale) {\n const { localeName, fillMissingTranslationStrings } = defaultLocale;\n if (localeName) {\n if (this._resolvedLocalizedStrings.has(localeName)) {\n errors.push(new WebpackError('The default locale is also specified in the translated strings.'));\n return { errors, warnings };\n } else if (!ensureValidLocaleName(localeName)) {\n return { errors, warnings };\n }\n\n this._resolvedLocalizedStrings.set(localeName, new Map());\n this._defaultLocale = localeName;\n this._fillMissingTranslationStrings = !!fillMissingTranslationStrings;\n } else {\n errors.push(new WebpackError('Missing default locale name'));\n return { errors, warnings };\n }\n } else {\n errors.push(new WebpackError('Missing default locale options.'));\n return { errors, warnings };\n }\n // END options.localizedData.defaultLocale\n\n // START options.localizedData.pseudoLocales\n const { pseudolocales } = localizedData;\n if (pseudolocales) {\n for (const [pseudolocaleName, pseudoLocaleOpts] of Object.entries(pseudolocales)) {\n if (this._defaultLocale === pseudolocaleName) {\n errors.push(\n new WebpackError(`A pseudolocale (${pseudolocaleName}) name is also the default locale name.`)\n );\n return { errors, warnings };\n }\n\n if (this._resolvedLocalizedStrings.has(pseudolocaleName)) {\n errors.push(\n new WebpackError(\n `A pseudolocale (${pseudolocaleName}) name is also specified in the translated strings.`\n )\n );\n return { errors, warnings };\n }\n\n this._pseudolocalizers.set(pseudolocaleName, getPseudolocalizer(pseudoLocaleOpts));\n this._resolvedLocalizedStrings.set(pseudolocaleName, new Map<string, Map<string, string>>());\n }\n }\n // END options.localizedData.pseudoLocales\n } else if (!isWebpackDevServer) {\n throw new Error('Localized data must be provided unless webpack dev server is running.');\n }\n // END options.localizedData\n\n // START options.noStringsLocaleName\n const { noStringsLocaleName } = this._options;\n if (\n noStringsLocaleName === undefined ||\n noStringsLocaleName === null ||\n !ensureValidLocaleName(noStringsLocaleName)\n ) {\n this._noStringsLocaleName = 'none';\n } else {\n this._noStringsLocaleName = noStringsLocaleName;\n }\n // END options.noStringsLocaleName\n\n // START options.formatLocaleForFilename\n const { formatLocaleForFilename = (localeName: string) => localeName } = this._options;\n this._formatLocaleForFilename = formatLocaleForFilename;\n // END options.formatLocaleForFilename\n return { errors, warnings };\n }\n}\n\nfunction _chunkHasLocalizedModules(\n chunkGraph: ChunkGraph,\n chunk: Chunk,\n runtimeLocaleExpression: string | undefined\n): boolean {\n let chunkHasAnyLocModules: boolean | undefined = getMark(chunk);\n if (chunkHasAnyLocModules === undefined) {\n chunkHasAnyLocModules = false;\n const candidateModules: Iterable<Module> | undefined = chunkGraph.getChunkModulesIterableBySourceType(\n chunk,\n 'javascript'\n );\n if (candidateModules) {\n outer: for (const module of candidateModules) {\n const moduleMark: boolean | undefined = getMark(module);\n if (moduleMark) {\n chunkHasAnyLocModules = true;\n break;\n } else if (moduleMark === false) {\n continue;\n }\n\n // Is this a concatenated module?\n const { _modules: modules } = module as { _modules?: Iterable<Module> };\n if (modules) {\n for (const nestedModule of modules) {\n if (getMark(nestedModule)) {\n markEntity(module, true);\n chunkHasAnyLocModules = true;\n break outer;\n }\n }\n markEntity(module, false);\n }\n }\n }\n\n // If this chunk doesn't directly contain any localized resources, it still\n // needs to be localized if it's an entrypoint chunk (i.e. - it has a runtime)\n // and it loads localized async chunks.\n // In that case, the generated chunk URL generation code needs to contain\n // the locale name.\n if (!chunkHasAnyLocModules && !runtimeLocaleExpression && chunk.hasRuntime()) {\n for (const asyncChunk of chunk.getAllAsyncChunks()) {\n if (_chunkHasLocalizedModules(chunkGraph, asyncChunk, runtimeLocaleExpression)) {\n chunkHasAnyLocModules = true;\n break;\n }\n }\n }\n\n markEntity(chunk, chunkHasAnyLocModules);\n }\n\n return chunkHasAnyLocModules;\n}\n\nfunction convertLocalizationFileToLocData(locFile: ILocalizationFile): ReadonlyMap<string, string> {\n const locFileData: Map<string, string> = new Map();\n for (const [stringName, locFileEntry] of Object.entries(locFile)) {\n locFileData.set(stringName, locFileEntry.value);\n }\n\n return locFileData;\n}\n\nasync function normalizeLocalizedData(\n context: LoaderContext<{}>,\n localizedData: ILocaleFileData\n): Promise<ReadonlyMap<string, string>> {\n if (typeof localizedData === 'string') {\n // The value is the path to a file. Add it as a file dependency\n context.addDependency(localizedData);\n const content: string = await new Promise((resolve, reject) => {\n // Use context.fs so that the plugin is compatible with overriding compiler.inputFileSystem\n context.fs.readFile(localizedData, (err, data) => {\n if (err) {\n return reject(err);\n } else if (!data) {\n return reject(new Error(`No data in ${localizedData}`));\n }\n resolve(data.toString());\n });\n });\n\n const localizationFile: ILocalizationFile = parseResJson({\n filePath: localizedData,\n content\n });\n\n return convertLocalizationFileToLocData(localizationFile);\n } else {\n return localizedData instanceof Map ? localizedData : new Map(Object.entries(localizedData));\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"LocalizationPlugin.js","sourceRoot":"","sources":["../src/LocalizationPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as path from 'path';\n\nimport type {\n Asset,\n Chunk,\n ChunkGraph,\n Compilation,\n Compiler,\n LoaderContext,\n Module,\n runtime,\n WebpackError,\n WebpackPluginInstance\n} from 'webpack';\n\nimport { getPseudolocalizer, type ILocalizationFile, parseResJson } from '@rushstack/localization-utilities';\n\nimport * as Constants from './utilities/Constants';\nimport type {\n ILocalizationPluginOptions,\n ILocalizationStats,\n ILocaleFileData,\n ILocaleFileObject,\n IResolvedMissingTranslations\n} from './interfaces';\nimport type { IAssetPathOptions } from './webpackInterfaces';\nimport { markEntity, getMark } from './utilities/EntityMarker';\nimport { processLocalizedAsset, processNonLocalizedAsset } from './AssetProcessor';\nimport { getHashFunction, type HashFn, updateAssetHashes } from './trueHashes';\nimport { chunkIsJs } from './utilities/chunkUtilities';\n\n/**\n * @public\n */\nexport interface IStringPlaceholder {\n /**\n * The literal string that will be injected for later replacement.\n */\n value: string;\n /**\n * The identifier for this particular placeholder, for lookup.\n */\n suffix: string;\n /**\n * The values of this string in each output locale.\n */\n valuesByLocale: Map<string, string>;\n /**\n * The key used to identify the source file containing the string.\n */\n locFilePath: string;\n /**\n * The identifier of the string within its original source file.\n */\n stringName: string;\n}\n\nconst PLUGIN_NAME: 'localization' = 'localization';\n\nconst pluginForCompiler: WeakMap<Compiler, LocalizationPlugin> = new WeakMap();\n\n/**\n * Gets the instance of the LocalizationPlugin bound to the specified webpack compiler.\n * Used by loaders.\n */\nexport function getPluginInstance(compiler: Compiler | undefined): LocalizationPlugin {\n const instance: LocalizationPlugin | undefined = compiler && pluginForCompiler.get(compiler);\n if (!instance) {\n throw new Error(`Could not find a LocalizationPlugin instance for the current webpack compiler!`);\n }\n return instance;\n}\n\n/**\n * This plugin facilitates localization in webpack.\n *\n * @public\n */\nexport class LocalizationPlugin implements WebpackPluginInstance {\n public readonly stringKeys: Map<string, IStringPlaceholder> = new Map();\n\n /**\n * @internal\n */\n public readonly _options: ILocalizationPluginOptions;\n private readonly _resolvedTranslatedStringsFromOptions: Map<\n string,\n Map<string, ILocaleFileObject | string | ReadonlyMap<string, string>>\n > = new Map();\n private _stringPlaceholderCounter: number = 0;\n private readonly _stringPlaceholderMap: Map<string, IStringPlaceholder> = new Map();\n private _passthroughLocaleName!: string;\n private _defaultLocale!: string;\n private _noStringsLocaleName!: string;\n private _fillMissingTranslationStrings!: boolean;\n private _formatLocaleForFilename!: (loc: string) => string;\n private readonly _pseudolocalizers: Map<string, (str: string) => string> = new Map();\n\n /**\n * The outermost map's keys are the locale names.\n * The middle map's keys are the resolved, file names.\n * The innermost map's keys are the string identifiers and its values are the string values.\n */\n private _resolvedLocalizedStrings: Map<string, Map<string, Map<string, string>>> = new Map();\n\n public constructor(options: ILocalizationPluginOptions) {\n this._options = options;\n }\n\n /**\n * Apply this plugin to the specified webpack compiler.\n */\n public apply(compiler: Compiler): void {\n pluginForCompiler.set(compiler, this);\n\n // https://github.com/webpack/webpack-dev-server/pull/1929/files#diff-15fb51940da53816af13330d8ce69b4eR66\n const isWebpackDevServer: boolean = process.env.WEBPACK_DEV_SERVER === 'true';\n\n const { errors, warnings } = this._initializeAndValidateOptions(compiler, isWebpackDevServer);\n\n if (errors.length > 0 || warnings.length > 0) {\n compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation: Compilation) => {\n compilation.errors.push(...errors);\n compilation.warnings.push(...warnings);\n });\n\n if (errors.length > 0) {\n // If there are any errors, just pass through the resources in source and don't do any\n // additional configuration\n return;\n }\n }\n\n const { webpack: thisWebpack } = compiler;\n const {\n WebpackError,\n runtime: { GetChunkFilenameRuntimeModule }\n } = thisWebpack;\n\n // Side-channel for async chunk URL generator chunk, since the actual chunk is completely inaccessible\n // from the assetPath hook below when invoked to build the async URL generator\n let chunkWithAsyncURLGenerator: Chunk | undefined;\n\n const originalGenerate: typeof GetChunkFilenameRuntimeModule.prototype.generate =\n GetChunkFilenameRuntimeModule.prototype.generate;\n GetChunkFilenameRuntimeModule.prototype.generate = function (\n this: runtime.GetChunkFilenameRuntimeModule\n ): string | null {\n // `originalGenerate` will invoke `getAssetPath` to produce the async URL generator\n // Need to know the identity of the containing chunk to correctly produce the asset path expression\n chunkWithAsyncURLGenerator = this.chunk;\n const result: string | null = originalGenerate.call(this);\n // Unset after the call finishes because we are no longer generating async URL generators\n chunkWithAsyncURLGenerator = undefined;\n return result;\n };\n\n const asyncGeneratorTest: RegExp = /^\\\" \\+/;\n\n const { runtimeLocaleExpression } = this._options;\n\n compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation: Compilation) => {\n let hashFn: HashFn | undefined;\n if (this._options.realContentHash) {\n if (runtimeLocaleExpression) {\n compilation.errors.push(\n new WebpackError(\n `The \"realContentHash\" option cannot be used in conjunction with \"runtimeLocaleExpression\".`\n )\n );\n } else {\n hashFn = getHashFunction({ thisWebpack, compilation });\n }\n } else if (compiler.options.optimization?.realContentHash) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `The \\`optimization.realContentHash\\` option is set and the ${LocalizationPlugin.name}'s ` +\n '`realContentHash` option is not set. This will likely produce invalid results. Consider setting the ' +\n `\\`realContentHash\\` option in the ${LocalizationPlugin.name} plugin.`\n )\n );\n }\n\n compilation.hooks.assetPath.tap(\n PLUGIN_NAME,\n (assetPath: string, options: IAssetPathOptions): string => {\n const { chunkGraph } = compilation;\n\n if (\n options.contentHashType === 'javascript' &&\n assetPath.match(Constants.LOCALE_FILENAME_TOKEN_REGEX)\n ) {\n // Does this look like an async chunk URL generator?\n if (typeof options.chunk?.id === 'string' && options.chunk.id.match(asyncGeneratorTest)) {\n const chunkIdsWithStrings: Set<number | string> = new Set<number | string>();\n const chunkIdsWithoutStrings: Set<number | string> = new Set<number | string>();\n\n if (!chunkWithAsyncURLGenerator) {\n compilation.errors.push(\n new WebpackError(`No active chunk while constructing async chunk URL generator!`)\n );\n return assetPath;\n }\n\n const asyncChunks: Set<Chunk> = chunkWithAsyncURLGenerator!.getAllAsyncChunks();\n for (const asyncChunk of asyncChunks) {\n const chunkId: number | string | null = asyncChunk.id;\n\n if (chunkId === null || chunkId === undefined) {\n throw new Error(`Chunk \"${asyncChunk.name}\"'s ID is null or undefined.`);\n }\n\n if (_chunkHasLocalizedModules(chunkGraph, asyncChunk, runtimeLocaleExpression)) {\n chunkIdsWithStrings.add(chunkId);\n } else {\n chunkIdsWithoutStrings.add(chunkId);\n }\n }\n\n return assetPath.replace(Constants.LOCALE_FILENAME_TOKEN_REGEX, () => {\n // Use a replacer function so that we don't need to escape anything in the return value\n\n // If the runtime chunk is itself localized, forcibly match the locale of the runtime chunk\n // Otherwise prefer the runtime expression if specified\n const localeExpression: string =\n (!_chunkHasLocalizedModules(\n chunkGraph,\n chunkWithAsyncURLGenerator!,\n runtimeLocaleExpression\n ) &&\n runtimeLocaleExpression) ||\n Constants.JSONP_PLACEHOLDER;\n\n if (chunkIdsWithStrings.size === 0) {\n return this._formatLocaleForFilename(this._noStringsLocaleName);\n } else if (chunkIdsWithoutStrings.size === 0) {\n return `\" + ${localeExpression} + \"`;\n } else {\n // Generate an object that is used to select between <locale> and <nostrings locale> for each chunk ID\n // Method: pick the smaller set of (localized, non-localized) and map that to 1 (a truthy value)\n // All other IDs map to `undefined` (a falsy value), so we then use the ternary operator to select\n // the appropriate token\n //\n // This can be improved in the future. We can maybe sort the chunks such that the chunks below a certain ID\n // number are localized and the those above are not.\n const chunkMapping: { [chunkId: string]: 1 } = {};\n // Use the map with the fewest values to shorten the expression\n const isLocalizedSmaller: boolean = chunkIdsWithStrings.size <= chunkIdsWithoutStrings.size;\n // These are the ids for which the expression should evaluate to a truthy value\n const smallerSet: Set<number | string> = isLocalizedSmaller\n ? chunkIdsWithStrings\n : chunkIdsWithoutStrings;\n for (const id of smallerSet) {\n chunkMapping[id] = 1;\n }\n\n const noLocaleExpression: string = JSON.stringify(\n this._formatLocaleForFilename(this._noStringsLocaleName)\n );\n\n return `\" + (${JSON.stringify(chunkMapping)}[chunkId]?${\n isLocalizedSmaller ? localeExpression : noLocaleExpression\n }:${isLocalizedSmaller ? noLocaleExpression : localeExpression}) + \"`;\n }\n });\n } else {\n let locale: string | undefined = options.locale;\n if (!locale) {\n const isLocalized: boolean = _chunkHasLocalizedModules(\n chunkGraph,\n options.chunk as Chunk,\n runtimeLocaleExpression\n );\n // Ensure that the initial name maps to a file that should exist in the final output\n locale = isLocalized ? this._defaultLocale : this._noStringsLocaleName;\n }\n return assetPath.replace(\n Constants.LOCALE_FILENAME_TOKEN_REGEX,\n this._formatLocaleForFilename(locale)\n );\n }\n } else {\n return assetPath;\n }\n }\n );\n\n const { outputOptions } = compilation;\n\n // For compatibility with minifiers, need to generate the additional assets after the optimize process runs\n compilation.hooks.processAssets.tapPromise(\n {\n name: PLUGIN_NAME,\n // Generating derived assets, but explicitly want to create them *after* asset optimization\n stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING - 1\n },\n async (): Promise<void> => {\n const locales: Set<string> = new Set(this._resolvedLocalizedStrings.keys());\n\n const { chunkGraph, chunks } = compilation;\n const { localizationStats: statsOptions } = this._options;\n\n const filesByChunkName: Map<string, Record<string, string>> | undefined = statsOptions\n ? new Map()\n : undefined;\n const localizedEntryPointNames: string[] = [];\n const localizedChunkNames: string[] = [];\n\n for (const chunk of chunks) {\n if (!chunkIsJs(chunk, chunkGraph)) {\n continue;\n }\n\n const isLocalized: boolean = _chunkHasLocalizedModules(\n chunkGraph,\n chunk,\n runtimeLocaleExpression\n );\n\n const template: Parameters<typeof Compilation.prototype.getAssetPath>[0] =\n chunk.filenameTemplate ||\n (chunk.hasRuntime() ? outputOptions.filename : outputOptions.chunkFilename)!;\n\n const defaultAssetName: string = compilation.getPath(template, {\n chunk,\n contentHashType: 'javascript'\n // Without locale this should return the name of the default asset\n });\n\n const asset: Asset | undefined = compilation.getAsset(defaultAssetName);\n if (!asset) {\n compilation.errors.push(new WebpackError(`Missing expected chunk asset ${defaultAssetName}`));\n continue;\n }\n\n if (isLocalized) {\n const localizedAssets: Record<string, string> = processLocalizedAsset({\n // Global values\n plugin: this,\n compilation,\n locales,\n defaultLocale: this._defaultLocale,\n fillMissingTranslationStrings: this._fillMissingTranslationStrings,\n formatLocaleForFilenameFn: this._formatLocaleForFilename,\n // Chunk-specific values\n chunk,\n asset,\n filenameTemplate: template\n });\n\n if (filesByChunkName && chunk.name) {\n filesByChunkName.set(chunk.name, localizedAssets);\n (chunk.hasRuntime() ? localizedEntryPointNames : localizedChunkNames).push(chunk.name);\n }\n } else {\n processNonLocalizedAsset({\n // Global values\n plugin: this,\n compilation,\n noStringsLocaleName: this._noStringsLocaleName,\n formatLocaleForFilenameFn: this._formatLocaleForFilename,\n // Chunk-specific values\n chunk,\n asset,\n fileName: defaultAssetName\n });\n }\n }\n\n if (hashFn) {\n updateAssetHashes({\n thisWebpack,\n compilation,\n hashFn,\n filesByChunkName\n });\n }\n\n // Since the stats generation doesn't depend on content, do it immediately\n if (statsOptions && filesByChunkName) {\n const localizationStats: ILocalizationStats = {\n entrypoints: {},\n namedChunkGroups: {}\n };\n\n // Sort in lexicographic order to ensure stable output\n localizedChunkNames.sort();\n for (const chunkName of localizedChunkNames) {\n localizationStats.namedChunkGroups[chunkName] = {\n localizedAssets: filesByChunkName.get(chunkName)!\n };\n }\n\n // Sort in lexicographic order to ensure stable output\n localizedEntryPointNames.sort();\n for (const chunkName of localizedEntryPointNames) {\n localizationStats.entrypoints[chunkName] = {\n localizedAssets: filesByChunkName.get(chunkName)!\n };\n }\n\n const { dropPath, callback } = statsOptions;\n\n if (dropPath) {\n compilation.emitAsset(\n dropPath,\n new compiler.webpack.sources.RawSource(JSON.stringify(localizationStats))\n );\n }\n\n if (callback) {\n try {\n callback(localizationStats, compilation);\n } catch (e) {\n /* swallow errors from the callback */\n }\n }\n }\n }\n );\n });\n }\n\n /**\n * @public\n *\n * @returns An object mapping the string keys to placeholders\n */\n public async addDefaultLocFileAsync(\n context: LoaderContext<{}>,\n localizedFileKey: string,\n localizedResourceData: ILocalizationFile\n ): Promise<Record<string, string>> {\n const locFileData: ReadonlyMap<string, string> = convertLocalizationFileToLocData(localizedResourceData);\n const resultObject: Record<string, string> = this._addLocFileAndGetPlaceholders(\n this._defaultLocale,\n localizedFileKey,\n locFileData\n );\n\n const missingLocales: string[] = [];\n for (const [translatedLocaleName, translatedStrings] of this._resolvedTranslatedStringsFromOptions) {\n const translatedLocFileFromOptions: ILocaleFileData | undefined =\n translatedStrings.get(localizedFileKey);\n\n if (!translatedLocFileFromOptions) {\n missingLocales.push(translatedLocaleName);\n } else {\n const translatedLocFileData: ReadonlyMap<string, string> = await normalizeLocalizedData(\n context,\n translatedLocFileFromOptions\n );\n this._addTranslations(translatedLocaleName, localizedFileKey, translatedLocFileData);\n }\n }\n\n const { resolveMissingTranslatedStrings } = this._options.localizedData;\n\n if (missingLocales.length > 0 && resolveMissingTranslatedStrings) {\n let resolvedTranslatedData: IResolvedMissingTranslations | undefined = undefined;\n try {\n resolvedTranslatedData = await resolveMissingTranslatedStrings(\n missingLocales,\n localizedFileKey,\n context\n );\n } catch (e) {\n context.emitError(e);\n }\n\n if (resolvedTranslatedData) {\n const iterable: Iterable<[string, ILocaleFileData]> =\n resolvedTranslatedData instanceof Map\n ? resolvedTranslatedData.entries()\n : Object.entries(resolvedTranslatedData);\n for (const [resolvedLocaleName, resolvedLocaleData] of iterable) {\n if (resolvedLocaleData) {\n const translatedLocFileData: ReadonlyMap<string, string> = await normalizeLocalizedData(\n context,\n resolvedLocaleData\n );\n this._addTranslations(resolvedLocaleName, localizedFileKey, translatedLocFileData);\n }\n }\n }\n }\n\n for (const [pseudolocaleName, pseudolocalizer] of this._pseudolocalizers) {\n const pseudolocFileData: Map<string, string> = new Map();\n\n for (const [stringName, stringValue] of locFileData) {\n pseudolocFileData.set(stringName, pseudolocalizer(stringValue));\n }\n\n this._addTranslations(pseudolocaleName, localizedFileKey, pseudolocFileData);\n }\n\n markEntity(context._module!, true);\n\n return resultObject;\n }\n\n /**\n * @public\n */\n public getPlaceholder(localizedFileKey: string, stringName: string): IStringPlaceholder | undefined {\n const stringKey: string = `${localizedFileKey}?${stringName}`;\n return this.stringKeys.get(stringKey);\n }\n\n /**\n * @internal\n */\n public getDataForSerialNumber(serialNumber: string): IStringPlaceholder | undefined {\n return this._stringPlaceholderMap.get(serialNumber);\n }\n\n private _addLocFileAndGetPlaceholders(\n localeName: string,\n localizedFileKey: string,\n localizedFileData: ReadonlyMap<string, string>\n ): Record<string, string> {\n const filesMap: Map<string, ReadonlyMap<string, string>> = this._resolvedLocalizedStrings.get(\n localeName\n )!;\n\n filesMap.set(localizedFileKey, localizedFileData);\n\n const resultObject: Record<string, string> = {};\n for (const [stringName, stringValue] of localizedFileData) {\n const stringKey: string = `${localizedFileKey}?${stringName}`;\n let placeholder: IStringPlaceholder | undefined = this.stringKeys.get(stringKey);\n if (!placeholder) {\n // TODO: This may need to be a deterministic identifier to support watch / incremental compilation\n const suffix: string = `${this._stringPlaceholderCounter++}`;\n\n const values: Map<string, string> = new Map();\n values.set(this._passthroughLocaleName, stringName);\n\n placeholder = {\n value: `${Constants.STRING_PLACEHOLDER_PREFIX}_\\\\_${Constants.STRING_PLACEHOLDER_LABEL}_${suffix}`,\n suffix,\n valuesByLocale: values,\n locFilePath: localizedFileKey,\n stringName\n };\n\n this.stringKeys.set(stringKey, placeholder);\n this._stringPlaceholderMap.set(suffix, placeholder);\n }\n\n resultObject[stringName] = placeholder.value;\n\n placeholder.valuesByLocale.set(localeName, stringValue);\n }\n\n return resultObject;\n }\n\n private _addTranslations(\n localeName: string,\n localizedFileKey: string,\n localizedFileData: ReadonlyMap<string, string>\n ): void {\n for (const [stringName, stringValue] of localizedFileData) {\n const stringKey: string = `${localizedFileKey}?${stringName}`;\n const placeholder: IStringPlaceholder | undefined = this.stringKeys.get(stringKey);\n if (placeholder) {\n placeholder.valuesByLocale.set(localeName, stringValue);\n }\n }\n }\n\n private _initializeAndValidateOptions(\n compiler: Compiler,\n isWebpackDevServer: boolean\n ): { errors: WebpackError[]; warnings: WebpackError[] } {\n const errors: WebpackError[] = [];\n const warnings: WebpackError[] = [];\n\n const { WebpackError } = compiler.webpack;\n const { options: configuration } = compiler;\n\n const LOCALE_NAME_REGEX: RegExp = /[a-z-]/i;\n function ensureValidLocaleName(localeName: string): boolean {\n if (!localeName.match(LOCALE_NAME_REGEX)) {\n errors.push(\n new WebpackError(\n `Invalid locale name: ${localeName}. Locale names may only contain letters and hyphens.`\n )\n );\n return false;\n } else {\n return true;\n }\n }\n\n // START configuration\n if (\n !configuration.output ||\n !configuration.output.filename ||\n typeof configuration.output.filename !== 'string' ||\n configuration.output.filename.indexOf(Constants.LOCALE_FILENAME_TOKEN) === -1\n ) {\n errors.push(\n new WebpackError(\n 'The configuration.output.filename property must be provided, must be a string, and must include ' +\n `the ${Constants.LOCALE_FILENAME_TOKEN} placeholder`\n )\n );\n }\n // END configuration\n\n // START misc options\n // START options.localizedData\n const { localizedData } = this._options;\n if (localizedData) {\n // START options.localizedData.passthroughLocale\n const { passthroughLocale } = localizedData;\n if (passthroughLocale) {\n const { usePassthroughLocale, passthroughLocaleName = 'passthrough' } = passthroughLocale;\n if (usePassthroughLocale) {\n this._passthroughLocaleName = passthroughLocaleName;\n this._resolvedLocalizedStrings.set(passthroughLocaleName, new Map());\n }\n }\n // END options.localizedData.passthroughLocale\n\n // START options.localizedData.translatedStrings\n const resolveRelativeToContext: (relative: string) => string = (\n configuration.context?.startsWith('/') ? path.posix.resolve : path.resolve\n ).bind(0, configuration.context!);\n const { translatedStrings } = localizedData;\n this._resolvedTranslatedStringsFromOptions.clear();\n if (translatedStrings) {\n for (const [localeName, locale] of Object.entries(translatedStrings)) {\n if (this._resolvedLocalizedStrings.has(localeName)) {\n errors.push(\n new WebpackError(\n `The locale \"${localeName}\" appears multiple times. ` +\n 'There may be multiple instances with different casing.'\n )\n );\n return { errors, warnings };\n }\n\n if (!ensureValidLocaleName(localeName)) {\n return { errors, warnings };\n }\n\n this._resolvedLocalizedStrings.set(localeName, new Map());\n const resolvedFromOptionsForLocale: Map<string, ILocaleFileData> = new Map();\n this._resolvedTranslatedStringsFromOptions.set(localeName, resolvedFromOptionsForLocale);\n\n for (const [locFilePath, locFileDataFromOptions] of Object.entries(locale)) {\n const normalizedLocFilePath: string = resolveRelativeToContext(locFilePath);\n\n if (resolvedFromOptionsForLocale.has(normalizedLocFilePath)) {\n errors.push(\n new WebpackError(\n `The localization file path \"${locFilePath}\" appears multiple times in locale ${localeName}. ` +\n 'There may be multiple instances with different casing.'\n )\n );\n return { errors, warnings };\n }\n\n const normalizedLocFileDataFromOptions: ILocaleFileData =\n typeof locFileDataFromOptions === 'string'\n ? resolveRelativeToContext(locFileDataFromOptions)\n : locFileDataFromOptions;\n\n resolvedFromOptionsForLocale.set(normalizedLocFilePath, normalizedLocFileDataFromOptions);\n }\n }\n }\n // END options.localizedData.translatedStrings\n\n // START options.localizedData.defaultLocale\n const { defaultLocale } = localizedData;\n if (defaultLocale) {\n const { localeName, fillMissingTranslationStrings } = defaultLocale;\n if (localeName) {\n if (this._resolvedLocalizedStrings.has(localeName)) {\n errors.push(new WebpackError('The default locale is also specified in the translated strings.'));\n return { errors, warnings };\n } else if (!ensureValidLocaleName(localeName)) {\n return { errors, warnings };\n }\n\n this._resolvedLocalizedStrings.set(localeName, new Map());\n this._defaultLocale = localeName;\n this._fillMissingTranslationStrings = !!fillMissingTranslationStrings;\n } else {\n errors.push(new WebpackError('Missing default locale name'));\n return { errors, warnings };\n }\n } else {\n errors.push(new WebpackError('Missing default locale options.'));\n return { errors, warnings };\n }\n // END options.localizedData.defaultLocale\n\n // START options.localizedData.pseudoLocales\n const { pseudolocales } = localizedData;\n if (pseudolocales) {\n for (const [pseudolocaleName, pseudoLocaleOpts] of Object.entries(pseudolocales)) {\n if (this._defaultLocale === pseudolocaleName) {\n errors.push(\n new WebpackError(`A pseudolocale (${pseudolocaleName}) name is also the default locale name.`)\n );\n return { errors, warnings };\n }\n\n if (this._resolvedLocalizedStrings.has(pseudolocaleName)) {\n errors.push(\n new WebpackError(\n `A pseudolocale (${pseudolocaleName}) name is also specified in the translated strings.`\n )\n );\n return { errors, warnings };\n }\n\n this._pseudolocalizers.set(pseudolocaleName, getPseudolocalizer(pseudoLocaleOpts));\n this._resolvedLocalizedStrings.set(pseudolocaleName, new Map<string, Map<string, string>>());\n }\n }\n // END options.localizedData.pseudoLocales\n } else if (!isWebpackDevServer) {\n throw new Error('Localized data must be provided unless webpack dev server is running.');\n }\n // END options.localizedData\n\n // START options.noStringsLocaleName\n const { noStringsLocaleName } = this._options;\n if (\n noStringsLocaleName === undefined ||\n noStringsLocaleName === null ||\n !ensureValidLocaleName(noStringsLocaleName)\n ) {\n this._noStringsLocaleName = 'none';\n } else {\n this._noStringsLocaleName = noStringsLocaleName;\n }\n // END options.noStringsLocaleName\n\n // START options.formatLocaleForFilename\n const { formatLocaleForFilename = (localeName: string) => localeName } = this._options;\n this._formatLocaleForFilename = formatLocaleForFilename;\n // END options.formatLocaleForFilename\n return { errors, warnings };\n }\n}\n\nfunction _chunkHasLocalizedModules(\n chunkGraph: ChunkGraph,\n chunk: Chunk,\n runtimeLocaleExpression: string | undefined\n): boolean {\n let chunkHasAnyLocModules: boolean | undefined = getMark(chunk);\n if (chunkHasAnyLocModules === undefined) {\n chunkHasAnyLocModules = false;\n const candidateModules: Iterable<Module> | undefined = chunkGraph.getChunkModulesIterableBySourceType(\n chunk,\n 'javascript'\n );\n if (candidateModules) {\n outer: for (const module of candidateModules) {\n const moduleMark: boolean | undefined = getMark(module);\n if (moduleMark) {\n chunkHasAnyLocModules = true;\n break;\n } else if (moduleMark === false) {\n continue;\n }\n\n // Is this a concatenated module?\n const { _modules: modules } = module as { _modules?: Iterable<Module> };\n if (modules) {\n for (const nestedModule of modules) {\n if (getMark(nestedModule)) {\n markEntity(module, true);\n chunkHasAnyLocModules = true;\n break outer;\n }\n }\n markEntity(module, false);\n }\n }\n }\n\n // If this chunk doesn't directly contain any localized resources, it still\n // needs to be localized if it's an entrypoint chunk (i.e. - it has a runtime)\n // and it loads localized async chunks.\n // In that case, the generated chunk URL generation code needs to contain\n // the locale name.\n if (!chunkHasAnyLocModules && !runtimeLocaleExpression && chunk.hasRuntime()) {\n for (const asyncChunk of chunk.getAllAsyncChunks()) {\n if (_chunkHasLocalizedModules(chunkGraph, asyncChunk, runtimeLocaleExpression)) {\n chunkHasAnyLocModules = true;\n break;\n }\n }\n }\n\n markEntity(chunk, chunkHasAnyLocModules);\n }\n\n return chunkHasAnyLocModules;\n}\n\nfunction convertLocalizationFileToLocData(locFile: ILocalizationFile): ReadonlyMap<string, string> {\n const locFileData: Map<string, string> = new Map();\n for (const [stringName, locFileEntry] of Object.entries(locFile)) {\n locFileData.set(stringName, locFileEntry.value);\n }\n\n return locFileData;\n}\n\nasync function normalizeLocalizedData(\n context: LoaderContext<{}>,\n localizedData: ILocaleFileData\n): Promise<ReadonlyMap<string, string>> {\n if (typeof localizedData === 'string') {\n // The value is the path to a file. Add it as a file dependency\n context.addDependency(localizedData);\n const content: string = await new Promise((resolve, reject) => {\n // Use context.fs so that the plugin is compatible with overriding compiler.inputFileSystem\n context.fs.readFile(localizedData, (err, data) => {\n if (err) {\n return reject(err);\n } else if (!data) {\n return reject(new Error(`No data in ${localizedData}`));\n }\n resolve(data.toString());\n });\n });\n\n const localizationFile: ILocalizationFile = parseResJson({\n filePath: localizedData,\n content\n });\n\n return convertLocalizationFileToLocData(localizationFile);\n } else {\n return localizedData instanceof Map ? localizedData : new Map(Object.entries(localizedData));\n }\n}\n"]}
|
package/lib/trueHashes.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"trueHashes.d.ts","sourceRoot":"","sources":["../src/trueHashes.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,OAAO,IAAI,OAAO,EAAE,WAAW,EAA+B,MAAM,SAAS,CAAC;AAa5F,MAAM,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;AAE3D,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,OAAO,OAAO,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAU7F;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,OAAO,OAAO,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAOD,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,WAAW,EACX,MAAM,EACN,gBAAgB,EACjB,EAAE,yBAAyB,GAAG,IAAI,
|
1
|
+
{"version":3,"file":"trueHashes.d.ts","sourceRoot":"","sources":["../src/trueHashes.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,OAAO,IAAI,OAAO,EAAE,WAAW,EAA+B,MAAM,SAAS,CAAC;AAa5F,MAAM,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;AAE3D,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,OAAO,OAAO,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAU7F;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,OAAO,OAAO,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAOD,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,WAAW,EACX,MAAM,EACN,gBAAgB,EACjB,EAAE,yBAAyB,GAAG,IAAI,CA2PlC"}
|
package/lib/trueHashes.js
CHANGED
@@ -146,7 +146,9 @@ function updateAssetHashes({ thisWebpack, compilation, hashFn, filesByChunkName
|
|
146
146
|
const newJsFilename = jsAssetName.replace(existingHash, trueHash);
|
147
147
|
compilation.renameAsset(jsAssetName, newJsFilename);
|
148
148
|
if (locale) {
|
149
|
-
const filesForChunkName =
|
149
|
+
const filesForChunkName = chunk.name
|
150
|
+
? filesByChunkName === null || filesByChunkName === void 0 ? void 0 : filesByChunkName.get(chunk.name)
|
151
|
+
: undefined;
|
150
152
|
if (filesForChunkName) {
|
151
153
|
filesForChunkName[locale] = newJsFilename;
|
152
154
|
}
|
package/lib/trueHashes.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"trueHashes.js","sourceRoot":"","sources":["../src/trueHashes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { default as webpack, Compilation, Chunk, Asset, sources, util } from 'webpack';\nimport { Text } from '@rushstack/node-core-library';\n\nimport type { ILocalizedWebpackChunk } from './webpackInterfaces';\nimport { chunkIsJs } from './utilities/chunkUtilities';\n\ninterface IHashReplacement {\n existingHash: string;\n trueHashByLocale: string | Record<string, string> | undefined;\n}\n\ntype WebpackHash = ReturnType<typeof util.createHash>;\n\nexport type HashFn = (contents: string | Buffer) => string;\n\nexport interface IGetHashFunctionOptions {\n thisWebpack: typeof webpack;\n compilation: Compilation;\n}\n\nexport function getHashFunction({ thisWebpack, compilation }: IGetHashFunctionOptions): HashFn {\n const { hashFunction = 'md5', hashDigest = 'hex', hashDigestLength, hashSalt } = compilation.outputOptions;\n return (contents: string | Buffer) => {\n const hash: WebpackHash = thisWebpack.util.createHash(hashFunction);\n if (hashSalt) {\n hash.update(hashSalt, 'utf-8');\n }\n\n return hash.update(contents).digest(hashDigest).toString().slice(0, hashDigestLength);\n };\n}\n\nexport interface IUpdateAssetHashesOptions {\n thisWebpack: typeof webpack;\n compilation: Compilation;\n hashFn: HashFn;\n filesByChunkName?: Map<string, Record<string, string>>;\n}\n\ninterface IProcessChunkAssetResult {\n trueHash: string;\n newJsFilename: string;\n}\n\nexport function updateAssetHashes({\n thisWebpack,\n compilation,\n hashFn,\n filesByChunkName\n}: IUpdateAssetHashesOptions): void {\n const unprocessedDependenciesByChunk: Map<Chunk, Set<Chunk>> = new Map();\n const dependenciesByChunk: Map<Chunk, Set<Chunk>> = new Map();\n const dependentsByChunk: Map<Chunk, Set<Chunk>> = new Map();\n const unprocessedChunks: Set<Chunk> = new Set();\n const nonJsChunks: Set<Chunk> = new Set();\n\n for (const chunk of compilation.chunks) {\n if (!chunkIsJs(chunk, compilation.chunkGraph)) {\n nonJsChunks.add(chunk);\n } else {\n unprocessedChunks.add(chunk);\n }\n }\n\n for (const chunk of compilation.chunks) {\n let unprocessedDependencies: Set<Chunk> | undefined = unprocessedDependenciesByChunk.get(chunk);\n if (!unprocessedDependencies) {\n unprocessedDependencies = new Set();\n unprocessedDependenciesByChunk.set(chunk, unprocessedDependencies);\n }\n\n let dependencies: Set<Chunk> | undefined = dependenciesByChunk.get(chunk);\n if (!dependencies) {\n dependencies = new Set();\n dependenciesByChunk.set(chunk, dependencies);\n }\n\n if (chunk.hasRuntime()) {\n for (const asyncChunk of chunk.getAllAsyncChunks()) {\n if (!nonJsChunks.has(asyncChunk)) {\n unprocessedDependencies.add(asyncChunk);\n dependencies.add(asyncChunk);\n\n let dependents: Set<Chunk> | undefined = dependentsByChunk.get(asyncChunk);\n if (!dependents) {\n dependents = new Set();\n dependentsByChunk.set(asyncChunk, dependents);\n }\n\n dependents.add(chunk);\n\n if (!unprocessedChunks.has(asyncChunk)) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Found an async chunk that was not included in the compilation: ${asyncChunk.id} ` +\n `(reason: ${asyncChunk.chunkReason}).`\n )\n );\n }\n }\n }\n }\n }\n\n const hashReplacementsByChunk: Map<Chunk, IHashReplacement> = new Map();\n let previousSize: number = -1;\n while (unprocessedChunks.size > 0) {\n const currentSize: number = unprocessedChunks.size;\n if (currentSize === previousSize) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Detected a cycle in the chunk dependencies. This should not be possible.`\n )\n );\n\n break;\n }\n\n previousSize = currentSize;\n\n for (const chunk of unprocessedChunks) {\n if (unprocessedDependenciesByChunk.get(chunk)?.size === 0) {\n // TODO: do we need to check if the chunk is rendered?\n if (!chunk.renderedHash) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find the hash for chunk ${chunk.id}.`)\n );\n } else {\n const existingHash: string = chunk.contentHash.javascript;\n const chunkDependencies: Set<Chunk> | undefined = dependenciesByChunk.get(chunk);\n if (!chunkDependencies) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find dependencies for chunk ${chunk.id}.`)\n );\n } else {\n function processChunkAsset(\n jsAssetName: string,\n locale: string | undefined\n ): IProcessChunkAssetResult | undefined {\n const asset: Readonly<Asset> | undefined = compilation.getAsset(jsAssetName);\n if (!asset) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find asset \"${jsAssetName}\" for chunk ${chunk.id}.`)\n );\n } else {\n let assetSource: sources.Source = asset.source;\n const assetName: string = asset.name;\n if (chunkDependencies!.size > 0) {\n const relevantHashReplacements: Map<string, string> = new Map();\n let hasAnyReplacements: boolean = false;\n for (const dependency of chunkDependencies!) {\n const asyncChunkHashReplacements: IHashReplacement | undefined =\n hashReplacementsByChunk.get(dependency);\n if (!asyncChunkHashReplacements) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Could not find hash replacements for chunk ${dependency.id}.`\n )\n );\n } else {\n const { existingHash: otherChunkExistingHash, trueHashByLocale } =\n asyncChunkHashReplacements;\n let replacementHash: string | undefined;\n if (typeof trueHashByLocale === 'object') {\n if (locale) {\n replacementHash = trueHashByLocale[locale];\n }\n } else {\n replacementHash = trueHashByLocale;\n }\n\n if (replacementHash) {\n if (relevantHashReplacements.has(otherChunkExistingHash)) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Found multiple replacements for hash ${otherChunkExistingHash} ` +\n `in chunk ${chunk.id}.`\n )\n );\n } else {\n relevantHashReplacements.set(otherChunkExistingHash, replacementHash);\n hasAnyReplacements = true;\n }\n }\n }\n }\n\n if (hasAnyReplacements) {\n const sourceString: string = assetSource.source().toString();\n const replaceSource: sources.ReplaceSource = new thisWebpack.sources.ReplaceSource(\n assetSource,\n assetName\n );\n\n const regexp: RegExp = new RegExp(\n Array.from(relevantHashReplacements.keys())\n .map((hashToReplace) => Text.escapeRegExp(hashToReplace))\n .join('|'),\n 'g'\n );\n let match: RegExpMatchArray | null;\n while ((match = regexp.exec(sourceString)) !== null) {\n const { 0: originalHash, index } = match;\n const matchStart: number = index!;\n const matchEnd: number = matchStart + originalHash.length - 1;\n const replacement: string = relevantHashReplacements.get(originalHash)!;\n replaceSource.replace(matchStart, matchEnd, replacement);\n }\n\n assetSource = replaceSource;\n compilation.updateAsset(jsAssetName, assetSource);\n }\n }\n\n if (jsAssetName.includes(existingHash)) {\n const trueHash: string = hashFn(assetSource.buffer());\n if (trueHash !== existingHash) {\n const newJsFilename: string = jsAssetName.replace(existingHash, trueHash);\n\n compilation.renameAsset(jsAssetName, newJsFilename);\n\n if (locale) {\n const filesForChunkName: Record<string, string> | undefined = filesByChunkName?.get(\n chunk.name\n );\n if (filesForChunkName) {\n filesForChunkName[locale] = newJsFilename;\n }\n }\n\n return {\n trueHash,\n newJsFilename\n };\n }\n }\n }\n }\n\n const localizedFiles: Record<string, string> | undefined = (chunk as ILocalizedWebpackChunk)\n .localizedFiles;\n if (localizedFiles) {\n const trueHashByLocale: Record<string, string> = {};\n hashReplacementsByChunk.set(chunk, {\n existingHash,\n trueHashByLocale\n });\n for (const [locale, jsAssetName] of Object.entries(localizedFiles)) {\n const processAssetResult: IProcessChunkAssetResult | undefined = processChunkAsset(\n jsAssetName,\n locale\n );\n if (processAssetResult) {\n const { trueHash, newJsFilename } = processAssetResult;\n trueHashByLocale[locale] = trueHash;\n localizedFiles[locale] = newJsFilename;\n }\n }\n } else {\n const assetNames: string[] = Array.from(chunk.files);\n let jsAssetName: string | undefined;\n for (const assetName of assetNames) {\n if (assetName.endsWith('.js')) {\n if (jsAssetName) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Found multiple .js assets for chunk ${chunk.id}.`)\n );\n } else {\n jsAssetName = assetName;\n }\n }\n }\n\n if (!jsAssetName) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find a .js asset for chunk ${chunk.id}.`)\n );\n } else {\n const { trueHash, newJsFilename } = processChunkAsset(jsAssetName, undefined) ?? {};\n hashReplacementsByChunk.set(chunk, { existingHash, trueHashByLocale: trueHash });\n if (newJsFilename) {\n chunk.files.delete(jsAssetName);\n chunk.files.add(newJsFilename);\n }\n }\n }\n }\n\n unprocessedChunks.delete(chunk);\n const dependents: Set<Chunk> | undefined = dependentsByChunk.get(chunk);\n if (dependents) {\n for (const dependent of dependents) {\n unprocessedDependenciesByChunk.get(dependent)?.delete(chunk);\n }\n }\n }\n }\n }\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"trueHashes.js","sourceRoot":"","sources":["../src/trueHashes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { default as webpack, Compilation, Chunk, Asset, sources, util } from 'webpack';\nimport { Text } from '@rushstack/node-core-library';\n\nimport type { ILocalizedWebpackChunk } from './webpackInterfaces';\nimport { chunkIsJs } from './utilities/chunkUtilities';\n\ninterface IHashReplacement {\n existingHash: string;\n trueHashByLocale: string | Record<string, string> | undefined;\n}\n\ntype WebpackHash = ReturnType<typeof util.createHash>;\n\nexport type HashFn = (contents: string | Buffer) => string;\n\nexport interface IGetHashFunctionOptions {\n thisWebpack: typeof webpack;\n compilation: Compilation;\n}\n\nexport function getHashFunction({ thisWebpack, compilation }: IGetHashFunctionOptions): HashFn {\n const { hashFunction = 'md5', hashDigest = 'hex', hashDigestLength, hashSalt } = compilation.outputOptions;\n return (contents: string | Buffer) => {\n const hash: WebpackHash = thisWebpack.util.createHash(hashFunction);\n if (hashSalt) {\n hash.update(hashSalt, 'utf-8');\n }\n\n return hash.update(contents).digest(hashDigest).toString().slice(0, hashDigestLength);\n };\n}\n\nexport interface IUpdateAssetHashesOptions {\n thisWebpack: typeof webpack;\n compilation: Compilation;\n hashFn: HashFn;\n filesByChunkName?: Map<string, Record<string, string>>;\n}\n\ninterface IProcessChunkAssetResult {\n trueHash: string;\n newJsFilename: string;\n}\n\nexport function updateAssetHashes({\n thisWebpack,\n compilation,\n hashFn,\n filesByChunkName\n}: IUpdateAssetHashesOptions): void {\n const unprocessedDependenciesByChunk: Map<Chunk, Set<Chunk>> = new Map();\n const dependenciesByChunk: Map<Chunk, Set<Chunk>> = new Map();\n const dependentsByChunk: Map<Chunk, Set<Chunk>> = new Map();\n const unprocessedChunks: Set<Chunk> = new Set();\n const nonJsChunks: Set<Chunk> = new Set();\n\n for (const chunk of compilation.chunks) {\n if (!chunkIsJs(chunk, compilation.chunkGraph)) {\n nonJsChunks.add(chunk);\n } else {\n unprocessedChunks.add(chunk);\n }\n }\n\n for (const chunk of compilation.chunks) {\n let unprocessedDependencies: Set<Chunk> | undefined = unprocessedDependenciesByChunk.get(chunk);\n if (!unprocessedDependencies) {\n unprocessedDependencies = new Set();\n unprocessedDependenciesByChunk.set(chunk, unprocessedDependencies);\n }\n\n let dependencies: Set<Chunk> | undefined = dependenciesByChunk.get(chunk);\n if (!dependencies) {\n dependencies = new Set();\n dependenciesByChunk.set(chunk, dependencies);\n }\n\n if (chunk.hasRuntime()) {\n for (const asyncChunk of chunk.getAllAsyncChunks()) {\n if (!nonJsChunks.has(asyncChunk)) {\n unprocessedDependencies.add(asyncChunk);\n dependencies.add(asyncChunk);\n\n let dependents: Set<Chunk> | undefined = dependentsByChunk.get(asyncChunk);\n if (!dependents) {\n dependents = new Set();\n dependentsByChunk.set(asyncChunk, dependents);\n }\n\n dependents.add(chunk);\n\n if (!unprocessedChunks.has(asyncChunk)) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Found an async chunk that was not included in the compilation: ${asyncChunk.id} ` +\n `(reason: ${asyncChunk.chunkReason}).`\n )\n );\n }\n }\n }\n }\n }\n\n const hashReplacementsByChunk: Map<Chunk, IHashReplacement> = new Map();\n let previousSize: number = -1;\n while (unprocessedChunks.size > 0) {\n const currentSize: number = unprocessedChunks.size;\n if (currentSize === previousSize) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Detected a cycle in the chunk dependencies. This should not be possible.`\n )\n );\n\n break;\n }\n\n previousSize = currentSize;\n\n for (const chunk of unprocessedChunks) {\n if (unprocessedDependenciesByChunk.get(chunk)?.size === 0) {\n // TODO: do we need to check if the chunk is rendered?\n if (!chunk.renderedHash) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find the hash for chunk ${chunk.id}.`)\n );\n } else {\n const existingHash: string = chunk.contentHash.javascript;\n const chunkDependencies: Set<Chunk> | undefined = dependenciesByChunk.get(chunk);\n if (!chunkDependencies) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find dependencies for chunk ${chunk.id}.`)\n );\n } else {\n function processChunkAsset(\n jsAssetName: string,\n locale: string | undefined\n ): IProcessChunkAssetResult | undefined {\n const asset: Readonly<Asset> | undefined = compilation.getAsset(jsAssetName);\n if (!asset) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find asset \"${jsAssetName}\" for chunk ${chunk.id}.`)\n );\n } else {\n let assetSource: sources.Source = asset.source;\n const assetName: string = asset.name;\n if (chunkDependencies!.size > 0) {\n const relevantHashReplacements: Map<string, string> = new Map();\n let hasAnyReplacements: boolean = false;\n for (const dependency of chunkDependencies!) {\n const asyncChunkHashReplacements: IHashReplacement | undefined =\n hashReplacementsByChunk.get(dependency);\n if (!asyncChunkHashReplacements) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Could not find hash replacements for chunk ${dependency.id}.`\n )\n );\n } else {\n const { existingHash: otherChunkExistingHash, trueHashByLocale } =\n asyncChunkHashReplacements;\n let replacementHash: string | undefined;\n if (typeof trueHashByLocale === 'object') {\n if (locale) {\n replacementHash = trueHashByLocale[locale];\n }\n } else {\n replacementHash = trueHashByLocale;\n }\n\n if (replacementHash) {\n if (relevantHashReplacements.has(otherChunkExistingHash)) {\n compilation.errors.push(\n new thisWebpack.WebpackError(\n `Found multiple replacements for hash ${otherChunkExistingHash} ` +\n `in chunk ${chunk.id}.`\n )\n );\n } else {\n relevantHashReplacements.set(otherChunkExistingHash, replacementHash);\n hasAnyReplacements = true;\n }\n }\n }\n }\n\n if (hasAnyReplacements) {\n const sourceString: string = assetSource.source().toString();\n const replaceSource: sources.ReplaceSource = new thisWebpack.sources.ReplaceSource(\n assetSource,\n assetName\n );\n\n const regexp: RegExp = new RegExp(\n Array.from(relevantHashReplacements.keys())\n .map((hashToReplace) => Text.escapeRegExp(hashToReplace))\n .join('|'),\n 'g'\n );\n let match: RegExpMatchArray | null;\n while ((match = regexp.exec(sourceString)) !== null) {\n const { 0: originalHash, index } = match;\n const matchStart: number = index!;\n const matchEnd: number = matchStart + originalHash.length - 1;\n const replacement: string = relevantHashReplacements.get(originalHash)!;\n replaceSource.replace(matchStart, matchEnd, replacement);\n }\n\n assetSource = replaceSource;\n compilation.updateAsset(jsAssetName, assetSource);\n }\n }\n\n if (jsAssetName.includes(existingHash)) {\n const trueHash: string = hashFn(assetSource.buffer());\n if (trueHash !== existingHash) {\n const newJsFilename: string = jsAssetName.replace(existingHash, trueHash);\n\n compilation.renameAsset(jsAssetName, newJsFilename);\n\n if (locale) {\n const filesForChunkName: Record<string, string> | undefined = chunk.name\n ? filesByChunkName?.get(chunk.name)\n : undefined;\n\n if (filesForChunkName) {\n filesForChunkName[locale] = newJsFilename;\n }\n }\n\n return {\n trueHash,\n newJsFilename\n };\n }\n }\n }\n }\n\n const localizedFiles: Record<string, string> | undefined = (chunk as ILocalizedWebpackChunk)\n .localizedFiles;\n if (localizedFiles) {\n const trueHashByLocale: Record<string, string> = {};\n hashReplacementsByChunk.set(chunk, {\n existingHash,\n trueHashByLocale\n });\n for (const [locale, jsAssetName] of Object.entries(localizedFiles)) {\n const processAssetResult: IProcessChunkAssetResult | undefined = processChunkAsset(\n jsAssetName,\n locale\n );\n if (processAssetResult) {\n const { trueHash, newJsFilename } = processAssetResult;\n trueHashByLocale[locale] = trueHash;\n localizedFiles[locale] = newJsFilename;\n }\n }\n } else {\n const assetNames: string[] = Array.from(chunk.files);\n let jsAssetName: string | undefined;\n for (const assetName of assetNames) {\n if (assetName.endsWith('.js')) {\n if (jsAssetName) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Found multiple .js assets for chunk ${chunk.id}.`)\n );\n } else {\n jsAssetName = assetName;\n }\n }\n }\n\n if (!jsAssetName) {\n compilation.errors.push(\n new thisWebpack.WebpackError(`Could not find a .js asset for chunk ${chunk.id}.`)\n );\n } else {\n const { trueHash, newJsFilename } = processChunkAsset(jsAssetName, undefined) ?? {};\n hashReplacementsByChunk.set(chunk, { existingHash, trueHashByLocale: trueHash });\n if (newJsFilename) {\n chunk.files.delete(jsAssetName);\n chunk.files.add(newJsFilename);\n }\n }\n }\n }\n\n unprocessedChunks.delete(chunk);\n const dependents: Set<Chunk> | undefined = dependentsByChunk.get(chunk);\n if (dependents) {\n for (const dependent of dependents) {\n unprocessedDependenciesByChunk.get(dependent)?.delete(chunk);\n }\n }\n }\n }\n }\n }\n}\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@rushstack/webpack5-localization-plugin",
|
3
|
-
"version": "0.11.
|
3
|
+
"version": "0.11.14",
|
4
4
|
"description": "This plugin facilitates localization with Webpack.",
|
5
5
|
"main": "lib/index.js",
|
6
6
|
"typings": "dist/webpack5-localization-plugin.d.ts",
|
@@ -15,15 +15,15 @@
|
|
15
15
|
"@types/node": "*"
|
16
16
|
},
|
17
17
|
"dependencies": {
|
18
|
-
"@rushstack/localization-utilities": "0.12.
|
18
|
+
"@rushstack/localization-utilities": "0.12.7",
|
19
19
|
"@rushstack/node-core-library": "5.9.0",
|
20
20
|
"@rushstack/terminal": "0.14.2"
|
21
21
|
},
|
22
22
|
"devDependencies": {
|
23
|
-
"memfs": "
|
24
|
-
"webpack": "~5.
|
25
|
-
"
|
26
|
-
"
|
23
|
+
"memfs": "4.12.0",
|
24
|
+
"webpack": "~5.95.0",
|
25
|
+
"local-node-rig": "1.0.0",
|
26
|
+
"@rushstack/heft": "0.68.3"
|
27
27
|
},
|
28
28
|
"peerDependenciesMeta": {
|
29
29
|
"@types/node": {
|