@adviser/cement 0.2.18 → 0.2.20
Sign up to get free protection for your applications and to get access to all the features.
- 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,
|