@angular-devkit/build-angular 16.2.1 → 17.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +14 -10
  2. package/builders.json +10 -0
  3. package/package.json +30 -28
  4. package/src/builders/dev-server/vite-server.d.ts +1 -1
  5. package/src/builders/dev-server/vite-server.js +11 -8
  6. package/src/builders/extract-i18n/application-extraction.d.ts +17 -0
  7. package/src/builders/extract-i18n/application-extraction.js +137 -0
  8. package/src/builders/extract-i18n/builder.d.ts +17 -0
  9. package/src/builders/extract-i18n/builder.js +152 -0
  10. package/src/builders/extract-i18n/index.d.ts +4 -14
  11. package/src/builders/extract-i18n/index.js +4 -247
  12. package/src/builders/extract-i18n/options.d.ts +29 -0
  13. package/src/builders/extract-i18n/options.js +82 -0
  14. package/src/builders/extract-i18n/webpack-extraction.d.ts +21 -0
  15. package/src/builders/extract-i18n/webpack-extraction.js +100 -0
  16. package/src/builders/prerender/index.d.ts +20 -0
  17. package/src/builders/prerender/index.js +180 -0
  18. package/src/builders/prerender/render-worker.d.ts +30 -0
  19. package/src/builders/prerender/render-worker.js +126 -0
  20. package/src/builders/prerender/schema.d.ts +22 -0
  21. package/src/builders/prerender/schema.js +5 -0
  22. package/src/builders/prerender/schema.json +39 -0
  23. package/src/builders/prerender/utils.d.ts +22 -0
  24. package/src/builders/prerender/utils.js +79 -0
  25. package/src/builders/ssr-dev-server/index.d.ts +23 -0
  26. package/src/builders/ssr-dev-server/index.js +309 -0
  27. package/src/builders/ssr-dev-server/schema.d.ts +64 -0
  28. package/src/builders/ssr-dev-server/schema.js +5 -0
  29. package/src/builders/ssr-dev-server/schema.json +75 -0
  30. package/src/builders/ssr-dev-server/utils.d.ts +15 -0
  31. package/src/builders/ssr-dev-server/utils.js +75 -0
  32. package/src/tools/babel/webpack-loader.js +2 -2
  33. package/src/tools/esbuild/angular/compilation/angular-compilation.d.ts +7 -2
  34. package/src/tools/esbuild/angular/compilation/angular-compilation.js +21 -1
  35. package/src/tools/esbuild/angular/compiler-plugin.js +8 -13
  36. package/src/tools/esbuild/application-code-bundle.js +3 -5
  37. package/src/tools/esbuild/utils.js +5 -1
  38. package/src/tools/sass/rebasing-importer.js +2 -2
  39. package/src/utils/index-file/inline-critical-css.js +13 -26
  40. package/src/tools/esbuild/external-packages-plugin.d.ts +0 -17
  41. package/src/tools/esbuild/external-packages-plugin.js +0 -49
