UNPKG

10.6 kBJavaScriptView Raw
1"use strict";
2/**
3 * @license
4 * Copyright Google LLC All Rights Reserved.
5 *
6 * Use of this source code is governed by an MIT-style license that can be
7 * found in the LICENSE file at https://angular.io/license
8 */
9var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10 if (k2 === undefined) k2 = k;
11 var desc = Object.getOwnPropertyDescriptor(m, k);
12 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13 desc = { enumerable: true, get: function() { return m[k]; } };
14 }
15 Object.defineProperty(o, k2, desc);
16}) : (function(o, m, k, k2) {
17 if (k2 === undefined) k2 = k;
18 o[k2] = m[k];
19}));
20var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21 Object.defineProperty(o, "default", { enumerable: true, value: v });
22}) : function(o, v) {
23 o["default"] = v;
24});
25var __importStar = (this && this.__importStar) || function (mod) {
26 if (mod && mod.__esModule) return mod;
27 var result = {};
28 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29 __setModuleDefault(result, mod);
30 return result;
31};
32Object.defineProperty(exports, "__esModule", { value: true });
33exports.createTranslationLoader = void 0;
34const crypto_1 = require("crypto");
35const fs = __importStar(require("fs"));
36const load_esm_1 = require("./load-esm");
37async function createTranslationLoader() {
38 const { parsers, diagnostics } = await importParsers();
39 return (path) => {
40 const content = fs.readFileSync(path, 'utf8');
41 const unusedParsers = new Map();
42 for (const [format, parser] of Object.entries(parsers)) {
43 const analysis = parser.analyze(path, content);
44 if (analysis.canParse) {
45 // Types don't overlap here so we need to use any.
46 // eslint-disable-next-line @typescript-eslint/no-explicit-any
47 const { locale, translations } = parser.parse(path, content, analysis.hint);
48 const integrity = 'sha256-' + (0, crypto_1.createHash)('sha256').update(content).digest('base64');
49 return { format, locale, translations, diagnostics, integrity };
50 }
51 else {
52 unusedParsers.set(parser, analysis);
53 }
54 }
55 const messages = [];
56 for (const [parser, analysis] of unusedParsers.entries()) {
57 messages.push(analysis.diagnostics.formatDiagnostics(`*** ${parser.constructor.name} ***`));
58 }
59 throw new Error(`Unsupported translation file format in ${path}. The following parsers were tried:\n` +
60 messages.join('\n'));
61 };
62}
63exports.createTranslationLoader = createTranslationLoader;
64async function importParsers() {
65 try {
66 // Load ESM `@angular/localize/tools` using the TypeScript dynamic import workaround.
67 // Once TypeScript provides support for keeping the dynamic import this workaround can be
68 // changed to a direct dynamic import.
69 const { Diagnostics, ArbTranslationParser, SimpleJsonTranslationParser, Xliff1TranslationParser, Xliff2TranslationParser, XtbTranslationParser, } = await (0, load_esm_1.loadEsmModule)('@angular/localize/tools');
70 const diagnostics = new Diagnostics();
71 const parsers = {
72 arb: new ArbTranslationParser(),
73 json: new SimpleJsonTranslationParser(),
74 xlf: new Xliff1TranslationParser(),
75 xlf2: new Xliff2TranslationParser(),
76 // The name ('xmb') needs to match the AOT compiler option
77 xmb: new XtbTranslationParser(),
78 };
79 return { parsers, diagnostics };
80 }
81 catch (_a) {
82 throw new Error(`Unable to load translation file parsers. Please ensure '@angular/localize' is installed.`);
83 }
84}
85//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC10cmFuc2xhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy91dGlscy9sb2FkLXRyYW5zbGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1DQUFvQztBQUNwQyx1Q0FBeUI7QUFDekIseUNBQTJDO0FBVXBDLEtBQUssVUFBVSx1QkFBdUI7SUFDM0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLGFBQWEsRUFBRSxDQUFDO0lBRXZELE9BQU8sQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUN0QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3RELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsa0RBQWtEO2dCQUNsRCw4REFBOEQ7Z0JBQzlELE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFXLENBQUMsQ0FBQztnQkFDbkYsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVwRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO2FBQ2pFO2lCQUFNO2dCQUNMLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7UUFFRCxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4RCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM3RjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsMENBQTBDLElBQUksdUNBQXVDO1lBQ25GLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3RCLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBN0JELDBEQTZCQztBQUVELEtBQUssVUFBVSxhQUFhO0lBQzFCLElBQUk7UUFDRixxRkFBcUY7UUFDckYseUZBQXlGO1FBQ3pGLHNDQUFzQztRQUN0QyxNQUFNLEVBQ0osV0FBVyxFQUNYLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDM0IsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2QixvQkFBb0IsR0FDckIsR0FBRyxNQUFNLElBQUEsd0JBQWEsRUFBMkMseUJBQXlCLENBQUMsQ0FBQztRQUU3RixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxFQUFFLElBQUksb0JBQW9CLEVBQUU7WUFDL0IsSUFBSSxFQUFFLElBQUksMkJBQTJCLEVBQUU7WUFDdkMsR0FBRyxFQUFFLElBQUksdUJBQXVCLEVBQUU7WUFDbEMsSUFBSSxFQUFFLElBQUksdUJBQXVCLEVBQUU7WUFDbkMsMERBQTBEO1lBQzFELEdBQUcsRUFBRSxJQUFJLG9CQUFvQixFQUFFO1NBQ2hDLENBQUM7UUFFRixPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0tBQ2pDO0lBQUMsV0FBTTtRQUNOLE1BQU0sSUFBSSxLQUFLLENBQ2IsMEZBQTBGLENBQzNGLENBQUM7S0FDSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEaWFnbm9zdGljcyB9IGZyb20gJ0Bhbmd1bGFyL2xvY2FsaXplL3Rvb2xzJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgbG9hZEVzbU1vZHVsZSB9IGZyb20gJy4vbG9hZC1lc20nO1xuXG5leHBvcnQgdHlwZSBUcmFuc2xhdGlvbkxvYWRlciA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoJ0Bhbmd1bGFyL2xvY2FsaXplJykuybVQYXJzZWRUcmFuc2xhdGlvbj47XG4gIGZvcm1hdDogc3RyaW5nO1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcztcbiAgaW50ZWdyaXR5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVHJhbnNsYXRpb25Mb2FkZXIoKTogUHJvbWlzZTxUcmFuc2xhdGlvbkxvYWRlcj4ge1xuICBjb25zdCB7IHBhcnNlcnMsIGRpYWdub3N0aWNzIH0gPSBhd2FpdCBpbXBvcnRQYXJzZXJzKCk7XG5cbiAgcmV0dXJuIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgdW51c2VkUGFyc2VycyA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IFtmb3JtYXQsIHBhcnNlcl0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VycykpIHtcbiAgICAgIGNvbnN0IGFuYWx5c2lzID0gcGFyc2VyLmFuYWx5emUocGF0aCwgY29udGVudCk7XG4gICAgICBpZiAoYW5hbHlzaXMuY2FuUGFyc2UpIHtcbiAgICAgICAgLy8gVHlwZXMgZG9uJ3Qgb3ZlcmxhcCBoZXJlIHNvIHdlIG5lZWQgdG8gdXNlIGFueS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgeyBsb2NhbGUsIHRyYW5zbGF0aW9ucyB9ID0gcGFyc2VyLnBhcnNlKHBhdGgsIGNvbnRlbnQsIGFuYWx5c2lzLmhpbnQgYXMgYW55KTtcbiAgICAgICAgY29uc3QgaW50ZWdyaXR5ID0gJ3NoYTI1Ni0nICsgY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnYmFzZTY0Jyk7XG5cbiAgICAgICAgcmV0dXJuIHsgZm9ybWF0LCBsb2NhbGUsIHRyYW5zbGF0aW9ucywgZGlhZ25vc3RpY3MsIGludGVncml0eSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW51c2VkUGFyc2Vycy5zZXQocGFyc2VyLCBhbmFseXNpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBbcGFyc2VyLCBhbmFseXNpc10gb2YgdW51c2VkUGFyc2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgIG1lc3NhZ2VzLnB1c2goYW5hbHlzaXMuZGlhZ25vc3RpY3MuZm9ybWF0RGlhZ25vc3RpY3MoYCoqKiAke3BhcnNlci5jb25zdHJ1Y3Rvci5uYW1lfSAqKipgKSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCB0cmFuc2xhdGlvbiBmaWxlIGZvcm1hdCBpbiAke3BhdGh9LiBUaGUgZm9sbG93aW5nIHBhcnNlcnMgd2VyZSB0cmllZDpcXG5gICtcbiAgICAgICAgbWVzc2FnZXMuam9pbignXFxuJyksXG4gICAgKTtcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UGFyc2VycygpIHtcbiAgdHJ5IHtcbiAgICAvLyBMb2FkIEVTTSBgQGFuZ3VsYXIvbG9jYWxpemUvdG9vbHNgIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGR5bmFtaWMgaW1wb3J0IHdvcmthcm91bmQuXG4gICAgLy8gT25jZSBUeXBlU2NyaXB0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtlZXBpbmcgdGhlIGR5bmFtaWMgaW1wb3J0IHRoaXMgd29ya2Fyb3VuZCBjYW4gYmVcbiAgICAvLyBjaGFuZ2VkIHRvIGEgZGlyZWN0IGR5bmFtaWMgaW1wb3J0LlxuICAgIGNvbnN0IHtcbiAgICAgIERpYWdub3N0aWNzLFxuICAgICAgQXJiVHJhbnNsYXRpb25QYXJzZXIsXG4gICAgICBTaW1wbGVKc29uVHJhbnNsYXRpb25QYXJzZXIsXG4gICAgICBYbGlmZjFUcmFuc2xhdGlvblBhcnNlcixcbiAgICAgIFhsaWZmMlRyYW5zbGF0aW9uUGFyc2VyLFxuICAgICAgWHRiVHJhbnNsYXRpb25QYXJzZXIsXG4gICAgfSA9IGF3YWl0IGxvYWRFc21Nb2R1bGU8dHlwZW9mIGltcG9ydCgnQGFuZ3VsYXIvbG9jYWxpemUvdG9vbHMnKT4oJ0Bhbmd1bGFyL2xvY2FsaXplL3Rvb2xzJyk7XG5cbiAgICBjb25zdCBkaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuICAgIGNvbnN0IHBhcnNlcnMgPSB7XG4gICAgICBhcmI6IG5ldyBBcmJUcmFuc2xhdGlvblBhcnNlcigpLFxuICAgICAganNvbjogbmV3IFNpbXBsZUpzb25UcmFuc2xhdGlvblBhcnNlcigpLFxuICAgICAgeGxmOiBuZXcgWGxpZmYxVHJhbnNsYXRpb25QYXJzZXIoKSxcbiAgICAgIHhsZjI6IG5ldyBYbGlmZjJUcmFuc2xhdGlvblBhcnNlcigpLFxuICAgICAgLy8gVGhlIG5hbWUgKCd4bWInKSBuZWVkcyB0byBtYXRjaCB0aGUgQU9UIGNvbXBpbGVyIG9wdGlvblxuICAgICAgeG1iOiBuZXcgWHRiVHJhbnNsYXRpb25QYXJzZXIoKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgcGFyc2VycywgZGlhZ25vc3RpY3MgfTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVuYWJsZSB0byBsb2FkIHRyYW5zbGF0aW9uIGZpbGUgcGFyc2Vycy4gUGxlYXNlIGVuc3VyZSAnQGFuZ3VsYXIvbG9jYWxpemUnIGlzIGluc3RhbGxlZC5gLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
\No newline at end of file