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/language-service/src/binding_utils", ["require", "exports"], factory);
|
15 | }
|
16 | })(function (require, exports) {
|
17 | ;
|
18 | Object.defineProperty(exports, "__esModule", { value: true });
|
19 | exports.getBindingDescriptor = exports.ATTR = void 0;
|
20 | /**
|
21 | * Matches an Angular attribute to a binding type. See `ATTR` for more details.
|
22 | *
|
23 | * This is adapted from packages/compiler/src/render3/r3_template_transform.ts
|
24 | * to allow empty binding names and match template attributes.
|
25 | */
|
26 | var BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@)|(\*))(.*))|\[\(([^\)]*)\)\]|\[([^\]]*)\]|\(([^\)]*)\))$/;
|
27 | /**
|
28 | * Represents possible Angular attribute bindings, as indices on a match of `BIND_NAME_REGEXP`.
|
29 | */
|
30 | var ATTR;
|
31 | (function (ATTR) {
|
32 | /** "bind-" */
|
33 | ATTR[ATTR["KW_BIND"] = 1] = "KW_BIND";
|
34 | /** "let-" */
|
35 | ATTR[ATTR["KW_LET"] = 2] = "KW_LET";
|
36 | /** "ref-/#" */
|
37 | ATTR[ATTR["KW_REF"] = 3] = "KW_REF";
|
38 | /** "on-" */
|
39 | ATTR[ATTR["KW_ON"] = 4] = "KW_ON";
|
40 | /** "bindon-" */
|
41 | ATTR[ATTR["KW_BINDON"] = 5] = "KW_BINDON";
|
42 | /** "@" */
|
43 | ATTR[ATTR["KW_AT"] = 6] = "KW_AT";
|
44 | /**
|
45 | * "*"
|
46 | * Microsyntax template starts with '*'. See https://angular.io/api/core/TemplateRef
|
47 | */
|
48 | ATTR[ATTR["KW_MICROSYNTAX"] = 7] = "KW_MICROSYNTAX";
|
49 | /** The identifier after "bind-", "let-", "ref-/#", "on-", "bindon-", "@", or "*" */
|
50 | ATTR[ATTR["IDENT_KW"] = 8] = "IDENT_KW";
|
51 | /** Identifier inside [()] */
|
52 | ATTR[ATTR["IDENT_BANANA_BOX"] = 9] = "IDENT_BANANA_BOX";
|
53 | /** Identifier inside [] */
|
54 | ATTR[ATTR["IDENT_PROPERTY"] = 10] = "IDENT_PROPERTY";
|
55 | /** Identifier inside () */
|
56 | ATTR[ATTR["IDENT_EVENT"] = 11] = "IDENT_EVENT";
|
57 | })(ATTR = exports.ATTR || (exports.ATTR = {}));
|
58 | /**
|
59 | * Returns a descriptor for a given Angular attribute, or undefined if the attribute is
|
60 | * not an Angular attribute.
|
61 | */
|
62 | function getBindingDescriptor(attribute) {
|
63 | var bindParts = attribute.match(BIND_NAME_REGEXP);
|
64 | if (!bindParts)
|
65 | return;
|
66 | // The first match element is skipped because it matches the entire attribute text, including the
|
67 | // binding part.
|
68 | var kind = bindParts.findIndex(function (val, i) { return i > 0 && val !== undefined; });
|
69 | if (!(kind in ATTR)) {
|
70 | throw TypeError("\"" + kind + "\" is not a valid Angular binding kind for \"" + attribute + "\"");
|
71 | }
|
72 | return {
|
73 | kind: kind,
|
74 | name: bindParts[ATTR.IDENT_KW],
|
75 | };
|
76 | }
|
77 | exports.getBindingDescriptor = getBindingDescriptor;
|
78 | });
|
79 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZ191dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2Uvc3JjL2JpbmRpbmdfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUg7Ozs7O09BS0c7SUFDSCxJQUFNLGdCQUFnQixHQUNsQiwrR0FBK0csQ0FBQztJQUNwSDs7T0FFRztJQUNILElBQVksSUEwQlg7SUExQkQsV0FBWSxJQUFJO1FBQ2QsY0FBYztRQUNkLHFDQUFXLENBQUE7UUFDWCxhQUFhO1FBQ2IsbUNBQVUsQ0FBQTtRQUNWLGVBQWU7UUFDZixtQ0FBVSxDQUFBO1FBQ1YsWUFBWTtRQUNaLGlDQUFTLENBQUE7UUFDVCxnQkFBZ0I7UUFDaEIseUNBQWEsQ0FBQTtRQUNiLFVBQVU7UUFDVixpQ0FBUyxDQUFBO1FBQ1Q7OztXQUdHO1FBQ0gsbURBQWtCLENBQUE7UUFDbEIsb0ZBQW9GO1FBQ3BGLHVDQUFZLENBQUE7UUFDWiw2QkFBNkI7UUFDN0IsdURBQW9CLENBQUE7UUFDcEIsMkJBQTJCO1FBQzNCLG9EQUFtQixDQUFBO1FBQ25CLDJCQUEyQjtRQUMzQiw4Q0FBZ0IsQ0FBQTtJQUNsQixDQUFDLEVBMUJXLElBQUksR0FBSixZQUFJLEtBQUosWUFBSSxRQTBCZjtJQU1EOzs7T0FHRztJQUNILFNBQWdCLG9CQUFvQixDQUFDLFNBQWlCO1FBQ3BELElBQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDdkIsaUdBQWlHO1FBQ2pHLGdCQUFnQjtRQUNoQixJQUFNLElBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQUMsR0FBRyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBMUIsQ0FBMEIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtZQUNuQixNQUFNLFNBQVMsQ0FBQyxPQUFJLElBQUkscURBQThDLFNBQVMsT0FBRyxDQUFDLENBQUM7U0FDckY7UUFDRCxPQUFPO1lBQ0wsSUFBSSxNQUFBO1lBQ0osSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBYkQsb0RBYUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBNYXRjaGVzIGFuIEFuZ3VsYXIgYXR0cmlidXRlIHRvIGEgYmluZGluZyB0eXBlLiBTZWUgYEFUVFJgIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogVGhpcyBpcyBhZGFwdGVkIGZyb20gcGFja2FnZXMvY29tcGlsZXIvc3JjL3JlbmRlcjMvcjNfdGVtcGxhdGVfdHJhbnNmb3JtLnRzXG4gKiB0byBhbGxvdyBlbXB0eSBiaW5kaW5nIG5hbWVzIGFuZCBtYXRjaCB0ZW1wbGF0ZSBhdHRyaWJ1dGVzLlxuICovXG5jb25zdCBCSU5EX05BTUVfUkVHRVhQID1cbiAgICAvXig/Oig/Oig/OihiaW5kLSl8KGxldC0pfChyZWYtfCMpfChvbi0pfChiaW5kb24tKXwoQCl8KFxcKikpKC4qKSl8XFxbXFwoKFteXFwpXSopXFwpXFxdfFxcWyhbXlxcXV0qKVxcXXxcXCgoW15cXCldKilcXCkpJC87XG4vKipcbiAqIFJlcHJlc2VudHMgcG9zc2libGUgQW5ndWxhciBhdHRyaWJ1dGUgYmluZGluZ3MsIGFzIGluZGljZXMgb24gYSBtYXRjaCBvZiBgQklORF9OQU1FX1JFR0VYUGAuXG4gKi9cbmV4cG9ydCBlbnVtIEFUVFIge1xuICAvKiogXCJiaW5kLVwiICovXG4gIEtXX0JJTkQgPSAxLFxuICAvKiogXCJsZXQtXCIgKi9cbiAgS1dfTEVUID0gMixcbiAgLyoqIFwicmVmLS8jXCIgKi9cbiAgS1dfUkVGID0gMyxcbiAgLyoqIFwib24tXCIgKi9cbiAgS1dfT04gPSA0LFxuICAvKiogXCJiaW5kb24tXCIgKi9cbiAgS1dfQklORE9OID0gNSxcbiAgLyoqIFwiQFwiICovXG4gIEtXX0FUID0gNixcbiAgLyoqXG4gICAqIFwiKlwiXG4gICAqIE1pY3Jvc3ludGF4IHRlbXBsYXRlIHN0YXJ0cyB3aXRoICcqJy4gU2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29yZS9UZW1wbGF0ZVJlZlxuICAgKi9cbiAgS1dfTUlDUk9TWU5UQVggPSA3LFxuICAvKiogVGhlIGlkZW50aWZpZXIgYWZ0ZXIgXCJiaW5kLVwiLCBcImxldC1cIiwgXCJyZWYtLyNcIiwgXCJvbi1cIiwgXCJiaW5kb24tXCIsIFwiQFwiLCBvciBcIipcIiAqL1xuICBJREVOVF9LVyA9IDgsXG4gIC8qKiBJZGVudGlmaWVyIGluc2lkZSBbKCldICovXG4gIElERU5UX0JBTkFOQV9CT1ggPSA5LFxuICAvKiogSWRlbnRpZmllciBpbnNpZGUgW10gKi9cbiAgSURFTlRfUFJPUEVSVFkgPSAxMCxcbiAgLyoqIElkZW50aWZpZXIgaW5zaWRlICgpICovXG4gIElERU5UX0VWRU5UID0gMTEsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiBBVFRSO1xuICBuYW1lOiBzdHJpbmc7XG59XG4vKipcbiAqIFJldHVybnMgYSBkZXNjcmlwdG9yIGZvciBhIGdpdmVuIEFuZ3VsYXIgYXR0cmlidXRlLCBvciB1bmRlZmluZWQgaWYgdGhlIGF0dHJpYnV0ZSBpc1xuICogbm90IGFuIEFuZ3VsYXIgYXR0cmlidXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmluZGluZ0Rlc2NyaXB0b3IoYXR0cmlidXRlOiBzdHJpbmcpOiBCaW5kaW5nRGVzY3JpcHRvcnx1bmRlZmluZWQge1xuICBjb25zdCBiaW5kUGFydHMgPSBhdHRyaWJ1dGUubWF0Y2goQklORF9OQU1FX1JFR0VYUCk7XG4gIGlmICghYmluZFBhcnRzKSByZXR1cm47XG4gIC8vIFRoZSBmaXJzdCBtYXRjaCBlbGVtZW50IGlzIHNraXBwZWQgYmVjYXVzZSBpdCBtYXRjaGVzIHRoZSBlbnRpcmUgYXR0cmlidXRlIHRleHQsIGluY2x1ZGluZyB0aGVcbiAgLy8gYmluZGluZyBwYXJ0LlxuICBjb25zdCBraW5kID0gYmluZFBhcnRzLmZpbmRJbmRleCgodmFsLCBpKSA9PiBpID4gMCAmJiB2YWwgIT09IHVuZGVmaW5lZCk7XG4gIGlmICghKGtpbmQgaW4gQVRUUikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYFwiJHtraW5kfVwiIGlzIG5vdCBhIHZhbGlkIEFuZ3VsYXIgYmluZGluZyBraW5kIGZvciBcIiR7YXR0cmlidXRlfVwiYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBraW5kLFxuICAgIG5hbWU6IGJpbmRQYXJ0c1tBVFRSLklERU5UX0tXXSxcbiAgfTtcbn1cbiJdfQ== |
\ | No newline at end of file |