UNPKG

16.9 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, options) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFpQztBQVdqQyxjQUFjLFVBQXlCO0lBRW5DLElBQU0sS0FBSyxHQUF1QixFQUFFLENBQUM7SUFDckMsSUFBTSxZQUFZLEdBQXVCLEVBQUUsQ0FBQztJQUU1QyxjQUFjLE9BQU87UUFDakIsSUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWIsNkJBQTZCLFFBQVE7UUFDakMsTUFBTSxDQUFBLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUMvQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQy9CLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDaEMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUNsQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzNELEtBQUssQ0FBQztZQUNWLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztn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QUFNLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekgsWUFBWTtJQUNaLElBQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFRLENBQUM7SUFDOUMsZ0dBQWdHO0lBQ2hHLCtDQUErQztJQUMvQyxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQVRELHNCQVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge0pzb25Uc09wdGlvbnN9IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkTm9kZSB7XG4gICAga2luZDogdHMuU3ludGF4S2luZFxuICAgIF9raW5kOiBzdHJpbmdcbiAgICBuYW1lPzogc3RyaW5nXG4gICAgdmFsdWU/OiBhbnlcbiAgICBib2R5PzogUGFyc2VkTm9kZVtdXG59XG5cbmZ1bmN0aW9uIHdhbGsoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IFBhcnNlZE5vZGVbXSB7XG5cbiAgICBjb25zdCBzdGFjayA6IEFycmF5PFBhcnNlZE5vZGU+ID0gW107XG4gICAgY29uc3QgZWxlbWVudFN0YWNrIDogQXJyYXk8UGFyc2VkTm9kZT4gPSBbXTtcblxuICAgIGZ1bmN0aW9uIHB1c2goZWxlbWVudCkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50U3RhY2tbZWxlbWVudFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBzaWJsaW5ncyA9IChwYXJlbnQgJiYgcGFyZW50LmJvZHkpID8gcGFyZW50LmJvZHkgOiBzdGFjaztcbiAgICAgICAgc2libGluZ3MucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBlYWNoUHJvcChzb3VyY2VGaWxlKTtcblxuICAgIHJldHVybiBzdGFjaztcblxuICAgIGZ1bmN0aW9uIGFkZEZyb21BcnJheUVsZW1lbnQoaW5jb21pbmcpIHtcbiAgICAgICAgc3dpdGNoKGluY29taW5nLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZDpcbiAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZDpcbiAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbDoge1xuICAgICAgICAgICAgICAgIHB1c2gobGl0ZXJhbFR5cGVGcm9tQXJyYXlFbGVtZW50KGluY29taW5nLCBpbmNvbWluZy5raW5kKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb246IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtID0ge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBfa2luZDogYE9iamVjdExpdGVyYWxFeHByZXNzaW9uYCxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgIGVhY2hQcm9wKGluY29taW5nLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICBfa2luZDogYEFycmF5TGl0ZXJhbEV4cHJlc3Npb25gLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHB1c2goZWxlbSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudFN0YWNrLnB1c2goZWxlbSk7XG4gICAgICAgICAgICAgICAgZWFjaFByb3AoaW5jb21pbmcuZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVhY2hQcm9wKHByb3BlcnRpZXMpIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICBpZiAoIXByb3AuaW5pdGlhbGl6ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkRnJvbUFycmF5RWxlbWVudChwcm9wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wLmluaXRpYWxpemVyLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuRmFsc2VLZXl3b3JkOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2gobGl0ZXJhbFR5cGVGcm9tUHJvcChwcm9wLCBwcm9wLmluaXRpYWxpemVyLmtpbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5QcmVmaXhVbmFyeUV4cHJlc3Npb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2gobGl0ZXJhbFR5cGVGcm9tUHJvcChwcm9wLCB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdPQkonLCBwcm9wLm5hbWUudGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2tpbmQ6IGBPYmplY3RMaXRlcmFsRXhwcmVzc2lvbmBcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0YWNrLnB1c2goZWxlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChwcm9wLmluaXRpYWxpemVyLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcHJvcC5uYW1lLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9raW5kOiBgQXJyYXlMaXRlcmFsRXhwcmVzc2lvbmBcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0YWNrLnB1c2goZWxlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChwcm9wLmluaXRpYWxpemVyLmVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXRlcmFsVHlwZUZyb21Qcm9wKHByb3AsIGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHByb3AubmFtZS50ZXh0LFxuICAgICAgICAgICAgdmFsdWU6IHByb3AuaW5pdGlhbGl6ZXIudGV4dCxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXRlcmFsVHlwZUZyb21BcnJheUVsZW1lbnQoZWxlbWVudCwga2luZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQudGV4dCxcbiAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LnRleHQsXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShzdHJpbmcsIG9wdGlvbnM6IEpzb25Uc09wdGlvbnMpOiBhbnlbXSB7XG4gICAgY29uc3QgaW5wdXQgPSBgY29uc3QgUk9PVE9CSiA9ICR7c3RyaW5nfWA7XG4gICAgbGV0IHNvdXJjZUZpbGUgOiB0cy5Tb3VyY2VGaWxlID0gdHMuY3JlYXRlU291cmNlRmlsZSgnanNvbi50cycsIGlucHV0LCB0cy5TY3JpcHRUYXJnZXQuRVMyMDE1LCAvKnNldFBhcmVudE5vZGVzICovIHRydWUpO1xuICAgIC8vIGRlbGludCBpdFxuICAgIGNvbnN0IF9qc29uID0gc291cmNlRmlsZS5zdGF0ZW1lbnRzWzBdIGFzIGFueTtcbiAgICAvLyBjb25zb2xlLmxvZyhzb3VyY2VGaWxlLnN0YXRlbWVudHNbMF0uZGVjbGFyYXRpb25MaXN0LmRlY2xhcmF0aW9uc1swXS5pbml0aWFsaXplci5wcm9wZXJ0aWVzKTtcbiAgICAvLyBlbGVtZW50U3RhY2sucHVzaCh7bmFtZTogJ3Jvb3QnLCBib2R5OiBbXX0pO1xuICAgIGNvbnN0IHN0YWNrID0gd2FsayhfanNvbi5kZWNsYXJhdGlvbkxpc3QuZGVjbGFyYXRpb25zWzBdLmluaXRpYWxpemVyLnByb3BlcnRpZXMpO1xuICAgIHJldHVybiBzdGFjaztcbn1cbiJdfQ==
\No newline at end of file