@adviser/cement 0.1.24 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.cjs CHANGED
@@ -77,7 +77,9 @@ __export(src_exports, {
77
77
  Future: () => Future,
78
78
  IDMode: () => IDMode,
79
79
  IsLogger: () => IsLogger,
80
+ Keyed: () => Keyed,
80
81
  KeyedResolvOnce: () => KeyedResolvOnce,
82
+ KeyedResolvSeq: () => KeyedResolvSeq,
81
83
  Level: () => Level,
82
84
  LevelHandlerImpl: () => LevelHandlerImpl,
83
85
  LogCollector: () => LogCollector,
@@ -88,6 +90,7 @@ __export(src_exports, {
88
90
  Option: () => Option,
89
91
  RandomMode: () => RandomMode,
90
92
  ResolveOnce: () => ResolveOnce,
93
+ ResolveSeq: () => ResolveSeq,
91
94
  Result: () => Result,
92
95
  ResultError: () => ResultError,
93
96
  ResultOK: () => ResultOK,
@@ -674,6 +677,18 @@ var LoggerImpl = class _LoggerImpl {
674
677
  }
675
678
  return this;
676
679
  }
680
+ Len(value, key = "len") {
681
+ if (Array.isArray(value)) {
682
+ this._attributes[key] = logValue(() => value.length);
683
+ } else if (typeof value === "string") {
684
+ this._attributes[key] = logValue(() => value.length);
685
+ } else if (typeof value === "object" && value !== null) {
686
+ this._attributes[key] = logValue(() => Object.keys(value).length);
687
+ } else {
688
+ this.Int(key, -1);
689
+ }
690
+ return this;
691
+ }
677
692
  Url(url, key = "url") {
678
693
  this.Ref(key, () => url.toString());
679
694
  return this;
@@ -722,27 +737,36 @@ var LoggerImpl = class _LoggerImpl {
722
737
  Object.assign(this._attributes, this._withAttributes);
723
738
  return ret;
724
739
  }
740
+ _produceError(attr, ...args) {
741
+ var _a;
742
+ attr["msg"] = logValue(args.join(" "));
743
+ const msg = attr["msg"].value();
744
+ if (typeof msg === "string" && !msg.trim().length) {
745
+ delete attr["msg"];
746
+ }
747
+ if (((_a = attr["ts"]) == null ? void 0 : _a.value()) === "ETERNITY") {
748
+ this.Timestamp.call({
749
+ _sys: this._sys,
750
+ _attributes: attr
751
+ });
752
+ }
753
+ return JSON.stringify(resolveLogValue(attr));
754
+ }
725
755
  Msg(...args) {
726
- const error = this._resetAttributes(() => {
727
- var _a, _b, _c;
756
+ const fnError = this._resetAttributes(() => {
757
+ var _a, _b;
728
758
  const doWrite = this._levelHandler.isEnabled((_a = this._attributes["level"]) == null ? void 0 : _a.value(), (_b = this._attributes["module"]) == null ? void 0 : _b.value());
729
- this._attributes["msg"] = logValue(args.join(" "));
730
- const msg = this._attributes["msg"].value();
731
- if (typeof msg === "string" && !msg.trim().length) {
732
- delete this._attributes["msg"];
733
- }
734
- if (((_c = this._attributes["ts"]) == null ? void 0 : _c.value()) === "ETERNITY") {
735
- this.Timestamp();
736
- }
737
- const str = JSON.stringify(resolveLogValue(this._attributes));
759
+ let fnRet = () => this._produceError(__spreadValues({}, this._attributes), ...args);
738
760
  if (doWrite) {
761
+ const str = this._produceError(__spreadValues({}, this._attributes), ...args);
739
762
  const encoded = encoder.encode(str + "\n");
740
763
  this._logWriter.write(encoded);
764
+ fnRet = () => str;
741
765
  }
742
- return new Error(str);
766
+ return fnRet;
743
767
  });
744
768
  return {
745
- AsError: () => error
769
+ AsError: () => new Error(fnError())
746
770
  };
747
771
  }
748
772
  };
@@ -774,6 +798,10 @@ var WithLoggerBuilder = class {
774
798
  this._li.Str(key, value);
775
799
  return this;
776
800
  }
801
+ Len(value, key) {
802
+ this._li.Len(value, key);
803
+ return this;
804
+ }
777
805
  Ref(key, action) {
778
806
  this._li.Ref(key, action);
779
807
  return this;
@@ -1074,6 +1102,26 @@ _resolveFn = new WeakMap();
1074
1102
  _rejectFn = new WeakMap();
1075
1103
 
1076
1104
  // src/resolve-once.ts
1105
+ var ResolveSeq = class {
1106
+ constructor(ctx) {
1107
+ this._seqFutures = [];
1108
+ this.ctx = ctx;
1109
+ }
1110
+ reset() {
1111
+ }
1112
+ async _step(item) {
1113
+ if (!item) {
1114
+ return;
1115
+ }
1116
+ item.fn(this.ctx).then((value) => item.future.resolve(value)).catch((e) => item.future.reject(e)).finally(() => this._step(this._seqFutures.shift()));
1117
+ }
1118
+ async add(fn) {
1119
+ const future = new Future();
1120
+ this._seqFutures.push({ future, fn });
1121
+ this._step(this._seqFutures.shift());
1122
+ return future.asPromise();
1123
+ }
1124
+ };
1077
1125
  var ResolveOnce = class {
1078
1126
  constructor(ctx) {
1079
1127
  this._onceDone = false;
@@ -1112,6 +1160,8 @@ var ResolveOnce = class {
1112
1160
  this._onceFutures.length = 0;
1113
1161
  }).catch((e) => {
1114
1162
  this._onceError = e;
1163
+ this._onceOk = false;
1164
+ this._onceValue = void 0;
1115
1165
  this._onceDone = true;
1116
1166
  this._onceFutures.forEach((f) => f.reject(this._onceError));
1117
1167
  this._onceFutures.length = 0;
@@ -1120,9 +1170,10 @@ var ResolveOnce = class {
1120
1170
  return future.asPromise();
1121
1171
  }
1122
1172
  };
1123
- var KeyedResolvOnce = class {
1124
- constructor() {
1173
+ var Keyed = class {
1174
+ constructor(factory) {
1125
1175
  this._map = /* @__PURE__ */ new Map();
1176
+ this.factory = factory;
1126
1177
  }
1127
1178
  async asyncGet(key) {
1128
1179
  return this.get(await key());
@@ -1131,24 +1182,36 @@ var KeyedResolvOnce = class {
1131
1182
  if (typeof key === "function") {
1132
1183
  key = key();
1133
1184
  }
1134
- let resolveOnce = this._map.get(key);
1135
- if (!resolveOnce) {
1136
- resolveOnce = new ResolveOnce(key);
1137
- this._map.set(key, resolveOnce);
1185
+ let keyed = this._map.get(key);
1186
+ if (!keyed) {
1187
+ keyed = this.factory(key);
1188
+ this._map.set(key, keyed);
1138
1189
  }
1139
- return resolveOnce;
1190
+ return keyed;
1140
1191
  }
1141
1192
  reset() {
1142
- this._map.forEach((resolveOnce) => resolveOnce.reset());
1193
+ this._map.forEach((keyed) => keyed.reset());
1143
1194
  this._map.clear();
1144
1195
  }
1145
1196
  };
1197
+ var KeyedResolvOnce = class extends Keyed {
1198
+ constructor() {
1199
+ super((key) => new ResolveOnce(key));
1200
+ }
1201
+ };
1202
+ var KeyedResolvSeq = class extends Keyed {
1203
+ constructor() {
1204
+ super((key) => new ResolveSeq(key));
1205
+ }
1206
+ };
1146
1207
  // Annotate the CommonJS export names for ESM import in node:
1147
1208
  0 && (module.exports = {
1148
1209
  Future,
1149
1210
  IDMode,
1150
1211
  IsLogger,
1212
+ Keyed,
1151
1213
  KeyedResolvOnce,
1214
+ KeyedResolvSeq,
1152
1215
  Level,
1153
1216
  LevelHandlerImpl,
1154
1217
  LogCollector,
@@ -1159,6 +1222,7 @@ var KeyedResolvOnce = class {
1159
1222
  Option,
1160
1223
  RandomMode,
1161
1224
  ResolveOnce,
1225
+ ResolveSeq,
1162
1226
  Result,
1163
1227
  ResultError,
1164
1228
  ResultOK,
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/logger.ts","../../src/sys_abstraction.ts","../../src/time.ts","../../src/base_sys_abstraction.ts","../../src/web/web_sys_abstraction.ts","../../src/logger_impl.ts","../../src/test/log_collector.ts","../../src/test/mock_logger.ts","../../src/result.ts","../../src/option.ts","../../src/future.ts","../../src/resolve-once.ts"],"sourcesContent":["export * from \"./file_service\";\nexport * from \"./logger_impl\";\nexport * from \"./logger\";\nexport * from \"./sys_abstraction\";\nexport * from \"./time\";\nexport * from \"./test/log_collector\";\nexport * from \"./test/mock_logger\";\nexport * from \"./result\";\nexport * from \"./option\";\nexport * from \"./future\";\nexport * from \"./resolve-once\";\n","import { Result } from \"./result\";\n\nexport enum Level {\n WARN = \"warn\",\n DEBUG = \"debug\",\n INFO = \"info\",\n ERROR = \"error\",\n}\n\nexport type Serialized = string | number | boolean;\nexport type FnSerialized = () => Serialized;\nexport interface LoggerInterface<R> {\n Module(key: string): R;\n // if modules is empty, set for all Levels\n EnableLevel(level: Level, ...modules: string[]): R;\n DisableLevel(level: Level, ...modules: string[]): R;\n\n SetDebug(...modules: (string | string[])[]): R;\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): R;\n Result<T>(key: string, res: Result<T>): R;\n // default key url\n Url(url: URL, key?: string): R;\n\n Str(key: string, value?: string): R;\n Error(): R;\n Warn(): R;\n Debug(): R;\n Log(): R;\n WithLevel(level: Level): R;\n\n Err(err: unknown): R; // could be Error, or something which coerces to string\n Info(): R;\n Timestamp(): R;\n Any(key: string, value: unknown): R;\n Dur(key: string, nsec: number): R;\n Uint64(key: string, value: number): R;\n Int(key: string, value: number): R;\n Bool(key: string, value: unknown): R;\n}\n\nexport function IsLogger(obj: unknown): obj is Logger {\n return (\n typeof obj === \"object\" &&\n [\n \"Module\",\n \"EnableLevel\",\n \"DisableLevel\",\n \"SetDebug\",\n \"Str\",\n \"Error\",\n \"Warn\",\n \"Debug\",\n \"Log\",\n \"WithLevel\",\n \"Err\",\n \"Info\",\n \"Timestamp\",\n \"Any\",\n \"Dur\",\n \"Uint64\",\n ]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((fn) => typeof (obj as any)[fn] === \"function\")\n .reduce((a, b) => a && b, true)\n );\n}\n\nexport interface WithLogger extends LoggerInterface<WithLogger> {\n Logger(): Logger;\n}\n\nexport interface AsError {\n AsError(): Error;\n}\n\nexport interface Logger extends LoggerInterface<Logger> {\n With(): WithLogger;\n\n Msg(...args: string[]): AsError;\n Flush(): Promise<void>;\n}\n","import { FileService } from \"./file_service\";\nimport { Time } from \"./time\";\n\nexport enum TimeMode {\n REAL = \"real\",\n CONST = \"const\",\n STEP = \"step\",\n}\n\nexport enum RandomMode {\n CONST = \"const\",\n STEP = \"step\",\n RANDOM = \"random\",\n}\n\nexport enum IDMode {\n UUID = \"uuid\",\n CONST = \"const\",\n STEP = \"step\",\n}\n\nexport function String2TimeMode(s?: string): TimeMode {\n switch (s?.toLowerCase()) {\n case \"real\":\n return TimeMode.REAL;\n case \"const\":\n return TimeMode.CONST;\n case \"step\":\n return TimeMode.STEP;\n default:\n return TimeMode.REAL;\n }\n}\n\nexport type VoidFunc = () => void | Promise<void>;\n\nexport interface SystemService {\n Env(): Record<string, string>;\n Args(): string[];\n OnExit(hdl: VoidFunc): VoidFunc;\n Exit(code: number): void;\n}\n\nexport interface SysAbstraction {\n Time(): Time;\n Stdout(): WritableStream<Uint8Array>;\n Stderr(): WritableStream<Uint8Array>;\n NextId(): string;\n Random0ToValue(value: number): number;\n System(): SystemService;\n FileSystem(): FileService;\n}\n","export abstract class Time {\n abstract Now(): Date;\n abstract Sleep(duration: Duration): Promise<void>;\n TimeSince(start: Date): Duration {\n const now = this.Now();\n return now.getTime() - start.getTime();\n }\n}\n\nexport type Duration = number;\n\nexport enum TimeUnits {\n Microsecond = 1,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Second = 1000 * Microsecond,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Minute = 60 * Second,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Hour = 60 * Minute,\n}\n","import { FileService } from \"./file_service\";\nimport { TimeMode, RandomMode, IDMode, SystemService, VoidFunc, SysAbstraction } from \"./sys_abstraction\";\nimport { Time } from \"./time\";\n\nexport class SysTime extends Time {\n Now(): Date {\n return new Date();\n }\n Sleep(duration: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, duration);\n });\n }\n}\n\nexport class ConstTime extends Time {\n Now(): Date {\n return new Date(2021, 1, 1, 0, 0, 0, 0);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Sleep(duration: number): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport class StepTime extends Time {\n _step: Date;\n constructor() {\n super();\n this._step = new ConstTime().Now();\n }\n Now() {\n if (this._step.getTime() === 0) {\n this._step = new ConstTime().Now();\n return this._step;\n }\n this._step = new Date(this._step.getTime() + 1000);\n return this._step;\n }\n Sleep(duration: number): Promise<void> {\n this._step = new Date(this._step.getTime() + duration);\n return Promise.resolve();\n }\n}\n\nexport function TimeFactory(timeMode: TimeMode): Time {\n switch (timeMode) {\n case TimeMode.REAL:\n return new SysTime();\n case TimeMode.CONST:\n return new ConstTime();\n case TimeMode.STEP:\n return new StepTime();\n }\n return new SysTime();\n}\n\nexport class RandomService {\n readonly _mode: RandomMode;\n _step = 0;\n constructor(mode: RandomMode) {\n this._mode = mode;\n }\n Random0ToValue(value: number): number {\n switch (this._mode) {\n case RandomMode.CONST:\n return 0.5 * value;\n case RandomMode.STEP:\n this._step += 0.0001;\n return this._step * value;\n case RandomMode.RANDOM:\n return Math.random() * value;\n default:\n throw new Error(\"Unknown RandomMode\");\n }\n }\n}\n\nexport class IdService {\n readonly _mode: IDMode;\n _step = 0;\n constructor(mode?: IDMode) {\n if (!mode) {\n mode = IDMode.UUID;\n }\n this._mode = mode;\n }\n NextId(): string {\n switch (this._mode) {\n case IDMode.UUID:\n return crypto.randomUUID();\n case IDMode.CONST:\n return \"VeryUniqueID\";\n case IDMode.STEP:\n return `STEPId-${this._step++}`;\n default:\n throw new Error(\"Unknown IDMode\");\n }\n }\n}\n\nexport interface BaseSysAbstractionParams {\n readonly FileSystem: FileService;\n readonly SystemService: SystemService;\n}\n\nexport interface ExitHandler {\n readonly hdl: VoidFunc;\n readonly id: string;\n}\n\nexport interface ExitService {\n injectExitHandlers(hdls: ExitHandler[]): void;\n exit(code: number): void;\n}\n\nconst decoder = new TextDecoder();\nexport class BaseSysAbstraction {\n readonly _time = new SysTime();\n readonly _stdout = new WritableStream({\n write(chunk) {\n return new Promise((resolve) => {\n const decoded = decoder.decode(chunk);\n console.log(decoded.trimEnd());\n resolve();\n });\n },\n });\n readonly _stderr = new WritableStream({\n write(chunk) {\n return new Promise((resolve) => {\n const decoded = decoder.decode(chunk);\n console.error(decoded.trimEnd());\n resolve();\n });\n },\n });\n\n readonly _idService = new IdService();\n readonly _randomService = new RandomService(RandomMode.RANDOM);\n readonly _fileSystem: FileService;\n readonly _systemService: SystemService;\n\n constructor(params: BaseSysAbstractionParams) {\n this._fileSystem = params.FileSystem;\n this._systemService = params.SystemService;\n }\n}\n\nexport interface WrapperSysAbstractionParams {\n readonly TimeMode?: TimeMode;\n readonly IdMode?: IDMode;\n readonly Stdout?: WritableStream<Uint8Array>;\n readonly Stderr?: WritableStream<Uint8Array>;\n readonly RandomMode?: RandomMode;\n readonly FileSystem?: FileService;\n readonly SystemService?: SystemService;\n}\n\nexport class WrapperSysAbstraction implements SysAbstraction {\n readonly _time: Time;\n readonly _stdout: WritableStream<Uint8Array>;\n readonly _stderr: WritableStream<Uint8Array>;\n readonly _idService: IdService;\n readonly _randomService: RandomService;\n readonly _fileSystem: FileService;\n readonly _systemService: SystemService;\n constructor(base: BaseSysAbstraction, params?: WrapperSysAbstractionParams) {\n this._time = base._time;\n this._stdout = base._stdout;\n this._stderr = base._stderr;\n this._idService = base._idService;\n this._randomService = base._randomService;\n this._fileSystem = base._fileSystem;\n this._systemService = base._systemService;\n if (params) {\n if (params.TimeMode) {\n this._time = TimeFactory(params.TimeMode);\n }\n if (params.Stdout) {\n this._stdout = params.Stdout;\n }\n if (params.Stderr) {\n this._stderr = params.Stderr;\n }\n if (params.IdMode) {\n this._idService = new IdService(params.IdMode);\n }\n if (params.RandomMode) {\n this._randomService = new RandomService(params.RandomMode);\n }\n if (params.FileSystem) {\n this._fileSystem = params.FileSystem;\n }\n if (params.SystemService) {\n this._systemService = params.SystemService;\n }\n }\n }\n Time(): Time {\n return this._time;\n }\n NextId(): string {\n return this._idService.NextId();\n }\n Random0ToValue(value: number): number {\n return this._randomService.Random0ToValue(value);\n }\n Stdout(): WritableStream {\n return this._stdout;\n }\n Stderr(): WritableStream {\n return this._stderr;\n }\n\n System(): SystemService {\n return this._systemService;\n }\n FileSystem(): FileService {\n return this._fileSystem;\n }\n}\n// export const BaseSysAbstraction = new BaseSysAbstractionImpl()\n","import { BaseSysAbstraction, WrapperSysAbstraction, WrapperSysAbstractionParams } from \"../base_sys_abstraction\";\nimport { FileService, NamedWritableStream } from \"../file_service\";\nimport { SysAbstraction, SystemService, VoidFunc } from \"../sys_abstraction\";\n\nclass WebFileService implements FileService {\n get baseDir(): string {\n throw new Error(\"basedir-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n create(fname: string): Promise<NamedWritableStream> {\n throw new Error(\"create-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n readFileString(fname: string): Promise<string> {\n throw new Error(\"readFileString-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n writeFileString(fname: string, content: string): Promise<void> {\n throw new Error(\"writeFileString-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abs(fname: string): string {\n throw new Error(\"abs-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n join(...paths: string[]): string {\n throw new Error(\"join-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n relative(from: string, to?: string | undefined): string {\n throw new Error(\"relative-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname(fname: string): string {\n throw new Error(\"dirname-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n basename(fname: string): string {\n throw new Error(\"basename-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n nodeImport(fname: string): string {\n throw new Error(\"nodeImport-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isAbsolute(fname: string): boolean {\n throw new Error(\"isAbsolute-Method not implemented.\");\n }\n}\n\nclass WebSystemService implements SystemService {\n Env(): Record<string, string> {\n throw new Error(\"Env-Method not implemented.\");\n }\n Args(): string[] {\n throw new Error(\"Args-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n OnExit(hdl: VoidFunc): VoidFunc {\n throw new Error(\"OnExit-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Exit(code: number): void {\n throw new Error(\"Exit-Method not implemented.\");\n }\n}\n\nlet my: BaseSysAbstraction | undefined = undefined;\nexport function WebSysAbstraction(param?: WrapperSysAbstractionParams): SysAbstraction {\n if (!my) {\n my = new BaseSysAbstraction({\n FileSystem: new WebFileService(),\n SystemService: new WebSystemService(),\n });\n }\n return new WrapperSysAbstraction(my, param);\n}\n","// import { v4 } from \"uuid\";\nimport { AsError, FnSerialized, Level, Logger, Serialized, WithLogger } from \"./logger\";\nimport { WebSysAbstraction } from \"./web/web_sys_abstraction\";\nimport { SysAbstraction } from \"./sys_abstraction\";\nimport { Result } from \"./result\";\n\nconst encoder = new TextEncoder();\n\nclass LogValue {\n constructor(readonly fn: FnSerialized) {}\n value(): Serialized {\n return this.fn();\n }\n}\n\nfunction resolveLogValue(val: JsonRecord): Record<string, Serialized> {\n const ret: Record<string, Serialized> = {};\n Object.keys(val).forEach((key) => {\n const v = val[key];\n if (v instanceof LogValue) {\n ret[key] = v.value();\n }\n });\n return ret;\n}\n\nfunction logValue(val: Serialized | FnSerialized | JsonRecord | undefined | null): LogValue {\n switch (typeof val) {\n case \"function\":\n return new LogValue(val);\n case \"string\":\n return new LogValue(() => val.toString());\n case \"number\":\n return new LogValue(() => val);\n case \"boolean\":\n return new LogValue(() => val);\n case \"object\":\n return new LogValue(() => JSON.stringify(val));\n default:\n if (!val) {\n return new LogValue(() => \"--Falsy--\");\n }\n throw new Error(`Invalid type:${typeof val}`);\n }\n}\n\ntype JsonRecord = Record<string, LogValue>;\n\nexport interface LevelHandler {\n enableLevel(level: Level, ...modules: string[]): void;\n disableLevel(level: Level, ...modules: string[]): void;\n setDebug(...modules: (string | string[])[]): void;\n isEnabled(ilevel: unknown, module: unknown): boolean;\n}\n\nexport class LevelHandlerImpl implements LevelHandler {\n readonly _globalLevels = new Set<Level>([Level.INFO, Level.ERROR, Level.WARN]);\n readonly _modules = new Map<string, Set<Level>>();\n enableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.add(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, level]));\n },\n ...modules,\n );\n }\n disableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.delete(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.delete(p);\n },\n ...modules,\n );\n }\n\n forModules(level: Level, fnAction: (p: string) => void, ...modules: (string | string[])[]): void {\n for (const m of modules.flat()) {\n const parts = m\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n for (const p of parts) {\n fnAction(p);\n }\n }\n }\n setDebug(...modules: (string | string[])[]): void {\n this.forModules(\n Level.DEBUG,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, Level.DEBUG]));\n },\n ...modules,\n );\n }\n isEnabled(ilevel: unknown, module: unknown): boolean {\n const level = ilevel as Level; // what if it's not a level?\n if (module !== undefined) {\n const levels = this._modules.get(module as string);\n if (levels && levels.has(level)) {\n return true;\n }\n }\n if (level === undefined) {\n // this is a plain log\n return true;\n }\n return this._globalLevels.has(level);\n }\n}\n\nconst levelSingleton = new LevelHandlerImpl();\n\n// globalThis[Symbol(\"levelSingleton\")] = new LevelHandlerImpl()\n\nexport class LogWriter {\n readonly _out: WritableStream<Uint8Array>;\n readonly _toFlush: (() => Promise<void>)[] = [];\n\n constructor(out: WritableStream<Uint8Array>) {\n this._out = out;\n }\n\n write(encoded: Uint8Array) {\n const my = async () => {\n // const val = Math.random();\n // console.log(\">>>My:\", val)\n try {\n const writer = this._out.getWriter();\n await writer.ready;\n await writer.write(encoded);\n await writer.releaseLock();\n } catch (err) {\n console.error(\"Chunk error:\", err);\n }\n // console.log(\"<<<My:\", val)\n };\n this._toFlush.push(my);\n this._flush();\n }\n\n _flushIsRunning = false;\n _flushDoneFns = Array<() => void>();\n _flush(toFlush: (() => Promise<void>)[] | undefined = undefined, done?: () => void): void {\n if (done) {\n this._flushDoneFns.push(done);\n }\n\n if (this._toFlush.length == 0) {\n // console.log(\"Flush is stopped\", this._toFlush.length)\n this._flushIsRunning = false;\n this._flushDoneFns.forEach((fn) => fn());\n this._flushDoneFns = [];\n return;\n }\n\n if (!toFlush && this._toFlush.length == 1 && !this._flushIsRunning) {\n this._flushIsRunning = true;\n // console.log(\"Flush is started\", this._toFlush.length)\n } else if (!toFlush) {\n // console.log(\"flush queue check but is running\", this._toFlush.length)\n return;\n }\n\n // console.log(\">>>Msg:\", this._toFlush.length)\n const my = this._toFlush.shift();\n my?.().finally(() => {\n // console.log(\"<<<Msg:\", this._toFlush.length)\n this._flush(this._toFlush);\n });\n }\n}\n\nexport interface LoggerImplParams {\n readonly out?: WritableStream<Uint8Array>;\n readonly logWriter?: LogWriter;\n readonly sys?: SysAbstraction;\n readonly withAttributes?: JsonRecord;\n readonly levelHandler?: LevelHandler;\n}\nexport class LoggerImpl implements Logger {\n readonly _sys: SysAbstraction;\n readonly _attributes: JsonRecord = {};\n readonly _withAttributes: JsonRecord;\n readonly _logWriter: LogWriter;\n readonly _levelHandler: LevelHandler;\n // readonly _id: string = \"logger-\" + Math.random().toString(36)\n\n constructor(params?: LoggerImplParams) {\n if (!params) {\n params = {};\n }\n if (!params.sys) {\n this._sys = WebSysAbstraction();\n } else {\n this._sys = params.sys;\n }\n if (params.logWriter) {\n this._logWriter = params.logWriter;\n } else {\n if (!params.out) {\n this._logWriter = new LogWriter(this._sys.Stdout());\n } else {\n this._logWriter = new LogWriter(params.out);\n }\n }\n if (!params.withAttributes) {\n this._withAttributes = {};\n } else {\n this._withAttributes = { ...params.withAttributes };\n }\n this._attributes = { ...this._withAttributes };\n if (params.levelHandler) {\n this._levelHandler = params.levelHandler;\n } else {\n this._levelHandler = levelSingleton;\n }\n // console.log(\"LoggerImpl\", this._id, this._attributes, this._withAttributes)\n }\n\n EnableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.disableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): Logger {\n this._attributes[\"module\"] = logValue(key);\n this._withAttributes[\"module\"] = logValue(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): Logger {\n this._levelHandler.setDebug(...modules);\n\n return this;\n }\n\n Timestamp(): Logger {\n this._attributes[\"ts\"] = logValue(this._sys.Time().Now().toISOString());\n return this;\n }\n Warn(): Logger {\n this._attributes[\"level\"] = logValue(Level.WARN);\n return this;\n }\n Log(): Logger {\n return this;\n }\n Debug(): Logger {\n this._attributes[\"level\"] = logValue(Level.DEBUG);\n return this;\n }\n Error(): Logger {\n this._attributes[\"level\"] = logValue(Level.ERROR);\n return this;\n }\n Info(): Logger {\n this._attributes[\"level\"] = logValue(Level.INFO);\n return this;\n }\n Err(err: unknown): Logger {\n if (err instanceof Error) {\n this._attributes[\"error\"] = logValue(err.message);\n } else {\n this._attributes[\"error\"] = logValue(\"\" + err);\n }\n return this;\n }\n WithLevel(l: Level): Logger {\n this._attributes[\"level\"] = logValue(l);\n return this;\n }\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): Logger {\n if (typeof action === \"function\") {\n this._attributes[key] = logValue(action as FnSerialized);\n } else if (typeof action.toString === \"function\") {\n this._attributes[key] = logValue(() => action.toString());\n } else {\n this._attributes[key] = logValue(\"INVALID REF\");\n }\n return this;\n }\n Bool(key: string, value: unknown): Logger {\n this._attributes[key] = logValue(!!value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): Logger {\n if (res.isOk()) {\n this._attributes[key] = logValue(res.Ok() as Serialized);\n } else {\n this.Err(res.Err());\n }\n return this;\n }\n\n Url(url: URL, key = \"url\"): Logger {\n this.Ref(key, () => url.toString());\n return this;\n }\n\n Str(key: string, value?: string): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n\n Any(key: string, value: string | number | boolean | JsonRecord): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Dur(key: string, nsec: number): Logger {\n this._attributes[key] = logValue(`${nsec}ms`);\n // new Intl.DurationFormat(\"en\", { style: \"narrow\" }).format(nsec);\n return this;\n }\n Uint64(key: string, value: number): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Int(key: string, value: number): Logger {\n return this.Uint64(key, value);\n }\n\n async Flush(): Promise<void> {\n return new Promise((resolve) => {\n this._logWriter._flush(undefined, resolve);\n });\n }\n\n With(): WithLogger {\n // console.log(\"WithLoggerBuilder.With\", this._id, this._attributes, this._withAttributes);\n return new WithLoggerBuilder(\n new LoggerImpl({\n logWriter: this._logWriter,\n sys: this._sys,\n levelHandler: this._levelHandler,\n withAttributes: {\n module: this._attributes[\"module\"],\n ...this._withAttributes,\n },\n }),\n );\n }\n\n _resetAttributes(fn: () => Error): Error {\n const ret = fn();\n Object.keys(this._attributes).forEach((key) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n });\n Object.assign(this._attributes, this._withAttributes);\n return ret;\n }\n Msg(...args: string[]): AsError {\n const error = this._resetAttributes(() => {\n const doWrite = this._levelHandler.isEnabled(this._attributes[\"level\"]?.value(), this._attributes[\"module\"]?.value());\n this._attributes[\"msg\"] = logValue(args.join(\" \"));\n const msg = this._attributes[\"msg\"].value();\n if (typeof msg === \"string\" && !msg.trim().length) {\n delete this._attributes[\"msg\"];\n }\n if (this._attributes[\"ts\"]?.value() === \"ETERNITY\") {\n this.Timestamp();\n }\n const str = JSON.stringify(resolveLogValue(this._attributes));\n if (doWrite) {\n const encoded = encoder.encode(str + \"\\n\");\n this._logWriter.write(encoded);\n }\n return new Error(str);\n });\n return {\n AsError: () => error,\n };\n }\n}\n\nclass WithLoggerBuilder implements WithLogger {\n readonly _li: LoggerImpl;\n constructor(li: LoggerImpl) {\n this._li = li;\n }\n\n Logger(): Logger {\n Object.assign(this._li._withAttributes, this._li._attributes);\n return this._li;\n }\n\n EnableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): WithLogger {\n this._li.Module(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): WithLogger {\n this._li.SetDebug(...modules);\n return this;\n }\n\n Str(key: string, value?: string): WithLogger {\n this._li.Str(key, value);\n return this;\n }\n\n Ref(key: string, action: Serialized | FnSerialized): WithLogger {\n this._li.Ref(key, action);\n return this;\n }\n Bool(key: string, value: unknown): WithLogger {\n this._li.Bool(key, value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): WithLogger {\n this._li.Result(key, res);\n return this;\n }\n Url(url: URL, key?: string): WithLogger {\n this._li.Url(url, key);\n return this;\n }\n Int(key: string, value: number): WithLogger {\n this._li.Int(key, value);\n return this;\n }\n\n Log(): WithLogger {\n this._li.Log();\n return this;\n }\n\n WithLevel(level: Level): WithLogger {\n this._li.WithLevel(level);\n return this;\n }\n\n Error(): WithLogger {\n this._li.Error();\n return this;\n }\n Warn(): WithLogger {\n this._li.Error();\n return this;\n }\n Debug(): WithLogger {\n this._li.Debug();\n return this;\n }\n Err(err: unknown): WithLogger {\n this._li.Err(err);\n return this;\n }\n Info(): WithLogger {\n this._li.Info();\n return this;\n }\n Timestamp(): WithLogger {\n this._li._attributes[\"ts\"] = logValue(\"ETERNITY\");\n return this;\n }\n Any(key: string, value: JsonRecord): WithLogger {\n this._li.Any(key, value);\n return this;\n }\n Dur(key: string, nsec: number): WithLogger {\n this._li.Dur(key, nsec);\n return this;\n }\n Uint64(key: string, value: number): WithLogger {\n this._li.Uint64(key, value);\n return this;\n }\n}\n","class LogWriter implements WritableStreamDefaultWriter<Uint8Array> {\n readonly _bufferArr: Uint8Array[] = [];\n\n _resolveClosed: (value?: PromiseLike<undefined>) => void;\n closed: Promise<undefined>;\n desiredSize: number | null = null;\n ready: Promise<undefined> = Promise.resolve(undefined);\n\n constructor() {\n this._resolveClosed = () => {\n // do nothing\n };\n this.closed = new Promise((resolve) => {\n this._resolveClosed = resolve;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n abort(reason?: any): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n close(): Promise<void> {\n this._resolveClosed();\n return Promise.resolve(undefined);\n }\n releaseLock(): void {\n // do nothing\n }\n write(chunk?: Uint8Array): Promise<void> {\n chunk && this._bufferArr.push(chunk);\n return Promise.resolve(undefined);\n }\n}\n\nexport class LogCollector implements WritableStream<Uint8Array> {\n readonly locked: boolean = false;\n _writer?: LogWriter;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abort(reason?: Uint8Array): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n async close(): Promise<void> {\n if (this._writer) {\n const ret = await this._writer.close();\n this._writer = undefined;\n return ret;\n }\n return Promise.resolve(undefined);\n }\n\n getWriter(): WritableStreamDefaultWriter<Uint8Array> {\n if (!this._writer) {\n this._writer = new LogWriter();\n }\n return this._writer;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logs(): any[] {\n if (!this._writer) {\n return [];\n }\n const jsonNlStr = new TextDecoder().decode(\n new Uint8Array(\n (function* (res: Uint8Array[]) {\n for (const x of res) {\n yield* x;\n }\n })(this._writer._bufferArr),\n ),\n );\n const splitStr = jsonNlStr.split(\"\\n\");\n const filterStr = splitStr.filter((a) => a.length);\n const mapStr = filterStr.map((a) => JSON.parse(a));\n return mapStr;\n }\n}\n","import { Logger } from \"../logger\";\nimport { LevelHandlerImpl, LoggerImpl } from \"../logger_impl\";\nimport { SysAbstraction } from \"../sys_abstraction\";\nimport { LogCollector } from \"./log_collector\";\n\nexport interface MockLoggerReturn {\n readonly logger: Logger;\n readonly logCollector: LogCollector;\n}\n\nexport function MockLogger(params?: {\n readonly sys?: SysAbstraction;\n moduleName?: string | string[];\n readonly disableDebug?: boolean;\n}): MockLoggerReturn {\n const lc = new LogCollector();\n let modNames = [\"MockLogger\"];\n if (typeof params?.moduleName === \"string\") {\n modNames = [params?.moduleName];\n } else if (Array.isArray(params?.moduleName)) {\n modNames = [...params.moduleName, ...modNames];\n }\n const logger = new LoggerImpl({\n out: lc,\n sys: params?.sys,\n levelHandler: new LevelHandlerImpl(),\n })\n .With()\n .Module(modNames[0])\n .Logger();\n !params?.disableDebug && logger.SetDebug(...modNames);\n return {\n logCollector: lc,\n logger,\n };\n}\n","export abstract class Result<T, E = Error> {\n static Ok<T>(t: T): Result<T, Error> {\n return new ResultOK(t);\n }\n static Err<T extends Error = Error>(t: T | string): Result<never, T> {\n if (typeof t === \"string\") {\n return new ResultError(new Error(t) as T);\n }\n return new ResultError(t);\n }\n static Is<T>(t: unknown): t is Result<T> {\n return t instanceof Result;\n }\n\n isOk(): boolean {\n return this.is_ok();\n }\n isErr(): boolean {\n return this.is_err();\n }\n\n Ok(): T {\n return this.unwrap();\n }\n Err(): E {\n return this.unwrap_err();\n }\n\n abstract is_ok(): boolean;\n abstract is_err(): boolean;\n abstract unwrap(): T;\n abstract unwrap_err(): E;\n}\n\nexport class ResultOK<T> extends Result<T, Error> {\n private _t: T;\n constructor(t: T) {\n super();\n this._t = t;\n }\n is_ok(): boolean {\n return true;\n }\n is_err(): boolean {\n return false;\n }\n unwrap_err(): Error {\n throw new Error(\"Result is Ok\");\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class ResultError<T extends Error> extends Result<never, T> {\n private _error: T;\n constructor(t: T) {\n super();\n this._error = t;\n }\n is_ok(): boolean {\n return false;\n }\n is_err(): boolean {\n return true;\n }\n unwrap(): never {\n throw new Error(`Result is Err: ${this._error}`);\n }\n unwrap_err(): T {\n return this._error;\n }\n}\n\nexport type WithoutResult<T> = T extends Result<infer U> ? U : T;\n\n/*\n\ntype FinalizedResult<T> = {\n result: T;\n scopeResult?: Result<void>;\n finally: () => Promise<void>;\n}\n\ntype exection2ResultParam<T> = {\n init: () => Promise<T>;\n inScope?: (t: T) => Promise<void>;\n cleanup: (t: T) => Promise<void>;\n\n}\n\nasync function expection2Result<T>({fn, inScope, cleanup}: exection2ResultParam<T>): Promise<Result<FinalizedResult<T>>> {\n try {\n const res = await fn();\n if (inScope) {\n try {\n await inScope?.(res)\n } catch (err) {\n return Result.Err(err as Error)\n }\n await cleanup(res)\n return Result.Ok({\n result: res,\n finally: async () => { }\n })\n }\n return Result.Ok({\n result: res ,\n finally: async () => {\n return cleanup(res)\n }\n })\n } catch (err) {\n return Result.Err(err as Error)\n }\n}\n*/\n\n// await expection2Result({\n// init: openDB,\n// inScope: (res) => {\n// res.query()\n// },\n// cleanup: async (y) => {\n// await y.close()\n// }\n// })\n// async function openDB() {\n// try {\n// const opendb = await openDB()\n// return Result.Ok({\n// openDB,\n// finally: async () => {\n// await opendb.close()\n// }})\n// } catch (err) {\n// return Result.Err(err)\n// }\n// }\n// }\n","export abstract class Option<T> {\n static Some<T>(t: T): Option<T> {\n return new Some(t);\n }\n\n static None<T>(): Option<T> {\n return new None();\n }\n\n static Is<T>(t: unknown): t is Option<T> {\n return t instanceof Option;\n }\n\n IsNone(): boolean {\n return this.is_none();\n }\n\n IsSome(): boolean {\n return this.is_some();\n }\n Unwrap(): T {\n return this.unwrap();\n }\n\n abstract is_none(): boolean;\n abstract is_some(): boolean;\n abstract unwrap(): T;\n}\n\nexport class Some<T> extends Option<T> {\n private _t: T;\n constructor(_t: T) {\n super();\n this._t = _t;\n }\n\n is_none(): boolean {\n return false;\n }\n is_some(): boolean {\n return true;\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class None<T> extends Option<T> {\n is_none(): boolean {\n return true;\n }\n is_some(): boolean {\n return false;\n }\n unwrap(): T {\n throw new Error(\"None.unwrap\");\n }\n}\n\nexport type WithoutOption<T> = T extends Option<infer U> ? U : T;\n","export class Future<T> {\n readonly #promise: Promise<T>;\n #resolveFn: (value: T) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n #rejectFn: (reason: unknown) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolveFn = resolve;\n this.#rejectFn = reject;\n });\n }\n\n async asPromise(): Promise<T> {\n return this.#promise;\n }\n\n resolve(value: T) {\n this.#resolveFn(value);\n }\n reject(reason: unknown) {\n this.#rejectFn(reason);\n }\n}\n","import { Future } from \"./future\";\n\nexport class ResolveOnce<T, C = void> {\n _onceDone = false;\n readonly _onceFutures: Future<T>[] = [];\n _onceOk = false;\n _onceValue?: T;\n _onceError?: Error;\n\n readonly ctx: C;\n\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n\n get ready() {\n return this._onceDone;\n }\n\n reset() {\n this._onceDone = false;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceError = undefined;\n this._onceFutures.length = 0;\n }\n\n async once(fn: (c: C) => Promise<T>): Promise<T> {\n if (this._onceDone) {\n if (this._onceError) {\n return Promise.reject(this._onceError);\n }\n if (this._onceOk) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return Promise.resolve(this._onceValue!);\n }\n throw new Error(\"ResolveOnce.once impossible\");\n }\n const future = new Future<T>();\n this._onceFutures.push(future);\n if (this._onceFutures.length === 1) {\n fn(this.ctx)\n .then((value) => {\n this._onceValue = value;\n this._onceOk = true;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.resolve(this._onceValue!));\n this._onceFutures.length = 0;\n })\n .catch((e) => {\n this._onceError = e as Error;\n this._onceDone = true;\n this._onceFutures.forEach((f) => f.reject(this._onceError));\n this._onceFutures.length = 0;\n });\n }\n return future.asPromise();\n }\n}\n\nexport class KeyedResolvOnce<T, K = string> {\n private readonly _map = new Map<K, ResolveOnce<T, K>>();\n\n async asyncGet(key: () => Promise<K>): Promise<ResolveOnce<T, K>> {\n return this.get(await key());\n }\n\n get(key: K | (() => K)): ResolveOnce<T, K> {\n if (typeof key === \"function\") {\n key = (key as () => K)();\n }\n let resolveOnce = this._map.get(key);\n if (!resolveOnce) {\n resolveOnce = new ResolveOnce<T, K>(key);\n this._map.set(key, resolveOnce);\n }\n return resolveOnce;\n }\n\n reset() {\n this._map.forEach((resolveOnce) => resolveOnce.reset());\n this._map.clear();\n }\n}\n"],"mappings":"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","names":["Level","TimeMode","RandomMode","IDMode","TimeUnits","module","my","LogWriter"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/logger.ts","../../src/sys_abstraction.ts","../../src/time.ts","../../src/base_sys_abstraction.ts","../../src/web/web_sys_abstraction.ts","../../src/logger_impl.ts","../../src/test/log_collector.ts","../../src/test/mock_logger.ts","../../src/result.ts","../../src/option.ts","../../src/future.ts","../../src/resolve-once.ts"],"sourcesContent":["export * from \"./file_service\";\nexport * from \"./logger_impl\";\nexport * from \"./logger\";\nexport * from \"./sys_abstraction\";\nexport * from \"./time\";\nexport * from \"./test/log_collector\";\nexport * from \"./test/mock_logger\";\nexport * from \"./result\";\nexport * from \"./option\";\nexport * from \"./future\";\nexport * from \"./resolve-once\";\n","import { Result } from \"./result\";\n\nexport enum Level {\n WARN = \"warn\",\n DEBUG = \"debug\",\n INFO = \"info\",\n ERROR = \"error\",\n}\n\nexport type Serialized = string | number | boolean;\nexport type FnSerialized = () => Serialized;\nexport interface LoggerInterface<R> {\n Module(key: string): R;\n // if modules is empty, set for all Levels\n EnableLevel(level: Level, ...modules: string[]): R;\n DisableLevel(level: Level, ...modules: string[]): R;\n\n SetDebug(...modules: (string | string[])[]): R;\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): R;\n Result<T>(key: string, res: Result<T>): R;\n // default key url\n Url(url: URL, key?: string): R;\n // len\n Len(value: object | { length: number } | string | undefined | null, key?: string): R;\n\n Str(key: string, value?: string): R;\n Error(): R;\n Warn(): R;\n Debug(): R;\n Log(): R;\n WithLevel(level: Level): R;\n\n Err(err: unknown): R; // could be Error, or something which coerces to string\n Info(): R;\n Timestamp(): R;\n Any(key: string, value: unknown): R;\n Dur(key: string, nsec: number): R;\n Uint64(key: string, value: number): R;\n Int(key: string, value: number): R;\n Bool(key: string, value: unknown): R;\n}\n\nexport function IsLogger(obj: unknown): obj is Logger {\n return (\n typeof obj === \"object\" &&\n [\n \"Module\",\n \"EnableLevel\",\n \"DisableLevel\",\n \"SetDebug\",\n \"Str\",\n \"Error\",\n \"Warn\",\n \"Debug\",\n \"Log\",\n \"WithLevel\",\n \"Err\",\n \"Info\",\n \"Timestamp\",\n \"Any\",\n \"Dur\",\n \"Uint64\",\n ]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((fn) => typeof (obj as any)[fn] === \"function\")\n .reduce((a, b) => a && b, true)\n );\n}\n\nexport interface WithLogger extends LoggerInterface<WithLogger> {\n Logger(): Logger;\n}\n\nexport interface AsError {\n AsError(): Error;\n}\n\nexport interface Logger extends LoggerInterface<Logger> {\n With(): WithLogger;\n\n Msg(...args: string[]): AsError;\n Flush(): Promise<void>;\n}\n","import { FileService } from \"./file_service\";\nimport { Time } from \"./time\";\n\nexport enum TimeMode {\n REAL = \"real\",\n CONST = \"const\",\n STEP = \"step\",\n}\n\nexport enum RandomMode {\n CONST = \"const\",\n STEP = \"step\",\n RANDOM = \"random\",\n}\n\nexport enum IDMode {\n UUID = \"uuid\",\n CONST = \"const\",\n STEP = \"step\",\n}\n\nexport function String2TimeMode(s?: string): TimeMode {\n switch (s?.toLowerCase()) {\n case \"real\":\n return TimeMode.REAL;\n case \"const\":\n return TimeMode.CONST;\n case \"step\":\n return TimeMode.STEP;\n default:\n return TimeMode.REAL;\n }\n}\n\nexport type VoidFunc = () => void | Promise<void>;\n\nexport interface SystemService {\n Env(): Record<string, string>;\n Args(): string[];\n OnExit(hdl: VoidFunc): VoidFunc;\n Exit(code: number): void;\n}\n\nexport interface SysAbstraction {\n Time(): Time;\n Stdout(): WritableStream<Uint8Array>;\n Stderr(): WritableStream<Uint8Array>;\n NextId(): string;\n Random0ToValue(value: number): number;\n System(): SystemService;\n FileSystem(): FileService;\n}\n","export abstract class Time {\n abstract Now(): Date;\n abstract Sleep(duration: Duration): Promise<void>;\n TimeSince(start: Date): Duration {\n const now = this.Now();\n return now.getTime() - start.getTime();\n }\n}\n\nexport type Duration = number;\n\nexport enum TimeUnits {\n Microsecond = 1,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Second = 1000 * Microsecond,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Minute = 60 * Second,\n // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member\n Hour = 60 * Minute,\n}\n","import { FileService } from \"./file_service\";\nimport { TimeMode, RandomMode, IDMode, SystemService, VoidFunc, SysAbstraction } from \"./sys_abstraction\";\nimport { Time } from \"./time\";\n\nexport class SysTime extends Time {\n Now(): Date {\n return new Date();\n }\n Sleep(duration: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, duration);\n });\n }\n}\n\nexport class ConstTime extends Time {\n Now(): Date {\n return new Date(2021, 1, 1, 0, 0, 0, 0);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Sleep(duration: number): Promise<void> {\n return Promise.resolve();\n }\n}\n\nexport class StepTime extends Time {\n _step: Date;\n constructor() {\n super();\n this._step = new ConstTime().Now();\n }\n Now() {\n if (this._step.getTime() === 0) {\n this._step = new ConstTime().Now();\n return this._step;\n }\n this._step = new Date(this._step.getTime() + 1000);\n return this._step;\n }\n Sleep(duration: number): Promise<void> {\n this._step = new Date(this._step.getTime() + duration);\n return Promise.resolve();\n }\n}\n\nexport function TimeFactory(timeMode: TimeMode): Time {\n switch (timeMode) {\n case TimeMode.REAL:\n return new SysTime();\n case TimeMode.CONST:\n return new ConstTime();\n case TimeMode.STEP:\n return new StepTime();\n }\n return new SysTime();\n}\n\nexport class RandomService {\n readonly _mode: RandomMode;\n _step = 0;\n constructor(mode: RandomMode) {\n this._mode = mode;\n }\n Random0ToValue(value: number): number {\n switch (this._mode) {\n case RandomMode.CONST:\n return 0.5 * value;\n case RandomMode.STEP:\n this._step += 0.0001;\n return this._step * value;\n case RandomMode.RANDOM:\n return Math.random() * value;\n default:\n throw new Error(\"Unknown RandomMode\");\n }\n }\n}\n\nexport class IdService {\n readonly _mode: IDMode;\n _step = 0;\n constructor(mode?: IDMode) {\n if (!mode) {\n mode = IDMode.UUID;\n }\n this._mode = mode;\n }\n NextId(): string {\n switch (this._mode) {\n case IDMode.UUID:\n return crypto.randomUUID();\n case IDMode.CONST:\n return \"VeryUniqueID\";\n case IDMode.STEP:\n return `STEPId-${this._step++}`;\n default:\n throw new Error(\"Unknown IDMode\");\n }\n }\n}\n\nexport interface BaseSysAbstractionParams {\n readonly FileSystem: FileService;\n readonly SystemService: SystemService;\n}\n\nexport interface ExitHandler {\n readonly hdl: VoidFunc;\n readonly id: string;\n}\n\nexport interface ExitService {\n injectExitHandlers(hdls: ExitHandler[]): void;\n exit(code: number): void;\n}\n\nconst decoder = new TextDecoder();\nexport class BaseSysAbstraction {\n readonly _time = new SysTime();\n readonly _stdout = new WritableStream({\n write(chunk) {\n return new Promise((resolve) => {\n const decoded = decoder.decode(chunk);\n console.log(decoded.trimEnd());\n resolve();\n });\n },\n });\n readonly _stderr = new WritableStream({\n write(chunk) {\n return new Promise((resolve) => {\n const decoded = decoder.decode(chunk);\n console.error(decoded.trimEnd());\n resolve();\n });\n },\n });\n\n readonly _idService = new IdService();\n readonly _randomService = new RandomService(RandomMode.RANDOM);\n readonly _fileSystem: FileService;\n readonly _systemService: SystemService;\n\n constructor(params: BaseSysAbstractionParams) {\n this._fileSystem = params.FileSystem;\n this._systemService = params.SystemService;\n }\n}\n\nexport interface WrapperSysAbstractionParams {\n readonly TimeMode?: TimeMode;\n readonly IdMode?: IDMode;\n readonly Stdout?: WritableStream<Uint8Array>;\n readonly Stderr?: WritableStream<Uint8Array>;\n readonly RandomMode?: RandomMode;\n readonly FileSystem?: FileService;\n readonly SystemService?: SystemService;\n}\n\nexport class WrapperSysAbstraction implements SysAbstraction {\n readonly _time: Time;\n readonly _stdout: WritableStream<Uint8Array>;\n readonly _stderr: WritableStream<Uint8Array>;\n readonly _idService: IdService;\n readonly _randomService: RandomService;\n readonly _fileSystem: FileService;\n readonly _systemService: SystemService;\n constructor(base: BaseSysAbstraction, params?: WrapperSysAbstractionParams) {\n this._time = base._time;\n this._stdout = base._stdout;\n this._stderr = base._stderr;\n this._idService = base._idService;\n this._randomService = base._randomService;\n this._fileSystem = base._fileSystem;\n this._systemService = base._systemService;\n if (params) {\n if (params.TimeMode) {\n this._time = TimeFactory(params.TimeMode);\n }\n if (params.Stdout) {\n this._stdout = params.Stdout;\n }\n if (params.Stderr) {\n this._stderr = params.Stderr;\n }\n if (params.IdMode) {\n this._idService = new IdService(params.IdMode);\n }\n if (params.RandomMode) {\n this._randomService = new RandomService(params.RandomMode);\n }\n if (params.FileSystem) {\n this._fileSystem = params.FileSystem;\n }\n if (params.SystemService) {\n this._systemService = params.SystemService;\n }\n }\n }\n Time(): Time {\n return this._time;\n }\n NextId(): string {\n return this._idService.NextId();\n }\n Random0ToValue(value: number): number {\n return this._randomService.Random0ToValue(value);\n }\n Stdout(): WritableStream {\n return this._stdout;\n }\n Stderr(): WritableStream {\n return this._stderr;\n }\n\n System(): SystemService {\n return this._systemService;\n }\n FileSystem(): FileService {\n return this._fileSystem;\n }\n}\n// export const BaseSysAbstraction = new BaseSysAbstractionImpl()\n","import { BaseSysAbstraction, WrapperSysAbstraction, WrapperSysAbstractionParams } from \"../base_sys_abstraction\";\nimport { FileService, NamedWritableStream } from \"../file_service\";\nimport { SysAbstraction, SystemService, VoidFunc } from \"../sys_abstraction\";\n\nclass WebFileService implements FileService {\n get baseDir(): string {\n throw new Error(\"basedir-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n create(fname: string): Promise<NamedWritableStream> {\n throw new Error(\"create-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n readFileString(fname: string): Promise<string> {\n throw new Error(\"readFileString-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n writeFileString(fname: string, content: string): Promise<void> {\n throw new Error(\"writeFileString-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abs(fname: string): string {\n throw new Error(\"abs-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n join(...paths: string[]): string {\n throw new Error(\"join-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n relative(from: string, to?: string | undefined): string {\n throw new Error(\"relative-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dirname(fname: string): string {\n throw new Error(\"dirname-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n basename(fname: string): string {\n throw new Error(\"basename-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n nodeImport(fname: string): string {\n throw new Error(\"nodeImport-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isAbsolute(fname: string): boolean {\n throw new Error(\"isAbsolute-Method not implemented.\");\n }\n}\n\nclass WebSystemService implements SystemService {\n Env(): Record<string, string> {\n throw new Error(\"Env-Method not implemented.\");\n }\n Args(): string[] {\n throw new Error(\"Args-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n OnExit(hdl: VoidFunc): VoidFunc {\n throw new Error(\"OnExit-Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Exit(code: number): void {\n throw new Error(\"Exit-Method not implemented.\");\n }\n}\n\nlet my: BaseSysAbstraction | undefined = undefined;\nexport function WebSysAbstraction(param?: WrapperSysAbstractionParams): SysAbstraction {\n if (!my) {\n my = new BaseSysAbstraction({\n FileSystem: new WebFileService(),\n SystemService: new WebSystemService(),\n });\n }\n return new WrapperSysAbstraction(my, param);\n}\n","// import { v4 } from \"uuid\";\nimport { AsError, FnSerialized, Level, Logger, Serialized, WithLogger } from \"./logger\";\nimport { WebSysAbstraction } from \"./web/web_sys_abstraction\";\nimport { SysAbstraction } from \"./sys_abstraction\";\nimport { Result } from \"./result\";\n\nconst encoder = new TextEncoder();\n\nclass LogValue {\n constructor(readonly fn: FnSerialized) {}\n value(): Serialized {\n return this.fn();\n }\n}\n\nfunction resolveLogValue(val: JsonRecord): Record<string, Serialized> {\n const ret: Record<string, Serialized> = {};\n Object.keys(val).forEach((key) => {\n const v = val[key];\n if (v instanceof LogValue) {\n ret[key] = v.value();\n }\n });\n return ret;\n}\n\nfunction logValue(val: Serialized | FnSerialized | JsonRecord | undefined | null): LogValue {\n switch (typeof val) {\n case \"function\":\n return new LogValue(val);\n case \"string\":\n return new LogValue(() => val.toString());\n case \"number\":\n return new LogValue(() => val);\n case \"boolean\":\n return new LogValue(() => val);\n case \"object\":\n return new LogValue(() => JSON.stringify(val));\n default:\n if (!val) {\n return new LogValue(() => \"--Falsy--\");\n }\n throw new Error(`Invalid type:${typeof val}`);\n }\n}\n\ntype JsonRecord = Record<string, LogValue>;\n\nexport interface LevelHandler {\n enableLevel(level: Level, ...modules: string[]): void;\n disableLevel(level: Level, ...modules: string[]): void;\n setDebug(...modules: (string | string[])[]): void;\n isEnabled(ilevel: unknown, module: unknown): boolean;\n}\n\nexport class LevelHandlerImpl implements LevelHandler {\n readonly _globalLevels = new Set<Level>([Level.INFO, Level.ERROR, Level.WARN]);\n readonly _modules = new Map<string, Set<Level>>();\n enableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.add(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, level]));\n },\n ...modules,\n );\n }\n disableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.delete(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.delete(p);\n },\n ...modules,\n );\n }\n\n forModules(level: Level, fnAction: (p: string) => void, ...modules: (string | string[])[]): void {\n for (const m of modules.flat()) {\n const parts = m\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n for (const p of parts) {\n fnAction(p);\n }\n }\n }\n setDebug(...modules: (string | string[])[]): void {\n this.forModules(\n Level.DEBUG,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, Level.DEBUG]));\n },\n ...modules,\n );\n }\n isEnabled(ilevel: unknown, module: unknown): boolean {\n const level = ilevel as Level; // what if it's not a level?\n if (module !== undefined) {\n const levels = this._modules.get(module as string);\n if (levels && levels.has(level)) {\n return true;\n }\n }\n if (level === undefined) {\n // this is a plain log\n return true;\n }\n return this._globalLevels.has(level);\n }\n}\n\nconst levelSingleton = new LevelHandlerImpl();\n\n// globalThis[Symbol(\"levelSingleton\")] = new LevelHandlerImpl()\n\nexport class LogWriter {\n readonly _out: WritableStream<Uint8Array>;\n readonly _toFlush: (() => Promise<void>)[] = [];\n\n constructor(out: WritableStream<Uint8Array>) {\n this._out = out;\n }\n\n write(encoded: Uint8Array) {\n const my = async () => {\n // const val = Math.random();\n // console.log(\">>>My:\", val)\n try {\n const writer = this._out.getWriter();\n await writer.ready;\n await writer.write(encoded);\n await writer.releaseLock();\n } catch (err) {\n console.error(\"Chunk error:\", err);\n }\n // console.log(\"<<<My:\", val)\n };\n this._toFlush.push(my);\n this._flush();\n }\n\n _flushIsRunning = false;\n _flushDoneFns = Array<() => void>();\n _flush(toFlush: (() => Promise<void>)[] | undefined = undefined, done?: () => void): void {\n if (done) {\n this._flushDoneFns.push(done);\n }\n\n if (this._toFlush.length == 0) {\n // console.log(\"Flush is stopped\", this._toFlush.length)\n this._flushIsRunning = false;\n this._flushDoneFns.forEach((fn) => fn());\n this._flushDoneFns = [];\n return;\n }\n\n if (!toFlush && this._toFlush.length == 1 && !this._flushIsRunning) {\n this._flushIsRunning = true;\n // console.log(\"Flush is started\", this._toFlush.length)\n } else if (!toFlush) {\n // console.log(\"flush queue check but is running\", this._toFlush.length)\n return;\n }\n\n // console.log(\">>>Msg:\", this._toFlush.length)\n const my = this._toFlush.shift();\n my?.().finally(() => {\n // console.log(\"<<<Msg:\", this._toFlush.length)\n this._flush(this._toFlush);\n });\n }\n}\n\nexport interface LoggerImplParams {\n readonly out?: WritableStream<Uint8Array>;\n readonly logWriter?: LogWriter;\n readonly sys?: SysAbstraction;\n readonly withAttributes?: JsonRecord;\n readonly levelHandler?: LevelHandler;\n}\nexport class LoggerImpl implements Logger {\n readonly _sys: SysAbstraction;\n readonly _attributes: JsonRecord = {};\n readonly _withAttributes: JsonRecord;\n readonly _logWriter: LogWriter;\n readonly _levelHandler: LevelHandler;\n // readonly _id: string = \"logger-\" + Math.random().toString(36)\n\n constructor(params?: LoggerImplParams) {\n if (!params) {\n params = {};\n }\n if (!params.sys) {\n this._sys = WebSysAbstraction();\n } else {\n this._sys = params.sys;\n }\n if (params.logWriter) {\n this._logWriter = params.logWriter;\n } else {\n if (!params.out) {\n this._logWriter = new LogWriter(this._sys.Stdout());\n } else {\n this._logWriter = new LogWriter(params.out);\n }\n }\n if (!params.withAttributes) {\n this._withAttributes = {};\n } else {\n this._withAttributes = { ...params.withAttributes };\n }\n this._attributes = { ...this._withAttributes };\n if (params.levelHandler) {\n this._levelHandler = params.levelHandler;\n } else {\n this._levelHandler = levelSingleton;\n }\n // console.log(\"LoggerImpl\", this._id, this._attributes, this._withAttributes)\n }\n\n EnableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.disableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): Logger {\n this._attributes[\"module\"] = logValue(key);\n this._withAttributes[\"module\"] = logValue(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): Logger {\n this._levelHandler.setDebug(...modules);\n\n return this;\n }\n\n Timestamp(): Logger {\n // this is called with .call from _produceError where this\n // this is crafted to have _sys and _attributes\n // CAUTION so done use other ref from this\n this._attributes[\"ts\"] = logValue(this._sys.Time().Now().toISOString());\n return this;\n }\n Warn(): Logger {\n this._attributes[\"level\"] = logValue(Level.WARN);\n return this;\n }\n Log(): Logger {\n return this;\n }\n Debug(): Logger {\n this._attributes[\"level\"] = logValue(Level.DEBUG);\n return this;\n }\n Error(): Logger {\n this._attributes[\"level\"] = logValue(Level.ERROR);\n return this;\n }\n Info(): Logger {\n this._attributes[\"level\"] = logValue(Level.INFO);\n return this;\n }\n Err(err: unknown): Logger {\n if (err instanceof Error) {\n this._attributes[\"error\"] = logValue(err.message);\n } else {\n this._attributes[\"error\"] = logValue(\"\" + err);\n }\n return this;\n }\n WithLevel(l: Level): Logger {\n this._attributes[\"level\"] = logValue(l);\n return this;\n }\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): Logger {\n if (typeof action === \"function\") {\n this._attributes[key] = logValue(action as FnSerialized);\n } else if (typeof action.toString === \"function\") {\n this._attributes[key] = logValue(() => action.toString());\n } else {\n this._attributes[key] = logValue(\"INVALID REF\");\n }\n return this;\n }\n Bool(key: string, value: unknown): Logger {\n this._attributes[key] = logValue(!!value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): Logger {\n if (res.isOk()) {\n this._attributes[key] = logValue(res.Ok() as Serialized);\n } else {\n this.Err(res.Err());\n }\n return this;\n }\n\n Len(value: unknown, key = \"len\"): Logger {\n if (Array.isArray(value)) {\n this._attributes[key] = logValue(() => value.length);\n } else if (typeof value === \"string\") {\n this._attributes[key] = logValue(() => value.length);\n } else if (typeof value === \"object\" && value !== null) {\n this._attributes[key] = logValue(() => Object.keys(value).length);\n } else {\n this.Int(key, -1);\n }\n return this;\n }\n\n Url(url: URL, key = \"url\"): Logger {\n this.Ref(key, () => url.toString());\n return this;\n }\n\n Str(key: string, value?: string): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n\n Any(key: string, value: string | number | boolean | JsonRecord): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Dur(key: string, nsec: number): Logger {\n this._attributes[key] = logValue(`${nsec}ms`);\n // new Intl.DurationFormat(\"en\", { style: \"narrow\" }).format(nsec);\n return this;\n }\n Uint64(key: string, value: number): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Int(key: string, value: number): Logger {\n return this.Uint64(key, value);\n }\n\n async Flush(): Promise<void> {\n return new Promise((resolve) => {\n this._logWriter._flush(undefined, resolve);\n });\n }\n\n With(): WithLogger {\n // console.log(\"WithLoggerBuilder.With\", this._id, this._attributes, this._withAttributes);\n return new WithLoggerBuilder(\n new LoggerImpl({\n logWriter: this._logWriter,\n sys: this._sys,\n levelHandler: this._levelHandler,\n withAttributes: {\n module: this._attributes[\"module\"],\n ...this._withAttributes,\n },\n }),\n );\n }\n\n _resetAttributes(fn: () => () => string): () => string {\n const ret = fn();\n Object.keys(this._attributes).forEach((key) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n });\n Object.assign(this._attributes, this._withAttributes);\n return ret;\n }\n _produceError(attr: JsonRecord, ...args: string[]): string {\n attr[\"msg\"] = logValue(args.join(\" \"));\n const msg = attr[\"msg\"].value();\n if (typeof msg === \"string\" && !msg.trim().length) {\n delete attr[\"msg\"];\n }\n if (attr[\"ts\"]?.value() === \"ETERNITY\") {\n // hacky but it works\n this.Timestamp.call({\n _sys: this._sys,\n _attributes: attr,\n });\n }\n return JSON.stringify(resolveLogValue(attr));\n }\n\n Msg(...args: string[]): AsError {\n const fnError = this._resetAttributes(() => {\n const doWrite = this._levelHandler.isEnabled(this._attributes[\"level\"]?.value(), this._attributes[\"module\"]?.value());\n let fnRet = () => this._produceError({ ...this._attributes }, ...args);\n if (doWrite) {\n const str = this._produceError({ ...this._attributes }, ...args);\n const encoded = encoder.encode(str + \"\\n\");\n this._logWriter.write(encoded);\n fnRet = () => str;\n }\n return fnRet;\n });\n return {\n AsError: () => new Error(fnError()),\n };\n }\n}\n\nclass WithLoggerBuilder implements WithLogger {\n readonly _li: LoggerImpl;\n constructor(li: LoggerImpl) {\n this._li = li;\n }\n\n Logger(): Logger {\n Object.assign(this._li._withAttributes, this._li._attributes);\n return this._li;\n }\n\n EnableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): WithLogger {\n this._li.Module(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): WithLogger {\n this._li.SetDebug(...modules);\n return this;\n }\n\n Str(key: string, value?: string): WithLogger {\n this._li.Str(key, value);\n return this;\n }\n\n Len(value: unknown, key?: string): WithLogger {\n this._li.Len(value, key);\n return this;\n }\n\n Ref(key: string, action: Serialized | FnSerialized): WithLogger {\n this._li.Ref(key, action);\n return this;\n }\n Bool(key: string, value: unknown): WithLogger {\n this._li.Bool(key, value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): WithLogger {\n this._li.Result(key, res);\n return this;\n }\n Url(url: URL, key?: string): WithLogger {\n this._li.Url(url, key);\n return this;\n }\n Int(key: string, value: number): WithLogger {\n this._li.Int(key, value);\n return this;\n }\n\n Log(): WithLogger {\n this._li.Log();\n return this;\n }\n\n WithLevel(level: Level): WithLogger {\n this._li.WithLevel(level);\n return this;\n }\n\n Error(): WithLogger {\n this._li.Error();\n return this;\n }\n Warn(): WithLogger {\n this._li.Error();\n return this;\n }\n Debug(): WithLogger {\n this._li.Debug();\n return this;\n }\n Err(err: unknown): WithLogger {\n this._li.Err(err);\n return this;\n }\n Info(): WithLogger {\n this._li.Info();\n return this;\n }\n Timestamp(): WithLogger {\n this._li._attributes[\"ts\"] = logValue(\"ETERNITY\");\n return this;\n }\n Any(key: string, value: JsonRecord): WithLogger {\n this._li.Any(key, value);\n return this;\n }\n Dur(key: string, nsec: number): WithLogger {\n this._li.Dur(key, nsec);\n return this;\n }\n Uint64(key: string, value: number): WithLogger {\n this._li.Uint64(key, value);\n return this;\n }\n}\n","class LogWriter implements WritableStreamDefaultWriter<Uint8Array> {\n readonly _bufferArr: Uint8Array[] = [];\n\n _resolveClosed: (value?: PromiseLike<undefined>) => void;\n closed: Promise<undefined>;\n desiredSize: number | null = null;\n ready: Promise<undefined> = Promise.resolve(undefined);\n\n constructor() {\n this._resolveClosed = () => {\n // do nothing\n };\n this.closed = new Promise((resolve) => {\n this._resolveClosed = resolve;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n abort(reason?: any): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n close(): Promise<void> {\n this._resolveClosed();\n return Promise.resolve(undefined);\n }\n releaseLock(): void {\n // do nothing\n }\n write(chunk?: Uint8Array): Promise<void> {\n chunk && this._bufferArr.push(chunk);\n return Promise.resolve(undefined);\n }\n}\n\nexport class LogCollector implements WritableStream<Uint8Array> {\n readonly locked: boolean = false;\n _writer?: LogWriter;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abort(reason?: Uint8Array): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n async close(): Promise<void> {\n if (this._writer) {\n const ret = await this._writer.close();\n this._writer = undefined;\n return ret;\n }\n return Promise.resolve(undefined);\n }\n\n getWriter(): WritableStreamDefaultWriter<Uint8Array> {\n if (!this._writer) {\n this._writer = new LogWriter();\n }\n return this._writer;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logs(): any[] {\n if (!this._writer) {\n return [];\n }\n const jsonNlStr = new TextDecoder().decode(\n new Uint8Array(\n (function* (res: Uint8Array[]) {\n for (const x of res) {\n yield* x;\n }\n })(this._writer._bufferArr),\n ),\n );\n const splitStr = jsonNlStr.split(\"\\n\");\n const filterStr = splitStr.filter((a) => a.length);\n const mapStr = filterStr.map((a) => JSON.parse(a));\n return mapStr;\n }\n}\n","import { Logger } from \"../logger\";\nimport { LevelHandlerImpl, LoggerImpl } from \"../logger_impl\";\nimport { SysAbstraction } from \"../sys_abstraction\";\nimport { LogCollector } from \"./log_collector\";\n\nexport interface MockLoggerReturn {\n readonly logger: Logger;\n readonly logCollector: LogCollector;\n}\n\nexport function MockLogger(params?: {\n readonly sys?: SysAbstraction;\n moduleName?: string | string[];\n readonly disableDebug?: boolean;\n}): MockLoggerReturn {\n const lc = new LogCollector();\n let modNames = [\"MockLogger\"];\n if (typeof params?.moduleName === \"string\") {\n modNames = [params?.moduleName];\n } else if (Array.isArray(params?.moduleName)) {\n modNames = [...params.moduleName, ...modNames];\n }\n const logger = new LoggerImpl({\n out: lc,\n sys: params?.sys,\n levelHandler: new LevelHandlerImpl(),\n })\n .With()\n .Module(modNames[0])\n .Logger();\n !params?.disableDebug && logger.SetDebug(...modNames);\n return {\n logCollector: lc,\n logger,\n };\n}\n","export abstract class Result<T, E = Error> {\n static Ok<T>(t: T): Result<T, Error> {\n return new ResultOK(t);\n }\n static Err<T extends Error = Error>(t: T | string): Result<never, T> {\n if (typeof t === \"string\") {\n return new ResultError(new Error(t) as T);\n }\n return new ResultError(t);\n }\n static Is<T>(t: unknown): t is Result<T> {\n return t instanceof Result;\n }\n\n isOk(): boolean {\n return this.is_ok();\n }\n isErr(): boolean {\n return this.is_err();\n }\n\n Ok(): T {\n return this.unwrap();\n }\n Err(): E {\n return this.unwrap_err();\n }\n\n abstract is_ok(): boolean;\n abstract is_err(): boolean;\n abstract unwrap(): T;\n abstract unwrap_err(): E;\n}\n\nexport class ResultOK<T> extends Result<T, Error> {\n private _t: T;\n constructor(t: T) {\n super();\n this._t = t;\n }\n is_ok(): boolean {\n return true;\n }\n is_err(): boolean {\n return false;\n }\n unwrap_err(): Error {\n throw new Error(\"Result is Ok\");\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class ResultError<T extends Error> extends Result<never, T> {\n private _error: T;\n constructor(t: T) {\n super();\n this._error = t;\n }\n is_ok(): boolean {\n return false;\n }\n is_err(): boolean {\n return true;\n }\n unwrap(): never {\n throw new Error(`Result is Err: ${this._error}`);\n }\n unwrap_err(): T {\n return this._error;\n }\n}\n\nexport type WithoutResult<T> = T extends Result<infer U> ? U : T;\n\n/*\n\ntype FinalizedResult<T> = {\n result: T;\n scopeResult?: Result<void>;\n finally: () => Promise<void>;\n}\n\ntype exection2ResultParam<T> = {\n init: () => Promise<T>;\n inScope?: (t: T) => Promise<void>;\n cleanup: (t: T) => Promise<void>;\n\n}\n\nasync function expection2Result<T>({fn, inScope, cleanup}: exection2ResultParam<T>): Promise<Result<FinalizedResult<T>>> {\n try {\n const res = await fn();\n if (inScope) {\n try {\n await inScope?.(res)\n } catch (err) {\n return Result.Err(err as Error)\n }\n await cleanup(res)\n return Result.Ok({\n result: res,\n finally: async () => { }\n })\n }\n return Result.Ok({\n result: res ,\n finally: async () => {\n return cleanup(res)\n }\n })\n } catch (err) {\n return Result.Err(err as Error)\n }\n}\n*/\n\n// await expection2Result({\n// init: openDB,\n// inScope: (res) => {\n// res.query()\n// },\n// cleanup: async (y) => {\n// await y.close()\n// }\n// })\n// async function openDB() {\n// try {\n// const opendb = await openDB()\n// return Result.Ok({\n// openDB,\n// finally: async () => {\n// await opendb.close()\n// }})\n// } catch (err) {\n// return Result.Err(err)\n// }\n// }\n// }\n","export abstract class Option<T> {\n static Some<T>(t: T): Option<T> {\n return new Some(t);\n }\n\n static None<T>(): Option<T> {\n return new None();\n }\n\n static Is<T>(t: unknown): t is Option<T> {\n return t instanceof Option;\n }\n\n IsNone(): boolean {\n return this.is_none();\n }\n\n IsSome(): boolean {\n return this.is_some();\n }\n Unwrap(): T {\n return this.unwrap();\n }\n\n abstract is_none(): boolean;\n abstract is_some(): boolean;\n abstract unwrap(): T;\n}\n\nexport class Some<T> extends Option<T> {\n private _t: T;\n constructor(_t: T) {\n super();\n this._t = _t;\n }\n\n is_none(): boolean {\n return false;\n }\n is_some(): boolean {\n return true;\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class None<T> extends Option<T> {\n is_none(): boolean {\n return true;\n }\n is_some(): boolean {\n return false;\n }\n unwrap(): T {\n throw new Error(\"None.unwrap\");\n }\n}\n\nexport type WithoutOption<T> = T extends Option<infer U> ? U : T;\n","export class Future<T> {\n readonly #promise: Promise<T>;\n #resolveFn: (value: T) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n #rejectFn: (reason: unknown) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolveFn = resolve;\n this.#rejectFn = reject;\n });\n }\n\n async asPromise(): Promise<T> {\n return this.#promise;\n }\n\n resolve(value: T) {\n this.#resolveFn(value);\n }\n reject(reason: unknown) {\n this.#rejectFn(reason);\n }\n}\n","import { Future } from \"./future\";\n\ninterface ResolveSeqItem<T, C> {\n future: Future<T>;\n fn: (c: C) => Promise<T>;\n}\n\nexport class ResolveSeq<T, C = void> {\n readonly ctx: C;\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n reset() {\n /* noop */\n }\n async _step(item?: ResolveSeqItem<T, C> | undefined) {\n if (!item) {\n // done\n return;\n }\n item\n .fn(this.ctx)\n .then((value) => item.future.resolve(value))\n .catch((e) => item.future.reject(e as Error))\n .finally(() => this._step(this._seqFutures.shift()));\n }\n readonly _seqFutures: ResolveSeqItem<T, C>[] = [];\n async add(fn: (c: C) => Promise<T>): Promise<T> {\n const future = new Future<T>();\n this._seqFutures.push({ future, fn });\n this._step(this._seqFutures.shift());\n return future.asPromise();\n }\n}\n\nexport class ResolveOnce<T, C = void> {\n _onceDone = false;\n readonly _onceFutures: Future<T>[] = [];\n _onceOk = false;\n _onceValue?: T;\n _onceError?: Error;\n\n readonly ctx: C;\n\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n\n get ready() {\n return this._onceDone;\n }\n\n reset() {\n this._onceDone = false;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceError = undefined;\n this._onceFutures.length = 0;\n }\n\n async once(fn: (c: C) => Promise<T>): Promise<T> {\n if (this._onceDone) {\n if (this._onceError) {\n return Promise.reject(this._onceError);\n }\n if (this._onceOk) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return Promise.resolve(this._onceValue!);\n }\n throw new Error(\"ResolveOnce.once impossible\");\n }\n const future = new Future<T>();\n this._onceFutures.push(future);\n if (this._onceFutures.length === 1) {\n fn(this.ctx)\n .then((value) => {\n this._onceValue = value;\n this._onceOk = true;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.resolve(this._onceValue!));\n this._onceFutures.length = 0;\n })\n .catch((e) => {\n this._onceError = e as Error;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.reject(this._onceError!));\n this._onceFutures.length = 0;\n });\n }\n return future.asPromise();\n }\n}\n\nexport class Keyed<T extends { reset: () => void }, K = string> {\n private readonly _map = new Map<K, T>();\n\n readonly factory: (key: K) => T;\n constructor(factory: (key: K) => T) {\n this.factory = factory;\n }\n\n async asyncGet(key: () => Promise<K>): Promise<T> {\n return this.get(await key());\n }\n\n get(key: K | (() => K)): T {\n if (typeof key === \"function\") {\n key = (key as () => K)();\n }\n let keyed = this._map.get(key);\n if (!keyed) {\n keyed = this.factory(key);\n this._map.set(key, keyed);\n }\n return keyed;\n }\n\n reset() {\n this._map.forEach((keyed) => keyed.reset());\n this._map.clear();\n }\n}\n\nexport class KeyedResolvOnce<T, K = string> extends Keyed<ResolveOnce<T, K>, K> {\n constructor() {\n super((key) => new ResolveOnce<T, K>(key));\n }\n}\n\nexport class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {\n constructor() {\n super((key) => new ResolveSeq<T, K>(key));\n }\n}\n"],"mappings":"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","names":["Level","TimeMode","RandomMode","IDMode","TimeUnits","module","my","LogWriter"]}
package/index.d.cts CHANGED
@@ -50,6 +50,9 @@ interface LoggerInterface<R> {
50
50
  } | FnSerialized): R;
51
51
  Result<T>(key: string, res: Result<T>): R;
52
52
  Url(url: URL, key?: string): R;
53
+ Len(value: object | {
54
+ length: number;
55
+ } | string | undefined | null, key?: string): R;
53
56
  Str(key: string, value?: string): R;
54
57
  Error(): R;
55
58
  Warn(): R;
@@ -139,6 +142,7 @@ declare class LoggerImpl implements Logger {
139
142
  } | FnSerialized): Logger;
140
143
  Bool(key: string, value: unknown): Logger;
141
144
  Result<T>(key: string, res: Result<T, Error>): Logger;
145
+ Len(value: unknown, key?: string): Logger;
142
146
  Url(url: URL, key?: string): Logger;
143
147
  Str(key: string, value?: string): Logger;
144
148
  Any(key: string, value: string | number | boolean | JsonRecord): Logger;
@@ -147,7 +151,8 @@ declare class LoggerImpl implements Logger {
147
151
  Int(key: string, value: number): Logger;
148
152
  Flush(): Promise<void>;
149
153
  With(): WithLogger;
150
- _resetAttributes(fn: () => Error): Error;
154
+ _resetAttributes(fn: () => () => string): () => string;
155
+ _produceError(attr: JsonRecord, ...args: string[]): string;
151
156
  Msg(...args: string[]): AsError;
152
157
  }
153
158
 
@@ -215,6 +220,18 @@ declare class Future<T> {
215
220
  reject(reason: unknown): void;
216
221
  }
217
222
 
223
+ interface ResolveSeqItem<T, C> {
224
+ future: Future<T>;
225
+ fn: (c: C) => Promise<T>;
226
+ }
227
+ declare class ResolveSeq<T, C = void> {
228
+ readonly ctx: C;
229
+ constructor(ctx?: C);
230
+ reset(): void;
231
+ _step(item?: ResolveSeqItem<T, C> | undefined): Promise<void>;
232
+ readonly _seqFutures: ResolveSeqItem<T, C>[];
233
+ add(fn: (c: C) => Promise<T>): Promise<T>;
234
+ }
218
235
  declare class ResolveOnce<T, C = void> {
219
236
  _onceDone: boolean;
220
237
  readonly _onceFutures: Future<T>[];
@@ -227,11 +244,21 @@ declare class ResolveOnce<T, C = void> {
227
244
  reset(): void;
228
245
  once(fn: (c: C) => Promise<T>): Promise<T>;
229
246
  }
230
- declare class KeyedResolvOnce<T, K = string> {
247
+ declare class Keyed<T extends {
248
+ reset: () => void;
249
+ }, K = string> {
231
250
  private readonly _map;
232
- asyncGet(key: () => Promise<K>): Promise<ResolveOnce<T, K>>;
233
- get(key: K | (() => K)): ResolveOnce<T, K>;
251
+ readonly factory: (key: K) => T;
252
+ constructor(factory: (key: K) => T);
253
+ asyncGet(key: () => Promise<K>): Promise<T>;
254
+ get(key: K | (() => K)): T;
234
255
  reset(): void;
235
256
  }
257
+ declare class KeyedResolvOnce<T, K = string> extends Keyed<ResolveOnce<T, K>, K> {
258
+ constructor();
259
+ }
260
+ declare class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {
261
+ constructor();
262
+ }
236
263
 
237
- export { type AsError, type FnSerialized, Future, IsLogger, KeyedResolvOnce, Level, type LevelHandler, LevelHandlerImpl, LogCollector, LogWriter$1 as LogWriter, type Logger, LoggerImpl, type LoggerImplParams, type LoggerInterface, MockLogger, type MockLoggerReturn, None, Option, ResolveOnce, Result, ResultError, ResultOK, type Serialized, Some, SysAbstraction, type WithLogger, type WithoutOption, type WithoutResult };
264
+ export { type AsError, type FnSerialized, Future, IsLogger, Keyed, KeyedResolvOnce, KeyedResolvSeq, Level, type LevelHandler, LevelHandlerImpl, LogCollector, LogWriter$1 as LogWriter, type Logger, LoggerImpl, type LoggerImplParams, type LoggerInterface, MockLogger, type MockLoggerReturn, None, Option, ResolveOnce, ResolveSeq, Result, ResultError, ResultOK, type Serialized, Some, SysAbstraction, type WithLogger, type WithoutOption, type WithoutResult };
package/index.d.ts CHANGED
@@ -50,6 +50,9 @@ interface LoggerInterface<R> {
50
50
  } | FnSerialized): R;
51
51
  Result<T>(key: string, res: Result<T>): R;
52
52
  Url(url: URL, key?: string): R;
53
+ Len(value: object | {
54
+ length: number;
55
+ } | string | undefined | null, key?: string): R;
53
56
  Str(key: string, value?: string): R;
54
57
  Error(): R;
55
58
  Warn(): R;
@@ -139,6 +142,7 @@ declare class LoggerImpl implements Logger {
139
142
  } | FnSerialized): Logger;
140
143
  Bool(key: string, value: unknown): Logger;
141
144
  Result<T>(key: string, res: Result<T, Error>): Logger;
145
+ Len(value: unknown, key?: string): Logger;
142
146
  Url(url: URL, key?: string): Logger;
143
147
  Str(key: string, value?: string): Logger;
144
148
  Any(key: string, value: string | number | boolean | JsonRecord): Logger;
@@ -147,7 +151,8 @@ declare class LoggerImpl implements Logger {
147
151
  Int(key: string, value: number): Logger;
148
152
  Flush(): Promise<void>;
149
153
  With(): WithLogger;
150
- _resetAttributes(fn: () => Error): Error;
154
+ _resetAttributes(fn: () => () => string): () => string;
155
+ _produceError(attr: JsonRecord, ...args: string[]): string;
151
156
  Msg(...args: string[]): AsError;
152
157
  }
153
158
 
@@ -215,6 +220,18 @@ declare class Future<T> {
215
220
  reject(reason: unknown): void;
216
221
  }
217
222
 
223
+ interface ResolveSeqItem<T, C> {
224
+ future: Future<T>;
225
+ fn: (c: C) => Promise<T>;
226
+ }
227
+ declare class ResolveSeq<T, C = void> {
228
+ readonly ctx: C;
229
+ constructor(ctx?: C);
230
+ reset(): void;
231
+ _step(item?: ResolveSeqItem<T, C> | undefined): Promise<void>;
232
+ readonly _seqFutures: ResolveSeqItem<T, C>[];
233
+ add(fn: (c: C) => Promise<T>): Promise<T>;
234
+ }
218
235
  declare class ResolveOnce<T, C = void> {
219
236
  _onceDone: boolean;
220
237
  readonly _onceFutures: Future<T>[];
@@ -227,11 +244,21 @@ declare class ResolveOnce<T, C = void> {
227
244
  reset(): void;
228
245
  once(fn: (c: C) => Promise<T>): Promise<T>;
229
246
  }
230
- declare class KeyedResolvOnce<T, K = string> {
247
+ declare class Keyed<T extends {
248
+ reset: () => void;
249
+ }, K = string> {
231
250
  private readonly _map;
232
- asyncGet(key: () => Promise<K>): Promise<ResolveOnce<T, K>>;
233
- get(key: K | (() => K)): ResolveOnce<T, K>;
251
+ readonly factory: (key: K) => T;
252
+ constructor(factory: (key: K) => T);
253
+ asyncGet(key: () => Promise<K>): Promise<T>;
254
+ get(key: K | (() => K)): T;
234
255
  reset(): void;
235
256
  }
257
+ declare class KeyedResolvOnce<T, K = string> extends Keyed<ResolveOnce<T, K>, K> {
258
+ constructor();
259
+ }
260
+ declare class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {
261
+ constructor();
262
+ }
236
263
 
237
- export { type AsError, type FnSerialized, Future, IsLogger, KeyedResolvOnce, Level, type LevelHandler, LevelHandlerImpl, LogCollector, LogWriter$1 as LogWriter, type Logger, LoggerImpl, type LoggerImplParams, type LoggerInterface, MockLogger, type MockLoggerReturn, None, Option, ResolveOnce, Result, ResultError, ResultOK, type Serialized, Some, SysAbstraction, type WithLogger, type WithoutOption, type WithoutResult };
264
+ export { type AsError, type FnSerialized, Future, IsLogger, Keyed, KeyedResolvOnce, KeyedResolvSeq, Level, type LevelHandler, LevelHandlerImpl, LogCollector, LogWriter$1 as LogWriter, type Logger, LoggerImpl, type LoggerImplParams, type LoggerInterface, MockLogger, type MockLoggerReturn, None, Option, ResolveOnce, ResolveSeq, Result, ResultError, ResultOK, type Serialized, Some, SysAbstraction, type WithLogger, type WithoutOption, type WithoutResult };
package/index.js CHANGED
@@ -297,6 +297,18 @@ var LoggerImpl = class _LoggerImpl {
297
297
  }
298
298
  return this;
299
299
  }
300
+ Len(value, key = "len") {
301
+ if (Array.isArray(value)) {
302
+ this._attributes[key] = logValue(() => value.length);
303
+ } else if (typeof value === "string") {
304
+ this._attributes[key] = logValue(() => value.length);
305
+ } else if (typeof value === "object" && value !== null) {
306
+ this._attributes[key] = logValue(() => Object.keys(value).length);
307
+ } else {
308
+ this.Int(key, -1);
309
+ }
310
+ return this;
311
+ }
300
312
  Url(url, key = "url") {
301
313
  this.Ref(key, () => url.toString());
302
314
  return this;
@@ -345,27 +357,36 @@ var LoggerImpl = class _LoggerImpl {
345
357
  Object.assign(this._attributes, this._withAttributes);
346
358
  return ret;
347
359
  }
360
+ _produceError(attr, ...args) {
361
+ var _a;
362
+ attr["msg"] = logValue(args.join(" "));
363
+ const msg = attr["msg"].value();
364
+ if (typeof msg === "string" && !msg.trim().length) {
365
+ delete attr["msg"];
366
+ }
367
+ if (((_a = attr["ts"]) == null ? void 0 : _a.value()) === "ETERNITY") {
368
+ this.Timestamp.call({
369
+ _sys: this._sys,
370
+ _attributes: attr
371
+ });
372
+ }
373
+ return JSON.stringify(resolveLogValue(attr));
374
+ }
348
375
  Msg(...args) {
349
- const error = this._resetAttributes(() => {
350
- var _a, _b, _c;
376
+ const fnError = this._resetAttributes(() => {
377
+ var _a, _b;
351
378
  const doWrite = this._levelHandler.isEnabled((_a = this._attributes["level"]) == null ? void 0 : _a.value(), (_b = this._attributes["module"]) == null ? void 0 : _b.value());
352
- this._attributes["msg"] = logValue(args.join(" "));
353
- const msg = this._attributes["msg"].value();
354
- if (typeof msg === "string" && !msg.trim().length) {
355
- delete this._attributes["msg"];
356
- }
357
- if (((_c = this._attributes["ts"]) == null ? void 0 : _c.value()) === "ETERNITY") {
358
- this.Timestamp();
359
- }
360
- const str = JSON.stringify(resolveLogValue(this._attributes));
379
+ let fnRet = () => this._produceError(__spreadValues({}, this._attributes), ...args);
361
380
  if (doWrite) {
381
+ const str = this._produceError(__spreadValues({}, this._attributes), ...args);
362
382
  const encoded = encoder.encode(str + "\n");
363
383
  this._logWriter.write(encoded);
384
+ fnRet = () => str;
364
385
  }
365
- return new Error(str);
386
+ return fnRet;
366
387
  });
367
388
  return {
368
- AsError: () => error
389
+ AsError: () => new Error(fnError())
369
390
  };
370
391
  }
371
392
  };
@@ -397,6 +418,10 @@ var WithLoggerBuilder = class {
397
418
  this._li.Str(key, value);
398
419
  return this;
399
420
  }
421
+ Len(value, key) {
422
+ this._li.Len(value, key);
423
+ return this;
424
+ }
400
425
  Ref(key, action) {
401
426
  this._li.Ref(key, action);
402
427
  return this;
@@ -697,6 +722,26 @@ _resolveFn = new WeakMap();
697
722
  _rejectFn = new WeakMap();
698
723
 
699
724
  // src/resolve-once.ts
725
+ var ResolveSeq = class {
726
+ constructor(ctx) {
727
+ this._seqFutures = [];
728
+ this.ctx = ctx;
729
+ }
730
+ reset() {
731
+ }
732
+ async _step(item) {
733
+ if (!item) {
734
+ return;
735
+ }
736
+ item.fn(this.ctx).then((value) => item.future.resolve(value)).catch((e) => item.future.reject(e)).finally(() => this._step(this._seqFutures.shift()));
737
+ }
738
+ async add(fn) {
739
+ const future = new Future();
740
+ this._seqFutures.push({ future, fn });
741
+ this._step(this._seqFutures.shift());
742
+ return future.asPromise();
743
+ }
744
+ };
700
745
  var ResolveOnce = class {
701
746
  constructor(ctx) {
702
747
  this._onceDone = false;
@@ -735,6 +780,8 @@ var ResolveOnce = class {
735
780
  this._onceFutures.length = 0;
736
781
  }).catch((e) => {
737
782
  this._onceError = e;
783
+ this._onceOk = false;
784
+ this._onceValue = void 0;
738
785
  this._onceDone = true;
739
786
  this._onceFutures.forEach((f) => f.reject(this._onceError));
740
787
  this._onceFutures.length = 0;
@@ -743,9 +790,10 @@ var ResolveOnce = class {
743
790
  return future.asPromise();
744
791
  }
745
792
  };
746
- var KeyedResolvOnce = class {
747
- constructor() {
793
+ var Keyed = class {
794
+ constructor(factory) {
748
795
  this._map = /* @__PURE__ */ new Map();
796
+ this.factory = factory;
749
797
  }
750
798
  async asyncGet(key) {
751
799
  return this.get(await key());
@@ -754,23 +802,35 @@ var KeyedResolvOnce = class {
754
802
  if (typeof key === "function") {
755
803
  key = key();
756
804
  }
757
- let resolveOnce = this._map.get(key);
758
- if (!resolveOnce) {
759
- resolveOnce = new ResolveOnce(key);
760
- this._map.set(key, resolveOnce);
805
+ let keyed = this._map.get(key);
806
+ if (!keyed) {
807
+ keyed = this.factory(key);
808
+ this._map.set(key, keyed);
761
809
  }
762
- return resolveOnce;
810
+ return keyed;
763
811
  }
764
812
  reset() {
765
- this._map.forEach((resolveOnce) => resolveOnce.reset());
813
+ this._map.forEach((keyed) => keyed.reset());
766
814
  this._map.clear();
767
815
  }
768
816
  };
817
+ var KeyedResolvOnce = class extends Keyed {
818
+ constructor() {
819
+ super((key) => new ResolveOnce(key));
820
+ }
821
+ };
822
+ var KeyedResolvSeq = class extends Keyed {
823
+ constructor() {
824
+ super((key) => new ResolveSeq(key));
825
+ }
826
+ };
769
827
  export {
770
828
  Future,
771
829
  IDMode,
772
830
  IsLogger,
831
+ Keyed,
773
832
  KeyedResolvOnce,
833
+ KeyedResolvSeq,
774
834
  Level,
775
835
  LevelHandlerImpl,
776
836
  LogCollector,
@@ -781,6 +841,7 @@ export {
781
841
  Option,
782
842
  RandomMode,
783
843
  ResolveOnce,
844
+ ResolveSeq,
784
845
  Result,
785
846
  ResultError,
786
847
  ResultOK,
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/logger.ts","../../src/logger_impl.ts","../../src/test/log_collector.ts","../../src/test/mock_logger.ts","../../src/result.ts","../../src/option.ts","../../src/future.ts","../../src/resolve-once.ts"],"sourcesContent":["import { Result } from \"./result\";\n\nexport enum Level {\n WARN = \"warn\",\n DEBUG = \"debug\",\n INFO = \"info\",\n ERROR = \"error\",\n}\n\nexport type Serialized = string | number | boolean;\nexport type FnSerialized = () => Serialized;\nexport interface LoggerInterface<R> {\n Module(key: string): R;\n // if modules is empty, set for all Levels\n EnableLevel(level: Level, ...modules: string[]): R;\n DisableLevel(level: Level, ...modules: string[]): R;\n\n SetDebug(...modules: (string | string[])[]): R;\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): R;\n Result<T>(key: string, res: Result<T>): R;\n // default key url\n Url(url: URL, key?: string): R;\n\n Str(key: string, value?: string): R;\n Error(): R;\n Warn(): R;\n Debug(): R;\n Log(): R;\n WithLevel(level: Level): R;\n\n Err(err: unknown): R; // could be Error, or something which coerces to string\n Info(): R;\n Timestamp(): R;\n Any(key: string, value: unknown): R;\n Dur(key: string, nsec: number): R;\n Uint64(key: string, value: number): R;\n Int(key: string, value: number): R;\n Bool(key: string, value: unknown): R;\n}\n\nexport function IsLogger(obj: unknown): obj is Logger {\n return (\n typeof obj === \"object\" &&\n [\n \"Module\",\n \"EnableLevel\",\n \"DisableLevel\",\n \"SetDebug\",\n \"Str\",\n \"Error\",\n \"Warn\",\n \"Debug\",\n \"Log\",\n \"WithLevel\",\n \"Err\",\n \"Info\",\n \"Timestamp\",\n \"Any\",\n \"Dur\",\n \"Uint64\",\n ]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((fn) => typeof (obj as any)[fn] === \"function\")\n .reduce((a, b) => a && b, true)\n );\n}\n\nexport interface WithLogger extends LoggerInterface<WithLogger> {\n Logger(): Logger;\n}\n\nexport interface AsError {\n AsError(): Error;\n}\n\nexport interface Logger extends LoggerInterface<Logger> {\n With(): WithLogger;\n\n Msg(...args: string[]): AsError;\n Flush(): Promise<void>;\n}\n","// import { v4 } from \"uuid\";\nimport { AsError, FnSerialized, Level, Logger, Serialized, WithLogger } from \"./logger\";\nimport { WebSysAbstraction } from \"./web/web_sys_abstraction\";\nimport { SysAbstraction } from \"./sys_abstraction\";\nimport { Result } from \"./result\";\n\nconst encoder = new TextEncoder();\n\nclass LogValue {\n constructor(readonly fn: FnSerialized) {}\n value(): Serialized {\n return this.fn();\n }\n}\n\nfunction resolveLogValue(val: JsonRecord): Record<string, Serialized> {\n const ret: Record<string, Serialized> = {};\n Object.keys(val).forEach((key) => {\n const v = val[key];\n if (v instanceof LogValue) {\n ret[key] = v.value();\n }\n });\n return ret;\n}\n\nfunction logValue(val: Serialized | FnSerialized | JsonRecord | undefined | null): LogValue {\n switch (typeof val) {\n case \"function\":\n return new LogValue(val);\n case \"string\":\n return new LogValue(() => val.toString());\n case \"number\":\n return new LogValue(() => val);\n case \"boolean\":\n return new LogValue(() => val);\n case \"object\":\n return new LogValue(() => JSON.stringify(val));\n default:\n if (!val) {\n return new LogValue(() => \"--Falsy--\");\n }\n throw new Error(`Invalid type:${typeof val}`);\n }\n}\n\ntype JsonRecord = Record<string, LogValue>;\n\nexport interface LevelHandler {\n enableLevel(level: Level, ...modules: string[]): void;\n disableLevel(level: Level, ...modules: string[]): void;\n setDebug(...modules: (string | string[])[]): void;\n isEnabled(ilevel: unknown, module: unknown): boolean;\n}\n\nexport class LevelHandlerImpl implements LevelHandler {\n readonly _globalLevels = new Set<Level>([Level.INFO, Level.ERROR, Level.WARN]);\n readonly _modules = new Map<string, Set<Level>>();\n enableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.add(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, level]));\n },\n ...modules,\n );\n }\n disableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.delete(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.delete(p);\n },\n ...modules,\n );\n }\n\n forModules(level: Level, fnAction: (p: string) => void, ...modules: (string | string[])[]): void {\n for (const m of modules.flat()) {\n const parts = m\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n for (const p of parts) {\n fnAction(p);\n }\n }\n }\n setDebug(...modules: (string | string[])[]): void {\n this.forModules(\n Level.DEBUG,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, Level.DEBUG]));\n },\n ...modules,\n );\n }\n isEnabled(ilevel: unknown, module: unknown): boolean {\n const level = ilevel as Level; // what if it's not a level?\n if (module !== undefined) {\n const levels = this._modules.get(module as string);\n if (levels && levels.has(level)) {\n return true;\n }\n }\n if (level === undefined) {\n // this is a plain log\n return true;\n }\n return this._globalLevels.has(level);\n }\n}\n\nconst levelSingleton = new LevelHandlerImpl();\n\n// globalThis[Symbol(\"levelSingleton\")] = new LevelHandlerImpl()\n\nexport class LogWriter {\n readonly _out: WritableStream<Uint8Array>;\n readonly _toFlush: (() => Promise<void>)[] = [];\n\n constructor(out: WritableStream<Uint8Array>) {\n this._out = out;\n }\n\n write(encoded: Uint8Array) {\n const my = async () => {\n // const val = Math.random();\n // console.log(\">>>My:\", val)\n try {\n const writer = this._out.getWriter();\n await writer.ready;\n await writer.write(encoded);\n await writer.releaseLock();\n } catch (err) {\n console.error(\"Chunk error:\", err);\n }\n // console.log(\"<<<My:\", val)\n };\n this._toFlush.push(my);\n this._flush();\n }\n\n _flushIsRunning = false;\n _flushDoneFns = Array<() => void>();\n _flush(toFlush: (() => Promise<void>)[] | undefined = undefined, done?: () => void): void {\n if (done) {\n this._flushDoneFns.push(done);\n }\n\n if (this._toFlush.length == 0) {\n // console.log(\"Flush is stopped\", this._toFlush.length)\n this._flushIsRunning = false;\n this._flushDoneFns.forEach((fn) => fn());\n this._flushDoneFns = [];\n return;\n }\n\n if (!toFlush && this._toFlush.length == 1 && !this._flushIsRunning) {\n this._flushIsRunning = true;\n // console.log(\"Flush is started\", this._toFlush.length)\n } else if (!toFlush) {\n // console.log(\"flush queue check but is running\", this._toFlush.length)\n return;\n }\n\n // console.log(\">>>Msg:\", this._toFlush.length)\n const my = this._toFlush.shift();\n my?.().finally(() => {\n // console.log(\"<<<Msg:\", this._toFlush.length)\n this._flush(this._toFlush);\n });\n }\n}\n\nexport interface LoggerImplParams {\n readonly out?: WritableStream<Uint8Array>;\n readonly logWriter?: LogWriter;\n readonly sys?: SysAbstraction;\n readonly withAttributes?: JsonRecord;\n readonly levelHandler?: LevelHandler;\n}\nexport class LoggerImpl implements Logger {\n readonly _sys: SysAbstraction;\n readonly _attributes: JsonRecord = {};\n readonly _withAttributes: JsonRecord;\n readonly _logWriter: LogWriter;\n readonly _levelHandler: LevelHandler;\n // readonly _id: string = \"logger-\" + Math.random().toString(36)\n\n constructor(params?: LoggerImplParams) {\n if (!params) {\n params = {};\n }\n if (!params.sys) {\n this._sys = WebSysAbstraction();\n } else {\n this._sys = params.sys;\n }\n if (params.logWriter) {\n this._logWriter = params.logWriter;\n } else {\n if (!params.out) {\n this._logWriter = new LogWriter(this._sys.Stdout());\n } else {\n this._logWriter = new LogWriter(params.out);\n }\n }\n if (!params.withAttributes) {\n this._withAttributes = {};\n } else {\n this._withAttributes = { ...params.withAttributes };\n }\n this._attributes = { ...this._withAttributes };\n if (params.levelHandler) {\n this._levelHandler = params.levelHandler;\n } else {\n this._levelHandler = levelSingleton;\n }\n // console.log(\"LoggerImpl\", this._id, this._attributes, this._withAttributes)\n }\n\n EnableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.disableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): Logger {\n this._attributes[\"module\"] = logValue(key);\n this._withAttributes[\"module\"] = logValue(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): Logger {\n this._levelHandler.setDebug(...modules);\n\n return this;\n }\n\n Timestamp(): Logger {\n this._attributes[\"ts\"] = logValue(this._sys.Time().Now().toISOString());\n return this;\n }\n Warn(): Logger {\n this._attributes[\"level\"] = logValue(Level.WARN);\n return this;\n }\n Log(): Logger {\n return this;\n }\n Debug(): Logger {\n this._attributes[\"level\"] = logValue(Level.DEBUG);\n return this;\n }\n Error(): Logger {\n this._attributes[\"level\"] = logValue(Level.ERROR);\n return this;\n }\n Info(): Logger {\n this._attributes[\"level\"] = logValue(Level.INFO);\n return this;\n }\n Err(err: unknown): Logger {\n if (err instanceof Error) {\n this._attributes[\"error\"] = logValue(err.message);\n } else {\n this._attributes[\"error\"] = logValue(\"\" + err);\n }\n return this;\n }\n WithLevel(l: Level): Logger {\n this._attributes[\"level\"] = logValue(l);\n return this;\n }\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): Logger {\n if (typeof action === \"function\") {\n this._attributes[key] = logValue(action as FnSerialized);\n } else if (typeof action.toString === \"function\") {\n this._attributes[key] = logValue(() => action.toString());\n } else {\n this._attributes[key] = logValue(\"INVALID REF\");\n }\n return this;\n }\n Bool(key: string, value: unknown): Logger {\n this._attributes[key] = logValue(!!value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): Logger {\n if (res.isOk()) {\n this._attributes[key] = logValue(res.Ok() as Serialized);\n } else {\n this.Err(res.Err());\n }\n return this;\n }\n\n Url(url: URL, key = \"url\"): Logger {\n this.Ref(key, () => url.toString());\n return this;\n }\n\n Str(key: string, value?: string): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n\n Any(key: string, value: string | number | boolean | JsonRecord): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Dur(key: string, nsec: number): Logger {\n this._attributes[key] = logValue(`${nsec}ms`);\n // new Intl.DurationFormat(\"en\", { style: \"narrow\" }).format(nsec);\n return this;\n }\n Uint64(key: string, value: number): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Int(key: string, value: number): Logger {\n return this.Uint64(key, value);\n }\n\n async Flush(): Promise<void> {\n return new Promise((resolve) => {\n this._logWriter._flush(undefined, resolve);\n });\n }\n\n With(): WithLogger {\n // console.log(\"WithLoggerBuilder.With\", this._id, this._attributes, this._withAttributes);\n return new WithLoggerBuilder(\n new LoggerImpl({\n logWriter: this._logWriter,\n sys: this._sys,\n levelHandler: this._levelHandler,\n withAttributes: {\n module: this._attributes[\"module\"],\n ...this._withAttributes,\n },\n }),\n );\n }\n\n _resetAttributes(fn: () => Error): Error {\n const ret = fn();\n Object.keys(this._attributes).forEach((key) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n });\n Object.assign(this._attributes, this._withAttributes);\n return ret;\n }\n Msg(...args: string[]): AsError {\n const error = this._resetAttributes(() => {\n const doWrite = this._levelHandler.isEnabled(this._attributes[\"level\"]?.value(), this._attributes[\"module\"]?.value());\n this._attributes[\"msg\"] = logValue(args.join(\" \"));\n const msg = this._attributes[\"msg\"].value();\n if (typeof msg === \"string\" && !msg.trim().length) {\n delete this._attributes[\"msg\"];\n }\n if (this._attributes[\"ts\"]?.value() === \"ETERNITY\") {\n this.Timestamp();\n }\n const str = JSON.stringify(resolveLogValue(this._attributes));\n if (doWrite) {\n const encoded = encoder.encode(str + \"\\n\");\n this._logWriter.write(encoded);\n }\n return new Error(str);\n });\n return {\n AsError: () => error,\n };\n }\n}\n\nclass WithLoggerBuilder implements WithLogger {\n readonly _li: LoggerImpl;\n constructor(li: LoggerImpl) {\n this._li = li;\n }\n\n Logger(): Logger {\n Object.assign(this._li._withAttributes, this._li._attributes);\n return this._li;\n }\n\n EnableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): WithLogger {\n this._li.Module(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): WithLogger {\n this._li.SetDebug(...modules);\n return this;\n }\n\n Str(key: string, value?: string): WithLogger {\n this._li.Str(key, value);\n return this;\n }\n\n Ref(key: string, action: Serialized | FnSerialized): WithLogger {\n this._li.Ref(key, action);\n return this;\n }\n Bool(key: string, value: unknown): WithLogger {\n this._li.Bool(key, value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): WithLogger {\n this._li.Result(key, res);\n return this;\n }\n Url(url: URL, key?: string): WithLogger {\n this._li.Url(url, key);\n return this;\n }\n Int(key: string, value: number): WithLogger {\n this._li.Int(key, value);\n return this;\n }\n\n Log(): WithLogger {\n this._li.Log();\n return this;\n }\n\n WithLevel(level: Level): WithLogger {\n this._li.WithLevel(level);\n return this;\n }\n\n Error(): WithLogger {\n this._li.Error();\n return this;\n }\n Warn(): WithLogger {\n this._li.Error();\n return this;\n }\n Debug(): WithLogger {\n this._li.Debug();\n return this;\n }\n Err(err: unknown): WithLogger {\n this._li.Err(err);\n return this;\n }\n Info(): WithLogger {\n this._li.Info();\n return this;\n }\n Timestamp(): WithLogger {\n this._li._attributes[\"ts\"] = logValue(\"ETERNITY\");\n return this;\n }\n Any(key: string, value: JsonRecord): WithLogger {\n this._li.Any(key, value);\n return this;\n }\n Dur(key: string, nsec: number): WithLogger {\n this._li.Dur(key, nsec);\n return this;\n }\n Uint64(key: string, value: number): WithLogger {\n this._li.Uint64(key, value);\n return this;\n }\n}\n","class LogWriter implements WritableStreamDefaultWriter<Uint8Array> {\n readonly _bufferArr: Uint8Array[] = [];\n\n _resolveClosed: (value?: PromiseLike<undefined>) => void;\n closed: Promise<undefined>;\n desiredSize: number | null = null;\n ready: Promise<undefined> = Promise.resolve(undefined);\n\n constructor() {\n this._resolveClosed = () => {\n // do nothing\n };\n this.closed = new Promise((resolve) => {\n this._resolveClosed = resolve;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n abort(reason?: any): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n close(): Promise<void> {\n this._resolveClosed();\n return Promise.resolve(undefined);\n }\n releaseLock(): void {\n // do nothing\n }\n write(chunk?: Uint8Array): Promise<void> {\n chunk && this._bufferArr.push(chunk);\n return Promise.resolve(undefined);\n }\n}\n\nexport class LogCollector implements WritableStream<Uint8Array> {\n readonly locked: boolean = false;\n _writer?: LogWriter;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abort(reason?: Uint8Array): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n async close(): Promise<void> {\n if (this._writer) {\n const ret = await this._writer.close();\n this._writer = undefined;\n return ret;\n }\n return Promise.resolve(undefined);\n }\n\n getWriter(): WritableStreamDefaultWriter<Uint8Array> {\n if (!this._writer) {\n this._writer = new LogWriter();\n }\n return this._writer;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logs(): any[] {\n if (!this._writer) {\n return [];\n }\n const jsonNlStr = new TextDecoder().decode(\n new Uint8Array(\n (function* (res: Uint8Array[]) {\n for (const x of res) {\n yield* x;\n }\n })(this._writer._bufferArr),\n ),\n );\n const splitStr = jsonNlStr.split(\"\\n\");\n const filterStr = splitStr.filter((a) => a.length);\n const mapStr = filterStr.map((a) => JSON.parse(a));\n return mapStr;\n }\n}\n","import { Logger } from \"../logger\";\nimport { LevelHandlerImpl, LoggerImpl } from \"../logger_impl\";\nimport { SysAbstraction } from \"../sys_abstraction\";\nimport { LogCollector } from \"./log_collector\";\n\nexport interface MockLoggerReturn {\n readonly logger: Logger;\n readonly logCollector: LogCollector;\n}\n\nexport function MockLogger(params?: {\n readonly sys?: SysAbstraction;\n moduleName?: string | string[];\n readonly disableDebug?: boolean;\n}): MockLoggerReturn {\n const lc = new LogCollector();\n let modNames = [\"MockLogger\"];\n if (typeof params?.moduleName === \"string\") {\n modNames = [params?.moduleName];\n } else if (Array.isArray(params?.moduleName)) {\n modNames = [...params.moduleName, ...modNames];\n }\n const logger = new LoggerImpl({\n out: lc,\n sys: params?.sys,\n levelHandler: new LevelHandlerImpl(),\n })\n .With()\n .Module(modNames[0])\n .Logger();\n !params?.disableDebug && logger.SetDebug(...modNames);\n return {\n logCollector: lc,\n logger,\n };\n}\n","export abstract class Result<T, E = Error> {\n static Ok<T>(t: T): Result<T, Error> {\n return new ResultOK(t);\n }\n static Err<T extends Error = Error>(t: T | string): Result<never, T> {\n if (typeof t === \"string\") {\n return new ResultError(new Error(t) as T);\n }\n return new ResultError(t);\n }\n static Is<T>(t: unknown): t is Result<T> {\n return t instanceof Result;\n }\n\n isOk(): boolean {\n return this.is_ok();\n }\n isErr(): boolean {\n return this.is_err();\n }\n\n Ok(): T {\n return this.unwrap();\n }\n Err(): E {\n return this.unwrap_err();\n }\n\n abstract is_ok(): boolean;\n abstract is_err(): boolean;\n abstract unwrap(): T;\n abstract unwrap_err(): E;\n}\n\nexport class ResultOK<T> extends Result<T, Error> {\n private _t: T;\n constructor(t: T) {\n super();\n this._t = t;\n }\n is_ok(): boolean {\n return true;\n }\n is_err(): boolean {\n return false;\n }\n unwrap_err(): Error {\n throw new Error(\"Result is Ok\");\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class ResultError<T extends Error> extends Result<never, T> {\n private _error: T;\n constructor(t: T) {\n super();\n this._error = t;\n }\n is_ok(): boolean {\n return false;\n }\n is_err(): boolean {\n return true;\n }\n unwrap(): never {\n throw new Error(`Result is Err: ${this._error}`);\n }\n unwrap_err(): T {\n return this._error;\n }\n}\n\nexport type WithoutResult<T> = T extends Result<infer U> ? U : T;\n\n/*\n\ntype FinalizedResult<T> = {\n result: T;\n scopeResult?: Result<void>;\n finally: () => Promise<void>;\n}\n\ntype exection2ResultParam<T> = {\n init: () => Promise<T>;\n inScope?: (t: T) => Promise<void>;\n cleanup: (t: T) => Promise<void>;\n\n}\n\nasync function expection2Result<T>({fn, inScope, cleanup}: exection2ResultParam<T>): Promise<Result<FinalizedResult<T>>> {\n try {\n const res = await fn();\n if (inScope) {\n try {\n await inScope?.(res)\n } catch (err) {\n return Result.Err(err as Error)\n }\n await cleanup(res)\n return Result.Ok({\n result: res,\n finally: async () => { }\n })\n }\n return Result.Ok({\n result: res ,\n finally: async () => {\n return cleanup(res)\n }\n })\n } catch (err) {\n return Result.Err(err as Error)\n }\n}\n*/\n\n// await expection2Result({\n// init: openDB,\n// inScope: (res) => {\n// res.query()\n// },\n// cleanup: async (y) => {\n// await y.close()\n// }\n// })\n// async function openDB() {\n// try {\n// const opendb = await openDB()\n// return Result.Ok({\n// openDB,\n// finally: async () => {\n// await opendb.close()\n// }})\n// } catch (err) {\n// return Result.Err(err)\n// }\n// }\n// }\n","export abstract class Option<T> {\n static Some<T>(t: T): Option<T> {\n return new Some(t);\n }\n\n static None<T>(): Option<T> {\n return new None();\n }\n\n static Is<T>(t: unknown): t is Option<T> {\n return t instanceof Option;\n }\n\n IsNone(): boolean {\n return this.is_none();\n }\n\n IsSome(): boolean {\n return this.is_some();\n }\n Unwrap(): T {\n return this.unwrap();\n }\n\n abstract is_none(): boolean;\n abstract is_some(): boolean;\n abstract unwrap(): T;\n}\n\nexport class Some<T> extends Option<T> {\n private _t: T;\n constructor(_t: T) {\n super();\n this._t = _t;\n }\n\n is_none(): boolean {\n return false;\n }\n is_some(): boolean {\n return true;\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class None<T> extends Option<T> {\n is_none(): boolean {\n return true;\n }\n is_some(): boolean {\n return false;\n }\n unwrap(): T {\n throw new Error(\"None.unwrap\");\n }\n}\n\nexport type WithoutOption<T> = T extends Option<infer U> ? U : T;\n","export class Future<T> {\n readonly #promise: Promise<T>;\n #resolveFn: (value: T) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n #rejectFn: (reason: unknown) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolveFn = resolve;\n this.#rejectFn = reject;\n });\n }\n\n async asPromise(): Promise<T> {\n return this.#promise;\n }\n\n resolve(value: T) {\n this.#resolveFn(value);\n }\n reject(reason: unknown) {\n this.#rejectFn(reason);\n }\n}\n","import { Future } from \"./future\";\n\nexport class ResolveOnce<T, C = void> {\n _onceDone = false;\n readonly _onceFutures: Future<T>[] = [];\n _onceOk = false;\n _onceValue?: T;\n _onceError?: Error;\n\n readonly ctx: C;\n\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n\n get ready() {\n return this._onceDone;\n }\n\n reset() {\n this._onceDone = false;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceError = undefined;\n this._onceFutures.length = 0;\n }\n\n async once(fn: (c: C) => Promise<T>): Promise<T> {\n if (this._onceDone) {\n if (this._onceError) {\n return Promise.reject(this._onceError);\n }\n if (this._onceOk) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return Promise.resolve(this._onceValue!);\n }\n throw new Error(\"ResolveOnce.once impossible\");\n }\n const future = new Future<T>();\n this._onceFutures.push(future);\n if (this._onceFutures.length === 1) {\n fn(this.ctx)\n .then((value) => {\n this._onceValue = value;\n this._onceOk = true;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.resolve(this._onceValue!));\n this._onceFutures.length = 0;\n })\n .catch((e) => {\n this._onceError = e as Error;\n this._onceDone = true;\n this._onceFutures.forEach((f) => f.reject(this._onceError));\n this._onceFutures.length = 0;\n });\n }\n return future.asPromise();\n }\n}\n\nexport class KeyedResolvOnce<T, K = string> {\n private readonly _map = new Map<K, ResolveOnce<T, K>>();\n\n async asyncGet(key: () => Promise<K>): Promise<ResolveOnce<T, K>> {\n return this.get(await key());\n }\n\n get(key: K | (() => K)): ResolveOnce<T, K> {\n if (typeof key === \"function\") {\n key = (key as () => K)();\n }\n let resolveOnce = this._map.get(key);\n if (!resolveOnce) {\n resolveOnce = new ResolveOnce<T, K>(key);\n this._map.set(key, resolveOnce);\n }\n return resolveOnce;\n }\n\n reset() {\n this._map.forEach((resolveOnce) => resolveOnce.reset());\n this._map.clear();\n }\n}\n"],"mappings":"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","names":["Level","LogWriter"]}
1
+ {"version":3,"sources":["../../src/logger.ts","../../src/logger_impl.ts","../../src/test/log_collector.ts","../../src/test/mock_logger.ts","../../src/result.ts","../../src/option.ts","../../src/future.ts","../../src/resolve-once.ts"],"sourcesContent":["import { Result } from \"./result\";\n\nexport enum Level {\n WARN = \"warn\",\n DEBUG = \"debug\",\n INFO = \"info\",\n ERROR = \"error\",\n}\n\nexport type Serialized = string | number | boolean;\nexport type FnSerialized = () => Serialized;\nexport interface LoggerInterface<R> {\n Module(key: string): R;\n // if modules is empty, set for all Levels\n EnableLevel(level: Level, ...modules: string[]): R;\n DisableLevel(level: Level, ...modules: string[]): R;\n\n SetDebug(...modules: (string | string[])[]): R;\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): R;\n Result<T>(key: string, res: Result<T>): R;\n // default key url\n Url(url: URL, key?: string): R;\n // len\n Len(value: object | { length: number } | string | undefined | null, key?: string): R;\n\n Str(key: string, value?: string): R;\n Error(): R;\n Warn(): R;\n Debug(): R;\n Log(): R;\n WithLevel(level: Level): R;\n\n Err(err: unknown): R; // could be Error, or something which coerces to string\n Info(): R;\n Timestamp(): R;\n Any(key: string, value: unknown): R;\n Dur(key: string, nsec: number): R;\n Uint64(key: string, value: number): R;\n Int(key: string, value: number): R;\n Bool(key: string, value: unknown): R;\n}\n\nexport function IsLogger(obj: unknown): obj is Logger {\n return (\n typeof obj === \"object\" &&\n [\n \"Module\",\n \"EnableLevel\",\n \"DisableLevel\",\n \"SetDebug\",\n \"Str\",\n \"Error\",\n \"Warn\",\n \"Debug\",\n \"Log\",\n \"WithLevel\",\n \"Err\",\n \"Info\",\n \"Timestamp\",\n \"Any\",\n \"Dur\",\n \"Uint64\",\n ]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((fn) => typeof (obj as any)[fn] === \"function\")\n .reduce((a, b) => a && b, true)\n );\n}\n\nexport interface WithLogger extends LoggerInterface<WithLogger> {\n Logger(): Logger;\n}\n\nexport interface AsError {\n AsError(): Error;\n}\n\nexport interface Logger extends LoggerInterface<Logger> {\n With(): WithLogger;\n\n Msg(...args: string[]): AsError;\n Flush(): Promise<void>;\n}\n","// import { v4 } from \"uuid\";\nimport { AsError, FnSerialized, Level, Logger, Serialized, WithLogger } from \"./logger\";\nimport { WebSysAbstraction } from \"./web/web_sys_abstraction\";\nimport { SysAbstraction } from \"./sys_abstraction\";\nimport { Result } from \"./result\";\n\nconst encoder = new TextEncoder();\n\nclass LogValue {\n constructor(readonly fn: FnSerialized) {}\n value(): Serialized {\n return this.fn();\n }\n}\n\nfunction resolveLogValue(val: JsonRecord): Record<string, Serialized> {\n const ret: Record<string, Serialized> = {};\n Object.keys(val).forEach((key) => {\n const v = val[key];\n if (v instanceof LogValue) {\n ret[key] = v.value();\n }\n });\n return ret;\n}\n\nfunction logValue(val: Serialized | FnSerialized | JsonRecord | undefined | null): LogValue {\n switch (typeof val) {\n case \"function\":\n return new LogValue(val);\n case \"string\":\n return new LogValue(() => val.toString());\n case \"number\":\n return new LogValue(() => val);\n case \"boolean\":\n return new LogValue(() => val);\n case \"object\":\n return new LogValue(() => JSON.stringify(val));\n default:\n if (!val) {\n return new LogValue(() => \"--Falsy--\");\n }\n throw new Error(`Invalid type:${typeof val}`);\n }\n}\n\ntype JsonRecord = Record<string, LogValue>;\n\nexport interface LevelHandler {\n enableLevel(level: Level, ...modules: string[]): void;\n disableLevel(level: Level, ...modules: string[]): void;\n setDebug(...modules: (string | string[])[]): void;\n isEnabled(ilevel: unknown, module: unknown): boolean;\n}\n\nexport class LevelHandlerImpl implements LevelHandler {\n readonly _globalLevels = new Set<Level>([Level.INFO, Level.ERROR, Level.WARN]);\n readonly _modules = new Map<string, Set<Level>>();\n enableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.add(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, level]));\n },\n ...modules,\n );\n }\n disableLevel(level: Level, ...modules: string[]): void {\n if (modules.length == 0) {\n this._globalLevels.delete(level);\n return;\n }\n this.forModules(\n level,\n (p) => {\n this._modules.delete(p);\n },\n ...modules,\n );\n }\n\n forModules(level: Level, fnAction: (p: string) => void, ...modules: (string | string[])[]): void {\n for (const m of modules.flat()) {\n const parts = m\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n for (const p of parts) {\n fnAction(p);\n }\n }\n }\n setDebug(...modules: (string | string[])[]): void {\n this.forModules(\n Level.DEBUG,\n (p) => {\n this._modules.set(p, new Set([...this._globalLevels, Level.DEBUG]));\n },\n ...modules,\n );\n }\n isEnabled(ilevel: unknown, module: unknown): boolean {\n const level = ilevel as Level; // what if it's not a level?\n if (module !== undefined) {\n const levels = this._modules.get(module as string);\n if (levels && levels.has(level)) {\n return true;\n }\n }\n if (level === undefined) {\n // this is a plain log\n return true;\n }\n return this._globalLevels.has(level);\n }\n}\n\nconst levelSingleton = new LevelHandlerImpl();\n\n// globalThis[Symbol(\"levelSingleton\")] = new LevelHandlerImpl()\n\nexport class LogWriter {\n readonly _out: WritableStream<Uint8Array>;\n readonly _toFlush: (() => Promise<void>)[] = [];\n\n constructor(out: WritableStream<Uint8Array>) {\n this._out = out;\n }\n\n write(encoded: Uint8Array) {\n const my = async () => {\n // const val = Math.random();\n // console.log(\">>>My:\", val)\n try {\n const writer = this._out.getWriter();\n await writer.ready;\n await writer.write(encoded);\n await writer.releaseLock();\n } catch (err) {\n console.error(\"Chunk error:\", err);\n }\n // console.log(\"<<<My:\", val)\n };\n this._toFlush.push(my);\n this._flush();\n }\n\n _flushIsRunning = false;\n _flushDoneFns = Array<() => void>();\n _flush(toFlush: (() => Promise<void>)[] | undefined = undefined, done?: () => void): void {\n if (done) {\n this._flushDoneFns.push(done);\n }\n\n if (this._toFlush.length == 0) {\n // console.log(\"Flush is stopped\", this._toFlush.length)\n this._flushIsRunning = false;\n this._flushDoneFns.forEach((fn) => fn());\n this._flushDoneFns = [];\n return;\n }\n\n if (!toFlush && this._toFlush.length == 1 && !this._flushIsRunning) {\n this._flushIsRunning = true;\n // console.log(\"Flush is started\", this._toFlush.length)\n } else if (!toFlush) {\n // console.log(\"flush queue check but is running\", this._toFlush.length)\n return;\n }\n\n // console.log(\">>>Msg:\", this._toFlush.length)\n const my = this._toFlush.shift();\n my?.().finally(() => {\n // console.log(\"<<<Msg:\", this._toFlush.length)\n this._flush(this._toFlush);\n });\n }\n}\n\nexport interface LoggerImplParams {\n readonly out?: WritableStream<Uint8Array>;\n readonly logWriter?: LogWriter;\n readonly sys?: SysAbstraction;\n readonly withAttributes?: JsonRecord;\n readonly levelHandler?: LevelHandler;\n}\nexport class LoggerImpl implements Logger {\n readonly _sys: SysAbstraction;\n readonly _attributes: JsonRecord = {};\n readonly _withAttributes: JsonRecord;\n readonly _logWriter: LogWriter;\n readonly _levelHandler: LevelHandler;\n // readonly _id: string = \"logger-\" + Math.random().toString(36)\n\n constructor(params?: LoggerImplParams) {\n if (!params) {\n params = {};\n }\n if (!params.sys) {\n this._sys = WebSysAbstraction();\n } else {\n this._sys = params.sys;\n }\n if (params.logWriter) {\n this._logWriter = params.logWriter;\n } else {\n if (!params.out) {\n this._logWriter = new LogWriter(this._sys.Stdout());\n } else {\n this._logWriter = new LogWriter(params.out);\n }\n }\n if (!params.withAttributes) {\n this._withAttributes = {};\n } else {\n this._withAttributes = { ...params.withAttributes };\n }\n this._attributes = { ...this._withAttributes };\n if (params.levelHandler) {\n this._levelHandler = params.levelHandler;\n } else {\n this._levelHandler = levelSingleton;\n }\n // console.log(\"LoggerImpl\", this._id, this._attributes, this._withAttributes)\n }\n\n EnableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): Logger {\n this._levelHandler.disableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): Logger {\n this._attributes[\"module\"] = logValue(key);\n this._withAttributes[\"module\"] = logValue(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): Logger {\n this._levelHandler.setDebug(...modules);\n\n return this;\n }\n\n Timestamp(): Logger {\n // this is called with .call from _produceError where this\n // this is crafted to have _sys and _attributes\n // CAUTION so done use other ref from this\n this._attributes[\"ts\"] = logValue(this._sys.Time().Now().toISOString());\n return this;\n }\n Warn(): Logger {\n this._attributes[\"level\"] = logValue(Level.WARN);\n return this;\n }\n Log(): Logger {\n return this;\n }\n Debug(): Logger {\n this._attributes[\"level\"] = logValue(Level.DEBUG);\n return this;\n }\n Error(): Logger {\n this._attributes[\"level\"] = logValue(Level.ERROR);\n return this;\n }\n Info(): Logger {\n this._attributes[\"level\"] = logValue(Level.INFO);\n return this;\n }\n Err(err: unknown): Logger {\n if (err instanceof Error) {\n this._attributes[\"error\"] = logValue(err.message);\n } else {\n this._attributes[\"error\"] = logValue(\"\" + err);\n }\n return this;\n }\n WithLevel(l: Level): Logger {\n this._attributes[\"level\"] = logValue(l);\n return this;\n }\n\n Ref(key: string, action: { toString: () => string } | FnSerialized): Logger {\n if (typeof action === \"function\") {\n this._attributes[key] = logValue(action as FnSerialized);\n } else if (typeof action.toString === \"function\") {\n this._attributes[key] = logValue(() => action.toString());\n } else {\n this._attributes[key] = logValue(\"INVALID REF\");\n }\n return this;\n }\n Bool(key: string, value: unknown): Logger {\n this._attributes[key] = logValue(!!value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): Logger {\n if (res.isOk()) {\n this._attributes[key] = logValue(res.Ok() as Serialized);\n } else {\n this.Err(res.Err());\n }\n return this;\n }\n\n Len(value: unknown, key = \"len\"): Logger {\n if (Array.isArray(value)) {\n this._attributes[key] = logValue(() => value.length);\n } else if (typeof value === \"string\") {\n this._attributes[key] = logValue(() => value.length);\n } else if (typeof value === \"object\" && value !== null) {\n this._attributes[key] = logValue(() => Object.keys(value).length);\n } else {\n this.Int(key, -1);\n }\n return this;\n }\n\n Url(url: URL, key = \"url\"): Logger {\n this.Ref(key, () => url.toString());\n return this;\n }\n\n Str(key: string, value?: string): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n\n Any(key: string, value: string | number | boolean | JsonRecord): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Dur(key: string, nsec: number): Logger {\n this._attributes[key] = logValue(`${nsec}ms`);\n // new Intl.DurationFormat(\"en\", { style: \"narrow\" }).format(nsec);\n return this;\n }\n Uint64(key: string, value: number): Logger {\n this._attributes[key] = logValue(value);\n return this;\n }\n Int(key: string, value: number): Logger {\n return this.Uint64(key, value);\n }\n\n async Flush(): Promise<void> {\n return new Promise((resolve) => {\n this._logWriter._flush(undefined, resolve);\n });\n }\n\n With(): WithLogger {\n // console.log(\"WithLoggerBuilder.With\", this._id, this._attributes, this._withAttributes);\n return new WithLoggerBuilder(\n new LoggerImpl({\n logWriter: this._logWriter,\n sys: this._sys,\n levelHandler: this._levelHandler,\n withAttributes: {\n module: this._attributes[\"module\"],\n ...this._withAttributes,\n },\n }),\n );\n }\n\n _resetAttributes(fn: () => () => string): () => string {\n const ret = fn();\n Object.keys(this._attributes).forEach((key) => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n });\n Object.assign(this._attributes, this._withAttributes);\n return ret;\n }\n _produceError(attr: JsonRecord, ...args: string[]): string {\n attr[\"msg\"] = logValue(args.join(\" \"));\n const msg = attr[\"msg\"].value();\n if (typeof msg === \"string\" && !msg.trim().length) {\n delete attr[\"msg\"];\n }\n if (attr[\"ts\"]?.value() === \"ETERNITY\") {\n // hacky but it works\n this.Timestamp.call({\n _sys: this._sys,\n _attributes: attr,\n });\n }\n return JSON.stringify(resolveLogValue(attr));\n }\n\n Msg(...args: string[]): AsError {\n const fnError = this._resetAttributes(() => {\n const doWrite = this._levelHandler.isEnabled(this._attributes[\"level\"]?.value(), this._attributes[\"module\"]?.value());\n let fnRet = () => this._produceError({ ...this._attributes }, ...args);\n if (doWrite) {\n const str = this._produceError({ ...this._attributes }, ...args);\n const encoded = encoder.encode(str + \"\\n\");\n this._logWriter.write(encoded);\n fnRet = () => str;\n }\n return fnRet;\n });\n return {\n AsError: () => new Error(fnError()),\n };\n }\n}\n\nclass WithLoggerBuilder implements WithLogger {\n readonly _li: LoggerImpl;\n constructor(li: LoggerImpl) {\n this._li = li;\n }\n\n Logger(): Logger {\n Object.assign(this._li._withAttributes, this._li._attributes);\n return this._li;\n }\n\n EnableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n DisableLevel(level: Level, ...modules: string[]): WithLogger {\n this._li._levelHandler.enableLevel(level, ...modules);\n return this;\n }\n\n Module(key: string): WithLogger {\n this._li.Module(key);\n return this;\n }\n SetDebug(...modules: (string | string[])[]): WithLogger {\n this._li.SetDebug(...modules);\n return this;\n }\n\n Str(key: string, value?: string): WithLogger {\n this._li.Str(key, value);\n return this;\n }\n\n Len(value: unknown, key?: string): WithLogger {\n this._li.Len(value, key);\n return this;\n }\n\n Ref(key: string, action: Serialized | FnSerialized): WithLogger {\n this._li.Ref(key, action);\n return this;\n }\n Bool(key: string, value: unknown): WithLogger {\n this._li.Bool(key, value);\n return this;\n }\n Result<T>(key: string, res: Result<T, Error>): WithLogger {\n this._li.Result(key, res);\n return this;\n }\n Url(url: URL, key?: string): WithLogger {\n this._li.Url(url, key);\n return this;\n }\n Int(key: string, value: number): WithLogger {\n this._li.Int(key, value);\n return this;\n }\n\n Log(): WithLogger {\n this._li.Log();\n return this;\n }\n\n WithLevel(level: Level): WithLogger {\n this._li.WithLevel(level);\n return this;\n }\n\n Error(): WithLogger {\n this._li.Error();\n return this;\n }\n Warn(): WithLogger {\n this._li.Error();\n return this;\n }\n Debug(): WithLogger {\n this._li.Debug();\n return this;\n }\n Err(err: unknown): WithLogger {\n this._li.Err(err);\n return this;\n }\n Info(): WithLogger {\n this._li.Info();\n return this;\n }\n Timestamp(): WithLogger {\n this._li._attributes[\"ts\"] = logValue(\"ETERNITY\");\n return this;\n }\n Any(key: string, value: JsonRecord): WithLogger {\n this._li.Any(key, value);\n return this;\n }\n Dur(key: string, nsec: number): WithLogger {\n this._li.Dur(key, nsec);\n return this;\n }\n Uint64(key: string, value: number): WithLogger {\n this._li.Uint64(key, value);\n return this;\n }\n}\n","class LogWriter implements WritableStreamDefaultWriter<Uint8Array> {\n readonly _bufferArr: Uint8Array[] = [];\n\n _resolveClosed: (value?: PromiseLike<undefined>) => void;\n closed: Promise<undefined>;\n desiredSize: number | null = null;\n ready: Promise<undefined> = Promise.resolve(undefined);\n\n constructor() {\n this._resolveClosed = () => {\n // do nothing\n };\n this.closed = new Promise((resolve) => {\n this._resolveClosed = resolve;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n abort(reason?: any): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n close(): Promise<void> {\n this._resolveClosed();\n return Promise.resolve(undefined);\n }\n releaseLock(): void {\n // do nothing\n }\n write(chunk?: Uint8Array): Promise<void> {\n chunk && this._bufferArr.push(chunk);\n return Promise.resolve(undefined);\n }\n}\n\nexport class LogCollector implements WritableStream<Uint8Array> {\n readonly locked: boolean = false;\n _writer?: LogWriter;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n abort(reason?: Uint8Array): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n async close(): Promise<void> {\n if (this._writer) {\n const ret = await this._writer.close();\n this._writer = undefined;\n return ret;\n }\n return Promise.resolve(undefined);\n }\n\n getWriter(): WritableStreamDefaultWriter<Uint8Array> {\n if (!this._writer) {\n this._writer = new LogWriter();\n }\n return this._writer;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Logs(): any[] {\n if (!this._writer) {\n return [];\n }\n const jsonNlStr = new TextDecoder().decode(\n new Uint8Array(\n (function* (res: Uint8Array[]) {\n for (const x of res) {\n yield* x;\n }\n })(this._writer._bufferArr),\n ),\n );\n const splitStr = jsonNlStr.split(\"\\n\");\n const filterStr = splitStr.filter((a) => a.length);\n const mapStr = filterStr.map((a) => JSON.parse(a));\n return mapStr;\n }\n}\n","import { Logger } from \"../logger\";\nimport { LevelHandlerImpl, LoggerImpl } from \"../logger_impl\";\nimport { SysAbstraction } from \"../sys_abstraction\";\nimport { LogCollector } from \"./log_collector\";\n\nexport interface MockLoggerReturn {\n readonly logger: Logger;\n readonly logCollector: LogCollector;\n}\n\nexport function MockLogger(params?: {\n readonly sys?: SysAbstraction;\n moduleName?: string | string[];\n readonly disableDebug?: boolean;\n}): MockLoggerReturn {\n const lc = new LogCollector();\n let modNames = [\"MockLogger\"];\n if (typeof params?.moduleName === \"string\") {\n modNames = [params?.moduleName];\n } else if (Array.isArray(params?.moduleName)) {\n modNames = [...params.moduleName, ...modNames];\n }\n const logger = new LoggerImpl({\n out: lc,\n sys: params?.sys,\n levelHandler: new LevelHandlerImpl(),\n })\n .With()\n .Module(modNames[0])\n .Logger();\n !params?.disableDebug && logger.SetDebug(...modNames);\n return {\n logCollector: lc,\n logger,\n };\n}\n","export abstract class Result<T, E = Error> {\n static Ok<T>(t: T): Result<T, Error> {\n return new ResultOK(t);\n }\n static Err<T extends Error = Error>(t: T | string): Result<never, T> {\n if (typeof t === \"string\") {\n return new ResultError(new Error(t) as T);\n }\n return new ResultError(t);\n }\n static Is<T>(t: unknown): t is Result<T> {\n return t instanceof Result;\n }\n\n isOk(): boolean {\n return this.is_ok();\n }\n isErr(): boolean {\n return this.is_err();\n }\n\n Ok(): T {\n return this.unwrap();\n }\n Err(): E {\n return this.unwrap_err();\n }\n\n abstract is_ok(): boolean;\n abstract is_err(): boolean;\n abstract unwrap(): T;\n abstract unwrap_err(): E;\n}\n\nexport class ResultOK<T> extends Result<T, Error> {\n private _t: T;\n constructor(t: T) {\n super();\n this._t = t;\n }\n is_ok(): boolean {\n return true;\n }\n is_err(): boolean {\n return false;\n }\n unwrap_err(): Error {\n throw new Error(\"Result is Ok\");\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class ResultError<T extends Error> extends Result<never, T> {\n private _error: T;\n constructor(t: T) {\n super();\n this._error = t;\n }\n is_ok(): boolean {\n return false;\n }\n is_err(): boolean {\n return true;\n }\n unwrap(): never {\n throw new Error(`Result is Err: ${this._error}`);\n }\n unwrap_err(): T {\n return this._error;\n }\n}\n\nexport type WithoutResult<T> = T extends Result<infer U> ? U : T;\n\n/*\n\ntype FinalizedResult<T> = {\n result: T;\n scopeResult?: Result<void>;\n finally: () => Promise<void>;\n}\n\ntype exection2ResultParam<T> = {\n init: () => Promise<T>;\n inScope?: (t: T) => Promise<void>;\n cleanup: (t: T) => Promise<void>;\n\n}\n\nasync function expection2Result<T>({fn, inScope, cleanup}: exection2ResultParam<T>): Promise<Result<FinalizedResult<T>>> {\n try {\n const res = await fn();\n if (inScope) {\n try {\n await inScope?.(res)\n } catch (err) {\n return Result.Err(err as Error)\n }\n await cleanup(res)\n return Result.Ok({\n result: res,\n finally: async () => { }\n })\n }\n return Result.Ok({\n result: res ,\n finally: async () => {\n return cleanup(res)\n }\n })\n } catch (err) {\n return Result.Err(err as Error)\n }\n}\n*/\n\n// await expection2Result({\n// init: openDB,\n// inScope: (res) => {\n// res.query()\n// },\n// cleanup: async (y) => {\n// await y.close()\n// }\n// })\n// async function openDB() {\n// try {\n// const opendb = await openDB()\n// return Result.Ok({\n// openDB,\n// finally: async () => {\n// await opendb.close()\n// }})\n// } catch (err) {\n// return Result.Err(err)\n// }\n// }\n// }\n","export abstract class Option<T> {\n static Some<T>(t: T): Option<T> {\n return new Some(t);\n }\n\n static None<T>(): Option<T> {\n return new None();\n }\n\n static Is<T>(t: unknown): t is Option<T> {\n return t instanceof Option;\n }\n\n IsNone(): boolean {\n return this.is_none();\n }\n\n IsSome(): boolean {\n return this.is_some();\n }\n Unwrap(): T {\n return this.unwrap();\n }\n\n abstract is_none(): boolean;\n abstract is_some(): boolean;\n abstract unwrap(): T;\n}\n\nexport class Some<T> extends Option<T> {\n private _t: T;\n constructor(_t: T) {\n super();\n this._t = _t;\n }\n\n is_none(): boolean {\n return false;\n }\n is_some(): boolean {\n return true;\n }\n unwrap(): T {\n return this._t;\n }\n}\n\nexport class None<T> extends Option<T> {\n is_none(): boolean {\n return true;\n }\n is_some(): boolean {\n return false;\n }\n unwrap(): T {\n throw new Error(\"None.unwrap\");\n }\n}\n\nexport type WithoutOption<T> = T extends Option<infer U> ? U : T;\n","export class Future<T> {\n readonly #promise: Promise<T>;\n #resolveFn: (value: T) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n #rejectFn: (reason: unknown) => void = () => {\n throw new Error(\"This Promise is not working as expected.\");\n };\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolveFn = resolve;\n this.#rejectFn = reject;\n });\n }\n\n async asPromise(): Promise<T> {\n return this.#promise;\n }\n\n resolve(value: T) {\n this.#resolveFn(value);\n }\n reject(reason: unknown) {\n this.#rejectFn(reason);\n }\n}\n","import { Future } from \"./future\";\n\ninterface ResolveSeqItem<T, C> {\n future: Future<T>;\n fn: (c: C) => Promise<T>;\n}\n\nexport class ResolveSeq<T, C = void> {\n readonly ctx: C;\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n reset() {\n /* noop */\n }\n async _step(item?: ResolveSeqItem<T, C> | undefined) {\n if (!item) {\n // done\n return;\n }\n item\n .fn(this.ctx)\n .then((value) => item.future.resolve(value))\n .catch((e) => item.future.reject(e as Error))\n .finally(() => this._step(this._seqFutures.shift()));\n }\n readonly _seqFutures: ResolveSeqItem<T, C>[] = [];\n async add(fn: (c: C) => Promise<T>): Promise<T> {\n const future = new Future<T>();\n this._seqFutures.push({ future, fn });\n this._step(this._seqFutures.shift());\n return future.asPromise();\n }\n}\n\nexport class ResolveOnce<T, C = void> {\n _onceDone = false;\n readonly _onceFutures: Future<T>[] = [];\n _onceOk = false;\n _onceValue?: T;\n _onceError?: Error;\n\n readonly ctx: C;\n\n constructor(ctx?: C) {\n this.ctx = ctx as C;\n }\n\n get ready() {\n return this._onceDone;\n }\n\n reset() {\n this._onceDone = false;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceError = undefined;\n this._onceFutures.length = 0;\n }\n\n async once(fn: (c: C) => Promise<T>): Promise<T> {\n if (this._onceDone) {\n if (this._onceError) {\n return Promise.reject(this._onceError);\n }\n if (this._onceOk) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return Promise.resolve(this._onceValue!);\n }\n throw new Error(\"ResolveOnce.once impossible\");\n }\n const future = new Future<T>();\n this._onceFutures.push(future);\n if (this._onceFutures.length === 1) {\n fn(this.ctx)\n .then((value) => {\n this._onceValue = value;\n this._onceOk = true;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.resolve(this._onceValue!));\n this._onceFutures.length = 0;\n })\n .catch((e) => {\n this._onceError = e as Error;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceDone = true;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.reject(this._onceError!));\n this._onceFutures.length = 0;\n });\n }\n return future.asPromise();\n }\n}\n\nexport class Keyed<T extends { reset: () => void }, K = string> {\n private readonly _map = new Map<K, T>();\n\n readonly factory: (key: K) => T;\n constructor(factory: (key: K) => T) {\n this.factory = factory;\n }\n\n async asyncGet(key: () => Promise<K>): Promise<T> {\n return this.get(await key());\n }\n\n get(key: K | (() => K)): T {\n if (typeof key === \"function\") {\n key = (key as () => K)();\n }\n let keyed = this._map.get(key);\n if (!keyed) {\n keyed = this.factory(key);\n this._map.set(key, keyed);\n }\n return keyed;\n }\n\n reset() {\n this._map.forEach((keyed) => keyed.reset());\n this._map.clear();\n }\n}\n\nexport class KeyedResolvOnce<T, K = string> extends Keyed<ResolveOnce<T, K>, K> {\n constructor() {\n super((key) => new ResolveOnce<T, K>(key));\n }\n}\n\nexport class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {\n constructor() {\n super((key) => new ResolveSeq<T, K>(key));\n }\n}\n"],"mappings":"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","names":["Level","LogWriter"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adviser/cement",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "better try/catch/finally handling",
5
5
  "main": "index.js",
6
6
  "type": "module",