@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.
Files changed (33) hide show
  1. package/esm2022/src/compiler.mjs +2 -2
  2. package/esm2022/src/i18n/extractor_merger.mjs +2 -1
  3. package/esm2022/src/i18n/i18n_parser.mjs +4 -1
  4. package/esm2022/src/i18n/serializers/xliff.mjs +3 -1
  5. package/esm2022/src/i18n/serializers/xliff2.mjs +3 -1
  6. package/esm2022/src/i18n/serializers/xtb.mjs +3 -1
  7. package/esm2022/src/ml_parser/ast.mjs +14 -1
  8. package/esm2022/src/ml_parser/html_whitespaces.mjs +4 -1
  9. package/esm2022/src/ml_parser/icu_ast_expander.mjs +4 -1
  10. package/esm2022/src/ml_parser/lexer.mjs +83 -2
  11. package/esm2022/src/ml_parser/parser.mjs +57 -4
  12. package/esm2022/src/ml_parser/tokens.mjs +1 -1
  13. package/esm2022/src/ml_parser/xml_parser.mjs +3 -3
  14. package/esm2022/src/render3/partial/class_metadata.mjs +2 -2
  15. package/esm2022/src/render3/partial/directive.mjs +1 -1
  16. package/esm2022/src/render3/partial/factory.mjs +1 -1
  17. package/esm2022/src/render3/partial/injectable.mjs +1 -1
  18. package/esm2022/src/render3/partial/injector.mjs +1 -1
  19. package/esm2022/src/render3/partial/ng_module.mjs +1 -1
  20. package/esm2022/src/render3/partial/pipe.mjs +1 -1
  21. package/esm2022/src/render3/r3_ast.mjs +14 -1
  22. package/esm2022/src/render3/r3_template_transform.mjs +12 -1
  23. package/esm2022/src/render3/view/i18n/meta.mjs +4 -1
  24. package/esm2022/src/render3/view/t2_api.mjs +1 -1
  25. package/esm2022/src/render3/view/t2_binder.mjs +20 -4
  26. package/esm2022/src/render3/view/template.mjs +2 -1
  27. package/esm2022/src/template/pipeline/src/ingest.mjs +4 -1
  28. package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +5 -2
  29. package/esm2022/src/version.mjs +1 -1
  30. package/fesm2022/compiler.mjs +228 -19
  31. package/fesm2022/compiler.mjs.map +1 -1
  32. package/index.d.ts +52 -11
  33. 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 !== 2) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tfZm5fb3B0aW1pemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvdHJhY2tfZm5fb3B0aW1pemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxDQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSS9COzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQW1CO0lBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRSx5RUFBeUU7Z0JBQ3pFLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLElBQUksRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUMxRSw0RUFBNEU7Z0JBQzVFLEVBQUUsQ0FBQyxTQUFT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QUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi8uLi8uLi9vdXRwdXQvb3V0cHV0X2FzdCc7XG5pbXBvcnQge0lkZW50aWZpZXJzfSBmcm9tICcuLi8uLi8uLi8uLi9yZW5kZXIzL3IzX2lkZW50aWZpZXJzJztcbmltcG9ydCAqIGFzIGlyIGZyb20gJy4uLy4uL2lyJztcblxuaW1wb3J0IHR5cGUge0NvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogYHRyYWNrYCBmdW5jdGlvbnMgaW4gYGZvcmAgcmVwZWF0ZXJzIGNhbiBzb21ldGltZXMgYmUgXCJvcHRpbWl6ZWQsXCIgaS5lLiB0cmFuc2Zvcm1lZCBpbnRvIGlubGluZVxuICogZXhwcmVzc2lvbnMsIGluIGxpZXUgb2YgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbC4gRm9yIGV4YW1wbGUsIHRyYWNraW5nIGJ5IGAkaW5kZXhgIGNhbiBiZSBiZVxuICogb3B0aW1pemVkIGludG8gYW4gaW5saW5lIGB0cmFja0J5SW5kZXhgIHJlZmVyZW5jZS4gVGhpcyBwaGFzZSBjaGVja3MgdHJhY2sgZXhwcmVzc2lvbnMgZm9yXG4gKiBvcHRpbWl6YWJsZSBjYXNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGltaXplVHJhY2tGbnMoam9iOiBDb21waWxhdGlvbkpvYik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHVuaXQgb2Ygam9iLnVuaXRzKSB7XG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5SZXBlYXRlckNyZWF0ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcC50cmFjayBpbnN0YW5jZW9mIG8uUmVhZFZhckV4cHIgJiYgb3AudHJhY2submFtZSA9PT0gJyRpbmRleCcpIHtcbiAgICAgICAgLy8gVG9wLWxldmVsIGFjY2VzcyBvZiBgJGluZGV4YCB1c2VzIHRoZSBidWlsdCBpbiBgcmVwZWF0ZXJUcmFja0J5SW5kZXhgLlxuICAgICAgICBvcC50cmFja0J5Rm4gPSBvLmltcG9ydEV4cHIoSWRlbnRpZmllcnMucmVwZWF0ZXJUcmFja0J5SW5kZXgpO1xuICAgICAgfSBlbHNlIGlmIChvcC50cmFjayBpbnN0YW5jZW9mIG8uUmVhZFZhckV4cHIgJiYgb3AudHJhY2submFtZSA9PT0gJyRpdGVtJykge1xuICAgICAgICAvLyBUb3AtbGV2ZWwgYWNjZXNzIG9mIHRoZSBpdGVtIHVzZXMgdGhlIGJ1aWx0IGluIGByZXBlYXRlclRyYWNrQnlJZGVudGl0eWAuXG4gICAgICAgIG9wLnRyYWNrQnlGbiA9IG8uaW1wb3J0RXhwcihJZGVudGlmaWVycy5yZXBlYXRlclRyYWNrQnlJZGVudGl0eSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhY2tCeUZ1bmN0aW9uQ2FsbChqb2Iucm9vdC54cmVmLCBvcC50cmFjaykpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgZnVuY3Rpb24gYXMgdXNpbmcgdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBwbGF5IGl0IHNhZmVcbiAgICAgICAgLy8gc2luY2UgdGhlIG1ldGhvZCBtaWdodCBiZSB1c2luZyBgdGhpc2AgaW50ZXJuYWxseSAoc2VlICM1MzYyOCkuXG4gICAgICAgIG9wLnVzZXNDb21wb25lbnRJbnN0YW5jZSA9IHRydWU7XG5cbiAgICAgICAgLy8gVG9wLWxldmVsIG1ldGhvZCBjYWxscyBpbiB0aGUgZm9ybSBvZiBgZm4oJGluZGV4LCBpdGVtKWAgY2FuIGJlIHBhc3NlZCBpbiBkaXJlY3RseS5cbiAgICAgICAgaWYgKG9wLnRyYWNrLnJlY2VpdmVyLnJlY2VpdmVyLnZpZXcgPT09IHVuaXQueHJlZikge1xuICAgICAgICAgIC8vIFRPRE86IHRoaXMgbWF5IGJlIHdyb25nXG4gICAgICAgICAgb3AudHJhY2tCeUZuID0gb3AudHJhY2sucmVjZWl2ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHBsYWluIG1ldGhvZCBjYWxsLCBidXQgbm90IGluIHRoZSBjb21wb25lbnQncyByb290IHZpZXcuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBnZXQgdGhlIGNvbXBvbmVudCBpbnN0YW5jZSwgYW5kIHRoZW4gY2FsbCB0aGUgbWV0aG9kIG9uIGl0LlxuICAgICAgICAgIG9wLnRyYWNrQnlGbiA9IG9cbiAgICAgICAgICAgIC5pbXBvcnRFeHByKElkZW50aWZpZXJzLmNvbXBvbmVudEluc3RhbmNlKVxuICAgICAgICAgICAgLmNhbGxGbihbXSlcbiAgICAgICAgICAgIC5wcm9wKG9wLnRyYWNrLnJlY2VpdmVyLm5hbWUpO1xuICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGNvbnRleHQgaXMgbm90IGF2YWlhYmxlICh3aXRob3V0IGEgc3BlY2lhbCBmdW5jdGlvbiksIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBpdCBsYXRlci4gTGV0J3MgZ2V0IHJpZCBvZiBpdCBieSBvdmVyd3JpdGluZyB0aGUgb3JpZ2luYWwgdHJhY2tcbiAgICAgICAgICAvLyBleHByZXNzaW9uICh3aGljaCB3b24ndCBiZSB1c2VkIGFueXdheSkuXG4gICAgICAgICAgb3AudHJhY2sgPSBvcC50cmFja0J5Rm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB0cmFjayBmdW5jdGlvbiBjb3VsZCBub3QgYmUgb3B0aW1pemVkLlxuICAgICAgICAvLyBSZXBsYWNlIGNvbnRleHQgcmVhZHMgd2l0aCBhIHNwZWNpYWwgSVIgZXhwcmVzc2lvbiwgc2luY2UgY29udGV4dCByZWFkcyBpbiBhIHRyYWNrXG4gICAgICAgIC8vIGZ1bmN0aW9uIGFyZSBlbWl0dGVkIHNwZWNpYWxseS5cbiAgICAgICAgb3AudHJhY2sgPSBpci50cmFuc2Zvcm1FeHByZXNzaW9uc0luRXhwcmVzc2lvbihcbiAgICAgICAgICBvcC50cmFjayxcbiAgICAgICAgICAoZXhwcikgPT4ge1xuICAgICAgICAgICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBpci5Db250ZXh0RXhwcikge1xuICAgICAgICAgICAgICBvcC51c2VzQ29tcG9uZW50SW5zdGFuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IGlyLlRyYWNrQ29udGV4dEV4cHIoZXhwci52aWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXIuVmlzaXRvckNvbnRleHRGbGFnLk5vbmUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVHJhY2tCeUZ1bmN0aW9uQ2FsbChcbiAgcm9vdFZpZXc6IGlyLlhyZWZJZCxcbiAgZXhwcjogby5FeHByZXNzaW9uLFxuKTogZXhwciBpcyBvLkludm9rZUZ1bmN0aW9uRXhwciAmIHtcbiAgcmVjZWl2ZXI6IG8uUmVhZFByb3BFeHByICYge1xuICAgIHJlY2VpdmVyOiBpci5Db250ZXh0RXhwcjtcbiAgfTtcbn0ge1xuICBpZiAoIShleHByIGluc3RhbmNlb2Ygby5JbnZva2VGdW5jdGlvbkV4cHIpIHx8IGV4cHIuYXJncy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgIShcbiAgICAgIGV4cHIucmVjZWl2ZXIgaW5zdGFuY2VvZiBvLlJlYWRQcm9wRXhwciAmJiBleHByLnJlY2VpdmVyLnJlY2VpdmVyIGluc3RhbmNlb2YgaXIuQ29udGV4dEV4cHJcbiAgICApIHx8XG4gICAgZXhwci5yZWNlaXZlci5yZWNlaXZlci52aWV3ICE9PSByb290Vmlld1xuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbYXJnMCwgYXJnMV0gPSBleHByLmFyZ3M7XG4gIGlmICghKGFyZzAgaW5zdGFuY2VvZiBvLlJlYWRWYXJFeHByKSB8fCBhcmcwLm5hbWUgIT09ICckaW5kZXgnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghKGFyZzEgaW5zdGFuY2VvZiBvLlJlYWRWYXJFeHByKSB8fCBhcmcxLm5hbWUgIT09ICckaXRlbScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tfZm5fb3B0aW1pemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvdHJhY2tfZm5fb3B0aW1pemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxDQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSS9COzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQW1CO0lBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QyxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRSx5RUFBeUU7Z0JBQ3pFLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLElBQUksRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUMxRSw0RUFBNEU7Z0JBQzVFLEVBQUUsQ0FBQyxTQUFT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Q2QsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUM5RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi8uLi8uLi9vdXRwdXQvb3V0cHV0X2FzdCc7XG5pbXBvcnQge0lkZW50aWZpZXJzfSBmcm9tICcuLi8uLi8uLi8uLi9yZW5kZXIzL3IzX2lkZW50aWZpZXJzJztcbmltcG9ydCAqIGFzIGlyIGZyb20gJy4uLy4uL2lyJztcblxuaW1wb3J0IHR5cGUge0NvbXBpbGF0aW9uSm9ifSBmcm9tICcuLi9jb21waWxhdGlvbic7XG5cbi8qKlxuICogYHRyYWNrYCBmdW5jdGlvbnMgaW4gYGZvcmAgcmVwZWF0ZXJzIGNhbiBzb21ldGltZXMgYmUgXCJvcHRpbWl6ZWQsXCIgaS5lLiB0cmFuc2Zvcm1lZCBpbnRvIGlubGluZVxuICogZXhwcmVzc2lvbnMsIGluIGxpZXUgb2YgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbC4gRm9yIGV4YW1wbGUsIHRyYWNraW5nIGJ5IGAkaW5kZXhgIGNhbiBiZSBiZVxuICogb3B0aW1pemVkIGludG8gYW4gaW5saW5lIGB0cmFja0J5SW5kZXhgIHJlZmVyZW5jZS4gVGhpcyBwaGFzZSBjaGVja3MgdHJhY2sgZXhwcmVzc2lvbnMgZm9yXG4gKiBvcHRpbWl6YWJsZSBjYXNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGltaXplVHJhY2tGbnMoam9iOiBDb21waWxhdGlvbkpvYik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHVuaXQgb2Ygam9iLnVuaXRzKSB7XG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5SZXBlYXRlckNyZWF0ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcC50cmFjayBpbnN0YW5jZW9mIG8uUmVhZFZhckV4cHIgJiYgb3AudHJhY2submFtZSA9PT0gJyRpbmRleCcpIHtcbiAgICAgICAgLy8gVG9wLWxldmVsIGFjY2VzcyBvZiBgJGluZGV4YCB1c2VzIHRoZSBidWlsdCBpbiBgcmVwZWF0ZXJUcmFja0J5SW5kZXhgLlxuICAgICAgICBvcC50cmFja0J5Rm4gPSBvLmltcG9ydEV4cHIoSWRlbnRpZmllcnMucmVwZWF0ZXJUcmFja0J5SW5kZXgpO1xuICAgICAgfSBlbHNlIGlmIChvcC50cmFjayBpbnN0YW5jZW9mIG8uUmVhZFZhckV4cHIgJiYgb3AudHJhY2submFtZSA9PT0gJyRpdGVtJykge1xuICAgICAgICAvLyBUb3AtbGV2ZWwgYWNjZXNzIG9mIHRoZSBpdGVtIHVzZXMgdGhlIGJ1aWx0IGluIGByZXBlYXRlclRyYWNrQnlJZGVudGl0eWAuXG4gICAgICAgIG9wLnRyYWNrQnlGbiA9IG8uaW1wb3J0RXhwcihJZGVudGlmaWVycy5yZXBlYXRlclRyYWNrQnlJZGVudGl0eSk7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhY2tCeUZ1bmN0aW9uQ2FsbChqb2Iucm9vdC54cmVmLCBvcC50cmFjaykpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgZnVuY3Rpb24gYXMgdXNpbmcgdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBwbGF5IGl0IHNhZmVcbiAgICAgICAgLy8gc2luY2UgdGhlIG1ldGhvZCBtaWdodCBiZSB1c2luZyBgdGhpc2AgaW50ZXJuYWxseSAoc2VlICM1MzYyOCkuXG4gICAgICAgIG9wLnVzZXNDb21wb25lbnRJbnN0YW5jZSA9IHRydWU7XG5cbiAgICAgICAgLy8gVG9wLWxldmVsIG1ldGhvZCBjYWxscyBpbiB0aGUgZm9ybSBvZiBgZm4oJGluZGV4LCBpdGVtKWAgY2FuIGJlIHBhc3NlZCBpbiBkaXJlY3RseS5cbiAgICAgICAgaWYgKG9wLnRyYWNrLnJlY2VpdmVyLnJlY2VpdmVyLnZpZXcgPT09IHVuaXQueHJlZikge1xuICAgICAgICAgIC8vIFRPRE86IHRoaXMgbWF5IGJlIHdyb25nXG4gICAgICAgICAgb3AudHJhY2tCeUZuID0gb3AudHJhY2sucmVjZWl2ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHBsYWluIG1ldGhvZCBjYWxsLCBidXQgbm90IGluIHRoZSBjb21wb25lbnQncyByb290IHZpZXcuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBnZXQgdGhlIGNvbXBvbmVudCBpbnN0YW5jZSwgYW5kIHRoZW4gY2FsbCB0aGUgbWV0aG9kIG9uIGl0LlxuICAgICAgICAgIG9wLnRyYWNrQnlGbiA9IG9cbiAgICAgICAgICAgIC5pbXBvcnRFeHByKElkZW50aWZpZXJzLmNvbXBvbmVudEluc3RhbmNlKVxuICAgICAgICAgICAgLmNhbGxGbihbXSlcbiAgICAgICAgICAgIC5wcm9wKG9wLnRyYWNrLnJlY2VpdmVyLm5hbWUpO1xuICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGNvbnRleHQgaXMgbm90IGF2YWlhYmxlICh3aXRob3V0IGEgc3BlY2lhbCBmdW5jdGlvbiksIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBpdCBsYXRlci4gTGV0J3MgZ2V0IHJpZCBvZiBpdCBieSBvdmVyd3JpdGluZyB0aGUgb3JpZ2luYWwgdHJhY2tcbiAgICAgICAgICAvLyBleHByZXNzaW9uICh3aGljaCB3b24ndCBiZSB1c2VkIGFueXdheSkuXG4gICAgICAgICAgb3AudHJhY2sgPSBvcC50cmFja0J5Rm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB0cmFjayBmdW5jdGlvbiBjb3VsZCBub3QgYmUgb3B0aW1pemVkLlxuICAgICAgICAvLyBSZXBsYWNlIGNvbnRleHQgcmVhZHMgd2l0aCBhIHNwZWNpYWwgSVIgZXhwcmVzc2lvbiwgc2luY2UgY29udGV4dCByZWFkcyBpbiBhIHRyYWNrXG4gICAgICAgIC8vIGZ1bmN0aW9uIGFyZSBlbWl0dGVkIHNwZWNpYWxseS5cbiAgICAgICAgb3AudHJhY2sgPSBpci50cmFuc2Zvcm1FeHByZXNzaW9uc0luRXhwcmVzc2lvbihcbiAgICAgICAgICBvcC50cmFjayxcbiAgICAgICAgICAoZXhwcikgPT4ge1xuICAgICAgICAgICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBpci5Db250ZXh0RXhwcikge1xuICAgICAgICAgICAgICBvcC51c2VzQ29tcG9uZW50SW5zdGFuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IGlyLlRyYWNrQ29udGV4dEV4cHIoZXhwci52aWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXIuVmlzaXRvckNvbnRleHRGbGFnLk5vbmUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVHJhY2tCeUZ1bmN0aW9uQ2FsbChcbiAgcm9vdFZpZXc6IGlyLlhyZWZJZCxcbiAgZXhwcjogby5FeHByZXNzaW9uLFxuKTogZXhwciBpcyBvLkludm9rZUZ1bmN0aW9uRXhwciAmIHtcbiAgcmVjZWl2ZXI6IG8uUmVhZFByb3BFeHByICYge1xuICAgIHJlY2VpdmVyOiBpci5Db250ZXh0RXhwcjtcbiAgfTtcbn0ge1xuICBpZiAoIShleHByIGluc3RhbmNlb2Ygby5JbnZva2VGdW5jdGlvbkV4cHIpIHx8IGV4cHIuYXJncy5sZW5ndGggPT09IDAgfHwgZXhwci5hcmdzLmxlbmd0aCA+IDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgIShcbiAgICAgIGV4cHIucmVjZWl2ZXIgaW5zdGFuY2VvZiBvLlJlYWRQcm9wRXhwciAmJiBleHByLnJlY2VpdmVyLnJlY2VpdmVyIGluc3RhbmNlb2YgaXIuQ29udGV4dEV4cHJcbiAgICApIHx8XG4gICAgZXhwci5yZWNlaXZlci5yZWNlaXZlci52aWV3ICE9PSByb290Vmlld1xuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbYXJnMCwgYXJnMV0gPSBleHByLmFyZ3M7XG4gIGlmICghKGFyZzAgaW5zdGFuY2VvZiBvLlJlYWRWYXJFeHByKSB8fCBhcmcwLm5hbWUgIT09ICckaW5kZXgnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGV4cHIuYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIShhcmcxIGluc3RhbmNlb2Ygby5SZWFkVmFyRXhwcikgfHwgYXJnMS5uYW1lICE9PSAnJGl0ZW0nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19
@@ -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.0');
14
+ export const VERSION = new Version('18.0.2');
15
15
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQG1vZHVsZVxuICogQGRlc2NyaXB0aW9uXG4gKiBFbnRyeSBwb2ludCBmb3IgYWxsIHB1YmxpYyBBUElzIG9mIHRoZSBjb21waWxlciBwYWNrYWdlLlxuICovXG5cbmltcG9ydCB7VmVyc2lvbn0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBuZXcgVmVyc2lvbignMC4wLjAtUExBQ0VIT0xERVInKTtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v18.0.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(29 /* TokenType.EOF */);
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 !== 29 /* TokenType.EOF */) {
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: 29 /* TokenType.EOF */, parts: [], sourceSpan: end.sourceSpan });
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 === 29 /* TokenType.EOF */) {
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 !== 2) {
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
- let target = this.scope.lookup(name);
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.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.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.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.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.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.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.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.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.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