@adviser/cement 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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/sys_env.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 \"./sys_env\";\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 { Env } from \"./sys_env\";\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(): Env;\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","export interface EnvActions {\n get(key: string): string | undefined;\n set(key: string, value?: string): void;\n del(key: string): void;\n keys(): string[];\n use(): boolean;\n}\n\nclass NodeEnvActions implements EnvActions {\n readonly #node = globalThis as unknown as { process: { env: Record<string, string> } };\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor, @typescript-eslint/no-unused-vars\n constructor(opts: Partial<EnvFactoryOpts>) {\n // do nothing\n }\n use(): boolean {\n return typeof this.#node === \"object\" && typeof this.#node.process === \"object\" && typeof this.#node.process.env === \"object\";\n }\n readonly #env = this.use() ? process.env : {};\n keys(): string[] {\n return Object.keys(this.#env);\n }\n get(key: string): string | undefined {\n return this.#env[key];\n }\n set(key: string, value?: string): void {\n if (value) {\n this.#env[key] = value;\n }\n }\n del(key: string): void {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.#env[key];\n }\n}\n\nclass DenoEnvActions implements EnvActions {\n readonly #deno = globalThis as unknown as { Deno: { env: Map<string, string> } };\n\n readonly #env: Map<string, string>;\n constructor(opts: Partial<EnvFactoryOpts>, env?: Map<string, string>) {\n if (env) {\n this.#env = env;\n } else {\n this.#env = this.use() ? this.#deno.Deno.env : new Map();\n }\n }\n use(): boolean {\n return typeof this.#deno === \"object\" && typeof this.#deno.Deno === \"object\" && typeof this.#deno.Deno.env === \"object\";\n }\n keys(): string[] {\n return Array.from(this.#env.keys());\n }\n get(key: string): string | undefined {\n return this.#env.get(key);\n }\n set(key: string, value?: string): void {\n if (value) {\n this.#env.set(key, value);\n }\n }\n del(key: string): void {\n this.#env.delete(key);\n }\n}\n\nclass BrowserEnvActions extends DenoEnvActions {\n static globalBEA(sym: symbol) {\n const browser = globalThis as unknown as Record<symbol, BrowserEnvActions>;\n if (typeof browser === \"object\" && typeof browser[sym] === \"object\") {\n return { map: browser[sym]._map, finalize: () => browser[sym]._map };\n }\n const map = new Map<string, string>();\n return {\n map,\n finalize: (bea: BrowserEnvActions) => {\n browser[sym] = bea;\n return map;\n },\n };\n }\n\n readonly _map: Map<string, string>;\n constructor(opts: Partial<EnvFactoryOpts>) {\n const { map, finalize } = BrowserEnvActions.globalBEA(Symbol.for(opts.symbol || \"CP_ENV\"));\n // not perfect the globalThis will be polluted\n // also in the case it is not need.\n // better we have a lazy init\n super(opts, map);\n this._map = finalize(this);\n }\n use(): boolean {\n return true;\n }\n}\n\ninterface EnvFactoryOpts {\n readonly symbol: string; // default \"CP_ENV\" used by BrowserEnvActions\n readonly presetEnv: Map<string, string>;\n}\n\nfunction envFactory(opts: Partial<EnvFactoryOpts> = {}): EnvActions {\n const found = [new NodeEnvActions(opts), new DenoEnvActions(opts), new BrowserEnvActions(opts)].find((env) => env.use());\n if (!found) {\n throw new Error(\"SysContainer:envFactory: no env available\");\n }\n return found;\n}\n\ntype OnSetFn = (key: string, value?: string) => void;\nexport interface OnSetItem {\n readonly filter: Set<string>;\n readonly fn: OnSetFn;\n}\n\nexport interface Env extends Omit<EnvActions, \"use\"> {\n onSet(fn: OnSetFn, ...filter: string[]): void;\n}\n\nexport class EnvImpl implements Env {\n readonly #envImpl: EnvActions;\n constructor(opts: Partial<EnvFactoryOpts> = {}) {\n this.#envImpl = envFactory(opts);\n // do nothing\n this.#updatePresets(opts.presetEnv);\n }\n #updatePresets(presetEnv?: Map<string, string>): void {\n if (!presetEnv) {\n return;\n }\n for (const [key, value] of presetEnv) {\n this.#envImpl.set(key, value);\n }\n }\n #applyOnSet(onSet: OnSetItem[], key?: string, value?: string): void {\n onSet.forEach((item) => {\n let keys: string[] = [];\n if (key) {\n keys = [key];\n } else {\n keys = this.#envImpl.keys();\n }\n keys\n .filter((k) => {\n if (item.filter.size === 0) {\n return true;\n }\n if (item.filter.has(k)) {\n return true;\n }\n return false;\n })\n .forEach((k) => {\n let v;\n if (!key && !value) {\n // init\n v = this.#envImpl.get(k);\n } else if (key && !value) {\n // del\n v = undefined;\n } else {\n // set\n v = value;\n }\n item.fn(k, v);\n });\n });\n }\n readonly #onSet: OnSetItem[] = [];\n keys(): string[] {\n return this.#envImpl.keys();\n }\n // filter is not set all sets passed\n onSet(fn: OnSetFn, ...filter: string[]): void {\n const item: OnSetItem = { filter: new Set(filter), fn };\n this.#onSet.push(item);\n this.#applyOnSet([item]);\n }\n get(key: string): string | undefined {\n return this.#envImpl.get(key);\n }\n set(key: string, value?: string): void {\n if (!value) {\n return;\n }\n this.#envImpl.set(key, value);\n this.#applyOnSet(this.#onSet, key, value);\n }\n del(key: string): void {\n this.#envImpl.del(key);\n this.#applyOnSet(this.#onSet, key);\n }\n}\n\nexport const envImpl = new EnvImpl();\n","import { BaseSysAbstraction, WrapperSysAbstraction, WrapperSysAbstractionParams } from \"../base_sys_abstraction\";\nimport { FileService, NamedWritableStream } from \"../file_service\";\nimport { SysAbstraction, SystemService, VoidFunc } from \"../sys_abstraction\";\nimport { envImpl } from \"../sys_env\";\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() {\n return envImpl;\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 if (typeof m !== \"string\") {\n continue;\n }\n const parts = m\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length);\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 (typeof module === \"string\") {\n const levels = this._modules.get(module);\n if (levels && levels.has(level)) {\n return true;\n }\n }\n const wlevel = this._modules.get(\"*\");\n if (wlevel && typeof level === \"string\") {\n if (wlevel.has(level)) {\n return true;\n }\n }\n if (typeof level !== \"string\") {\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 // if the string is \"*\" it will enable for all modules\n SetDebug(...modules: (string | string[])[]): Logger {\n this._levelHandler.setDebug(...modules);\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","_env","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/future.ts","../../src/resolve-once.ts","../../src/sys_env.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"],"sourcesContent":["export * from \"./file_service\";\nexport * from \"./logger_impl\";\nexport * from \"./logger\";\nexport * from \"./sys_abstraction\";\nexport * from \"./sys_env\";\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;\n\nexport class LogValue {\n constructor(readonly fn: FnSerialized) {}\n value(): Serialized {\n return this.fn();\n }\n toJSON(): Serialized {\n return this.value();\n }\n}\n\nexport type LogSerializable = Record<string, LogValue>;\n\nexport function removeSelfRef(): (key: unknown, val: unknown) => unknown {\n const cache = new Set();\n return function (key: unknown, value: unknown) {\n if (typeof value === \"object\" && value !== null) {\n // Duplicate reference found, discard key\n if (cache.has(value)) return \"...\";\n cache.add(value);\n }\n return value;\n };\n}\n\nexport function logValue(val: Serialized | FnSerialized | LogSerializable | 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.parse(JSON.stringify(val, removeSelfRef())));\n default:\n if (!val) {\n return new LogValue(() => \"--Falsy--\");\n }\n throw new Error(`Invalid type:${typeof val}`);\n }\n}\n\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 { Env } from \"./sys_env\";\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(): Env;\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 // eslint-disable-next-line no-console\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 // eslint-disable-next-line no-console\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","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, CTX = void> {\n _onceDone = false;\n readonly _onceFutures: Future<T>[] = [];\n _onceOk = false;\n _onceValue?: T;\n _onceError?: Error;\n _isPromise = false;\n\n readonly ctx: CTX;\n\n constructor(ctx?: CTX) {\n this.ctx = ctx as CTX;\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 // T extends Option<infer U> ? U : T\n once<R>(fn: (c: CTX) => R): R {\n if (this._onceDone) {\n if (this._onceError) {\n if (this._isPromise) {\n return Promise.reject(this._onceError) as unknown as R;\n } else {\n throw this._onceError;\n }\n }\n if (this._onceOk) {\n if (this._isPromise) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return Promise.resolve(this._onceValue!) as unknown as R;\n } else {\n return this._onceValue as unknown as R;\n }\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 const okFn = (value: T) => {\n this._onceValue = value;\n this._onceOk = true;\n this._onceDone = true;\n if (this._isPromise) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.resolve(this._onceValue!));\n }\n this._onceFutures.length = 0;\n };\n const catchFn = (e: Error) => {\n this._onceError = e as Error;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceDone = true;\n if (this._isPromise) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._onceFutures.forEach((f) => f.reject(this._onceError!));\n }\n this._onceFutures.length = 0;\n };\n try {\n const ret = fn(this.ctx);\n if (typeof (ret as Promise<T>).then === \"function\") {\n this._isPromise = true;\n (ret as Promise<T>).then(okFn).catch(catchFn);\n } else {\n okFn(ret as unknown as T);\n }\n } catch (e) {\n catchFn(e as Error);\n }\n }\n if (this._isPromise) {\n return future.asPromise() as unknown as R;\n } else {\n // abit funky but i don't want to impl the return just once\n return this.once(fn);\n }\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","import { ResolveOnce } from \"./resolve-once\";\n\nexport interface EnvMap {\n get(key: string): string | undefined;\n set(key: string, value?: string): void;\n delete(key: string): void;\n keys(): string[];\n}\nexport interface EnvActions extends EnvMap {\n active(): boolean;\n register(env: Env): Env;\n}\n\nclass NodeEnvActions implements EnvActions {\n readonly #node = globalThis as unknown as { process: { env: Record<string, string> } };\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor, @typescript-eslint/no-unused-vars\n constructor(opts: Partial<EnvFactoryOpts>) {\n // do nothing\n }\n\n register(env: Env): Env {\n return env;\n }\n\n active(): boolean {\n return typeof this.#node === \"object\" && typeof this.#node.process === \"object\" && typeof this.#node.process.env === \"object\";\n }\n readonly _env = this.active() ? this.#node.process.env : {};\n keys(): string[] {\n return Object.keys(this._env);\n }\n get(key: string): string | undefined {\n return this._env[key];\n }\n set(key: string, value?: string): void {\n if (value) {\n this._env[key] = value;\n }\n }\n delete(key: string): void {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._env[key];\n }\n}\n\nclass DenoEnvActions implements EnvActions {\n readonly #deno = globalThis as unknown as { Deno: { env: Map<string, string> } };\n\n get _env(): Map<string, string> {\n return this.#deno.Deno.env;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor, @typescript-eslint/no-unused-vars\n constructor(opts: Partial<EnvFactoryOpts>) {\n // do nothing\n }\n\n register(env: Env): Env {\n return env;\n }\n active(): boolean {\n return typeof this.#deno === \"object\" && typeof this.#deno.Deno === \"object\" && typeof this.#deno.Deno.env === \"object\";\n }\n keys(): string[] {\n return Array.from(this._env.keys());\n }\n get(key: string): string | undefined {\n return this._env.get(key);\n }\n set(key: string, value?: string): void {\n if (value) {\n this._env.set(key, value);\n }\n }\n delete(key: string): void {\n this._env.delete(key);\n }\n}\n\nexport class BrowserEnvActions implements EnvActions {\n readonly env = new Map<string, string>();\n readonly opts: Partial<EnvFactoryOpts>;\n constructor(opts: Partial<EnvFactoryOpts>) {\n this.opts = opts;\n }\n\n get(key: string): string | undefined {\n return this.env.get(key);\n }\n set(key: string, value?: string): void {\n if (value) {\n this.env.set(key, value);\n }\n }\n delete(key: string): void {\n this.env.delete(key);\n }\n keys(): string[] {\n return Array.from(this.env.keys());\n }\n active(): boolean {\n return true; // that should work on every runtime\n }\n\n register(env: Env): Env {\n const sym = Symbol.for(this.opts.symbol || \"CP_ENV\");\n const browser = globalThis as unknown as Record<symbol, Env>;\n browser[sym] = env;\n return env;\n }\n}\n\ninterface EnvFactoryOpts {\n readonly symbol: string; // default \"CP_ENV\" used by BrowserEnvActions\n readonly presetEnv: Map<string, string>;\n}\n\ntype OnSetFn = (key: string, value?: string) => void;\nexport interface OnSetItem {\n readonly filter: Set<string>;\n readonly fn: OnSetFn;\n}\n\nexport interface Env extends EnvMap {\n onSet(fn: OnSetFn, ...filter: string[]): void;\n}\n\nconst _envFactory = new ResolveOnce<Env>();\nexport function envFactory(opts: Partial<Omit<EnvFactoryOpts, \"action\">> = {}): Env {\n return _envFactory.once(() => {\n const found = [new NodeEnvActions(opts), new DenoEnvActions(opts), new BrowserEnvActions(opts)].find((env) => env.active());\n if (!found) {\n throw new Error(\"SysContainer:envFactory: no env available\");\n }\n const ret = new EnvImpl(found, opts);\n found.register(ret);\n return ret;\n });\n}\n\nexport class EnvImpl implements Env {\n readonly _map: EnvMap;\n constructor(map: EnvMap, opts: Partial<EnvFactoryOpts> = {}) {\n this._map = map;\n this._updatePresets(opts.presetEnv);\n }\n _updatePresets(presetEnv?: Map<string, string>): void {\n if (!presetEnv) {\n return;\n }\n for (const [key, value] of presetEnv) {\n this._map.set(key, value);\n }\n }\n _applyOnSet(onSet: OnSetItem[], key?: string, value?: string): void {\n onSet.forEach((item) => {\n let keys: string[] = [];\n if (key) {\n keys = [key];\n } else {\n keys = this._map.keys();\n }\n keys\n .filter((k) => {\n if (item.filter.size === 0) {\n return true;\n }\n if (item.filter.has(k)) {\n return true;\n }\n return false;\n })\n .forEach((k) => {\n let v;\n if (!key && !value) {\n // init\n v = this._map.get(k);\n } else if (key && !value) {\n // del\n v = undefined;\n } else {\n // set\n v = value;\n }\n item.fn(k, v);\n });\n });\n }\n readonly _onSet: OnSetItem[] = [];\n keys(): string[] {\n return this._map.keys();\n }\n // filter is not set all sets passed\n onSet(fn: OnSetFn, ...filter: string[]): void {\n const item: OnSetItem = { filter: new Set(filter), fn };\n this._onSet.push(item);\n this._applyOnSet([item]);\n }\n get(key: string): string | undefined {\n return this._map.get(key);\n }\n set(key: string, value?: string): void {\n if (!value) {\n return;\n }\n this._map.set(key, value);\n this._applyOnSet(this._onSet, key, value);\n }\n delete(key: string): void {\n this._map.delete(key);\n this._applyOnSet(this._onSet, key);\n }\n}\n\n// export const envImpl = new EnvImpl();\n","import { BaseSysAbstraction, WrapperSysAbstraction, WrapperSysAbstractionParams } from \"../base_sys_abstraction\";\nimport { FileService, NamedWritableStream } from \"../file_service\";\nimport { SysAbstraction, SystemService, VoidFunc } from \"../sys_abstraction\";\nimport { envFactory } from \"../sys_env\";\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() {\n return envFactory();\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, LogSerializable, Level, Logger, logValue, Serialized, WithLogger, removeSelfRef } from \"./logger\";\nimport { WebSysAbstraction } from \"./web/web_sys_abstraction\";\nimport { SysAbstraction } from \"./sys_abstraction\";\nimport { Result } from \"./result\";\n\nconst encoder = new TextEncoder();\n\n// function resolveLogValue(val: LogSerializable): 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\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 if (typeof m !== \"string\") {\n continue;\n }\n const parts = m\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length);\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 (typeof module === \"string\") {\n const levels = this._modules.get(module);\n if (levels && levels.has(level)) {\n return true;\n }\n }\n const wlevel = this._modules.get(\"*\");\n if (wlevel && typeof level === \"string\") {\n if (wlevel.has(level)) {\n return true;\n }\n }\n if (typeof level !== \"string\") {\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 // eslint-disable-next-line no-console\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?: LogSerializable;\n readonly levelHandler?: LevelHandler;\n}\nexport class LoggerImpl implements Logger {\n readonly _sys: SysAbstraction;\n readonly _attributes: LogSerializable = {};\n readonly _withAttributes: LogSerializable;\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 // if the string is \"*\" it will enable for all modules\n SetDebug(...modules: (string | string[])[]): Logger {\n this._levelHandler.setDebug(...modules);\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 | LogSerializable): 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: LogSerializable, ...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(attr, removeSelfRef());\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 = fnRet();\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: LogSerializable): 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"],"mappings":"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","names":["Level","TimeMode","RandomMode","IDMode","TimeUnits","module","my","LogWriter"]}
package/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as SysAbstraction } from './sys_abstraction-BzkoCY1p.cjs';
2
- export { D as Duration, c as Env, E as EnvActions, d as EnvImpl, F as FileService, I as IDMode, N as NamedWritableStream, O as OnSetItem, R as RandomMode, a as String2TimeMode, b as SystemService, f as Time, T as TimeMode, g as TimeUnits, V as VoidFunc, e as envImpl } from './sys_abstraction-BzkoCY1p.cjs';
1
+ import { S as SysAbstraction } from './sys_abstraction-C1-BRiiP.cjs';
2
+ export { B as BrowserEnvActions, D as Duration, d as Env, c as EnvActions, f as EnvImpl, E as EnvMap, F as FileService, I as IDMode, N as NamedWritableStream, O as OnSetItem, R as RandomMode, a as String2TimeMode, b as SystemService, g as Time, T as TimeMode, h as TimeUnits, V as VoidFunc, e as envFactory } from './sys_abstraction-C1-BRiiP.cjs';
3
3
 
