@angular/build 22.2.0-next.6 → 22.2.0-next.7
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.
- package/package.json +13 -13
- package/src/builders/application/build-action.js +1 -0
- package/src/builders/application/build-action.js.map +1 -1
- package/src/builders/application/chunk-optimizer.js +4 -1
- package/src/builders/application/chunk-optimizer.js.map +1 -1
- package/src/builders/application/execute-post-bundle.js +2 -2
- package/src/builders/application/execute-post-bundle.js.map +1 -1
- package/src/builders/application/i18n.js +2 -1
- package/src/builders/application/i18n.js.map +1 -1
- package/src/builders/application/options.js +5 -2
- package/src/builders/application/options.js.map +1 -1
- package/src/builders/application/schema.d.ts +2 -1
- package/src/builders/application/schema.js.map +1 -1
- package/src/builders/application/schema.json +1 -2
- package/src/builders/dev-server/options.d.ts +4 -1
- package/src/builders/dev-server/options.js +1 -0
- package/src/builders/dev-server/options.js.map +1 -1
- package/src/builders/dev-server/vite/server.js +1 -1
- package/src/builders/dev-server/vite/server.js.map +1 -1
- package/src/builders/unit-test/runners/vitest/plugins.d.ts +3 -4
- package/src/builders/unit-test/runners/vitest/plugins.js +2 -0
- package/src/builders/unit-test/runners/vitest/plugins.js.map +1 -1
- package/src/builders/unit-test/schema.d.ts +3 -2
- package/src/builders/unit-test/schema.js.map +1 -1
- package/src/builders/unit-test/schema.json +3 -2
- package/src/private.d.ts +0 -1
- package/src/private.js +1 -3
- package/src/private.js.map +1 -1
- package/src/tools/angular/compilation/aot-compilation.d.ts +1 -1
- package/src/tools/angular/compilation/aot-compilation.js +1 -3
- package/src/tools/angular/compilation/aot-compilation.js.map +1 -1
- package/src/tools/angular/compilation/jit-compilation.d.ts +1 -1
- package/src/tools/angular/compilation/jit-compilation.js +1 -3
- package/src/tools/angular/compilation/jit-compilation.js.map +1 -1
- package/src/tools/angular/compilation/typescript-compilation.d.ts +8 -1
- package/src/tools/angular/compilation/typescript-compilation.js +10 -2
- package/src/tools/angular/compilation/typescript-compilation.js.map +1 -1
- package/src/tools/esbuild/angular/compiler-plugin.js +40 -13
- package/src/tools/esbuild/angular/compiler-plugin.js.map +1 -1
- package/src/tools/esbuild/cache.d.ts +17 -10
- package/src/tools/esbuild/cache.js +60 -47
- package/src/tools/esbuild/cache.js.map +1 -1
- package/src/tools/esbuild/i18n-inliner.d.ts +6 -1
- package/src/tools/esbuild/i18n-inliner.js +14 -4
- package/src/tools/esbuild/i18n-inliner.js.map +1 -1
- package/src/tools/esbuild/index-html-generator.js +1 -1
- package/src/tools/esbuild/index-html-generator.js.map +1 -1
- package/src/tools/esbuild/javascript-transformer.d.ts +18 -6
- package/src/tools/esbuild/javascript-transformer.js +68 -57
- package/src/tools/esbuild/javascript-transformer.js.map +1 -1
- package/src/tools/esbuild/lmdb-cache-store.js +1 -1
- package/src/tools/esbuild/lmdb-cache-store.js.map +1 -1
- package/src/tools/esbuild/persistent-load-result-cache.js +9 -31
- package/src/tools/esbuild/persistent-load-result-cache.js.map +1 -1
- package/src/tools/esbuild/sourcemap-ignorelist-plugin.js +109 -0
- package/src/tools/esbuild/sourcemap-ignorelist-plugin.js.map +1 -1
- package/src/tools/esbuild/sqlite-cache-store.d.ts +1 -1
- package/src/tools/esbuild/sqlite-cache-store.js +239 -65
- package/src/tools/esbuild/sqlite-cache-store.js.map +1 -1
- package/src/tools/esbuild/stylesheets/sass-language.d.ts +1 -0
- package/src/tools/esbuild/stylesheets/sass-language.js +49 -28
- package/src/tools/esbuild/stylesheets/sass-language.js.map +1 -1
- package/src/tools/esbuild/watcher.js +26 -3
- package/src/tools/esbuild/watcher.js.map +1 -1
- package/src/tools/oxc/oxc-transform.js +1 -1
- package/src/tools/oxc/oxc-transform.js.map +1 -1
- package/src/tools/sass/sass-service.d.ts +4 -0
- package/src/tools/sass/sass-service.js +9 -1
- package/src/tools/sass/sass-service.js.map +1 -1
- package/src/utils/index-file/index-html-generator.d.ts +1 -1
- package/src/utils/index-file/index-html-generator.js +9 -13
- package/src/utils/index-file/index-html-generator.js.map +1 -1
- package/src/utils/index-file/inline-critical-css.d.ts +16 -18
- package/src/utils/index-file/inline-critical-css.js +44 -189
- package/src/utils/index-file/inline-critical-css.js.map +1 -1
- package/src/utils/index-file/nonce.d.ts +2 -0
- package/src/utils/index-file/nonce.js +1 -0
- package/src/utils/index-file/nonce.js.map +1 -1
- package/src/utils/normalize-cache.js +1 -1
- package/src/utils/server-rendering/manifest.d.ts +2 -2
- package/src/utils/server-rendering/manifest.js +53 -4
- package/src/utils/server-rendering/manifest.js.map +1 -1
|
@@ -40,198 +40,53 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
40
40
|
};
|
|
41
41
|
})();
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.
|
|
44
|
-
const promises_1 = require("node:fs/promises");
|
|
43
|
+
exports.inlineCriticalCss = inlineCriticalCss;
|
|
45
44
|
/**
|
|
46
|
-
*
|
|
47
|
-
*/
|
|
48
|
-
const MEDIA_SET_HANDLER_PATTERN = /^this\.media=["'](.*)["'];?$/;
|
|
49
|
-
/**
|
|
50
|
-
* Name of the attribute used to save the Beasties media query so it can be re-assigned on load.
|
|
51
|
-
*/
|
|
52
|
-
const CSP_MEDIA_ATTR = 'ngCspMedia';
|
|
53
|
-
/**
|
|
54
|
-
* Script that dynamically updates the `media` attribute of `<link>` tags based on a custom attribute (`CSP_MEDIA_ATTR`).
|
|
45
|
+
* Generates a stylesheet containing the critical CSS for the given HTML content.
|
|
55
46
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* - Updates the `media` attribute with the value of `CSP_MEDIA_ATTR` and then removes the attribute.
|
|
64
|
-
* - Removes the event listener when all relevant `<link>` tags have been processed.
|
|
65
|
-
* - Uses event capturing (the `true` parameter) since load events do not bubble up the DOM.
|
|
47
|
+
* @param html - The HTML content to process.
|
|
48
|
+
* @param outputPath - The output path for the generated stylesheet.
|
|
49
|
+
* @param deployUrl - The deploy URL for the generated stylesheet.
|
|
50
|
+
* @param minify - Whether to minify the generated stylesheet.
|
|
51
|
+
* @param readAsset - A function that reads an asset from the given file path.
|
|
52
|
+
* @returns A promise that resolves to an object containing the generated stylesheet content,
|
|
53
|
+
* warnings, and errors.
|
|
66
54
|
*/
|
|
67
|
-
|
|
68
|
-
(() =>
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
})();`;
|
|
93
|
-
let beastiesClassPromise;
|
|
94
|
-
async function getBeastiesClass() {
|
|
95
|
-
if (beastiesClassPromise) {
|
|
96
|
-
return beastiesClassPromise;
|
|
97
|
-
}
|
|
98
|
-
beastiesClassPromise = Promise.resolve().then(() => __importStar(require('beasties'))).then(({ default: Beasties }) => {
|
|
99
|
-
return class BeastiesExtended extends Beasties {
|
|
100
|
-
optionsExtended;
|
|
101
|
-
_warnings;
|
|
102
|
-
_errors;
|
|
103
|
-
get warnings() {
|
|
104
|
-
return (this._warnings ??= []);
|
|
105
|
-
}
|
|
106
|
-
get errors() {
|
|
107
|
-
return (this._errors ??= []);
|
|
108
|
-
}
|
|
109
|
-
addedCspScriptsDocuments = new WeakSet();
|
|
110
|
-
documentNonces = new WeakMap();
|
|
111
|
-
constructor(optionsExtended) {
|
|
112
|
-
super({
|
|
113
|
-
logger: {
|
|
114
|
-
warn: (s) => this.warnings.push(s),
|
|
115
|
-
error: (s) => this.errors.push(s),
|
|
116
|
-
info: () => { },
|
|
117
|
-
},
|
|
118
|
-
logLevel: 'warn',
|
|
119
|
-
path: optionsExtended.outputPath,
|
|
120
|
-
publicPath: optionsExtended.deployUrl,
|
|
121
|
-
compress: !!optionsExtended.minify,
|
|
122
|
-
pruneSource: false,
|
|
123
|
-
reduceInlineStyles: false,
|
|
124
|
-
mergeStylesheets: false,
|
|
125
|
-
// Note: if `preload` changes to anything other than `media`, the logic in
|
|
126
|
-
// `embedLinkedStylesheet` will have to be updated.
|
|
127
|
-
preload: 'media',
|
|
128
|
-
noscriptFallback: true,
|
|
129
|
-
inlineFonts: true,
|
|
130
|
-
});
|
|
131
|
-
this.optionsExtended = optionsExtended;
|
|
132
|
-
}
|
|
133
|
-
readFile(path) {
|
|
134
|
-
const readAsset = this.optionsExtended.readAsset;
|
|
135
|
-
return readAsset ? readAsset(path) : (0, promises_1.readFile)(path, 'utf-8');
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Override of the Beasties `embedLinkedStylesheet` method
|
|
139
|
-
* that makes it work with Angular's CSP APIs.
|
|
140
|
-
*/
|
|
141
|
-
async embedLinkedStylesheet(link, document) {
|
|
142
|
-
if (link.getAttribute('media') === 'print' && link.next?.name === 'noscript') {
|
|
143
|
-
// Workaround for https://github.com/GoogleChromeLabs/critters/issues/64
|
|
144
|
-
// NB: this is only needed for the webpack based builders.
|
|
145
|
-
const media = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN);
|
|
146
|
-
if (media) {
|
|
147
|
-
link.removeAttribute('onload');
|
|
148
|
-
link.setAttribute('media', media[1]);
|
|
149
|
-
link?.next?.remove();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
const returnValue = await super.embedLinkedStylesheet(link, document);
|
|
153
|
-
const cspNonce = this.findCspNonce(document);
|
|
154
|
-
if (cspNonce || this.optionsExtended.autoCsp) {
|
|
155
|
-
const beastiesMedia = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN);
|
|
156
|
-
if (beastiesMedia) {
|
|
157
|
-
// If there's a Beasties-generated `onload` handler and the file has an Angular CSP nonce,
|
|
158
|
-
// we have to remove the handler, because it's incompatible with CSP. We save the value
|
|
159
|
-
// in a different attribute and we generate a script tag with the nonce that uses
|
|
160
|
-
// `addEventListener` to apply the media query instead.
|
|
161
|
-
link.removeAttribute('onload');
|
|
162
|
-
link.setAttribute(CSP_MEDIA_ATTR, beastiesMedia[1]);
|
|
163
|
-
this.conditionallyInsertCspLoadingScript(document, cspNonce, link);
|
|
164
|
-
}
|
|
165
|
-
// Ideally we would hook in at the time Beasties inserts the `style` tags, but there isn't
|
|
166
|
-
// a way of doing that at the moment so we fall back to doing it any time a `link` tag is
|
|
167
|
-
// inserted. We mitigate it by only iterating the direct children of the `<head>` which
|
|
168
|
-
// should be pretty shallow.
|
|
169
|
-
if (cspNonce) {
|
|
170
|
-
document.head.children.forEach((child) => {
|
|
171
|
-
if (child.tagName === 'style' && !child.hasAttribute('nonce')) {
|
|
172
|
-
child.setAttribute('nonce', cspNonce);
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return returnValue;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Finds the CSP nonce for a specific document.
|
|
181
|
-
*/
|
|
182
|
-
findCspNonce(document) {
|
|
183
|
-
if (this.documentNonces.has(document)) {
|
|
184
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
185
|
-
return this.documentNonces.get(document);
|
|
186
|
-
}
|
|
187
|
-
// HTML attribute are case-insensitive, but the parser used by Beasties is case-sensitive.
|
|
188
|
-
const nonceElement = document.querySelector('[ngCspNonce], [ngcspnonce]');
|
|
189
|
-
const cspNonce = nonceElement?.getAttribute('ngCspNonce') ||
|
|
190
|
-
nonceElement?.getAttribute('ngcspnonce') ||
|
|
191
|
-
null;
|
|
192
|
-
this.documentNonces.set(document, cspNonce);
|
|
193
|
-
return cspNonce;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Inserts the `script` tag that swaps the critical CSS at runtime,
|
|
197
|
-
* if one hasn't been inserted into the document already.
|
|
198
|
-
*/
|
|
199
|
-
conditionallyInsertCspLoadingScript(document, nonce, link) {
|
|
200
|
-
if (this.addedCspScriptsDocuments.has(document)) {
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const script = document.createElement('script');
|
|
204
|
-
script.textContent = LINK_LOAD_SCRIPT_CONTENT;
|
|
205
|
-
if (nonce) {
|
|
206
|
-
script.setAttribute('nonce', nonce);
|
|
207
|
-
}
|
|
208
|
-
// Prepend the script to the head since it needs to
|
|
209
|
-
// run as early as possible, before the `link` tags.
|
|
210
|
-
document.head.insertBefore(script, link);
|
|
211
|
-
this.addedCspScriptsDocuments.add(document);
|
|
212
|
-
}
|
|
213
|
-
};
|
|
55
|
+
async function inlineCriticalCss(html, outputPath, deployUrl, minify, readAsset) {
|
|
56
|
+
const { default: Beasties } = await Promise.resolve().then(() => __importStar(require('beasties')));
|
|
57
|
+
const warnings = [];
|
|
58
|
+
const errors = [];
|
|
59
|
+
const beasties = new Beasties({
|
|
60
|
+
logger: {
|
|
61
|
+
warn: (s) => warnings.push(s),
|
|
62
|
+
error: (s) => errors.push(s),
|
|
63
|
+
info: () => { },
|
|
64
|
+
},
|
|
65
|
+
logLevel: 'warn',
|
|
66
|
+
path: outputPath,
|
|
67
|
+
publicPath: deployUrl,
|
|
68
|
+
compress: minify,
|
|
69
|
+
pruneSource: false,
|
|
70
|
+
reduceInlineStyles: false,
|
|
71
|
+
mergeStylesheets: false,
|
|
72
|
+
preload: 'media-script',
|
|
73
|
+
nonce: (document) => {
|
|
74
|
+
const nonceElement = document.querySelector('[ngCspNonce], [ngcspnonce]');
|
|
75
|
+
const cspNonce = nonceElement?.getAttribute('ngCspNonce') || nonceElement?.getAttribute('ngcspnonce');
|
|
76
|
+
return cspNonce ?? undefined;
|
|
77
|
+
},
|
|
78
|
+
noscriptFallback: true,
|
|
79
|
+
inlineFonts: true,
|
|
214
80
|
});
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const content = await beasties.process(html);
|
|
226
|
-
return {
|
|
227
|
-
// Clean up value from value less attributes.
|
|
228
|
-
// This is caused because parse5 always requires attributes to have a string value.
|
|
229
|
-
// nomodule="" defer="" -> nomodule defer.
|
|
230
|
-
content: content.replace(/(\s(?:defer|nomodule))=""/g, '$1'),
|
|
231
|
-
errors: beasties.errors,
|
|
232
|
-
warnings: beasties.warnings,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
81
|
+
beasties.readFile = (path) => readAsset(path);
|
|
82
|
+
const content = await beasties.process(html);
|
|
83
|
+
return {
|
|
84
|
+
// Clean up value from value less attributes.
|
|
85
|
+
// This is caused because parse5 always requires attributes to have a string value.
|
|
86
|
+
// nomodule="" defer="" -> nomodule defer.
|
|
87
|
+
content: content.replace(/(\s(?:defer|nomodule))=""/g, '$1'),
|
|
88
|
+
errors,
|
|
89
|
+
warnings,
|
|
90
|
+
};
|
|
235
91
|
}
|
|
236
|
-
exports.InlineCriticalCssProcessor = InlineCriticalCssProcessor;
|
|
237
92
|
//# sourceMappingURL=inline-critical-css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-critical-css.js","sourceRoot":"","sources":["inline-critical-css.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"inline-critical-css.js","sourceRoot":"","sources":["inline-critical-css.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaH,8CAqDC;AAhED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,UAAkB,EAClB,SAA6B,EAC7B,MAAe,EACf,SAA4C;IAM5C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,wDAAa,UAAU,GAAC,CAAC;IAEvD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;SACf;QACD,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,KAAK;QAClB,kBAAkB,EAAE,KAAK;QACzB,gBAAgB,EAAE,KAAK;QACvB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;YAClB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;YAC1E,MAAM,QAAQ,GACZ,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,IAAI,YAAY,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;YAEvF,OAAO,QAAQ,IAAI,SAAS,CAAC;QAC/B,CAAC;QACD,gBAAgB,EAAE,IAAI;QACtB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO;QACL,6CAA6C;QAC7C,mFAAmF;QACnF,0CAA0C;QAC1C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC;QAC5D,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.addNonce = addNonce;
|
|
11
|
+
exports.findNonce = findNonce;
|
|
11
12
|
const html_rewriting_stream_1 = require("./html-rewriting-stream");
|
|
12
13
|
/**
|
|
13
14
|
* Pattern matching the name of the Angular nonce attribute. Note that this is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nonce.js","sourceRoot":"","sources":["nonce.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAcH,4BAqBC;
|
|
1
|
+
{"version":3,"file":"nonce.js","sourceRoot":"","sources":["nonce.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAcH,4BAqBC;AAGD,8BAoBC;AAxDD,mEAA8D;AAE9D;;;GAGG;AACH,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEzC;;;GAGG;AACI,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAA,2CAAmB,EAAC,IAAI,CAAC,CAAC;IAEzE,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;QAC9B,IACE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC;YACrD,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAChD,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED,iDAAiD;AAC1C,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,gFAAgF;IAChF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAA,2CAAmB,EAAC,IAAI,CAAC,CAAC;IACzE,IAAI,KAAK,GAAkB,IAAI,CAAC;IAEhC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;YACrB,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,4CAA4C;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,kBAAkB,EAAE,CAAC;IAE3B,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -11,7 +11,7 @@ exports.normalizeCacheOptions = normalizeCacheOptions;
|
|
|
11
11
|
const node_fs_1 = require("node:fs");
|
|
12
12
|
const node_path_1 = require("node:path");
|
|
13
13
|
/** Version placeholder is replaced during the build process with actual package version */
|
|
14
|
-
const VERSION = '22.2.0-next.
|
|
14
|
+
const VERSION = '22.2.0-next.7';
|
|
15
15
|
function hasCacheMetadata(value) {
|
|
16
16
|
return (!!value &&
|
|
17
17
|
typeof value === 'object' &&
|
|
@@ -61,7 +61,7 @@ export declare function generateAngularServerAppEngineManifest(i18nOptions: Norm
|
|
|
61
61
|
* - `manifestContent`: A string of the SSR manifest content.
|
|
62
62
|
* - `serverAssetsChunks`: An array of build output files containing the generated assets for the server.
|
|
63
63
|
*/
|
|
64
|
-
export declare function generateAngularServerAppManifest(additionalHtmlOutputFiles: Map<string, BuildOutputFile>, outputFiles: BuildOutputFile[], inlineCriticalCss: boolean, routes: readonly unknown[] | undefined, locale: string | undefined, baseHref: string, initialFiles: Set<string>, metafile: Metafile, publicPath: string | undefined): {
|
|
64
|
+
export declare function generateAngularServerAppManifest(additionalHtmlOutputFiles: Map<string, BuildOutputFile>, outputFiles: BuildOutputFile[], inlineCriticalCss: boolean, routes: readonly unknown[] | undefined, locale: string | undefined, baseHref: string, initialFiles: Set<string>, metafile: Metafile, publicPath: string | undefined): Promise<{
|
|
65
65
|
manifestContent: string;
|
|
66
66
|
serverAssetsChunks: BuildOutputFile[];
|
|
67
|
-
}
|
|
67
|
+
}>;
|
|
@@ -6,13 +6,49 @@
|
|
|
6
6
|
* Use of this source code is governed by an MIT-style license that can be
|
|
7
7
|
* found in the LICENSE file at https://angular.dev/license
|
|
8
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 () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
9
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
43
|
exports.SERVER_GENERATED_EXTERNALS = exports.SERVER_APP_ENGINE_MANIFEST_FILENAME = exports.SERVER_APP_MANIFEST_FILENAME = void 0;
|
|
11
44
|
exports.generateAngularServerAppEngineManifest = generateAngularServerAppEngineManifest;
|
|
12
45
|
exports.generateAngularServerAppManifest = generateAngularServerAppManifest;
|
|
13
46
|
const node_buffer_1 = require("node:buffer");
|
|
14
47
|
const node_path_1 = require("node:path");
|
|
48
|
+
const options_1 = require("../../builders/application/options");
|
|
15
49
|
const bundler_files_1 = require("../../tools/esbuild/bundler-files");
|
|
50
|
+
const nonce_1 = require("../index-file/nonce");
|
|
51
|
+
const url_1 = require("../url");
|
|
16
52
|
exports.SERVER_APP_MANIFEST_FILENAME = 'angular-app-manifest.mjs';
|
|
17
53
|
exports.SERVER_APP_ENGINE_MANIFEST_FILENAME = 'angular-app-engine-manifest.mjs';
|
|
18
54
|
/**
|
|
@@ -122,12 +158,16 @@ export default {
|
|
|
122
158
|
* - `manifestContent`: A string of the SSR manifest content.
|
|
123
159
|
* - `serverAssetsChunks`: An array of build output files containing the generated assets for the server.
|
|
124
160
|
*/
|
|
125
|
-
function generateAngularServerAppManifest(additionalHtmlOutputFiles, outputFiles, inlineCriticalCss, routes, locale, baseHref, initialFiles, metafile, publicPath) {
|
|
161
|
+
async function generateAngularServerAppManifest(additionalHtmlOutputFiles, outputFiles, inlineCriticalCss, routes, locale, baseHref, initialFiles, metafile, publicPath) {
|
|
126
162
|
const serverAssetsChunks = [];
|
|
127
163
|
const serverAssets = {};
|
|
164
|
+
const criticalCssPlans = [];
|
|
165
|
+
let nonce;
|
|
166
|
+
// TODO(alanagius): This is done here as we do not use module resolution bundler/node16
|
|
167
|
+
const { compileSheet, encodePlan } = (await Promise.resolve(`${'beasties/compiler'}`).then(s => __importStar(require(s))));
|
|
128
168
|
for (const file of [...additionalHtmlOutputFiles.values(), ...outputFiles]) {
|
|
129
169
|
const extension = (0, node_path_1.extname)(file.path);
|
|
130
|
-
if (extension === '.html'
|
|
170
|
+
if (extension === '.html') {
|
|
131
171
|
const jsChunkFilePath = `assets-chunks/${file.path.replace(/[./]/g, '_')}.mjs`;
|
|
132
172
|
const escapedContent = escapeUnsafeChars(file.text);
|
|
133
173
|
serverAssetsChunks.push((0, bundler_files_1.createOutputFile)(jsChunkFilePath, `export default \`${escapedContent}\`;`, bundler_files_1.BuildOutputFileType.ServerApplication));
|
|
@@ -142,6 +182,16 @@ function generateAngularServerAppManifest(additionalHtmlOutputFiles, outputFiles
|
|
|
142
182
|
serverAssets[file.path] =
|
|
143
183
|
`{size: ${size}, hash: '${file.hash}', text: () => import('./${jsChunkFilePath}').then(m => m.default)}`;
|
|
144
184
|
}
|
|
185
|
+
else if (inlineCriticalCss && extension === '.css') {
|
|
186
|
+
const sheet = compileSheet(file.text, {
|
|
187
|
+
href: (0, url_1.joinUrlParts)(publicPath ?? '', file.path),
|
|
188
|
+
});
|
|
189
|
+
criticalCssPlans.push(encodePlan(sheet));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const indexHtml = additionalHtmlOutputFiles.get(options_1.INDEX_HTML_SERVER)?.text;
|
|
193
|
+
if (indexHtml) {
|
|
194
|
+
nonce = (await (0, nonce_1.findNonce)(indexHtml)) ?? undefined;
|
|
145
195
|
}
|
|
146
196
|
// When routes have been extracted, mappings are no longer needed, as preloads will be included in the metadata.
|
|
147
197
|
const entryPointToBrowserMapping = routes?.length
|
|
@@ -150,9 +200,8 @@ function generateAngularServerAppManifest(additionalHtmlOutputFiles, outputFiles
|
|
|
150
200
|
const manifestContent = `
|
|
151
201
|
export default {
|
|
152
202
|
bootstrap: () => import('./main.server.mjs').then(m => m.default),
|
|
153
|
-
inlineCriticalCss: ${inlineCriticalCss},
|
|
154
203
|
baseHref: '${baseHref}',
|
|
155
|
-
locale: ${JSON.stringify(locale)},
|
|
204
|
+
${criticalCssPlans.length ? ` criticalCssPlans: ${JSON.stringify(criticalCssPlans)},\n` : ''}${nonce ? ` nonce: ${JSON.stringify(nonce)},\n` : ''} locale: ${JSON.stringify(locale)},
|
|
156
205
|
routes: ${JSON.stringify(routes, undefined, 2)},
|
|
157
206
|
entryPointToBrowserMapping: ${JSON.stringify(entryPointToBrowserMapping, undefined, 2)},
|
|
158
207
|
assets: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["manifest.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["manifest.ts"],"names":[],"mappings":"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"}
|