| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | #! /usr/bin/env node"use strict";var U2 = require("../tools/node");var fs = require("fs");var yargs = require("yargs");var ARGS = yargs    .describe("o", "Output file")    .argv;var files = ARGS._.slice();var output = {    vars: {},    props: {}};if (ARGS.o) try {    output = JSON.parse(fs.readFileSync(ARGS.o, "utf8"));} catch(ex) {}files.forEach(getProps);if (ARGS.o) {    fs.writeFileSync(ARGS.o, JSON.stringify(output, null, 2), "utf8");} else {    console.log("%s", JSON.stringify(output, null, 2));}function getProps(filename) {    var code = fs.readFileSync(filename, "utf8");    var ast = U2.parse(code);    ast.walk(new U2.TreeWalker(function(node){        if (node instanceof U2.AST_ObjectKeyVal) {            add(node.key);        }        else if (node instanceof U2.AST_ObjectProperty) {            add(node.key.name);        }        else if (node instanceof U2.AST_Dot) {            add(node.property);        }        else if (node instanceof U2.AST_Sub) {            addStrings(node.property);        }    }));    function addStrings(node) {        var out = {};        try {            (function walk(node){                node.walk(new U2.TreeWalker(function(node){                    if (node instanceof U2.AST_Seq) {                        walk(node.cdr);                        return true;                    }                    if (node instanceof U2.AST_String) {                        add(node.value);                        return true;                    }                    if (node instanceof U2.AST_Conditional) {                        walk(node.consequent);                        walk(node.alternative);                        return true;                    }                    throw out;                }));            })(node);        } catch(ex) {            if (ex !== out) throw ex;        }    }    function add(name) {        output.props[name] = true;    }}
 |