@angular/compiler-cli 12.2.3 → 12.2.4

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.
@@ -165,6 +165,15 @@
165
165
  * ```
166
166
  */
167
167
  ErrorCode[ErrorCode["INVALID_BANANA_IN_BOX"] = 8101] = "INVALID_BANANA_IN_BOX";
168
+ /**
169
+ * The left side of a nullish coalescing operation is not nullable.
170
+ *
171
+ * ```
172
+ * {{ foo ?? bar }}
173
+ * ```
174
+ * When the type of foo doesn't include `null` or `undefined`.
175
+ */
176
+ ErrorCode[ErrorCode["NULLISH_COALESCING_NOT_NULLABLE"] = 8102] = "NULLISH_COALESCING_NOT_NULLABLE";
168
177
  /**
169
178
  * The template type-checking engine would need to generate an inline type check block for a
170
179
  * component, but the current type-checking environment doesn't support it.
@@ -223,4 +232,4 @@
223
232
  }
224
233
  exports.ngErrorCode = ngErrorCode;
225
234
  });
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JfY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZGlhZ25vc3RpY3Mvc3JjL2Vycm9yX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUg7O09BRUc7SUFDSCxJQUFZLFNBOE1YO0lBOU1ELFdBQVksU0FBUztRQUNuQixzRkFBZ0MsQ0FBQTtRQUNoQyw4RUFBNEIsQ0FBQTtRQUM1Qiw0RUFBMkIsQ0FBQTtRQUMzQiw0RkFBbUMsQ0FBQTtRQUNuQyw0RUFBMkIsQ0FBQTtRQUUzQjs7V0FFRztRQUNILDBFQUEwQixDQUFBO1FBRTFCLDRFQUEyQixDQUFBO1FBQzNCLHNFQUF3QixDQUFBO1FBRXhCLHdGQUFpQyxDQUFBO1FBQ2pDLHNFQUF3QixDQUFBO1FBQ3hCLDBFQUEwQixDQUFBO1FBQzFCLHdGQUFpQyxDQUFBO1FBRWpDLDhGQUE4RjtRQUM5Riw0RUFBMkIsQ0FBQTtRQUUzQjs7O1dBR0c7UUFDSCwwR0FBMEMsQ0FBQTtRQUUxQzs7O1dBR0c7UUFDSCxvSEFBK0MsQ0FBQTtRQUUvQzs7O1dBR0c7UUFDSCw0RkFBbUMsQ0FBQTtRQUVuQzs7O1dBR0c7UUFDSCw4R0FBNEMsQ0FBQTtRQUU1QywwRUFBMEIsQ0FBQTtRQUMxQiw0R0FBMkMsQ0FBQTtRQUMzQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1QiwwRkFBa0MsQ0FBQTtRQUNsQyxrSkFBOEQsQ0FBQTtRQUU5RDs7O1dBR0c7UUFDSCxvRkFBK0IsQ0FBQTtRQUUvQjs7V0FFRztRQUNILDRFQUEyQixDQUFBO1FBRTNCOztXQUVHO1FBQ0gsNEZBQW1DLENBQUE7UUFFbkM7O1dBRUc7UUFDSCxrRkFBOEIsQ0FBQTtRQUU5Qjs7V0FFRztRQUNILGtGQUE4QixDQUFBO1FBRTlCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOzs7V0FHRztRQUNILGdJQUFxRCxDQUFBO1FBRXJEOzs7V0FHRztRQUNILG9HQUF1QyxDQUFBO1FBRXZDOztXQUVHO1FBQ0gsa0dBQXNDLENBQUE7UUFFdEM7OztXQUdHO1FBQ0gsc0dBQXdDLENBQUE7UUFFeEM7O1dBRUc7UUFDSCxnRkFBNkIsQ0FBQTtRQUU3Qjs7V0FFRztRQUNILG9GQUErQixDQUFBO1FBRS9COztXQUVHO1FBQ0gsb0ZBQStCLENBQUE7UUFFL0I7O1dBRUc7UUFDSCw0REFBbUIsQ0FBQTtRQUVuQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILDBGQUFrQyxDQUFBO1FBRWxDOzs7Ozs7O1dBT0c7UUFDSCxnR0FBcUMsQ0FBQTtRQUVyQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1Qjs7Ozs7OztXQU9HO1FBQ0gsOEVBQTRCLENBQUE7UUFFNUI7OztXQUdHO1FBQ0gsMEVBQTBCLENBQUE7UUFFMUI7OztXQUdHO1FBQ0gsc0ZBQWdDLENBQUE7UUFFaEM7O1dBRUc7UUFDSCxzRkFBZ0MsQ0FBQTtRQUVoQyw0RUFBNEU7UUFDNUUsaUdBQWlHO1FBQ2pHLHNGQUFzRjtRQUV0Rjs7O1dBR0c7UUFDSCxxRkFBZ0MsQ0FBQTtRQUVoQzs7OztXQUlHO1FBQ0gsdUdBQXlDLENBQUE7SUFDM0MsQ0FBQyxFQTlNVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQThNcEI7SUFFRDs7Ozs7T0FLRztJQUNVLFFBQUEsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUM7SUFFdkU7Ozs7T0FJRztJQUNVLFFBQUEsMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDakQsU0FBUyxDQUFDLHlCQUF5QjtRQUNuQyxTQUFTLENBQUMscUJBQXFCO1FBQy9CLFNBQVMsQ0FBQyxtQkFBbUI7UUFDN0IsU0FBUyxDQUFDLHNCQUFzQjtRQUNoQyxTQUFTLENBQUMsd0JBQXdCO1FBQ2xDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLHFDQUFxQztLQUNoRCxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFlO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRkQsa0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBlbnVtIEVycm9yQ29kZSB7XG4gIERFQ09SQVRPUl9BUkdfTk9UX0xJVEVSQUwgPSAxMDAxLFxuICBERUNPUkFUT1JfQVJJVFlfV1JPTkcgPSAxMDAyLFxuICBERUNPUkFUT1JfTk9UX0NBTExFRCA9IDEwMDMsXG4gIERFQ09SQVRPUl9PTl9BTk9OWU1PVVNfQ0xBU1MgPSAxMDA0LFxuICBERUNPUkFUT1JfVU5FWFBFQ1RFRCA9IDEwMDUsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgaW5jb21wYXRpYmxlIGRlY29yYXRvcnMgb24gYSB0eXBlIG9yIGEgY2xhc3MgZmllbGQuXG4gICAqL1xuICBERUNPUkFUT1JfQ09MTElTSU9OID0gMTAwNixcblxuICBWQUxVRV9IQVNfV1JPTkdfVFlQRSA9IDEwMTAsXG4gIFZBTFVFX05PVF9MSVRFUkFMID0gMTAxMSxcblxuICBDT01QT05FTlRfTUlTU0lOR19URU1QTEFURSA9IDIwMDEsXG4gIFBJUEVfTUlTU0lOR19OQU1FID0gMjAwMixcbiAgUEFSQU1fTUlTU0lOR19UT0tFTiA9IDIwMDMsXG4gIERJUkVDVElWRV9NSVNTSU5HX1NFTEVDVE9SID0gMjAwNCxcblxuICAvKiogUmFpc2VkIHdoZW4gYW4gdW5kZWNvcmF0ZWQgY2xhc3MgaXMgcGFzc2VkIGluIGFzIGEgcHJvdmlkZXIgdG8gYSBtb2R1bGUgb3IgYSBkaXJlY3RpdmUuICovXG4gIFVOREVDT1JBVEVEX1BST1ZJREVSID0gMjAwNSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBEaXJlY3RpdmUgaW5oZXJpdHMgaXRzIGNvbnN0cnVjdG9yIGZyb20gYSBiYXNlIGNsYXNzIHdpdGhvdXQgYW4gQW5ndWxhclxuICAgKiBkZWNvcmF0b3IuXG4gICAqL1xuICBESVJFQ1RJVkVfSU5IRVJJVFNfVU5ERUNPUkFURURfQ1RPUiA9IDIwMDYsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIHVuZGVjb3JhdGVkIGNsYXNzIHRoYXQgaXMgdXNpbmcgQW5ndWxhciBmZWF0dXJlc1xuICAgKiBoYXMgYmVlbiBkaXNjb3ZlcmVkLlxuICAgKi9cbiAgVU5ERUNPUkFURURfQ0xBU1NfVVNJTkdfQU5HVUxBUl9GRUFUVVJFUyA9IDIwMDcsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIGNvbXBvbmVudCBjYW5ub3QgcmVzb2x2ZSBhbiBleHRlcm5hbCByZXNvdXJjZSwgc3VjaCBhcyBhIHRlbXBsYXRlIG9yIGEgc3R5bGVcbiAgICogc2hlZXQuXG4gICAqL1xuICBDT01QT05FTlRfUkVTT1VSQ0VfTk9UX0ZPVU5EID0gMjAwOCxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBjb21wb25lbnQgdXNlcyBgU2hhZG93RG9tYCB2aWV3IGVuY2Fwc3VsYXRpb24sIGJ1dCBpdHMgc2VsZWN0b3JcbiAgICogZG9lcyBub3QgbWF0Y2ggdGhlIHNoYWRvdyBET00gdGFnIG5hbWUgcmVxdWlyZW1lbnRzLlxuICAgKi9cbiAgQ09NUE9ORU5UX0lOVkFMSURfU0hBRE9XX0RPTV9TRUxFQ1RPUiA9IDIwMDksXG5cbiAgU1lNQk9MX05PVF9FWFBPUlRFRCA9IDMwMDEsXG4gIFNZTUJPTF9FWFBPUlRFRF9VTkRFUl9ESUZGRVJFTlRfTkFNRSA9IDMwMDIsXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcmVjdGl2ZXMgYW5kL29yIHBpcGVzIHdvdWxkIGNhdXNlIGEgY3ljbGljIGltcG9ydCB0byBiZVxuICAgKiBjcmVhdGVkIHRoYXQgY2Fubm90IGJlIGhhbmRsZWQsIHN1Y2ggYXMgaW4gcGFydGlhbCBjb21waWxhdGlvbiBtb2RlLlxuICAgKi9cbiAgSU1QT1JUX0NZQ0xFX0RFVEVDVEVEID0gMzAwMyxcblxuICBDT05GSUdfRkxBVF9NT0RVTEVfTk9fSU5ERVggPSA0MDAxLFxuICBDT05GSUdfU1RSSUNUX1RFTVBMQVRFU19JTVBMSUVTX0ZVTExfVEVNUExBVEVfVFlQRUNIRUNLID0gNDAwMixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBob3N0IGV4cHJlc3Npb24gaGFzIGEgcGFyc2UgZXJyb3IsIHN1Y2ggYXMgYSBob3N0IGxpc3RlbmVyIG9yIGhvc3QgYmluZGluZ1xuICAgKiBleHByZXNzaW9uIGNvbnRhaW5pbmcgYSBwaXBlLlxuICAgKi9cbiAgSE9TVF9CSU5ESU5HX1BBUlNFX0VSUk9SID0gNTAwMSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gdGhlIGNvbXBpbGVyIGNhbm5vdCBwYXJzZSBhIGNvbXBvbmVudCdzIHRlbXBsYXRlLlxuICAgKi9cbiAgVEVNUExBVEVfUEFSU0VfRVJST1IgPSA1MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHJlZmVyZW5jZSBpbiBgZGVjbGFyYXRpb25zYC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfREVDTEFSQVRJT04gPSA2MDAxLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHR5cGUgaW4gYGltcG9ydHNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9JTVBPUlQgPSA2MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHR5cGUgaW4gYGV4cG9ydHNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9FWFBPUlQgPSA2MDAzLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhIHR5cGUgaW4gYGV4cG9ydHNgIHdoaWNoIGlzIG5laXRoZXIgaW4gYGRlY2xhcmF0aW9uc2Agbm9yXG4gICAqIG90aGVyd2lzZSBpbXBvcnRlZC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfUkVFWFBPUlQgPSA2MDA0LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGBNb2R1bGVXaXRoUHJvdmlkZXJzYCB3aXRoIGEgbWlzc2luZ1xuICAgKiBnZW5lcmljIHR5cGUgYXJndW1lbnQgaXMgcGFzc2VkIGludG8gYW4gYE5nTW9kdWxlYC5cbiAgICovXG4gIE5HTU9EVUxFX01PRFVMRV9XSVRIX1BST1ZJREVSU19NSVNTSU5HX0dFTkVSSUMgPSA2MDA1LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBleHBvcnRzIG11bHRpcGxlIGRpcmVjdGl2ZXMvcGlwZXMgb2YgdGhlIHNhbWUgbmFtZSBhbmQgdGhlIGNvbXBpbGVyXG4gICAqIGF0dGVtcHRzIHRvIGdlbmVyYXRlIHByaXZhdGUgcmUtZXhwb3J0cyB3aXRoaW4gdGhlIE5nTW9kdWxlIGZpbGUuXG4gICAqL1xuICBOR01PRFVMRV9SRUVYUE9SVF9OQU1FX0NPTExJU0lPTiA9IDYwMDYsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgZGlyZWN0aXZlL3BpcGUgaXMgcGFydCBvZiB0aGUgZGVjbGFyYXRpb25zIG9mIHR3byBvciBtb3JlIE5nTW9kdWxlcy5cbiAgICovXG4gIE5HTU9EVUxFX0RFQ0xBUkFUSU9OX05PVF9VTklRVUUgPSA2MDA3LFxuXG4gIC8qKlxuICAgKiBOb3QgYWN0dWFsbHkgcmFpc2VkIGJ5IHRoZSBjb21waWxlciwgYnV0IHJlc2VydmVkIGZvciBkb2N1bWVudGF0aW9uIG9mIGEgVmlldyBFbmdpbmUgZXJyb3Igd2hlblxuICAgKiBhIFZpZXcgRW5naW5lIGJ1aWxkIGRlcGVuZHMgb24gYW4gSXZ5LWNvbXBpbGVkIE5nTW9kdWxlLlxuICAgKi9cbiAgTkdNT0RVTEVfVkVfREVQRU5ERU5DWV9PTl9JVllfTElCID0gNjk5OSxcblxuICAvKipcbiAgICogQW4gZWxlbWVudCBuYW1lIGZhaWxlZCB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIERPTSBzY2hlbWEuXG4gICAqL1xuICBTQ0hFTUFfSU5WQUxJRF9FTEVNRU5UID0gODAwMSxcblxuICAvKipcbiAgICogQW4gZWxlbWVudCdzIGF0dHJpYnV0ZSBuYW1lIGZhaWxlZCB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIERPTSBzY2hlbWEuXG4gICAqL1xuICBTQ0hFTUFfSU5WQUxJRF9BVFRSSUJVVEUgPSA4MDAyLFxuXG4gIC8qKlxuICAgKiBObyBtYXRjaGluZyBkaXJlY3RpdmUgd2FzIGZvdW5kIGZvciBhIGAjcmVmPVwidGFyZ2V0XCJgIGV4cHJlc3Npb24uXG4gICAqL1xuICBNSVNTSU5HX1JFRkVSRU5DRV9UQVJHRVQgPSA4MDAzLFxuXG4gIC8qKlxuICAgKiBObyBtYXRjaGluZyBwaXBlIHdhcyBmb3VuZCBmb3IgYVxuICAgKi9cbiAgTUlTU0lOR19QSVBFID0gODAwNCxcblxuICAvKipcbiAgICogVGhlIGxlZnQtaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiB3YXMgYSB0ZW1wbGF0ZSB2YXJpYWJsZS4gRWZmZWN0aXZlbHksIHRoZVxuICAgKiB0ZW1wbGF0ZSBsb29rZWQgbGlrZTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxuZy10ZW1wbGF0ZSBsZXQtc29tZXRoaW5nPlxuICAgKiAgIDxidXR0b24gKGNsaWNrKT1cInNvbWV0aGluZyA9IC4uLlwiPi4uLjwvYnV0dG9uPlxuICAgKiA8L25nLXRlbXBsYXRlPlxuICAgKiBgYGBcbiAgICpcbiAgICogVGVtcGxhdGUgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuXG4gICAqL1xuICBXUklURV9UT19SRUFEX09OTFlfVkFSSUFCTEUgPSA4MDA1LFxuXG4gIC8qKlxuICAgKiBBIHRlbXBsYXRlIHZhcmlhYmxlIHdhcyBkZWNsYXJlZCB0d2ljZS4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBpdGVtczsgbGV0IGkgPSBpbmRleFwiPlxuICAgKiA8L2Rpdj5cbiAgICogYGBgXG4gICAqL1xuICBEVVBMSUNBVEVfVkFSSUFCTEVfREVDTEFSQVRJT04gPSA4MDA2LFxuXG4gIC8qKlxuICAgKiBBIHRlbXBsYXRlIGhhcyBhIHR3byB3YXkgYmluZGluZyAodHdvIGJpbmRpbmdzIGNyZWF0ZWQgYnkgYSBzaW5nbGUgc3ludGFjdGlhbCBlbGVtZW50KVxuICAgKiBpbiB3aGljaCB0aGUgaW5wdXQgYW5kIG91dHB1dCBhcmUgZ29pbmcgdG8gZGlmZmVyZW50IHBsYWNlcy5cbiAgICovXG4gIFNQTElUX1RXT19XQVlfQklORElORyA9IDgwMDcsXG5cbiAgLyoqXG4gICAqIEEgdHdvIHdheSBiaW5kaW5nIGluIGEgdGVtcGxhdGUgaGFzIGFuIGluY29ycmVjdCBzeW50YXgsXG4gICAqIHBhcmVudGhlc2VzIG91dHNpZGUgYnJhY2tldHMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGBcbiAgICogPGRpdiAoW2Zvb10pPVwiYmFyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBJTlZBTElEX0JBTkFOQV9JTl9CT1ggPSA4MTAxLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjaGVjayBibG9jayBmb3IgYVxuICAgKiBjb21wb25lbnQsIGJ1dCB0aGUgY3VycmVudCB0eXBlLWNoZWNraW5nIGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCBpdC5cbiAgICovXG4gIElOTElORV9UQ0JfUkVRVUlSRUQgPSA4OTAwLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvciBmb3IgYVxuICAgKiBkaXJlY3RpdmUgb3IgY29tcG9uZW50LCBidXQgdGhlIGN1cnJlbnQgdHlwZS1jaGVja2luZyBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgaXQuXG4gICAqL1xuICBJTkxJTkVfVFlQRV9DVE9SX1JFUVVJUkVEID0gODkwMSxcblxuICAvKipcbiAgICogQW4gaW5qZWN0YWJsZSBhbHJlYWR5IGhhcyBhIGDJtXByb3ZgIHByb3BlcnR5LlxuICAgKi9cbiAgSU5KRUNUQUJMRV9EVVBMSUNBVEVfUFJPViA9IDkwMDEsXG5cbiAgLy8gMTBYWFggZXJyb3IgY29kZXMgYXJlIHJlc2VydmVkIGZvciBkaWFnbm9zdGljcyB3aXRoIGNhdGVnb3JpZXMgb3RoZXIgdGhhblxuICAvLyBgdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yYC4gVGhlc2UgZGlhZ25vc3RpY3MgYXJlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBjb25maWd1cmVkXG4gIC8vIHRvIGRvIHNvIGJ5IGEgdG9vbCBzdWNoIGFzIHRoZSBMYW5ndWFnZSBTZXJ2aWNlLCBvciBieSB0aGUgTGFuZ3VhZ2UgU2VydmljZSBpdHNlbGYuXG5cbiAgLyoqXG4gICAqIFN1Z2dlc3QgdXNlcnMgdG8gZW5hYmxlIGBzdHJpY3RUZW1wbGF0ZXNgIHRvIG1ha2UgdXNlIG9mIGZ1bGwgY2FwYWJpbGl0aWVzXG4gICAqIHByb3ZpZGVkIGJ5IEFuZ3VsYXIgbGFuZ3VhZ2Ugc2VydmljZS5cbiAgICovXG4gIFNVR0dFU1RfU1RSSUNUX1RFTVBMQVRFUyA9IDEwMDAxLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIHBhcnRpY3VsYXIgc3RydWN0dXJhbCBkaXJlY3RpdmUgcHJvdmlkZXMgYWR2YW5jZWQgdHlwZSBuYXJyb3dpbmdcbiAgICogZnVuY3Rpb25hbGl0eSwgYnV0IHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhbGxvdyBpdHMgdXNhZ2UgaW5cbiAgICogdHlwZSBpbmZlcmVuY2UuXG4gICAqL1xuICBTVUdHRVNUX1NVQk9QVElNQUxfVFlQRV9JTkZFUkVOQ0UgPSAxMDAwMixcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEJhc2UgVVJMIGZvciB0aGUgZXJyb3IgZGV0YWlscyBwYWdlLlxuICogS2VlcCB0aGlzIHZhbHVlIGluIHN5bmMgd2l0aCBhIHNpbWlsYXIgY29uc3QgaW5cbiAqIGBwYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2Vycm9yX2NvZGUudHNgLlxuICovXG5leHBvcnQgY29uc3QgRVJST1JfREVUQUlMU19QQUdFX0JBU0VfVVJMID0gJ2h0dHBzOi8vYW5ndWxhci5pby9lcnJvcnMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQ29udGFpbnMgYSBzZXQgb2YgZXJyb3IgbWVzc2FnZXMgdGhhdCBoYXZlIGRldGFpbGVkIGd1aWRlcyBhdCBhbmd1bGFyLmlvLlxuICogRnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBlcnJvciBndWlkZXMgY2FuIGJlIGZvdW5kIGF0IGh0dHBzOi8vYW5ndWxhci5pby9lcnJvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX0VSUk9SU19XSVRIX0dVSURFUyA9IG5ldyBTZXQoW1xuICBFcnJvckNvZGUuREVDT1JBVE9SX0FSR19OT1RfTElURVJBTCxcbiAgRXJyb3JDb2RlLklNUE9SVF9DWUNMRV9ERVRFQ1RFRCxcbiAgRXJyb3JDb2RlLlBBUkFNX01JU1NJTkdfVE9LRU4sXG4gIEVycm9yQ29kZS5TQ0hFTUFfSU5WQUxJRF9FTEVNRU5ULFxuICBFcnJvckNvZGUuU0NIRU1BX0lOVkFMSURfQVRUUklCVVRFLFxuICBFcnJvckNvZGUuTUlTU0lOR19SRUZFUkVOQ0VfVEFSR0VULFxuICBFcnJvckNvZGUuQ09NUE9ORU5UX0lOVkFMSURfU0hBRE9XX0RPTV9TRUxFQ1RPUixcbl0pO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmdFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KCctOTknICsgY29kZSk7XG59XG4iXX0=
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JfY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZGlhZ25vc3RpY3Mvc3JjL2Vycm9yX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUg7O09BRUc7SUFDSCxJQUFZLFNBd05YO0lBeE5ELFdBQVksU0FBUztRQUNuQixzRkFBZ0MsQ0FBQTtRQUNoQyw4RUFBNEIsQ0FBQTtRQUM1Qiw0RUFBMkIsQ0FBQTtRQUMzQiw0RkFBbUMsQ0FBQTtRQUNuQyw0RUFBMkIsQ0FBQTtRQUUzQjs7V0FFRztRQUNILDBFQUEwQixDQUFBO1FBRTFCLDRFQUEyQixDQUFBO1FBQzNCLHNFQUF3QixDQUFBO1FBRXhCLHdGQUFpQyxDQUFBO1FBQ2pDLHNFQUF3QixDQUFBO1FBQ3hCLDBFQUEwQixDQUFBO1FBQzFCLHdGQUFpQyxDQUFBO1FBRWpDLDhGQUE4RjtRQUM5Riw0RUFBMkIsQ0FBQTtRQUUzQjs7O1dBR0c7UUFDSCwwR0FBMEMsQ0FBQTtRQUUxQzs7O1dBR0c7UUFDSCxvSEFBK0MsQ0FBQTtRQUUvQzs7O1dBR0c7UUFDSCw0RkFBbUMsQ0FBQTtRQUVuQzs7O1dBR0c7UUFDSCw4R0FBNEMsQ0FBQTtRQUU1QywwRUFBMEIsQ0FBQTtRQUMxQiw0R0FBMkMsQ0FBQTtRQUMzQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1QiwwRkFBa0MsQ0FBQTtRQUNsQyxrSkFBOEQsQ0FBQTtRQUU5RDs7O1dBR0c7UUFDSCxvRkFBK0IsQ0FBQTtRQUUvQjs7V0FFRztRQUNILDRFQUEyQixDQUFBO1FBRTNCOztXQUVHO1FBQ0gsNEZBQW1DLENBQUE7UUFFbkM7O1dBRUc7UUFDSCxrRkFBOEIsQ0FBQTtRQUU5Qjs7V0FFRztRQUNILGtGQUE4QixDQUFBO1FBRTlCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOzs7V0FHRztRQUNILGdJQUFxRCxDQUFBO1FBRXJEOzs7V0FHRztRQUNILG9HQUF1QyxDQUFBO1FBRXZDOztXQUVHO1FBQ0gsa0dBQXNDLENBQUE7UUFFdEM7OztXQUdHO1FBQ0gsc0dBQXdDLENBQUE7UUFFeEM7O1dBRUc7UUFDSCxnRkFBNkIsQ0FBQTtRQUU3Qjs7V0FFRztRQUNILG9GQUErQixDQUFBO1FBRS9COztXQUVHO1FBQ0gsb0ZBQStCLENBQUE7UUFFL0I7O1dBRUc7UUFDSCw0REFBbUIsQ0FBQTtRQUVuQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILDBGQUFrQyxDQUFBO1FBRWxDOzs7Ozs7O1dBT0c7UUFDSCxnR0FBcUMsQ0FBQTtRQUVyQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1Qjs7Ozs7OztXQU9HO1FBQ0gsOEVBQTRCLENBQUE7UUFFNUI7Ozs7Ozs7V0FPRztRQUNILGtHQUFzQyxDQUFBO1FBRXRDOzs7V0FHRztRQUNILDBFQUEwQixDQUFBO1FBRTFCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOztXQUVHO1FBQ0gsc0ZBQWdDLENBQUE7UUFFaEMsNEVBQTRFO1FBQzVFLGlHQUFpRztRQUNqRyxzRkFBc0Y7UUFFdEY7OztXQUdHO1FBQ0gscUZBQWdDLENBQUE7UUFFaEM7Ozs7V0FJRztRQUNILHVHQUF5QyxDQUFBO0lBQzNDLENBQUMsRUF4TlcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUF3TnBCO0lBRUQ7Ozs7O09BS0c7SUFDVSxRQUFBLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO0lBRXZFOzs7O09BSUc7SUFDVSxRQUFBLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ2pELFNBQVMsQ0FBQyx5QkFBeUI7UUFDbkMsU0FBUyxDQUFDLHFCQUFxQjtRQUMvQixTQUFTLENBQUMsbUJBQW1CO1FBQzdCLFNBQVMsQ0FBQyxzQkFBc0I7UUFDaEMsU0FBUyxDQUFDLHdCQUF3QjtRQUNsQyxTQUFTLENBQUMsd0JBQXdCO1FBQ2xDLFNBQVMsQ0FBQyxxQ0FBcUM7S0FDaEQsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxTQUFnQixXQUFXLENBQUMsSUFBZTtRQUN6QyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUZELGtDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICBERUNPUkFUT1JfQVJHX05PVF9MSVRFUkFMID0gMTAwMSxcbiAgREVDT1JBVE9SX0FSSVRZX1dST05HID0gMTAwMixcbiAgREVDT1JBVE9SX05PVF9DQUxMRUQgPSAxMDAzLFxuICBERUNPUkFUT1JfT05fQU5PTllNT1VTX0NMQVNTID0gMTAwNCxcbiAgREVDT1JBVE9SX1VORVhQRUNURUQgPSAxMDA1LFxuXG4gIC8qKlxuICAgKiBUaGlzIGVycm9yIGNvZGUgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIGluY29tcGF0aWJsZSBkZWNvcmF0b3JzIG9uIGEgdHlwZSBvciBhIGNsYXNzIGZpZWxkLlxuICAgKi9cbiAgREVDT1JBVE9SX0NPTExJU0lPTiA9IDEwMDYsXG5cbiAgVkFMVUVfSEFTX1dST05HX1RZUEUgPSAxMDEwLFxuICBWQUxVRV9OT1RfTElURVJBTCA9IDEwMTEsXG5cbiAgQ09NUE9ORU5UX01JU1NJTkdfVEVNUExBVEUgPSAyMDAxLFxuICBQSVBFX01JU1NJTkdfTkFNRSA9IDIwMDIsXG4gIFBBUkFNX01JU1NJTkdfVE9LRU4gPSAyMDAzLFxuICBESVJFQ1RJVkVfTUlTU0lOR19TRUxFQ1RPUiA9IDIwMDQsXG5cbiAgLyoqIFJhaXNlZCB3aGVuIGFuIHVuZGVjb3JhdGVkIGNsYXNzIGlzIHBhc3NlZCBpbiBhcyBhIHByb3ZpZGVyIHRvIGEgbW9kdWxlIG9yIGEgZGlyZWN0aXZlLiAqL1xuICBVTkRFQ09SQVRFRF9QUk9WSURFUiA9IDIwMDUsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgRGlyZWN0aXZlIGluaGVyaXRzIGl0cyBjb25zdHJ1Y3RvciBmcm9tIGEgYmFzZSBjbGFzcyB3aXRob3V0IGFuIEFuZ3VsYXJcbiAgICogZGVjb3JhdG9yLlxuICAgKi9cbiAgRElSRUNUSVZFX0lOSEVSSVRTX1VOREVDT1JBVEVEX0NUT1IgPSAyMDA2LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiB1bmRlY29yYXRlZCBjbGFzcyB0aGF0IGlzIHVzaW5nIEFuZ3VsYXIgZmVhdHVyZXNcbiAgICogaGFzIGJlZW4gZGlzY292ZXJlZC5cbiAgICovXG4gIFVOREVDT1JBVEVEX0NMQVNTX1VTSU5HX0FOR1VMQVJfRkVBVFVSRVMgPSAyMDA3LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBjb21wb25lbnQgY2Fubm90IHJlc29sdmUgYW4gZXh0ZXJuYWwgcmVzb3VyY2UsIHN1Y2ggYXMgYSB0ZW1wbGF0ZSBvciBhIHN0eWxlXG4gICAqIHNoZWV0LlxuICAgKi9cbiAgQ09NUE9ORU5UX1JFU09VUkNFX05PVF9GT1VORCA9IDIwMDgsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgY29tcG9uZW50IHVzZXMgYFNoYWRvd0RvbWAgdmlldyBlbmNhcHN1bGF0aW9uLCBidXQgaXRzIHNlbGVjdG9yXG4gICAqIGRvZXMgbm90IG1hdGNoIHRoZSBzaGFkb3cgRE9NIHRhZyBuYW1lIHJlcXVpcmVtZW50cy5cbiAgICovXG4gIENPTVBPTkVOVF9JTlZBTElEX1NIQURPV19ET01fU0VMRUNUT1IgPSAyMDA5LFxuXG4gIFNZTUJPTF9OT1RfRVhQT1JURUQgPSAzMDAxLFxuICBTWU1CT0xfRVhQT1JURURfVU5ERVJfRElGRkVSRU5UX05BTUUgPSAzMDAyLFxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJlY3RpdmVzIGFuZC9vciBwaXBlcyB3b3VsZCBjYXVzZSBhIGN5Y2xpYyBpbXBvcnQgdG8gYmVcbiAgICogY3JlYXRlZCB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkLCBzdWNoIGFzIGluIHBhcnRpYWwgY29tcGlsYXRpb24gbW9kZS5cbiAgICovXG4gIElNUE9SVF9DWUNMRV9ERVRFQ1RFRCA9IDMwMDMsXG5cbiAgQ09ORklHX0ZMQVRfTU9EVUxFX05PX0lOREVYID0gNDAwMSxcbiAgQ09ORklHX1NUUklDVF9URU1QTEFURVNfSU1QTElFU19GVUxMX1RFTVBMQVRFX1RZUEVDSEVDSyA9IDQwMDIsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgaG9zdCBleHByZXNzaW9uIGhhcyBhIHBhcnNlIGVycm9yLCBzdWNoIGFzIGEgaG9zdCBsaXN0ZW5lciBvciBob3N0IGJpbmRpbmdcbiAgICogZXhwcmVzc2lvbiBjb250YWluaW5nIGEgcGlwZS5cbiAgICovXG4gIEhPU1RfQklORElOR19QQVJTRV9FUlJPUiA9IDUwMDEsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIHRoZSBjb21waWxlciBjYW5ub3QgcGFyc2UgYSBjb21wb25lbnQncyB0ZW1wbGF0ZS5cbiAgICovXG4gIFRFTVBMQVRFX1BBUlNFX0VSUk9SID0gNTAwMixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYW4gaW52YWxpZCByZWZlcmVuY2UgaW4gYGRlY2xhcmF0aW9uc2AuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX0RFQ0xBUkFUSU9OID0gNjAwMSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYW4gaW52YWxpZCB0eXBlIGluIGBpbXBvcnRzYC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfSU1QT1JUID0gNjAwMixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYW4gaW52YWxpZCB0eXBlIGluIGBleHBvcnRzYC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfRVhQT1JUID0gNjAwMyxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYSB0eXBlIGluIGBleHBvcnRzYCB3aGljaCBpcyBuZWl0aGVyIGluIGBkZWNsYXJhdGlvbnNgIG5vclxuICAgKiBvdGhlcndpc2UgaW1wb3J0ZWQuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX1JFRVhQT1JUID0gNjAwNCxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBgTW9kdWxlV2l0aFByb3ZpZGVyc2Agd2l0aCBhIG1pc3NpbmdcbiAgICogZ2VuZXJpYyB0eXBlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnRvIGFuIGBOZ01vZHVsZWAuXG4gICAqL1xuICBOR01PRFVMRV9NT0RVTEVfV0lUSF9QUk9WSURFUlNfTUlTU0lOR19HRU5FUklDID0gNjAwNSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgZXhwb3J0cyBtdWx0aXBsZSBkaXJlY3RpdmVzL3BpcGVzIG9mIHRoZSBzYW1lIG5hbWUgYW5kIHRoZSBjb21waWxlclxuICAgKiBhdHRlbXB0cyB0byBnZW5lcmF0ZSBwcml2YXRlIHJlLWV4cG9ydHMgd2l0aGluIHRoZSBOZ01vZHVsZSBmaWxlLlxuICAgKi9cbiAgTkdNT0RVTEVfUkVFWFBPUlRfTkFNRV9DT0xMSVNJT04gPSA2MDA2LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGRpcmVjdGl2ZS9waXBlIGlzIHBhcnQgb2YgdGhlIGRlY2xhcmF0aW9ucyBvZiB0d28gb3IgbW9yZSBOZ01vZHVsZXMuXG4gICAqL1xuICBOR01PRFVMRV9ERUNMQVJBVElPTl9OT1RfVU5JUVVFID0gNjAwNyxcblxuICAvKipcbiAgICogTm90IGFjdHVhbGx5IHJhaXNlZCBieSB0aGUgY29tcGlsZXIsIGJ1dCByZXNlcnZlZCBmb3IgZG9jdW1lbnRhdGlvbiBvZiBhIFZpZXcgRW5naW5lIGVycm9yIHdoZW5cbiAgICogYSBWaWV3IEVuZ2luZSBidWlsZCBkZXBlbmRzIG9uIGFuIEl2eS1jb21waWxlZCBOZ01vZHVsZS5cbiAgICovXG4gIE5HTU9EVUxFX1ZFX0RFUEVOREVOQ1lfT05fSVZZX0xJQiA9IDY5OTksXG5cbiAgLyoqXG4gICAqIEFuIGVsZW1lbnQgbmFtZSBmYWlsZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBET00gc2NoZW1hLlxuICAgKi9cbiAgU0NIRU1BX0lOVkFMSURfRUxFTUVOVCA9IDgwMDEsXG5cbiAgLyoqXG4gICAqIEFuIGVsZW1lbnQncyBhdHRyaWJ1dGUgbmFtZSBmYWlsZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBET00gc2NoZW1hLlxuICAgKi9cbiAgU0NIRU1BX0lOVkFMSURfQVRUUklCVVRFID0gODAwMixcblxuICAvKipcbiAgICogTm8gbWF0Y2hpbmcgZGlyZWN0aXZlIHdhcyBmb3VuZCBmb3IgYSBgI3JlZj1cInRhcmdldFwiYCBleHByZXNzaW9uLlxuICAgKi9cbiAgTUlTU0lOR19SRUZFUkVOQ0VfVEFSR0VUID0gODAwMyxcblxuICAvKipcbiAgICogTm8gbWF0Y2hpbmcgcGlwZSB3YXMgZm91bmQgZm9yIGFcbiAgICovXG4gIE1JU1NJTkdfUElQRSA9IDgwMDQsXG5cbiAgLyoqXG4gICAqIFRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gd2FzIGEgdGVtcGxhdGUgdmFyaWFibGUuIEVmZmVjdGl2ZWx5LCB0aGVcbiAgICogdGVtcGxhdGUgbG9va2VkIGxpa2U6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8bmctdGVtcGxhdGUgbGV0LXNvbWV0aGluZz5cbiAgICogICA8YnV0dG9uIChjbGljayk9XCJzb21ldGhpbmcgPSAuLi5cIj4uLi48L2J1dHRvbj5cbiAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICogYGBgXG4gICAqXG4gICAqIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LlxuICAgKi9cbiAgV1JJVEVfVE9fUkVBRF9PTkxZX1ZBUklBQkxFID0gODAwNSxcblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQgdHdpY2UuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICogPC9kaXY+XG4gICAqIGBgYFxuICAgKi9cbiAgRFVQTElDQVRFX1ZBUklBQkxFX0RFQ0xBUkFUSU9OID0gODAwNixcblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSBoYXMgYSB0d28gd2F5IGJpbmRpbmcgKHR3byBiaW5kaW5ncyBjcmVhdGVkIGJ5IGEgc2luZ2xlIHN5bnRhY3RpYWwgZWxlbWVudClcbiAgICogaW4gd2hpY2ggdGhlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGdvaW5nIHRvIGRpZmZlcmVudCBwbGFjZXMuXG4gICAqL1xuICBTUExJVF9UV09fV0FZX0JJTkRJTkcgPSA4MDA3LFxuXG4gIC8qKlxuICAgKiBBIHR3byB3YXkgYmluZGluZyBpbiBhIHRlbXBsYXRlIGhhcyBhbiBpbmNvcnJlY3Qgc3ludGF4LFxuICAgKiBwYXJlbnRoZXNlcyBvdXRzaWRlIGJyYWNrZXRzLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxkaXYgKFtmb29dKT1cImJhclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgSU5WQUxJRF9CQU5BTkFfSU5fQk9YID0gODEwMSxcblxuICAvKipcbiAgICogVGhlIGxlZnQgc2lkZSBvZiBhIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRpb24gaXMgbm90IG51bGxhYmxlLlxuICAgKlxuICAgKiBgYGBcbiAgICoge3sgZm9vID8/IGJhciB9fVxuICAgKiBgYGBcbiAgICogV2hlbiB0aGUgdHlwZSBvZiBmb28gZG9lc24ndCBpbmNsdWRlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICovXG4gIE5VTExJU0hfQ09BTEVTQ0lOR19OT1RfTlVMTEFCTEUgPSA4MTAyLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjaGVjayBibG9jayBmb3IgYVxuICAgKiBjb21wb25lbnQsIGJ1dCB0aGUgY3VycmVudCB0eXBlLWNoZWNraW5nIGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCBpdC5cbiAgICovXG4gIElOTElORV9UQ0JfUkVRVUlSRUQgPSA4OTAwLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvciBmb3IgYVxuICAgKiBkaXJlY3RpdmUgb3IgY29tcG9uZW50LCBidXQgdGhlIGN1cnJlbnQgdHlwZS1jaGVja2luZyBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgaXQuXG4gICAqL1xuICBJTkxJTkVfVFlQRV9DVE9SX1JFUVVJUkVEID0gODkwMSxcblxuICAvKipcbiAgICogQW4gaW5qZWN0YWJsZSBhbHJlYWR5IGhhcyBhIGDJtXByb3ZgIHByb3BlcnR5LlxuICAgKi9cbiAgSU5KRUNUQUJMRV9EVVBMSUNBVEVfUFJPViA9IDkwMDEsXG5cbiAgLy8gMTBYWFggZXJyb3IgY29kZXMgYXJlIHJlc2VydmVkIGZvciBkaWFnbm9zdGljcyB3aXRoIGNhdGVnb3JpZXMgb3RoZXIgdGhhblxuICAvLyBgdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yYC4gVGhlc2UgZGlhZ25vc3RpY3MgYXJlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBjb25maWd1cmVkXG4gIC8vIHRvIGRvIHNvIGJ5IGEgdG9vbCBzdWNoIGFzIHRoZSBMYW5ndWFnZSBTZXJ2aWNlLCBvciBieSB0aGUgTGFuZ3VhZ2UgU2VydmljZSBpdHNlbGYuXG5cbiAgLyoqXG4gICAqIFN1Z2dlc3QgdXNlcnMgdG8gZW5hYmxlIGBzdHJpY3RUZW1wbGF0ZXNgIHRvIG1ha2UgdXNlIG9mIGZ1bGwgY2FwYWJpbGl0aWVzXG4gICAqIHByb3ZpZGVkIGJ5IEFuZ3VsYXIgbGFuZ3VhZ2Ugc2VydmljZS5cbiAgICovXG4gIFNVR0dFU1RfU1RSSUNUX1RFTVBMQVRFUyA9IDEwMDAxLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIHBhcnRpY3VsYXIgc3RydWN0dXJhbCBkaXJlY3RpdmUgcHJvdmlkZXMgYWR2YW5jZWQgdHlwZSBuYXJyb3dpbmdcbiAgICogZnVuY3Rpb25hbGl0eSwgYnV0IHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhbGxvdyBpdHMgdXNhZ2UgaW5cbiAgICogdHlwZSBpbmZlcmVuY2UuXG4gICAqL1xuICBTVUdHRVNUX1NVQk9QVElNQUxfVFlQRV9JTkZFUkVOQ0UgPSAxMDAwMixcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEJhc2UgVVJMIGZvciB0aGUgZXJyb3IgZGV0YWlscyBwYWdlLlxuICogS2VlcCB0aGlzIHZhbHVlIGluIHN5bmMgd2l0aCBhIHNpbWlsYXIgY29uc3QgaW5cbiAqIGBwYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2Vycm9yX2NvZGUudHNgLlxuICovXG5leHBvcnQgY29uc3QgRVJST1JfREVUQUlMU19QQUdFX0JBU0VfVVJMID0gJ2h0dHBzOi8vYW5ndWxhci5pby9lcnJvcnMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQ29udGFpbnMgYSBzZXQgb2YgZXJyb3IgbWVzc2FnZXMgdGhhdCBoYXZlIGRldGFpbGVkIGd1aWRlcyBhdCBhbmd1bGFyLmlvLlxuICogRnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBlcnJvciBndWlkZXMgY2FuIGJlIGZvdW5kIGF0IGh0dHBzOi8vYW5ndWxhci5pby9lcnJvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX0VSUk9SU19XSVRIX0dVSURFUyA9IG5ldyBTZXQoW1xuICBFcnJvckNvZGUuREVDT1JBVE9SX0FSR19OT1RfTElURVJBTCxcbiAgRXJyb3JDb2RlLklNUE9SVF9DWUNMRV9ERVRFQ1RFRCxcbiAgRXJyb3JDb2RlLlBBUkFNX01JU1NJTkdfVE9LRU4sXG4gIEVycm9yQ29kZS5TQ0hFTUFfSU5WQUxJRF9FTEVNRU5ULFxuICBFcnJvckNvZGUuU0NIRU1BX0lOVkFMSURfQVRUUklCVVRFLFxuICBFcnJvckNvZGUuTUlTU0lOR19SRUZFUkVOQ0VfVEFSR0VULFxuICBFcnJvckNvZGUuQ09NUE9ORU5UX0lOVkFMSURfU0hBRE9XX0RPTV9TRUxFQ1RPUixcbl0pO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmdFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KCctOTknICsgY29kZSk7XG59XG4iXX0=
@@ -6,7 +6,7 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/compiler-cli/src/ngtsc/typecheck/extended/api/api" />
9
- import { TmplAstNode } from '@angular/compiler';
9
+ import { AST, TmplAstNode } from '@angular/compiler';
10
10
  import * as ts from 'typescript';
11
11
  import { ErrorCode } from '../../../diagnostics';
12
12
  import { NgTemplateDiagnostic, TemplateTypeChecker } from '../../api';
@@ -18,7 +18,7 @@ export interface TemplateCheck<T extends ErrorCode> {
18
18
  /** Unique template check code, used for configuration and searching the error. */
19
19
  code: T;
20
20
  /** Runs check and returns information about the diagnostics to be generated. */
21
- run(ctx: TemplateContext, template: TmplAstNode[]): NgTemplateDiagnostic<T>[];
21
+ run(ctx: TemplateContext, component: ts.ClassDeclaration, template: TmplAstNode[]): NgTemplateDiagnostic<T>[];
22
22
  }
23
23
  /**
24
24
  * The TemplateContext provided to a Template Check to get diagnostic information.
@@ -31,6 +31,20 @@ export interface TemplateContext {
31
31
  * in the template (it is not to query types outside the Angular component).
32
32
  */
33
33
  typeChecker: ts.TypeChecker;
34
- /** The `@Component()` class from which the template was obtained. */
35
- component: ts.ClassDeclaration;
34
+ }
35
+ /**
36
+ * This abstract class provides a base implementation for the run method.
37
+ */
38
+ export declare abstract class TemplateCheckWithVisitor<T extends ErrorCode> implements TemplateCheck<T> {
39
+ abstract code: T;
40
+ /**
41
+ * Base implementation for run function, visits all nodes in template and calls
42
+ * `visitNode()` for each one.
43
+ */
44
+ run(ctx: TemplateContext, component: ts.ClassDeclaration, template: TmplAstNode[]): NgTemplateDiagnostic<T>[];
45
+ /**
46
+ * Visit a TmplAstNode or AST node of the template. Authors should override this
47
+ * method to implement the check and return diagnostics.
48
+ */
49
+ abstract visitNode(ctx: TemplateContext, component: ts.ClassDeclaration, node: TmplAstNode | AST): NgTemplateDiagnostic<T>[];
36
50
  }
@@ -11,10 +11,114 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/typecheck/extended/api/api", ["require", "exports"], factory);
14
+ define("@angular/compiler-cli/src/ngtsc/typecheck/extended/api/api", ["require", "exports", "tslib", "@angular/compiler", "@angular/compiler/src/compiler"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.TemplateCheckWithVisitor = void 0;
20
+ var tslib_1 = require("tslib");
21
+ var compiler_1 = require("@angular/compiler");
22
+ var compiler_2 = require("@angular/compiler/src/compiler");
23
+ /**
24
+ * This abstract class provides a base implementation for the run method.
25
+ */
26
+ var TemplateCheckWithVisitor = /** @class */ (function () {
27
+ function TemplateCheckWithVisitor() {
28
+ }
29
+ /**
30
+ * Base implementation for run function, visits all nodes in template and calls
31
+ * `visitNode()` for each one.
32
+ */
33
+ TemplateCheckWithVisitor.prototype.run = function (ctx, component, template) {
34
+ var visitor = new TemplateVisitor(ctx, component, this);
35
+ return visitor.getDiagnostics(template);
36
+ };
37
+ return TemplateCheckWithVisitor;
38
+ }());
39
+ exports.TemplateCheckWithVisitor = TemplateCheckWithVisitor;
40
+ /**
41
+ * Visits all nodes in a template (TmplAstNode and AST) and calls `visitNode` for each one.
42
+ */
43
+ var TemplateVisitor = /** @class */ (function (_super) {
44
+ tslib_1.__extends(TemplateVisitor, _super);
45
+ function TemplateVisitor(ctx, component, check) {
46
+ var _this = _super.call(this) || this;
47
+ _this.ctx = ctx;
48
+ _this.component = component;
49
+ _this.check = check;
50
+ _this.diagnostics = [];
51
+ return _this;
52
+ }
53
+ TemplateVisitor.prototype.visit = function (node, context) {
54
+ var _a;
55
+ (_a = this.diagnostics).push.apply(_a, tslib_1.__spreadArray([], tslib_1.__read(this.check.visitNode(this.ctx, this.component, node))));
56
+ node.visit(this);
57
+ };
58
+ TemplateVisitor.prototype.visitAllNodes = function (nodes) {
59
+ var e_1, _a;
60
+ try {
61
+ for (var nodes_1 = tslib_1.__values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
62
+ var node = nodes_1_1.value;
63
+ this.visit(node);
64
+ }
65
+ }
66
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
67
+ finally {
68
+ try {
69
+ if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
70
+ }
71
+ finally { if (e_1) throw e_1.error; }
72
+ }
73
+ };
74
+ TemplateVisitor.prototype.visitAst = function (ast) {
75
+ if (ast instanceof compiler_2.ASTWithSource) {
76
+ ast = ast.ast;
77
+ }
78
+ this.visit(ast);
79
+ };
80
+ TemplateVisitor.prototype.visitElement = function (element) {
81
+ this.visitAllNodes(element.attributes);
82
+ this.visitAllNodes(element.inputs);
83
+ this.visitAllNodes(element.outputs);
84
+ this.visitAllNodes(element.references);
85
+ this.visitAllNodes(element.children);
86
+ };
87
+ TemplateVisitor.prototype.visitTemplate = function (template) {
88
+ this.visitAllNodes(template.attributes);
89
+ if (template.tagName === 'ng-template') {
90
+ // Only visit input/outputs/templateAttrs if this isn't an inline template node
91
+ // generated for a structural directive (like `<div *ngIf></div>`). These nodes
92
+ // would be visited when the underlying element of an inline template node is processed.
93
+ this.visitAllNodes(template.inputs);
94
+ this.visitAllNodes(template.outputs);
95
+ this.visitAllNodes(template.templateAttrs);
96
+ }
97
+ this.visitAllNodes(template.variables);
98
+ this.visitAllNodes(template.references);
99
+ this.visitAllNodes(template.children);
100
+ };
101
+ TemplateVisitor.prototype.visitContent = function (content) { };
102
+ TemplateVisitor.prototype.visitVariable = function (variable) { };
103
+ TemplateVisitor.prototype.visitReference = function (reference) { };
104
+ TemplateVisitor.prototype.visitTextAttribute = function (attribute) { };
105
+ TemplateVisitor.prototype.visitBoundAttribute = function (attribute) {
106
+ this.visitAst(attribute.value);
107
+ };
108
+ TemplateVisitor.prototype.visitBoundEvent = function (attribute) {
109
+ this.visitAst(attribute.handler);
110
+ };
111
+ TemplateVisitor.prototype.visitText = function (text) { };
112
+ TemplateVisitor.prototype.visitBoundText = function (text) {
113
+ this.visitAst(text.value);
114
+ };
115
+ TemplateVisitor.prototype.visitIcu = function (icu) { };
116
+ TemplateVisitor.prototype.getDiagnostics = function (template) {
117
+ this.diagnostics = [];
118
+ this.visitAllNodes(template);
119
+ return this.diagnostics;
120
+ };
121
+ return TemplateVisitor;
122
+ }(compiler_1.RecursiveAstVisitor));
19
123
  });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svZXh0ZW5kZWQvYXBpL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtUbXBsQXN0Tm9kZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7RXJyb3JDb2RlfSBmcm9tICcuLi8uLi8uLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge05nVGVtcGxhdGVEaWFnbm9zdGljLCBUZW1wbGF0ZVR5cGVDaGVja2VyfSBmcm9tICcuLi8uLi9hcGknO1xuXG4vKipcbiAqIEEgVGVtcGxhdGUgQ2hlY2sgcmVjZWl2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlbXBsYXRlIGl0J3MgY2hlY2tpbmcgYW5kIHJldHVybnNcbiAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWFnbm9zdGljcyB0byBiZSBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVDaGVjazxUIGV4dGVuZHMgRXJyb3JDb2RlPiB7XG4gIC8qKiBVbmlxdWUgdGVtcGxhdGUgY2hlY2sgY29kZSwgdXNlZCBmb3IgY29uZmlndXJhdGlvbiBhbmQgc2VhcmNoaW5nIHRoZSBlcnJvci4gKi9cbiAgY29kZTogVDtcblxuICAvKiogUnVucyBjaGVjayBhbmQgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlhZ25vc3RpY3MgdG8gYmUgZ2VuZXJhdGVkLiAqL1xuICBydW4oY3R4OiBUZW1wbGF0ZUNvbnRleHQsIHRlbXBsYXRlOiBUbXBsQXN0Tm9kZVtdKTogTmdUZW1wbGF0ZURpYWdub3N0aWM8VD5bXTtcbn1cblxuLyoqXG4gKiBUaGUgVGVtcGxhdGVDb250ZXh0IHByb3ZpZGVkIHRvIGEgVGVtcGxhdGUgQ2hlY2sgdG8gZ2V0IGRpYWdub3N0aWMgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVDb250ZXh0IHtcbiAgLyoqIEludGVyZmFjZSB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRlbXBsYXRlIG5vZGVzLiAqL1xuICB0ZW1wbGF0ZVR5cGVDaGVja2VyOiBUZW1wbGF0ZVR5cGVDaGVja2VyO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGludGVyZmFjZSB0aGF0IHByb3ZpZGVzIHR5cGUgaW5mb3JtYXRpb24gYWJvdXQgc3ltYm9scyB0aGF0IGFwcGVhclxuICAgKiBpbiB0aGUgdGVtcGxhdGUgKGl0IGlzIG5vdCB0byBxdWVyeSB0eXBlcyBvdXRzaWRlIHRoZSBBbmd1bGFyIGNvbXBvbmVudCkuXG4gICAqL1xuICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXI7XG5cbiAgLyoqIFRoZSBgQENvbXBvbmVudCgpYCBjbGFzcyBmcm9tIHdoaWNoIHRoZSB0ZW1wbGF0ZSB3YXMgb2J0YWluZWQuICovXG4gIGNvbXBvbmVudDogdHMuQ2xhc3NEZWNsYXJhdGlvbjtcbn1cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svZXh0ZW5kZWQvYXBpL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQWdTO0lBQ2hTLDJEQUE2RDtJQWlDN0Q7O09BRUc7SUFDSDtRQUFBO1FBbUJBLENBQUM7UUFoQkM7OztXQUdHO1FBQ0gsc0NBQUcsR0FBSCxVQUFJLEdBQW9CLEVBQUUsU0FBOEIsRUFDcEQsUUFBdUI7WUFDekIsSUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQVFILCtCQUFDO0lBQUQsQ0FBQyxBQW5CRCxJQW1CQztJQW5CcUIsNERBQXdCO0lBcUI5Qzs7T0FFRztJQUNIO1FBQW1ELDJDQUFtQjtRQUlwRSx5QkFDcUIsR0FBb0IsRUFBbUIsU0FBOEIsRUFDckUsS0FBa0M7WUFGdkQsWUFHRSxpQkFBTyxTQUNSO1lBSG9CLFNBQUcsR0FBSCxHQUFHLENBQWlCO1lBQW1CLGVBQVMsR0FBVCxTQUFTLENBQXFCO1lBQ3JFLFdBQUssR0FBTCxLQUFLLENBQTZCO1lBSnZELGlCQUFXLEdBQThCLEVBQUUsQ0FBQzs7UUFNNUMsQ0FBQztRQUVRLCtCQUFLLEdBQWQsVUFBZSxJQUFxQixFQUFFLE9BQWE7O1lBQ2pELENBQUEsS0FBQSxJQUFJLENBQUMsV0FBVyxDQUFBLENBQUMsSUFBSSxvREFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUU7WUFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBRUQsdUNBQWEsR0FBYixVQUFjLEtBQW9COzs7Z0JBQ2hDLEtBQW1CLElBQUEsVUFBQSxpQkFBQSxLQUFLLENBQUEsNEJBQUEsK0NBQUU7b0JBQXJCLElBQU0sSUFBSSxrQkFBQTtvQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNsQjs7Ozs7Ozs7O1FBQ0gsQ0FBQztRQUVELGtDQUFRLEdBQVIsVUFBUyxHQUFRO1lBQ2YsSUFBSSxHQUFHLFlBQVksd0JBQWEsRUFBRTtnQkFDaEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDZjtZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELHNDQUFZLEdBQVosVUFBYSxPQUF1QjtZQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsdUNBQWEsR0FBYixVQUFjLFFBQXlCO1lBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxhQUFhLEVBQUU7Z0JBQ3RDLCtFQUErRTtnQkFDL0UsK0VBQStFO2dCQUMvRSx3RkFBd0Y7Z0JBQ3hGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDNUM7WUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0Qsc0NBQVksR0FBWixVQUFhLE9BQXVCLElBQVMsQ0FBQztRQUM5Qyx1Q0FBYSxHQUFiLFVBQWMsUUFBeUIsSUFBUyxDQUFDO1FBQ2pELHdDQUFjLEdBQWQsVUFBZSxTQUEyQixJQUFTLENBQUM7UUFDcEQsNENBQWtCLEdBQWxCLFVBQW1CLFNBQStCLElBQVMsQ0FBQztRQUM1RCw2Q0FBbUIsR0FBbkIsVUFBb0IsU0FBZ0M7WUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELHlDQUFlLEdBQWYsVUFBZ0IsU0FBNEI7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELG1DQUFTLEdBQVQsVUFBVSxJQUFpQixJQUFTLENBQUM7UUFDckMsd0NBQWMsR0FBZCxVQUFlLElBQXNCO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxrQ0FBUSxHQUFSLFVBQVMsR0FBZSxJQUFTLENBQUM7UUFFbEMsd0NBQWMsR0FBZCxVQUFlLFFBQXVCO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFCLENBQUM7UUFDSCxzQkFBQztJQUFELENBQUMsQUF2RUQsQ0FBbUQsOEJBQW1CLEdBdUVyRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0FTVCwgUmVjdXJzaXZlQXN0VmlzaXRvciwgVG1wbEFzdEJvdW5kQXR0cmlidXRlLCBUbXBsQXN0Qm91bmRFdmVudCwgVG1wbEFzdEJvdW5kVGV4dCwgVG1wbEFzdENvbnRlbnQsIFRtcGxBc3RFbGVtZW50LCBUbXBsQXN0SWN1LCBUbXBsQXN0Tm9kZSwgVG1wbEFzdFJlY3Vyc2l2ZVZpc2l0b3IsIFRtcGxBc3RSZWZlcmVuY2UsIFRtcGxBc3RUZW1wbGF0ZSwgVG1wbEFzdFRleHQsIFRtcGxBc3RUZXh0QXR0cmlidXRlLCBUbXBsQXN0VmFyaWFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7QVNUV2l0aFNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Vycm9yQ29kZX0gZnJvbSAnLi4vLi4vLi4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHtOZ1RlbXBsYXRlRGlhZ25vc3RpYywgVGVtcGxhdGVUeXBlQ2hlY2tlcn0gZnJvbSAnLi4vLi4vYXBpJztcblxuLyoqXG4gKiBBIFRlbXBsYXRlIENoZWNrIHJlY2VpdmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW1wbGF0ZSBpdCdzIGNoZWNraW5nIGFuZCByZXR1cm5zXG4gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlhZ25vc3RpY3MgdG8gYmUgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlQ2hlY2s8VCBleHRlbmRzIEVycm9yQ29kZT4ge1xuICAvKiogVW5pcXVlIHRlbXBsYXRlIGNoZWNrIGNvZGUsIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIHNlYXJjaGluZyB0aGUgZXJyb3IuICovXG4gIGNvZGU6IFQ7XG5cbiAgLyoqIFJ1bnMgY2hlY2sgYW5kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpYWdub3N0aWNzIHRvIGJlIGdlbmVyYXRlZC4gKi9cbiAgcnVuKGN0eDogVGVtcGxhdGVDb250ZXh0LCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24sXG4gICAgICB0ZW1wbGF0ZTogVG1wbEFzdE5vZGVbXSk6IE5nVGVtcGxhdGVEaWFnbm9zdGljPFQ+W107XG59XG5cbi8qKlxuICogVGhlIFRlbXBsYXRlQ29udGV4dCBwcm92aWRlZCB0byBhIFRlbXBsYXRlIENoZWNrIHRvIGdldCBkaWFnbm9zdGljIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlQ29udGV4dCB7XG4gIC8qKiBJbnRlcmZhY2UgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0ZW1wbGF0ZSBub2Rlcy4gKi9cbiAgdGVtcGxhdGVUeXBlQ2hlY2tlcjogVGVtcGxhdGVUeXBlQ2hlY2tlcjtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBpbnRlcmZhY2UgdGhhdCBwcm92aWRlcyB0eXBlIGluZm9ybWF0aW9uIGFib3V0IHN5bWJvbHMgdGhhdCBhcHBlYXJcbiAgICogaW4gdGhlIHRlbXBsYXRlIChpdCBpcyBub3QgdG8gcXVlcnkgdHlwZXMgb3V0c2lkZSB0aGUgQW5ndWxhciBjb21wb25lbnQpLlxuICAgKi9cbiAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xufVxuXG4vKipcbiAqIFRoaXMgYWJzdHJhY3QgY2xhc3MgcHJvdmlkZXMgYSBiYXNlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgcnVuIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRlbXBsYXRlQ2hlY2tXaXRoVmlzaXRvcjxUIGV4dGVuZHMgRXJyb3JDb2RlPiBpbXBsZW1lbnRzIFRlbXBsYXRlQ2hlY2s8VD4ge1xuICBhYnN0cmFjdCBjb2RlOiBUO1xuXG4gIC8qKlxuICAgKiBCYXNlIGltcGxlbWVudGF0aW9uIGZvciBydW4gZnVuY3Rpb24sIHZpc2l0cyBhbGwgbm9kZXMgaW4gdGVtcGxhdGUgYW5kIGNhbGxzXG4gICAqIGB2aXNpdE5vZGUoKWAgZm9yIGVhY2ggb25lLlxuICAgKi9cbiAgcnVuKGN0eDogVGVtcGxhdGVDb250ZXh0LCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24sXG4gICAgICB0ZW1wbGF0ZTogVG1wbEFzdE5vZGVbXSk6IE5nVGVtcGxhdGVEaWFnbm9zdGljPFQ+W10ge1xuICAgIGNvbnN0IHZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yPFQ+KGN0eCwgY29tcG9uZW50LCB0aGlzKTtcbiAgICByZXR1cm4gdmlzaXRvci5nZXREaWFnbm9zdGljcyh0ZW1wbGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXQgYSBUbXBsQXN0Tm9kZSBvciBBU1Qgbm9kZSBvZiB0aGUgdGVtcGxhdGUuIEF1dGhvcnMgc2hvdWxkIG92ZXJyaWRlIHRoaXNcbiAgICogbWV0aG9kIHRvIGltcGxlbWVudCB0aGUgY2hlY2sgYW5kIHJldHVybiBkaWFnbm9zdGljcy5cbiAgICovXG4gIGFic3RyYWN0IHZpc2l0Tm9kZShjdHg6IFRlbXBsYXRlQ29udGV4dCwgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uLCBub2RlOiBUbXBsQXN0Tm9kZXxBU1QpOlxuICAgICAgTmdUZW1wbGF0ZURpYWdub3N0aWM8VD5bXTtcbn1cblxuLyoqXG4gKiBWaXNpdHMgYWxsIG5vZGVzIGluIGEgdGVtcGxhdGUgKFRtcGxBc3ROb2RlIGFuZCBBU1QpIGFuZCBjYWxscyBgdmlzaXROb2RlYCBmb3IgZWFjaCBvbmUuXG4gKi9cbmNsYXNzIFRlbXBsYXRlVmlzaXRvcjxUIGV4dGVuZHMgRXJyb3JDb2RlPiBleHRlbmRzIFJlY3Vyc2l2ZUFzdFZpc2l0b3IgaW1wbGVtZW50c1xuICAgIFRtcGxBc3RSZWN1cnNpdmVWaXNpdG9yIHtcbiAgZGlhZ25vc3RpY3M6IE5nVGVtcGxhdGVEaWFnbm9zdGljPFQ+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBUZW1wbGF0ZUNvbnRleHQsIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGVjazogVGVtcGxhdGVDaGVja1dpdGhWaXNpdG9yPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0KG5vZGU6IEFTVHxUbXBsQXN0Tm9kZSwgY29udGV4dD86IGFueSkge1xuICAgIHRoaXMuZGlhZ25vc3RpY3MucHVzaCguLi50aGlzLmNoZWNrLnZpc2l0Tm9kZSh0aGlzLmN0eCwgdGhpcy5jb21wb25lbnQsIG5vZGUpKTtcbiAgICBub2RlLnZpc2l0KHRoaXMpO1xuICB9XG5cbiAgdmlzaXRBbGxOb2Rlcyhub2RlczogVG1wbEFzdE5vZGVbXSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgdGhpcy52aXNpdChub2RlKTtcbiAgICB9XG4gIH1cblxuICB2aXNpdEFzdChhc3Q6IEFTVCkge1xuICAgIGlmIChhc3QgaW5zdGFuY2VvZiBBU1RXaXRoU291cmNlKSB7XG4gICAgICBhc3QgPSBhc3QuYXN0O1xuICAgIH1cbiAgICB0aGlzLnZpc2l0KGFzdCk7XG4gIH1cblxuICB2aXNpdEVsZW1lbnQoZWxlbWVudDogVG1wbEFzdEVsZW1lbnQpIHtcbiAgICB0aGlzLnZpc2l0QWxsTm9kZXMoZWxlbWVudC5hdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnZpc2l0QWxsTm9kZXMoZWxlbWVudC5pbnB1dHMpO1xuICAgIHRoaXMudmlzaXRBbGxOb2RlcyhlbGVtZW50Lm91dHB1dHMpO1xuICAgIHRoaXMudmlzaXRBbGxOb2RlcyhlbGVtZW50LnJlZmVyZW5jZXMpO1xuICAgIHRoaXMudmlzaXRBbGxOb2RlcyhlbGVtZW50LmNoaWxkcmVuKTtcbiAgfVxuXG4gIHZpc2l0VGVtcGxhdGUodGVtcGxhdGU6IFRtcGxBc3RUZW1wbGF0ZSkge1xuICAgIHRoaXMudmlzaXRBbGxOb2Rlcyh0ZW1wbGF0ZS5hdHRyaWJ1dGVzKTtcbiAgICBpZiAodGVtcGxhdGUudGFnTmFtZSA9PT0gJ25nLXRlbXBsYXRlJykge1xuICAgICAgLy8gT25seSB2aXNpdCBpbnB1dC9vdXRwdXRzL3RlbXBsYXRlQXR0cnMgaWYgdGhpcyBpc24ndCBhbiBpbmxpbmUgdGVtcGxhdGUgbm9kZVxuICAgICAgLy8gZ2VuZXJhdGVkIGZvciBhIHN0cnVjdHVyYWwgZGlyZWN0aXZlIChsaWtlIGA8ZGl2ICpuZ0lmPjwvZGl2PmApLiBUaGVzZSBub2Rlc1xuICAgICAgLy8gd291bGQgYmUgdmlzaXRlZCB3aGVuIHRoZSB1bmRlcmx5aW5nIGVsZW1lbnQgb2YgYW4gaW5saW5lIHRlbXBsYXRlIG5vZGUgaXMgcHJvY2Vzc2VkLlxuICAgICAgdGhpcy52aXNpdEFsbE5vZGVzKHRlbXBsYXRlLmlucHV0cyk7XG4gICAgICB0aGlzLnZpc2l0QWxsTm9kZXModGVtcGxhdGUub3V0cHV0cyk7XG4gICAgICB0aGlzLnZpc2l0QWxsTm9kZXModGVtcGxhdGUudGVtcGxhdGVBdHRycyk7XG4gICAgfVxuICAgIHRoaXMudmlzaXRBbGxOb2Rlcyh0ZW1wbGF0ZS52YXJpYWJsZXMpO1xuICAgIHRoaXMudmlzaXRBbGxOb2Rlcyh0ZW1wbGF0ZS5yZWZlcmVuY2VzKTtcbiAgICB0aGlzLnZpc2l0QWxsTm9kZXModGVtcGxhdGUuY2hpbGRyZW4pO1xuICB9XG4gIHZpc2l0Q29udGVudChjb250ZW50OiBUbXBsQXN0Q29udGVudCk6IHZvaWQge31cbiAgdmlzaXRWYXJpYWJsZSh2YXJpYWJsZTogVG1wbEFzdFZhcmlhYmxlKTogdm9pZCB7fVxuICB2aXNpdFJlZmVyZW5jZShyZWZlcmVuY2U6IFRtcGxBc3RSZWZlcmVuY2UpOiB2b2lkIHt9XG4gIHZpc2l0VGV4dEF0dHJpYnV0ZShhdHRyaWJ1dGU6IFRtcGxBc3RUZXh0QXR0cmlidXRlKTogdm9pZCB7fVxuICB2aXNpdEJvdW5kQXR0cmlidXRlKGF0dHJpYnV0ZTogVG1wbEFzdEJvdW5kQXR0cmlidXRlKTogdm9pZCB7XG4gICAgdGhpcy52aXNpdEFzdChhdHRyaWJ1dGUudmFsdWUpO1xuICB9XG4gIHZpc2l0Qm91bmRFdmVudChhdHRyaWJ1dGU6IFRtcGxBc3RCb3VuZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy52aXNpdEFzdChhdHRyaWJ1dGUuaGFuZGxlcik7XG4gIH1cbiAgdmlzaXRUZXh0KHRleHQ6IFRtcGxBc3RUZXh0KTogdm9pZCB7fVxuICB2aXNpdEJvdW5kVGV4dCh0ZXh0OiBUbXBsQXN0Qm91bmRUZXh0KTogdm9pZCB7XG4gICAgdGhpcy52aXNpdEFzdCh0ZXh0LnZhbHVlKTtcbiAgfVxuICB2aXNpdEljdShpY3U6IFRtcGxBc3RJY3UpOiB2b2lkIHt9XG5cbiAgZ2V0RGlhZ25vc3RpY3ModGVtcGxhdGU6IFRtcGxBc3ROb2RlW10pOiBOZ1RlbXBsYXRlRGlhZ25vc3RpYzxUPltdIHtcbiAgICB0aGlzLmRpYWdub3N0aWNzID0gW107XG4gICAgdGhpcy52aXNpdEFsbE5vZGVzKHRlbXBsYXRlKTtcbiAgICByZXR1cm4gdGhpcy5kaWFnbm9zdGljcztcbiAgfVxufVxuIl19
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box" />
9
+ import { AST, TmplAstNode } from '@angular/compiler';
10
+ import * as ts from 'typescript';
11
+ import { ErrorCode } from '../../../../diagnostics';
12
+ import { NgTemplateDiagnostic } from '../../../api';
13
+ import { TemplateCheckWithVisitor, TemplateContext } from '../../api';
14
+ /**
15
+ * Ensures the two-way binding syntax is correct.
16
+ * Parentheses should be inside the brackets "[()]".
17
+ * Will return diagnostic information when "([])" is found.
18
+ */
19
+ export declare class InvalidBananaInBoxCheck extends TemplateCheckWithVisitor<ErrorCode.INVALID_BANANA_IN_BOX> {
20
+ code: ErrorCode.INVALID_BANANA_IN_BOX;
21
+ visitNode(ctx: TemplateContext, component: ts.ClassDeclaration, node: TmplAstNode | AST): NgTemplateDiagnostic<ErrorCode.INVALID_BANANA_IN_BOX>[];
22
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ (function (factory) {
9
+ if (typeof module === "object" && typeof module.exports === "object") {
10
+ var v = factory(require, exports);
11
+ if (v !== undefined) module.exports = v;
12
+ }
13
+ else if (typeof define === "function" && define.amd) {
14
+ define("@angular/compiler-cli/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box", ["require", "exports", "tslib", "@angular/compiler", "typescript", "@angular/compiler-cli/src/ngtsc/diagnostics", "@angular/compiler-cli/src/ngtsc/typecheck/extended/api"], factory);
15
+ }
16
+ })(function (require, exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.InvalidBananaInBoxCheck = void 0;
20
+ var tslib_1 = require("tslib");
21
+ var compiler_1 = require("@angular/compiler");
22
+ var ts = require("typescript");
23
+ var diagnostics_1 = require("@angular/compiler-cli/src/ngtsc/diagnostics");
24
+ var api_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/extended/api");
25
+ /**
26
+ * Ensures the two-way binding syntax is correct.
27
+ * Parentheses should be inside the brackets "[()]".
28
+ * Will return diagnostic information when "([])" is found.
29
+ */
30
+ var InvalidBananaInBoxCheck = /** @class */ (function (_super) {
31
+ tslib_1.__extends(InvalidBananaInBoxCheck, _super);
32
+ function InvalidBananaInBoxCheck() {
33
+ var _this = _super !== null && _super.apply(this, arguments) || this;
34
+ _this.code = diagnostics_1.ErrorCode.INVALID_BANANA_IN_BOX;
35
+ return _this;
36
+ }
37
+ InvalidBananaInBoxCheck.prototype.visitNode = function (ctx, component, node) {
38
+ if (!(node instanceof compiler_1.TmplAstBoundEvent))
39
+ return [];
40
+ var name = node.name;
41
+ if (!name.startsWith('[') || !name.endsWith(']'))
42
+ return [];
43
+ var boundSyntax = node.sourceSpan.toString();
44
+ var expectedBoundSyntax = boundSyntax.replace("(" + name + ")", "[(" + name.slice(1, -1) + ")]");
45
+ var diagnostic = ctx.templateTypeChecker.makeTemplateDiagnostic(component, node.sourceSpan, ts.DiagnosticCategory.Warning, diagnostics_1.ErrorCode.INVALID_BANANA_IN_BOX, "In the two-way binding syntax the parentheses should be inside the brackets, ex. '" + expectedBoundSyntax + "'. \n Find more at https://angular.io/guide/two-way-binding");
46
+ return [diagnostic];
47
+ };
48
+ return InvalidBananaInBoxCheck;
49
+ }(api_1.TemplateCheckWithVisitor));
50
+ exports.InvalidBananaInBoxCheck = InvalidBananaInBoxCheck;
51
+ });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9leHRlbmRlZC9jaGVja3MvaW52YWxpZF9iYW5hbmFfaW5fYm94L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBc0U7SUFDdEUsK0JBQWlDO0lBRWpDLDJFQUFrRDtJQUVsRCw4RUFBb0U7SUFFcEU7Ozs7T0FJRztJQUNIO1FBQ0ksbURBQXlEO1FBRDdEO1lBQUEscUVBb0JDO1lBbEJVLFVBQUksR0FBRyx1QkFBUyxDQUFDLHFCQUE4QixDQUFDOztRQWtCM0QsQ0FBQztRQWhCVSwyQ0FBUyxHQUFsQixVQUFtQixHQUFvQixFQUFFLFNBQThCLEVBQUUsSUFBcUI7WUFFNUYsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLDRCQUFpQixDQUFDO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBRXBELElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUU1RCxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9DLElBQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFJLElBQUksTUFBRyxFQUFFLE9BQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBSSxDQUFDLENBQUM7WUFDekYsSUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUM3RCxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLHVCQUFTLENBQUMscUJBQXFCLEVBQzFGLHVGQUNJLG1CQUFtQix1RUFDK0IsQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0gsOEJBQUM7SUFBRCxDQUFDLEFBcEJELENBQ0ksOEJBQXdCLEdBbUIzQjtJQXBCWSwwREFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBU1QsIFRtcGxBc3RCb3VuZEV2ZW50LCBUbXBsQXN0Tm9kZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7RXJyb3JDb2RlfSBmcm9tICcuLi8uLi8uLi8uLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge05nVGVtcGxhdGVEaWFnbm9zdGljfSBmcm9tICcuLi8uLi8uLi9hcGknO1xuaW1wb3J0IHtUZW1wbGF0ZUNoZWNrV2l0aFZpc2l0b3IsIFRlbXBsYXRlQ29udGV4dH0gZnJvbSAnLi4vLi4vYXBpJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoZSB0d28td2F5IGJpbmRpbmcgc3ludGF4IGlzIGNvcnJlY3QuXG4gKiBQYXJlbnRoZXNlcyBzaG91bGQgYmUgaW5zaWRlIHRoZSBicmFja2V0cyBcIlsoKV1cIi5cbiAqIFdpbGwgcmV0dXJuIGRpYWdub3N0aWMgaW5mb3JtYXRpb24gd2hlbiBcIihbXSlcIiBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRCYW5hbmFJbkJveENoZWNrIGV4dGVuZHNcbiAgICBUZW1wbGF0ZUNoZWNrV2l0aFZpc2l0b3I8RXJyb3JDb2RlLklOVkFMSURfQkFOQU5BX0lOX0JPWD4ge1xuICBvdmVycmlkZSBjb2RlID0gRXJyb3JDb2RlLklOVkFMSURfQkFOQU5BX0lOX0JPWCBhcyBjb25zdDtcblxuICBvdmVycmlkZSB2aXNpdE5vZGUoY3R4OiBUZW1wbGF0ZUNvbnRleHQsIGNvbXBvbmVudDogdHMuQ2xhc3NEZWNsYXJhdGlvbiwgbm9kZTogVG1wbEFzdE5vZGV8QVNUKTpcbiAgICAgIE5nVGVtcGxhdGVEaWFnbm9zdGljPEVycm9yQ29kZS5JTlZBTElEX0JBTkFOQV9JTl9CT1g+W10ge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBUbXBsQXN0Qm91bmRFdmVudCkpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IG5hbWUgPSBub2RlLm5hbWU7XG4gICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoJ1snKSB8fCAhbmFtZS5lbmRzV2l0aCgnXScpKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBib3VuZFN5bnRheCA9IG5vZGUuc291cmNlU3Bhbi50b1N0cmluZygpO1xuICAgIGNvbnN0IGV4cGVjdGVkQm91bmRTeW50YXggPSBib3VuZFN5bnRheC5yZXBsYWNlKGAoJHtuYW1lfSlgLCBgWygke25hbWUuc2xpY2UoMSwgLTEpfSldYCk7XG4gICAgY29uc3QgZGlhZ25vc3RpYyA9IGN0eC50ZW1wbGF0ZVR5cGVDaGVja2VyLm1ha2VUZW1wbGF0ZURpYWdub3N0aWMoXG4gICAgICAgIGNvbXBvbmVudCwgbm9kZS5zb3VyY2VTcGFuLCB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuV2FybmluZywgRXJyb3JDb2RlLklOVkFMSURfQkFOQU5BX0lOX0JPWCxcbiAgICAgICAgYEluIHRoZSB0d28td2F5IGJpbmRpbmcgc3ludGF4IHRoZSBwYXJlbnRoZXNlcyBzaG91bGQgYmUgaW5zaWRlIHRoZSBicmFja2V0cywgZXguICcke1xuICAgICAgICAgICAgZXhwZWN0ZWRCb3VuZFN5bnRheH0nLiBcbiAgICAgICAgRmluZCBtb3JlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS90d28td2F5LWJpbmRpbmdgKTtcbiAgICByZXR1cm4gW2RpYWdub3N0aWNdO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable" />
9
+ import { AST, TmplAstNode } from '@angular/compiler';
10
+ import * as ts from 'typescript';
11
+ import { ErrorCode } from '../../../../diagnostics';
12
+ import { NgTemplateDiagnostic } from '../../../api';
13
+ import { TemplateCheckWithVisitor, TemplateContext } from '../../api';
14
+ /**
15
+ * Ensures the left side of a nullish coalescing operation is nullable.
16
+ * Returns diagnostics for the cases where the operator is useless.
17
+ * This check should only be use if `strictNullChecks` is enabled,
18
+ * otherwise it would produce inaccurate results.
19
+ */
20
+ export declare class NullishCoalescingNotNullableCheck extends TemplateCheckWithVisitor<ErrorCode.NULLISH_COALESCING_NOT_NULLABLE> {
21
+ code: ErrorCode.NULLISH_COALESCING_NOT_NULLABLE;
22
+ visitNode(ctx: TemplateContext, component: ts.ClassDeclaration, node: TmplAstNode | AST): NgTemplateDiagnostic<ErrorCode.NULLISH_COALESCING_NOT_NULLABLE>[];
23
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ (function (factory) {
9
+ if (typeof module === "object" && typeof module.exports === "object") {
10
+ var v = factory(require, exports);
11
+ if (v !== undefined) module.exports = v;
12
+ }
13
+ else if (typeof define === "function" && define.amd) {
14
+ define("@angular/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable", ["require", "exports", "tslib", "@angular/compiler", "typescript", "@angular/compiler-cli/src/ngtsc/diagnostics", "@angular/compiler-cli/src/ngtsc/typecheck/api", "@angular/compiler-cli/src/ngtsc/typecheck/extended/api"], factory);
15
+ }
16
+ })(function (require, exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.NullishCoalescingNotNullableCheck = void 0;
20
+ var tslib_1 = require("tslib");
21
+ var compiler_1 = require("@angular/compiler");
22
+ var ts = require("typescript");
23
+ var diagnostics_1 = require("@angular/compiler-cli/src/ngtsc/diagnostics");
24
+ var api_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/api");
25
+ var api_2 = require("@angular/compiler-cli/src/ngtsc/typecheck/extended/api");
26
+ /**
27
+ * Ensures the left side of a nullish coalescing operation is nullable.
28
+ * Returns diagnostics for the cases where the operator is useless.
29
+ * This check should only be use if `strictNullChecks` is enabled,
30
+ * otherwise it would produce inaccurate results.
31
+ */
32
+ var NullishCoalescingNotNullableCheck = /** @class */ (function (_super) {
33
+ tslib_1.__extends(NullishCoalescingNotNullableCheck, _super);
34
+ function NullishCoalescingNotNullableCheck() {
35
+ var _this = _super !== null && _super.apply(this, arguments) || this;
36
+ _this.code = diagnostics_1.ErrorCode.NULLISH_COALESCING_NOT_NULLABLE;
37
+ return _this;
38
+ }
39
+ NullishCoalescingNotNullableCheck.prototype.visitNode = function (ctx, component, node) {
40
+ if (!(node instanceof compiler_1.Binary) || node.operation !== '??')
41
+ return [];
42
+ var symbolLeft = ctx.templateTypeChecker.getSymbolOfNode(node.left, component);
43
+ if (symbolLeft.kind !== api_1.SymbolKind.Expression) {
44
+ return [];
45
+ }
46
+ var typeLeft = symbolLeft.tsType;
47
+ // If the left operand's type is different from its non-nullable self, then it must
48
+ // contain a null or undefined so this nullish coalescing operator is useful. No diagnostic to
49
+ // report.
50
+ if (typeLeft.getNonNullableType() !== typeLeft)
51
+ return [];
52
+ var symbol = ctx.templateTypeChecker.getSymbolOfNode(node, component);
53
+ if (symbol.kind !== api_1.SymbolKind.Expression) {
54
+ return [];
55
+ }
56
+ var span = ctx.templateTypeChecker.getTemplateMappingAtShimLocation(symbol.shimLocation).span;
57
+ var diagnostic = ctx.templateTypeChecker.makeTemplateDiagnostic(component, span, ts.DiagnosticCategory.Warning, diagnostics_1.ErrorCode.NULLISH_COALESCING_NOT_NULLABLE, "The left side of this nullish coalescing operation does not include 'null' or 'undefined' in its type, therefore the '??' operator can be safely removed.");
58
+ return [diagnostic];
59
+ };
60
+ return NullishCoalescingNotNullableCheck;
61
+ }(api_2.TemplateCheckWithVisitor));
62
+ exports.NullishCoalescingNotNullableCheck = NullishCoalescingNotNullableCheck;
63
+ });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9leHRlbmRlZC9jaGVja3MvbnVsbGlzaF9jb2FsZXNjaW5nX25vdF9udWxsYWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQTJEO0lBQzNELCtCQUFpQztJQUVqQywyRUFBa0Q7SUFDbEQscUVBQThEO0lBQzlELDhFQUFvRTtJQUVwRTs7Ozs7T0FLRztJQUNIO1FBQ0ksNkRBQW1FO1FBRHZFO1lBQUEscUVBNkJDO1lBM0JVLFVBQUksR0FBRyx1QkFBUyxDQUFDLCtCQUF3QyxDQUFDOztRQTJCckUsQ0FBQztRQXpCVSxxREFBUyxHQUFsQixVQUFtQixHQUFvQixFQUFFLFNBQThCLEVBQUUsSUFBcUI7WUFFNUYsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGlCQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFFcEUsSUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBRSxDQUFDO1lBQ2xGLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxnQkFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDN0MsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUNELElBQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDbkMsbUZBQW1GO1lBQ25GLDhGQUE4RjtZQUM5RixVQUFVO1lBQ1YsSUFBSSxRQUFRLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxRQUFRO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBRTFELElBQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBRSxDQUFDO1lBQ3pFLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBVSxDQUFDLFVBQVUsRUFBRTtnQkFDekMsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUNELElBQU0sSUFBSSxHQUNOLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3hGLElBQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FDN0QsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLHVCQUFTLENBQUMsK0JBQStCLEVBQ3pGLDJKQUEySixDQUFDLENBQUM7WUFDakssT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDSCx3Q0FBQztJQUFELENBQUMsQUE3QkQsQ0FDSSw4QkFBd0IsR0E0QjNCO0lBN0JZLDhFQUFpQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0FTVCwgQmluYXJ5LCBUbXBsQXN0Tm9kZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7RXJyb3JDb2RlfSBmcm9tICcuLi8uLi8uLi8uLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge05nVGVtcGxhdGVEaWFnbm9zdGljLCBTeW1ib2xLaW5kfSBmcm9tICcuLi8uLi8uLi9hcGknO1xuaW1wb3J0IHtUZW1wbGF0ZUNoZWNrV2l0aFZpc2l0b3IsIFRlbXBsYXRlQ29udGV4dH0gZnJvbSAnLi4vLi4vYXBpJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBsZWZ0IHNpZGUgb2YgYSBudWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0aW9uIGlzIG51bGxhYmxlLlxuICogUmV0dXJucyBkaWFnbm9zdGljcyBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSBvcGVyYXRvciBpcyB1c2VsZXNzLlxuICogVGhpcyBjaGVjayBzaG91bGQgb25seSBiZSB1c2UgaWYgYHN0cmljdE51bGxDaGVja3NgIGlzIGVuYWJsZWQsXG4gKiBvdGhlcndpc2UgaXQgd291bGQgcHJvZHVjZSBpbmFjY3VyYXRlIHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOdWxsaXNoQ29hbGVzY2luZ05vdE51bGxhYmxlQ2hlY2sgZXh0ZW5kc1xuICAgIFRlbXBsYXRlQ2hlY2tXaXRoVmlzaXRvcjxFcnJvckNvZGUuTlVMTElTSF9DT0FMRVNDSU5HX05PVF9OVUxMQUJMRT4ge1xuICBvdmVycmlkZSBjb2RlID0gRXJyb3JDb2RlLk5VTExJU0hfQ09BTEVTQ0lOR19OT1RfTlVMTEFCTEUgYXMgY29uc3Q7XG5cbiAgb3ZlcnJpZGUgdmlzaXROb2RlKGN0eDogVGVtcGxhdGVDb250ZXh0LCBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24sIG5vZGU6IFRtcGxBc3ROb2RlfEFTVCk6XG4gICAgICBOZ1RlbXBsYXRlRGlhZ25vc3RpYzxFcnJvckNvZGUuTlVMTElTSF9DT0FMRVNDSU5HX05PVF9OVUxMQUJMRT5bXSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEJpbmFyeSkgfHwgbm9kZS5vcGVyYXRpb24gIT09ICc/PycpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHN5bWJvbExlZnQgPSBjdHgudGVtcGxhdGVUeXBlQ2hlY2tlci5nZXRTeW1ib2xPZk5vZGUobm9kZS5sZWZ0LCBjb21wb25lbnQpITtcbiAgICBpZiAoc3ltYm9sTGVmdC5raW5kICE9PSBTeW1ib2xLaW5kLkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgdHlwZUxlZnQgPSBzeW1ib2xMZWZ0LnRzVHlwZTtcbiAgICAvLyBJZiB0aGUgbGVmdCBvcGVyYW5kJ3MgdHlwZSBpcyBkaWZmZXJlbnQgZnJvbSBpdHMgbm9uLW51bGxhYmxlIHNlbGYsIHRoZW4gaXQgbXVzdFxuICAgIC8vIGNvbnRhaW4gYSBudWxsIG9yIHVuZGVmaW5lZCBzbyB0aGlzIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRvciBpcyB1c2VmdWwuIE5vIGRpYWdub3N0aWMgdG9cbiAgICAvLyByZXBvcnQuXG4gICAgaWYgKHR5cGVMZWZ0LmdldE5vbk51bGxhYmxlVHlwZSgpICE9PSB0eXBlTGVmdCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgc3ltYm9sID0gY3R4LnRlbXBsYXRlVHlwZUNoZWNrZXIuZ2V0U3ltYm9sT2ZOb2RlKG5vZGUsIGNvbXBvbmVudCkhO1xuICAgIGlmIChzeW1ib2wua2luZCAhPT0gU3ltYm9sS2luZC5FeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHNwYW4gPVxuICAgICAgICBjdHgudGVtcGxhdGVUeXBlQ2hlY2tlci5nZXRUZW1wbGF0ZU1hcHBpbmdBdFNoaW1Mb2NhdGlvbihzeW1ib2wuc2hpbUxvY2F0aW9uKSEuc3BhbjtcbiAgICBjb25zdCBkaWFnbm9zdGljID0gY3R4LnRlbXBsYXRlVHlwZUNoZWNrZXIubWFrZVRlbXBsYXRlRGlhZ25vc3RpYyhcbiAgICAgICAgY29tcG9uZW50LCBzcGFuLCB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuV2FybmluZywgRXJyb3JDb2RlLk5VTExJU0hfQ09BTEVTQ0lOR19OT1RfTlVMTEFCTEUsXG4gICAgICAgIGBUaGUgbGVmdCBzaWRlIG9mIHRoaXMgbnVsbGlzaCBjb2FsZXNjaW5nIG9wZXJhdGlvbiBkb2VzIG5vdCBpbmNsdWRlICdudWxsJyBvciAndW5kZWZpbmVkJyBpbiBpdHMgdHlwZSwgdGhlcmVmb3JlIHRoZSAnPz8nIG9wZXJhdG9yIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZC5gKTtcbiAgICByZXR1cm4gW2RpYWdub3N0aWNdO1xuICB9XG59XG4iXX0=
@@ -11,9 +11,8 @@ import { ErrorCode } from '../../../diagnostics';
11
11
  import { TemplateDiagnostic, TemplateTypeChecker } from '../../api';
12
12
  import { ExtendedTemplateChecker, TemplateCheck } from '../api';
13
13
  export declare class ExtendedTemplateCheckerImpl implements ExtendedTemplateChecker {
14
- private readonly templateTypeChecker;
15
- private readonly typeChecker;
16
14
  private readonly templateChecks;
15
+ private ctx;
17
16
  constructor(templateTypeChecker: TemplateTypeChecker, typeChecker: ts.TypeChecker, templateChecks: TemplateCheck<ErrorCode>[]);
18
17
  getDiagnosticsForComponent(component: ts.ClassDeclaration): TemplateDiagnostic[];
19
18
  }
@@ -20,13 +20,12 @@
20
20
  var tslib_1 = require("tslib");
21
21
  var ExtendedTemplateCheckerImpl = /** @class */ (function () {
22
22
  function ExtendedTemplateCheckerImpl(templateTypeChecker, typeChecker, templateChecks) {
23
- this.templateTypeChecker = templateTypeChecker;
24
- this.typeChecker = typeChecker;
25
23
  this.templateChecks = templateChecks;
24
+ this.ctx = { templateTypeChecker: templateTypeChecker, typeChecker: typeChecker };
26
25
  }
27
26
  ExtendedTemplateCheckerImpl.prototype.getDiagnosticsForComponent = function (component) {
28
27
  var e_1, _a;
29
- var template = this.templateTypeChecker.getTemplate(component);
28
+ var template = this.ctx.templateTypeChecker.getTemplate(component);
30
29
  // Skip checks if component has no template. This can happen if the user writes a
31
30
  // `@Component()` but doesn't add the template, could happen in the language service
32
31
  // when users are in the middle of typing code.
@@ -34,15 +33,10 @@
34
33
  return [];
35
34
  }
36
35
  var diagnostics = [];
37
- var ctx = {
38
- templateTypeChecker: this.templateTypeChecker,
39
- typeChecker: this.typeChecker,
40
- component: component
41
- };
42
36
  try {
43
37
  for (var _b = tslib_1.__values(this.templateChecks), _c = _b.next(); !_c.done; _c = _b.next()) {
44
38
  var check = _c.value;
45
- diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(deduplicateDiagnostics(check.run(ctx, template)))));
39
+ diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(check.run(this.ctx, component, template))));
46
40
  }
47
41
  }
48
42
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -57,69 +51,5 @@
57
51
  return ExtendedTemplateCheckerImpl;
58
52
  }());
59
53
  exports.ExtendedTemplateCheckerImpl = ExtendedTemplateCheckerImpl;
60
- // Filter out duplicated diagnostics, this is possible due to the way the compiler
61
- // handles desugaring and produces `AST`s. Ex.
62
- //
63
- // ```
64
- // <div *ngIf="true" (foo)="bar">test</div>
65
- // ```
66
- //
67
- // Would result in the following AST:
68
- //
69
- // ```
70
- // Template {
71
- // outputs: [
72
- // BoundEvent {
73
- // name: 'foo',
74
- // /.../
75
- // }
76
- // ],
77
- // children: [
78
- // Element {
79
- // outputs: [
80
- // BoundEvent {
81
- // name: 'foo',
82
- // /.../
83
- // }
84
- // ]
85
- // }
86
- // ],
87
- // /.../
88
- // }
89
- // ```
90
- //
91
- // In this case a duplicated diagnostic could be generated for the output `foo`.
92
- // TODO(danieltrevino): handle duplicated diagnostics when they are being generated
93
- // to avoid extra work (could be directly in the visitor).
94
- // https://github.com/angular/angular/pull/42984#discussion_r684823926
95
- function deduplicateDiagnostics(diagnostics) {
96
- var e_2, _a;
97
- var result = [];
98
- var _loop_1 = function (newDiag) {
99
- var isDuplicateDiag = result.some(function (existingDiag) { return areDiagnosticsEqual(newDiag, existingDiag); });
100
- if (!isDuplicateDiag) {
101
- result.push(newDiag);
102
- }
103
- };
104
- try {
105
- for (var diagnostics_1 = tslib_1.__values(diagnostics), diagnostics_1_1 = diagnostics_1.next(); !diagnostics_1_1.done; diagnostics_1_1 = diagnostics_1.next()) {
106
- var newDiag = diagnostics_1_1.value;
107
- _loop_1(newDiag);
108
- }
109
- }
110
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
111
- finally {
112
- try {
113
- if (diagnostics_1_1 && !diagnostics_1_1.done && (_a = diagnostics_1.return)) _a.call(diagnostics_1);
114
- }
115
- finally { if (e_2) throw e_2.error; }
116
- }
117
- return result;
118
- }
119
- function areDiagnosticsEqual(first, second) {
120
- var _a, _b;
121
- return ((_a = first.file) === null || _a === void 0 ? void 0 : _a.fileName) === ((_b = second.file) === null || _b === void 0 ? void 0 : _b.fileName) && first.start === second.start &&
122
- first.length === second.length && first.code === second.code;
123
- }
124
54
  });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kZWRfdGVtcGxhdGVfY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2V4dGVuZGVkL3NyYy9leHRlbmRlZF90ZW1wbGF0ZV9jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFRSDtRQUNFLHFDQUNxQixtQkFBd0MsRUFDeEMsV0FBMkIsRUFDM0IsY0FBMEM7WUFGMUMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtZQUN4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7WUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQTRCO1FBQUcsQ0FBQztRQUVuRSxnRUFBMEIsR0FBMUIsVUFBMkIsU0FBOEI7O1lBQ3ZELElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakUsaUZBQWlGO1lBQ2pGLG9GQUFvRjtZQUNwRiwrQ0FBK0M7WUFDL0MsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUNyQixPQUFPLEVBQUUsQ0FBQzthQUNYO1lBQ0QsSUFBTSxXQUFXLEdBQXlCLEVBQUUsQ0FBQztZQUU3QyxJQUFNLEdBQUcsR0FBRztnQkFDVixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUM3QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFNBQVMsV0FBQTthQUNTLENBQUM7O2dCQUVyQixLQUFvQixJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBcEMsSUFBTSxLQUFLLFdBQUE7b0JBQ2QsV0FBVyxDQUFDLElBQUksT0FBaEIsV0FBVywyQ0FBUyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFFO2lCQUN2RTs7Ozs7Ozs7O1lBRUQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUNILGtDQUFDO0lBQUQsQ0FBQyxBQTVCRCxJQTRCQztJQTVCWSxrRUFBMkI7SUErQnhDLGtGQUFrRjtJQUNsRiw4Q0FBOEM7SUFDOUMsRUFBRTtJQUNGLE1BQU07SUFDTiwyQ0FBMkM7SUFDM0MsTUFBTTtJQUNOLEVBQUU7SUFDRixxQ0FBcUM7SUFDckMsRUFBRTtJQUNGLE1BQU07SUFDTixhQUFhO0lBQ2IsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIsYUFBYTtJQUNiLE9BQU87SUFDUCxPQUFPO0lBQ1AsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLHlCQUF5QjtJQUN6QixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLFVBQVU7SUFDVixRQUFRO0lBQ1IsT0FBTztJQUNQLFVBQVU7SUFDVixJQUFJO0lBQ0osTUFBTTtJQUNOLEVBQUU7SUFDRixnRkFBZ0Y7SUFDaEYsbUZBQW1GO0lBQ25GLDBEQUEwRDtJQUMxRCxzRUFBc0U7SUFDdEUsU0FBUyxzQkFBc0IsQ0FBMEIsV0FBZ0I7O1FBQ3ZFLElBQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztnQ0FDWixPQUFPO1lBQ2hCLElBQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBQSxZQUFZLElBQUksT0FBQSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQTFDLENBQTBDLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3RCOzs7WUFKSCxLQUFzQixJQUFBLGdCQUFBLGlCQUFBLFdBQVcsQ0FBQSx3Q0FBQTtnQkFBNUIsSUFBTSxPQUFPLHdCQUFBO3dCQUFQLE9BQU87YUFLakI7Ozs7Ozs7OztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTLG1CQUFtQixDQUFDLEtBQW9CLEVBQUUsTUFBcUI7O1FBQ3RFLE9BQU8sQ0FBQSxNQUFBLEtBQUssQ0FBQyxJQUFJLDBDQUFFLFFBQVEsT0FBSyxNQUFBLE1BQU0sQ0FBQyxJQUFJLDBDQUFFLFFBQVEsQ0FBQSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUs7WUFDakYsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Vycm9yQ29kZX0gZnJvbSAnLi4vLi4vLi4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHtUZW1wbGF0ZURpYWdub3N0aWMsIFRlbXBsYXRlVHlwZUNoZWNrZXJ9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQge0V4dGVuZGVkVGVtcGxhdGVDaGVja2VyLCBUZW1wbGF0ZUNoZWNrLCBUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4uL2FwaSc7XG5cbmV4cG9ydCBjbGFzcyBFeHRlbmRlZFRlbXBsYXRlQ2hlY2tlckltcGwgaW1wbGVtZW50cyBFeHRlbmRlZFRlbXBsYXRlQ2hlY2tlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVR5cGVDaGVja2VyOiBUZW1wbGF0ZVR5cGVDaGVja2VyLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlQ2hlY2tzOiBUZW1wbGF0ZUNoZWNrPEVycm9yQ29kZT5bXSkge31cblxuICBnZXREaWFnbm9zdGljc0ZvckNvbXBvbmVudChjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBUZW1wbGF0ZURpYWdub3N0aWNbXSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlVHlwZUNoZWNrZXIuZ2V0VGVtcGxhdGUoY29tcG9uZW50KTtcbiAgICAvLyBTa2lwIGNoZWNrcyBpZiBjb21wb25lbnQgaGFzIG5vIHRlbXBsYXRlLiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHVzZXIgd3JpdGVzIGFcbiAgICAvLyBgQENvbXBvbmVudCgpYCBidXQgZG9lc24ndCBhZGQgdGhlIHRlbXBsYXRlLCBjb3VsZCBoYXBwZW4gaW4gdGhlIGxhbmd1YWdlIHNlcnZpY2VcbiAgICAvLyB3aGVuIHVzZXJzIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHR5cGluZyBjb2RlLlxuICAgIGlmICh0ZW1wbGF0ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBkaWFnbm9zdGljczogVGVtcGxhdGVEaWFnbm9zdGljW10gPSBbXTtcblxuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgIHRlbXBsYXRlVHlwZUNoZWNrZXI6IHRoaXMudGVtcGxhdGVUeXBlQ2hlY2tlcixcbiAgICAgIHR5cGVDaGVja2VyOiB0aGlzLnR5cGVDaGVja2VyLFxuICAgICAgY29tcG9uZW50XG4gICAgfSBhcyBUZW1wbGF0ZUNvbnRleHQ7XG5cbiAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMudGVtcGxhdGVDaGVja3MpIHtcbiAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4uZGVkdXBsaWNhdGVEaWFnbm9zdGljcyhjaGVjay5ydW4oY3R4LCB0ZW1wbGF0ZSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gIH1cbn1cblxuXG4vLyBGaWx0ZXIgb3V0IGR1cGxpY2F0ZWQgZGlhZ25vc3RpY3MsIHRoaXMgaXMgcG9zc2libGUgZHVlIHRvIHRoZSB3YXkgdGhlIGNvbXBpbGVyXG4vLyBoYW5kbGVzIGRlc3VnYXJpbmcgYW5kIHByb2R1Y2VzIGBBU1Rgcy4gRXguXG4vL1xuLy8gYGBgXG4vLyA8ZGl2ICpuZ0lmPVwidHJ1ZVwiIChmb28pPVwiYmFyXCI+dGVzdDwvZGl2PlxuLy8gYGBgXG4vL1xuLy8gV291bGQgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgQVNUOlxuLy9cbi8vIGBgYFxuLy8gVGVtcGxhdGUge1xuLy8gICBvdXRwdXRzOiBbXG4vLyAgICBCb3VuZEV2ZW50IHtcbi8vICAgICAgbmFtZTogJ2ZvbycsXG4vLyAgICAgIC8uLi4vXG4vLyAgICB9XG4vLyAgIF0sXG4vLyAgIGNoaWxkcmVuOiBbXG4vLyAgICAgRWxlbWVudCB7XG4vLyAgICAgICBvdXRwdXRzOiBbXG4vLyAgICAgICAgIEJvdW5kRXZlbnQge1xuLy8gICAgICAgICAgIG5hbWU6ICdmb28nLFxuLy8gICAgICAgICAgIC8uLi4vXG4vLyAgICAgICAgIH1cbi8vICAgICAgIF1cbi8vICAgICB9XG4vLyAgIF0sXG4vLyAgIC8uLi4vXG4vLyB9XG4vLyBgYGBcbi8vXG4vLyBJbiB0aGlzIGNhc2UgYSBkdXBsaWNhdGVkIGRpYWdub3N0aWMgY291bGQgYmUgZ2VuZXJhdGVkIGZvciB0aGUgb3V0cHV0IGBmb29gLlxuLy8gVE9ETyhkYW5pZWx0cmV2aW5vKTogaGFuZGxlIGR1cGxpY2F0ZWQgZGlhZ25vc3RpY3Mgd2hlbiB0aGV5IGFyZSBiZWluZyBnZW5lcmF0ZWRcbi8vIHRvIGF2b2lkIGV4dHJhIHdvcmsgKGNvdWxkIGJlIGRpcmVjdGx5IGluIHRoZSB2aXNpdG9yKS5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvcHVsbC80Mjk4NCNkaXNjdXNzaW9uX3I2ODQ4MjM5MjZcbmZ1bmN0aW9uIGRlZHVwbGljYXRlRGlhZ25vc3RpY3M8VCBleHRlbmRzIHRzLkRpYWdub3N0aWM+KGRpYWdub3N0aWNzOiBUW10pOiBUW10ge1xuICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG5ld0RpYWcgb2YgZGlhZ25vc3RpY3MpIHtcbiAgICBjb25zdCBpc0R1cGxpY2F0ZURpYWcgPSByZXN1bHQuc29tZShleGlzdGluZ0RpYWcgPT4gYXJlRGlhZ25vc3RpY3NFcXVhbChuZXdEaWFnLCBleGlzdGluZ0RpYWcpKTtcbiAgICBpZiAoIWlzRHVwbGljYXRlRGlhZykge1xuICAgICAgcmVzdWx0LnB1c2gobmV3RGlhZyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFyZURpYWdub3N0aWNzRXF1YWwoZmlyc3Q6IHRzLkRpYWdub3N0aWMsIHNlY29uZDogdHMuRGlhZ25vc3RpYyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlyc3QuZmlsZT8uZmlsZU5hbWUgPT09IHNlY29uZC5maWxlPy5maWxlTmFtZSAmJiBmaXJzdC5zdGFydCA9PT0gc2Vjb25kLnN0YXJ0ICYmXG4gICAgICBmaXJzdC5sZW5ndGggPT09IHNlY29uZC5sZW5ndGggJiYgZmlyc3QuY29kZSA9PT0gc2Vjb25kLmNvZGU7XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kZWRfdGVtcGxhdGVfY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2V4dGVuZGVkL3NyYy9leHRlbmRlZF90ZW1wbGF0ZV9jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFRSDtRQUdFLHFDQUNJLG1CQUF3QyxFQUFFLFdBQTJCLEVBQ3BELGNBQTBDO1lBQTFDLG1CQUFjLEdBQWQsY0FBYyxDQUE0QjtZQUM3RCxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFDM0QsQ0FBQztRQUN0QixDQUFDO1FBRUQsZ0VBQTBCLEdBQTFCLFVBQTJCLFNBQThCOztZQUN2RCxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRSxpRkFBaUY7WUFDakYsb0ZBQW9GO1lBQ3BGLCtDQUErQztZQUMvQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQ3JCLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFDRCxJQUFNLFdBQVcsR0FBeUIsRUFBRSxDQUFDOztnQkFFN0MsS0FBb0IsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxjQUFjLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXBDLElBQU0sS0FBSyxXQUFBO29CQUNkLFdBQVcsQ0FBQyxJQUFJLE9BQWhCLFdBQVcsMkNBQVMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBRTtpQkFDL0Q7Ozs7Ozs7OztZQUVELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFDSCxrQ0FBQztJQUFELENBQUMsQUExQkQsSUEwQkM7SUExQlksa0VBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Vycm9yQ29kZX0gZnJvbSAnLi4vLi4vLi4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHtUZW1wbGF0ZURpYWdub3N0aWMsIFRlbXBsYXRlVHlwZUNoZWNrZXJ9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQge0V4dGVuZGVkVGVtcGxhdGVDaGVja2VyLCBUZW1wbGF0ZUNoZWNrLCBUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4uL2FwaSc7XG5cbmV4cG9ydCBjbGFzcyBFeHRlbmRlZFRlbXBsYXRlQ2hlY2tlckltcGwgaW1wbGVtZW50cyBFeHRlbmRlZFRlbXBsYXRlQ2hlY2tlciB7XG4gIHByaXZhdGUgY3R4OiBUZW1wbGF0ZUNvbnRleHQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICB0ZW1wbGF0ZVR5cGVDaGVja2VyOiBUZW1wbGF0ZVR5cGVDaGVja2VyLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlQ2hlY2tzOiBUZW1wbGF0ZUNoZWNrPEVycm9yQ29kZT5bXSkge1xuICAgIHRoaXMuY3R4ID0ge3RlbXBsYXRlVHlwZUNoZWNrZXI6IHRlbXBsYXRlVHlwZUNoZWNrZXIsIHR5cGVDaGVja2VyOiB0eXBlQ2hlY2tlcn0gYXNcbiAgICAgICAgVGVtcGxhdGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0RGlhZ25vc3RpY3NGb3JDb21wb25lbnQoY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogVGVtcGxhdGVEaWFnbm9zdGljW10ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5jdHgudGVtcGxhdGVUeXBlQ2hlY2tlci5nZXRUZW1wbGF0ZShjb21wb25lbnQpO1xuICAgIC8vIFNraXAgY2hlY2tzIGlmIGNvbXBvbmVudCBoYXMgbm8gdGVtcGxhdGUuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdXNlciB3cml0ZXMgYVxuICAgIC8vIGBAQ29tcG9uZW50KClgIGJ1dCBkb2Vzbid0IGFkZCB0aGUgdGVtcGxhdGUsIGNvdWxkIGhhcHBlbiBpbiB0aGUgbGFuZ3VhZ2Ugc2VydmljZVxuICAgIC8vIHdoZW4gdXNlcnMgYXJlIGluIHRoZSBtaWRkbGUgb2YgdHlwaW5nIGNvZGUuXG4gICAgaWYgKHRlbXBsYXRlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRpYWdub3N0aWNzOiBUZW1wbGF0ZURpYWdub3N0aWNbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLnRlbXBsYXRlQ2hlY2tzKSB7XG4gICAgICBkaWFnbm9zdGljcy5wdXNoKC4uLmNoZWNrLnJ1bih0aGlzLmN0eCwgY29tcG9uZW50LCB0ZW1wbGF0ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgfVxufVxuIl19