@jkcfg/std
Version:
jk standard library
81 lines (80 loc) • 3.06 kB
JavaScript
/**
* @module std
*/
import { __std } from './internal/__std_generated';
import { flatbuffers } from './internal/flatbuffers';
import { sendRequest } from './internal/deferred';
export const stdout = Symbol('<stdout>');
/* we re-define Format from the generated __std.Format to document it */
export var Format;
(function (Format) {
Format[Format["FromExtension"] = 0] = "FromExtension";
Format[Format["JSON"] = 1] = "JSON";
Format[Format["YAML"] = 2] = "YAML";
Format[Format["Raw"] = 3] = "Raw";
Format[Format["YAMLStream"] = 4] = "YAMLStream";
Format[Format["JSONStream"] = 5] = "JSONStream";
Format[Format["HCL"] = 6] = "HCL";
})(Format || (Format = {}));
export var Overwrite;
(function (Overwrite) {
Overwrite[Overwrite["Skip"] = 0] = "Skip";
Overwrite[Overwrite["Write"] = 1] = "Write";
Overwrite[Overwrite["Err"] = 2] = "Err";
})(Overwrite || (Overwrite = {}));
export function write(value, path = stdout, opts = {}) {
if (value === undefined) {
throw TypeError('cannot write undefined value');
}
const { format = Format.FromExtension, indent = 2, overwrite = Overwrite.Write, module, } = opts;
const pathArg = (path === stdout) ? '' : path;
let overwriteVal;
if (typeof overwrite === 'boolean') {
overwriteVal = overwrite ? Overwrite.Write : Overwrite.Skip;
}
else {
overwriteVal = overwrite;
}
const builder = new flatbuffers.Builder(1024);
const str = (format === Format.Raw) ? value.toString() : JSON.stringify(value);
const strOffset = builder.createString(str);
const pathOffset = builder.createString(pathArg);
let moduleOffset = 0;
if (module !== undefined) {
moduleOffset = builder.createString(module);
}
__std.WriteArgs.startWriteArgs(builder);
__std.WriteArgs.addValue(builder, strOffset);
__std.WriteArgs.addPath(builder, pathOffset);
__std.WriteArgs.addFormat(builder, format);
__std.WriteArgs.addIndent(builder, indent);
__std.WriteArgs.addOverwrite(builder, overwriteVal);
if (module !== undefined) {
__std.WriteArgs.addModule(builder, moduleOffset);
}
const args = __std.WriteArgs.endWriteArgs(builder);
__std.Message.startMessage(builder);
__std.Message.addArgsType(builder, __std.Args.WriteArgs);
__std.Message.addArgs(builder, args);
const message = __std.Message.endMessage(builder);
builder.finish(message);
const buf = sendRequest(builder.asArrayBuffer());
if (buf === undefined) {
return;
}
const data = new flatbuffers.ByteBuffer(new Uint8Array(buf));
const resp = __std.Error.getRootAsError(data);
throw new Error(resp.message());
}
// print is a convenience for printing any value to stdout
export function print(value, opts = {}) {
if (arguments.length === 0) {
write('\n', stdout, { format: Format.Raw });
return;
}
if (value === undefined) {
write('undefined\n', stdout, { format: Format.Raw });
return;
}
write(value, stdout, opts);
}