UNPKG

16.8 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var ts = require("typescript");
4function walk(sourceFile) {
5 var stack = [];
6 var elementStack = [];
7 function push(element) {
8 var parent = elementStack[elementStack.length - 1];
9 var siblings = (parent && parent.body) ? parent.body : stack;
10 siblings.push(element);
11 }
12 eachProp(sourceFile);
13 return stack;
14 function addFromArrayElement(incoming) {
15 switch (incoming.kind) {
16 case ts.SyntaxKind.NullKeyword:
17 case ts.SyntaxKind.TrueKeyword:
18 case ts.SyntaxKind.FalseKeyword:
19 case ts.SyntaxKind.NumericLiteral:
20 case ts.SyntaxKind.StringLiteral: {
21 push(literalTypeFromArrayElement(incoming, incoming.kind));
22 break;
23 }
24 case ts.SyntaxKind.ObjectLiteralExpression: {
25 var elem = {
26 kind: ts.SyntaxKind.ObjectLiteralExpression,
27 _kind: "ObjectLiteralExpression",
28 body: [],
29 };
30 push(elem);
31 elementStack.push(elem);
32 eachProp(incoming.properties);
33 elementStack.pop();
34 break;
35 }
36 case ts.SyntaxKind.ArrayLiteralExpression: {
37 var elem = {
38 kind: ts.SyntaxKind.ArrayLiteralExpression,
39 _kind: "ArrayLiteralExpression",
40 body: [],
41 };
42 push(elem);
43 elementStack.push(elem);
44 eachProp(incoming.elements);
45 elementStack.pop();
46 break;
47 }
48 }
49 }
50 function eachProp(properties) {
51 properties.forEach(function (prop) {
52 if (!prop.initializer) {
53 return addFromArrayElement(prop);
54 }
55 else {
56 switch (prop.initializer.kind) {
57 case ts.SyntaxKind.TrueKeyword:
58 case ts.SyntaxKind.FalseKeyword:
59 case ts.SyntaxKind.NullKeyword:
60 case ts.SyntaxKind.StringLiteral:
61 case ts.SyntaxKind.NumericLiteral: {
62 push(literalTypeFromProp(prop, prop.initializer.kind));
63 break;
64 }
65 case ts.SyntaxKind.PrefixUnaryExpression: {
66 push(literalTypeFromProp(prop, ts.SyntaxKind.NumericLiteral));
67 break;
68 }
69 case ts.SyntaxKind.ObjectLiteralExpression: {
70 // console.log('OBJ', prop.name.text);
71 var elem = {
72 name: prop.name.text,
73 body: [],
74 kind: ts.SyntaxKind.ObjectLiteralExpression,
75 _kind: "ObjectLiteralExpression"
76 };
77 push(elem);
78 elementStack.push(elem);
79 eachProp(prop.initializer.properties);
80 elementStack.pop();
81 break;
82 }
83 case ts.SyntaxKind.ArrayLiteralExpression: {
84 var elem = {
85 name: prop.name.text,
86 body: [],
87 kind: ts.SyntaxKind.ArrayLiteralExpression,
88 _kind: "ArrayLiteralExpression"
89 };
90 push(elem);
91 elementStack.push(elem);
92 eachProp(prop.initializer.elements);
93 elementStack.pop();
94 break;
95 }
96 }
97 }
98 });
99 }
100 function literalTypeFromProp(prop, kind) {
101 return {
102 name: prop.name.text,
103 value: prop.initializer.text,
104 kind: kind,
105 };
106 }
107 function literalTypeFromArrayElement(element, kind) {
108 return {
109 kind: kind,
110 name: element.text,
111 value: element.text,
112 };
113 }
114}
115function parse(string) {
116 var input = "const ROOTOBJ = " + string;
117 var sourceFile = ts.createSourceFile('json.ts', input, ts.ScriptTarget.ES2015, /*setParentNodes */ true);
118 // delint it
119 var _json = sourceFile.statements[0];
120 // console.log(sourceFile.statements[0].declarationList.declarations[0].initializer.properties);
121 // elementStack.push({name: 'root', body: []});
122 var stack = walk(_json.declarationList.declarations[0].initializer.properties);
123 return stack;
124}
125exports.parse = parse;
126//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFpQztBQVVqQyxjQUFjLFVBQXlCO0lBRW5DLElBQU0sS0FBSyxHQUF1QixFQUFFLENBQUM7SUFDckMsSUFBTSxZQUFZLEdBQXVCLEVBQUUsQ0FBQztJQUU1QyxjQUFjLE9BQU87UUFDakIsSUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWIsNkJBQTZCLFFBQVE7UUFDakMsTUFBTSxDQUFBLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUMvQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQy9CLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDaEMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUNsQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzNELEtBQUssQ0FBQztZQUNWLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDekMsSUFBTSxJQUFJLEdBQUc7b0JBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCO29CQUMzQyxLQUFLLEVBQUUseUJBQXlCO29CQUNoQyxJQUFJLEVBQUUsRUFBRTtpQkFDWCxDQUFDO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDWCxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM5QixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLEtBQUssQ0FBQztZQUNWLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDeEMsSUFBTSxJQUFJLEdBQUc7b0JBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCO29CQUMxQyxLQUFLLEVBQUUsd0JBQXdCO29CQUMvQixJQUFJLEVBQUUsRUFBRTtpQkFDWCxDQUFDO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDWCxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLEtBQUssQ0FBQztZQUNWLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixVQUFVO1FBQ3hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM1QixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO29CQUMvQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO29CQUNoQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO29CQUMvQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO29CQUNqQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN2RCxLQUFLLENBQUM7b0JBQ1YsQ0FBQztvQkFDRCxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQzlELEtBQUssQ0FBQztvQkFDVixDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO3dCQUN6QyxzQ0FBc0M7d0JBQ3RDLElBQU0sSUFBSSxHQUFHOzRCQUNULElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7NEJBQ3BCLElBQUksRUFBRSxFQUFFOzRCQUNSLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLHVCQUF1Qjs0QkFDM0MsS0FBSyxFQUFFLHlCQUF5Qjt5QkFDbkMsQ0FBQzt3QkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ1gsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDeEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3RDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbkIsS0FBSyxDQUFDO29CQUNWLENBQUM7b0JBQ0QsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUM7d0JBQ3hDLElBQU0sSUFBSSxHQUFHOzRCQUNULElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7NEJBQ3BCLElBQUksRUFBRSxFQUFFOzRCQUNSLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLHNCQUFzQjs0QkFDMUMsS0FBSyxFQUFFLHdCQUF3Qjt5QkFDbEMsQ0FBQzt3QkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ1gsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDeEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3BDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDbkIsS0FBSyxDQUFDO29CQUNWLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCw2QkFBNkIsSUFBSSxFQUFFLElBQUk7UUFDbkMsTUFBTSxDQUFDO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQzVCLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQTtJQUNMLENBQUM7SUFFRCxxQ0FBcUMsT0FBTyxFQUFFLElBQUk7UUFDOUMsTUFBTSxDQUFDO1lBQ0gsSUFBSSxNQUFBO1lBQ0osSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSTtTQUN0QixDQUFBO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFFRCxlQUFzQixNQUFNO0lBQ3hCLElBQU0sS0FBSyxHQUFHLHFCQUFtQixNQUFRLENBQUM7SUFDMUMsSUFBSSxVQUFVLEdBQW1CLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pILFlBQVk7SUFDWixJQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBUSxDQUFDO0lBQzlDLGdHQUFnRztJQUNoRywrQ0FBK0M7SUFDL0MsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRixNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFURCxzQkFTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZE5vZGUge1xuICAgIGtpbmQ6IHRzLlN5bnRheEtpbmRcbiAgICBfa2luZDogc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICAgIHZhbHVlPzogYW55XG4gICAgYm9keT86IFBhcnNlZE5vZGVbXVxufVxuXG5mdW5jdGlvbiB3YWxrKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBQYXJzZWROb2RlW10ge1xuXG4gICAgY29uc3Qgc3RhY2sgOiBBcnJheTxQYXJzZWROb2RlPiA9IFtdO1xuICAgIGNvbnN0IGVsZW1lbnRTdGFjayA6IEFycmF5PFBhcnNlZE5vZGU+ID0gW107XG5cbiAgICBmdW5jdGlvbiBwdXNoKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudFN0YWNrW2VsZW1lbnRTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSAocGFyZW50ICYmIHBhcmVudC5ib2R5KSA/IHBhcmVudC5ib2R5IDogc3RhY2s7XG4gICAgICAgIHNpYmxpbmdzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWFjaFByb3Aoc291cmNlRmlsZSk7XG5cbiAgICByZXR1cm4gc3RhY2s7XG5cbiAgICBmdW5jdGlvbiBhZGRGcm9tQXJyYXlFbGVtZW50KGluY29taW5nKSB7XG4gICAgICAgIHN3aXRjaChpbmNvbWluZy5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQ6XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuRmFsc2VLZXl3b3JkOlxuICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLlN0cmluZ0xpdGVyYWw6IHtcbiAgICAgICAgICAgICAgICBwdXNoKGxpdGVyYWxUeXBlRnJvbUFycmF5RWxlbWVudChpbmNvbWluZywgaW5jb21pbmcua2luZCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogdHMuU3ludGF4S2luZC5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgX2tpbmQ6IGBPYmplY3RMaXRlcmFsRXhwcmVzc2lvbmAsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICBlYWNoUHJvcChpbmNvbWluZy5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgX2tpbmQ6IGBBcnJheUxpdGVyYWxFeHByZXNzaW9uYCxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgIGVhY2hQcm9wKGluY29taW5nLmVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlYWNoUHJvcChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgaWYgKCFwcm9wLmluaXRpYWxpemVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZEZyb21BcnJheUVsZW1lbnQocHJvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcC5pbml0aWFsaXplci5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKGxpdGVyYWxUeXBlRnJvbVByb3AocHJvcCwgcHJvcC5pbml0aWFsaXplci5raW5kKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJlZml4VW5hcnlFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKGxpdGVyYWxUeXBlRnJvbVByb3AocHJvcCwgdHMuU3ludGF4S2luZC5OdW1lcmljTGl0ZXJhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnT0JKJywgcHJvcC5uYW1lLnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwcm9wLm5hbWUudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kOiB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9raW5kOiBgT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb25gXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocHJvcC5pbml0aWFsaXplci5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfa2luZDogYEFycmF5TGl0ZXJhbEV4cHJlc3Npb25gXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocHJvcC5pbml0aWFsaXplci5lbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbFR5cGVGcm9tUHJvcChwcm9wLCBraW5kKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBwcm9wLm5hbWUudGV4dCxcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wLmluaXRpYWxpemVyLnRleHQsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbFR5cGVGcm9tQXJyYXlFbGVtZW50KGVsZW1lbnQsIGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICBuYW1lOiBlbGVtZW50LnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogZWxlbWVudC50ZXh0LFxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Uoc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGlucHV0ID0gYGNvbnN0IFJPT1RPQkogPSAke3N0cmluZ31gO1xuICAgIGxldCBzb3VyY2VGaWxlIDogdHMuU291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoJ2pzb24udHMnLCBpbnB1dCwgdHMuU2NyaXB0VGFyZ2V0LkVTMjAxNSwgLypzZXRQYXJlbnROb2RlcyAqLyB0cnVlKTtcbiAgICAvLyBkZWxpbnQgaXRcbiAgICBjb25zdCBfanNvbiA9IHNvdXJjZUZpbGUuc3RhdGVtZW50c1swXSBhcyBhbnk7XG4gICAgLy8gY29uc29sZS5sb2coc291cmNlRmlsZS5zdGF0ZW1lbnRzWzBdLmRlY2xhcmF0aW9uTGlzdC5kZWNsYXJhdGlvbnNbMF0uaW5pdGlhbGl6ZXIucHJvcGVydGllcyk7XG4gICAgLy8gZWxlbWVudFN0YWNrLnB1c2goe25hbWU6ICdyb290JywgYm9keTogW119KTtcbiAgICBjb25zdCBzdGFjayA9IHdhbGsoX2pzb24uZGVjbGFyYXRpb25MaXN0LmRlY2xhcmF0aW9uc1swXS5pbml0aWFsaXplci5wcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gc3RhY2s7XG59XG4iXX0=
\No newline at end of file