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/src/ml_parser/ast", ["require", "exports", "tslib", "@angular/compiler/src/ast_path"], factory);
|
---|
15 | }
|
---|
16 | })(function (require, exports) {
|
---|
17 | "use strict";
|
---|
18 | Object.defineProperty(exports, "__esModule", { value: true });
|
---|
19 | exports.findNode = exports.RecursiveVisitor = exports.visitAll = exports.Comment = exports.Element = exports.Attribute = exports.ExpansionCase = exports.Expansion = exports.Text = exports.NodeWithI18n = void 0;
|
---|
20 | var tslib_1 = require("tslib");
|
---|
21 | var ast_path_1 = require("@angular/compiler/src/ast_path");
|
---|
22 | var NodeWithI18n = /** @class */ (function () {
|
---|
23 | function NodeWithI18n(sourceSpan, i18n) {
|
---|
24 | this.sourceSpan = sourceSpan;
|
---|
25 | this.i18n = i18n;
|
---|
26 | }
|
---|
27 | return NodeWithI18n;
|
---|
28 | }());
|
---|
29 | exports.NodeWithI18n = NodeWithI18n;
|
---|
30 | var Text = /** @class */ (function (_super) {
|
---|
31 | tslib_1.__extends(Text, _super);
|
---|
32 | function Text(value, sourceSpan, tokens, i18n) {
|
---|
33 | var _this = _super.call(this, sourceSpan, i18n) || this;
|
---|
34 | _this.value = value;
|
---|
35 | _this.tokens = tokens;
|
---|
36 | return _this;
|
---|
37 | }
|
---|
38 | Text.prototype.visit = function (visitor, context) {
|
---|
39 | return visitor.visitText(this, context);
|
---|
40 | };
|
---|
41 | return Text;
|
---|
42 | }(NodeWithI18n));
|
---|
43 | exports.Text = Text;
|
---|
44 | var Expansion = /** @class */ (function (_super) {
|
---|
45 | tslib_1.__extends(Expansion, _super);
|
---|
46 | function Expansion(switchValue, type, cases, sourceSpan, switchValueSourceSpan, i18n) {
|
---|
47 | var _this = _super.call(this, sourceSpan, i18n) || this;
|
---|
48 | _this.switchValue = switchValue;
|
---|
49 | _this.type = type;
|
---|
50 | _this.cases = cases;
|
---|
51 | _this.switchValueSourceSpan = switchValueSourceSpan;
|
---|
52 | return _this;
|
---|
53 | }
|
---|
54 | Expansion.prototype.visit = function (visitor, context) {
|
---|
55 | return visitor.visitExpansion(this, context);
|
---|
56 | };
|
---|
57 | return Expansion;
|
---|
58 | }(NodeWithI18n));
|
---|
59 | exports.Expansion = Expansion;
|
---|
60 | var ExpansionCase = /** @class */ (function () {
|
---|
61 | function ExpansionCase(value, expression, sourceSpan, valueSourceSpan, expSourceSpan) {
|
---|
62 | this.value = value;
|
---|
63 | this.expression = expression;
|
---|
64 | this.sourceSpan = sourceSpan;
|
---|
65 | this.valueSourceSpan = valueSourceSpan;
|
---|
66 | this.expSourceSpan = expSourceSpan;
|
---|
67 | }
|
---|
68 | ExpansionCase.prototype.visit = function (visitor, context) {
|
---|
69 | return visitor.visitExpansionCase(this, context);
|
---|
70 | };
|
---|
71 | return ExpansionCase;
|
---|
72 | }());
|
---|
73 | exports.ExpansionCase = ExpansionCase;
|
---|
74 | var Attribute = /** @class */ (function (_super) {
|
---|
75 | tslib_1.__extends(Attribute, _super);
|
---|
76 | function Attribute(name, value, sourceSpan, keySpan, valueSpan, valueTokens, i18n) {
|
---|
77 | var _this = _super.call(this, sourceSpan, i18n) || this;
|
---|
78 | _this.name = name;
|
---|
79 | _this.value = value;
|
---|
80 | _this.keySpan = keySpan;
|
---|
81 | _this.valueSpan = valueSpan;
|
---|
82 | _this.valueTokens = valueTokens;
|
---|
83 | return _this;
|
---|
84 | }
|
---|
85 | Attribute.prototype.visit = function (visitor, context) {
|
---|
86 | return visitor.visitAttribute(this, context);
|
---|
87 | };
|
---|
88 | return Attribute;
|
---|
89 | }(NodeWithI18n));
|
---|
90 | exports.Attribute = Attribute;
|
---|
91 | var Element = /** @class */ (function (_super) {
|
---|
92 | tslib_1.__extends(Element, _super);
|
---|
93 | function Element(name, attrs, children, sourceSpan, startSourceSpan, endSourceSpan, i18n) {
|
---|
94 | if (endSourceSpan === void 0) { endSourceSpan = null; }
|
---|
95 | var _this = _super.call(this, sourceSpan, i18n) || this;
|
---|
96 | _this.name = name;
|
---|
97 | _this.attrs = attrs;
|
---|
98 | _this.children = children;
|
---|
99 | _this.startSourceSpan = startSourceSpan;
|
---|
100 | _this.endSourceSpan = endSourceSpan;
|
---|
101 | return _this;
|
---|
102 | }
|
---|
103 | Element.prototype.visit = function (visitor, context) {
|
---|
104 | return visitor.visitElement(this, context);
|
---|
105 | };
|
---|
106 | return Element;
|
---|
107 | }(NodeWithI18n));
|
---|
108 | exports.Element = Element;
|
---|
109 | var Comment = /** @class */ (function () {
|
---|
110 | function Comment(value, sourceSpan) {
|
---|
111 | this.value = value;
|
---|
112 | this.sourceSpan = sourceSpan;
|
---|
113 | }
|
---|
114 | Comment.prototype.visit = function (visitor, context) {
|
---|
115 | return visitor.visitComment(this, context);
|
---|
116 | };
|
---|
117 | return Comment;
|
---|
118 | }());
|
---|
119 | exports.Comment = Comment;
|
---|
120 | function visitAll(visitor, nodes, context) {
|
---|
121 | if (context === void 0) { context = null; }
|
---|
122 | var result = [];
|
---|
123 | var visit = visitor.visit ?
|
---|
124 | function (ast) { return visitor.visit(ast, context) || ast.visit(visitor, context); } :
|
---|
125 | function (ast) { return ast.visit(visitor, context); };
|
---|
126 | nodes.forEach(function (ast) {
|
---|
127 | var astResult = visit(ast);
|
---|
128 | if (astResult) {
|
---|
129 | result.push(astResult);
|
---|
130 | }
|
---|
131 | });
|
---|
132 | return result;
|
---|
133 | }
|
---|
134 | exports.visitAll = visitAll;
|
---|
135 | var RecursiveVisitor = /** @class */ (function () {
|
---|
136 | function RecursiveVisitor() {
|
---|
137 | }
|
---|
138 | RecursiveVisitor.prototype.visitElement = function (ast, context) {
|
---|
139 | this.visitChildren(context, function (visit) {
|
---|
140 | visit(ast.attrs);
|
---|
141 | visit(ast.children);
|
---|
142 | });
|
---|
143 | };
|
---|
144 | RecursiveVisitor.prototype.visitAttribute = function (ast, context) { };
|
---|
145 | RecursiveVisitor.prototype.visitText = function (ast, context) { };
|
---|
146 | RecursiveVisitor.prototype.visitComment = function (ast, context) { };
|
---|
147 | RecursiveVisitor.prototype.visitExpansion = function (ast, context) {
|
---|
148 | return this.visitChildren(context, function (visit) {
|
---|
149 | visit(ast.cases);
|
---|
150 | });
|
---|
151 | };
|
---|
152 | RecursiveVisitor.prototype.visitExpansionCase = function (ast, context) { };
|
---|
153 | RecursiveVisitor.prototype.visitChildren = function (context, cb) {
|
---|
154 | var results = [];
|
---|
155 | var t = this;
|
---|
156 | function visit(children) {
|
---|
157 | if (children)
|
---|
158 | results.push(visitAll(t, children, context));
|
---|
159 | }
|
---|
160 | cb(visit);
|
---|
161 | return Array.prototype.concat.apply([], results);
|
---|
162 | };
|
---|
163 | return RecursiveVisitor;
|
---|
164 | }());
|
---|
165 | exports.RecursiveVisitor = RecursiveVisitor;
|
---|
166 | function spanOf(ast) {
|
---|
167 | var start = ast.sourceSpan.start.offset;
|
---|
168 | var end = ast.sourceSpan.end.offset;
|
---|
169 | if (ast instanceof Element) {
|
---|
170 | if (ast.endSourceSpan) {
|
---|
171 | end = ast.endSourceSpan.end.offset;
|
---|
172 | }
|
---|
173 | else if (ast.children && ast.children.length) {
|
---|
174 | end = spanOf(ast.children[ast.children.length - 1]).end;
|
---|
175 | }
|
---|
176 | }
|
---|
177 | return { start: start, end: end };
|
---|
178 | }
|
---|
179 | function findNode(nodes, position) {
|
---|
180 | var path = [];
|
---|
181 | var visitor = new /** @class */ (function (_super) {
|
---|
182 | tslib_1.__extends(class_1, _super);
|
---|
183 | function class_1() {
|
---|
184 | return _super !== null && _super.apply(this, arguments) || this;
|
---|
185 | }
|
---|
186 | class_1.prototype.visit = function (ast, context) {
|
---|
187 | var span = spanOf(ast);
|
---|
188 | if (span.start <= position && position < span.end) {
|
---|
189 | path.push(ast);
|
---|
190 | }
|
---|
191 | else {
|
---|
192 | // Returning a value here will result in the children being skipped.
|
---|
193 | return true;
|
---|
194 | }
|
---|
195 | };
|
---|
196 | return class_1;
|
---|
197 | }(RecursiveVisitor));
|
---|
198 | visitAll(visitor, nodes);
|
---|
199 | return new ast_path_1.AstPath(path, position);
|
---|
200 | }
|
---|
201 | exports.findNode = findNode;
|
---|
202 | });
|
---|
203 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL21sX3BhcnNlci9hc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUVILDJEQUFvQztJQVlwQztRQUNFLHNCQUFtQixVQUEyQixFQUFTLElBQWU7WUFBbkQsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7WUFBUyxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQUcsQ0FBQztRQUU1RSxtQkFBQztJQUFELENBQUMsQUFIRCxJQUdDO0lBSHFCLG9DQUFZO0lBS2xDO1FBQTBCLGdDQUFZO1FBQ3BDLGNBQ1csS0FBYSxFQUFFLFVBQTJCLEVBQVMsTUFBK0IsRUFDekYsSUFBZTtZQUZuQixZQUdFLGtCQUFNLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FDeEI7WUFIVSxXQUFLLEdBQUwsS0FBSyxDQUFRO1lBQXNDLFlBQU0sR0FBTixNQUFNLENBQXlCOztRQUc3RixDQUFDO1FBQ1Esb0JBQUssR0FBZCxVQUFlLE9BQWdCLEVBQUUsT0FBWTtZQUMzQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDSCxXQUFDO0lBQUQsQ0FBQyxBQVRELENBQTBCLFlBQVksR0FTckM7SUFUWSxvQkFBSTtJQVdqQjtRQUErQixxQ0FBWTtRQUN6QyxtQkFDVyxXQUFtQixFQUFTLElBQVksRUFBUyxLQUFzQixFQUM5RSxVQUEyQixFQUFTLHFCQUFzQyxFQUFFLElBQWU7WUFGL0YsWUFHRSxrQkFBTSxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQ3hCO1lBSFUsaUJBQVcsR0FBWCxXQUFXLENBQVE7WUFBUyxVQUFJLEdBQUosSUFBSSxDQUFRO1lBQVMsV0FBSyxHQUFMLEtBQUssQ0FBaUI7WUFDMUMsMkJBQXFCLEdBQXJCLHFCQUFxQixDQUFpQjs7UUFF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QUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQ3pEO1NBQ0Y7UUFDRCxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsR0FBRyxLQUFBLEVBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLEtBQWEsRUFBRSxRQUFnQjtRQUN0RCxJQUFNLElBQUksR0FBVyxFQUFFLENBQUM7UUFFeEIsSUFBTSxPQUFPLEdBQUc7WUFBa0IsbUNBQWdCO1lBQTlCOztZQVVwQixDQUFDO1lBVEMsdUJBQUssR0FBTCxVQUFNLEdBQVMsRUFBRSxPQUFZO2dCQUMzQixJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2hCO3FCQUFNO29CQUNMLG9FQUFvRTtvQkFDcEUsT0FBTyxJQUFJLENBQUM7aUJBQ2I7WUFDSCxDQUFDO1lBQ0gsY0FBQztRQUFELENBQUMsQUFWbUIsQ0FBYyxnQkFBZ0IsRUFVakQsQ0FBQztRQUVGLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFekIsT0FBTyxJQUFJLGtCQUFPLENBQU8sSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFsQkQsNEJBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QXN0UGF0aH0gZnJvbSAnLi4vYXN0X3BhdGgnO1xuaW1wb3J0IHtJMThuTWV0YX0gZnJvbSAnLi4vaTE4bi9pMThuX2FzdCc7XG5pbXBvcnQge1BhcnNlU291cmNlU3Bhbn0gZnJvbSAnLi4vcGFyc2VfdXRpbCc7XG5pbXBvcnQge0ludGVycG9sYXRlZEF0dHJpYnV0ZVRva2VuLCBJbnRlcnBvbGF0ZWRUZXh0VG9rZW59IGZyb20gJy4vdG9rZW5zJztcblxuaW50ZXJmYWNlIEJhc2VOb2RlIHtcbiAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuO1xuICB2aXNpdCh2aXNpdG9yOiBWaXNpdG9yLCBjb250ZXh0OiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIE5vZGUgPSBBdHRyaWJ1dGV8Q29tbWVudHxFbGVtZW50fEV4cGFuc2lvbnxFeHBhbnNpb25DYXNlfFRleHQ7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOb2RlV2l0aEkxOG4gaW1wbGVtZW50cyBCYXNlTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4sIHB1YmxpYyBpMThuPzogSTE4bk1ldGEpIHt9XG4gIGFic3RyYWN0IHZpc2l0KHZpc2l0b3I6IFZpc2l0b3IsIGNvbnRleHQ6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFRleHQgZXh0ZW5kcyBOb2RlV2l0aEkxOG4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyB2YWx1ZTogc3RyaW5nLCBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4sIHB1YmxpYyB0b2tlbnM6IEludGVycG9sYXRlZFRleHRUb2tlbltdLFxuICAgICAgaTE4bj86IEkxOG5NZXRhKSB7XG4gICAgc3VwZXIoc291cmNlU3BhbiwgaTE4bik7XG4gIH1cbiAgb3ZlcnJpZGUgdmlzaXQodmlzaXRvcjogVmlzaXRvciwgY29udGV4dDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdFRleHQodGhpcywgY29udGV4dCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4cGFuc2lvbiBleHRlbmRzIE5vZGVXaXRoSTE4biB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIHN3aXRjaFZhbHVlOiBzdHJpbmcsIHB1YmxpYyB0eXBlOiBzdHJpbmcsIHB1YmxpYyBjYXNlczogRXhwYW5zaW9uQ2FzZVtdLFxuICAgICAgc291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuLCBwdWJsaWMgc3dpdGNoVmFsdWVTb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4sIGkxOG4/OiBJMThuTWV0YSkge1xuICAgIHN1cGVyKHNvdXJjZVNwYW4sIGkxOG4pO1xuICB9XG4gIG92ZXJyaWRlIHZpc2l0KHZpc2l0b3I6IFZpc2l0b3IsIGNvbnRleHQ6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRFeHBhbnNpb24odGhpcywgY29udGV4dCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4cGFuc2lvbkNhc2UgaW1wbGVtZW50cyBCYXNlTm9kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIHZhbHVlOiBzdHJpbmcsIHB1YmxpYyBleHByZXNzaW9uOiBOb2RlW10sIHB1YmxpYyBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4sXG4gICAgICBwdWJsaWMgdmFsdWVTb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4sIHB1YmxpYyBleHBTb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4pIHt9XG5cbiAgdmlzaXQodmlzaXRvcjogVmlzaXRvciwgY29udGV4dDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdEV4cGFuc2lvbkNhc2UodGhpcywgY29udGV4dCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZSBleHRlbmRzIE5vZGVXaXRoSTE4biB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHZhbHVlOiBzdHJpbmcsIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3BhbixcbiAgICAgIHJlYWRvbmx5IGtleVNwYW46IFBhcnNlU291cmNlU3Bhbnx1bmRlZmluZWQsIHB1YmxpYyB2YWx1ZVNwYW46IFBhcnNlU291cmNlU3Bhbnx1bmRlZmluZWQsXG4gICAgICBwdWJsaWMgdmFsdWVUb2tlbnM6IEludGVycG9sYXRlZEF0dHJpYnV0ZVRva2VuW118dW5kZWZpbmVkLCBpMThuOiBJMThuTWV0YXx1bmRlZmluZWQpIHtcbiAgICBzdXBlcihzb3VyY2VTcGFuLCBpMThuKTtcbiAgfVxuICBvdmVycmlkZSB2aXNpdCh2aXNpdG9yOiBWaXNpdG9yLCBjb250ZXh0OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QXR0cmlidXRlKHRoaXMsIGNvbnRleHQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50IGV4dGVuZHMgTm9kZVdpdGhJMThuIHtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgYXR0cnM6IEF0dHJpYnV0ZVtdLCBwdWJsaWMgY2hpbGRyZW46IE5vZGVbXSxcbiAgICAgIHNvdXJjZVNwYW46IFBhcnNlU291cmNlU3BhbiwgcHVibGljIHN0YXJ0U291cmNlU3BhbjogUGFyc2VTb3VyY2VTcGFuLFxuICAgICAgcHVibGljIGVuZFNvdXJjZVNwYW46IFBhcnNlU291cmNlU3BhbnxudWxsID0gbnVsbCwgaTE4bj86IEkxOG5NZXRhKSB7XG4gICAgc3VwZXIoc291cmNlU3BhbiwgaTE4bik7XG4gIH1cbiAgb3ZlcnJpZGUgdmlzaXQodmlzaXRvcjogVmlzaXRvciwgY29udGV4dDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmlzaXRvci52aXNpdEVsZW1lbnQodGhpcywgY29udGV4dCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnQgaW1wbGVtZW50cyBCYXNlTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogc3RyaW5nfG51bGwsIHB1YmxpYyBzb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW4pIHt9XG4gIHZpc2l0KHZpc2l0b3I6IFZpc2l0b3IsIGNvbnRleHQ6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb21tZW50KHRoaXMsIGNvbnRleHQpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlzaXRvciB7XG4gIC8vIFJldHVybmluZyBhIHRydXRoeSB2YWx1ZSBmcm9tIGB2aXNpdCgpYCB3aWxsIHByZXZlbnQgYHZpc2l0QWxsKClgIGZyb20gdGhlIGNhbGwgdG8gdGhlIHR5cGVkXG4gIC8vIG1ldGhvZCBhbmQgcmVzdWx0IHJldHVybmVkIHdpbGwgYmVjb21lIHRoZSByZXN1bHQgaW5jbHVkZWQgaW4gYHZpc2l0QWxsKClgcyByZXN1bHQgYXJyYXkuXG4gIHZpc2l0Pyhub2RlOiBOb2RlLCBjb250ZXh0OiBhbnkpOiBhbnk7XG5cbiAgdmlzaXRFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQsIGNvbnRleHQ6IGFueSk6IGFueTtcbiAgdmlzaXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIGNvbnRleHQ6IGFueSk6IGFueTtcbiAgdmlzaXRUZXh0KHRleHQ6IFRleHQsIGNvbnRleHQ6IGFueSk6IGFueTtcbiAgdmlzaXRDb21tZW50KGNvbW1lbnQ6IENvbW1lbnQsIGNvbnRleHQ6IGFueSk6IGFueTtcbiAgdmlzaXRFeHBhbnNpb24oZXhwYW5zaW9uOiBFeHBhbnNpb24sIGNvbnRleHQ6IGFueSk6IGFueTtcbiAgdmlzaXRFeHBhbnNpb25DYXNlKGV4cGFuc2lvbkNhc2U6IEV4cGFuc2lvbkNhc2UsIGNvbnRleHQ6IGFueSk6IGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZpc2l0QWxsKHZpc2l0b3I6IFZpc2l0b3IsIG5vZGVzOiBOb2RlW10sIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnlbXSB7XG4gIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICBjb25zdCB2aXNpdCA9IHZpc2l0b3IudmlzaXQgP1xuICAgICAgKGFzdDogTm9kZSkgPT4gdmlzaXRvci52aXNpdCEoYXN0LCBjb250ZXh0KSB8fCBhc3QudmlzaXQodmlzaXRvciwgY29udGV4dCkgOlxuICAgICAgKGFzdDogTm9kZSkgPT4gYXN0LnZpc2l0KHZpc2l0b3IsIGNvbnRleHQpO1xuICBub2Rlcy5mb3JFYWNoKGFzdCA9PiB7XG4gICAgY29uc3QgYXN0UmVzdWx0ID0gdmlzaXQoYXN0KTtcbiAgICBpZiAoYXN0UmVzdWx0KSB7XG4gICAgICByZXN1bHQucHVzaChhc3RSZXN1bHQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWN1cnNpdmVWaXNpdG9yIGltcGxlbWVudHMgVmlzaXRvciB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICB2aXNpdEVsZW1lbnQoYXN0OiBFbGVtZW50LCBjb250ZXh0OiBhbnkpOiBhbnkge1xuICAgIHRoaXMudmlzaXRDaGlsZHJlbihjb250ZXh0LCB2aXNpdCA9PiB7XG4gICAgICB2aXNpdChhc3QuYXR0cnMpO1xuICAgICAgdmlzaXQoYXN0LmNoaWxkcmVuKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZpc2l0QXR0cmlidXRlKGFzdDogQXR0cmlidXRlLCBjb250ZXh0OiBhbnkpOiBhbnkge31cbiAgdmlzaXRUZXh0KGFzdDogVGV4dCwgY29udGV4dDogYW55KTogYW55IHt9XG4gIHZpc2l0Q29tbWVudChhc3Q6IENvbW1lbnQsIGNvbnRleHQ6IGFueSk6IGFueSB7fVxuXG4gIHZpc2l0RXhwYW5zaW9uKGFzdDogRXhwYW5zaW9uLCBjb250ZXh0OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZpc2l0Q2hpbGRyZW4oY29udGV4dCwgdmlzaXQgPT4ge1xuICAgICAgdmlzaXQoYXN0LmNhc2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZpc2l0RXhwYW5zaW9uQ2FzZShhc3Q6IEV4cGFuc2lvbkNhc2UsIGNvbnRleHQ6IGFueSk6IGFueSB7fVxuXG4gIHByaXZhdGUgdmlzaXRDaGlsZHJlbjxUIGV4dGVuZHMgTm9kZT4oXG4gICAgICBjb250ZXh0OiBhbnksIGNiOiAodmlzaXQ6ICg8ViBleHRlbmRzIE5vZGU+KGNoaWxkcmVuOiBWW118dW5kZWZpbmVkKSA9PiB2b2lkKSkgPT4gdm9pZCkge1xuICAgIGxldCByZXN1bHRzOiBhbnlbXVtdID0gW107XG4gICAgbGV0IHQgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIHZpc2l0PFQgZXh0ZW5kcyBOb2RlPihjaGlsZHJlbjogVFtdfHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNoaWxkcmVuKSByZXN1bHRzLnB1c2godmlzaXRBbGwodCwgY2hpbGRyZW4sIGNvbnRleHQpKTtcbiAgICB9XG4gICAgY2IodmlzaXQpO1xuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCByZXN1bHRzKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBIdG1sQXN0UGF0aCA9IEFzdFBhdGg8Tm9kZT47XG5cbmZ1bmN0aW9uIHNwYW5PZihhc3Q6IE5vZGUpIHtcbiAgY29uc3Qgc3RhcnQgPSBhc3Quc291cmNlU3Bhbi5zdGFydC5vZmZzZXQ7XG4gIGxldCBlbmQgPSBhc3Quc291cmNlU3Bhbi5lbmQub2Zmc2V0O1xuICBpZiAoYXN0IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgIGlmIChhc3QuZW5kU291cmNlU3Bhbikge1xuICAgICAgZW5kID0gYXN0LmVuZFNvdXJjZVNwYW4uZW5kLm9mZnNldDtcbiAgICB9IGVsc2UgaWYgKGFzdC5jaGlsZHJlbiAmJiBhc3QuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBlbmQgPSBzcGFuT2YoYXN0LmNoaWxkcmVuW2FzdC5jaGlsZHJlbi5sZW5ndGggLSAxXSkuZW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge3N0YXJ0LCBlbmR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vZGUobm9kZXM6IE5vZGVbXSwgcG9zaXRpb246IG51bWJlcik6IEh0bWxBc3RQYXRoIHtcbiAgY29uc3QgcGF0aDogTm9kZVtdID0gW107XG5cbiAgY29uc3QgdmlzaXRvciA9IG5ldyBjbGFzcyBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3Ige1xuICAgIHZpc2l0KGFzdDogTm9kZSwgY29udGV4dDogYW55KTogYW55IHtcbiAgICAgIGNvbnN0IHNwYW4gPSBzcGFuT2YoYXN0KTtcbiAgICAgIGlmIChzcGFuLnN0YXJ0IDw9IHBvc2l0aW9uICYmIHBvc2l0aW9uIDwgc3Bhbi5lbmQpIHtcbiAgICAgICAgcGF0aC5wdXNoKGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXR1cm5pbmcgYSB2YWx1ZSBoZXJlIHdpbGwgcmVzdWx0IGluIHRoZSBjaGlsZHJlbiBiZWluZyBza2lwcGVkLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmlzaXRBbGwodmlzaXRvciwgbm9kZXMpO1xuXG4gIHJldHVybiBuZXcgQXN0UGF0aDxOb2RlPihwYXRoLCBwb3NpdGlvbik7XG59XG4iXX0= |
---|