@adviser/cement 0.2.18 → 0.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{base-sys-abstraction-BzVP_lX0.d.cts → base-sys-abstraction-C9WW3w57.d.cts} +3 -2
- package/{base-sys-abstraction-BzVP_lX0.d.ts → base-sys-abstraction-C9WW3w57.d.ts} +3 -2
- package/{chunk-LJRKN3XI.js → chunk-2L33RPFJ.js} +2 -2
- package/{chunk-P4FB5FHU.js → chunk-JYUQZNDZ.js} +8 -6
- package/chunk-JYUQZNDZ.js.map +1 -0
- package/index.cjs +153 -81
- package/index.cjs.map +1 -1
- package/index.d.cts +27 -18
- package/index.d.ts +27 -18
- package/index.js +147 -78
- package/index.js.map +1 -1
- package/node/index.cjs +7 -5
- package/node/index.cjs.map +1 -1
- package/node/index.d.cts +1 -1
- package/node/index.d.ts +1 -1
- package/node/index.js +1 -1
- package/package.json +7 -3
- package/web/index.cjs +7 -5
- package/web/index.cjs.map +1 -1
- package/web/index.d.cts +1 -1
- package/web/index.d.ts +1 -1
- package/web/index.js +2 -2
- package/chunk-P4FB5FHU.js.map +0 -1
- /package/{chunk-LJRKN3XI.js.map → chunk-2L33RPFJ.js.map} +0 -0
|
@@ -64,7 +64,7 @@ declare class EnvImpl implements Env {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
declare abstract class Time {
|
|
67
|
-
abstract Now(): Date;
|
|
67
|
+
abstract Now(add?: number): Date;
|
|
68
68
|
abstract Sleep(duration: Duration): Promise<void>;
|
|
69
69
|
TimeSince(start: Date): Duration;
|
|
70
70
|
}
|
|
@@ -119,8 +119,9 @@ declare class ConstTime extends Time {
|
|
|
119
119
|
}
|
|
120
120
|
declare class StepTime extends Time {
|
|
121
121
|
_step: Date;
|
|
122
|
+
readonly _start: Date;
|
|
122
123
|
constructor();
|
|
123
|
-
Now(): Date;
|
|
124
|
+
Now(steps?: number): Date;
|
|
124
125
|
Sleep(duration: number): Promise<void>;
|
|
125
126
|
}
|
|
126
127
|
declare function TimeFactory(timeMode: TimeMode): Time;
|
|
@@ -64,7 +64,7 @@ declare class EnvImpl implements Env {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
declare abstract class Time {
|
|
67
|
-
abstract Now(): Date;
|
|
67
|
+
abstract Now(add?: number): Date;
|
|
68
68
|
abstract Sleep(duration: Duration): Promise<void>;
|
|
69
69
|
TimeSince(start: Date): Duration;
|
|
70
70
|
}
|
|
@@ -119,8 +119,9 @@ declare class ConstTime extends Time {
|
|
|
119
119
|
}
|
|
120
120
|
declare class StepTime extends Time {
|
|
121
121
|
_step: Date;
|
|
122
|
+
readonly _start: Date;
|
|
122
123
|
constructor();
|
|
123
|
-
Now(): Date;
|
|
124
|
+
Now(steps?: number): Date;
|
|
124
125
|
Sleep(duration: number): Promise<void>;
|
|
125
126
|
}
|
|
126
127
|
declare function TimeFactory(timeMode: TimeMode): Time;
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
BaseSysAbstraction,
|
|
3
3
|
WrapperSysAbstraction,
|
|
4
4
|
envFactory
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-JYUQZNDZ.js";
|
|
6
6
|
|
|
7
7
|
// src/web/web-sys-abstraction.ts
|
|
8
8
|
var WebFileService = class {
|
|
@@ -80,4 +80,4 @@ function WebSysAbstraction(param) {
|
|
|
80
80
|
export {
|
|
81
81
|
WebSysAbstraction
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-2L33RPFJ.js.map
|
|
@@ -77,13 +77,15 @@ var StepTime = class extends Time {
|
|
|
77
77
|
constructor() {
|
|
78
78
|
super();
|
|
79
79
|
this._step = new ConstTime().Now();
|
|
80
|
+
this._start = this._step;
|
|
80
81
|
}
|
|
81
|
-
Now() {
|
|
82
|
-
|
|
83
|
-
this._step = new
|
|
84
|
-
|
|
82
|
+
Now(steps = 1) {
|
|
83
|
+
for (let i = 0; steps > 0 && i < steps; i++) {
|
|
84
|
+
this._step = new Date(this._step.getTime() + 1e3);
|
|
85
|
+
}
|
|
86
|
+
if (steps < 1) {
|
|
87
|
+
this._step = new Date(this._start.getTime() + steps * -1e3);
|
|
85
88
|
}
|
|
86
|
-
this._step = new Date(this._step.getTime() + 1e3);
|
|
87
89
|
return this._step;
|
|
88
90
|
}
|
|
89
91
|
Sleep(duration) {
|
|
@@ -590,4 +592,4 @@ export {
|
|
|
590
592
|
envFactory,
|
|
591
593
|
EnvImpl
|
|
592
594
|
};
|
|
593
|
-
//# sourceMappingURL=chunk-
|
|
595
|
+
//# sourceMappingURL=chunk-JYUQZNDZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/sys-abstraction.ts","../../src/time.ts","../../src/base-sys-abstraction.ts","../../src/future.ts","../../src/resolve-once.ts","../../src/sys-env.ts"],"sourcesContent":["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(add?: number): 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 readonly _start: Date;\n constructor() {\n super();\n this._step = new ConstTime().Now();\n this._start = this._step;\n }\n Now(steps = 1): Date {\n // if (this._step.getTime() === 0) {\n // this._step = new ConstTime().Now();\n // return this._step;\n // }\n for (let i = 0; steps > 0 && i < steps; i++) {\n this._step = new Date(this._step.getTime() + 1000);\n }\n if (steps < 1) {\n this._step = new Date(this._start.getTime() + steps * -1000);\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 readonly future: Future<T>;\n readonly fn: (c: C) => Promise<T>;\n readonly id?: number;\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(() => {\n this._seqFutures.shift();\n this._step(this._seqFutures[0]);\n });\n }\n readonly _seqFutures: ResolveSeqItem<T, C>[] = [];\n async add(fn: (c: C) => Promise<T>, id?: number): Promise<T> {\n const future = new Future<T>();\n this._seqFutures.push({ future, fn, id });\n if (this._seqFutures.length === 1) {\n this._step(this._seqFutures[0]);\n }\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\nexport interface 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<EnvFactoryOpts> = {}): 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"],"mappings":"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","names":["TimeMode","RandomMode","IDMode","TimeUnits"]}
|
package/index.cjs
CHANGED
|
@@ -94,6 +94,7 @@ __export(src_exports, {
|
|
|
94
94
|
LogWriterStream: () => LogWriterStream,
|
|
95
95
|
LoggerImpl: () => LoggerImpl,
|
|
96
96
|
MockLogger: () => MockLogger,
|
|
97
|
+
MutableURL: () => MutableURL,
|
|
97
98
|
None: () => None,
|
|
98
99
|
Option: () => Option,
|
|
99
100
|
RandomMode: () => RandomMode,
|
|
@@ -278,13 +279,15 @@ var StepTime = class extends Time {
|
|
|
278
279
|
constructor() {
|
|
279
280
|
super();
|
|
280
281
|
this._step = new ConstTime().Now();
|
|
282
|
+
this._start = this._step;
|
|
281
283
|
}
|
|
282
|
-
Now() {
|
|
283
|
-
|
|
284
|
-
this._step = new
|
|
285
|
-
|
|
284
|
+
Now(steps = 1) {
|
|
285
|
+
for (let i = 0; steps > 0 && i < steps; i++) {
|
|
286
|
+
this._step = new Date(this._step.getTime() + 1e3);
|
|
287
|
+
}
|
|
288
|
+
if (steps < 1) {
|
|
289
|
+
this._step = new Date(this._start.getTime() + steps * -1e3);
|
|
286
290
|
}
|
|
287
|
-
this._step = new Date(this._step.getTime() + 1e3);
|
|
288
291
|
return this._step;
|
|
289
292
|
}
|
|
290
293
|
Sleep(duration) {
|
|
@@ -845,34 +848,100 @@ function falsy2undef(value) {
|
|
|
845
848
|
}
|
|
846
849
|
function ensureURLWithDefaultProto(url, defaultProtocol) {
|
|
847
850
|
if (!url) {
|
|
848
|
-
return new
|
|
851
|
+
return new MutableURL(`${defaultProtocol}//`);
|
|
849
852
|
}
|
|
850
853
|
if (typeof url === "string") {
|
|
851
854
|
try {
|
|
852
|
-
return new
|
|
855
|
+
return new MutableURL(url);
|
|
853
856
|
} catch (e) {
|
|
854
|
-
return new
|
|
857
|
+
return new MutableURL(`${defaultProtocol}//${url}`);
|
|
855
858
|
}
|
|
856
859
|
} else {
|
|
857
|
-
return url;
|
|
860
|
+
return new MutableURL(url.toString());
|
|
858
861
|
}
|
|
859
862
|
}
|
|
860
863
|
function isURL(value) {
|
|
861
864
|
return value instanceof URL || !!value && typeof value.searchParams === "object" && typeof value.searchParams.sort === "function" && typeof value.hash === "string";
|
|
862
865
|
}
|
|
866
|
+
var MutableURL = class _MutableURL extends URL {
|
|
867
|
+
constructor(urlStr) {
|
|
868
|
+
super("defect://does.not.exist");
|
|
869
|
+
this._sysURL = new URL(urlStr);
|
|
870
|
+
this._protocol = this._sysURL.protocol;
|
|
871
|
+
this._hasHostpart = ["http:", "https:"].includes(this._protocol);
|
|
872
|
+
if (this._hasHostpart) {
|
|
873
|
+
this._pathname = this._sysURL.pathname;
|
|
874
|
+
} else {
|
|
875
|
+
this._pathname = urlStr.replace(new RegExp(`^${this._protocol}//`), "").replace(/[#?].*$/, "");
|
|
876
|
+
}
|
|
877
|
+
this.hash = this._sysURL.hash;
|
|
878
|
+
}
|
|
879
|
+
clone() {
|
|
880
|
+
return new _MutableURL(this.toString());
|
|
881
|
+
}
|
|
882
|
+
get hostname() {
|
|
883
|
+
if (!this._hasHostpart) {
|
|
884
|
+
throw new Error("you can use hostname only if protocol is http or https");
|
|
885
|
+
}
|
|
886
|
+
return this._sysURL.hostname;
|
|
887
|
+
}
|
|
888
|
+
set hostname(h) {
|
|
889
|
+
if (!this._hasHostpart) {
|
|
890
|
+
throw new Error("you can use hostname only if protocol is http or https");
|
|
891
|
+
}
|
|
892
|
+
this._sysURL.hostname = h;
|
|
893
|
+
}
|
|
894
|
+
set pathname(p) {
|
|
895
|
+
this._pathname = p;
|
|
896
|
+
}
|
|
897
|
+
get pathname() {
|
|
898
|
+
return this._pathname;
|
|
899
|
+
}
|
|
900
|
+
get protocol() {
|
|
901
|
+
return this._protocol;
|
|
902
|
+
}
|
|
903
|
+
set protocol(p) {
|
|
904
|
+
if (!p.endsWith(":")) {
|
|
905
|
+
p = `${p}:`;
|
|
906
|
+
}
|
|
907
|
+
this._protocol = p;
|
|
908
|
+
}
|
|
909
|
+
get searchParams() {
|
|
910
|
+
return this._sysURL.searchParams;
|
|
911
|
+
}
|
|
912
|
+
toString() {
|
|
913
|
+
let search = "";
|
|
914
|
+
if (this._sysURL.searchParams.size) {
|
|
915
|
+
for (const [key, value] of Array.from(this._sysURL.searchParams.entries()).sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
916
|
+
search += `${!search.length ? "?" : "&"}${key}=${encodeURIComponent(value)}`;
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
let hostpart = "";
|
|
920
|
+
if (this._hasHostpart) {
|
|
921
|
+
hostpart = this._sysURL.hostname;
|
|
922
|
+
if (this._sysURL.port) {
|
|
923
|
+
hostpart += `:${this._sysURL.port}`;
|
|
924
|
+
}
|
|
925
|
+
if (!this._pathname.startsWith("/")) {
|
|
926
|
+
hostpart += "/";
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
return `${this._protocol}//${hostpart}${this._pathname}${search}`;
|
|
930
|
+
}
|
|
931
|
+
};
|
|
863
932
|
function from(fac, strURLUri, defaultProtocol) {
|
|
864
933
|
switch (typeof falsy2undef(strURLUri)) {
|
|
865
934
|
case "undefined":
|
|
866
|
-
return fac(new
|
|
935
|
+
return fac(new MutableURL(`${defaultProtocol}///`));
|
|
867
936
|
case "string":
|
|
868
937
|
return fac(ensureURLWithDefaultProto(strURLUri, defaultProtocol));
|
|
869
938
|
case "object":
|
|
870
939
|
if (BuildURI.is(strURLUri)) {
|
|
871
|
-
return fac(new
|
|
940
|
+
return fac(new MutableURL(strURLUri._url.toString()));
|
|
872
941
|
} else if (URI.is(strURLUri)) {
|
|
873
|
-
return fac(new
|
|
942
|
+
return fac(new MutableURL(strURLUri._url.toString()));
|
|
874
943
|
} else if (isURL(strURLUri)) {
|
|
875
|
-
return fac(new
|
|
944
|
+
return fac(new MutableURL(strURLUri.toString()));
|
|
876
945
|
}
|
|
877
946
|
throw new Error(`unknown object type: ${strURLUri}`);
|
|
878
947
|
default:
|
|
@@ -894,46 +963,38 @@ var BuildURI = class _BuildURI {
|
|
|
894
963
|
this._url.hostname = h;
|
|
895
964
|
return this;
|
|
896
965
|
}
|
|
897
|
-
password(p) {
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
}
|
|
901
|
-
port(p) {
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
}
|
|
905
|
-
username(u) {
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
}
|
|
909
|
-
search(s) {
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
}
|
|
966
|
+
// password(p: string) {
|
|
967
|
+
// this._url.password = p;
|
|
968
|
+
// return this;
|
|
969
|
+
// }
|
|
970
|
+
// port(p: string) {
|
|
971
|
+
// this._url.port = p;
|
|
972
|
+
// return this;
|
|
973
|
+
// }
|
|
974
|
+
// username(u: string) {
|
|
975
|
+
// this._url.username = u;
|
|
976
|
+
// return this;
|
|
977
|
+
// }
|
|
978
|
+
// search(s: string) {
|
|
979
|
+
// this._url.search = s;
|
|
980
|
+
// return this;
|
|
981
|
+
// }
|
|
913
982
|
protocol(p) {
|
|
914
|
-
|
|
915
|
-
p = `${p}:`;
|
|
916
|
-
}
|
|
917
|
-
const mySrc = this._url.toString();
|
|
918
|
-
const myDst = mySrc.replace(new RegExp(`^${this._url.protocol}`), `${p}`);
|
|
919
|
-
this._url = new URL(myDst);
|
|
983
|
+
this._url.protocol = p;
|
|
920
984
|
return this;
|
|
921
985
|
}
|
|
922
986
|
pathname(p) {
|
|
923
|
-
|
|
924
|
-
const mySrc = this._url.toString();
|
|
925
|
-
const myDst = mySrc.replace(new RegExp(`^${this._url.protocol}//${myp}`), `${this._url.protocol}//${p}`);
|
|
926
|
-
this._url = new URL(myDst);
|
|
927
|
-
return this;
|
|
928
|
-
}
|
|
929
|
-
hash(h) {
|
|
930
|
-
this._url.hash = h;
|
|
931
|
-
return this;
|
|
932
|
-
}
|
|
933
|
-
host(h) {
|
|
934
|
-
this._url.host = h;
|
|
987
|
+
this._url.pathname = p;
|
|
935
988
|
return this;
|
|
936
989
|
}
|
|
990
|
+
// hash(h: string) {
|
|
991
|
+
// this._url.hash = h;
|
|
992
|
+
// return this;
|
|
993
|
+
// }
|
|
994
|
+
// host(h: string) {
|
|
995
|
+
// this._url.host = h;
|
|
996
|
+
// return this;
|
|
997
|
+
// }
|
|
937
998
|
delParam(key) {
|
|
938
999
|
this._url.searchParams.delete(key);
|
|
939
1000
|
return this;
|
|
@@ -952,6 +1013,9 @@ var BuildURI = class _BuildURI {
|
|
|
952
1013
|
this._url.searchParams.sort();
|
|
953
1014
|
return this._url.toString();
|
|
954
1015
|
}
|
|
1016
|
+
toJSON() {
|
|
1017
|
+
return this.toString();
|
|
1018
|
+
}
|
|
955
1019
|
URI() {
|
|
956
1020
|
return URI.from(this._url);
|
|
957
1021
|
}
|
|
@@ -979,38 +1043,38 @@ var URI = class _URI {
|
|
|
979
1043
|
return from((url) => new _URI(url), strURLUri, defaultProtocol);
|
|
980
1044
|
}
|
|
981
1045
|
constructor(url) {
|
|
982
|
-
this._url = url;
|
|
1046
|
+
this._url = url.clone();
|
|
983
1047
|
}
|
|
984
1048
|
build() {
|
|
985
|
-
return BuildURI.from(this.
|
|
1049
|
+
return BuildURI.from(this._url);
|
|
986
1050
|
}
|
|
987
1051
|
get hostname() {
|
|
988
1052
|
return this._url.hostname;
|
|
989
1053
|
}
|
|
990
|
-
get password() {
|
|
991
|
-
|
|
992
|
-
}
|
|
993
|
-
get port() {
|
|
994
|
-
|
|
995
|
-
}
|
|
996
|
-
get username() {
|
|
997
|
-
|
|
998
|
-
}
|
|
999
|
-
get search() {
|
|
1000
|
-
|
|
1001
|
-
}
|
|
1054
|
+
// get password(): string {
|
|
1055
|
+
// return this._url.password;
|
|
1056
|
+
// }
|
|
1057
|
+
// get port(): string {
|
|
1058
|
+
// return this._url.port;
|
|
1059
|
+
// }
|
|
1060
|
+
// get username(): string {
|
|
1061
|
+
// return this._url.username;
|
|
1062
|
+
// }
|
|
1063
|
+
// get search(): string {
|
|
1064
|
+
// return this._url.search;
|
|
1065
|
+
// }
|
|
1002
1066
|
get protocol() {
|
|
1003
1067
|
return this._url.protocol;
|
|
1004
1068
|
}
|
|
1005
1069
|
get pathname() {
|
|
1006
1070
|
return this._url.toString().replace(/^.*:\/\//, "").replace(/\?.*$/, "");
|
|
1007
1071
|
}
|
|
1008
|
-
get hash() {
|
|
1009
|
-
|
|
1010
|
-
}
|
|
1011
|
-
get host() {
|
|
1012
|
-
|
|
1013
|
-
}
|
|
1072
|
+
// get hash(): string {
|
|
1073
|
+
// return this._url.hash;
|
|
1074
|
+
// }
|
|
1075
|
+
// get host(): string {
|
|
1076
|
+
// return this._url.host;
|
|
1077
|
+
// }
|
|
1014
1078
|
get getParams() {
|
|
1015
1079
|
return this._url.searchParams.entries();
|
|
1016
1080
|
}
|
|
@@ -1021,17 +1085,17 @@ var URI = class _URI {
|
|
|
1021
1085
|
return falsy2undef(this._url.searchParams.get(key));
|
|
1022
1086
|
}
|
|
1023
1087
|
clone() {
|
|
1024
|
-
return new _URI(this.
|
|
1088
|
+
return new _URI(this._url);
|
|
1025
1089
|
}
|
|
1026
1090
|
asURL() {
|
|
1027
|
-
|
|
1028
|
-
url.searchParams.sort();
|
|
1029
|
-
return url;
|
|
1091
|
+
return this._url.clone();
|
|
1030
1092
|
}
|
|
1031
1093
|
toString() {
|
|
1032
|
-
this._url.searchParams.sort();
|
|
1033
1094
|
return this._url.toString();
|
|
1034
1095
|
}
|
|
1096
|
+
toJSON() {
|
|
1097
|
+
return this.toString();
|
|
1098
|
+
}
|
|
1035
1099
|
};
|
|
1036
1100
|
|
|
1037
1101
|
// src/runtime.ts
|
|
@@ -1309,6 +1373,17 @@ var LoggerImpl = class _LoggerImpl {
|
|
|
1309
1373
|
this._levelHandler = levelSingleton;
|
|
1310
1374
|
}
|
|
1311
1375
|
}
|
|
1376
|
+
Attributes() {
|
|
1377
|
+
return Array.from(Object.entries(this._attributes)).reduce(
|
|
1378
|
+
(acc, [key, value]) => {
|
|
1379
|
+
if (value instanceof LogValue) {
|
|
1380
|
+
acc[key] = value.value();
|
|
1381
|
+
}
|
|
1382
|
+
return acc;
|
|
1383
|
+
},
|
|
1384
|
+
{}
|
|
1385
|
+
);
|
|
1386
|
+
}
|
|
1312
1387
|
SetExposeStack(enable) {
|
|
1313
1388
|
this._levelHandler.setExposeStack(enable);
|
|
1314
1389
|
return this;
|
|
@@ -1332,7 +1407,7 @@ var LoggerImpl = class _LoggerImpl {
|
|
|
1332
1407
|
return this;
|
|
1333
1408
|
}
|
|
1334
1409
|
Timestamp() {
|
|
1335
|
-
this._attributes["ts"] = logValue(this._sys.Time().Now().toISOString());
|
|
1410
|
+
this._attributes["ts"] = logValue(() => this._sys.Time().Now().toISOString());
|
|
1336
1411
|
return this;
|
|
1337
1412
|
}
|
|
1338
1413
|
Warn() {
|
|
@@ -1449,18 +1524,11 @@ var LoggerImpl = class _LoggerImpl {
|
|
|
1449
1524
|
return ret;
|
|
1450
1525
|
}
|
|
1451
1526
|
_produceError(attr, ...args) {
|
|
1452
|
-
var _a;
|
|
1453
1527
|
attr["msg"] = logValue(args.join(" "));
|
|
1454
1528
|
const msg = attr["msg"].value();
|
|
1455
1529
|
if (typeof msg === "string" && !msg.trim().length) {
|
|
1456
1530
|
delete attr["msg"];
|
|
1457
1531
|
}
|
|
1458
|
-
if (((_a = toLogValue(attr["ts"])) == null ? void 0 : _a.value()) === "ETERNITY") {
|
|
1459
|
-
this.Timestamp.call({
|
|
1460
|
-
_sys: this._sys,
|
|
1461
|
-
_attributes: attr
|
|
1462
|
-
});
|
|
1463
|
-
}
|
|
1464
1532
|
return JSON.stringify(attr, removeSelfRef());
|
|
1465
1533
|
}
|
|
1466
1534
|
Msg(...args) {
|
|
@@ -1492,6 +1560,9 @@ var WithLoggerBuilder = class {
|
|
|
1492
1560
|
Object.assign(this._li._withAttributes, this._li._attributes);
|
|
1493
1561
|
return this._li;
|
|
1494
1562
|
}
|
|
1563
|
+
Attributes() {
|
|
1564
|
+
return __spreadValues({}, this._li._attributes);
|
|
1565
|
+
}
|
|
1495
1566
|
SetExposeStack(enable) {
|
|
1496
1567
|
this._li._levelHandler.setExposeStack(enable);
|
|
1497
1568
|
return this;
|
|
@@ -1573,7 +1644,7 @@ var WithLoggerBuilder = class {
|
|
|
1573
1644
|
return this;
|
|
1574
1645
|
}
|
|
1575
1646
|
Timestamp() {
|
|
1576
|
-
this._li.
|
|
1647
|
+
this._li.Timestamp();
|
|
1577
1648
|
return this;
|
|
1578
1649
|
}
|
|
1579
1650
|
Any(key, value) {
|
|
@@ -2119,6 +2190,7 @@ function uint8array2stream(str) {
|
|
|
2119
2190
|
LogWriterStream,
|
|
2120
2191
|
LoggerImpl,
|
|
2121
2192
|
MockLogger,
|
|
2193
|
+
MutableURL,
|
|
2122
2194
|
None,
|
|
2123
2195
|
Option,
|
|
2124
2196
|
RandomMode,
|