///
///
///
/**
* @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);
}
)
;