@angular-devkit/build-angular 16.1.0-next.1 → 16.1.0-rc.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 (44) hide show
  1. package/package.json +22 -22
  2. package/src/builders/browser/schema.js +6 -6
  3. package/src/builders/browser-esbuild/angular/aot-compilation.js +5 -5
  4. package/src/builders/browser-esbuild/esbuild.d.ts +9 -3
  5. package/src/builders/browser-esbuild/esbuild.js +39 -11
  6. package/src/builders/browser-esbuild/global-scripts.js +47 -63
  7. package/src/builders/browser-esbuild/global-styles.js +14 -23
  8. package/src/builders/browser-esbuild/index.js +58 -36
  9. package/src/builders/browser-esbuild/options.d.ts +6 -0
  10. package/src/builders/browser-esbuild/options.js +3 -2
  11. package/src/builders/browser-esbuild/schema.js +6 -6
  12. package/src/builders/browser-esbuild/stylesheets/bundle-options.js +15 -20
  13. package/src/builders/browser-esbuild/stylesheets/css-language.d.ts +9 -0
  14. package/src/builders/browser-esbuild/stylesheets/css-language.js +16 -0
  15. package/src/builders/browser-esbuild/stylesheets/less-language.d.ts +9 -0
  16. package/src/builders/browser-esbuild/stylesheets/less-language.js +127 -0
  17. package/src/builders/browser-esbuild/stylesheets/sass-language.d.ts +10 -0
  18. package/src/builders/browser-esbuild/stylesheets/sass-language.js +169 -0
  19. package/src/builders/browser-esbuild/stylesheets/{css-plugin.d.ts → stylesheet-plugin-factory.d.ts} +17 -9
  20. package/src/builders/browser-esbuild/stylesheets/stylesheet-plugin-factory.js +218 -0
  21. package/src/builders/browser-esbuild/virtual-module-plugin.d.ts +28 -0
  22. package/src/builders/browser-esbuild/virtual-module-plugin.js +43 -0
  23. package/src/builders/dev-server/load-proxy-config.js +3 -3
  24. package/src/builders/dev-server/vite-server.d.ts +1 -1
  25. package/src/builders/dev-server/vite-server.js +41 -8
  26. package/src/builders/extract-i18n/schema.js +2 -2
  27. package/src/builders/jest/test-files.d.ts +2 -3
  28. package/src/builders/jest/test-files.js +8 -9
  29. package/src/builders/karma/find-tests-plugin.js +4 -8
  30. package/src/builders/karma/schema.js +2 -2
  31. package/src/builders/server/schema.js +4 -4
  32. package/src/utils/bundle-calculator.js +2 -2
  33. package/src/utils/copy-assets.js +15 -43
  34. package/src/utils/index-file/augment-index-html.d.ts +4 -0
  35. package/src/utils/index-file/augment-index-html.js +29 -3
  36. package/src/utils/index-file/index-html-generator.d.ts +5 -0
  37. package/src/utils/index-file/index-html-generator.js +3 -2
  38. package/src/webpack/plugins/typescript.js +3 -4
  39. package/src/webpack/utils/helpers.js +4 -5
  40. package/src/builders/browser-esbuild/stylesheets/css-plugin.js +0 -166
  41. package/src/builders/browser-esbuild/stylesheets/less-plugin.d.ts +0 -15
  42. package/src/builders/browser-esbuild/stylesheets/less-plugin.js +0 -144
  43. package/src/builders/browser-esbuild/stylesheets/sass-plugin.d.ts +0 -16
  44. package/src/builders/browser-esbuild/stylesheets/sass-plugin.js +0 -188
