/// /// /// /** * @author fenris */ type type_myreader = lib_lang.class_reader>; /** * @author fenris */ var generate_reader : (path : string)=>lib_call.type_promise = path => lib_call.promise_resolve(path) .then ( path => lib_call.promise_make ( (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 => lib_call.promise_make ( (resolve, reject) => { resolve(JSON.parse(buffer.toString())); } ) ) .then ( data => lib_call.promise_make ( (resolve, reject) => { resolve(lib_lang.class_reader.default_raw(data)); } ) ) ; /** * @author fenris */ var transform_arguments : (args : Array)=>lib_call.type_promise<{path ?: string; input ?: Array;}, Error> = args => lib_call.promise_resolve<{path ?: string; input ?: Array;}, Error>({}) .then<{path ?: string; input ?: Array;}/*, Error*/> ( parameters => lib_call.promise_make<{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 => lib_call.promise_make<{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)=>lib_call.type_promise = args => lib_call.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 => lib_call.promise_make<{parameters : {path ?: string; input ?: Array;}; reader : type_myreader;}, Error> ( (resolve_, reject_) => { resolve_({"parameters": parameters, "reader": reader}); } ) ) ) .then/*, Error*/> ( vars => lib_call.promise_make, 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 => lib_call.promise_make ( (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); } ) ;