191 lines
4.2 KiB
TypeScript
191 lines
4.2 KiB
TypeScript
|
|
|
||
|
|
///<reference path="../../lang/build/logic-decl.d.ts"/>
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author fenris
|
||
|
|
*/
|
||
|
|
type type_myreader = lib_lang.class_reader<char, lib_lang.type_terminal_default, string, lib_lang.type_tree<lib_lang.type_terminal_default>>;
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author fenris
|
||
|
|
*/
|
||
|
|
var generate_reader : (path : string)=>Promise<type_myreader, Error> =
|
||
|
|
path => Promise.resolve<string, Error>(path)
|
||
|
|
.then<Buffer, Error>
|
||
|
|
(
|
||
|
|
path => new Promise<Buffer, Error>
|
||
|
|
(
|
||
|
|
(resolve, reject) =>
|
||
|
|
{
|
||
|
|
let _fs = require("fs");
|
||
|
|
_fs.readFile
|
||
|
|
(
|
||
|
|
path,
|
||
|
|
{
|
||
|
|
"encoding": "utf8",
|
||
|
|
"flag": "r",
|
||
|
|
},
|
||
|
|
(error, buffer) =>
|
||
|
|
{
|
||
|
|
if (error == null)
|
||
|
|
{
|
||
|
|
resolve(buffer);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
reject(error);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
)
|
||
|
|
;
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.then<any, Error>
|
||
|
|
(
|
||
|
|
buffer => new Promise<any, Error>
|
||
|
|
(
|
||
|
|
(resolve, reject) =>
|
||
|
|
{
|
||
|
|
resolve(JSON.parse(buffer.toString()));
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.then<type_myreader, Error>
|
||
|
|
(
|
||
|
|
data => new Promise<type_myreader, Error>
|
||
|
|
(
|
||
|
|
(resolve, reject) =>
|
||
|
|
{
|
||
|
|
resolve(lib_lang.class_reader.default_raw(data));
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
;
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author fenris
|
||
|
|
*/
|
||
|
|
var transform_arguments : (args : Array<string>)=>Promise<{path ?: string; input ?: Array<char>;}, Error> =
|
||
|
|
args => Promise.resolve<{path ?: string; input ?: Array<char>;}, Error>({})
|
||
|
|
.then<{path ?: string; input ?: Array<char>;}, Error>
|
||
|
|
(
|
||
|
|
parameters => new Promise<{path ?: string; input ?: Array<char>;}, 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<char>;}, Error>
|
||
|
|
(
|
||
|
|
parameters => new Promise<{path ?: string; input ?: Array<char>;}, Error>
|
||
|
|
(
|
||
|
|
(resolve, reject) =>
|
||
|
|
{
|
||
|
|
let input : Array<char>;
|
||
|
|
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<string>)=>Promise<void, Error> =
|
||
|
|
args => Promise.resolve<void, Error>(undefined)
|
||
|
|
.then<{path ?: string; input ?: Array<char>;}, Error>
|
||
|
|
(
|
||
|
|
_ => transform_arguments(args)
|
||
|
|
)
|
||
|
|
.then<{parameters : {path ?: string; input ?: Array<char>;}; reader : type_myreader;}, Error>
|
||
|
|
(
|
||
|
|
parameters => generate_reader(parameters.path)
|
||
|
|
.then<{parameters : {path ?: string; input ?: Array<char>;}; reader : type_myreader;}, Error>
|
||
|
|
(
|
||
|
|
reader => new Promise<{parameters : {path ?: string; input ?: Array<char>;}; reader : type_myreader;}, Error>
|
||
|
|
(
|
||
|
|
(resolve_, reject_) =>
|
||
|
|
{
|
||
|
|
resolve_({"parameters": parameters, "reader": reader});
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.then<lib_lang.type_tree<lib_lang.type_terminal_default>, Error>
|
||
|
|
(
|
||
|
|
vars => new Promise<lib_lang.type_tree<lib_lang.type_terminal_default>, Error>
|
||
|
|
(
|
||
|
|
(resolve, reject) =>
|
||
|
|
{
|
||
|
|
lib_log.level_push(1);
|
||
|
|
let result : lib_lang.type_tree<lib_lang.type_terminal_default> = vars.reader.run(vars.parameters.input);
|
||
|
|
lib_log.level_pop();
|
||
|
|
if (result == null)
|
||
|
|
{
|
||
|
|
reject(new Error("didn't work"));
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
resolve(result);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.then<void, Error>
|
||
|
|
(
|
||
|
|
result => new Promise<void, Error>
|
||
|
|
(
|
||
|
|
(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);
|
||
|
|
}
|
||
|
|
)
|
||
|
|
;
|
||
|
|
|