@@ -0,0 +1,169 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.SassStylesheetLanguage = exports.shutdownSassWorkerPool = void 0;
34
+ const node_path_1 = require("node:path");
35
+ const node_url_1 = require("node:url");
36
+ let sassWorkerPool;
37
+ function isSassException(error) {
38
+ return !!error && typeof error === 'object' && 'sassMessage' in error;
39
+ }
40
+ function shutdownSassWorkerPool() {
41
+ sassWorkerPool?.close();
42
+ sassWorkerPool = undefined;
43
+ }
44
+ exports.shutdownSassWorkerPool = shutdownSassWorkerPool;
45
+ exports.SassStylesheetLanguage = Object.freeze({
46
+ name: 'sass',
47
+ componentFilter: /^s[ac]ss;/,
48
+ fileFilter: /\.s[ac]ss$/,
49
+ process(data, file, format, options, build) {
50
+ const syntax = format === 'sass' ? 'indented' : 'scss';
51
+ const resolveUrl = async (url, previousResolvedModules) => {
52
+ let result = await build.resolve(url, {
53
+ kind: 'import-rule',
54
+ // This should ideally be the directory of the importer file from Sass
55
+ // but that is not currently available from the Sass importer API.
56
+ resolveDir: build.initialOptions.absWorkingDir,
57
+ });
58
+ // Workaround to support Yarn PnP without access to the importer file from Sass
59
+ if (!result.path && previousResolvedModules?.size) {
60
+ for (const previous of previousResolvedModules) {
61
+ result = await build.resolve(url, {
62
+ kind: 'import-rule',
63
+ resolveDir: previous,
64
+ });
65
+ if (result.path) {
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ return result;
71
+ };
72
+ return compileString(data, file, syntax, options, resolveUrl);
73
+ },
74
+ });
75
+ async function compileString(data, filePath, syntax, options, resolveUrl) {
76
+ // Lazily load Sass when a Sass file is found
77
+ if (sassWorkerPool === undefined) {
78
+ const sassService = await Promise.resolve().then(() => __importStar(require('../../../sass/sass-service')));
79
+ sassWorkerPool = new sassService.SassWorkerImplementation(true);
80
+ }
81
+ const warnings = [];
82
+ try {
83
+ const { css, sourceMap, loadedUrls } = await sassWorkerPool.compileStringAsync(data, {
84
+ url: (0, node_url_1.pathToFileURL)(filePath),
85
+ style: 'expanded',
86
+ syntax,
87
+ loadPaths: options.includePaths,
88
+ sourceMap: options.sourcemap,
89
+ sourceMapIncludeSources: options.sourcemap,
90
+ quietDeps: true,
91
+ importers: [
92
+ {
93
+ findFileUrl: async (url, { previousResolvedModules }) => {
94
+ let result = await resolveUrl(url);
95
+ if (result.path) {
96
+ return (0, node_url_1.pathToFileURL)(result.path);
97
+ }
98
+ // Check for package deep imports
99
+ const parts = url.split('/');
100
+ const hasScope = parts.length >= 2 && parts[0].startsWith('@');
101
+ const [nameOrScope, nameOrFirstPath, ...pathPart] = parts;
102
+ const packageName = hasScope ? `${nameOrScope}/${nameOrFirstPath}` : nameOrScope;
103
+ let packageResult = await resolveUrl(packageName + '/package.json');
104
+ if (packageResult.path) {
105
+ return (0, node_url_1.pathToFileURL)((0, node_path_1.join)((0, node_path_1.dirname)(packageResult.path), !hasScope && nameOrFirstPath ? nameOrFirstPath : '', ...pathPart));
106
+ }
107
+ // Check with Yarn PnP workaround using previous resolved modules.
108
+ // This is done last to avoid a performance penalty for common cases.
109
+ result = await resolveUrl(url, previousResolvedModules);
110
+ if (result.path) {
111
+ return (0, node_url_1.pathToFileURL)(result.path);
112
+ }
113
+ packageResult = await resolveUrl(packageName + '/package.json', previousResolvedModules);
114
+ if (packageResult.path) {
115
+ return (0, node_url_1.pathToFileURL)((0, node_path_1.join)((0, node_path_1.dirname)(packageResult.path), !hasScope && nameOrFirstPath ? nameOrFirstPath : '', ...pathPart));
116
+ }
117
+ // Not found
118
+ return null;
119
+ },
120
+ },
121
+ ],
122
+ logger: {
123
+ warn: (text, { deprecation, span }) => {
124
+ warnings.push({
125
+ text: deprecation ? 'Deprecation' : text,
126
+ location: span && {
127
+ file: span.url && (0, node_url_1.fileURLToPath)(span.url),
128
+ lineText: span.context,
129
+ // Sass line numbers are 0-based while esbuild's are 1-based
130
+ line: span.start.line + 1,
131
+ column: span.start.column,
132
+ },
133
+ notes: deprecation ? [{ text }] : undefined,
134
+ });
135
+ },
136
+ },
137
+ });
138
+ return {
139
+ loader: 'css',
140
+ contents: sourceMap ? `${css}\n${sourceMapToUrlComment(sourceMap, (0, node_path_1.dirname)(filePath))}` : css,
141
+ watchFiles: loadedUrls.map((url) => (0, node_url_1.fileURLToPath)(url)),
142
+ warnings,
143
+ };
144
+ }
145
+ catch (error) {
146
+ if (isSassException(error)) {
147
+ const file = error.span.url ? (0, node_url_1.fileURLToPath)(error.span.url) : undefined;
148
+ return {
149
+ loader: 'css',
150
+ errors: [
151
+ {
152
+ text: error.message,
153
+ },
154
+ ],
155
+ warnings,
156
+ watchFiles: file ? [file] : undefined,
157
+ };
158
+ }
159
+ throw error;
160
+ }
161
+ }
162
+ function sourceMapToUrlComment(sourceMap, root) {
163
+ // Remove `file` protocol from all sourcemap sources and adjust to be relative to the input file.
164
+ // This allows esbuild to correctly process the paths.
165
+ sourceMap.sources = sourceMap.sources.map((source) => (0, node_path_1.relative)(root, (0, node_url_1.fileURLToPath)(source)));
166
+ const urlSourceMap = Buffer.from(JSON.stringify(sourceMap), 'utf-8').toString('base64');
167
+ return `/*# sourceMappingURL=data:application/json;charset=utf-8;base64,${urlSourceMap} */`;
168
+ }
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Fzcy1sYW5ndWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL2J1aWxkZXJzL2Jyb3dzZXItZXNidWlsZC9zdHlsZXNoZWV0cy9zYXNzLWxhbmd1YWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0gseUNBQW9EO0FBQ3BELHVDQUF3RDtBQVF4RCxJQUFJLGNBQW9ELENBQUM7QUFFekQsU0FBUyxlQUFlLENBQUMsS0FBYztJQUNyQyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQWdCLHNCQUFzQjtJQUNwQyxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEIsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUM3QixDQUFDO0FBSEQsd0RBR0M7QUFFWSxRQUFBLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQXFCO0lBQ3RFLElBQUksRUFBRSxNQUFNO0lBQ1osZUFBZSxFQUFFLFdBQVc7SUFDNUIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsdUJBQXFDLEVBQUUsRUFBRTtZQUM5RSxJQUFJLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNwQyxJQUFJLEVBQUUsYUFBYTtn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QUFDO1NBQ0g7UUFFRCxNQUFNLEtBQUssQ0FBQztLQUNiO0FBQ0gsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQzVCLFNBQXlELEVBQ3pELElBQVk7SUFFWixpR0FBaUc7SUFDakcsc0RBQXNEO0lBQ3RELFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUEsb0JBQVEsRUFBQyxJQUFJLEVBQUUsSUFBQSx3QkFBYSxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3RixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXhGLE9BQU8sbUVBQW1FLFlBQVksS0FBSyxDQUFDO0FBQzlGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBPbkxvYWRSZXN1bHQsIFBhcnRpYWxNZXNzYWdlLCBSZXNvbHZlUmVzdWx0IH0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlUmVzdWx0LCBFeGNlcHRpb24sIFN5bnRheCB9IGZyb20gJ3Nhc3MnO1xuaW1wb3J0IHR5cGUge1xuICBGaWxlSW1wb3J0ZXJXaXRoUmVxdWVzdENvbnRleHRPcHRpb25zLFxuICBTYXNzV29ya2VySW1wbGVtZW50YXRpb24sXG59IGZyb20gJy4uLy4uLy4uL3Nhc3Mvc2Fzcy1zZXJ2aWNlJztcbmltcG9ydCB7IFN0eWxlc2hlZXRMYW5ndWFnZSwgU3R5bGVzaGVldFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0eWxlc2hlZXQtcGx1Z2luLWZhY3RvcnknO1xuXG5sZXQgc2Fzc1dvcmtlclBvb2w6IFNhc3NXb3JrZXJJbXBsZW1lbnRhdGlvbiB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNTYXNzRXhjZXB0aW9uKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgRXhjZXB0aW9uIHtcbiAgcmV0dXJuICEhZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnc2Fzc01lc3NhZ2UnIGluIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2h1dGRvd25TYXNzV29ya2VyUG9vbCgpOiB2b2lkIHtcbiAgc2Fzc1dvcmtlclBvb2w/LmNsb3NlKCk7XG4gIHNhc3NXb3JrZXJQb29sID0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY29uc3QgU2Fzc1N0eWxlc2hlZXRMYW5ndWFnZSA9IE9iamVjdC5mcmVlemU8U3R5bGVzaGVldExhbmd1YWdlPih7XG4gIG5hbWU6ICdzYXNzJyxcbiAgY29tcG9uZW50RmlsdGVyOiAvXnNbYWNdc3M7LyxcbiAgZmlsZUZpbHRlcjogL1xcLnNbYWNdc3MkLyxcbiAgcHJvY2VzcyhkYXRhLCBmaWxlLCBmb3JtYXQsIG9wdGlvbnMsIGJ1aWxkKSB7XG4gICAgY29uc3Qgc3ludGF4ID0gZm9ybWF0ID09PSAnc2FzcycgPyAnaW5kZW50ZWQnIDogJ3Njc3MnO1xuICAgIGNvbnN0IHJlc29sdmVVcmwgPSBhc3luYyAodXJsOiBzdHJpbmcsIHByZXZpb3VzUmVzb2x2ZWRNb2R1bGVzPzogU2V0PHN0cmluZz4pID0+IHtcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBidWlsZC5yZXNvbHZlKHVybCwge1xuICAgICAgICBraW5kOiAnaW1wb3J0LXJ1bGUnLFxuICAgICAgICAvLyBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGltcG9ydGVyIGZpbGUgZnJvbSBTYXNzXG4gICAgICAgIC8vIGJ1dCB0aGF0IGlzIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlIGZyb20gdGhlIFNhc3MgaW1wb3J0ZXIgQVBJLlxuICAgICAgICByZXNvbHZlRGlyOiBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdvcmthcm91bmQgdG8gc3VwcG9ydCBZYXJuIFBuUCB3aXRob3V0IGFjY2VzcyB0byB0aGUgaW1wb3J0ZXIgZmlsZSBmcm9tIFNhc3NcbiAgICAgIGlmICghcmVzdWx0LnBhdGggJiYgcHJldmlvdXNSZXNvbHZlZE1vZHVsZXM/LnNpemUpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcmV2aW91cyBvZiBwcmV2aW91c1Jlc29sdmVkTW9kdWxlcykge1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGJ1aWxkLnJlc29sdmUodXJsLCB7XG4gICAgICAgICAgICBraW5kOiAnaW1wb3J0LXJ1bGUnLFxuICAgICAgICAgICAgcmVzb2x2ZURpcjogcHJldmlvdXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5wYXRoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbXBpbGVTdHJpbmcoZGF0YSwgZmlsZSwgc3ludGF4LCBvcHRpb25zLCByZXNvbHZlVXJsKTtcbiAgfSxcbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBjb21waWxlU3RyaW5nKFxuICBkYXRhOiBzdHJpbmcsXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHN5bnRheDogU3ludGF4LFxuICBvcHRpb25zOiBTdHlsZXNoZWV0UGx1Z2luT3B0aW9ucyxcbiAgcmVzb2x2ZVVybDogKHVybDogc3RyaW5nLCBwcmV2aW91c1Jlc29sdmVkTW9kdWxlcz86IFNldDxzdHJpbmc+KSA9PiBQcm9taXNlPFJlc29sdmVSZXN1bHQ+LFxuKTogUHJvbWlzZTxPbkxvYWRSZXN1bHQ+IHtcbiAgLy8gTGF6aWx5IGxvYWQgU2FzcyB3aGVuIGEgU2FzcyBmaWxlIGlzIGZvdW5kXG4gIGlmIChzYXNzV29ya2VyUG9vbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgc2Fzc1NlcnZpY2UgPSBhd2FpdCBpbXBvcnQoJy4uLy4uLy4uL3Nhc3Mvc2Fzcy1zZXJ2aWNlJyk7XG4gICAgc2Fzc1dvcmtlclBvb2wgPSBuZXcgc2Fzc1NlcnZpY2UuU2Fzc1dvcmtlckltcGxlbWVudGF0aW9uKHRydWUpO1xuICB9XG5cbiAgY29uc3Qgd2FybmluZ3M6IFBhcnRpYWxNZXNzYWdlW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGNzcywgc291cmNlTWFwLCBsb2FkZWRVcmxzIH0gPSBhd2FpdCBzYXNzV29ya2VyUG9vbC5jb21waWxlU3RyaW5nQXN5bmMoZGF0YSwge1xuICAgICAgdXJsOiBwYXRoVG9GaWxlVVJMKGZpbGVQYXRoKSxcbiAgICAgIHN0eWxlOiAnZXhwYW5kZWQnLFxuICAgICAgc3ludGF4LFxuICAgICAgbG9hZFBhdGhzOiBvcHRpb25zLmluY2x1ZGVQYXRocyxcbiAgICAgIHNvdXJjZU1hcDogb3B0aW9ucy5zb3VyY2VtYXAsXG4gICAgICBzb3VyY2VNYXBJbmNsdWRlU291cmNlczogb3B0aW9ucy5zb3VyY2VtYXAsXG4gICAgICBxdWlldERlcHM6IHRydWUsXG4gICAgICBpbXBvcnRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbmRGaWxlVXJsOiBhc3luYyAoXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB7IHByZXZpb3VzUmVzb2x2ZWRNb2R1bGVzIH06IEZpbGVJbXBvcnRlcldpdGhSZXF1ZXN0Q29udGV4dE9wdGlvbnMsXG4gICAgICAgICAgKTogUHJvbWlzZTxVUkwgfCBudWxsPiA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZVVybCh1cmwpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5wYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwYXRoVG9GaWxlVVJMKHJlc3VsdC5wYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhY2thZ2UgZGVlcCBpbXBvcnRzXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgY29uc3QgaGFzU2NvcGUgPSBwYXJ0cy5sZW5ndGggPj0gMiAmJiBwYXJ0c1swXS5zdGFydHNXaXRoKCdAJyk7XG4gICAgICAgICAgICBjb25zdCBbbmFtZU9yU2NvcGUsIG5hbWVPckZpcnN0UGF0aCwgLi4ucGF0aFBhcnRdID0gcGFydHM7XG4gICAgICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IGhhc1Njb3BlID8gYCR7bmFtZU9yU2NvcGV9LyR7bmFtZU9yRmlyc3RQYXRofWAgOiBuYW1lT3JTY29wZTtcblxuICAgICAgICAgICAgbGV0IHBhY2thZ2VSZXN1bHQgPSBhd2FpdCByZXNvbHZlVXJsKHBhY2thZ2VOYW1lICsgJy9wYWNrYWdlLmpzb24nKTtcblxuICAgICAgICAgICAgaWYgKHBhY2thZ2VSZXN1bHQucGF0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gcGF0aFRvRmlsZVVSTChcbiAgICAgICAgICAgICAgICBqb2luKFxuICAgICAgICAgICAgICAgICAgZGlybmFtZShwYWNrYWdlUmVzdWx0LnBhdGgpLFxuICAgICAgICAgICAgICAgICAgIWhhc1Njb3BlICYmIG5hbWVPckZpcnN0UGF0aCA/IG5hbWVPckZpcnN0UGF0aCA6ICcnLFxuICAgICAgICAgICAgICAgICAgLi4ucGF0aFBhcnQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgd2l0aCBZYXJuIFBuUCB3b3JrYXJvdW5kIHVzaW5nIHByZXZpb3VzIHJlc29sdmVkIG1vZHVsZXMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGRvbmUgbGFzdCB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgZm9yIGNvbW1vbiBjYXNlcy5cblxuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZVVybCh1cmwsIHByZXZpb3VzUmVzb2x2ZWRNb2R1bGVzKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQucGF0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gcGF0aFRvRmlsZVVSTChyZXN1bHQucGF0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhY2thZ2VSZXN1bHQgPSBhd2FpdCByZXNvbHZlVXJsKFxuICAgICAgICAgICAgICBwYWNrYWdlTmFtZSArICcvcGFja2FnZS5qc29uJyxcbiAgICAgICAgICAgICAgcHJldmlvdXNSZXNvbHZlZE1vZHVsZXMsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAocGFja2FnZVJlc3VsdC5wYXRoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwYXRoVG9GaWxlVVJMKFxuICAgICAgICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICAgICAgICBkaXJuYW1lKHBhY2thZ2VSZXN1bHQucGF0aCksXG4gICAgICAgICAgICAgICAgICAhaGFzU2NvcGUgJiYgbmFtZU9yRmlyc3RQYXRoID8gbmFtZU9yRmlyc3RQYXRoIDogJycsXG4gICAgICAgICAgICAgICAgICAuLi5wYXRoUGFydCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOb3QgZm91bmRcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbG9nZ2VyOiB7XG4gICAgICAgIHdhcm46ICh0ZXh0LCB7IGRlcHJlY2F0aW9uLCBzcGFuIH0pID0+IHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRlcHJlY2F0aW9uID8gJ0RlcHJlY2F0aW9uJyA6IHRleHQsXG4gICAgICAgICAgICBsb2NhdGlvbjogc3BhbiAmJiB7XG4gICAgICAgICAgICAgIGZpbGU6IHNwYW4udXJsICYmIGZpbGVVUkxUb1BhdGgoc3Bhbi51cmwpLFxuICAgICAgICAgICAgICBsaW5lVGV4dDogc3Bhbi5jb250ZXh0LFxuICAgICAgICAgICAgICAvLyBTYXNzIGxpbmUgbnVtYmVycyBhcmUgMC1iYXNlZCB3aGlsZSBlc2J1aWxkJ3MgYXJlIDEtYmFzZWRcbiAgICAgICAgICAgICAgbGluZTogc3Bhbi5zdGFydC5saW5lICsgMSxcbiAgICAgICAgICAgICAgY29sdW1uOiBzcGFuLnN0YXJ0LmNvbHVtbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub3RlczogZGVwcmVjYXRpb24gPyBbeyB0ZXh0IH1dIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsb2FkZXI6ICdjc3MnLFxuICAgICAgY29udGVudHM6IHNvdXJjZU1hcCA/IGAke2Nzc31cXG4ke3NvdXJjZU1hcFRvVXJsQ29tbWVudChzb3VyY2VNYXAsIGRpcm5hbWUoZmlsZVBhdGgpKX1gIDogY3NzLFxuICAgICAgd2F0Y2hGaWxlczogbG9hZGVkVXJscy5tYXAoKHVybCkgPT4gZmlsZVVSTFRvUGF0aCh1cmwpKSxcbiAgICAgIHdhcm5pbmdzLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzU2Fzc0V4Y2VwdGlvbihlcnJvcikpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBlcnJvci5zcGFuLnVybCA/IGZpbGVVUkxUb1BhdGgoZXJyb3Iuc3Bhbi51cmwpIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2FkZXI6ICdjc3MnLFxuICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHdhcm5pbmdzLFxuICAgICAgICB3YXRjaEZpbGVzOiBmaWxlID8gW2ZpbGVdIDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBzb3VyY2VNYXBUb1VybENvbW1lbnQoXG4gIHNvdXJjZU1hcDogRXhjbHVkZTxDb21waWxlUmVzdWx0Wydzb3VyY2VNYXAnXSwgdW5kZWZpbmVkPixcbiAgcm9vdDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgLy8gUmVtb3ZlIGBmaWxlYCBwcm90b2NvbCBmcm9tIGFsbCBzb3VyY2VtYXAgc291cmNlcyBhbmQgYWRqdXN0IHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBmaWxlLlxuICAvLyBUaGlzIGFsbG93cyBlc2J1aWxkIHRvIGNvcnJlY3RseSBwcm9jZXNzIHRoZSBwYXRocy5cbiAgc291cmNlTWFwLnNvdXJjZXMgPSBzb3VyY2VNYXAuc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gcmVsYXRpdmUocm9vdCwgZmlsZVVSTFRvUGF0aChzb3VyY2UpKSk7XG5cbiAgY29uc3QgdXJsU291cmNlTWFwID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIHJldHVybiBgLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCR7dXJsU291cmNlTWFwfSAqL2A7XG59XG4iXX0=
@@ -5,17 +5,18 @@
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 type { Plugin } from 'esbuild';
8
+ import type { OnLoadResult, Plugin, PluginBuild } from 'esbuild';
9
9
  import { LoadResultCache } from '../load-result-cache';
10
10
  /**
11
- * An object containing the plugin options to use when processing CSS stylesheets.
11
+ * An object containing the plugin options to use when processing stylesheets.
12
12
  */
13
- export interface CssPluginOptions {
13
+ export interface StylesheetPluginOptions {
14
14
  /**
15
15
  * Controls the use and creation of sourcemaps when processing the stylesheets.
16
16
  * If true, sourcemap processing is enabled; if false, disabled.
17
17
  */
18
18
  sourcemap: boolean;
19
+ includePaths?: string[];
19
20
  /**
20
21
  * Optional component data for any inline styles from Component decorator `styles` fields.
21
22
  * The key is an internal angular resource URI and the value is the stylesheet content.
@@ -32,9 +33,16 @@ export interface CssPluginOptions {
32
33
  package: string;
33
34
  };
34
35
  }
35
- /**
36
- * Creates an esbuild plugin to process CSS stylesheets.
37
- * @param options An object containing the plugin options.
38
- * @returns An esbuild Plugin instance.
39
- */
40
- export declare function createCssPlugin(options: CssPluginOptions, cache?: LoadResultCache): Plugin;
36
+ export interface StylesheetLanguage {
37
+ name: string;
38
+ componentFilter: RegExp;
39
+ fileFilter: RegExp;
40
+ process?(data: string, file: string, format: string, options: StylesheetPluginOptions, build: PluginBuild): OnLoadResult | Promise<OnLoadResult>;
41
+ }
42
+ export declare class StylesheetPluginFactory {
43
+ private readonly options;
44
+ private readonly cache?;
45
+ private autoprefixer;
46
+ constructor(options: StylesheetPluginOptions, cache?: LoadResultCache | undefined);
47
+ create(language: Readonly<StylesheetLanguage>): Plugin;
48
+ }
@@ -0,0 +1,218 @@
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.StylesheetPluginFactory = void 0;
37
+ const autoprefixer_1 = __importDefault(require("autoprefixer"));
38
+ const node_assert_1 = __importDefault(require("node:assert"));
39
+ const promises_1 = require("node:fs/promises");
40
+ const node_path_1 = require("node:path");
41
+ const load_result_cache_1 = require("../load-result-cache");
42
+ /**
43
+ * The lazy-loaded instance of the postcss stylesheet postprocessor.
44
+ * It is only imported and initialized if postcss is needed.
45
+ */
46
+ let postcss;
47
+ class StylesheetPluginFactory {
48
+ constructor(options, cache) {
49
+ this.options = options;
50
+ this.cache = cache;
51
+ const autoprefixer = (0, autoprefixer_1.default)({
52
+ overrideBrowserslist: options.browsers,
53
+ ignoreUnknownVersions: true,
54
+ });
55
+ // Autoprefixer currently does not contain a method to check if autoprefixer is required
56
+ // based on the provided list of browsers. However, it does contain a method that returns
57
+ // informational text that can be used as a replacement. The text "Awesome!" will be present
58
+ // when autoprefixer determines no actions are needed.
59
+ // ref: https://github.com/postcss/autoprefixer/blob/e2f5c26ff1f3eaca95a21873723ce1cdf6e59f0e/lib/info.js#L118
60
+ const autoprefixerInfo = autoprefixer.info();
61
+ const skipAutoprefixer = autoprefixerInfo.includes('Awesome!');
62
+ if (!skipAutoprefixer) {
63
+ this.autoprefixer = autoprefixer;
64
+ }
65
+ }
66
+ create(language) {
67
+ // Return a noop plugin if no load actions are required
68
+ if (!language.process && !this.autoprefixer && !this.options.tailwindConfiguration) {
69
+ return {
70
+ name: 'angular-' + language.name,
71
+ setup() { },
72
+ };
73
+ }
74
+ const { autoprefixer, cache, options } = this;
75
+ return {
76
+ name: 'angular-' + language.name,
77
+ async setup(build) {
78
+ // Setup postcss if needed by either autoprefixer or tailwind
79
+ // TODO: Move this into the plugin factory to avoid repeat setup per created plugin
80
+ let postcssProcessor;
81
+ if (autoprefixer || options.tailwindConfiguration) {
82
+ postcss ?? (postcss = (await Promise.resolve().then(() => __importStar(require('postcss')))).default);
83
+ postcssProcessor = postcss();
84
+ if (options.tailwindConfiguration) {
85
+ const tailwind = await Promise.resolve(`${options.tailwindConfiguration.package}`).then(s => __importStar(require(s)));
86
+ postcssProcessor.use(tailwind.default({ config: options.tailwindConfiguration.file }));
87
+ }
88
+ if (autoprefixer) {
89
+ postcssProcessor.use(autoprefixer);
90
+ }
91
+ }
92
+ // Add a load callback to support inline Component styles
93
+ build.onLoad({ filter: language.componentFilter, namespace: 'angular:styles/component' }, (0, load_result_cache_1.createCachedLoad)(cache, async (args) => {
94
+ const data = options.inlineComponentData?.[args.path];
95
+ (0, node_assert_1.default)(typeof data === 'string', `component style name should always be found [${args.path}]`);
96
+ const [format, , filename] = args.path.split(';', 3);
97
+ return processStylesheet(language, data, filename, format, options, build, postcssProcessor);
98
+ }));
99
+ // Add a load callback to support files from disk
100
+ build.onLoad({ filter: language.fileFilter }, (0, load_result_cache_1.createCachedLoad)(cache, async (args) => {
101
+ const data = await (0, promises_1.readFile)(args.path, 'utf-8');
102
+ return processStylesheet(language, data, args.path, (0, node_path_1.extname)(args.path).toLowerCase().slice(1), options, build, postcssProcessor);
103
+ }));
104
+ },
105
+ };
106
+ }
107
+ }
108
+ exports.StylesheetPluginFactory = StylesheetPluginFactory;
109
+ async function processStylesheet(language, data, filename, format, options, build, postcssProcessor) {
110
+ let result;
111
+ // Process the input data if the language requires preprocessing
112
+ if (language.process) {
113
+ result = await language.process(data, filename, format, options, build);
114
+ }
115
+ else {
116
+ result = {
117
+ contents: data,
118
+ loader: 'css',
119
+ watchFiles: [filename],
120
+ };
121
+ }
122
+ // Transform with postcss if needed and there are no errors
123
+ if (postcssProcessor && result.contents && !result.errors?.length) {
124
+ const postcssResult = await compileString(typeof result.contents === 'string'
125
+ ? result.contents
126
+ : Buffer.from(result.contents).toString('utf-8'), filename, postcssProcessor, options);
127
+ // Merge results
128
+ if (postcssResult.errors?.length) {
129
+ delete result.contents;
130
+ }
131
+ if (result.warnings && postcssResult.warnings) {
132
+ postcssResult.warnings.unshift(...result.warnings);
133
+ }
134
+ if (result.watchFiles && postcssResult.watchFiles) {
135
+ postcssResult.watchFiles.unshift(...result.watchFiles);
136
+ }
137
+ if (result.watchDirs && postcssResult.watchDirs) {
138
+ postcssResult.watchDirs.unshift(...result.watchDirs);
139
+ }
140
+ result = {
141
+ ...result,
142
+ ...postcssResult,
143
+ };
144
+ }
145
+ return result;
146
+ }
147
+ /**
148
+ * Compiles the provided CSS stylesheet data using a provided postcss processor and provides an
149
+ * esbuild load result that can be used directly by an esbuild Plugin.
150
+ * @param data The stylesheet content to process.
151
+ * @param filename The name of the file that contains the data.
152
+ * @param postcssProcessor A postcss processor instance to use.
153
+ * @param options The plugin options to control the processing.
154
+ * @returns An esbuild OnLoaderResult object with the processed content, warnings, and/or errors.
155
+ */
156
+ async function compileString(data, filename, postcssProcessor, options) {
157
+ try {
158
+ const result = await postcssProcessor.process(data, {
159
+ from: filename,
160
+ to: filename,
161
+ map: options.sourcemap && {
162
+ inline: true,
163
+ sourcesContent: true,
164
+ },
165
+ });
166
+ const rawWarnings = result.warnings();
167
+ let warnings;
168
+ if (rawWarnings.length > 0) {
169
+ const lineMappings = new Map();
170
+ warnings = rawWarnings.map((warning) => {
171
+ const file = warning.node.source?.input.file;
172
+ if (file === undefined) {
173
+ return { text: warning.text };
174
+ }
175
+ let lines = lineMappings.get(file);
176
+ if (lines === undefined) {
177
+ lines = warning.node.source?.input.css.split(/\r?\n/);
178
+ lineMappings.set(file, lines ?? null);
179
+ }
180
+ return {
181
+ text: warning.text,
182
+ location: {
183
+ file,
184
+ line: warning.line,
185
+ column: warning.column - 1,
186
+ lineText: lines?.[warning.line - 1],
187
+ },
188
+ };
189
+ });
190
+ }
191
+ return {
192
+ contents: result.css,
193
+ loader: 'css',
194
+ warnings,
195
+ };
196
+ }
197
+ catch (error) {
198
+ postcss ?? (postcss = (await Promise.resolve().then(() => __importStar(require('postcss')))).default);
199
+ if (error instanceof postcss.CssSyntaxError) {
200
+ const lines = error.source?.split(/\r?\n/);
201
+ return {
202
+ errors: [
203
+ {
204
+ text: error.reason,
205
+ location: {
206
+ file: error.file,
207
+ line: error.line,
208
+ column: error.column && error.column - 1,
209
+ lineText: error.line === undefined ? undefined : lines?.[error.line - 1],
210
+ },
211
+ },
212
+ ],
213
+ };
214
+ }
215
+ throw error;
216
+ }
217
+ }
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzaGVldC1wbHVnaW4tZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL2J1aWxkZXJzL2Jyb3dzZXItZXNidWlsZC9zdHlsZXNoZWV0cy9zdHlsZXNoZWV0LXBsdWdpbi1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsZ0VBQW9EO0FBRXBELDhEQUFpQztBQUNqQywrQ0FBNEM7QUFDNUMseUNBQW9DO0FBQ3BDLDREQUF5RTtBQUV6RTs7O0dBR0c7QUFDSCxJQUFJLE9BQXdELENBQUM7QUEyQzdELE1BQWEsdUJBQXVCO0lBR2xDLFlBQ21CLE9BQWdDLEVBQ2hDLEtBQXVCO1FBRHZCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBRXhDLE1BQU0sWUFBWSxHQUFHLElBQUEsc0JBQXdCLEVBQUM7WUFDNUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDdEMscUJBQXFCLEVBQUUsSUFBSTtTQUM1QixDQUFDLENBQUM7UUFFSCx3RkFBd0Y7UUFDeEYseUZBQXlGO1FBQ3pGLDRGQUE0RjtRQUM1RixzREFBc0Q7UUFDdEQsOEdBQThHO1FBQzlHLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsUUFBc0M7UUFDM0MsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDbEYsT0FBTztnQkFDTCxJQUFJLEVBQUUsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQyxLQUFLLEtBQUksQ0FBQzthQUNYLENBQUM7U0FDSDtRQUVELE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztRQUU5QyxPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSTtZQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQ2YsNkRBQTZEO2dCQUM3RCxtRkFBbUY7Z0JBQ25GLElBQUksZ0JBQXlELENBQUM7Z0JBQzlELElBQUksWUFBWSxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtvQkFDakQsT0FBTyxLQUFQLE9BQU8sR0FBSyxDQUFDLHdEQUFhLFNBQVMsR0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDO29CQUM5QyxnQkFBZ0IsR0FBRyxPQUFPLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUU7d0JBQ2pDLE1BQU0sUUFBUSxHQUFHLHlCQUFhLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLHVDQUFDLENBQUM7d0JBQ3JFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3hGO29CQUNELElBQUksWUFBWSxFQUFFO3dCQUNoQixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7cUJBQ3BDO2lCQUNGO2dCQUVELHlEQUF5RDtnQkFDekQsS0FBSyxDQUFDLE1BQU0sQ0FDVixFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxFQUMzRSxJQUFBLG9DQUFnQixFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEQsSUFBQSxxQkFBTSxFQUNKLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFDeEIsZ0RBQWdELElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FDN0QsQ0FBQztvQkFFRixNQUFNLENBQUMsTUFBTSxFQUFFLEFBQUQsRUFBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBRXJELE9BQU8saUJBQWlCLENBQ3RCLFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLGdCQUFnQixDQUNqQixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBRUYsaURBQWlEO2dCQUNqRCxLQUFLLENBQUMsTUFBTSxDQUNWLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFDL0IsSUFBQSxvQ0FBZ0IsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsbUJBQVEsRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUVoRCxPQUFPLGlCQUFpQixDQUN0QixRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBQSxtQkFBTyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3pDLE9BQU8sRUFDUCxLQUFLLEVBQ0wsZ0JBQWdCLENBQ2pCLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbEdELDBEQWtHQztBQUVELEtBQUssVUFBVSxpQkFBaUIsQ0FDOUIsUUFBc0MsRUFDdEMsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLE1BQWMsRUFDZCxPQUFnQyxFQUNoQyxLQUFrQixFQUNsQixnQkFBeUQ7SUFFekQsSUFBSSxNQUFvQixDQUFDO0lBRXpCLGdFQUFnRTtJQUNoRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDcEIsTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekU7U0FBTTtRQUNMLE1BQU0sR0FBRztZQUNQLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7U0FDdkIsQ0FBQztLQUNIO0lBRUQsMkRBQTJEO0lBQzNELElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLE1BQU0sYUFBYSxDQUN2QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUTtZQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDbEQsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixPQUFPLENBQ1IsQ0FBQztRQUVGLGdCQUFnQjtRQUNoQixJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO1lBQ2hDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUN4QjtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFO1lBQzdDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDakQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDeEQ7UUFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRTtZQUMvQyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0RDtRQUNELE1BQU0sR0FBRztZQUNQLEdBQUcsTUFBTTtZQUNULEdBQUcsYUFBYTtTQUNqQixDQUFDO0tBQ0g7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxLQUFLLFVBQVUsYUFBYSxDQUMxQixJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsZ0JBQTZDLEVBQzdDLE9BQWdDO0lBRWhDLElBQUk7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDbEQsSUFBSSxFQUFFLFFBQVE7WUFDZCxFQUFFLEVBQUUsUUFBUTtZQUNaLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJO2dCQUN4QixNQUFNLEVBQUUsSUFBSTtnQkFDWixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7WUFDeEQsUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDN0MsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO29CQUN0QixPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDL0I7Z0JBRUQsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO29CQUN2QixLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3RELFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztpQkFDdkM7Z0JBRUQsT0FBTztvQkFDTCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLFFBQVEsRUFBRTt3QkFDUixJQUFJO3dCQUNKLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTt3QkFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO3FCQUNwQztpQkFDRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU87WUFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUc7WUFDcEIsTUFBTSxFQUFFLEtBQUs7WUFDYixRQUFRO1NBQ1QsQ0FBQztLQUNIO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLEtBQVAsT0FBTyxHQUFLLENBQUMsd0RBQWEsU0FBUyxHQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUM7UUFDOUMsSUFBSSxLQUFLLFlBQVksT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUzQyxPQUFPO2dCQUNMLE1BQU0sRUFBRTtvQkFDTjt3QkFDRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07d0JBQ2xCLFFBQVEsRUFBRTs0QkFDUixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7NEJBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTs0QkFDaEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUN4QyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7eUJBQ3pFO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztTQUNIO1FBRUQsTUFBTSxLQUFLLENBQUM7S0FDYjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IGNyZWF0ZUF1dG9QcmVmaXhlclBsdWdpbiBmcm9tICdhdXRvcHJlZml4ZXInO1xuaW1wb3J0IHR5cGUgeyBPbkxvYWRSZXN1bHQsIFBsdWdpbiwgUGx1Z2luQnVpbGQgfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGV4dG5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdENhY2hlLCBjcmVhdGVDYWNoZWRMb2FkIH0gZnJvbSAnLi4vbG9hZC1yZXN1bHQtY2FjaGUnO1xuXG4vKipcbiAqIFRoZSBsYXp5LWxvYWRlZCBpbnN0YW5jZSBvZiB0aGUgcG9zdGNzcyBzdHlsZXNoZWV0IHBvc3Rwcm9jZXNzb3IuXG4gKiBJdCBpcyBvbmx5IGltcG9ydGVkIGFuZCBpbml0aWFsaXplZCBpZiBwb3N0Y3NzIGlzIG5lZWRlZC5cbiAqL1xubGV0IHBvc3Rjc3M6IHR5cGVvZiBpbXBvcnQoJ3Bvc3Rjc3MnKVsnZGVmYXVsdCddIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwbHVnaW4gb3B0aW9ucyB0byB1c2Ugd2hlbiBwcm9jZXNzaW5nIHN0eWxlc2hlZXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0eWxlc2hlZXRQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSB1c2UgYW5kIGNyZWF0aW9uIG9mIHNvdXJjZW1hcHMgd2hlbiBwcm9jZXNzaW5nIHRoZSBzdHlsZXNoZWV0cy5cbiAgICogSWYgdHJ1ZSwgc291cmNlbWFwIHByb2Nlc3NpbmcgaXMgZW5hYmxlZDsgaWYgZmFsc2UsIGRpc2FibGVkLlxuICAgKi9cbiAgc291cmNlbWFwOiBib29sZWFuO1xuXG4gIGluY2x1ZGVQYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjb21wb25lbnQgZGF0YSBmb3IgYW55IGlubGluZSBzdHlsZXMgZnJvbSBDb21wb25lbnQgZGVjb3JhdG9yIGBzdHlsZXNgIGZpZWxkcy5cbiAgICogVGhlIGtleSBpcyBhbiBpbnRlcm5hbCBhbmd1bGFyIHJlc291cmNlIFVSSSBhbmQgdGhlIHZhbHVlIGlzIHRoZSBzdHlsZXNoZWV0IGNvbnRlbnQuXG4gICAqL1xuICBpbmxpbmVDb21wb25lbnREYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIGJyb3dzZXJzIHRvIHN1cHBvcnQgaW4gYnJvd3NlcnNsaXN0IGZvcm1hdCB3aGVuIHByb2Nlc3Npbmcgc3R5bGVzaGVldHMuXG4gICAqIFNvbWUgcG9zdGNzcyBwbHVnaW5zIHN1Y2ggYXMgYXV0b3ByZWZpeGVyIHJlcXVpcmUgdGhlIHJhdyBicm93c2Vyc2xpc3QgaW5mb3JtYXRpb24gaW5zdGVhZFxuICAgKiBvZiB0aGUgZXNidWlsZCBmb3JtYXR0ZWQgdGFyZ2V0LlxuICAgKi9cbiAgYnJvd3NlcnM6IHN0cmluZ1tdO1xuXG4gIHRhaWx3aW5kQ29uZmlndXJhdGlvbj86IHsgZmlsZTogc3RyaW5nOyBwYWNrYWdlOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHlsZXNoZWV0TGFuZ3VhZ2Uge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbXBvbmVudEZpbHRlcjogUmVnRXhwO1xuICBmaWxlRmlsdGVyOiBSZWdFeHA7XG4gIHByb2Nlc3M/KFxuICAgIGRhdGE6IHN0cmluZyxcbiAgICBmaWxlOiBzdHJpbmcsXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICAgb3B0aW9uczogU3R5bGVzaGVldFBsdWdpbk9wdGlvbnMsXG4gICAgYnVpbGQ6IFBsdWdpbkJ1aWxkLFxuICApOiBPbkxvYWRSZXN1bHQgfCBQcm9taXNlPE9uTG9hZFJlc3VsdD47XG59XG5cbmV4cG9ydCBjbGFzcyBTdHlsZXNoZWV0UGx1Z2luRmFjdG9yeSB7XG4gIHByaXZhdGUgYXV0b3ByZWZpeGVyOiBpbXBvcnQoJ3Bvc3Rjc3MnKS5QbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTdHlsZXNoZWV0UGx1Z2luT3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlPzogTG9hZFJlc3VsdENhY2hlLFxuICApIHtcbiAgICBjb25zdCBhdXRvcHJlZml4ZXIgPSBjcmVhdGVBdXRvUHJlZml4ZXJQbHVnaW4oe1xuICAgICAgb3ZlcnJpZGVCcm93c2Vyc2xpc3Q6IG9wdGlvbnMuYnJvd3NlcnMsXG4gICAgICBpZ25vcmVVbmtub3duVmVyc2lvbnM6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBdXRvcHJlZml4ZXIgY3VycmVudGx5IGRvZXMgbm90IGNvbnRhaW4gYSBtZXRob2QgdG8gY2hlY2sgaWYgYXV0b3ByZWZpeGVyIGlzIHJlcXVpcmVkXG4gICAgLy8gYmFzZWQgb24gdGhlIHByb3ZpZGVkIGxpc3Qgb2YgYnJvd3NlcnMuIEhvd2V2ZXIsIGl0IGRvZXMgY29udGFpbiBhIG1ldGhvZCB0aGF0IHJldHVybnNcbiAgICAvLyBpbmZvcm1hdGlvbmFsIHRleHQgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHJlcGxhY2VtZW50LiBUaGUgdGV4dCBcIkF3ZXNvbWUhXCIgd2lsbCBiZSBwcmVzZW50XG4gICAgLy8gd2hlbiBhdXRvcHJlZml4ZXIgZGV0ZXJtaW5lcyBubyBhY3Rpb25zIGFyZSBuZWVkZWQuXG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vcG9zdGNzcy9hdXRvcHJlZml4ZXIvYmxvYi9lMmY1YzI2ZmYxZjNlYWNhOTVhMjE4NzM3MjNjZTFjZGY2ZTU5ZjBlL2xpYi9pbmZvLmpzI0wxMThcbiAgICBjb25zdCBhdXRvcHJlZml4ZXJJbmZvID0gYXV0b3ByZWZpeGVyLmluZm8oKTtcbiAgICBjb25zdCBza2lwQXV0b3ByZWZpeGVyID0gYXV0b3ByZWZpeGVySW5mby5pbmNsdWRlcygnQXdlc29tZSEnKTtcblxuICAgIGlmICghc2tpcEF1dG9wcmVmaXhlcikge1xuICAgICAgdGhpcy5hdXRvcHJlZml4ZXIgPSBhdXRvcHJlZml4ZXI7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlKGxhbmd1YWdlOiBSZWFkb25seTxTdHlsZXNoZWV0TGFuZ3VhZ2U+KTogUGx1Z2luIHtcbiAgICAvLyBSZXR1cm4gYSBub29wIHBsdWdpbiBpZiBubyBsb2FkIGFjdGlvbnMgYXJlIHJlcXVpcmVkXG4gICAgaWYgKCFsYW5ndWFnZS5wcm9jZXNzICYmICF0aGlzLmF1dG9wcmVmaXhlciAmJiAhdGhpcy5vcHRpb25zLnRhaWx3aW5kQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ2FuZ3VsYXItJyArIGxhbmd1YWdlLm5hbWUsXG4gICAgICAgIHNldHVwKCkge30sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHsgYXV0b3ByZWZpeGVyLCBjYWNoZSwgb3B0aW9ucyB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnYW5ndWxhci0nICsgbGFuZ3VhZ2UubmFtZSxcbiAgICAgIGFzeW5jIHNldHVwKGJ1aWxkKSB7XG4gICAgICAgIC8vIFNldHVwIHBvc3Rjc3MgaWYgbmVlZGVkIGJ5IGVpdGhlciBhdXRvcHJlZml4ZXIgb3IgdGFpbHdpbmRcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGludG8gdGhlIHBsdWdpbiBmYWN0b3J5IHRvIGF2b2lkIHJlcGVhdCBzZXR1cCBwZXIgY3JlYXRlZCBwbHVnaW5cbiAgICAgICAgbGV0IHBvc3Rjc3NQcm9jZXNzb3I6IGltcG9ydCgncG9zdGNzcycpLlByb2Nlc3NvciB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGF1dG9wcmVmaXhlciB8fCBvcHRpb25zLnRhaWx3aW5kQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBvc3Rjc3MgPz89IChhd2FpdCBpbXBvcnQoJ3Bvc3Rjc3MnKSkuZGVmYXVsdDtcbiAgICAgICAgICBwb3N0Y3NzUHJvY2Vzc29yID0gcG9zdGNzcygpO1xuICAgICAgICAgIGlmIChvcHRpb25zLnRhaWx3aW5kQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgdGFpbHdpbmQgPSBhd2FpdCBpbXBvcnQob3B0aW9ucy50YWlsd2luZENvbmZpZ3VyYXRpb24ucGFja2FnZSk7XG4gICAgICAgICAgICBwb3N0Y3NzUHJvY2Vzc29yLnVzZSh0YWlsd2luZC5kZWZhdWx0KHsgY29uZmlnOiBvcHRpb25zLnRhaWx3aW5kQ29uZmlndXJhdGlvbi5maWxlIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF1dG9wcmVmaXhlcikge1xuICAgICAgICAgICAgcG9zdGNzc1Byb2Nlc3Nvci51c2UoYXV0b3ByZWZpeGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgYSBsb2FkIGNhbGxiYWNrIHRvIHN1cHBvcnQgaW5saW5lIENvbXBvbmVudCBzdHlsZXNcbiAgICAgICAgYnVpbGQub25Mb2FkKFxuICAgICAgICAgIHsgZmlsdGVyOiBsYW5ndWFnZS5jb21wb25lbnRGaWx0ZXIsIG5hbWVzcGFjZTogJ2FuZ3VsYXI6c3R5bGVzL2NvbXBvbmVudCcgfSxcbiAgICAgICAgICBjcmVhdGVDYWNoZWRMb2FkKGNhY2hlLCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG9wdGlvbnMuaW5saW5lQ29tcG9uZW50RGF0YT8uW2FyZ3MucGF0aF07XG4gICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgYGNvbXBvbmVudCBzdHlsZSBuYW1lIHNob3VsZCBhbHdheXMgYmUgZm91bmQgWyR7YXJncy5wYXRofV1gLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW2Zvcm1hdCwgLCBmaWxlbmFtZV0gPSBhcmdzLnBhdGguc3BsaXQoJzsnLCAzKTtcblxuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTdHlsZXNoZWV0KFxuICAgICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgYnVpbGQsXG4gICAgICAgICAgICAgIHBvc3Rjc3NQcm9jZXNzb3IsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCBhIGxvYWQgY2FsbGJhY2sgdG8gc3VwcG9ydCBmaWxlcyBmcm9tIGRpc2tcbiAgICAgICAgYnVpbGQub25Mb2FkKFxuICAgICAgICAgIHsgZmlsdGVyOiBsYW5ndWFnZS5maWxlRmlsdGVyIH0sXG4gICAgICAgICAgY3JlYXRlQ2FjaGVkTG9hZChjYWNoZSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShhcmdzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1N0eWxlc2hlZXQoXG4gICAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBhcmdzLnBhdGgsXG4gICAgICAgICAgICAgIGV4dG5hbWUoYXJncy5wYXRoKS50b0xvd2VyQ2FzZSgpLnNsaWNlKDEpLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICBidWlsZCxcbiAgICAgICAgICAgICAgcG9zdGNzc1Byb2Nlc3NvcixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1N0eWxlc2hlZXQoXG4gIGxhbmd1YWdlOiBSZWFkb25seTxTdHlsZXNoZWV0TGFuZ3VhZ2U+LFxuICBkYXRhOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIGZvcm1hdDogc3RyaW5nLFxuICBvcHRpb25zOiBTdHlsZXNoZWV0UGx1Z2luT3B0aW9ucyxcbiAgYnVpbGQ6IFBsdWdpbkJ1aWxkLFxuICBwb3N0Y3NzUHJvY2Vzc29yOiBpbXBvcnQoJ3Bvc3Rjc3MnKS5Qcm9jZXNzb3IgfCB1bmRlZmluZWQsXG4pIHtcbiAgbGV0IHJlc3VsdDogT25Mb2FkUmVzdWx0O1xuXG4gIC8vIFByb2Nlc3MgdGhlIGlucHV0IGRhdGEgaWYgdGhlIGxhbmd1YWdlIHJlcXVpcmVzIHByZXByb2Nlc3NpbmdcbiAgaWYgKGxhbmd1YWdlLnByb2Nlc3MpIHtcbiAgICByZXN1bHQgPSBhd2FpdCBsYW5ndWFnZS5wcm9jZXNzKGRhdGEsIGZpbGVuYW1lLCBmb3JtYXQsIG9wdGlvbnMsIGJ1aWxkKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB7XG4gICAgICBjb250ZW50czogZGF0YSxcbiAgICAgIGxvYWRlcjogJ2NzcycsXG4gICAgICB3YXRjaEZpbGVzOiBbZmlsZW5hbWVdLFxuICAgIH07XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gd2l0aCBwb3N0Y3NzIGlmIG5lZWRlZCBhbmQgdGhlcmUgYXJlIG5vIGVycm9yc1xuICBpZiAocG9zdGNzc1Byb2Nlc3NvciAmJiByZXN1bHQuY29udGVudHMgJiYgIXJlc3VsdC5lcnJvcnM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IHBvc3Rjc3NSZXN1bHQgPSBhd2FpdCBjb21waWxlU3RyaW5nKFxuICAgICAgdHlwZW9mIHJlc3VsdC5jb250ZW50cyA9PT0gJ3N0cmluZydcbiAgICAgICAgPyByZXN1bHQuY29udGVudHNcbiAgICAgICAgOiBCdWZmZXIuZnJvbShyZXN1bHQuY29udGVudHMpLnRvU3RyaW5nKCd1dGYtOCcpLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBwb3N0Y3NzUHJvY2Vzc29yLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuXG4gICAgLy8gTWVyZ2UgcmVzdWx0c1xuICAgIGlmIChwb3N0Y3NzUmVzdWx0LmVycm9ycz8ubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgcmVzdWx0LmNvbnRlbnRzO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Lndhcm5pbmdzICYmIHBvc3Rjc3NSZXN1bHQud2FybmluZ3MpIHtcbiAgICAgIHBvc3Rjc3NSZXN1bHQud2FybmluZ3MudW5zaGlmdCguLi5yZXN1bHQud2FybmluZ3MpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LndhdGNoRmlsZXMgJiYgcG9zdGNzc1Jlc3VsdC53YXRjaEZpbGVzKSB7XG4gICAgICBwb3N0Y3NzUmVzdWx0LndhdGNoRmlsZXMudW5zaGlmdCguLi5yZXN1bHQud2F0Y2hGaWxlcyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQud2F0Y2hEaXJzICYmIHBvc3Rjc3NSZXN1bHQud2F0Y2hEaXJzKSB7XG4gICAgICBwb3N0Y3NzUmVzdWx0LndhdGNoRGlycy51bnNoaWZ0KC4uLnJlc3VsdC53YXRjaERpcnMpO1xuICAgIH1cbiAgICByZXN1bHQgPSB7XG4gICAgICAuLi5yZXN1bHQsXG4gICAgICAuLi5wb3N0Y3NzUmVzdWx0LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbXBpbGVzIHRoZSBwcm92aWRlZCBDU1Mgc3R5bGVzaGVldCBkYXRhIHVzaW5nIGEgcHJvdmlkZWQgcG9zdGNzcyBwcm9jZXNzb3IgYW5kIHByb3ZpZGVzIGFuXG4gKiBlc2J1aWxkIGxvYWQgcmVzdWx0IHRoYXQgY2FuIGJlIHVzZWQgZGlyZWN0bHkgYnkgYW4gZXNidWlsZCBQbHVnaW4uXG4gKiBAcGFyYW0gZGF0YSBUaGUgc3R5bGVzaGVldCBjb250ZW50IHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0gZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgZGF0YS5cbiAqIEBwYXJhbSBwb3N0Y3NzUHJvY2Vzc29yIEEgcG9zdGNzcyBwcm9jZXNzb3IgaW5zdGFuY2UgdG8gdXNlLlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHBsdWdpbiBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIHByb2Nlc3NpbmcuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIE9uTG9hZGVyUmVzdWx0IG9iamVjdCB3aXRoIHRoZSBwcm9jZXNzZWQgY29udGVudCwgd2FybmluZ3MsIGFuZC9vciBlcnJvcnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXBpbGVTdHJpbmcoXG4gIGRhdGE6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgcG9zdGNzc1Byb2Nlc3NvcjogaW1wb3J0KCdwb3N0Y3NzJykuUHJvY2Vzc29yLFxuICBvcHRpb25zOiBTdHlsZXNoZWV0UGx1Z2luT3B0aW9ucyxcbik6IFByb21pc2U8T25Mb2FkUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9zdGNzc1Byb2Nlc3Nvci5wcm9jZXNzKGRhdGEsIHtcbiAgICAgIGZyb206IGZpbGVuYW1lLFxuICAgICAgdG86IGZpbGVuYW1lLFxuICAgICAgbWFwOiBvcHRpb25zLnNvdXJjZW1hcCAmJiB7XG4gICAgICAgIGlubGluZTogdHJ1ZSxcbiAgICAgICAgc291cmNlc0NvbnRlbnQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmF3V2FybmluZ3MgPSByZXN1bHQud2FybmluZ3MoKTtcbiAgICBsZXQgd2FybmluZ3M7XG4gICAgaWYgKHJhd1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxpbmVNYXBwaW5ncyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXSB8IG51bGw+KCk7XG4gICAgICB3YXJuaW5ncyA9IHJhd1dhcm5pbmdzLm1hcCgod2FybmluZykgPT4ge1xuICAgICAgICBjb25zdCBmaWxlID0gd2FybmluZy5ub2RlLnNvdXJjZT8uaW5wdXQuZmlsZTtcbiAgICAgICAgaWYgKGZpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiB7IHRleHQ6IHdhcm5pbmcudGV4dCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxpbmVzID0gbGluZU1hcHBpbmdzLmdldChmaWxlKTtcbiAgICAgICAgaWYgKGxpbmVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsaW5lcyA9IHdhcm5pbmcubm9kZS5zb3VyY2U/LmlucHV0LmNzcy5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICAgIGxpbmVNYXBwaW5ncy5zZXQoZmlsZSwgbGluZXMgPz8gbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRleHQ6IHdhcm5pbmcudGV4dCxcbiAgICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIGxpbmU6IHdhcm5pbmcubGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogd2FybmluZy5jb2x1bW4gLSAxLFxuICAgICAgICAgICAgbGluZVRleHQ6IGxpbmVzPy5bd2FybmluZy5saW5lIC0gMV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50czogcmVzdWx0LmNzcyxcbiAgICAgIGxvYWRlcjogJ2NzcycsXG4gICAgICB3YXJuaW5ncyxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHBvc3Rjc3MgPz89IChhd2FpdCBpbXBvcnQoJ3Bvc3Rjc3MnKSkuZGVmYXVsdDtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBwb3N0Y3NzLkNzc1N5bnRheEVycm9yKSB7XG4gICAgICBjb25zdCBsaW5lcyA9IGVycm9yLnNvdXJjZT8uc3BsaXQoL1xccj9cXG4vKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogZXJyb3IucmVhc29uLFxuICAgICAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICAgICAgZmlsZTogZXJyb3IuZmlsZSxcbiAgICAgICAgICAgICAgbGluZTogZXJyb3IubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBlcnJvci5jb2x1bW4gJiYgZXJyb3IuY29sdW1uIC0gMSxcbiAgICAgICAgICAgICAgbGluZVRleHQ6IGVycm9yLmxpbmUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGxpbmVzPy5bZXJyb3IubGluZSAtIDFdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl19
@@ -0,0 +1,28 @@
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 { OnLoadArgs, Plugin, PluginBuild } from 'esbuild';
9
+ /**
10
+ * Options for the createVirtualModulePlugin
11
+ * @see createVirtualModulePlugin
12
+ */
13
+ export interface VirtualModulePluginOptions {
14
+ /** Namespace. Example: `angular:polyfills`. */
15
+ namespace: string;
16
+ /** If the generated module should be marked as external. */
17
+ external?: boolean;
18
+ /** Method to transform the onResolve path. */
19
+ transformPath?: (path: string) => string;
20
+ /** Method to provide the module content. */
21
+ loadContent: (args: OnLoadArgs, build: PluginBuild) => ReturnType<Parameters<PluginBuild['onLoad']>[1]>;
22
+ }
23
+ /**
24
+ * Creates an esbuild plugin that generated virtual modules.
25
+ *
26
+ * @returns An esbuild plugin.
27
+ */
28
+ export declare function createVirtualModulePlugin(options: VirtualModulePluginOptions): Plugin;
@@ -0,0 +1,43 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createVirtualModulePlugin = void 0;
11
+ /**
12
+ * Creates an esbuild plugin that generated virtual modules.
13
+ *
14
+ * @returns An esbuild plugin.
15
+ */
16
+ function createVirtualModulePlugin(options) {
17
+ const { namespace, external, transformPath: pathTransformer, loadContent } = options;
18
+ return {
19
+ name: namespace.replace(/[/:]/g, '-'),
20
+ setup(build) {
21
+ build.onResolve({ filter: new RegExp('^' + namespace) }, ({ kind, path }) => {
22
+ if (kind !== 'entry-point') {
23
+ return null;
24
+ }
25
+ return {
26
+ path: pathTransformer?.(path) ?? path,
27
+ namespace,
28
+ };
29
+ });
30
+ if (external) {
31
+ build.onResolve({ filter: /./, namespace }, ({ path }) => {
32
+ return {
33
+ path,
34
+ external: true,
35
+ };
36
+ });
37
+ }
38
+ build.onLoad({ filter: /./, namespace }, (args) => loadContent(args, build));
39
+ },
40
+ };
41
+ }
42
+ exports.createVirtualModulePlugin = createVirtualModulePlugin;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1tb2R1bGUtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvYnJvd3Nlci1lc2J1aWxkL3ZpcnR1YWwtbW9kdWxlLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFzQkg7Ozs7R0FJRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLE9BQW1DO0lBQzNFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXJGLE9BQU87UUFDTCxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO1FBQ3JDLEtBQUssQ0FBQyxLQUFLO1lBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQzFFLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRTtvQkFDMUIsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBRUQsT0FBTztvQkFDTCxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSTtvQkFDckMsU0FBUztpQkFDVixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsRUFBRTtnQkFDWixLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtvQkFDdkQsT0FBTzt3QkFDTCxJQUFJO3dCQUNKLFFBQVEsRUFBRSxJQUFJO3FCQUNmLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBN0JELDhEQTZCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE9uTG9hZEFyZ3MsIFBsdWdpbiwgUGx1Z2luQnVpbGQgfSBmcm9tICdlc2J1aWxkJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgY3JlYXRlVmlydHVhbE1vZHVsZVBsdWdpblxuICogQHNlZSBjcmVhdGVWaXJ0dWFsTW9kdWxlUGx1Z2luXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlydHVhbE1vZHVsZVBsdWdpbk9wdGlvbnMge1xuICAvKiogTmFtZXNwYWNlLiBFeGFtcGxlOiBgYW5ndWxhcjpwb2x5ZmlsbHNgLiAqL1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgLyoqIElmIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIHNob3VsZCBiZSBtYXJrZWQgYXMgZXh0ZXJuYWwuICovXG4gIGV4dGVybmFsPzogYm9vbGVhbjtcbiAgLyoqIE1ldGhvZCB0byB0cmFuc2Zvcm0gdGhlIG9uUmVzb2x2ZSBwYXRoLiAqL1xuICB0cmFuc2Zvcm1QYXRoPzogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nO1xuICAvKiogTWV0aG9kIHRvIHByb3ZpZGUgdGhlIG1vZHVsZSBjb250ZW50LiAqL1xuICBsb2FkQ29udGVudDogKFxuICAgIGFyZ3M6IE9uTG9hZEFyZ3MsXG4gICAgYnVpbGQ6IFBsdWdpbkJ1aWxkLFxuICApID0+IFJldHVyblR5cGU8UGFyYW1ldGVyczxQbHVnaW5CdWlsZFsnb25Mb2FkJ10+WzFdPjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgZ2VuZXJhdGVkIHZpcnR1YWwgbW9kdWxlcy5cbiAqXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZpcnR1YWxNb2R1bGVQbHVnaW4ob3B0aW9uczogVmlydHVhbE1vZHVsZVBsdWdpbk9wdGlvbnMpOiBQbHVnaW4ge1xuICBjb25zdCB7IG5hbWVzcGFjZSwgZXh0ZXJuYWwsIHRyYW5zZm9ybVBhdGg6IHBhdGhUcmFuc2Zvcm1lciwgbG9hZENvbnRlbnQgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lc3BhY2UucmVwbGFjZSgvWy86XS9nLCAnLScpLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlKSB9LCAoeyBraW5kLCBwYXRoIH0pID0+IHtcbiAgICAgICAgaWYgKGtpbmQgIT09ICdlbnRyeS1wb2ludCcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGF0aDogcGF0aFRyYW5zZm9ybWVyPy4ocGF0aCkgPz8gcGF0aCxcbiAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgaWYgKGV4dGVybmFsKSB7XG4gICAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4vLCBuYW1lc3BhY2UgfSwgKHsgcGF0aCB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvLi8sIG5hbWVzcGFjZSB9LCAoYXJncykgPT4gbG9hZENvbnRlbnQoYXJncywgYnVpbGQpKTtcbiAgICB9LFxuICB9O1xufVxuIl19
@@ -31,7 +31,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
33
  exports.normalizeProxyConfiguration = exports.loadProxyConfiguration = void 0;
34
- const glob_1 = require("glob");
34
+ const fast_glob_1 = require("fast-glob");
35
35
  const node_fs_1 = require("node:fs");
36
36
  const promises_1 = require("node:fs/promises");
37
37
  const node_path_1 = require("node:path");
@@ -96,7 +96,7 @@ exports.loadProxyConfiguration = loadProxyConfiguration;
96
96
  function normalizeProxyConfiguration(proxy) {
97
97
  // TODO: Consider upstreaming glob support
98
98
  for (const key of Object.keys(proxy)) {
99
- if ((0, glob_1.hasMagic)(key)) {
99
+ if ((0, fast_glob_1.isDynamicPattern)(key)) {
100
100
  const { output } = (0, picomatch_1.parse)(key);
101
101
  proxy[`^${output}$`] = proxy[key];
102
102
  delete proxy[key];
@@ -127,4 +127,4 @@ function getJsonErrorLineColumn(offset, content) {
127
127
  }
128
128
  return { line, column: offset - position + 1 };
129
129
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1wcm94eS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9idWlsZGVycy9kZXYtc2VydmVyL2xvYWQtcHJveHktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsK0JBQW9EO0FBQ3BELHFDQUFxQztBQUNyQywrQ0FBNEM7QUFDNUMseUNBQTZDO0FBQzdDLHVDQUF5QztBQUN6Qyx5Q0FBK0M7QUFDL0MsNkNBQWtEO0FBQ2xELG1EQUFxRDtBQUU5QyxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBWSxFQUFFLFdBQStCO0lBQ3hGLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFBLG1CQUFPLEVBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRTdDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0tBQzFFO0lBRUQsUUFBUSxJQUFBLG1CQUFPLEVBQUMsU0FBUyxDQUFDLEVBQUU7UUFDMUIsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNaLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxtQkFBUSxFQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVuRCxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsd0RBQWEsY0FBYyxHQUFDLENBQUM7WUFDcEUsTUFBTSxXQUFXLEdBQXdDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVB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QUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgaGFzTWFnaWMgYXMgaXNEeW5hbWljUGF0dGVybiB9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlR2xvYiB9IGZyb20gJ3BpY29tYXRjaCc7XG5pbXBvcnQgeyBhc3NlcnRJc0Vycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXJyb3InO1xuaW1wb3J0IHsgbG9hZEVzbU1vZHVsZSB9IGZyb20gJy4uLy4uL3V0aWxzL2xvYWQtZXNtJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQcm94eUNvbmZpZ3VyYXRpb24ocm9vdDogc3RyaW5nLCBwcm94eUNvbmZpZzogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGlmICghcHJveHlDb25maWcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHJveHlQYXRoID0gcmVzb2x2ZShyb290LCBwcm94eUNvbmZpZyk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKHByb3h5UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3h5IGNvbmZpZ3VyYXRpb24gZmlsZSAke3Byb3h5UGF0aH0gZG9lcyBub3QgZXhpc3QuYCk7XG4gIH1cblxuICBzd2l0Y2ggKGV4dG5hbWUocHJveHlQYXRoKSkge1xuICAgIGNhc2UgJy5qc29uJzoge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHByb3h5UGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICAgIGNvbnN0IHsgcGFyc2UsIHByaW50UGFyc2VFcnJvckNvZGUgfSA9IGF3YWl0IGltcG9ydCgnanNvbmMtcGFyc2VyJyk7XG4gICAgICBjb25zdCBwYXJzZUVycm9yczogaW1wb3J0KCdqc29uYy1wYXJzZXInKS5QYXJzZUVycm9yW10gPSBbXTtcbiAgICAgIGNvbnN0IHByb3h5Q29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnQsIHBhcnNlRXJyb3JzLCB7IGFsbG93VHJhaWxpbmdDb21tYTogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHBhcnNlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBQcm94eSBjb25maWd1cmF0aW9uIGZpbGUgJHtwcm94eVBhdGh9IGNvbnRhaW5zIHBhcnNlIGVycm9yczpgO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnNlRXJyb3Igb2YgcGFyc2VFcnJvcnMpIHtcbiAgICAgICAgICBjb25zdCB7IGxpbmUsIGNvbHVtbiB9ID0gZ2V0SnNvbkVycm9yTGluZUNvbHVtbihwYXJzZUVycm9yLm9mZnNldCwgY29udGVudCk7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBcXG5bJHtsaW5lfSwgJHtjb2x1bW59XSAke3ByaW50UGFyc2VFcnJvckNvZGUocGFyc2VFcnJvci5lcnJvcil9YDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3h5Q29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgY2FzZSAnLm1qcyc6XG4gICAgICAvLyBMb2FkIHRoZSBFU00gY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGR5bmFtaWMgaW1wb3J0IHdvcmthcm91bmQuXG4gICAgICAvLyBPbmNlIFR5cGVTY3JpcHQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0aGUgZHluYW1pYyBpbXBvcnQgdGhpcyB3b3JrYXJvdW5kIGNhbiBiZVxuICAgICAgLy8gY2hhbmdlZCB0byBhIGRpcmVjdCBkeW5hbWljIGltcG9ydC5cbiAgICAgIHJldHVybiAoYXdhaXQgbG9hZEVzbU1vZHVsZTx7IGRlZmF1bHQ6IHVua25vd24gfT4ocGF0aFRvRmlsZVVSTChwcm94eVBhdGgpKSkuZGVmYXVsdDtcbiAgICBjYXNlICcuY2pzJzpcbiAgICAgIHJldHVybiByZXF1aXJlKHByb3h5UGF0aCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFRoZSBmaWxlIGNvdWxkIGJlIGVpdGhlciBDb21tb25KUyBvciBFU00uXG4gICAgICAvLyBDb21tb25KUyBpcyB0cmllZCBmaXJzdCB0aGVuIEVTTSBpZiBsb2FkaW5nIGZhaWxzLlxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmUocHJveHlQYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXNzZXJ0SXNFcnJvcihlKTtcbiAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0VSUl9SRVFVSVJFX0VTTScpIHtcbiAgICAgICAgICAvLyBMb2FkIHRoZSBFU00gY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGR5bmFtaWMgaW1wb3J0IHdvcmthcm91bmQuXG4gICAgICAgICAgLy8gT25jZSBUeXBlU2NyaXB0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtlZXBpbmcgdGhlIGR5bmFtaWMgaW1wb3J0IHRoaXMgd29ya2Fyb3VuZCBjYW4gYmVcbiAgICAgICAgICAvLyBjaGFuZ2VkIHRvIGEgZGlyZWN0IGR5bmFtaWMgaW1wb3J0LlxuICAgICAgICAgIHJldHVybiAoYXdhaXQgbG9hZEVzbU1vZHVsZTx7IGRlZmF1bHQ6IHVua25vd24gfT4ocGF0aFRvRmlsZVVSTChwcm94eVBhdGgpKSkuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBnbG9iIHBhdHRlcm5zIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gc3VwcG9ydCBWaXRlJ3MgcHJveHkgb3B0aW9uLlxuICogQHBhcmFtIHByb3h5IEEgcHJveHkgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQcm94eUNvbmZpZ3VyYXRpb24ocHJveHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIC8vIFRPRE86IENvbnNpZGVyIHVwc3RyZWFtaW5nIGdsb2Igc3VwcG9ydFxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm94eSkpIHtcbiAgICBpZiAoaXNEeW5hbWljUGF0dGVybihrZXkpKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gcGFyc2VHbG9iKGtleSk7XG4gICAgICBwcm94eVtgXiR7b3V0cHV0fSRgXSA9IHByb3h5W2tleV07XG4gICAgICBkZWxldGUgcHJveHlba2V5XTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lIGFuZCBjb2x1bW4gZm9yIGFuIGVycm9yIG9mZnNldCBpbiB0aGUgY29udGVudCBvZiBhIEpTT04gZmlsZS5cbiAqIEBwYXJhbSBsb2NhdGlvbiBUaGUgb2Zmc2V0IGVycm9yIGxvY2F0aW9uIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBmdWxsIGNvbnRlbnQgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZXJyb3IuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGluZSBhbmQgY29sdW1uXG4gKi9cbmZ1bmN0aW9uIGdldEpzb25FcnJvckxpbmVDb2x1bW4ob2Zmc2V0OiBudW1iZXIsIGNvbnRlbnQ6IHN0cmluZykge1xuICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgcmV0dXJuIHsgbGluZTogMSwgY29sdW1uOiAxIH07XG4gIH1cblxuICBsZXQgbGluZSA9IDA7XG4gIGxldCBwb3NpdGlvbiA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgd2hpbGUgKHRydWUpIHtcbiAgICArK2xpbmU7XG5cbiAgICBjb25zdCBuZXh0TmV3bGluZSA9IGNvbnRlbnQuaW5kZXhPZignXFxuJywgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0TmV3bGluZSA9PT0gLTEgfHwgbmV4dE5ld2xpbmUgPiBvZmZzZXQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBvc2l0aW9uID0gbmV4dE5ld2xpbmUgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHsgbGluZSwgY29sdW1uOiBvZmZzZXQgLSBwb3NpdGlvbiArIDEgfTtcbn1cbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1wcm94eS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9idWlsZGVycy9kZXYtc2VydmVyL2xvYWQtcHJveHktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgseUNBQTZDO0FBQzdDLHFDQUFxQztBQUNyQywrQ0FBNEM7QUFDNUMseUNBQTZDO0FBQzdDLHVDQUF5QztBQUN6Qyx5Q0FBK0M7QUFDL0MsNkNBQWtEO0FBQ2xELG1EQUFxRDtBQUU5QyxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBWSxFQUFFLFdBQStCO0lBQ3hGLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFBLG1CQUFPLEVBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRTdDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0tBQzFFO0lBRUQsUUFBUSxJQUFBLG1CQUFPLEVBQUMsU0FBUyxDQUFDLEVBQUU7UUFDMUIsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNaLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxtQkFBUSxFQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVuRCxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsd0RBQWEsY0FBYyxHQUFDLENBQUM7WUFDcEUsTUFBTSxXQUFXLEdBQXdDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVB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RUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IGlzRHluYW1pY1BhdHRlcm4gfSBmcm9tICdmYXN0LWdsb2InO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlR2xvYiB9IGZyb20gJ3BpY29tYXRjaCc7XG5pbXBvcnQgeyBhc3NlcnRJc0Vycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXJyb3InO1xuaW1wb3J0IHsgbG9hZEVzbU1vZHVsZSB9IGZyb20gJy4uLy4uL3V0aWxzL2xvYWQtZXNtJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQcm94eUNvbmZpZ3VyYXRpb24ocm9vdDogc3RyaW5nLCBwcm94eUNvbmZpZzogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGlmICghcHJveHlDb25maWcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHJveHlQYXRoID0gcmVzb2x2ZShyb290LCBwcm94eUNvbmZpZyk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKHByb3h5UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3h5IGNvbmZpZ3VyYXRpb24gZmlsZSAke3Byb3h5UGF0aH0gZG9lcyBub3QgZXhpc3QuYCk7XG4gIH1cblxuICBzd2l0Y2ggKGV4dG5hbWUocHJveHlQYXRoKSkge1xuICAgIGNhc2UgJy5qc29uJzoge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHByb3h5UGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICAgIGNvbnN0IHsgcGFyc2UsIHByaW50UGFyc2VFcnJvckNvZGUgfSA9IGF3YWl0IGltcG9ydCgnanNvbmMtcGFyc2VyJyk7XG4gICAgICBjb25zdCBwYXJzZUVycm9yczogaW1wb3J0KCdqc29uYy1wYXJzZXInKS5QYXJzZUVycm9yW10gPSBbXTtcbiAgICAgIGNvbnN0IHByb3h5Q29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnQsIHBhcnNlRXJyb3JzLCB7IGFsbG93VHJhaWxpbmdDb21tYTogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHBhcnNlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBQcm94eSBjb25maWd1cmF0aW9uIGZpbGUgJHtwcm94eVBhdGh9IGNvbnRhaW5zIHBhcnNlIGVycm9yczpgO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnNlRXJyb3Igb2YgcGFyc2VFcnJvcnMpIHtcbiAgICAgICAgICBjb25zdCB7IGxpbmUsIGNvbHVtbiB9ID0gZ2V0SnNvbkVycm9yTGluZUNvbHVtbihwYXJzZUVycm9yLm9mZnNldCwgY29udGVudCk7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBcXG5bJHtsaW5lfSwgJHtjb2x1bW59XSAke3ByaW50UGFyc2VFcnJvckNvZGUocGFyc2VFcnJvci5lcnJvcil9YDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3h5Q29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgY2FzZSAnLm1qcyc6XG4gICAgICAvLyBMb2FkIHRoZSBFU00gY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGR5bmFtaWMgaW1wb3J0IHdvcmthcm91bmQuXG4gICAgICAvLyBPbmNlIFR5cGVTY3JpcHQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0aGUgZHluYW1pYyBpbXBvcnQgdGhpcyB3b3JrYXJvdW5kIGNhbiBiZVxuICAgICAgLy8gY2hhbmdlZCB0byBhIGRpcmVjdCBkeW5hbWljIGltcG9ydC5cbiAgICAgIHJldHVybiAoYXdhaXQgbG9hZEVzbU1vZHVsZTx7IGRlZmF1bHQ6IHVua25vd24gfT4ocGF0aFRvRmlsZVVSTChwcm94eVBhdGgpKSkuZGVmYXVsdDtcbiAgICBjYXNlICcuY2pzJzpcbiAgICAgIHJldHVybiByZXF1aXJlKHByb3h5UGF0aCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFRoZSBmaWxlIGNvdWxkIGJlIGVpdGhlciBDb21tb25KUyBvciBFU00uXG4gICAgICAvLyBDb21tb25KUyBpcyB0cmllZCBmaXJzdCB0aGVuIEVTTSBpZiBsb2FkaW5nIGZhaWxzLlxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmUocHJveHlQYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgYXNzZXJ0SXNFcnJvcihlKTtcbiAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0VSUl9SRVFVSVJFX0VTTScpIHtcbiAgICAgICAgICAvLyBMb2FkIHRoZSBFU00gY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGR5bmFtaWMgaW1wb3J0IHdvcmthcm91bmQuXG4gICAgICAgICAgLy8gT25jZSBUeXBlU2NyaXB0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtlZXBpbmcgdGhlIGR5bmFtaWMgaW1wb3J0IHRoaXMgd29ya2Fyb3VuZCBjYW4gYmVcbiAgICAgICAgICAvLyBjaGFuZ2VkIHRvIGEgZGlyZWN0IGR5bmFtaWMgaW1wb3J0LlxuICAgICAgICAgIHJldHVybiAoYXdhaXQgbG9hZEVzbU1vZHVsZTx7IGRlZmF1bHQ6IHVua25vd24gfT4ocGF0aFRvRmlsZVVSTChwcm94eVBhdGgpKSkuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBnbG9iIHBhdHRlcm5zIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gc3VwcG9ydCBWaXRlJ3MgcHJveHkgb3B0aW9uLlxuICogQHBhcmFtIHByb3h5IEEgcHJveHkgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQcm94eUNvbmZpZ3VyYXRpb24ocHJveHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIC8vIFRPRE86IENvbnNpZGVyIHVwc3RyZWFtaW5nIGdsb2Igc3VwcG9ydFxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm94eSkpIHtcbiAgICBpZiAoaXNEeW5hbWljUGF0dGVybihrZXkpKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gcGFyc2VHbG9iKGtleSk7XG4gICAgICBwcm94eVtgXiR7b3V0cHV0fSRgXSA9IHByb3h5W2tleV07XG4gICAgICBkZWxldGUgcHJveHlba2V5XTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lIGFuZCBjb2x1bW4gZm9yIGFuIGVycm9yIG9mZnNldCBpbiB0aGUgY29udGVudCBvZiBhIEpTT04gZmlsZS5cbiAqIEBwYXJhbSBsb2NhdGlvbiBUaGUgb2Zmc2V0IGVycm9yIGxvY2F0aW9uIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBmdWxsIGNvbnRlbnQgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgZXJyb3IuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGluZSBhbmQgY29sdW1uXG4gKi9cbmZ1bmN0aW9uIGdldEpzb25FcnJvckxpbmVDb2x1bW4ob2Zmc2V0OiBudW1iZXIsIGNvbnRlbnQ6IHN0cmluZykge1xuICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgcmV0dXJuIHsgbGluZTogMSwgY29sdW1uOiAxIH07XG4gIH1cblxuICBsZXQgbGluZSA9IDA7XG4gIGxldCBwb3NpdGlvbiA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgd2hpbGUgKHRydWUpIHtcbiAgICArK2xpbmU7XG5cbiAgICBjb25zdCBuZXh0TmV3bGluZSA9IGNvbnRlbnQuaW5kZXhPZignXFxuJywgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0TmV3bGluZSA9PT0gLTEgfHwgbmV4dE5ld2xpbmUgPiBvZmZzZXQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBvc2l0aW9uID0gbmV4dE5ld2xpbmUgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHsgbGluZSwgY29sdW1uOiBvZmZzZXQgLSBwb3NpdGlvbiArIDEgfTtcbn1cbiJdfQ==