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;
- }
- }
|