Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / handlebars / node_modules / uglify-js / bin / extract-props.js
1 #! /usr/bin/env node
2
3 "use strict";
4
5 var U2 = require("../tools/node");
6 var fs = require("fs");
7 var yargs = require("yargs");
8 var ARGS = yargs
9     .describe("o", "Output file")
10     .argv;
11 var files = ARGS._.slice();
12 var output = {
13     vars: {},
14     props: {}
15 };
16
17 if (ARGS.o) try {
18     output = JSON.parse(fs.readFileSync(ARGS.o, "utf8"));
19 } catch(ex) {}
20
21 files.forEach(getProps);
22
23 if (ARGS.o) {
24     fs.writeFileSync(ARGS.o, JSON.stringify(output, null, 2), "utf8");
25 } else {
26     console.log("%s", JSON.stringify(output, null, 2));
27 }
28
29 function getProps(filename) {
30     var code = fs.readFileSync(filename, "utf8");
31     var ast = U2.parse(code);
32
33     ast.walk(new U2.TreeWalker(function(node){
34         if (node instanceof U2.AST_ObjectKeyVal) {
35             add(node.key);
36         }
37         else if (node instanceof U2.AST_ObjectProperty) {
38             add(node.key.name);
39         }
40         else if (node instanceof U2.AST_Dot) {
41             add(node.property);
42         }
43         else if (node instanceof U2.AST_Sub) {
44             addStrings(node.property);
45         }
46     }));
47
48     function addStrings(node) {
49         var out = {};
50         try {
51             (function walk(node){
52                 node.walk(new U2.TreeWalker(function(node){
53                     if (node instanceof U2.AST_Seq) {
54                         walk(node.cdr);
55                         return true;
56                     }
57                     if (node instanceof U2.AST_String) {
58                         add(node.value);
59                         return true;
60                     }
61                     if (node instanceof U2.AST_Conditional) {
62                         walk(node.consequent);
63                         walk(node.alternative);
64                         return true;
65                     }
66                     throw out;
67                 }));
68             })(node);
69         } catch(ex) {
70             if (ex !== out) throw ex;
71         }
72     }
73
74     function add(name) {
75         output.props[name] = true;
76     }
77 }