4
4
  declare abstract class Result<T, E = Error> {
5
5
  static Ok<T>(t: T): Result<T, Error>;
@@ -40,6 +40,15 @@ declare enum Level {
40
40
  }
41
41
  type Serialized = string | number | boolean;
42
42
  type FnSerialized = () => Serialized;
43
+ declare class LogValue {
44
+ readonly fn: FnSerialized;
45
+ constructor(fn: FnSerialized);
46
+ value(): Serialized;
47
+ toJSON(): Serialized;
48
+ }
49
+ type LogSerializable = Record<string, LogValue>;
50
+ declare function removeSelfRef(): (key: unknown, val: unknown) => unknown;
51
+ declare function logValue(val: Serialized | FnSerialized | LogSerializable | undefined | null): LogValue;
43
52
  interface LoggerInterface<R> {
44
53
  Module(key: string): R;
45
54
  EnableLevel(level: Level, ...modules: string[]): R;
@@ -81,12 +90,6 @@ interface Logger extends LoggerInterface<Logger> {
81
90
  Flush(): Promise<void>;
82
91
  }
83
92
 
84
- declare class LogValue {
85
- readonly fn: FnSerialized;
86
- constructor(fn: FnSerialized);
87
- value(): Serialized;
88
- }
89
- type JsonRecord = Record<string, LogValue>;
90
93
  interface LevelHandler {
91
94
  enableLevel(level: Level, ...modules: string[]): void;
92
95
  disableLevel(level: Level, ...modules: string[]): void;
@@ -115,13 +118,13 @@ interface LoggerImplParams {
115
118
  readonly out?: WritableStream<Uint8Array>;
116
119
  readonly logWriter?: LogWriter$1;
117
120
  readonly sys?: SysAbstraction;
118
- readonly withAttributes?: JsonRecord;
121
+ readonly withAttributes?: LogSerializable;
119
122
  readonly levelHandler?: LevelHandler;
120
123
  }
121
124
  declare class LoggerImpl implements Logger {
122
125
  readonly _sys: SysAbstraction;
123
- readonly _attributes: JsonRecord;
124
- readonly _withAttributes: JsonRecord;
126
+ readonly _attributes: LogSerializable;
127
+ readonly _withAttributes: LogSerializable;
125
128
  readonly _logWriter: LogWriter$1;
126
129
  readonly _levelHandler: LevelHandler;
127
130
  constructor(params?: LoggerImplParams);
@@ -145,14 +148,14 @@ declare class LoggerImpl implements Logger {
145
148
  Len(value: unknown, key?: string): Logger;
146
149
  Url(url: URL, key?: string): Logger;
147
150
  Str(key: string, value?: string): Logger;
148
- Any(key: string, value: string | number | boolean | JsonRecord): Logger;
151
+ Any(key: string, value?: string | number | boolean | LogSerializable): Logger;
149
152
  Dur(key: string, nsec: number): Logger;
150
153
  Uint64(key: string, value: number): Logger;
151
154
  Int(key: string, value: number): Logger;
152
155
  Flush(): Promise<void>;
153
156
  With(): WithLogger;
154
157
  _resetAttributes(fn: () => () => string): () => string;
155
- _produceError(attr: JsonRecord, ...args: string[]): string;
158
+ _produceError(attr: LogSerializable, ...args: string[]): string;
156
159
  Msg(...args: string[]): AsError;
157
160
  }
158
161
 
@@ -232,17 +235,18 @@ declare class ResolveSeq<T, C = void> {
232
235
  readonly _seqFutures: ResolveSeqItem<T, C>[];
233
236
  add(fn: (c: C) => Promise<T>): Promise<T>;
234
237
  }
235
- declare class ResolveOnce<T, C = void> {
238
+ declare class ResolveOnce<T, CTX = void> {
236
239
  _onceDone: boolean;
237
240
  readonly _onceFutures: Future<T>[];
238
241
  _onceOk: boolean;
239
242
  _onceValue?: T;
240
243
  _onceError?: Error;
241
- readonly ctx: C;
242
- constructor(ctx?: C);
244
+ _isPromise: boolean;
245
+ readonly ctx: CTX;
246
+ constructor(ctx?: CTX);
243
247
  get ready(): boolean;
244
248
  reset(): void;
245
- once(fn: (c: C) => Promise<T>): Promise<T>;
249
+ once<R>(fn: (c: CTX) => R): R;
246
250
  }
247
251
  declare class Keyed<T extends {
248
252
  reset: () => void;
@@ -261,4 +265,4 @@ declare class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {
261
265
  constructor();
262
266
  }
263
267
 
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 };
268
+ export { type AsError, type FnSerialized, Future, IsLogger, Keyed, KeyedResolvOnce, KeyedResolvSeq, Level, type LevelHandler, LevelHandlerImpl, LogCollector, type LogSerializable, LogValue, 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, logValue, removeSelfRef };
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as SysAbstraction } from './sys_abstraction-BzkoCY1p.js';
2
- export { D as Duration, c as Env, E as EnvActions, d as EnvImpl, F as FileService, I as IDMode, N as NamedWritableStream, O as OnSetItem, R as RandomMode, a as String2TimeMode, b as SystemService, f as Time, T as TimeMode, g as TimeUnits, V as VoidFunc, e as envImpl } from './sys_abstraction-BzkoCY1p.js';
1
+ import { S as SysAbstraction } from './sys_abstraction-C1-BRiiP.js';
2
+ export { B as BrowserEnvActions, D as Duration, d as Env, c as EnvActions, f as EnvImpl, E as EnvMap, F as FileService, I as IDMode, N as NamedWritableStream, O as OnSetItem, R as RandomMode, a as String2TimeMode, b as SystemService, g as Time, T as TimeMode, h as TimeUnits, V as VoidFunc, e as envFactory } from './sys_abstraction-C1-BRiiP.js';
3
3
 
4
4
  declare abstract class Result<T, E = Error> {
5
5
  static Ok<T>(t: T): Result<T, Error>;
@@ -40,6 +40,15 @@ declare enum Level {
40
40
  }
41
41
  type Serialized = string | number | boolean;
42
42
  type FnSerialized = () => Serialized;
43
+ declare class LogValue {
44
+ readonly fn: FnSerialized;
45
+ constructor(fn: FnSerialized);
46
+ value(): Serialized;
47
+ toJSON(): Serialized;
48
+ }
49
+ type LogSerializable = Record<string, LogValue>;
50
+ declare function removeSelfRef(): (key: unknown, val: unknown) => unknown;
51
+ declare function logValue(val: Serialized | FnSerialized | LogSerializable | undefined | null): LogValue;
43
52
  interface LoggerInterface<R> {
44
53
  Module(key: string): R;
45
54
  EnableLevel(level: Level, ...modules: string[]): R;
@@ -81,12 +90,6 @@ interface Logger extends LoggerInterface<Logger> {
81
90
  Flush(): Promise<void>;
82
91
  }
83
92
 
84
- declare class LogValue {
85
- readonly fn: FnSerialized;
86
- constructor(fn: FnSerialized);
87
- value(): Serialized;
88
- }
89
- type JsonRecord = Record<string, LogValue>;
90
93
  interface LevelHandler {
91
94
  enableLevel(level: Level, ...modules: string[]): void;
92
95
  disableLevel(level: Level, ...modules: string[]): void;
@@ -115,13 +118,13 @@ interface LoggerImplParams {
115
118
  readonly out?: WritableStream<Uint8Array>;
116
119
  readonly logWriter?: LogWriter$1;
117
120
  readonly sys?: SysAbstraction;
118
- readonly withAttributes?: JsonRecord;
121
+ readonly withAttributes?: LogSerializable;
119
122
  readonly levelHandler?: LevelHandler;
120
123
  }
121
124
  declare class LoggerImpl implements Logger {
122
125
  readonly _sys: SysAbstraction;
123
- readonly _attributes: JsonRecord;
124
- readonly _withAttributes: JsonRecord;
126
+ readonly _attributes: LogSerializable;
127
+ readonly _withAttributes: LogSerializable;
125
128
  readonly _logWriter: LogWriter$1;
126
129
  readonly _levelHandler: LevelHandler;
127
130
  constructor(params?: LoggerImplParams);
@@ -145,14 +148,14 @@ declare class LoggerImpl implements Logger {
145
148
  Len(value: unknown, key?: string): Logger;
146
149
  Url(url: URL, key?: string): Logger;
147
150
  Str(key: string, value?: string): Logger;
148
- Any(key: string, value: string | number | boolean | JsonRecord): Logger;
151
+ Any(key: string, value?: string | number | boolean | LogSerializable): Logger;
149
152
  Dur(key: string, nsec: number): Logger;
150
153
  Uint64(key: string, value: number): Logger;
151
154
  Int(key: string, value: number): Logger;
152
155
  Flush(): Promise<void>;
153
156
  With(): WithLogger;
154
157
  _resetAttributes(fn: () => () => string): () => string;
155
- _produceError(attr: JsonRecord, ...args: string[]): string;
158
+ _produceError(attr: LogSerializable, ...args: string[]): string;
156
159
  Msg(...args: string[]): AsError;
157
160
  }
158
161
 
@@ -232,17 +235,18 @@ declare class ResolveSeq<T, C = void> {
232
235
  readonly _seqFutures: ResolveSeqItem<T, C>[];
233
236
  add(fn: (c: C) => Promise<T>): Promise<T>;
234
237
  }
235
- declare class ResolveOnce<T, C = void> {
238
+ declare class ResolveOnce<T, CTX = void> {
236
239
  _onceDone: boolean;
237
240
  readonly _onceFutures: Future<T>[];
238
241
  _onceOk: boolean;
239
242
  _onceValue?: T;
240
243
  _onceError?: Error;
241
- readonly ctx: C;
242
- constructor(ctx?: C);
244
+ _isPromise: boolean;
245
+ readonly ctx: CTX;
246
+ constructor(ctx?: CTX);
243
247
  get ready(): boolean;
244
248
  reset(): void;
245
- once(fn: (c: C) => Promise<T>): Promise<T>;
249
+ once<R>(fn: (c: CTX) => R): R;
246
250
  }
247
251
  declare class Keyed<T extends {
248
252
  reset: () => void;
@@ -261,4 +265,4 @@ declare class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {
261
265
  constructor();
262
266
  }
263
267
 
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 };
268
+ export { type AsError, type FnSerialized, Future, IsLogger, Keyed, KeyedResolvOnce, KeyedResolvSeq, Level, type LevelHandler, LevelHandlerImpl, LogCollector, type LogSerializable, LogValue, 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, logValue, removeSelfRef };