@adviser/cement 0.3.19 → 0.4.0

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.
Files changed (173) hide show
  1. package/base-sys-abstraction-DgTynXGV.d.cts +95 -0
  2. package/base-sys-abstraction-h0dB3nZ5.d.ts +95 -0
  3. package/cf/index.cjs +232 -283
  4. package/cf/index.cjs.map +1 -1
  5. package/cf/index.d.cts +10 -8
  6. package/cf/index.d.ts +10 -8
  7. package/cf/index.js +6 -41
  8. package/cf/index.js.map +1 -1
  9. package/{chunk-GDTTUMIL.js → chunk-6F3ACVHD.js} +62 -22
  10. package/chunk-6F3ACVHD.js.map +1 -0
  11. package/{chunk-PHS255C5.js → chunk-FOALXQST.js} +1 -68
  12. package/chunk-FOALXQST.js.map +1 -0
  13. package/{chunk-23MCJYE6.js → chunk-X3IV2RYT.js} +422 -602
  14. package/chunk-X3IV2RYT.js.map +1 -0
  15. package/chunk-YKGCONBX.js +677 -0
  16. package/chunk-YKGCONBX.js.map +1 -0
  17. package/{chunk-55W4AK2Z.js → chunk-YVACAIUX.js} +5 -5
  18. package/deno/index.cjs +257 -241
  19. package/deno/index.cjs.map +1 -1
  20. package/deno/index.d.cts +3 -5
  21. package/deno/index.d.ts +3 -5
  22. package/deno/index.js +14 -16
  23. package/deno/index.js.map +1 -1
  24. package/{index-D1j1fPYg.d.ts → index-N0bkrgSt.d.ts} +15 -3
  25. package/{index-Cp1NspHH.d.cts → index-TtYD7HhB.d.cts} +15 -3
  26. package/index.cjs +1851 -1709
  27. package/index.cjs.map +1 -1
  28. package/index.d.cts +9 -8
  29. package/index.d.ts +9 -8
  30. package/index.js +21 -16
  31. package/index.js.map +1 -1
  32. package/metafile-cjs.json +1 -1
  33. package/metafile-esm.json +1 -1
  34. package/node/index.cjs +499 -474
  35. package/node/index.cjs.map +1 -1
  36. package/node/index.d.cts +3 -5
  37. package/node/index.d.ts +3 -5
  38. package/node/index.js +14 -16
  39. package/node/index.js.map +1 -1
  40. package/package.json +6 -6
  41. package/src/base-sys-abstraction.ts +106 -116
  42. package/src/cf/cf-basic-sys-abstraction.ts +79 -0
  43. package/src/cf/index.ts +1 -1
  44. package/src/cf-test-main.ts +10 -1
  45. package/src/deno/deno-basic-sys-abstraction.ts +39 -0
  46. package/src/deno/deno-file-service.ts +1 -1
  47. package/src/deno/deno-sys-abstraction.ts +19 -22
  48. package/src/jsr.json +1 -1
  49. package/src/log-writer-impl.ts +6 -0
  50. package/src/logger-impl.ts +17 -19
  51. package/src/node/node-basic-sys-abstraction.ts +59 -0
  52. package/src/node/node-sys-abstraction.ts +19 -22
  53. package/src/sys-abstraction.ts +12 -6
  54. package/src/test/mock-logger.ts +2 -2
  55. package/src/txt-en-decoder.ts +3 -3
  56. package/src/uri.ts +71 -0
  57. package/src/web/index.ts +1 -1
  58. package/src/web/web-basic-sys-abstraction.ts +105 -0
  59. package/{sys-abstraction-B0x6IE7r.d.ts → sys-abstraction-CeAxxg9H.d.ts} +11 -7
  60. package/{sys-abstraction-BTs3Vzy4.d.cts → sys-abstraction-DDAwGTnk.d.cts} +11 -7
  61. package/test/index.cjs +1534 -1419
  62. package/test/index.cjs.map +1 -1
  63. package/test/index.d.cts +2 -2
  64. package/test/index.d.ts +2 -2
  65. package/test/index.js +4 -5
  66. package/ts/smoke/smoke.js +7 -8
  67. package/ts/smoke/smoke.js.map +1 -1
  68. package/ts/src/base-basic-sys-abstraction.test.d.ts +2 -0
  69. package/ts/src/base-basic-sys-abstraction.test.d.ts.map +1 -0
  70. package/ts/src/{base-sys-abstraction.test.js → base-basic-sys-abstraction.test.js} +9 -9
  71. package/ts/src/base-basic-sys-abstraction.test.js.map +1 -0
  72. package/ts/src/base-sys-abstraction.d.ts +33 -21
  73. package/ts/src/base-sys-abstraction.d.ts.map +1 -1
  74. package/ts/src/base-sys-abstraction.js +54 -67
  75. package/ts/src/base-sys-abstraction.js.map +1 -1
  76. package/ts/src/cf/cf-basic-sys-abstraction.d.ts +14 -0
  77. package/ts/src/cf/cf-basic-sys-abstraction.d.ts.map +1 -0
  78. package/ts/src/cf/cf-basic-sys-abstraction.js +67 -0
  79. package/ts/src/cf/cf-basic-sys-abstraction.js.map +1 -0
  80. package/ts/src/cf/index.d.ts +1 -1
  81. package/ts/src/cf/index.d.ts.map +1 -1
  82. package/ts/src/cf/index.js +1 -1
  83. package/ts/src/cf/index.js.map +1 -1
  84. package/ts/src/cf-test-main.d.ts.map +1 -1
  85. package/ts/src/cf-test-main.js +7 -1
  86. package/ts/src/cf-test-main.js.map +1 -1
  87. package/ts/src/deno/deno-basic-sys-abstraction.d.ts +14 -0
  88. package/ts/src/deno/deno-basic-sys-abstraction.d.ts.map +1 -0
  89. package/ts/src/deno/deno-basic-sys-abstraction.js +35 -0
  90. package/ts/src/deno/deno-basic-sys-abstraction.js.map +1 -0
  91. package/ts/src/deno/deno-file-service.d.ts +1 -1
  92. package/ts/src/deno/deno-file-service.d.ts.map +1 -1
  93. package/ts/src/deno/deno-sys-abstraction.d.ts +3 -6
  94. package/ts/src/deno/deno-sys-abstraction.d.ts.map +1 -1
  95. package/ts/src/deno/deno-sys-abstraction.js +13 -17
  96. package/ts/src/deno/deno-sys-abstraction.js.map +1 -1
  97. package/ts/src/log-writer-impl.d.ts +1 -0
  98. package/ts/src/log-writer-impl.d.ts.map +1 -1
  99. package/ts/src/log-writer-impl.js +1 -0
  100. package/ts/src/log-writer-impl.js.map +1 -1
  101. package/ts/src/logger-impl.d.ts +3 -3
  102. package/ts/src/logger-impl.d.ts.map +1 -1
  103. package/ts/src/logger-impl.js +3 -18
  104. package/ts/src/logger-impl.js.map +1 -1
  105. package/ts/src/logger.test.js +3 -4
  106. package/ts/src/logger.test.js.map +1 -1
  107. package/ts/src/node/node-basic-sys-abstraction.d.ts +25 -0
  108. package/ts/src/node/node-basic-sys-abstraction.d.ts.map +1 -0
  109. package/ts/src/node/node-basic-sys-abstraction.js +44 -0
  110. package/ts/src/node/node-basic-sys-abstraction.js.map +1 -0
  111. package/ts/src/node/node-sys-abstraction.d.ts +3 -6
  112. package/ts/src/node/node-sys-abstraction.d.ts.map +1 -1
  113. package/ts/src/node/node-sys-abstraction.js +13 -17
  114. package/ts/src/node/node-sys-abstraction.js.map +1 -1
  115. package/ts/src/node/node-sys-abstraction.test.js +1 -1
  116. package/ts/src/node/node-sys-abstraction.test.js.map +1 -1
  117. package/ts/src/resolve-once.test.js +1 -1
  118. package/ts/src/sys-abstraction.d.ts +10 -6
  119. package/ts/src/sys-abstraction.d.ts.map +1 -1
  120. package/ts/src/test/mock-logger.d.ts +2 -2
  121. package/ts/src/test/mock-logger.d.ts.map +1 -1
  122. package/ts/src/test/mock-logger.js.map +1 -1
  123. package/ts/src/tracer.test.js +5 -8
  124. package/ts/src/tracer.test.js.map +1 -1
  125. package/ts/src/txt-en-decoder.d.ts.map +1 -1
  126. package/ts/src/txt-en-decoder.js +3 -3
  127. package/ts/src/txt-en-decoder.js.map +1 -1
  128. package/ts/src/uri.d.ts +12 -0
  129. package/ts/src/uri.d.ts.map +1 -1
  130. package/ts/src/uri.js +55 -0
  131. package/ts/src/uri.js.map +1 -1
  132. package/ts/src/uri.test.js +48 -0
  133. package/ts/src/uri.test.js.map +1 -1
  134. package/ts/src/web/index.d.ts +1 -1
  135. package/ts/src/web/index.d.ts.map +1 -1
  136. package/ts/src/web/index.js +1 -1
  137. package/ts/src/web/index.js.map +1 -1
  138. package/ts/src/web/web-basic-sys-abstraction.d.ts +4 -0
  139. package/ts/src/web/web-basic-sys-abstraction.d.ts.map +1 -0
  140. package/ts/src/web/web-basic-sys-abstraction.js +45 -0
  141. package/ts/src/web/web-basic-sys-abstraction.js.map +1 -0
  142. package/ts/vitest.workspace.d.ts +1 -1
  143. package/utils/index.cjs +132 -3
  144. package/utils/index.cjs.map +1 -1
  145. package/utils/index.js +5 -5
  146. package/web/index.cjs +277 -281
  147. package/web/index.cjs.map +1 -1
  148. package/web/index.d.cts +4 -17
  149. package/web/index.d.ts +4 -17
  150. package/web/index.js +4 -7
  151. package/base-sys-abstraction-BnBZ6zd0.d.ts +0 -84
  152. package/base-sys-abstraction-DAZ8tx5F.d.cts +0 -84
  153. package/chunk-23MCJYE6.js.map +0 -1
  154. package/chunk-GDTTUMIL.js.map +0 -1
  155. package/chunk-H6MLKWIZ.js +0 -88
  156. package/chunk-H6MLKWIZ.js.map +0 -1
  157. package/chunk-LXTKPZ6M.js +0 -255
  158. package/chunk-LXTKPZ6M.js.map +0 -1
  159. package/chunk-PHS255C5.js.map +0 -1
  160. package/src/cf/cf-sys-abstraction.ts +0 -34
  161. package/src/web/web-sys-abstraction.ts +0 -80
  162. package/ts/src/base-sys-abstraction.test.d.ts +0 -2
  163. package/ts/src/base-sys-abstraction.test.d.ts.map +0 -1
  164. package/ts/src/base-sys-abstraction.test.js.map +0 -1
  165. package/ts/src/cf/cf-sys-abstraction.d.ts +0 -11
  166. package/ts/src/cf/cf-sys-abstraction.d.ts.map +0 -1
  167. package/ts/src/cf/cf-sys-abstraction.js +0 -30
  168. package/ts/src/cf/cf-sys-abstraction.js.map +0 -1
  169. package/ts/src/web/web-sys-abstraction.d.ts +0 -18
  170. package/ts/src/web/web-sys-abstraction.d.ts.map +0 -1
  171. package/ts/src/web/web-sys-abstraction.js +0 -64
  172. package/ts/src/web/web-sys-abstraction.js.map +0 -1
  173. /package/{chunk-55W4AK2Z.js.map → chunk-YVACAIUX.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/result.ts","../../src/types.ts","../../src/utils/get-params-result.ts","../../src/future.ts","../../src/lru-map-set.ts","../../src/resolve-once.ts","../../src/utils/coerce-uint8.ts","../../src/txt-en-decoder.ts","../../src/utils/console-write-stream.ts"],"sourcesContent":["export abstract class Result<T, E = Error> {\n static Ok<T = void>(t: T): Result<T, Error> {\n return new ResultOK(t);\n }\n static Err<T, E extends Error = Error>(t: E | string | Result<unknown, E>): Result<T, E> {\n if (typeof t === \"string\") {\n return new ResultError(new Error(t) as E);\n }\n if (Result.Is(t)) {\n if (t.is_ok()) {\n return new ResultError(new Error(\"Result Error is Ok\") as E);\n }\n return t as Result<T, E>;\n }\n return new ResultError(t);\n }\n static Is<T>(t: unknown): t is Result<T> {\n if (!t) {\n return false;\n }\n if (t instanceof Result) {\n return true;\n }\n const rt = t as Result<T>;\n if ([typeof rt.is_ok, typeof rt.is_err, typeof rt.unwrap, typeof rt.unwrap_err].every((x) => x === \"function\")) {\n return true;\n }\n return false;\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// type WithoutPromise<T> = T extends Promise<infer U> ? U : T;\ntype WithResult<T> = T extends Promise<infer U> ? Promise<Result<U>> : Result<T>;\n\nexport function exception2Result<FN extends () => Promise<T> | T, T>(fn: FN): WithResult<ReturnType<FN>> {\n try {\n const res = fn();\n if (res instanceof Promise) {\n return res.then((value) => Result.Ok(value)).catch((e) => Result.Err(e)) as WithResult<ReturnType<FN>>;\n }\n return Result.Ok(res) as WithResult<ReturnType<FN>>;\n } catch (e) {\n return Result.Err(e as Error) as WithResult<ReturnType<FN>>;\n }\n}\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","interface IType {\n readonly type: string;\n}\nclass _Required implements IType {\n readonly type = \"REQUIRED\";\n}\n\nclass _Optional implements IType {\n readonly type = \"OPTIONAL\";\n}\n\nexport const param: {\n REQUIRED: _Required;\n OPTIONAL: _Optional;\n} = {\n REQUIRED: new _Required(),\n OPTIONAL: new _Optional(),\n};\nexport type param = (typeof param)[keyof typeof param];\n","import { Result } from \"../result.js\";\nimport { param } from \"../types.js\";\n\nexport type MsgFn = (...keys: string[]) => string;\nexport type KeysParam = (string | MsgFn | Record<string, param | number | string | boolean | undefined | null>)[];\n\nexport function getParamsResult(\n keys: KeysParam,\n getParam: { getParam: (key: string) => string | undefined },\n): Result<Record<string, string>> {\n const keyDef = keys.flat().reduce(\n (acc, i) => {\n if (typeof i === \"string\") {\n acc.push({ key: i, def: undefined, isOptional: false });\n } else if (typeof i === \"object\") {\n acc.push(\n ...Object.keys(i).map((k) => ({\n key: k,\n def: typeof i[k] === \"string\" ? i[k] : undefined,\n isOptional: i[k] === param.OPTIONAL,\n })),\n );\n }\n return acc;\n },\n [] as { key: string; def?: string; isOptional: boolean }[],\n );\n //.filter((k) => typeof k === \"string\");\n const msgFn =\n keys.find((k) => typeof k === \"function\") ||\n ((...keys: string[]): string => {\n const msg = keys.join(\",\");\n return `missing parameters: ${msg}`;\n });\n const errors: string[] = [];\n const result: Record<string, string> = {};\n for (const kd of keyDef) {\n const val = getParam.getParam(kd.key);\n if (val === undefined) {\n if (typeof kd.def === \"string\") {\n result[kd.key] = kd.def;\n } else {\n if (!kd.isOptional) {\n errors.push(kd.key);\n }\n }\n } else {\n result[kd.key] = val;\n }\n }\n if (errors.length) {\n return Result.Err(msgFn(...errors));\n }\n return Result.Ok(result);\n}\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): void {\n this.#resolveFn(value);\n }\n reject(reason: unknown): void {\n this.#rejectFn(reason);\n }\n}\n","export interface LRUParam {\n readonly maxEntries: number;\n readonly maxAge: number; // not implemented\n}\n\nexport class LRUSet<T> {\n private readonly _lruMap: LRUMap<T, T>;\n\n constructor(param: Partial<LRUParam> = {}) {\n this._lruMap = new LRUMap<T, T>(param);\n }\n\n setParam(param: Partial<LRUParam> = {}): void {\n this._lruMap.setParam(param);\n }\n\n get size(): number {\n return this._lruMap.size;\n }\n\n has(key: T): boolean {\n return this._lruMap.has(key);\n }\n\n add(key: T): void {\n this._lruMap.set(key, key);\n }\n\n delete(key: T): void {\n this._lruMap.delete(key);\n }\n\n clear(): void {\n this._lruMap.clear();\n }\n\n forEach(callbackfn: (value: T, key: T) => void): void {\n this._lruMap.forEach((value) => callbackfn(value, value));\n }\n\n entries(): IterableIterator<[T, T]> {\n return this._lruMap.entries();\n }\n}\n\nexport class LRUMap<T, K> {\n private _map: Map<T, K> = new Map<T, K>();\n private param: LRUParam;\n\n constructor(c: Partial<LRUParam> = {}) {\n this.param = {\n maxEntries: c.maxEntries || 100,\n maxAge: c.maxAge || 0,\n };\n }\n\n private touch(key: T): K {\n if (!this._map.has(key)) {\n throw new Error(`key not found in cache: ${key as unknown as string}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const value = this._map.get(key)!;\n this._map.delete(key);\n this._map.set(key, value);\n return value;\n }\n\n setParam(param: Partial<LRUParam> = {}): void {\n if (typeof param.maxEntries === \"number\") {\n (this.param as { maxEntries: number }).maxEntries = param.maxEntries;\n if (param.maxEntries > 0 && this._map.size > param.maxEntries) {\n const toDelete: T[] = [];\n let cacheSize = this._map.size;\n for (const key of this._map.keys()) {\n if (cacheSize > param.maxEntries) {\n toDelete.push(key);\n cacheSize--;\n } else {\n break;\n }\n }\n for (const key of toDelete) {\n this._map.delete(key);\n }\n }\n }\n }\n\n has(key: T): boolean {\n return this._map.has(key);\n }\n\n get size(): number {\n return this._map.size;\n }\n\n async getSet(key: T, createFN: (key: T) => Promise<K>): Promise<K | undefined> {\n const val = this.get(key);\n if (val) {\n return val;\n } else {\n const val = await createFN(key);\n this.set(key, val as K);\n return val;\n }\n }\n\n get(key: T): K | undefined {\n if (this._map.has(key)) {\n return this.touch(key);\n }\n return this._map.get(key);\n }\n\n set(key: T, value: K): void {\n this._map.delete(key);\n if (this.param.maxEntries > 0 && this._map.size >= this.param.maxEntries) {\n // delete the least recently accessed\n // const key = Array.from(this.cache.keys())[0];\n // this.cache.delete(key) or\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._map.delete(this._map.keys().next().value!);\n this._map.set(key, value);\n } else {\n this._map.set(key, value);\n }\n }\n\n delete(key: T): void {\n this._map.delete(key);\n }\n\n clear(): void {\n this._map.clear();\n }\n\n forEach(callbackfn: (value: K, key: T, map: Map<T, K>) => void): void {\n this._map.forEach(callbackfn);\n }\n\n entries(): IterableIterator<[T, K]> {\n return this._map.entries();\n }\n // *entries(): IterableIterator<[T, K]> {\n // for (const x of this._cache.entries()) {\n // yield x;\n // }\n // }\n\n // getLeastRecent(): K {\n // return Array.from(this.cache)[0];\n // }\n\n // getMostRecent(): K {\n // return Array.from(this.cache)[this.cache.size - 1];\n // }\n}\n","import { Future } from \"./future.js\";\nimport { LRUMap, LRUParam } from \"./lru-map-set.js\";\nimport { Result } from \"./result.js\";\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(): void {\n /* noop */\n }\n\n readonly _flushWaiting: Future<void>[] = [];\n flush(): Promise<void> {\n if (this._seqFutures.length > 0) {\n const waitForFlush = new Future<void>();\n this._flushWaiting?.push(waitForFlush);\n return waitForFlush.asPromise();\n }\n return Promise.resolve();\n }\n _step(item?: ResolveSeqItem<T, C>): Promise<void> {\n if (!item) {\n // done\n this._flushWaiting.forEach((f) => f.resolve());\n this._flushWaiting?.splice(0, this._flushWaiting.length);\n return Promise.resolve();\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 void this._step(this._seqFutures[0]);\n });\n return Promise.resolve();\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 void 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 _inProgress?: Future<T>;\n\n readonly ctx: CTX;\n\n constructor(ctx?: CTX) {\n this.ctx = ctx as CTX;\n }\n\n get ready(): boolean {\n return this._onceDone;\n }\n\n reset(): void {\n this._onceDone = false;\n this._onceOk = false;\n this._onceValue = undefined;\n this._onceError = undefined;\n if (this._inProgress) {\n const idx = this._onceFutures.findIndex((f) => f === this._inProgress);\n if (idx >= 0) {\n // leave the current in progress future\n this._onceFutures.push(...this._onceFutures.splice(2).slice(1));\n }\n } else {\n this._onceFutures.length = 0;\n }\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): void => {\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): void => {\n this._onceError = e;\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 this._inProgress = future;\n // let inCriticalSection = false;\n try {\n const ret = fn(this.ctx);\n if (typeof (ret as Promise<T>).then === \"function\") {\n this._isPromise = true;\n // inCriticalSection = true;\n (ret as Promise<T>)\n .then(okFn)\n .catch(catchFn)\n .finally(() => {\n this._inProgress = undefined;\n });\n } else {\n okFn(ret as unknown as T);\n }\n } catch (e) {\n catchFn(e as Error);\n }\n if (!this._isPromise) {\n this._inProgress = undefined;\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 interface KeyedParam {\n readonly lru: Partial<LRUParam>;\n}\n\nexport class Keyed<T extends { reset: () => void }, K = string> {\n protected readonly _map: LRUMap<K, T>;\n\n readonly factory: (key: K) => T;\n constructor(factory: (key: K) => T, params: Partial<KeyedParam>) {\n this.factory = factory;\n this._map = new LRUMap<K, T>(params?.lru ?? { maxEntries: -1 });\n }\n\n setParam(params: KeyedParam): void {\n this._map.setParam(params.lru);\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 unget(key: K): void {\n const keyed = this._map.get(key);\n keyed?.reset();\n this._map.delete(key);\n }\n\n reset(): void {\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(kp: Partial<KeyedParam> = {}) {\n super((key) => new ResolveOnce<T, K>(key), kp);\n }\n\n /**\n *\n * @returns The values of the resolved keys\n */\n values(): { key: K; value: Result<T> }[] {\n return (\n Array.from(this._map.entries())\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .filter(([_, v]) => v._onceDone)\n .map(([k, v]) => {\n if (v._onceDone) {\n if (v._onceError) {\n return {\n key: k,\n value: Result.Err(v._onceError),\n };\n }\n return {\n key: k,\n value: Result.Ok(v._onceValue as T),\n };\n }\n throw new Error(\"KeyedResolvOnce.values impossible\");\n })\n );\n }\n}\n\nexport class KeyedResolvSeq<T, K = string> extends Keyed<ResolveSeq<T, K>, K> {\n constructor(kp: Partial<KeyedParam> = {}) {\n super((key) => new ResolveSeq<T, K>(key), kp);\n }\n}\n","import { Result } from \"../result.js\";\n\n// Tested in txt-en-decoder.test.ts\n\ninterface GlobalBuffer {\n Buffer?: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isBuffer: (obj: any) => obj is {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n };\n };\n}\nconst globalBuffer = globalThis as GlobalBuffer;\n\nexport type ToUInt8Plain = Uint8Array | ArrayBuffer | ArrayBufferView;\nexport type ToUInt8Async = ToUInt8Plain | Blob;\nexport type ToUInt8 = ToUInt8Plain | Result<ToUInt8Plain>;\nexport type AsyncToUInt8 = ToUInt8Async | Result<ToUInt8Async> | Promise<ToUInt8Async> | Promise<Result<ToUInt8Async>>;\n\nexport function coerceIntoUint8(raw: ToUInt8): Result<Uint8Array> {\n if (raw instanceof ArrayBuffer) {\n return Result.Ok(new Uint8Array(raw));\n }\n if (ArrayBuffer.isView(raw)) {\n return Result.Ok(new Uint8Array(raw.buffer, raw.byteOffset, raw.byteLength));\n }\n if (raw instanceof Blob) {\n return Result.Err(\"Blob not supported\");\n }\n if (globalBuffer.Buffer && globalBuffer.Buffer.isBuffer(raw)) {\n return Result.Ok(new Uint8Array(raw.buffer, raw.byteOffset, raw.byteLength));\n }\n if (raw instanceof Uint8Array) {\n return Result.Ok(raw);\n }\n if (Result.Is(raw)) {\n if (raw.isErr()) {\n return Result.Err(raw);\n }\n return coerceIntoUint8(raw.unwrap());\n }\n return Result.Err(\"Not a Uint8Array\");\n}\n\nexport async function asyncCoerceIntoUint8(raw: AsyncToUInt8): Promise<Result<Uint8Array>> {\n let resolved = await raw;\n if (resolved instanceof Blob) {\n resolved = await resolved.arrayBuffer();\n }\n return coerceIntoUint8(resolved as ToUInt8);\n}\n","import { ResolveOnce } from \"./resolve-once.js\";\nimport { Result } from \"./result.js\";\nimport { coerceIntoUint8, ToUInt8 } from \"./utils/coerce-uint8.js\";\n\nexport type ToEnDecoder = ToUInt8 | string | Result<string>;\nexport type AsyncToEnDecoder = ToEnDecoder | Blob | Promise<ToEnDecoder | Blob>;\n\nexport interface TxtEnDecoder {\n encode(input: string): Uint8Array;\n decode(input: ToEnDecoder): string;\n asyncDecode(input: AsyncToEnDecoder): Promise<string>;\n}\n\nclass TxtOps implements TxtEnDecoder {\n readonly encoder = new TextEncoder();\n readonly decoder = new TextDecoder();\n\n encode(str: string): Uint8Array {\n return this.encoder.encode(str);\n }\n decode(data: ToEnDecoder): string {\n if (Result.Is(data)) {\n if (data.isErr()) {\n throw data.Err();\n }\n // only for string let do coerceInto the work\n const unwrapped = data.unwrap();\n if (typeof unwrapped === \"string\") {\n return this.decode(unwrapped);\n }\n }\n if (typeof data === \"string\") {\n return data;\n }\n return this.decoder.decode(coerceIntoUint8(data as ToUInt8).Ok());\n }\n\n async asyncDecode(data: AsyncToEnDecoder): Promise<string> {\n let resolved = await data;\n if (resolved instanceof Blob) {\n resolved = await resolved.arrayBuffer();\n }\n return this.decode(resolved);\n }\n}\n\nconst txtEnDecoder = new ResolveOnce<TxtEnDecoder>();\nexport function TxtEnDecoderSingleton(): TxtEnDecoder {\n return txtEnDecoder.once(() => new TxtOps());\n}\n","export class ConsoleWriterStreamDefaultWriter implements WritableStreamDefaultWriter<Uint8Array> {\n readonly desiredSize: number | null = null;\n readonly decoder: TextDecoder = new TextDecoder();\n\n closed: Promise<undefined>;\n ready: Promise<undefined>;\n readonly _stream: ConsoleWriterStream;\n\n constructor(private stream: ConsoleWriterStream) {\n this._stream = stream;\n this.ready = Promise.resolve(undefined);\n this.closed = Promise.resolve(undefined);\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 async close(): Promise<void> {\n // noop\n }\n releaseLock(): void {\n this._stream.locked = false;\n this.ready = Promise.resolve(undefined);\n this.closed = Promise.resolve(undefined);\n }\n write(chunk?: Uint8Array): Promise<void> {\n let strObj: string | { level: string } = this.decoder.decode(chunk).trimEnd();\n let output = \"log\";\n try {\n strObj = JSON.parse(strObj) as { level: string };\n output = strObj.level;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n /* noop */\n }\n switch (output) {\n case \"error\":\n // eslint-disable-next-line no-console\n console.error(strObj);\n break;\n case \"warn\":\n // eslint-disable-next-line no-console\n console.warn(strObj);\n break;\n default:\n // eslint-disable-next-line no-console\n console.log(strObj);\n }\n return Promise.resolve();\n }\n}\n\nexport class ConsoleWriterStream implements WritableStream<Uint8Array> {\n locked = false;\n _writer?: WritableStreamDefaultWriter<Uint8Array>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\n abort(reason?: any): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n close(): Promise<void> {\n return Promise.resolve();\n }\n getWriter(): WritableStreamDefaultWriter<Uint8Array> {\n if (this.locked) {\n throw new Error(\"Stream is locked\");\n }\n this.locked = true;\n if (!this._writer) {\n this._writer = new ConsoleWriterStreamDefaultWriter(this);\n }\n return this._writer;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAO,IAAe,SAAf,MAAe,QAAqB;AAAA,EACzC,OAAO,GAAa,GAAwB;AAC1C,WAAO,IAAI,SAAS,CAAC;AAAA,EACvB;AAAA,EACA,OAAO,IAAgC,GAAkD;AACvF,QAAI,OAAO,MAAM,UAAU;AACzB,aAAO,IAAI,YAAY,IAAI,MAAM,CAAC,CAAM;AAAA,IAC1C;AACA,QAAI,QAAO,GAAG,CAAC,GAAG;AAChB,UAAI,EAAE,MAAM,GAAG;AACb,eAAO,IAAI,YAAY,IAAI,MAAM,oBAAoB,CAAM;AAAA,MAC7D;AACA,aAAO;AAAA,IACT;AACA,WAAO,IAAI,YAAY,CAAC;AAAA,EAC1B;AAAA,EACA,OAAO,GAAM,GAA4B;AACvC,QAAI,CAAC,GAAG;AACN,aAAO;AAAA,IACT;AACA,QAAI,aAAa,SAAQ;AACvB,aAAO;AAAA,IACT;AACA,UAAM,KAAK;AACX,QAAI,CAAC,OAAO,GAAG,OAAO,OAAO,GAAG,QAAQ,OAAO,GAAG,QAAQ,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,MAAM,MAAM,UAAU,GAAG;AAC9G,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAgB;AACd,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EACA,QAAiB;AACf,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,KAAQ;AACN,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,MAAS;AACP,WAAO,KAAK,WAAW;AAAA,EACzB;AAMF;AAEO,IAAM,WAAN,cAA0B,OAAiB;AAAA,EAEhD,YAAY,GAAM;AAChB,UAAM;AACN,SAAK,KAAK;AAAA,EACZ;AAAA,EACA,QAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,SAAkB;AAChB,WAAO;AAAA,EACT;AAAA,EACA,aAAoB;AAClB,UAAM,IAAI,MAAM,cAAc;AAAA,EAChC;AAAA,EACA,SAAY;AACV,WAAO,KAAK;AAAA,EACd;AACF;AAEO,IAAM,cAAN,cAA2C,OAAiB;AAAA,EAEjE,YAAY,GAAM;AAChB,UAAM;AACN,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,QAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,SAAkB;AAChB,WAAO;AAAA,EACT;AAAA,EACA,SAAgB;AACd,UAAM,IAAI,MAAM,kBAAkB,KAAK,MAAM,EAAE;AAAA,EACjD;AAAA,EACA,aAAgB;AACd,WAAO,KAAK;AAAA,EACd;AACF;AAOO,SAAS,iBAAqD,IAAoC;AACvG,MAAI;AACF,UAAM,MAAM,GAAG;AACf,QAAI,eAAe,SAAS;AAC1B,aAAO,IAAI,KAAK,CAAC,UAAU,OAAO,GAAG,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC;AAAA,IACzE;AACA,WAAO,OAAO,GAAG,GAAG;AAAA,EACtB,SAAS,GAAG;AACV,WAAO,OAAO,IAAI,CAAU;AAAA,EAC9B;AACF;;;ACtGA,IAAM,YAAN,MAAiC;AAAA,EAAjC;AACE,SAAS,OAAO;AAAA;AAClB;AAEA,IAAM,YAAN,MAAiC;AAAA,EAAjC;AACE,SAAS,OAAO;AAAA;AAClB;AAEO,IAAM,QAGT;AAAA,EACF,UAAU,IAAI,UAAU;AAAA,EACxB,UAAU,IAAI,UAAU;AAC1B;;;ACXO,SAAS,gBACd,MACA,UACgC;AAChC,QAAM,SAAS,KAAK,KAAK,EAAE;AAAA,IACzB,CAAC,KAAK,MAAM;AACV,UAAI,OAAO,MAAM,UAAU;AACzB,YAAI,KAAK,EAAE,KAAK,GAAG,KAAK,QAAW,YAAY,MAAM,CAAC;AAAA,MACxD,WAAW,OAAO,MAAM,UAAU;AAChC,YAAI;AAAA,UACF,GAAG,OAAO,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO;AAAA,YAC5B,KAAK;AAAA,YACL,KAAK,OAAO,EAAE,CAAC,MAAM,WAAW,EAAE,CAAC,IAAI;AAAA,YACvC,YAAY,EAAE,CAAC,MAAM,MAAM;AAAA,UAC7B,EAAE;AAAA,QACJ;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,QACJ,KAAK,KAAK,CAAC,MAAM,OAAO,MAAM,UAAU,MACvC,IAAIA,UAA2B;AAC9B,UAAM,MAAMA,MAAK,KAAK,GAAG;AACzB,WAAO,uBAAuB,GAAG;AAAA,EACnC;AACF,QAAM,SAAmB,CAAC;AAC1B,QAAM,SAAiC,CAAC;AACxC,aAAW,MAAM,QAAQ;AACvB,UAAM,MAAM,SAAS,SAAS,GAAG,GAAG;AACpC,QAAI,QAAQ,QAAW;AACrB,UAAI,OAAO,GAAG,QAAQ,UAAU;AAC9B,eAAO,GAAG,GAAG,IAAI,GAAG;AAAA,MACtB,OAAO;AACL,YAAI,CAAC,GAAG,YAAY;AAClB,iBAAO,KAAK,GAAG,GAAG;AAAA,QACpB;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,GAAG,GAAG,IAAI;AAAA,IACnB;AAAA,EACF;AACA,MAAI,OAAO,QAAQ;AACjB,WAAO,OAAO,IAAI,MAAM,GAAG,MAAM,CAAC;AAAA,EACpC;AACA,SAAO,OAAO,GAAG,MAAM;AACzB;;;ACtDA;AAAO,IAAM,SAAN,MAAgB;AAAA,EASrB,cAAc;AARd,uBAAS;AACT,mCAAiC,MAAM;AACrC,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AACA,kCAAuC,MAAM;AAC3C,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AAGE,uBAAK,UAAW,IAAI,QAAW,CAAC,SAAS,WAAW;AAClD,yBAAK,YAAa;AAClB,yBAAK,WAAY;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAwB;AAC5B,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,QAAQ,OAAgB;AACtB,uBAAK,YAAL,WAAgB;AAAA,EAClB;AAAA,EACA,OAAO,QAAuB;AAC5B,uBAAK,WAAL,WAAe;AAAA,EACjB;AACF;AAzBW;AACT;AAGA;;;ACAK,IAAM,SAAN,MAAgB;AAAA,EAGrB,YAAYC,SAA2B,CAAC,GAAG;AACzC,SAAK,UAAU,IAAI,OAAaA,MAAK;AAAA,EACvC;AAAA,EAEA,SAASA,SAA2B,CAAC,GAAS;AAC5C,SAAK,QAAQ,SAASA,MAAK;AAAA,EAC7B;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,KAAiB;AACnB,WAAO,KAAK,QAAQ,IAAI,GAAG;AAAA,EAC7B;AAAA,EAEA,IAAI,KAAc;AAChB,SAAK,QAAQ,IAAI,KAAK,GAAG;AAAA,EAC3B;AAAA,EAEA,OAAO,KAAc;AACnB,SAAK,QAAQ,OAAO,GAAG;AAAA,EACzB;AAAA,EAEA,QAAc;AACZ,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA,EAEA,QAAQ,YAA8C;AACpD,SAAK,QAAQ,QAAQ,CAAC,UAAU,WAAW,OAAO,KAAK,CAAC;AAAA,EAC1D;AAAA,EAEA,UAAoC;AAClC,WAAO,KAAK,QAAQ,QAAQ;AAAA,EAC9B;AACF;AAEO,IAAM,SAAN,MAAmB;AAAA,EAIxB,YAAY,IAAuB,CAAC,GAAG;AAHvC,SAAQ,OAAkB,oBAAI,IAAU;AAItC,SAAK,QAAQ;AAAA,MACX,YAAY,EAAE,cAAc;AAAA,MAC5B,QAAQ,EAAE,UAAU;AAAA,IACtB;AAAA,EACF;AAAA,EAEQ,MAAM,KAAW;AACvB,QAAI,CAAC,KAAK,KAAK,IAAI,GAAG,GAAG;AACvB,YAAM,IAAI,MAAM,2BAA2B,GAAwB,EAAE;AAAA,IACvE;AAEA,UAAM,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC/B,SAAK,KAAK,OAAO,GAAG;AACpB,SAAK,KAAK,IAAI,KAAK,KAAK;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,SAASA,SAA2B,CAAC,GAAS;AAC5C,QAAI,OAAOA,OAAM,eAAe,UAAU;AACxC,MAAC,KAAK,MAAiC,aAAaA,OAAM;AAC1D,UAAIA,OAAM,aAAa,KAAK,KAAK,KAAK,OAAOA,OAAM,YAAY;AAC7D,cAAM,WAAgB,CAAC;AACvB,YAAI,YAAY,KAAK,KAAK;AAC1B,mBAAW,OAAO,KAAK,KAAK,KAAK,GAAG;AAClC,cAAI,YAAYA,OAAM,YAAY;AAChC,qBAAS,KAAK,GAAG;AACjB;AAAA,UACF,OAAO;AACL;AAAA,UACF;AAAA,QACF;AACA,mBAAW,OAAO,UAAU;AAC1B,eAAK,KAAK,OAAO,GAAG;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,KAAiB;AACnB,WAAO,KAAK,KAAK,IAAI,GAAG;AAAA,EAC1B;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,MAAM,OAAO,KAAQ,UAA0D;AAC7E,UAAM,MAAM,KAAK,IAAI,GAAG;AACxB,QAAI,KAAK;AACP,aAAO;AAAA,IACT,OAAO;AACL,YAAMC,OAAM,MAAM,SAAS,GAAG;AAC9B,WAAK,IAAI,KAAKA,IAAQ;AACtB,aAAOA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,IAAI,KAAuB;AACzB,QAAI,KAAK,KAAK,IAAI,GAAG,GAAG;AACtB,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB;AACA,WAAO,KAAK,KAAK,IAAI,GAAG;AAAA,EAC1B;AAAA,EAEA,IAAI,KAAQ,OAAgB;AAC1B,SAAK,KAAK,OAAO,GAAG;AACpB,QAAI,KAAK,MAAM,aAAa,KAAK,KAAK,KAAK,QAAQ,KAAK,MAAM,YAAY;AAKxE,WAAK,KAAK,OAAO,KAAK,KAAK,KAAK,EAAE,KAAK,EAAE,KAAM;AAC/C,WAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC1B,OAAO;AACL,WAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,KAAc;AACnB,SAAK,KAAK,OAAO,GAAG;AAAA,EACtB;AAAA,EAEA,QAAc;AACZ,SAAK,KAAK,MAAM;AAAA,EAClB;AAAA,EAEA,QAAQ,YAA8D;AACpE,SAAK,KAAK,QAAQ,UAAU;AAAA,EAC9B;AAAA,EAEA,UAAoC;AAClC,WAAO,KAAK,KAAK,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcF;;;AClJO,IAAM,aAAN,MAA8B;AAAA,EAEnC,YAAY,KAAS;AAOrB,SAAS,gBAAgC,CAAC;AA0B1C,SAAS,cAAsC,CAAC;AAhC9C,SAAK,MAAM;AAAA,EACb;AAAA,EACA,QAAc;AAAA,EAEd;AAAA,EAGA,QAAuB;AApBzB;AAqBI,QAAI,KAAK,YAAY,SAAS,GAAG;AAC/B,YAAM,eAAe,IAAI,OAAa;AACtC,iBAAK,kBAAL,mBAAoB,KAAK;AACzB,aAAO,aAAa,UAAU;AAAA,IAChC;AACA,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,MAAM,MAA4C;AA5BpD;AA6BI,QAAI,CAAC,MAAM;AAET,WAAK,cAAc,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC7C,iBAAK,kBAAL,mBAAoB,OAAO,GAAG,KAAK,cAAc;AACjD,aAAO,QAAQ,QAAQ;AAAA,IACzB;AACA,SACG,GAAG,KAAK,GAAG,EACX,KAAK,CAAC,UAAU,KAAK,OAAO,QAAQ,KAAK,CAAC,EAC1C,MAAM,CAAC,MAAM,KAAK,OAAO,OAAO,CAAU,CAAC,EAC3C,QAAQ,MAAM;AACb,WAAK,YAAY,MAAM;AACvB,WAAK,KAAK,MAAM,KAAK,YAAY,CAAC,CAAC;AAAA,IACrC,CAAC;AACH,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,IAAI,IAA0B,IAAyB;AAC3D,UAAM,SAAS,IAAI,OAAU;AAC7B,SAAK,YAAY,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC;AACxC,QAAI,KAAK,YAAY,WAAW,GAAG;AACjC,WAAK,KAAK,MAAM,KAAK,YAAY,CAAC,CAAC;AAAA,IACrC;AACA,WAAO,OAAO,UAAU;AAAA,EAC1B;AACF;AAEO,IAAM,cAAN,MAAiC;AAAA,EAWtC,YAAY,KAAW;AAVvB,qBAAY;AACZ,SAAS,eAA4B,CAAC;AACtC,mBAAU;AAGV,sBAAa;AAMX,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,IAAI,QAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAc;AACZ,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,QAAI,KAAK,aAAa;AACpB,YAAM,MAAM,KAAK,aAAa,UAAU,CAAC,MAAM,MAAM,KAAK,WAAW;AACrE,UAAI,OAAO,GAAG;AAEZ,aAAK,aAAa,KAAK,GAAG,KAAK,aAAa,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AAAA,MAChE;AAAA,IACF,OAAO;AACL,WAAK,aAAa,SAAS;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA,EAGA,KAAQ,IAAsB;AAC5B,QAAI,KAAK,WAAW;AAClB,UAAI,KAAK,YAAY;AACnB,YAAI,KAAK,YAAY;AACnB,iBAAO,QAAQ,OAAO,KAAK,UAAU;AAAA,QACvC,OAAO;AACL,gBAAM,KAAK;AAAA,QACb;AAAA,MACF;AACA,UAAI,KAAK,SAAS;AAChB,YAAI,KAAK,YAAY;AAEnB,iBAAO,QAAQ,QAAQ,KAAK,UAAW;AAAA,QACzC,OAAO;AACL,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AACA,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,SAAS,IAAI,OAAU;AAC7B,SAAK,aAAa,KAAK,MAAM;AAC7B,QAAI,KAAK,aAAa,WAAW,GAAG;AAClC,YAAM,OAAO,CAAC,UAAmB;AAC/B,aAAK,aAAa;AAClB,aAAK,UAAU;AACf,aAAK,YAAY;AACjB,YAAI,KAAK,YAAY;AAEnB,eAAK,aAAa,QAAQ,CAAC,MAAM,EAAE,QAAQ,KAAK,UAAW,CAAC;AAAA,QAC9D;AACA,aAAK,aAAa,SAAS;AAAA,MAC7B;AACA,YAAM,UAAU,CAAC,MAAmB;AAClC,aAAK,aAAa;AAClB,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,YAAY;AACjB,YAAI,KAAK,YAAY;AAEnB,eAAK,aAAa,QAAQ,CAAC,MAAM,EAAE,OAAO,KAAK,UAAW,CAAC;AAAA,QAC7D;AACA,aAAK,aAAa,SAAS;AAAA,MAC7B;AACA,WAAK,cAAc;AAEnB,UAAI;AACF,cAAM,MAAM,GAAG,KAAK,GAAG;AACvB,YAAI,OAAQ,IAAmB,SAAS,YAAY;AAClD,eAAK,aAAa;AAElB,UAAC,IACE,KAAK,IAAI,EACT,MAAM,OAAO,EACb,QAAQ,MAAM;AACb,iBAAK,cAAc;AAAA,UACrB,CAAC;AAAA,QACL,OAAO;AACL,eAAK,GAAmB;AAAA,QAC1B;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,CAAU;AAAA,MACpB;AACA,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,cAAc;AAAA,MACrB;AAAA,IACF;AACA,QAAI,KAAK,YAAY;AACnB,aAAO,OAAO,UAAU;AAAA,IAC1B,OAAO;AAEL,aAAO,KAAK,KAAK,EAAE;AAAA,IACrB;AAAA,EACF;AACF;AAMO,IAAM,QAAN,MAAyD;AAAA,EAI9D,YAAY,SAAwB,QAA6B;AA/KnE;AAgLI,SAAK,UAAU;AACf,SAAK,OAAO,IAAI,QAAa,sCAAQ,QAAR,YAAe,EAAE,YAAY,GAAG,CAAC;AAAA,EAChE;AAAA,EAEA,SAAS,QAA0B;AACjC,SAAK,KAAK,SAAS,OAAO,GAAG;AAAA,EAC/B;AAAA,EAEA,MAAM,SAAS,KAAmC;AAChD,WAAO,KAAK,IAAI,MAAM,IAAI,CAAC;AAAA,EAC7B;AAAA,EAEA,IAAI,KAAuB;AACzB,QAAI,OAAO,QAAQ,YAAY;AAC7B,YAAO,IAAgB;AAAA,IACzB;AACA,QAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7B,QAAI,CAAC,OAAO;AACV,cAAQ,KAAK,QAAQ,GAAG;AACxB,WAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAc;AAClB,UAAM,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC/B,mCAAO;AACP,SAAK,KAAK,OAAO,GAAG;AAAA,EACtB;AAAA,EAEA,QAAc;AACZ,SAAK,KAAK,QAAQ,CAAC,UAAU,MAAM,MAAM,CAAC;AAC1C,SAAK,KAAK,MAAM;AAAA,EAClB;AACF;AAEO,IAAM,kBAAN,cAA6C,MAA4B;AAAA,EAC9E,YAAY,KAA0B,CAAC,GAAG;AACxC,UAAM,CAAC,QAAQ,IAAI,YAAkB,GAAG,GAAG,EAAE;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAyC;AACvC,WACE,MAAM,KAAK,KAAK,KAAK,QAAQ,CAAC,EAE3B,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAC9B,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AACf,UAAI,EAAE,WAAW;AACf,YAAI,EAAE,YAAY;AAChB,iBAAO;AAAA,YACL,KAAK;AAAA,YACL,OAAO,OAAO,IAAI,EAAE,UAAU;AAAA,UAChC;AAAA,QACF;AACA,eAAO;AAAA,UACL,KAAK;AAAA,UACL,OAAO,OAAO,GAAG,EAAE,UAAe;AAAA,QACpC;AAAA,MACF;AACA,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD,CAAC;AAAA,EAEP;AACF;AAEO,IAAM,iBAAN,cAA4C,MAA2B;AAAA,EAC5E,YAAY,KAA0B,CAAC,GAAG;AACxC,UAAM,CAAC,QAAQ,IAAI,WAAiB,GAAG,GAAG,EAAE;AAAA,EAC9C;AACF;;;AC3OA,IAAM,eAAe;AAOd,SAAS,gBAAgB,KAAkC;AAChE,MAAI,eAAe,aAAa;AAC9B,WAAO,OAAO,GAAG,IAAI,WAAW,GAAG,CAAC;AAAA,EACtC;AACA,MAAI,YAAY,OAAO,GAAG,GAAG;AAC3B,WAAO,OAAO,GAAG,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAY,IAAI,UAAU,CAAC;AAAA,EAC7E;AACA,MAAI,eAAe,MAAM;AACvB,WAAO,OAAO,IAAI,oBAAoB;AAAA,EACxC;AACA,MAAI,aAAa,UAAU,aAAa,OAAO,SAAS,GAAG,GAAG;AAC5D,WAAO,OAAO,GAAG,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAY,IAAI,UAAU,CAAC;AAAA,EAC7E;AACA,MAAI,eAAe,YAAY;AAC7B,WAAO,OAAO,GAAG,GAAG;AAAA,EACtB;AACA,MAAI,OAAO,GAAG,GAAG,GAAG;AAClB,QAAI,IAAI,MAAM,GAAG;AACf,aAAO,OAAO,IAAI,GAAG;AAAA,IACvB;AACA,WAAO,gBAAgB,IAAI,OAAO,CAAC;AAAA,EACrC;AACA,SAAO,OAAO,IAAI,kBAAkB;AACtC;AAEA,eAAsB,qBAAqB,KAAgD;AACzF,MAAI,WAAW,MAAM;AACrB,MAAI,oBAAoB,MAAM;AAC5B,eAAW,MAAM,SAAS,YAAY;AAAA,EACxC;AACA,SAAO,gBAAgB,QAAmB;AAC5C;;;ACvCA,IAAM,SAAN,MAAqC;AAAA,EAArC;AACE,SAAS,UAAU,IAAI,YAAY;AACnC,SAAS,UAAU,IAAI,YAAY;AAAA;AAAA,EAEnC,OAAO,KAAyB;AAC9B,WAAO,KAAK,QAAQ,OAAO,GAAG;AAAA,EAChC;AAAA,EACA,OAAO,MAA2B;AAChC,QAAI,OAAO,GAAG,IAAI,GAAG;AACnB,UAAI,KAAK,MAAM,GAAG;AAChB,cAAM,KAAK,IAAI;AAAA,MACjB;AAEA,YAAM,YAAY,KAAK,OAAO;AAC9B,UAAI,OAAO,cAAc,UAAU;AACjC,eAAO,KAAK,OAAO,SAAS;AAAA,MAC9B;AAAA,IACF;AACA,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACT;AACA,WAAO,KAAK,QAAQ,OAAO,gBAAgB,IAAe,EAAE,GAAG,CAAC;AAAA,EAClE;AAAA,EAEA,MAAM,YAAY,MAAyC;AACzD,QAAI,WAAW,MAAM;AACrB,QAAI,oBAAoB,MAAM;AAC5B,iBAAW,MAAM,SAAS,YAAY;AAAA,IACxC;AACA,WAAO,KAAK,OAAO,QAAQ;AAAA,EAC7B;AACF;AAEA,IAAM,eAAe,IAAI,YAA0B;AAC5C,SAAS,wBAAsC;AACpD,SAAO,aAAa,KAAK,MAAM,IAAI,OAAO,CAAC;AAC7C;;;ACjDO,IAAM,mCAAN,MAA0F;AAAA,EAQ/F,YAAoB,QAA6B;AAA7B;AAPpB,SAAS,cAA6B;AACtC,SAAS,UAAuB,IAAI,YAAY;AAO9C,SAAK,UAAU;AACf,SAAK,QAAQ,QAAQ,QAAQ,MAAS;AACtC,SAAK,SAAS,QAAQ,QAAQ,MAAS;AAAA,EACzC;AAAA;AAAA,EAEA,MAAM,QAA6B;AACjC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,MAAM,QAAuB;AAAA,EAE7B;AAAA,EACA,cAAoB;AAClB,SAAK,QAAQ,SAAS;AACtB,SAAK,QAAQ,QAAQ,QAAQ,MAAS;AACtC,SAAK,SAAS,QAAQ,QAAQ,MAAS;AAAA,EACzC;AAAA,EACA,MAAM,OAAmC;AACvC,QAAI,SAAqC,KAAK,QAAQ,OAAO,KAAK,EAAE,QAAQ;AAC5E,QAAI,SAAS;AACb,QAAI;AACF,eAAS,KAAK,MAAM,MAAM;AAC1B,eAAS,OAAO;AAAA,IAElB,SAAS,GAAG;AAAA,IAEZ;AACA,YAAQ,QAAQ;AAAA,MACd,KAAK;AAEH,gBAAQ,MAAM,MAAM;AACpB;AAAA,MACF,KAAK;AAEH,gBAAQ,KAAK,MAAM;AACnB;AAAA,MACF;AAEE,gBAAQ,IAAI,MAAM;AAAA,IACtB;AACA,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;AAEO,IAAM,sBAAN,MAAgE;AAAA,EAAhE;AACL,kBAAS;AAAA;AAAA;AAAA,EAGT,MAAM,QAA6B;AACjC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EACA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EACA,YAAqD;AACnD,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AACA,SAAK,SAAS;AACd,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,UAAU,IAAI,iCAAiC,IAAI;AAAA,IAC1D;AACA,WAAO,KAAK;AAAA,EACd;AACF;","names":["keys","param","val"]}
@@ -1,16 +1,16 @@
1
1
  import {
2
- ConsoleWriterStream,
3
- ConsoleWriterStreamDefaultWriter,
4
2
  FanoutWriteStream,
5
3
  stripper
6
- } from "./chunk-PHS255C5.js";
4
+ } from "./chunk-FOALXQST.js";
7
5
  import {
6
+ ConsoleWriterStream,
7
+ ConsoleWriterStreamDefaultWriter,
8
8
  TxtEnDecoderSingleton,
9
9
  __export,
10
10
  asyncCoerceIntoUint8,
11
11
  coerceIntoUint8,
12
12
  getParamsResult
13
- } from "./chunk-LXTKPZ6M.js";
13
+ } from "./chunk-YKGCONBX.js";
14
14
 
15
15
  // src/utils/index.ts
16
16
  var utils_exports = {};
@@ -266,4 +266,4 @@ export {
266
266
  UInt8ArrayEqual,
267
267
  utils_exports
268
268
  };
269
- //# sourceMappingURL=chunk-55W4AK2Z.js.map
269
+ //# sourceMappingURL=chunk-YVACAIUX.js.map
package/deno/index.cjs CHANGED
@@ -44,6 +44,43 @@ __export(deno_exports, {
44
44
  });
45
45
  module.exports = __toCommonJS(deno_exports);
46
46
 
47
+ // src/runtime.ts
48
+ function isSet(value, ref = globalThis) {
49
+ const [head, ...tail] = value.split(".");
50
+ if (["object", "function"].includes(typeof ref) && ref && ["object", "function"].includes(typeof ref[head]) && ref[head]) {
51
+ if (tail.length <= 1) {
52
+ return true;
53
+ }
54
+ return isSet(tail.join("."), ref[head]);
55
+ }
56
+ return false;
57
+ }
58
+ function runtimeFn() {
59
+ const gt = globalThis;
60
+ let isReactNative = (
61
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
62
+ isSet("navigator.product") && typeof gt["navigator"] === "object" && gt["navigator"]["product"] === "ReactNative"
63
+ );
64
+ let isNodeIsh = false;
65
+ if (!isSet("Deno")) {
66
+ isNodeIsh = isSet("process.versions.node") && !isReactNative;
67
+ }
68
+ let isDeno = isSet("Deno");
69
+ const isCFWorker = isSet("caches.default") && isSet("WebSocketPair");
70
+ if (isCFWorker) {
71
+ isDeno = false;
72
+ isNodeIsh = false;
73
+ isReactNative = false;
74
+ }
75
+ return {
76
+ isNodeIsh,
77
+ isBrowser: !(isNodeIsh || isDeno || isCFWorker || isReactNative),
78
+ isDeno,
79
+ isReactNative,
80
+ isCFWorker
81
+ };
82
+ }
83
+
47
84
  // src/sys-abstraction.ts
48
85
  var TimeMode = {
49
86
  REAL: "real",
@@ -78,195 +115,6 @@ var TimeUnits = {
78
115
  // Minute,
79
116
  };
80
117
 
81
- // src/base-sys-abstraction.ts
82
- var SysTime = class extends Time {
83
- Now() {
84
- return /* @__PURE__ */ new Date();
85
- }
86
- Sleep(duration) {
87
- return new Promise((resolve2) => {
88
- setTimeout(() => {
89
- resolve2();
90
- }, duration);
91
- });
92
- }
93
- };
94
- var ConstTime = class extends Time {
95
- Now() {
96
- return new Date(2021, 1, 1, 0, 0, 0, 0);
97
- }
98
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
99
- Sleep(duration) {
100
- return Promise.resolve();
101
- }
102
- };
103
- var StepTime = class extends Time {
104
- constructor() {
105
- super();
106
- this._step = new ConstTime().Now();
107
- this._start = this._step;
108
- }
109
- Now(steps = 1) {
110
- for (let i = 0; steps > 0 && i < steps; i++) {
111
- this._step = new Date(this._step.getTime() + 1e3);
112
- }
113
- if (steps < 1) {
114
- this._step = new Date(this._start.getTime() + steps * -1e3);
115
- }
116
- return this._step;
117
- }
118
- Sleep(duration) {
119
- this._step = new Date(this._step.getTime() + duration);
120
- return Promise.resolve();
121
- }
122
- };
123
- function TimeFactory(timeMode) {
124
- switch (timeMode) {
125
- case TimeMode.REAL:
126
- return new SysTime();
127
- case TimeMode.CONST:
128
- return new ConstTime();
129
- case TimeMode.STEP:
130
- return new StepTime();
131
- }
132
- return new SysTime();
133
- }
134
- var RandomService = class {
135
- constructor(mode) {
136
- this._step = 0;
137
- this._mode = mode;
138
- }
139
- Random0ToValue(value) {
140
- switch (this._mode) {
141
- case RandomMode.CONST:
142
- return 0.5 * value;
143
- case RandomMode.STEP:
144
- this._step += 1e-4;
145
- return this._step * value;
146
- case RandomMode.RANDOM:
147
- return Math.random() * value;
148
- default:
149
- throw new Error("Unknown RandomMode");
150
- }
151
- }
152
- };
153
- var IdService = class {
154
- constructor(mode) {
155
- this._step = 0;
156
- if (!mode) {
157
- mode = IDMode.UUID;
158
- }
159
- this._mode = mode;
160
- }
161
- NextId() {
162
- switch (this._mode) {
163
- case IDMode.UUID:
164
- return crypto.randomUUID();
165
- case IDMode.CONST:
166
- return "VeryUniqueID";
167
- case IDMode.STEP:
168
- return `STEPId-${this._step++}`;
169
- default:
170
- throw new Error("Unknown IDMode");
171
- }
172
- }
173
- };
174
- function consumeReadableStream(reader, writeFn) {
175
- reader.read().then(({ done, value }) => {
176
- if (done) {
177
- return;
178
- }
179
- writeFn(value).then(() => {
180
- consumeReadableStream(reader, writeFn);
181
- }).catch((e) => {
182
- console.error("consumeReadableStream:writeFn", e);
183
- });
184
- }).catch((e) => {
185
- console.error("consumeReadableStream:read", e);
186
- });
187
- }
188
- function CFWriteableStream(writeFn) {
189
- const ts = new TransformStream();
190
- consumeReadableStream(ts.readable.getReader(), writeFn);
191
- return ts.writable;
192
- }
193
- var BaseSysAbstraction = class {
194
- constructor(params) {
195
- this._time = new SysTime();
196
- this._idService = new IdService();
197
- this._randomService = new RandomService(RandomMode.RANDOM);
198
- this._fileSystem = params.FileSystem;
199
- this._systemService = params.SystemService;
200
- this._txtEnDe = params.TxtEnDecoder;
201
- const decoder = this._txtEnDe;
202
- this._stdout = CFWriteableStream((chunk) => {
203
- const decoded = decoder.decode(chunk);
204
- console.log(decoded.trimEnd());
205
- return Promise.resolve();
206
- });
207
- this._stderr = CFWriteableStream((chunk) => {
208
- const decoded = decoder.decode(chunk);
209
- console.error(decoded.trimEnd());
210
- return Promise.resolve();
211
- });
212
- }
213
- };
214
- var WrapperSysAbstraction = class {
215
- constructor(base, params) {
216
- this._time = base._time;
217
- this._stdout = base._stdout;
218
- this._stderr = base._stderr;
219
- this._idService = base._idService;
220
- this._randomService = base._randomService;
221
- this._fileSystem = base._fileSystem;
222
- this._systemService = base._systemService;
223
- if (params) {
224
- if (params.TimeMode) {
225
- this._time = TimeFactory(params.TimeMode);
226
- }
227
- if (params.Stdout) {
228
- this._stdout = params.Stdout;
229
- }
230
- if (params.Stderr) {
231
- this._stderr = params.Stderr;
232
- }
233
- if (params.IdMode) {
234
- this._idService = new IdService(params.IdMode);
235
- }
236
- if (params.RandomMode) {
237
- this._randomService = new RandomService(params.RandomMode);
238
- }
239
- if (params.FileSystem) {
240
- this._fileSystem = params.FileSystem;
241
- }
242
- if (params.SystemService) {
243
- this._systemService = params.SystemService;
244
- }
245
- }
246
- }
247
- Time() {
248
- return this._time;
249
- }
250
- NextId() {
251
- return this._idService.NextId();
252
- }
253
- Random0ToValue(value) {
254
- return this._randomService.Random0ToValue(value);
255
- }
256
- Stdout() {
257
- return this._stdout;
258
- }
259
- Stderr() {
260
- return this._stderr;
261
- }
262
- System() {
263
- return this._systemService;
264
- }
265
- FileSystem() {
266
- return this._fileSystem;
267
- }
268
- };
269
-
270
118
  // src/future.ts
271
119
  var _promise, _resolveFn, _rejectFn;
272
120
  var Future = class {
@@ -623,43 +471,6 @@ var KeyedResolvOnce = class extends Keyed {
623
471
  }
624
472
  };
625
473
 
626
- // src/runtime.ts
627
- function isSet(value, ref = globalThis) {
628
- const [head, ...tail] = value.split(".");
629
- if (["object", "function"].includes(typeof ref) && ref && ["object", "function"].includes(typeof ref[head]) && ref[head]) {
630
- if (tail.length <= 1) {
631
- return true;
632
- }
633
- return isSet(tail.join("."), ref[head]);
634
- }
635
- return false;
636
- }
637
- function runtimeFn() {
638
- const gt = globalThis;
639
- let isReactNative = (
640
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
641
- isSet("navigator.product") && typeof gt["navigator"] === "object" && gt["navigator"]["product"] === "ReactNative"
642
- );
643
- let isNodeIsh = false;
644
- if (!isSet("Deno")) {
645
- isNodeIsh = isSet("process.versions.node") && !isReactNative;
646
- }
647
- let isDeno = isSet("Deno");
648
- const isCFWorker = isSet("caches.default") && isSet("WebSocketPair");
649
- if (isCFWorker) {
650
- isDeno = false;
651
- isNodeIsh = false;
652
- isReactNative = false;
653
- }
654
- return {
655
- isNodeIsh,
656
- isBrowser: !(isNodeIsh || isDeno || isCFWorker || isReactNative),
657
- isDeno,
658
- isReactNative,
659
- isCFWorker
660
- };
661
- }
662
-
663
474
  // src/deno/deno-env-actions.ts
664
475
  var once = new ResolveOnce();
665
476
  var _deno;
@@ -1082,12 +893,220 @@ var TxtOps = class {
1082
893
  return this.decode(resolved);
1083
894
  }
1084
895
  };
1085
- var txtEnDecoder;
896
+ var txtEnDecoder = new ResolveOnce();
1086
897
  function TxtEnDecoderSingleton() {
1087
- txtEnDecoder = txtEnDecoder != null ? txtEnDecoder : new TxtOps();
1088
- return txtEnDecoder;
898
+ return txtEnDecoder.once(() => new TxtOps());
1089
899
  }
1090
900
 
901
+ // src/web/web-basic-sys-abstraction.ts
902
+ var baseSysAbstraction = new ResolveOnce();
903
+
904
+ // src/cf/cf-basic-sys-abstraction.ts
905
+ var baseSysAbstraction2 = new ResolveOnce();
906
+
907
+ // src/deno/deno-basic-sys-abstraction.ts
908
+ var DenoRuntimeService = class {
909
+ constructor(ende) {
910
+ this._txtEnDe = ende;
911
+ }
912
+ Env() {
913
+ return envFactory();
914
+ }
915
+ Args() {
916
+ return globalThis.Deno.args;
917
+ }
918
+ Stdout() {
919
+ return globalThis.Deno.stdout.writable;
920
+ }
921
+ Stderr() {
922
+ return globalThis.Deno.stderr.writable;
923
+ }
924
+ };
925
+ var baseSysAbstraction3 = new ResolveOnce();
926
+ function DenoBasicSysAbstraction(param2) {
927
+ var _a;
928
+ const my = baseSysAbstraction3.once(() => {
929
+ return new BaseBasicSysAbstraction({
930
+ TxtEnDecoder: (param2 == null ? void 0 : param2.TxtEnDecoder) || TxtEnDecoderSingleton()
931
+ });
932
+ });
933
+ return new WrapperBasicSysAbstraction(my, {
934
+ basicRuntimeService: new DenoRuntimeService((_a = param2 == null ? void 0 : param2.TxtEnDecoder) != null ? _a : my._txtEnDe),
935
+ ...param2
936
+ });
937
+ }
938
+
939
+ // src/node/node-basic-sys-abstraction.ts
940
+ var baseSysAbstraction4 = new ResolveOnce();
941
+
942
+ // src/base-sys-abstraction.ts
943
+ var SysTime = class extends Time {
944
+ Now() {
945
+ return /* @__PURE__ */ new Date();
946
+ }
947
+ Sleep(duration) {
948
+ return new Promise((resolve2) => {
949
+ setTimeout(() => {
950
+ resolve2();
951
+ }, duration);
952
+ });
953
+ }
954
+ };
955
+ var ConstTime = class extends Time {
956
+ Now() {
957
+ return new Date(2021, 1, 1, 0, 0, 0, 0);
958
+ }
959
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
960
+ Sleep(duration) {
961
+ return Promise.resolve();
962
+ }
963
+ };
964
+ var StepTime = class extends Time {
965
+ constructor() {
966
+ super();
967
+ this._step = new ConstTime().Now();
968
+ this._start = this._step;
969
+ }
970
+ Now(steps = 1) {
971
+ for (let i = 0; steps > 0 && i < steps; i++) {
972
+ this._step = new Date(this._step.getTime() + 1e3);
973
+ }
974
+ if (steps < 1) {
975
+ this._step = new Date(this._start.getTime() + steps * -1e3);
976
+ }
977
+ return this._step;
978
+ }
979
+ Sleep(duration) {
980
+ this._step = new Date(this._step.getTime() + duration);
981
+ return Promise.resolve();
982
+ }
983
+ };
984
+ function TimeFactory(timeMode) {
985
+ switch (timeMode) {
986
+ case TimeMode.REAL:
987
+ return new SysTime();
988
+ case TimeMode.CONST:
989
+ return new ConstTime();
990
+ case TimeMode.STEP:
991
+ return new StepTime();
992
+ }
993
+ return new SysTime();
994
+ }
995
+ var RandomService = class {
996
+ constructor(mode) {
997
+ this._step = 0;
998
+ this._mode = mode;
999
+ }
1000
+ Random0ToValue(value) {
1001
+ switch (this._mode) {
1002
+ case RandomMode.CONST:
1003
+ return 0.5 * value;
1004
+ case RandomMode.STEP:
1005
+ this._step += 1e-4;
1006
+ return this._step * value;
1007
+ case RandomMode.RANDOM:
1008
+ return Math.random() * value;
1009
+ default:
1010
+ throw new Error("Unknown RandomMode");
1011
+ }
1012
+ }
1013
+ };
1014
+ var IdService = class {
1015
+ constructor(mode) {
1016
+ this._step = 0;
1017
+ if (!mode) {
1018
+ mode = IDMode.UUID;
1019
+ }
1020
+ this._mode = mode;
1021
+ }
1022
+ NextId() {
1023
+ switch (this._mode) {
1024
+ case IDMode.UUID:
1025
+ return crypto.randomUUID();
1026
+ case IDMode.CONST:
1027
+ return "VeryUniqueID";
1028
+ case IDMode.STEP:
1029
+ return `STEPId-${this._step++}`;
1030
+ default:
1031
+ throw new Error("Unknown IDMode");
1032
+ }
1033
+ }
1034
+ };
1035
+ var BaseBasicSysAbstraction = class {
1036
+ constructor(params) {
1037
+ this._time = new SysTime();
1038
+ // system independent services
1039
+ this._idService = new IdService();
1040
+ this._randomService = new RandomService(RandomMode.RANDOM);
1041
+ this._txtEnDe = params.TxtEnDecoder;
1042
+ }
1043
+ };
1044
+ var BaseSysAbstraction = class extends BaseBasicSysAbstraction {
1045
+ constructor(params) {
1046
+ super(params);
1047
+ this._fileSystem = params.FileSystem;
1048
+ this._systemService = params.SystemService;
1049
+ }
1050
+ };
1051
+ var WrapperBasicSysAbstraction = class {
1052
+ constructor(base, params) {
1053
+ this._time = base._time;
1054
+ this._basicRuntimeService = params.basicRuntimeService;
1055
+ this._idService = base._idService;
1056
+ this._randomService = base._randomService;
1057
+ if (params.TimeMode) {
1058
+ this._time = TimeFactory(params.TimeMode);
1059
+ }
1060
+ if (params.IdMode) {
1061
+ this._idService = new IdService(params.IdMode);
1062
+ }
1063
+ if (params.RandomMode) {
1064
+ this._randomService = new RandomService(params.RandomMode);
1065
+ }
1066
+ }
1067
+ Time() {
1068
+ return this._time;
1069
+ }
1070
+ NextId() {
1071
+ return this._idService.NextId();
1072
+ }
1073
+ Random0ToValue(value) {
1074
+ return this._randomService.Random0ToValue(value);
1075
+ }
1076
+ Stdout() {
1077
+ return this._basicRuntimeService.Stdout();
1078
+ }
1079
+ Stderr() {
1080
+ return this._basicRuntimeService.Stderr();
1081
+ }
1082
+ Env() {
1083
+ return this._basicRuntimeService.Env();
1084
+ }
1085
+ Args() {
1086
+ return this._basicRuntimeService.Args();
1087
+ }
1088
+ // System(): SystemService {
1089
+ // return this._systemService;
1090
+ // }
1091
+ // FileSystem(): FileService {
1092
+ // return this._fileSystem;
1093
+ // }
1094
+ };
1095
+ var WrapperRuntimeSysAbstraction = class extends WrapperBasicSysAbstraction {
1096
+ constructor(base, params) {
1097
+ var _a, _b;
1098
+ super(base, params);
1099
+ this._systemService = (_a = params.systemService) != null ? _a : base._systemService;
1100
+ this._fileSystem = (_b = params.fileSystem) != null ? _b : base._fileSystem;
1101
+ }
1102
+ System() {
1103
+ return this._systemService;
1104
+ }
1105
+ FileSystem() {
1106
+ return this._fileSystem;
1107
+ }
1108
+ };
1109
+
1091
1110
  // src/deno/deno-file-service.ts
1092
1111
  var path = __toESM(require("path"), 1);
1093
1112
  var Deno = globalThis.Deno;
@@ -1221,12 +1240,6 @@ var _DenoSystemService = class _DenoSystemService {
1221
1240
  this._exitService = new DenoExitServiceImpl();
1222
1241
  this._exitService.injectExitHandlers(_DenoSystemService._exitHandlers);
1223
1242
  }
1224
- Env() {
1225
- return envFactory();
1226
- }
1227
- Args() {
1228
- return Deno2.args;
1229
- }
1230
1243
  OnExit(hdl) {
1231
1244
  const id = crypto.randomUUID();
1232
1245
  _DenoSystemService._exitHandlers.push({ hdl, id });
@@ -1243,16 +1256,19 @@ var _DenoSystemService = class _DenoSystemService {
1243
1256
  };
1244
1257
  _DenoSystemService._exitHandlers = [];
1245
1258
  var DenoSystemService = _DenoSystemService;
1246
- var my = void 0;
1259
+ var baseSysAbstraction5 = new ResolveOnce();
1247
1260
  function DenoSysAbstraction(param2) {
1248
- if (!my) {
1249
- my = new BaseSysAbstraction({
1261
+ const my = baseSysAbstraction5.once(
1262
+ () => new BaseSysAbstraction({
1250
1263
  TxtEnDecoder: (param2 == null ? void 0 : param2.TxtEnDecoder) || TxtEnDecoderSingleton(),
1251
1264
  FileSystem: new DenoFileService(),
1252
1265
  SystemService: new DenoSystemService()
1253
- });
1254
- }
1255
- return new WrapperSysAbstraction(my, param2);
1266
+ })
1267
+ );
1268
+ return new WrapperRuntimeSysAbstraction(my, {
1269
+ basicRuntimeService: DenoBasicSysAbstraction(param2),
1270
+ ...param2
1271
+ });
1256
1272
  }
1257
1273
  // Annotate the CommonJS export names for ESM import in node:
1258
1274
  0 && (module.exports = {