1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var ts = require("typescript");
|
4 | function 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 | }
|
115 | function 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 | }
|
125 | exports.parse = parse;
|
126 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFpQztBQVVqQyxjQUFjLFVBQXlCO0lBRW5DLElBQU0sS0FBSyxHQUF1QixFQUFFLENBQUM7SUFDckMsSUFBTSxZQUFZLEdBQXVCLEVBQUUsQ0FBQztJQUU1QyxjQUFjLE9BQU87UUFDakIsSUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWIsNkJBQTZCLFFBQVE7UUFDakMsTUFBTSxDQUFBLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUMvQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQy9CLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDaEMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUNsQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzNELEtBQUssQ0FBQztZQUNWLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztn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QUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pILFlBQVk7SUFDWixJQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBUSxDQUFDO0lBQzlDLGdHQUFnRztJQUNoRywrQ0FBK0M7SUFDL0MsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRixNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFURCxzQkFTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZE5vZGUge1xuICAgIGtpbmQ6IHRzLlN5bnRheEtpbmRcbiAgICBfa2luZDogc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICAgIHZhbHVlPzogYW55XG4gICAgYm9keT86IFBhcnNlZE5vZGVbXVxufVxuXG5mdW5jdGlvbiB3YWxrKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBQYXJzZWROb2RlW10ge1xuXG4gICAgY29uc3Qgc3RhY2sgOiBBcnJheTxQYXJzZWROb2RlPiA9IFtdO1xuICAgIGNvbnN0IGVsZW1lbnRTdGFjayA6IEFycmF5PFBhcnNlZE5vZGU+ID0gW107XG5cbiAgICBmdW5jdGlvbiBwdXNoKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudFN0YWNrW2VsZW1lbnRTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSAocGFyZW50ICYmIHBhcmVudC5ib2R5KSA/IHBhcmVudC5ib2R5IDogc3RhY2s7XG4gICAgICAgIHNpYmxpbmdzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWFjaFByb3Aoc291cmNlRmlsZSk7XG5cbiAgICByZXR1cm4gc3RhY2s7XG5cbiAgICBmdW5jdGlvbiBhZGRGcm9tQXJyYXlFbGVtZW50KGluY29taW5nKSB7XG4gICAgICAgIHN3aXRjaChpbmNvbWluZy5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQ6XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuRmFsc2VLZXl3b3JkOlxuICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLlN0cmluZ0xpdGVyYWw6IHtcbiAgICAgICAgICAgICAgICBwdXNoKGxpdGVyYWxUeXBlRnJvbUFycmF5RWxlbWVudChpbmNvbWluZywgaW5jb21pbmcua2luZCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogdHMuU3ludGF4S2luZC5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgX2tpbmQ6IGBPYmplY3RMaXRlcmFsRXhwcmVzc2lvbmAsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICBlYWNoUHJvcChpbmNvbWluZy5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgX2tpbmQ6IGBBcnJheUxpdGVyYWxFeHByZXNzaW9uYCxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgIGVhY2hQcm9wKGluY29taW5nLmVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlYWNoUHJvcChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgaWYgKCFwcm9wLmluaXRpYWxpemVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZEZyb21BcnJheUVsZW1lbnQocHJvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcC5pbml0aWFsaXplci5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKGxpdGVyYWxUeXBlRnJvbVByb3AocHJvcCwgcHJvcC5pbml0aWFsaXplci5raW5kKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJlZml4VW5hcnlFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKGxpdGVyYWxUeXBlRnJvbVByb3AocHJvcCwgdHMuU3ludGF4S2luZC5OdW1lcmljTGl0ZXJhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnT0JKJywgcHJvcC5uYW1lLnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwcm9wLm5hbWUudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kOiB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9raW5kOiBgT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb25gXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocHJvcC5pbml0aWFsaXplci5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfa2luZDogYEFycmF5TGl0ZXJhbEV4cHJlc3Npb25gXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChlbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocHJvcC5pbml0aWFsaXplci5lbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbFR5cGVGcm9tUHJvcChwcm9wLCBraW5kKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBwcm9wLm5hbWUudGV4dCxcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wLmluaXRpYWxpemVyLnRleHQsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbFR5cGVGcm9tQXJyYXlFbGVtZW50KGVsZW1lbnQsIGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICBuYW1lOiBlbGVtZW50LnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogZWxlbWVudC50ZXh0LFxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2Uoc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGlucHV0ID0gYGNvbnN0IFJPT1RPQkogPSAke3N0cmluZ31gO1xuICAgIGxldCBzb3VyY2VGaWxlIDogdHMuU291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoJ2pzb24udHMnLCBpbnB1dCwgdHMuU2NyaXB0VGFyZ2V0LkVTMjAxNSwgLypzZXRQYXJlbnROb2RlcyAqLyB0cnVlKTtcbiAgICAvLyBkZWxpbnQgaXRcbiAgICBjb25zdCBfanNvbiA9IHNvdXJjZUZpbGUuc3RhdGVtZW50c1swXSBhcyBhbnk7XG4gICAgLy8gY29uc29sZS5sb2coc291cmNlRmlsZS5zdGF0ZW1lbnRzWzBdLmRlY2xhcmF0aW9uTGlzdC5kZWNsYXJhdGlvbnNbMF0uaW5pdGlhbGl6ZXIucHJvcGVydGllcyk7XG4gICAgLy8gZWxlbWVudFN0YWNrLnB1c2goe25hbWU6ICdyb290JywgYm9keTogW119KTtcbiAgICBjb25zdCBzdGFjayA9IHdhbGsoX2pzb24uZGVjbGFyYXRpb25MaXN0LmRlY2xhcmF0aW9uc1swXS5pbml0aWFsaXplci5wcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gc3RhY2s7XG59XG4iXX0= |
\ | No newline at end of file |