@@ -0,0 +1,137 @@
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
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.extractMessages = void 0;
14
+ const node_assert_1 = __importDefault(require("node:assert"));
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const application_1 = require("../application");
17
+ const browser_esbuild_1 = require("../browser-esbuild");
18
+ async function extractMessages(options, builderName, context, extractorConstructor) {
19
+ const messages = [];
20
+ // Setup the build options for the application based on the browserTarget option
21
+ const buildOptions = (await context.validateOptions(await context.getTargetOptions(options.browserTarget), builderName));
22
+ buildOptions.optimization = false;
23
+ buildOptions.sourceMap = { scripts: true, vendor: true };
24
+ let build;
25
+ if (builderName === '@angular-devkit/build-angular:application') {
26
+ build = application_1.buildApplicationInternal;
27
+ buildOptions.ssr = false;
28
+ buildOptions.appShell = false;
29
+ buildOptions.prerender = false;
30
+ }
31
+ else {
32
+ build = browser_esbuild_1.buildEsbuildBrowser;
33
+ }
34
+ // Build the application with the build options
35
+ let builderResult;
36
+ try {
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ for await (const result of build(buildOptions, context, { write: false })) {
39
+ builderResult = result;
40
+ break;
41
+ }
42
+ (0, node_assert_1.default)(builderResult !== undefined, 'Application builder did not provide a result.');
43
+ }
44
+ catch (err) {
45
+ builderResult = {
46
+ success: false,
47
+ error: err.message,
48
+ };
49
+ }
50
+ // Extract messages from each output JavaScript file.
51
+ // Output files are only present on a successful build.
52
+ if (builderResult.outputFiles) {
53
+ // Store the JS and JS map files for lookup during extraction
54
+ const files = new Map();
55
+ for (const outputFile of builderResult.outputFiles) {
56
+ if (outputFile.path.endsWith('.js')) {
57
+ files.set(outputFile.path, outputFile.text);
58
+ }
59
+ else if (outputFile.path.endsWith('.js.map')) {
60
+ files.set(outputFile.path, outputFile.text);
61
+ }
62
+ }
63
+ // Setup the localize message extractor based on the in-memory files
64
+ const extractor = setupLocalizeExtractor(extractorConstructor, files, context);
65
+ // Attempt extraction of all output JS files
66
+ for (const filePath of files.keys()) {
67
+ if (!filePath.endsWith('.js')) {
68
+ continue;
69
+ }
70
+ const fileMessages = extractor.extractMessages(filePath);
71
+ messages.push(...fileMessages);
72
+ }
73
+ }
74
+ return {
75
+ builderResult,
76
+ basePath: context.workspaceRoot,
77
+ messages,
78
+ // Legacy i18n identifiers are not supported with the new application builder
79
+ useLegacyIds: false,
80
+ };
81
+ }
82
+ exports.extractMessages = extractMessages;
83
+ function setupLocalizeExtractor(extractorConstructor, files, context) {
84
+ // Setup a virtual file system instance for the extractor
85
+ // * MessageExtractor itself uses readFile, relative and resolve
86
+ // * Internal SourceFileLoader (sourcemap support) uses dirname, exists, readFile, and resolve
87
+ const filesystem = {
88
+ readFile(path) {
89
+ // Output files are stored as relative to the workspace root
90
+ const requestedPath = node_path_1.default.relative(context.workspaceRoot, path);
91
+ const content = files.get(requestedPath);
92
+ if (content === undefined) {
93
+ throw new Error('Unknown file requested: ' + requestedPath);
94
+ }
95
+ return content;
96
+ },
97
+ relative(from, to) {
98
+ return node_path_1.default.relative(from, to);
99
+ },
100
+ resolve(...paths) {
101
+ return node_path_1.default.resolve(...paths);
102
+ },
103
+ exists(path) {
104
+ // Output files are stored as relative to the workspace root
105
+ const requestedPath = node_path_1.default.relative(context.workspaceRoot, path);
106
+ return files.has(requestedPath);
107
+ },
108
+ dirname(path) {
109
+ return node_path_1.default.dirname(path);
110
+ },
111
+ };
112
+ const logger = {
113
+ // level 2 is warnings
114
+ level: 2,
115
+ debug(...args) {
116
+ // eslint-disable-next-line no-console
117
+ console.debug(...args);
118
+ },
119
+ info(...args) {
120
+ context.logger.info(args.join(''));
121
+ },
122
+ warn(...args) {
123
+ context.logger.warn(args.join(''));
124
+ },
125
+ error(...args) {
126
+ context.logger.error(args.join(''));
127
+ },
128
+ };
129
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
+ const extractor = new extractorConstructor(filesystem, logger, {
131
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ basePath: context.workspaceRoot,
133
+ useSourceMaps: true,
134
+ });
135
+ return extractor;
136
+ }
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tZXh0cmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL2J1aWxkZXJzL2V4dHJhY3QtaTE4bi9hcHBsaWNhdGlvbi1leHRyYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7OztBQUtILDhEQUFpQztBQUNqQywwREFBaUM7QUFDakMsZ0RBQTBEO0FBRTFELHdEQUF5RDtBQUdsRCxLQUFLLFVBQVUsZUFBZSxDQUNuQyxPQUFxQyxFQUNyQyxXQUFtQixFQUNuQixPQUF1QixFQUN2QixvQkFBNkM7SUFPN0MsTUFBTSxRQUFRLEdBQXNCLEVBQUUsQ0FBQztJQUV2QyxnRkFBZ0Y7SUFDaEYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxlQUFlLENBQ2pELE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFDckQsV0FBVyxDQUNaLENBQWlELENBQUM7SUFDbkQsWUFBWSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDbEMsWUFBWSxDQUFDLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRXpELElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxXQUFXLEtBQUssMkNBQTJDLEVBQUU7UUFDL0QsS0FBSyxHQUFHLHNDQUF3QixDQUFDO1FBRWpDLFlBQVksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzlCLFlBQVksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0tBQ2hDO1NBQU07UUFDTCxLQUFLLEdBQUcscUNBQW1CLENBQUM7S0FDN0I7SUFFRCwrQ0FBK0M7SUFDL0MsSUFBSSxh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S0FDcEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IMm1UGFyc2VkTWVzc2FnZSBhcyBMb2NhbGl6ZU1lc3NhZ2UgfSBmcm9tICdAYW5ndWxhci9sb2NhbGl6ZSc7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VFeHRyYWN0b3IgfSBmcm9tICdAYW5ndWxhci9sb2NhbGl6ZS90b29scyc7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJDb250ZXh0LCBCdWlsZGVyT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2FyY2hpdGVjdCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcbmltcG9ydCBub2RlUGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgYnVpbGRBcHBsaWNhdGlvbkludGVybmFsIH0gZnJvbSAnLi4vYXBwbGljYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBBcHBsaWNhdGlvbkJ1aWxkZXJJbnRlcm5hbE9wdGlvbnMgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi9vcHRpb25zJztcbmltcG9ydCB7IGJ1aWxkRXNidWlsZEJyb3dzZXIgfSBmcm9tICcuLi9icm93c2VyLWVzYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBOb3JtYWxpemVkRXh0cmFjdEkxOG5PcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RNZXNzYWdlcyhcbiAgb3B0aW9uczogTm9ybWFsaXplZEV4dHJhY3RJMThuT3B0aW9ucyxcbiAgYnVpbGRlck5hbWU6IHN0cmluZyxcbiAgY29udGV4dDogQnVpbGRlckNvbnRleHQsXG4gIGV4dHJhY3RvckNvbnN0cnVjdG9yOiB0eXBlb2YgTWVzc2FnZUV4dHJhY3Rvcixcbik6IFByb21pc2U8e1xuICBidWlsZGVyUmVzdWx0OiBCdWlsZGVyT3V0cHV0O1xuICBiYXNlUGF0aDogc3RyaW5nO1xuICBtZXNzYWdlczogTG9jYWxpemVNZXNzYWdlW107XG4gIHVzZUxlZ2FjeUlkczogYm9vbGVhbjtcbn0+IHtcbiAgY29uc3QgbWVzc2FnZXM6IExvY2FsaXplTWVzc2FnZVtdID0gW107XG5cbiAgLy8gU2V0dXAgdGhlIGJ1aWxkIG9wdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbiBiYXNlZCBvbiB0aGUgYnJvd3NlclRhcmdldCBvcHRpb25cbiAgY29uc3QgYnVpbGRPcHRpb25zID0gKGF3YWl0IGNvbnRleHQudmFsaWRhdGVPcHRpb25zKFxuICAgIGF3YWl0IGNvbnRleHQuZ2V0VGFyZ2V0T3B0aW9ucyhvcHRpb25zLmJyb3dzZXJUYXJnZXQpLFxuICAgIGJ1aWxkZXJOYW1lLFxuICApKSBhcyB1bmtub3duIGFzIEFwcGxpY2F0aW9uQnVpbGRlckludGVybmFsT3B0aW9ucztcbiAgYnVpbGRPcHRpb25zLm9wdGltaXphdGlvbiA9IGZhbHNlO1xuICBidWlsZE9wdGlvbnMuc291cmNlTWFwID0geyBzY3JpcHRzOiB0cnVlLCB2ZW5kb3I6IHRydWUgfTtcblxuICBsZXQgYnVpbGQ7XG4gIGlmIChidWlsZGVyTmFtZSA9PT0gJ0Bhbmd1bGFyLWRldmtpdC9idWlsZC1hbmd1bGFyOmFwcGxpY2F0aW9uJykge1xuICAgIGJ1aWxkID0gYnVpbGRBcHBsaWNhdGlvbkludGVybmFsO1xuXG4gICAgYnVpbGRPcHRpb25zLnNzciA9IGZhbHNlO1xuICAgIGJ1aWxkT3B0aW9ucy5hcHBTaGVsbCA9IGZhbHNlO1xuICAgIGJ1aWxkT3B0aW9ucy5wcmVyZW5kZXIgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBidWlsZCA9IGJ1aWxkRXNidWlsZEJyb3dzZXI7XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgYnVpbGQgb3B0aW9uc1xuICBsZXQgYnVpbGRlclJlc3VsdDtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGZvciBhd2FpdCAoY29uc3QgcmVzdWx0IG9mIGJ1aWxkKGJ1aWxkT3B0aW9ucyBhcyBhbnksIGNvbnRleHQsIHsgd3JpdGU6IGZhbHNlIH0pKSB7XG4gICAgICBidWlsZGVyUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGJ1aWxkZXJSZXN1bHQgIT09IHVuZGVmaW5lZCwgJ0FwcGxpY2F0aW9uIGJ1aWxkZXIgZGlkIG5vdCBwcm92aWRlIGEgcmVzdWx0LicpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBidWlsZGVyUmVzdWx0ID0ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBlcnJvcjogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRXh0cmFjdCBtZXNzYWdlcyBmcm9tIGVhY2ggb3V0cHV0IEphdmFTY3JpcHQgZmlsZS5cbiAgLy8gT3V0cHV0IGZpbGVzIGFyZSBvbmx5IHByZXNlbnQgb24gYSBzdWNjZXNzZnVsIGJ1aWxkLlxuICBpZiAoYnVpbGRlclJlc3VsdC5vdXRwdXRGaWxlcykge1xuICAgIC8vIFN0b3JlIHRoZSBKUyBhbmQgSlMgbWFwIGZpbGVzIGZvciBsb29rdXAgZHVyaW5nIGV4dHJhY3Rpb25cbiAgICBjb25zdCBmaWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBvdXRwdXRGaWxlIG9mIGJ1aWxkZXJSZXN1bHQub3V0cHV0RmlsZXMpIHtcbiAgICAgIGlmIChvdXRwdXRGaWxlLnBhdGguZW5kc1dpdGgoJy5qcycpKSB7XG4gICAgICAgIGZpbGVzLnNldChvdXRwdXRGaWxlLnBhdGgsIG91dHB1dEZpbGUudGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKG91dHB1dEZpbGUucGF0aC5lbmRzV2l0aCgnLmpzLm1hcCcpKSB7XG4gICAgICAgIGZpbGVzLnNldChvdXRwdXRGaWxlLnBhdGgsIG91dHB1dEZpbGUudGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgdGhlIGxvY2FsaXplIG1lc3NhZ2UgZXh0cmFjdG9yIGJhc2VkIG9uIHRoZSBpbi1tZW1vcnkgZmlsZXNcbiAgICBjb25zdCBleHRyYWN0b3IgPSBzZXR1cExvY2FsaXplRXh0cmFjdG9yKGV4dHJhY3RvckNvbnN0cnVjdG9yLCBmaWxlcywgY29udGV4dCk7XG5cbiAgICAvLyBBdHRlbXB0IGV4dHJhY3Rpb24gb2YgYWxsIG91dHB1dCBKUyBmaWxlc1xuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgZmlsZXMua2V5cygpKSB7XG4gICAgICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKCcuanMnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZU1lc3NhZ2VzID0gZXh0cmFjdG9yLmV4dHJhY3RNZXNzYWdlcyhmaWxlUGF0aCk7XG4gICAgICBtZXNzYWdlcy5wdXNoKC4uLmZpbGVNZXNzYWdlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBidWlsZGVyUmVzdWx0LFxuICAgIGJhc2VQYXRoOiBjb250ZXh0LndvcmtzcGFjZVJvb3QsXG4gICAgbWVzc2FnZXMsXG4gICAgLy8gTGVnYWN5IGkxOG4gaWRlbnRpZmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCB0aGUgbmV3IGFwcGxpY2F0aW9uIGJ1aWxkZXJcbiAgICB1c2VMZWdhY3lJZHM6IGZhbHNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzZXR1cExvY2FsaXplRXh0cmFjdG9yKFxuICBleHRyYWN0b3JDb25zdHJ1Y3RvcjogdHlwZW9mIE1lc3NhZ2VFeHRyYWN0b3IsXG4gIGZpbGVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICBjb250ZXh0OiBCdWlsZGVyQ29udGV4dCxcbik6IE1lc3NhZ2VFeHRyYWN0b3Ige1xuICAvLyBTZXR1cCBhIHZpcnR1YWwgZmlsZSBzeXN0ZW0gaW5zdGFuY2UgZm9yIHRoZSBleHRyYWN0b3JcbiAgLy8gKiBNZXNzYWdlRXh0cmFjdG9yIGl0c2VsZiB1c2VzIHJlYWRGaWxlLCByZWxhdGl2ZSBhbmQgcmVzb2x2ZVxuICAvLyAqIEludGVybmFsIFNvdXJjZUZpbGVMb2FkZXIgKHNvdXJjZW1hcCBzdXBwb3J0KSB1c2VzIGRpcm5hbWUsIGV4aXN0cywgcmVhZEZpbGUsIGFuZCByZXNvbHZlXG4gIGNvbnN0IGZpbGVzeXN0ZW0gPSB7XG4gICAgcmVhZEZpbGUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIC8vIE91dHB1dCBmaWxlcyBhcmUgc3RvcmVkIGFzIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2Ugcm9vdFxuICAgICAgY29uc3QgcmVxdWVzdGVkUGF0aCA9IG5vZGVQYXRoLnJlbGF0aXZlKGNvbnRleHQud29ya3NwYWNlUm9vdCwgcGF0aCk7XG5cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmaWxlcy5nZXQocmVxdWVzdGVkUGF0aCk7XG4gICAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBmaWxlIHJlcXVlc3RlZDogJyArIHJlcXVlc3RlZFBhdGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9LFxuICAgIHJlbGF0aXZlKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gbm9kZVBhdGgucmVsYXRpdmUoZnJvbSwgdG8pO1xuICAgIH0sXG4gICAgcmVzb2x2ZSguLi5wYXRoczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIG5vZGVQYXRoLnJlc29sdmUoLi4ucGF0aHMpO1xuICAgIH0sXG4gICAgZXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgLy8gT3V0cHV0IGZpbGVzIGFyZSBzdG9yZWQgYXMgcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSByb290XG4gICAgICBjb25zdCByZXF1ZXN0ZWRQYXRoID0gbm9kZVBhdGgucmVsYXRpdmUoY29udGV4dC53b3Jrc3BhY2VSb290LCBwYXRoKTtcblxuICAgICAgcmV0dXJuIGZpbGVzLmhhcyhyZXF1ZXN0ZWRQYXRoKTtcbiAgICB9LFxuICAgIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBub2RlUGF0aC5kaXJuYW1lKHBhdGgpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbG9nZ2VyID0ge1xuICAgIC8vIGxldmVsIDIgaXMgd2FybmluZ3NcbiAgICBsZXZlbDogMixcbiAgICBkZWJ1ZyguLi5hcmdzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZGVidWcoLi4uYXJncyk7XG4gICAgfSxcbiAgICBpbmZvKC4uLmFyZ3M6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICBjb250ZXh0LmxvZ2dlci5pbmZvKGFyZ3Muam9pbignJykpO1xuICAgIH0sXG4gICAgd2FybiguLi5hcmdzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgY29udGV4dC5sb2dnZXIud2FybihhcmdzLmpvaW4oJycpKTtcbiAgICB9LFxuICAgIGVycm9yKC4uLmFyZ3M6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICBjb250ZXh0LmxvZ2dlci5lcnJvcihhcmdzLmpvaW4oJycpKTtcbiAgICB9LFxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGV4dHJhY3RvciA9IG5ldyBleHRyYWN0b3JDb25zdHJ1Y3RvcihmaWxlc3lzdGVtIGFzIGFueSwgbG9nZ2VyLCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBiYXNlUGF0aDogY29udGV4dC53b3Jrc3BhY2VSb290IGFzIGFueSxcbiAgICB1c2VTb3VyY2VNYXBzOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gZXh0cmFjdG9yO1xufVxuIl19
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import type { BuilderContext, BuilderOutput } from '@angular-devkit/architect';
9
+ import type webpack from 'webpack';
10
+ import type { ExecutionTransformer } from '../../transforms';
11
+ import { Schema as ExtractI18nBuilderOptions } from './schema';
12
+ /**
13
+ * @experimental Direct usage of this function is considered experimental.
14
+ */
15
+ export declare function execute(options: ExtractI18nBuilderOptions, context: BuilderContext, transforms?: {
16
+ webpackConfiguration?: ExecutionTransformer<webpack.Configuration>;
17
+ }): Promise<BuilderOutput>;
@@ -0,0 +1,152 @@
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
+ */
9
+ var __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
+ }));
20
+ var __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
+ });
25
+ var __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
+ };
32
+ var __importDefault = (this && this.__importDefault) || function (mod) {
33
+ return (mod && mod.__esModule) ? mod : { "default": mod };
34
+ };
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.execute = void 0;
37
+ const node_fs_1 = __importDefault(require("node:fs"));
38
+ const node_path_1 = __importDefault(require("node:path"));
39
+ const load_esm_1 = require("../../utils/load-esm");
40
+ const purge_cache_1 = require("../../utils/purge-cache");
41
+ const version_1 = require("../../utils/version");
42
+ const options_1 = require("./options");
43
+ const schema_1 = require("./schema");
44
+ /**
45
+ * @experimental Direct usage of this function is considered experimental.
46
+ */
47
+ async function execute(options, context, transforms) {
48
+ // Determine project name from builder context target
49
+ const projectName = context.target?.project;
50
+ if (!projectName) {
51
+ context.logger.error(`The 'extract-i18n' builder requires a target to be specified.`);
52
+ return { success: false };
53
+ }
54
+ // Check Angular version.
55
+ (0, version_1.assertCompatibleAngularVersion)(context.workspaceRoot);
56
+ // Load the Angular localize package.
57
+ // The package is a peer dependency and might not be present
58
+ let localizeToolsModule;
59
+ try {
60
+ localizeToolsModule = await (0, load_esm_1.loadEsmModule)('@angular/localize/tools');
61
+ }
62
+ catch {
63
+ return {
64
+ success: false,
65
+ error: `i18n extraction requires the '@angular/localize' package.` +
66
+ ` You can add it by using 'ng add @angular/localize'.`,
67
+ };
68
+ }
69
+ // Normalize options
70
+ const normalizedOptions = await (0, options_1.normalizeOptions)(context, projectName, options);
71
+ const builderName = await context.getBuilderNameForTarget(normalizedOptions.browserTarget);
72
+ // Extract messages based on configured builder
73
+ let extractionResult;
74
+ if (builderName === '@angular-devkit/build-angular:application' ||
75
+ builderName === '@angular-devkit/build-angular:browser-esbuild') {
76
+ const { extractMessages } = await Promise.resolve().then(() => __importStar(require('./application-extraction')));
77
+ extractionResult = await extractMessages(normalizedOptions, builderName, context, localizeToolsModule.MessageExtractor);
78
+ }
79
+ else {
80
+ // Purge old build disk cache.
81
+ // Other build systems handle stale cache purging directly.
82
+ await (0, purge_cache_1.purgeStaleBuildCache)(context);
83
+ const { extractMessages } = await Promise.resolve().then(() => __importStar(require('./webpack-extraction')));
84
+ extractionResult = await extractMessages(normalizedOptions, builderName, context, transforms);
85
+ }
86
+ // Return the builder result if it failed
87
+ if (!extractionResult.builderResult.success) {
88
+ return extractionResult.builderResult;
89
+ }
90
+ // Perform duplicate message checks
91
+ const { checkDuplicateMessages } = localizeToolsModule;
92
+ // The filesystem is used to create a relative path for each file
93
+ // from the basePath. This relative path is then used in the error message.
94
+ const checkFileSystem = {
95
+ relative(from, to) {
96
+ return node_path_1.default.relative(from, to);
97
+ },
98
+ };
99
+ const diagnostics = checkDuplicateMessages(
100
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
+ checkFileSystem, extractionResult.messages, 'warning',
102
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
103
+ extractionResult.basePath);
104
+ if (diagnostics.messages.length > 0) {
105
+ context.logger.warn(diagnostics.formatDiagnostics(''));
106
+ }
107
+ // Serialize all extracted messages
108
+ const serializer = await createSerializer(localizeToolsModule, normalizedOptions.format, normalizedOptions.i18nOptions.sourceLocale, extractionResult.basePath, extractionResult.useLegacyIds, diagnostics);
109
+ const content = serializer.serialize(extractionResult.messages);
110
+ // Ensure directory exists
111
+ const outputPath = node_path_1.default.dirname(normalizedOptions.outFile);
112
+ if (!node_fs_1.default.existsSync(outputPath)) {
113
+ node_fs_1.default.mkdirSync(outputPath, { recursive: true });
114
+ }
115
+ // Write translation file
116
+ node_fs_1.default.writeFileSync(normalizedOptions.outFile, content);
117
+ if (normalizedOptions.progress) {
118
+ context.logger.info(`Extraction Complete. (Messages: ${extractionResult.messages.length})`);
119
+ }
120
+ return { success: true, outputPath: normalizedOptions.outFile };
121
+ }
122
+ exports.execute = execute;
123
+ async function createSerializer(localizeToolsModule, format, sourceLocale, basePath, useLegacyIds, diagnostics) {
124
+ const { XmbTranslationSerializer, LegacyMessageIdMigrationSerializer, ArbTranslationSerializer, Xliff1TranslationSerializer, Xliff2TranslationSerializer, SimpleJsonTranslationSerializer, } = localizeToolsModule;
125
+ switch (format) {
126
+ case schema_1.Format.Xmb:
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ return new XmbTranslationSerializer(basePath, useLegacyIds);
129
+ case schema_1.Format.Xlf:
130
+ case schema_1.Format.Xlif:
131
+ case schema_1.Format.Xliff:
132
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
133
+ return new Xliff1TranslationSerializer(sourceLocale, basePath, useLegacyIds, {});
134
+ case schema_1.Format.Xlf2:
135
+ case schema_1.Format.Xliff2:
136
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+ return new Xliff2TranslationSerializer(sourceLocale, basePath, useLegacyIds, {});
138
+ case schema_1.Format.Json:
139
+ return new SimpleJsonTranslationSerializer(sourceLocale);
140
+ case schema_1.Format.LegacyMigrate:
141
+ return new LegacyMessageIdMigrationSerializer(diagnostics);
142
+ case schema_1.Format.Arb:
143
+ const fileSystem = {
144
+ relative(from, to) {
145
+ return node_path_1.default.relative(from, to);
146
+ },
147
+ };
148
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
+ return new ArbTranslationSerializer(sourceLocale, basePath, fileSystem);
150
+ }
151
+ }
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL2J1aWxkZXJzL2V4dHJhY3QtaTE4bi9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUgsc0RBQXlCO0FBQ3pCLDBEQUE2QjtBQUc3QixtREFBcUQ7QUFDckQseURBQStEO0FBQy9ELGlEQUFxRTtBQUNyRSx1Q0FBNkM7QUFDN0MscUNBQXVFO0FBRXZFOztHQUVHO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FDM0IsT0FBa0MsRUFDbEMsT0FBdUIsRUFDdkIsVUFFQztJQUVELHFEQUFxRDtJQUNyRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztJQUM1QyxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7UUFFdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUMzQjtJQUVELHlCQUF5QjtJQUN6QixJQUFBLHdDQUE4QixFQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUV0RCxxQ0FBcUM7SUFDckMsNERBQTREO0lBQzVELElBQUksbUJBQW1CLENBQUM7SUFDeEIsSUFBSTtRQUNGLG1CQUFtQixHQUFHLE1BQU0sSUFBQSx3QkFBYSxFQUN2Qyx5QkFBeUIsQ0FDMUIsQ0FBQztLQUNIO0lBQUMsTUFBTTtRQUNOLE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFDSCwyREFBMkQ7Z0JBQzNELHNEQUFzRDtTQUN6RCxDQUFDO0tBQ0g7SUFFRCxvQkFBb0I7SUFDcEIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsMEJB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QUMsR0FBRztZQUNiLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixRQUFRLENBQUMsSUFBWSxFQUFFLEVBQVU7b0JBQy9CLE9BQU8sbUJBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO2FBQ0YsQ0FBQztZQUVGLDhEQUE4RDtZQUM5RCxPQUFPLElBQUksd0JBQXdCLENBQUMsWUFBWSxFQUFFLFFBQWUsRUFBRSxVQUFpQixDQUFDLENBQUM7S0FDekY7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0eXBlIHsgRGlhZ25vc3RpY3MgfSBmcm9tICdAYW5ndWxhci9sb2NhbGl6ZS90b29scyc7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJDb250ZXh0LCBCdWlsZGVyT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2FyY2hpdGVjdCc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgd2VicGFjayBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGxvYWRFc21Nb2R1bGUgfSBmcm9tICcuLi8uLi91dGlscy9sb2FkLWVzbSc7XG5pbXBvcnQgeyBwdXJnZVN0YWxlQnVpbGRDYWNoZSB9IGZyb20gJy4uLy4uL3V0aWxzL3B1cmdlLWNhY2hlJztcbmltcG9ydCB7IGFzc2VydENvbXBhdGlibGVBbmd1bGFyVmVyc2lvbiB9IGZyb20gJy4uLy4uL3V0aWxzL3ZlcnNpb24nO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBTY2hlbWEgYXMgRXh0cmFjdEkxOG5CdWlsZGVyT3B0aW9ucywgRm9ybWF0IH0gZnJvbSAnLi9zY2hlbWEnO1xuXG4vKipcbiAqIEBleHBlcmltZW50YWwgRGlyZWN0IHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29uc2lkZXJlZCBleHBlcmltZW50YWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlKFxuICBvcHRpb25zOiBFeHRyYWN0STE4bkJ1aWxkZXJPcHRpb25zLFxuICBjb250ZXh0OiBCdWlsZGVyQ29udGV4dCxcbiAgdHJhbnNmb3Jtcz86IHtcbiAgICB3ZWJwYWNrQ29uZmlndXJhdGlvbj86IEV4ZWN1dGlvblRyYW5zZm9ybWVyPHdlYnBhY2suQ29uZmlndXJhdGlvbj47XG4gIH0sXG4pOiBQcm9taXNlPEJ1aWxkZXJPdXRwdXQ+IHtcbiAgLy8gRGV0ZXJtaW5lIHByb2plY3QgbmFtZSBmcm9tIGJ1aWxkZXIgY29udGV4dCB0YXJnZXRcbiAgY29uc3QgcHJvamVjdE5hbWUgPSBjb250ZXh0LnRhcmdldD8ucHJvamVjdDtcbiAgaWYgKCFwcm9qZWN0TmFtZSkge1xuICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKGBUaGUgJ2V4dHJhY3QtaTE4bicgYnVpbGRlciByZXF1aXJlcyBhIHRhcmdldCB0byBiZSBzcGVjaWZpZWQuYCk7XG5cbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gQ2hlY2sgQW5ndWxhciB2ZXJzaW9uLlxuICBhc3NlcnRDb21wYXRpYmxlQW5ndWxhclZlcnNpb24oY29udGV4dC53b3Jrc3BhY2VSb290KTtcblxuICAvLyBMb2FkIHRoZSBBbmd1bGFyIGxvY2FsaXplIHBhY2thZ2UuXG4gIC8vIFRoZSBwYWNrYWdlIGlzIGEgcGVlciBkZXBlbmRlbmN5IGFuZCBtaWdodCBub3QgYmUgcHJlc2VudFxuICBsZXQgbG9jYWxpemVUb29sc01vZHVsZTtcbiAgdHJ5IHtcbiAgICBsb2NhbGl6ZVRvb2xzTW9kdWxlID0gYXdhaXQgbG9hZEVzbU1vZHVsZTx0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9sb2NhbGl6ZS90b29scycpPihcbiAgICAgICdAYW5ndWxhci9sb2NhbGl6ZS90b29scycsXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgZXJyb3I6XG4gICAgICAgIGBpMThuIGV4dHJhY3Rpb24gcmVxdWlyZXMgdGhlICdAYW5ndWxhci9sb2NhbGl6ZScgcGFja2FnZS5gICtcbiAgICAgICAgYCBZb3UgY2FuIGFkZCBpdCBieSB1c2luZyAnbmcgYWRkIEBhbmd1bGFyL2xvY2FsaXplJy5gLFxuICAgIH07XG4gIH1cblxuICAvLyBOb3JtYWxpemUgb3B0aW9uc1xuICBjb25zdCBub3JtYWxpemVkT3B0aW9ucyA9IGF3YWl0IG5vcm1hbGl6ZU9wdGlvbnMoY29udGV4dCwgcHJvamVjdE5hbWUsIG9wdGlvbnMpO1xuICBjb25zdCBidWlsZGVyTmFtZSA9IGF3YWl0IGNvbnRleHQuZ2V0QnVpbGRlck5hbWVGb3JUYXJnZXQobm9ybWFsaXplZE9wdGlvbnMuYnJvd3NlclRhcmdldCk7XG5cbiAgLy8gRXh0cmFjdCBtZXNzYWdlcyBiYXNlZCBvbiBjb25maWd1cmVkIGJ1aWxkZXJcbiAgbGV0IGV4dHJhY3Rpb25SZXN1bHQ7XG4gIGlmIChcbiAgICBidWlsZGVyTmFtZSA9PT0gJ0Bhbmd1bGFyLWRldmtpdC9idWlsZC1hbmd1bGFyOmFwcGxpY2F0aW9uJyB8fFxuICAgIGJ1aWxkZXJOYW1lID09PSAnQGFuZ3VsYXItZGV2a2l0L2J1aWxkLWFuZ3VsYXI6YnJvd3Nlci1lc2J1aWxkJ1xuICApIHtcbiAgICBjb25zdCB7IGV4dHJhY3RNZXNzYWdlcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2FwcGxpY2F0aW9uLWV4dHJhY3Rpb24nKTtcbiAgICBleHRyYWN0aW9uUmVzdWx0ID0gYXdhaXQgZXh0cmFjdE1lc3NhZ2VzKFxuICAgICAgbm9ybWFsaXplZE9wdGlvbnMsXG4gICAgICBidWlsZGVyTmFtZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBsb2NhbGl6ZVRvb2xzTW9kdWxlLk1lc3NhZ2VFeHRyYWN0b3IsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQdXJnZSBvbGQgYnVpbGQgZGlzayBjYWNoZS5cbiAgICAvLyBPdGhlciBidWlsZCBzeXN0ZW1zIGhhbmRsZSBzdGFsZSBjYWNoZSBwdXJnaW5nIGRpcmVjdGx5LlxuICAgIGF3YWl0IHB1cmdlU3RhbGVCdWlsZENhY2hlKGNvbnRleHQpO1xuXG4gICAgY29uc3QgeyBleHRyYWN0TWVzc2FnZXMgfSA9IGF3YWl0IGltcG9ydCgnLi93ZWJwYWNrLWV4dHJhY3Rpb24nKTtcbiAgICBleHRyYWN0aW9uUmVzdWx0ID0gYXdhaXQgZXh0cmFjdE1lc3NhZ2VzKG5vcm1hbGl6ZWRPcHRpb25zLCBidWlsZGVyTmFtZSwgY29udGV4dCwgdHJhbnNmb3Jtcyk7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIGJ1aWxkZXIgcmVzdWx0IGlmIGl0IGZhaWxlZFxuICBpZiAoIWV4dHJhY3Rpb25SZXN1bHQuYnVpbGRlclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgcmV0dXJuIGV4dHJhY3Rpb25SZXN1bHQuYnVpbGRlclJlc3VsdDtcbiAgfVxuXG4gIC8vIFBlcmZvcm0gZHVwbGljYXRlIG1lc3NhZ2UgY2hlY2tzXG4gIGNvbnN0IHsgY2hlY2tEdXBsaWNhdGVNZXNzYWdlcyB9ID0gbG9jYWxpemVUb29sc01vZHVsZTtcblxuICAvLyBUaGUgZmlsZXN5c3RlbSBpcyB1c2VkIHRvIGNyZWF0ZSBhIHJlbGF0aXZlIHBhdGggZm9yIGVhY2ggZmlsZVxuICAvLyBmcm9tIHRoZSBiYXNlUGF0aC4gIFRoaXMgcmVsYXRpdmUgcGF0aCBpcyB0aGVuIHVzZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gIGNvbnN0IGNoZWNrRmlsZVN5c3RlbSA9IHtcbiAgICByZWxhdGl2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHBhdGgucmVsYXRpdmUoZnJvbSwgdG8pO1xuICAgIH0sXG4gIH07XG4gIGNvbnN0IGRpYWdub3N0aWNzID0gY2hlY2tEdXBsaWNhdGVNZXNzYWdlcyhcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNoZWNrRmlsZVN5c3RlbSBhcyBhbnksXG4gICAgZXh0cmFjdGlvblJlc3VsdC5tZXNzYWdlcyxcbiAgICAnd2FybmluZycsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBleHRyYWN0aW9uUmVzdWx0LmJhc2VQYXRoIGFzIGFueSxcbiAgKTtcbiAgaWYgKGRpYWdub3N0aWNzLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBjb250ZXh0LmxvZ2dlci53YXJuKGRpYWdub3N0aWNzLmZvcm1hdERpYWdub3N0aWNzKCcnKSk7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgYWxsIGV4dHJhY3RlZCBtZXNzYWdlc1xuICBjb25zdCBzZXJpYWxpemVyID0gYXdhaXQgY3JlYXRlU2VyaWFsaXplcihcbiAgICBsb2NhbGl6ZVRvb2xzTW9kdWxlLFxuICAgIG5vcm1hbGl6ZWRPcHRpb25zLmZvcm1hdCxcbiAgICBub3JtYWxpemVkT3B0aW9ucy5pMThuT3B0aW9ucy5zb3VyY2VMb2NhbGUsXG4gICAgZXh0cmFjdGlvblJlc3VsdC5iYXNlUGF0aCxcbiAgICBleHRyYWN0aW9uUmVzdWx0LnVzZUxlZ2FjeUlkcyxcbiAgICBkaWFnbm9zdGljcyxcbiAgKTtcbiAgY29uc3QgY29udGVudCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKGV4dHJhY3Rpb25SZXN1bHQubWVzc2FnZXMpO1xuXG4gIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmRpcm5hbWUobm9ybWFsaXplZE9wdGlvbnMub3V0RmlsZSk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhvdXRwdXRQYXRoKSkge1xuICAgIGZzLm1rZGlyU3luYyhvdXRwdXRQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8vIFdyaXRlIHRyYW5zbGF0aW9uIGZpbGVcbiAgZnMud3JpdGVGaWxlU3luYyhub3JtYWxpemVkT3B0aW9ucy5vdXRGaWxlLCBjb250ZW50KTtcblxuICBpZiAobm9ybWFsaXplZE9wdGlvbnMucHJvZ3Jlc3MpIHtcbiAgICBjb250ZXh0LmxvZ2dlci5pbmZvKGBFeHRyYWN0aW9uIENvbXBsZXRlLiAoTWVzc2FnZXM6ICR7ZXh0cmFjdGlvblJlc3VsdC5tZXNzYWdlcy5sZW5ndGh9KWApO1xuICB9XG5cbiAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgb3V0cHV0UGF0aDogbm9ybWFsaXplZE9wdGlvbnMub3V0RmlsZSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTZXJpYWxpemVyKFxuICBsb2NhbGl6ZVRvb2xzTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9sb2NhbGl6ZS90b29scycpLFxuICBmb3JtYXQ6IEZvcm1hdCxcbiAgc291cmNlTG9jYWxlOiBzdHJpbmcsXG4gIGJhc2VQYXRoOiBzdHJpbmcsXG4gIHVzZUxlZ2FjeUlkczogYm9vbGVhbixcbiAgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNzLFxuKSB7XG4gIGNvbnN0IHtcbiAgICBYbWJUcmFuc2xhdGlvblNlcmlhbGl6ZXIsXG4gICAgTGVnYWN5TWVzc2FnZUlkTWlncmF0aW9uU2VyaWFsaXplcixcbiAgICBBcmJUcmFuc2xhdGlvblNlcmlhbGl6ZXIsXG4gICAgWGxpZmYxVHJhbnNsYXRpb25TZXJpYWxpemVyLFxuICAgIFhsaWZmMlRyYW5zbGF0aW9uU2VyaWFsaXplcixcbiAgICBTaW1wbGVKc29uVHJhbnNsYXRpb25TZXJpYWxpemVyLFxuICB9ID0gbG9jYWxpemVUb29sc01vZHVsZTtcblxuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgRm9ybWF0LlhtYjpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICByZXR1cm4gbmV3IFhtYlRyYW5zbGF0aW9uU2VyaWFsaXplcihiYXNlUGF0aCBhcyBhbnksIHVzZUxlZ2FjeUlkcyk7XG4gICAgY2FzZSBGb3JtYXQuWGxmOlxuICAgIGNhc2UgRm9ybWF0LlhsaWY6XG4gICAgY2FzZSBGb3JtYXQuWGxpZmY6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgcmV0dXJuIG5ldyBYbGlmZjFUcmFuc2xhdGlvblNlcmlhbGl6ZXIoc291cmNlTG9jYWxlLCBiYXNlUGF0aCBhcyBhbnksIHVzZUxlZ2FjeUlkcywge30pO1xuICAgIGNhc2UgRm9ybWF0LlhsZjI6XG4gICAgY2FzZSBGb3JtYXQuWGxpZmYyOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIHJldHVybiBuZXcgWGxpZmYyVHJhbnNsYXRpb25TZXJpYWxpemVyKHNvdXJjZUxvY2FsZSwgYmFzZVBhdGggYXMgYW55LCB1c2VMZWdhY3lJZHMsIHt9KTtcbiAgICBjYXNlIEZvcm1hdC5Kc29uOlxuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVKc29uVHJhbnNsYXRpb25TZXJpYWxpemVyKHNvdXJjZUxvY2FsZSk7XG4gICAgY2FzZSBGb3JtYXQuTGVnYWN5TWlncmF0ZTpcbiAgICAgIHJldHVybiBuZXcgTGVnYWN5TWVzc2FnZUlkTWlncmF0aW9uU2VyaWFsaXplcihkaWFnbm9zdGljcyk7XG4gICAgY2FzZSBGb3JtYXQuQXJiOlxuICAgICAgY29uc3QgZmlsZVN5c3RlbSA9IHtcbiAgICAgICAgcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgICByZXR1cm4gcGF0aC5yZWxhdGl2ZShmcm9tLCB0byk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgcmV0dXJuIG5ldyBBcmJUcmFuc2xhdGlvblNlcmlhbGl6ZXIoc291cmNlTG9jYWxlLCBiYXNlUGF0aCBhcyBhbnksIGZpbGVTeXN0ZW0gYXMgYW55KTtcbiAgfVxufVxuIl19
@@ -5,18 +5,8 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { BuilderContext } from '@angular-devkit/architect';
9
- import { BuildResult } from '@angular-devkit/build-webpack';
10
- import { JsonObject } from '@angular-devkit/core';
11
- import webpack from 'webpack';
12
- import { ExecutionTransformer } from '../../transforms';
13
- import { Schema } from './schema';
14
- export type ExtractI18nBuilderOptions = Schema;
15
- /**
16
- * @experimental Direct usage of this function is considered experimental.
17
- */
18
- export declare function execute(options: ExtractI18nBuilderOptions, context: BuilderContext, transforms?: {
19
- webpackConfiguration?: ExecutionTransformer<webpack.Configuration>;
20
- }): Promise<BuildResult>;
21
- declare const _default: import("../../../../architect/src/internal").Builder<Schema & JsonObject>;
8
+ import { execute } from './builder';
9
+ import type { Schema as ExtractI18nBuilderOptions } from './schema';
10
+ export { ExtractI18nBuilderOptions, execute };
11
+ declare const _default: import("../../../../architect/src/internal").Builder<ExtractI18nBuilderOptions & import("../../../../core/src").JsonObject>;
22
12
  export default _default;