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