/// /** * @author fenris */ type type_myreader = lib_lang.class_reader>; /** * @author fenris */ var generate_reader : (path : string)=>Promise = path => Promise.resolve(path) .then ( path => new Promise ( (resolve, reject) => { let _fs = require("fs"); _fs.readFile ( path, { "encoding": "utf8", "flag": "r", }, (error, buffer) => { if (error == null) { resolve(buffer); } else { reject(error); } } ) ; } ) ) .then ( buffer => new Promise ( (resolve, reject) => { resolve(JSON.parse(buffer.toString())); } ) ) .then ( data => new Promise ( (resolve, reject) => { resolve(lib_lang.class_reader.default_raw(data)); } ) ) ; /** * @author fenris */ var transform_arguments : (args : Array)=>Promise<{path ?: string; input ?: Array;}, Error> = args => Promise.resolve<{path ?: string; input ?: Array;}, Error>({}) .then<{path ?: string; input ?: Array;}, Error> ( parameters => new Promise<{path ?: string; input ?: Array;}, Error> ( (resolve, reject) => { let path : string; path = ((args.length >= 1) ? args.shift() : null); if (path == null) { reject(new Error("no path specified")); } else { resolve({"path": path, "input": parameters.input}); } } ) ) .then<{path ?: string; input ?: Array;}, Error> ( parameters => new Promise<{path ?: string; input ?: Array;}, Error> ( (resolve, reject) => { let input : Array; let input_raw : string = args.join(" "); if (input_raw == "") { reject(new Error("no input given")); } else { input = input_raw.split(""); resolve({"path": parameters.path, "input": input}); } } ) ) ; /** * @author fenris */ var main : (args : Array)=>Promise = args => Promise.resolve(undefined) .then<{path ?: string; input ?: Array;}, Error> ( _ => transform_arguments(args) ) .then<{parameters : {path ?: string; input ?: Array;}; reader : type_myreader;}, Error> ( parameters => generate_reader(parameters.path) .then<{parameters : {path ?: string; input ?: Array;}; reader : type_myreader;}, Error> ( reader => new Promise<{parameters : {path ?: string; input ?: Array;}; reader : type_myreader;}, Error> ( (resolve_, reject_) => { resolve_({"parameters": parameters, "reader": reader}); } ) ) ) .then, Error> ( vars => new Promise, Error> ( (resolve, reject) => { lib_log.level_push(1); let result : lib_lang.type_tree = vars.reader.run(vars.parameters.input); lib_log.level_pop(); if (result == null) { reject(new Error("didn't work")); } else { resolve(result); } } ) ) .then ( result => new Promise ( (resolve, reject) => { console.info(JSON.stringify(result, undefined, "\t")); resolve(undefined); } ) ) ; /** * @author fenris */ main(process.argv.slice(2)) .then ( output => { // console.info("--", "done:", output); } , error => { console.error("--", "failed:", error); } ) ;