@angular/compiler 18.0.0 → 18.0.2
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/esm2022/src/compiler.mjs +2 -2
- package/esm2022/src/i18n/extractor_merger.mjs +2 -1
- package/esm2022/src/i18n/i18n_parser.mjs +4 -1
- package/esm2022/src/i18n/serializers/xliff.mjs +3 -1
- package/esm2022/src/i18n/serializers/xliff2.mjs +3 -1
- package/esm2022/src/i18n/serializers/xtb.mjs +3 -1
- package/esm2022/src/ml_parser/ast.mjs +14 -1
- package/esm2022/src/ml_parser/html_whitespaces.mjs +4 -1
- package/esm2022/src/ml_parser/icu_ast_expander.mjs +4 -1
- package/esm2022/src/ml_parser/lexer.mjs +83 -2
- package/esm2022/src/ml_parser/parser.mjs +57 -4
- package/esm2022/src/ml_parser/tokens.mjs +1 -1
- package/esm2022/src/ml_parser/xml_parser.mjs +3 -3
- package/esm2022/src/render3/partial/class_metadata.mjs +2 -2
- package/esm2022/src/render3/partial/directive.mjs +1 -1
- package/esm2022/src/render3/partial/factory.mjs +1 -1
- package/esm2022/src/render3/partial/injectable.mjs +1 -1
- package/esm2022/src/render3/partial/injector.mjs +1 -1
- package/esm2022/src/render3/partial/ng_module.mjs +1 -1
- package/esm2022/src/render3/partial/pipe.mjs +1 -1
- package/esm2022/src/render3/r3_ast.mjs +14 -1
- package/esm2022/src/render3/r3_template_transform.mjs +12 -1
- package/esm2022/src/render3/view/i18n/meta.mjs +4 -1
- package/esm2022/src/render3/view/t2_api.mjs +1 -1
- package/esm2022/src/render3/view/t2_binder.mjs +20 -4
- package/esm2022/src/render3/view/template.mjs +2 -1
- package/esm2022/src/template/pipeline/src/ingest.mjs +4 -1
- package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +5 -2
- package/esm2022/src/version.mjs +1 -1
- package/fesm2022/compiler.mjs +228 -19
- package/fesm2022/compiler.mjs.map +1 -1
- package/index.d.ts +52 -11
- package/package.json +3 -3
|
@@ -66,7 +66,7 @@ export function optimizeTrackFns(job) {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
function isTrackByFunctionCall(rootView, expr) {
|
|
69
|
-
if (!(expr instanceof o.InvokeFunctionExpr) || expr.args.length
|
|
69
|
+
if (!(expr instanceof o.InvokeFunctionExpr) || expr.args.length === 0 || expr.args.length > 2) {
|
|
70
70
|
return false;
|
|
71
71
|
}
|
|
72
72
|
if (!(expr.receiver instanceof o.ReadPropExpr && expr.receiver.receiver instanceof ir.ContextExpr) ||
|
|
@@ -77,9 +77,12 @@ function isTrackByFunctionCall(rootView, expr) {
|
|
|
77
77
|
if (!(arg0 instanceof o.ReadVarExpr) || arg0.name !== '$index') {
|
|
78
78
|
return false;
|
|
79
79
|
}
|
|
80
|
+
else if (expr.args.length === 1) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
80
83
|
if (!(arg1 instanceof o.ReadVarExpr) || arg1.name !== '$item') {
|
|
81
84
|
return false;
|
|
82
85
|
}
|
|
83
86
|
return true;
|
|
84
87
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tfZm5fb3B0aW1pemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvdHJhY2tfZm5fb3B0aW1pemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxDQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSS9COzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQW1CO0lBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRSx5RUFBeUU7Z0JBQ3pFLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLElBQUksRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUMxRSw0RUFBNEU7Z0JBQzVFLEVBQUUsQ0FBQyxTQUFT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Q2QsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUM5RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi8uLi8uLi9vdXRwdXQvb3V0cHV0X2FzdCc7XG5pbXBvcnQge0lkZW50aWZpZXJzfSBmcm9tICcuLi8uLi8uLi8uLi9yZW5kZXIzL3IzX2lkZW50aWZpZXJzJztcbmltcG9ydCAqIGFzIGlyIGZyb20gJy4uLy4uL2lyJztcblxuaW1wb3J0IHR5cGUge0NvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogYHRyYWNrYCBmdW5jdGlvbnMgaW4gYGZvcmAgcmVwZWF0ZXJzIGNhbiBzb21ldGltZXMgYmUgXCJvcHRpbWl6ZWQsXCIgaS5lLiB0cmFuc2Zvcm1lZCBpbnRvIGlubGluZVxuICogZXhwcmVzc2lvbnMsIGluIGxpZXUgb2YgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbC4gRm9yIGV4YW1wbGUsIHRyYWNraW5nIGJ5IGAkaW5kZXhgIGNhbiBiZSBiZVxuICogb3B0aW1pemVkIGludG8gYW4gaW5saW5lIGB0cmFja0J5SW5kZXhgIHJlZmVyZW5jZS4gVGhpcyBwaGFzZSBjaGVja3MgdHJhY2sgZXhwcmVzc2lvbnMgZm9yXG4gKiBvcHRpbWl6YWJsZSBjYXNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGltaXplVHJhY2tGbnMoam9iOiBDb21waWxhdGlvbkpvYik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHVuaXQgb2Ygam9iLnVuaXRzKSB7XG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5SZXBlYXRlckNyZWF0ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcC50cmFjayBpbnN0YW5jZW9mIG8uUmVhZFZhckV4cHIgJiYgb3AudHJhY2submFtZSA9PT0gJyRpbmRleCcpIHtcbiAgICAgICAgLy8gVG9wLWxldmVsIGFjY2VzcyBvZiBgJGluZGV4YCB1c2VzIHRoZSBidWlsdCBpbiBgcmVwZWF0ZXJUcmFja0J5SW5kZXhgLlxuICAgICAgICBvcC50cmFja0J5Rm4gPSBvLmltcG9ydEV4cHIoSWRlbnRpZmllcnMucmVwZWF0ZXJUcmFja0J5SW5kZXgpO1xuICAgICAgfSBlbHNlIGlmIChvcC50cmFjayBpbnN0YW5jZW9mIG8uUmVhZFZhckV4cHIgJiYgb3AudHJhY2submFtZSA9PT0gJyRpdGVtJykge1xuICAgICAgICAvLyBUb3AtbGV2ZWwgYWNjZXNzIG9mIHRoZSBpdGVtIHVzZXMgdGhlIGJ1aWx0IGluIGByZXBlYXRlclRyYWNrQnlJZGVudGl0eWAuXG4gICAgICAgIG9wLnRyYWNrQnlGbiA9IG8uaW1wb3J0RXhwcihJZGVudGlmaWVycy5yZXBlYXRlclRyYWNrQnlJZGVudGl0eSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhY2tCeUZ1bmN0aW9uQ2FsbChqb2Iucm9vdC54cmVmLCBvcC50cmFjaykpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgZnVuY3Rpb24gYXMgdXNpbmcgdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBwbGF5IGl0IHNhZmVcbiAgICAgICAgLy8gc2luY2UgdGhlIG1ldGhvZCBtaWdodCBiZSB1c2luZyBgdGhpc2AgaW50ZXJuYWxseSAoc2VlICM1MzYyOCkuXG4gICAgICAgIG9wLnVzZXNDb21wb25lbnRJbnN0YW5jZSA9IHRydWU7XG5cbiAgICAgICAgLy8gVG9wLWxldmVsIG1ldGhvZCBjYWxscyBpbiB0aGUgZm9ybSBvZiBgZm4oJGluZGV4LCBpdGVtKWAgY2FuIGJlIHBhc3NlZCBpbiBkaXJlY3RseS5cbiAgICAgICAgaWYgKG9wLnRyYWNrLnJlY2VpdmVyLnJlY2VpdmVyLnZpZXcgPT09IHVuaXQueHJlZikge1xuICAgICAgICAgIC8vIFRPRE86IHRoaXMgbWF5IGJlIHdyb25nXG4gICAgICAgICAgb3AudHJhY2tCeUZuID0gb3AudHJhY2sucmVjZWl2ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHBsYWluIG1ldGhvZCBjYWxsLCBidXQgbm90IGluIHRoZSBjb21wb25lbnQncyByb290IHZpZXcuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBnZXQgdGhlIGNvbXBvbmVudCBpbnN0YW5jZSwgYW5kIHRoZW4gY2FsbCB0aGUgbWV0aG9kIG9uIGl0LlxuICAgICAgICAgIG9wLnRyYWNrQnlGbiA9IG9cbiAgICAgICAgICAgIC5pbXBvcnRFeHByKElkZW50aWZpZXJzLmNvbXBvbmVudEluc3RhbmNlKVxuICAgICAgICAgICAgLmNhbGxGbihbXSlcbiAgICAgICAgICAgIC5wcm9wKG9wLnRyYWNrLnJlY2VpdmVyLm5hbWUpO1xuICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGNvbnRleHQgaXMgbm90IGF2YWlhYmxlICh3aXRob3V0IGEgc3BlY2lhbCBmdW5jdGlvbiksIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBpdCBsYXRlci4gTGV0J3MgZ2V0IHJpZCBvZiBpdCBieSBvdmVyd3JpdGluZyB0aGUgb3JpZ2luYWwgdHJhY2tcbiAgICAgICAgICAvLyBleHByZXNzaW9uICh3aGljaCB3b24ndCBiZSB1c2VkIGFueXdheSkuXG4gICAgICAgICAgb3AudHJhY2sgPSBvcC50cmFja0J5Rm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB0cmFjayBmdW5jdGlvbiBjb3VsZCBub3QgYmUgb3B0aW1pemVkLlxuICAgICAgICAvLyBSZXBsYWNlIGNvbnRleHQgcmVhZHMgd2l0aCBhIHNwZWNpYWwgSVIgZXhwcmVzc2lvbiwgc2luY2UgY29udGV4dCByZWFkcyBpbiBhIHRyYWNrXG4gICAgICAgIC8vIGZ1bmN0aW9uIGFyZSBlbWl0dGVkIHNwZWNpYWxseS5cbiAgICAgICAgb3AudHJhY2sgPSBpci50cmFuc2Zvcm1FeHByZXNzaW9uc0luRXhwcmVzc2lvbihcbiAgICAgICAgICBvcC50cmFjayxcbiAgICAgICAgICAoZXhwcikgPT4ge1xuICAgICAgICAgICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBpci5Db250ZXh0RXhwcikge1xuICAgICAgICAgICAgICBvcC51c2VzQ29tcG9uZW50SW5zdGFuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IGlyLlRyYWNrQ29udGV4dEV4cHIoZXhwci52aWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXIuVmlzaXRvckNvbnRleHRGbGFnLk5vbmUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVHJhY2tCeUZ1bmN0aW9uQ2FsbChcbiAgcm9vdFZpZXc6IGlyLlhyZWZJZCxcbiAgZXhwcjogby5FeHByZXNzaW9uLFxuKTogZXhwciBpcyBvLkludm9rZUZ1bmN0aW9uRXhwciAmIHtcbiAgcmVjZWl2ZXI6IG8uUmVhZFByb3BFeHByICYge1xuICAgIHJlY2VpdmVyOiBpci5Db250ZXh0RXhwcjtcbiAgfTtcbn0ge1xuICBpZiAoIShleHByIGluc3RhbmNlb2Ygby5JbnZva2VGdW5jdGlvbkV4cHIpIHx8IGV4cHIuYXJncy5sZW5ndGggPT09IDAgfHwgZXhwci5hcmdzLmxlbmd0aCA+IDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgIShcbiAgICAgIGV4cHIucmVjZWl2ZXIgaW5zdGFuY2VvZiBvLlJlYWRQcm9wRXhwciAmJiBleHByLnJlY2VpdmVyLnJlY2VpdmVyIGluc3RhbmNlb2YgaXIuQ29udGV4dEV4cHJcbiAgICApIHx8XG4gICAgZXhwci5yZWNlaXZlci5yZWNlaXZlci52aWV3ICE9PSByb290Vmlld1xuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbYXJnMCwgYXJnMV0gPSBleHByLmFyZ3M7XG4gIGlmICghKGFyZzAgaW5zdGFuY2VvZiBvLlJlYWRWYXJFeHByKSB8fCBhcmcwLm5hbWUgIT09ICckaW5kZXgnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGV4cHIuYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIShhcmcxIGluc3RhbmNlb2Ygby5SZWFkVmFyRXhwcikgfHwgYXJnMS5uYW1lICE9PSAnJGl0ZW0nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19
|
package/esm2022/src/version.mjs
CHANGED
|
@@ -11,5 +11,5 @@
|
|
|
11
11
|
* Entry point for all public APIs of the compiler package.
|
|
12
12
|
*/
|
|
13
13
|
import { Version } from './util';
|
|
14
|
-
export const VERSION = new Version('18.0.
|
|
14
|
+
export const VERSION = new Version('18.0.2');
|
|
15
15
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQG1vZHVsZVxuICogQGRlc2NyaXB0aW9uXG4gKiBFbnRyeSBwb2ludCBmb3IgYWxsIHB1YmxpYyBBUElzIG9mIHRoZSBjb21waWxlciBwYWNrYWdlLlxuICovXG5cbmltcG9ydCB7VmVyc2lvbn0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBuZXcgVmVyc2lvbignMC4wLjAtUExBQ0VIT0xERVInKTtcbiJdfQ==
|
package/fesm2022/compiler.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v18.0.
|
|
2
|
+
* @license Angular v18.0.2
|
|
3
3
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -5091,6 +5091,18 @@ class UnknownBlock {
|
|
|
5091
5091
|
return visitor.visitUnknownBlock(this);
|
|
5092
5092
|
}
|
|
5093
5093
|
}
|
|
5094
|
+
class LetDeclaration$1 {
|
|
5095
|
+
constructor(name, value, sourceSpan, nameSpan, valueSpan) {
|
|
5096
|
+
this.name = name;
|
|
5097
|
+
this.value = value;
|
|
5098
|
+
this.sourceSpan = sourceSpan;
|
|
5099
|
+
this.nameSpan = nameSpan;
|
|
5100
|
+
this.valueSpan = valueSpan;
|
|
5101
|
+
}
|
|
5102
|
+
visit(visitor) {
|
|
5103
|
+
return visitor.visitLetDeclaration(this);
|
|
5104
|
+
}
|
|
5105
|
+
}
|
|
5094
5106
|
class Template {
|
|
5095
5107
|
constructor(
|
|
5096
5108
|
// tagName is the name of the container element, if applicable.
|
|
@@ -5226,6 +5238,7 @@ class RecursiveVisitor$1 {
|
|
|
5226
5238
|
visitIcu(icu) { }
|
|
5227
5239
|
visitDeferredTrigger(trigger) { }
|
|
5228
5240
|
visitUnknownBlock(block) { }
|
|
5241
|
+
visitLetDeclaration(decl) { }
|
|
5229
5242
|
}
|
|
5230
5243
|
function visitAll$1(visitor, nodes) {
|
|
5231
5244
|
const result = [];
|
|
@@ -14335,6 +14348,18 @@ class BlockParameter {
|
|
|
14335
14348
|
return visitor.visitBlockParameter(this, context);
|
|
14336
14349
|
}
|
|
14337
14350
|
}
|
|
14351
|
+
class LetDeclaration {
|
|
14352
|
+
constructor(name, value, sourceSpan, nameSpan, valueSpan) {
|
|
14353
|
+
this.name = name;
|
|
14354
|
+
this.value = value;
|
|
14355
|
+
this.sourceSpan = sourceSpan;
|
|
14356
|
+
this.nameSpan = nameSpan;
|
|
14357
|
+
this.valueSpan = valueSpan;
|
|
14358
|
+
}
|
|
14359
|
+
visit(visitor, context) {
|
|
14360
|
+
return visitor.visitLetDeclaration(this, context);
|
|
14361
|
+
}
|
|
14362
|
+
}
|
|
14338
14363
|
function visitAll(visitor, nodes, context = null) {
|
|
14339
14364
|
const result = [];
|
|
14340
14365
|
const visit = visitor.visit
|
|
@@ -14372,6 +14397,7 @@ class RecursiveVisitor {
|
|
|
14372
14397
|
});
|
|
14373
14398
|
}
|
|
14374
14399
|
visitBlockParameter(ast, context) { }
|
|
14400
|
+
visitLetDeclaration(decl, context) { }
|
|
14375
14401
|
visitChildren(context, cb) {
|
|
14376
14402
|
let results = [];
|
|
14377
14403
|
let t = this;
|
|
@@ -15335,6 +15361,9 @@ class _I18nVisitor {
|
|
|
15335
15361
|
visitBlockParameter(_parameter, _context) {
|
|
15336
15362
|
throw new Error('Unreachable code');
|
|
15337
15363
|
}
|
|
15364
|
+
visitLetDeclaration(decl, context) {
|
|
15365
|
+
return null;
|
|
15366
|
+
}
|
|
15338
15367
|
/**
|
|
15339
15368
|
* Convert, text and interpolated tokens up into text and placeholder pieces.
|
|
15340
15369
|
*
|
|
@@ -17660,6 +17689,8 @@ class _Tokenizer {
|
|
|
17660
17689
|
this._preserveLineEndings = options.preserveLineEndings || false;
|
|
17661
17690
|
this._i18nNormalizeLineEndingsInICUs = options.i18nNormalizeLineEndingsInICUs || false;
|
|
17662
17691
|
this._tokenizeBlocks = options.tokenizeBlocks ?? true;
|
|
17692
|
+
// TODO(crisbeto): eventually set this to true.
|
|
17693
|
+
this._tokenizeLet = options.tokenizeLet || false;
|
|
17663
17694
|
try {
|
|
17664
17695
|
this._cursor.init();
|
|
17665
17696
|
}
|
|
@@ -17700,6 +17731,14 @@ class _Tokenizer {
|
|
|
17700
17731
|
this._consumeTagOpen(start);
|
|
17701
17732
|
}
|
|
17702
17733
|
}
|
|
17734
|
+
else if (this._tokenizeLet &&
|
|
17735
|
+
// Use `peek` instead of `attempCharCode` since we
|
|
17736
|
+
// don't want to advance in case it's not `@let`.
|
|
17737
|
+
this._cursor.peek() === $AT &&
|
|
17738
|
+
!this._inInterpolation &&
|
|
17739
|
+
this._attemptStr('@let')) {
|
|
17740
|
+
this._consumeLetDeclaration(start);
|
|
17741
|
+
}
|
|
17703
17742
|
else if (this._tokenizeBlocks && this._attemptCharCode($AT)) {
|
|
17704
17743
|
this._consumeBlockStart(start);
|
|
17705
17744
|
}
|
|
@@ -17720,7 +17759,7 @@ class _Tokenizer {
|
|
|
17720
17759
|
this.handleError(e);
|
|
17721
17760
|
}
|
|
17722
17761
|
}
|
|
17723
|
-
this._beginToken(
|
|
17762
|
+
this._beginToken(33 /* TokenType.EOF */);
|
|
17724
17763
|
this._endToken([]);
|
|
17725
17764
|
}
|
|
17726
17765
|
_getBlockName() {
|
|
@@ -17811,6 +17850,77 @@ class _Tokenizer {
|
|
|
17811
17850
|
this._attemptCharCodeUntilFn(isBlockParameterChar);
|
|
17812
17851
|
}
|
|
17813
17852
|
}
|
|
17853
|
+
_consumeLetDeclaration(start) {
|
|
17854
|
+
this._beginToken(29 /* TokenType.LET_START */, start);
|
|
17855
|
+
// Require at least one white space after the `@let`.
|
|
17856
|
+
if (isWhitespace(this._cursor.peek())) {
|
|
17857
|
+
this._attemptCharCodeUntilFn(isNotWhitespace);
|
|
17858
|
+
}
|
|
17859
|
+
else {
|
|
17860
|
+
const token = this._endToken([this._cursor.getChars(start)]);
|
|
17861
|
+
token.type = 32 /* TokenType.INCOMPLETE_LET */;
|
|
17862
|
+
return;
|
|
17863
|
+
}
|
|
17864
|
+
const startToken = this._endToken([this._getLetDeclarationName()]);
|
|
17865
|
+
// Skip over white space before the equals character.
|
|
17866
|
+
this._attemptCharCodeUntilFn(isNotWhitespace);
|
|
17867
|
+
// Expect an equals sign.
|
|
17868
|
+
if (!this._attemptCharCode($EQ)) {
|
|
17869
|
+
startToken.type = 32 /* TokenType.INCOMPLETE_LET */;
|
|
17870
|
+
return;
|
|
17871
|
+
}
|
|
17872
|
+
// Skip spaces after the equals.
|
|
17873
|
+
this._attemptCharCodeUntilFn((code) => isNotWhitespace(code) && !isNewLine(code));
|
|
17874
|
+
this._consumeLetDeclarationValue();
|
|
17875
|
+
// Terminate the `@let` with a semicolon.
|
|
17876
|
+
const endChar = this._cursor.peek();
|
|
17877
|
+
if (endChar === $SEMICOLON) {
|
|
17878
|
+
this._beginToken(31 /* TokenType.LET_END */);
|
|
17879
|
+
this._endToken([]);
|
|
17880
|
+
this._cursor.advance();
|
|
17881
|
+
}
|
|
17882
|
+
else {
|
|
17883
|
+
startToken.type = 32 /* TokenType.INCOMPLETE_LET */;
|
|
17884
|
+
startToken.sourceSpan = this._cursor.getSpan(start);
|
|
17885
|
+
}
|
|
17886
|
+
}
|
|
17887
|
+
_getLetDeclarationName() {
|
|
17888
|
+
const nameCursor = this._cursor.clone();
|
|
17889
|
+
let allowDigit = false;
|
|
17890
|
+
this._attemptCharCodeUntilFn((code) => {
|
|
17891
|
+
// `@let` names can't start with a digit, but digits are valid anywhere else in the name.
|
|
17892
|
+
if (isAsciiLetter(code) || code === $_ || (allowDigit && isDigit(code))) {
|
|
17893
|
+
allowDigit = true;
|
|
17894
|
+
return false;
|
|
17895
|
+
}
|
|
17896
|
+
return true;
|
|
17897
|
+
});
|
|
17898
|
+
return this._cursor.getChars(nameCursor).trim();
|
|
17899
|
+
}
|
|
17900
|
+
_consumeLetDeclarationValue() {
|
|
17901
|
+
const start = this._cursor.clone();
|
|
17902
|
+
this._beginToken(30 /* TokenType.LET_VALUE */, start);
|
|
17903
|
+
while (this._cursor.peek() !== $EOF) {
|
|
17904
|
+
const char = this._cursor.peek();
|
|
17905
|
+
// `@let` declarations terminate with a semicolon.
|
|
17906
|
+
if (char === $SEMICOLON) {
|
|
17907
|
+
break;
|
|
17908
|
+
}
|
|
17909
|
+
// If we hit a quote, skip over its content since we don't care what's inside.
|
|
17910
|
+
if (isQuote(char)) {
|
|
17911
|
+
this._cursor.advance();
|
|
17912
|
+
this._attemptCharCodeUntilFn((inner) => {
|
|
17913
|
+
if (inner === $BACKSLASH) {
|
|
17914
|
+
this._cursor.advance();
|
|
17915
|
+
return false;
|
|
17916
|
+
}
|
|
17917
|
+
return inner === char;
|
|
17918
|
+
});
|
|
17919
|
+
}
|
|
17920
|
+
this._cursor.advance();
|
|
17921
|
+
}
|
|
17922
|
+
this._endToken([this._cursor.getChars(start)]);
|
|
17923
|
+
}
|
|
17814
17924
|
/**
|
|
17815
17925
|
* @returns whether an ICU token has been created
|
|
17816
17926
|
* @internal
|
|
@@ -18741,7 +18851,7 @@ class _TreeBuilder {
|
|
|
18741
18851
|
this._advance();
|
|
18742
18852
|
}
|
|
18743
18853
|
build() {
|
|
18744
|
-
while (this._peek.type !==
|
|
18854
|
+
while (this._peek.type !== 33 /* TokenType.EOF */) {
|
|
18745
18855
|
if (this._peek.type === 0 /* TokenType.TAG_OPEN_START */ ||
|
|
18746
18856
|
this._peek.type === 4 /* TokenType.INCOMPLETE_TAG_OPEN */) {
|
|
18747
18857
|
this._consumeStartTag(this._advance());
|
|
@@ -18778,6 +18888,14 @@ class _TreeBuilder {
|
|
|
18778
18888
|
this._closeVoidElement();
|
|
18779
18889
|
this._consumeIncompleteBlock(this._advance());
|
|
18780
18890
|
}
|
|
18891
|
+
else if (this._peek.type === 29 /* TokenType.LET_START */) {
|
|
18892
|
+
this._closeVoidElement();
|
|
18893
|
+
this._consumeLet(this._advance());
|
|
18894
|
+
}
|
|
18895
|
+
else if (this._peek.type === 32 /* TokenType.INCOMPLETE_LET */) {
|
|
18896
|
+
this._closeVoidElement();
|
|
18897
|
+
this._consumeIncompleteLet(this._advance());
|
|
18898
|
+
}
|
|
18781
18899
|
else {
|
|
18782
18900
|
// Skip all other tokens...
|
|
18783
18901
|
this._advance();
|
|
@@ -18851,7 +18969,7 @@ class _TreeBuilder {
|
|
|
18851
18969
|
if (!exp)
|
|
18852
18970
|
return null;
|
|
18853
18971
|
const end = this._advance();
|
|
18854
|
-
exp.push({ type:
|
|
18972
|
+
exp.push({ type: 33 /* TokenType.EOF */, parts: [], sourceSpan: end.sourceSpan });
|
|
18855
18973
|
// parse everything in between { and }
|
|
18856
18974
|
const expansionCaseParser = new _TreeBuilder(exp, this.getTagDefinition);
|
|
18857
18975
|
expansionCaseParser.build();
|
|
@@ -18891,7 +19009,7 @@ class _TreeBuilder {
|
|
|
18891
19009
|
return null;
|
|
18892
19010
|
}
|
|
18893
19011
|
}
|
|
18894
|
-
if (this._peek.type ===
|
|
19012
|
+
if (this._peek.type === 33 /* TokenType.EOF */) {
|
|
18895
19013
|
this.errors.push(TreeError.create(null, start.sourceSpan, `Invalid ICU message. Missing '}'.`));
|
|
18896
19014
|
return null;
|
|
18897
19015
|
}
|
|
@@ -19121,6 +19239,51 @@ class _TreeBuilder {
|
|
|
19121
19239
|
this.errors.push(TreeError.create(token.parts[0], span, `Incomplete block "${token.parts[0]}". If you meant to write the @ character, ` +
|
|
19122
19240
|
`you should use the "@" HTML entity instead.`));
|
|
19123
19241
|
}
|
|
19242
|
+
_consumeLet(startToken) {
|
|
19243
|
+
const name = startToken.parts[0];
|
|
19244
|
+
let valueToken;
|
|
19245
|
+
let endToken;
|
|
19246
|
+
if (this._peek.type !== 30 /* TokenType.LET_VALUE */) {
|
|
19247
|
+
this.errors.push(TreeError.create(startToken.parts[0], startToken.sourceSpan, `Invalid @let declaration "${name}". Declaration must have a value.`));
|
|
19248
|
+
return;
|
|
19249
|
+
}
|
|
19250
|
+
else {
|
|
19251
|
+
valueToken = this._advance();
|
|
19252
|
+
}
|
|
19253
|
+
// Type cast is necessary here since TS narrowed the type of `peek` above.
|
|
19254
|
+
if (this._peek.type !== 31 /* TokenType.LET_END */) {
|
|
19255
|
+
this.errors.push(TreeError.create(startToken.parts[0], startToken.sourceSpan, `Unterminated @let declaration "${name}". Declaration must be terminated with a semicolon.`));
|
|
19256
|
+
return;
|
|
19257
|
+
}
|
|
19258
|
+
else {
|
|
19259
|
+
endToken = this._advance();
|
|
19260
|
+
}
|
|
19261
|
+
const end = endToken.sourceSpan.fullStart;
|
|
19262
|
+
const span = new ParseSourceSpan(startToken.sourceSpan.start, end, startToken.sourceSpan.fullStart);
|
|
19263
|
+
// The start token usually captures the `@let`. Construct a name span by
|
|
19264
|
+
// offsetting the start by the length of any text before the name.
|
|
19265
|
+
const startOffset = startToken.sourceSpan.toString().lastIndexOf(name);
|
|
19266
|
+
const nameStart = startToken.sourceSpan.start.moveBy(startOffset);
|
|
19267
|
+
const nameSpan = new ParseSourceSpan(nameStart, startToken.sourceSpan.end);
|
|
19268
|
+
const node = new LetDeclaration(name, valueToken.parts[0], span, nameSpan, valueToken.sourceSpan);
|
|
19269
|
+
this._addToParent(node);
|
|
19270
|
+
}
|
|
19271
|
+
_consumeIncompleteLet(token) {
|
|
19272
|
+
// Incomplete `@let` declaration may end up with an empty name.
|
|
19273
|
+
const name = token.parts[0] ?? '';
|
|
19274
|
+
const nameString = name ? ` "${name}"` : '';
|
|
19275
|
+
// If there's at least a name, we can salvage an AST node that can be used for completions.
|
|
19276
|
+
if (name.length > 0) {
|
|
19277
|
+
const startOffset = token.sourceSpan.toString().lastIndexOf(name);
|
|
19278
|
+
const nameStart = token.sourceSpan.start.moveBy(startOffset);
|
|
19279
|
+
const nameSpan = new ParseSourceSpan(nameStart, token.sourceSpan.end);
|
|
19280
|
+
const valueSpan = new ParseSourceSpan(token.sourceSpan.start, token.sourceSpan.start.moveBy(0));
|
|
19281
|
+
const node = new LetDeclaration(name, '', token.sourceSpan, nameSpan, valueSpan);
|
|
19282
|
+
this._addToParent(node);
|
|
19283
|
+
}
|
|
19284
|
+
this.errors.push(TreeError.create(token.parts[0], token.sourceSpan, `Incomplete @let declaration${nameString}. ` +
|
|
19285
|
+
`@let declarations must be written as \`@let <name> = <value>;\``));
|
|
19286
|
+
}
|
|
19124
19287
|
_getContainer() {
|
|
19125
19288
|
return this._containerStack.length > 0
|
|
19126
19289
|
? this._containerStack[this._containerStack.length - 1]
|
|
@@ -19349,6 +19512,9 @@ class I18nMetaVisitor {
|
|
|
19349
19512
|
visitBlockParameter(parameter, context) {
|
|
19350
19513
|
return parameter;
|
|
19351
19514
|
}
|
|
19515
|
+
visitLetDeclaration(decl, context) {
|
|
19516
|
+
return decl;
|
|
19517
|
+
}
|
|
19352
19518
|
/**
|
|
19353
19519
|
* Parse the general form `meta` passed into extract the explicit metadata needed to create a
|
|
19354
19520
|
* `Message`.
|
|
@@ -22951,7 +23117,7 @@ function optimizeTrackFns(job) {
|
|
|
22951
23117
|
}
|
|
22952
23118
|
}
|
|
22953
23119
|
function isTrackByFunctionCall(rootView, expr) {
|
|
22954
|
-
if (!(expr instanceof InvokeFunctionExpr) || expr.args.length
|
|
23120
|
+
if (!(expr instanceof InvokeFunctionExpr) || expr.args.length === 0 || expr.args.length > 2) {
|
|
22955
23121
|
return false;
|
|
22956
23122
|
}
|
|
22957
23123
|
if (!(expr.receiver instanceof ReadPropExpr && expr.receiver.receiver instanceof ContextExpr) ||
|
|
@@ -22962,6 +23128,9 @@ function isTrackByFunctionCall(rootView, expr) {
|
|
|
22962
23128
|
if (!(arg0 instanceof ReadVarExpr) || arg0.name !== '$index') {
|
|
22963
23129
|
return false;
|
|
22964
23130
|
}
|
|
23131
|
+
else if (expr.args.length === 1) {
|
|
23132
|
+
return true;
|
|
23133
|
+
}
|
|
22965
23134
|
if (!(arg1 instanceof ReadVarExpr) || arg1.name !== '$item') {
|
|
22966
23135
|
return false;
|
|
22967
23136
|
}
|
|
@@ -23868,6 +24037,9 @@ function ingestNodes(unit, template) {
|
|
|
23868
24037
|
else if (node instanceof ForLoopBlock) {
|
|
23869
24038
|
ingestForBlock(unit, node);
|
|
23870
24039
|
}
|
|
24040
|
+
else if (node instanceof LetDeclaration$1) {
|
|
24041
|
+
// TODO(crisbeto): needs further integration
|
|
24042
|
+
}
|
|
23871
24043
|
else {
|
|
23872
24044
|
throw new Error(`Unsupported template node: ${node.constructor.name}`);
|
|
23873
24045
|
}
|
|
@@ -25031,6 +25203,9 @@ class WhitespaceVisitor {
|
|
|
25031
25203
|
visitBlockParameter(parameter, context) {
|
|
25032
25204
|
return parameter;
|
|
25033
25205
|
}
|
|
25206
|
+
visitLetDeclaration(decl, context) {
|
|
25207
|
+
return decl;
|
|
25208
|
+
}
|
|
25034
25209
|
}
|
|
25035
25210
|
function createWhitespaceProcessedTextToken({ type, parts, sourceSpan }) {
|
|
25036
25211
|
return { type, parts: [processWhitespace(parts[0])], sourceSpan };
|
|
@@ -26701,6 +26876,13 @@ class HtmlAstToIvyAst {
|
|
|
26701
26876
|
}
|
|
26702
26877
|
return null;
|
|
26703
26878
|
}
|
|
26879
|
+
visitLetDeclaration(decl, context) {
|
|
26880
|
+
const value = this.bindingParser.parseBinding(decl.value, false, decl.valueSpan, decl.valueSpan.start.offset);
|
|
26881
|
+
if (value.errors.length === 0 && value.ast instanceof EmptyExpr$1) {
|
|
26882
|
+
this.reportError('@let declaration value cannot be empty', decl.valueSpan);
|
|
26883
|
+
}
|
|
26884
|
+
return new LetDeclaration$1(decl.name, value, decl.sourceSpan, decl.nameSpan, decl.valueSpan);
|
|
26885
|
+
}
|
|
26704
26886
|
visitBlockParameter() {
|
|
26705
26887
|
return null;
|
|
26706
26888
|
}
|
|
@@ -26979,6 +27161,9 @@ class NonBindableVisitor {
|
|
|
26979
27161
|
visitBlockParameter(parameter, context) {
|
|
26980
27162
|
return null;
|
|
26981
27163
|
}
|
|
27164
|
+
visitLetDeclaration(decl, context) {
|
|
27165
|
+
return new Text$3(`@let ${decl.name} = ${decl.value};`, decl.sourceSpan);
|
|
27166
|
+
}
|
|
26982
27167
|
}
|
|
26983
27168
|
const NON_BINDABLE_VISITOR = new NonBindableVisitor();
|
|
26984
27169
|
function normalizeAttributeName(attrName) {
|
|
@@ -27013,6 +27198,7 @@ function parseTemplate(template, templateUrl, options = {}) {
|
|
|
27013
27198
|
...options,
|
|
27014
27199
|
tokenizeExpansionForms: true,
|
|
27015
27200
|
tokenizeBlocks: options.enableBlockSyntax ?? true,
|
|
27201
|
+
tokenizeLet: options.enableLetSyntax ?? false,
|
|
27016
27202
|
});
|
|
27017
27203
|
if (!options.alwaysAttemptHtmlToR3AstConversion &&
|
|
27018
27204
|
parseResult.errors &&
|
|
@@ -27782,6 +27968,9 @@ class Scope {
|
|
|
27782
27968
|
visitContent(content) {
|
|
27783
27969
|
this.ingestScopedNode(content);
|
|
27784
27970
|
}
|
|
27971
|
+
visitLetDeclaration(decl) {
|
|
27972
|
+
this.maybeDeclare(decl);
|
|
27973
|
+
}
|
|
27785
27974
|
// Unused visitors.
|
|
27786
27975
|
visitBoundAttribute(attr) { }
|
|
27787
27976
|
visitBoundEvent(event) { }
|
|
@@ -27994,6 +28183,7 @@ class DirectiveBinder {
|
|
|
27994
28183
|
visitIcu(icu) { }
|
|
27995
28184
|
visitDeferredTrigger(trigger) { }
|
|
27996
28185
|
visitUnknownBlock(block) { }
|
|
28186
|
+
visitLetDeclaration(decl) { }
|
|
27997
28187
|
}
|
|
27998
28188
|
/**
|
|
27999
28189
|
* Processes a template and extract metadata about expressions and symbols within.
|
|
@@ -28190,6 +28380,12 @@ class TemplateBinder extends RecursiveAstVisitor {
|
|
|
28190
28380
|
visitBoundText(text) {
|
|
28191
28381
|
text.value.visit(this);
|
|
28192
28382
|
}
|
|
28383
|
+
visitLetDeclaration(decl) {
|
|
28384
|
+
decl.value.visit(this);
|
|
28385
|
+
if (this.rootNode !== null) {
|
|
28386
|
+
this.symbols.set(decl, this.rootNode);
|
|
28387
|
+
}
|
|
28388
|
+
}
|
|
28193
28389
|
visitPipe(ast, context) {
|
|
28194
28390
|
this.usedPipes.add(ast.name);
|
|
28195
28391
|
if (!this.scope.isDeferred) {
|
|
@@ -28224,7 +28420,13 @@ class TemplateBinder extends RecursiveAstVisitor {
|
|
|
28224
28420
|
}
|
|
28225
28421
|
// Check whether the name exists in the current scope. If so, map it. Otherwise, the name is
|
|
28226
28422
|
// probably a property on the top-level component context.
|
|
28227
|
-
|
|
28423
|
+
const target = this.scope.lookup(name);
|
|
28424
|
+
// It's not allowed to read template entities via `this`, however it previously worked by
|
|
28425
|
+
// accident (see #55115). Since `@let` declarations are new, we can fix it from the beginning,
|
|
28426
|
+
// whereas pre-existing template entities will be fixed in #55115.
|
|
28427
|
+
if (target instanceof LetDeclaration$1 && ast.receiver instanceof ThisReceiver) {
|
|
28428
|
+
return;
|
|
28429
|
+
}
|
|
28228
28430
|
if (target !== null) {
|
|
28229
28431
|
this.bindings.set(ast, target);
|
|
28230
28432
|
}
|
|
@@ -29059,7 +29261,7 @@ function publishFacade(global) {
|
|
|
29059
29261
|
* @description
|
|
29060
29262
|
* Entry point for all public APIs of the compiler package.
|
|
29061
29263
|
*/
|
|
29062
|
-
const VERSION = new Version('18.0.
|
|
29264
|
+
const VERSION = new Version('18.0.2');
|
|
29063
29265
|
|
|
29064
29266
|
class CompilerConfig {
|
|
29065
29267
|
constructor({ defaultEncapsulation = ViewEncapsulation.Emulated, preserveWhitespaces, strictInjectionParameters, } = {}) {
|
|
@@ -29284,6 +29486,7 @@ class _Visitor {
|
|
|
29284
29486
|
visitAll(this, block.children, context);
|
|
29285
29487
|
}
|
|
29286
29488
|
visitBlockParameter(parameter, context) { }
|
|
29489
|
+
visitLetDeclaration(decl, context) { }
|
|
29287
29490
|
_init(mode, interpolationConfig) {
|
|
29288
29491
|
this._mode = mode;
|
|
29289
29492
|
this._inI18nBlock = false;
|
|
@@ -29496,8 +29699,8 @@ class XmlParser extends Parser {
|
|
|
29496
29699
|
super(getXmlTagDefinition);
|
|
29497
29700
|
}
|
|
29498
29701
|
parse(source, url, options = {}) {
|
|
29499
|
-
// Blocks aren't supported in an XML context.
|
|
29500
|
-
return super.parse(source, url, { ...options, tokenizeBlocks: false });
|
|
29702
|
+
// Blocks and let declarations aren't supported in an XML context.
|
|
29703
|
+
return super.parse(source, url, { ...options, tokenizeBlocks: false, tokenizeLet: false });
|
|
29501
29704
|
}
|
|
29502
29705
|
}
|
|
29503
29706
|
|
|
@@ -29718,6 +29921,7 @@ class XliffParser {
|
|
|
29718
29921
|
visitExpansionCase(expansionCase, context) { }
|
|
29719
29922
|
visitBlock(block, context) { }
|
|
29720
29923
|
visitBlockParameter(parameter, context) { }
|
|
29924
|
+
visitLetDeclaration(decl, context) { }
|
|
29721
29925
|
_addError(node, message) {
|
|
29722
29926
|
this._errors.push(new I18nError(node.sourceSpan, message));
|
|
29723
29927
|
}
|
|
@@ -29770,6 +29974,7 @@ class XmlToI18n$2 {
|
|
|
29770
29974
|
visitAttribute(attribute, context) { }
|
|
29771
29975
|
visitBlock(block, context) { }
|
|
29772
29976
|
visitBlockParameter(parameter, context) { }
|
|
29977
|
+
visitLetDeclaration(decl, context) { }
|
|
29773
29978
|
_addError(node, message) {
|
|
29774
29979
|
this._errors.push(new I18nError(node.sourceSpan, message));
|
|
29775
29980
|
}
|
|
@@ -30029,6 +30234,7 @@ class Xliff2Parser {
|
|
|
30029
30234
|
visitExpansionCase(expansionCase, context) { }
|
|
30030
30235
|
visitBlock(block, context) { }
|
|
30031
30236
|
visitBlockParameter(parameter, context) { }
|
|
30237
|
+
visitLetDeclaration(decl, context) { }
|
|
30032
30238
|
_addError(node, message) {
|
|
30033
30239
|
this._errors.push(new I18nError(node.sourceSpan, message));
|
|
30034
30240
|
}
|
|
@@ -30098,6 +30304,7 @@ class XmlToI18n$1 {
|
|
|
30098
30304
|
visitAttribute(attribute, context) { }
|
|
30099
30305
|
visitBlock(block, context) { }
|
|
30100
30306
|
visitBlockParameter(parameter, context) { }
|
|
30307
|
+
visitLetDeclaration(decl, context) { }
|
|
30101
30308
|
_addError(node, message) {
|
|
30102
30309
|
this._errors.push(new I18nError(node.sourceSpan, message));
|
|
30103
30310
|
}
|
|
@@ -30234,6 +30441,7 @@ class XtbParser {
|
|
|
30234
30441
|
visitExpansionCase(expansionCase, context) { }
|
|
30235
30442
|
visitBlock(block, context) { }
|
|
30236
30443
|
visitBlockParameter(block, context) { }
|
|
30444
|
+
visitLetDeclaration(decl, context) { }
|
|
30237
30445
|
_addError(node, message) {
|
|
30238
30446
|
this._errors.push(new I18nError(node.sourceSpan, message));
|
|
30239
30447
|
}
|
|
@@ -30284,6 +30492,7 @@ class XmlToI18n {
|
|
|
30284
30492
|
visitAttribute(attribute, context) { }
|
|
30285
30493
|
visitBlock(block, context) { }
|
|
30286
30494
|
visitBlockParameter(block, context) { }
|
|
30495
|
+
visitLetDeclaration(decl, context) { }
|
|
30287
30496
|
_addError(node, message) {
|
|
30288
30497
|
this._errors.push(new I18nError(node.sourceSpan, message));
|
|
30289
30498
|
}
|
|
@@ -30690,7 +30899,7 @@ const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
|
|
|
30690
30899
|
function compileDeclareClassMetadata(metadata) {
|
|
30691
30900
|
const definitionMap = new DefinitionMap();
|
|
30692
30901
|
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
|
|
30693
|
-
definitionMap.set('version', literal('18.0.
|
|
30902
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
30694
30903
|
definitionMap.set('ngImport', importExpr(Identifiers.core));
|
|
30695
30904
|
definitionMap.set('type', metadata.type);
|
|
30696
30905
|
definitionMap.set('decorators', metadata.decorators);
|
|
@@ -30708,7 +30917,7 @@ function compileComponentDeclareClassMetadata(metadata, dependencies) {
|
|
|
30708
30917
|
callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? literal(null));
|
|
30709
30918
|
callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? literal(null));
|
|
30710
30919
|
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
|
|
30711
|
-
definitionMap.set('version', literal('18.0.
|
|
30920
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
30712
30921
|
definitionMap.set('ngImport', importExpr(Identifiers.core));
|
|
30713
30922
|
definitionMap.set('type', metadata.type);
|
|
30714
30923
|
definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
|
|
@@ -30803,7 +31012,7 @@ function createDirectiveDefinitionMap(meta) {
|
|
|
30803
31012
|
const definitionMap = new DefinitionMap();
|
|
30804
31013
|
const minVersion = getMinimumVersionForPartialOutput(meta);
|
|
30805
31014
|
definitionMap.set('minVersion', literal(minVersion));
|
|
30806
|
-
definitionMap.set('version', literal('18.0.
|
|
31015
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
30807
31016
|
// e.g. `type: MyDirective`
|
|
30808
31017
|
definitionMap.set('type', meta.type.value);
|
|
30809
31018
|
if (meta.isStandalone) {
|
|
@@ -31225,7 +31434,7 @@ const MINIMUM_PARTIAL_LINKER_VERSION$4 = '12.0.0';
|
|
|
31225
31434
|
function compileDeclareFactoryFunction(meta) {
|
|
31226
31435
|
const definitionMap = new DefinitionMap();
|
|
31227
31436
|
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
|
|
31228
|
-
definitionMap.set('version', literal('18.0.
|
|
31437
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
31229
31438
|
definitionMap.set('ngImport', importExpr(Identifiers.core));
|
|
31230
31439
|
definitionMap.set('type', meta.type.value);
|
|
31231
31440
|
definitionMap.set('deps', compileDependencies(meta.deps));
|
|
@@ -31260,7 +31469,7 @@ function compileDeclareInjectableFromMetadata(meta) {
|
|
|
31260
31469
|
function createInjectableDefinitionMap(meta) {
|
|
31261
31470
|
const definitionMap = new DefinitionMap();
|
|
31262
31471
|
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
|
|
31263
|
-
definitionMap.set('version', literal('18.0.
|
|
31472
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
31264
31473
|
definitionMap.set('ngImport', importExpr(Identifiers.core));
|
|
31265
31474
|
definitionMap.set('type', meta.type.value);
|
|
31266
31475
|
// Only generate providedIn property if it has a non-null value
|
|
@@ -31311,7 +31520,7 @@ function compileDeclareInjectorFromMetadata(meta) {
|
|
|
31311
31520
|
function createInjectorDefinitionMap(meta) {
|
|
31312
31521
|
const definitionMap = new DefinitionMap();
|
|
31313
31522
|
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
|
|
31314
|
-
definitionMap.set('version', literal('18.0.
|
|
31523
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
31315
31524
|
definitionMap.set('ngImport', importExpr(Identifiers.core));
|
|
31316
31525
|
definitionMap.set('type', meta.type.value);
|
|
31317
31526
|
definitionMap.set('providers', meta.providers);
|
|
@@ -31344,7 +31553,7 @@ function createNgModuleDefinitionMap(meta) {
|
|
|
31344
31553
|
throw new Error('Invalid path! Local compilation mode should not get into the partial compilation path');
|
|
31345
31554
|
}
|
|
31346
31555
|
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
|
|
31347
|
-
definitionMap.set('version', literal('18.0.
|
|
31556
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
31348
31557
|
definitionMap.set('ngImport', importExpr(Identifiers.core));
|
|
31349
31558
|
definitionMap.set('type', meta.type.value);
|
|
31350
31559
|
// We only generate the keys in the metadata if the arrays contain values.
|
|
@@ -31395,7 +31604,7 @@ function compileDeclarePipeFromMetadata(meta) {
|
|
|
31395
31604
|
function createPipeDefinitionMap(meta) {
|
|
31396
31605
|
const definitionMap = new DefinitionMap();
|
|
31397
31606
|
definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION));
|
|
31398
|
-
definitionMap.set('version', literal('18.0.
|
|
31607
|
+
definitionMap.set('version', literal('18.0.2'));
|
|
31399
31608
|
definitionMap.set('ngImport', importExpr(Identifiers.core));
|
|
31400
31609
|
// e.g. `type: MyPipe`
|
|
31401
31610
|
definitionMap.set('type', meta.type.value);
|
|
@@ -31428,5 +31637,5 @@ publishFacade(_global);
|
|
|
31428
31637
|
|
|
31429
31638
|
// This file is not used to build this module. It is only used during editing
|
|
31430
31639
|
|
|
31431
|
-
export { AST, ASTWithName, ASTWithSource, AbsoluteSourceSpan, ArrayType, ArrowFunctionExpr, AstMemoryEfficientTransformer, AstTransformer, Attribute, Binary, BinaryOperator, BinaryOperatorExpr, BindingPipe, BindingType, Block, BlockParameter, BoundElementProperty, BuiltinType, BuiltinTypeName, CUSTOM_ELEMENTS_SCHEMA, Call, Chain, ChangeDetectionStrategy, CommaExpr, Comment, CompilerConfig, Conditional, ConditionalExpr, ConstantPool, CssSelector, DEFAULT_INTERPOLATION_CONFIG, DYNAMIC_TYPE, DeclareFunctionStmt, DeclareVarStmt, DomElementSchemaRegistry, DynamicImportExpr, EOF, Element, ElementSchemaRegistry, EmitterVisitorContext, EmptyExpr$1 as EmptyExpr, Expansion, ExpansionCase, Expression, ExpressionBinding, ExpressionStatement, ExpressionType, ExternalExpr, ExternalReference, FactoryTarget$1 as FactoryTarget, FunctionExpr, HtmlParser, HtmlTagDefinition, I18NHtmlParser, IfStmt, ImplicitReceiver, InstantiateExpr, Interpolation$1 as Interpolation, InterpolationConfig, InvokeFunctionExpr, JSDocComment, JitEvaluator, KeyedRead, KeyedWrite, LeadingComment, Lexer, LiteralArray, LiteralArrayExpr, LiteralExpr, LiteralMap, LiteralMapExpr, LiteralPrimitive, LocalizedString, MapType, MessageBundle, NONE_TYPE, NO_ERRORS_SCHEMA, NodeWithI18n, NonNullAssert, NotExpr, ParseError, ParseErrorLevel, ParseLocation, ParseSourceFile, ParseSourceSpan, ParseSpan, ParseTreeResult, ParsedEvent, ParsedEventType, ParsedProperty, ParsedPropertyType, ParsedVariable, Parser$1 as Parser, ParserError, PrefixNot, PropertyRead, PropertyWrite, R3BoundTarget, Identifiers as R3Identifiers, R3NgModuleMetadataKind, R3SelectorScopeMode, R3TargetBinder, R3TemplateDependencyKind, ReadKeyExpr, ReadPropExpr, ReadVarExpr, RecursiveAstVisitor, RecursiveVisitor, ResourceLoader, ReturnStatement, STRING_TYPE, SafeCall, SafeKeyedRead, SafePropertyRead, SelectorContext, SelectorListContext, SelectorMatcher, Serializer, SplitInterpolation, Statement, StmtModifier, TagContentType, TaggedTemplateExpr, TemplateBindingParseResult, TemplateLiteral, TemplateLiteralElement, Text, ThisReceiver, BlockNode as TmplAstBlockNode, BoundAttribute as TmplAstBoundAttribute, BoundDeferredTrigger as TmplAstBoundDeferredTrigger, BoundEvent as TmplAstBoundEvent, BoundText as TmplAstBoundText, Content as TmplAstContent, DeferredBlock as TmplAstDeferredBlock, DeferredBlockError as TmplAstDeferredBlockError, DeferredBlockLoading as TmplAstDeferredBlockLoading, DeferredBlockPlaceholder as TmplAstDeferredBlockPlaceholder, DeferredTrigger as TmplAstDeferredTrigger, Element$1 as TmplAstElement, ForLoopBlock as TmplAstForLoopBlock, ForLoopBlockEmpty as TmplAstForLoopBlockEmpty, HoverDeferredTrigger as TmplAstHoverDeferredTrigger, Icu$1 as TmplAstIcu, IdleDeferredTrigger as TmplAstIdleDeferredTrigger, IfBlock as TmplAstIfBlock, IfBlockBranch as TmplAstIfBlockBranch, ImmediateDeferredTrigger as TmplAstImmediateDeferredTrigger, InteractionDeferredTrigger as TmplAstInteractionDeferredTrigger, RecursiveVisitor$1 as TmplAstRecursiveVisitor, Reference as TmplAstReference, SwitchBlock as TmplAstSwitchBlock, SwitchBlockCase as TmplAstSwitchBlockCase, Template as TmplAstTemplate, Text$3 as TmplAstText, TextAttribute as TmplAstTextAttribute, TimerDeferredTrigger as TmplAstTimerDeferredTrigger, UnknownBlock as TmplAstUnknownBlock, Variable as TmplAstVariable, ViewportDeferredTrigger as TmplAstViewportDeferredTrigger, Token, TokenType, TransplantedType, TreeError, Type, TypeModifier, TypeofExpr, Unary, UnaryOperator, UnaryOperatorExpr, VERSION, VariableBinding, Version, ViewEncapsulation, WrappedNodeExpr, WriteKeyExpr, WritePropExpr, WriteVarExpr, Xliff, Xliff2, Xmb, XmlParser, Xtb, compileClassDebugInfo, compileClassMetadata, compileComponentClassMetadata, compileComponentDeclareClassMetadata, compileComponentFromMetadata, compileDeclareClassMetadata, compileDeclareComponentFromMetadata, compileDeclareDirectiveFromMetadata, compileDeclareFactoryFunction, compileDeclareInjectableFromMetadata, compileDeclareInjectorFromMetadata, compileDeclareNgModuleFromMetadata, compileDeclarePipeFromMetadata, compileDeferResolverFunction, compileDirectiveFromMetadata, compileFactoryFunction, compileInjectable, compileInjector, compileNgModule, compileOpaqueAsyncClassMetadata, compilePipeFromMetadata, computeMsgId, core, createCssSelectorFromNode, createInjectableType, createMayBeForwardRefExpression, devOnlyGuardedExpression, emitDistinctChangesOnlyDefaultValue, encapsulateStyle, getHtmlTagDefinition, getNsPrefix, getSafePropertyAccessString, identifierName, isIdentifier, isNgContainer, isNgContent, isNgTemplate, jsDocComment, leadingComment, literal, literalMap, makeBindingParser, mergeNsAndName, output_ast as outputAst, parseHostBindings, parseTemplate, preserveWhitespacesDefault, publishFacade, r3JitTypeSourceSpan, sanitizeIdentifier, splitNsName, visitAll$1 as tmplAstVisitAll, verifyHostBindings, visitAll };
|
|
31640
|
+
export { AST, ASTWithName, ASTWithSource, AbsoluteSourceSpan, ArrayType, ArrowFunctionExpr, AstMemoryEfficientTransformer, AstTransformer, Attribute, Binary, BinaryOperator, BinaryOperatorExpr, BindingPipe, BindingType, Block, BlockParameter, BoundElementProperty, BuiltinType, BuiltinTypeName, CUSTOM_ELEMENTS_SCHEMA, Call, Chain, ChangeDetectionStrategy, CommaExpr, Comment, CompilerConfig, Conditional, ConditionalExpr, ConstantPool, CssSelector, DEFAULT_INTERPOLATION_CONFIG, DYNAMIC_TYPE, DeclareFunctionStmt, DeclareVarStmt, DomElementSchemaRegistry, DynamicImportExpr, EOF, Element, ElementSchemaRegistry, EmitterVisitorContext, EmptyExpr$1 as EmptyExpr, Expansion, ExpansionCase, Expression, ExpressionBinding, ExpressionStatement, ExpressionType, ExternalExpr, ExternalReference, FactoryTarget$1 as FactoryTarget, FunctionExpr, HtmlParser, HtmlTagDefinition, I18NHtmlParser, IfStmt, ImplicitReceiver, InstantiateExpr, Interpolation$1 as Interpolation, InterpolationConfig, InvokeFunctionExpr, JSDocComment, JitEvaluator, KeyedRead, KeyedWrite, LeadingComment, LetDeclaration, Lexer, LiteralArray, LiteralArrayExpr, LiteralExpr, LiteralMap, LiteralMapExpr, LiteralPrimitive, LocalizedString, MapType, MessageBundle, NONE_TYPE, NO_ERRORS_SCHEMA, NodeWithI18n, NonNullAssert, NotExpr, ParseError, ParseErrorLevel, ParseLocation, ParseSourceFile, ParseSourceSpan, ParseSpan, ParseTreeResult, ParsedEvent, ParsedEventType, ParsedProperty, ParsedPropertyType, ParsedVariable, Parser$1 as Parser, ParserError, PrefixNot, PropertyRead, PropertyWrite, R3BoundTarget, Identifiers as R3Identifiers, R3NgModuleMetadataKind, R3SelectorScopeMode, R3TargetBinder, R3TemplateDependencyKind, ReadKeyExpr, ReadPropExpr, ReadVarExpr, RecursiveAstVisitor, RecursiveVisitor, ResourceLoader, ReturnStatement, STRING_TYPE, SafeCall, SafeKeyedRead, SafePropertyRead, SelectorContext, SelectorListContext, SelectorMatcher, Serializer, SplitInterpolation, Statement, StmtModifier, TagContentType, TaggedTemplateExpr, TemplateBindingParseResult, TemplateLiteral, TemplateLiteralElement, Text, ThisReceiver, BlockNode as TmplAstBlockNode, BoundAttribute as TmplAstBoundAttribute, BoundDeferredTrigger as TmplAstBoundDeferredTrigger, BoundEvent as TmplAstBoundEvent, BoundText as TmplAstBoundText, Content as TmplAstContent, DeferredBlock as TmplAstDeferredBlock, DeferredBlockError as TmplAstDeferredBlockError, DeferredBlockLoading as TmplAstDeferredBlockLoading, DeferredBlockPlaceholder as TmplAstDeferredBlockPlaceholder, DeferredTrigger as TmplAstDeferredTrigger, Element$1 as TmplAstElement, ForLoopBlock as TmplAstForLoopBlock, ForLoopBlockEmpty as TmplAstForLoopBlockEmpty, HoverDeferredTrigger as TmplAstHoverDeferredTrigger, Icu$1 as TmplAstIcu, IdleDeferredTrigger as TmplAstIdleDeferredTrigger, IfBlock as TmplAstIfBlock, IfBlockBranch as TmplAstIfBlockBranch, ImmediateDeferredTrigger as TmplAstImmediateDeferredTrigger, InteractionDeferredTrigger as TmplAstInteractionDeferredTrigger, LetDeclaration$1 as TmplAstLetDeclaration, RecursiveVisitor$1 as TmplAstRecursiveVisitor, Reference as TmplAstReference, SwitchBlock as TmplAstSwitchBlock, SwitchBlockCase as TmplAstSwitchBlockCase, Template as TmplAstTemplate, Text$3 as TmplAstText, TextAttribute as TmplAstTextAttribute, TimerDeferredTrigger as TmplAstTimerDeferredTrigger, UnknownBlock as TmplAstUnknownBlock, Variable as TmplAstVariable, ViewportDeferredTrigger as TmplAstViewportDeferredTrigger, Token, TokenType, TransplantedType, TreeError, Type, TypeModifier, TypeofExpr, Unary, UnaryOperator, UnaryOperatorExpr, VERSION, VariableBinding, Version, ViewEncapsulation, WrappedNodeExpr, WriteKeyExpr, WritePropExpr, WriteVarExpr, Xliff, Xliff2, Xmb, XmlParser, Xtb, compileClassDebugInfo, compileClassMetadata, compileComponentClassMetadata, compileComponentDeclareClassMetadata, compileComponentFromMetadata, compileDeclareClassMetadata, compileDeclareComponentFromMetadata, compileDeclareDirectiveFromMetadata, compileDeclareFactoryFunction, compileDeclareInjectableFromMetadata, compileDeclareInjectorFromMetadata, compileDeclareNgModuleFromMetadata, compileDeclarePipeFromMetadata, compileDeferResolverFunction, compileDirectiveFromMetadata, compileFactoryFunction, compileInjectable, compileInjector, compileNgModule, compileOpaqueAsyncClassMetadata, compilePipeFromMetadata, computeMsgId, core, createCssSelectorFromNode, createInjectableType, createMayBeForwardRefExpression, devOnlyGuardedExpression, emitDistinctChangesOnlyDefaultValue, encapsulateStyle, getHtmlTagDefinition, getNsPrefix, getSafePropertyAccessString, identifierName, isIdentifier, isNgContainer, isNgContent, isNgTemplate, jsDocComment, leadingComment, literal, literalMap, makeBindingParser, mergeNsAndName, output_ast as outputAst, parseHostBindings, parseTemplate, preserveWhitespacesDefault, publishFacade, r3JitTypeSourceSpan, sanitizeIdentifier, splitNsName, visitAll$1 as tmplAstVisitAll, verifyHostBindings, visitAll };
|
|
31432
31641
|
//# sourceMappingURL=compiler.mjs.map
|