UNPKG

@jkcfg/std

Version:

jk standard library

81 lines (80 loc) 3.06 kB
/** * @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); }