@adviser/cement 0.5.3 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/base-basic-sys-abstraction.test.cjs +12 -13
- package/cjs/base-basic-sys-abstraction.test.cjs.map +1 -1
- package/cjs/bin2text.test.cjs +15 -14
- package/cjs/bin2text.test.cjs.map +1 -1
- package/cjs/coerce-binary.test.cjs +16 -15
- package/cjs/coerce-binary.test.cjs.map +1 -1
- package/cjs/crypto.test.cjs +9 -8
- package/cjs/crypto.test.cjs.map +1 -1
- package/cjs/future.test.cjs +12 -11
- package/cjs/future.test.cjs.map +1 -1
- package/cjs/http_header.test.cjs +13 -13
- package/cjs/http_header.test.cjs.map +1 -1
- package/cjs/index.cjs +3 -0
- package/cjs/index.cjs.map +1 -1
- package/cjs/index.d.ts +3 -0
- package/cjs/index.d.ts.map +1 -1
- package/cjs/is-json.test.cjs +59 -58
- package/cjs/is-json.test.cjs.map +1 -1
- package/cjs/is-promise.test.cjs +19 -19
- package/cjs/is-promise.test.cjs.map +1 -1
- package/cjs/json-en-decoder.test.cjs +13 -12
- package/cjs/json-en-decoder.test.cjs.map +1 -1
- package/cjs/keyed-ng.test.cjs +21 -21
- package/cjs/keyed-ng.test.cjs.map +1 -1
- package/cjs/logger.test.cjs +178 -179
- package/cjs/logger.test.cjs.map +1 -1
- package/cjs/lru-map-set.test.cjs +67 -66
- package/cjs/lru-map-set.test.cjs.map +1 -1
- package/cjs/mutable-url.test.cjs +44 -44
- package/cjs/mutable-url.test.cjs.map +1 -1
- package/cjs/node-fs/mock-file-service.test.cjs +7 -6
- package/cjs/node-fs/mock-file-service.test.cjs.map +1 -1
- package/cjs/node-fs/node-sys-abstraction.test.cjs +13 -12
- package/cjs/node-fs/node-sys-abstraction.test.cjs.map +1 -1
- package/cjs/on-func.test.cjs +42 -43
- package/cjs/on-func.test.cjs.map +1 -1
- package/cjs/on-func.test.d.ts.map +1 -1
- package/cjs/option.cjs +14 -6
- package/cjs/option.cjs.map +1 -1
- package/cjs/option.d.ts +2 -2
- package/cjs/option.d.ts.map +1 -1
- package/cjs/path-ops.test.cjs +40 -39
- package/cjs/path-ops.test.cjs.map +1 -1
- package/cjs/poller.test.cjs +51 -51
- package/cjs/poller.test.cjs.map +1 -1
- package/cjs/promise-sleep.test.cjs +35 -34
- package/cjs/promise-sleep.test.cjs.map +1 -1
- package/cjs/resolve-once.cjs.map +1 -1
- package/cjs/resolve-once.d.ts +3 -6
- package/cjs/resolve-once.d.ts.map +1 -1
- package/cjs/resolve-once.test.cjs +301 -296
- package/cjs/resolve-once.test.cjs.map +1 -1
- package/cjs/result.test.cjs +68 -44
- package/cjs/result.test.cjs.map +1 -1
- package/cjs/sys-env.test.cjs +67 -66
- package/cjs/sys-env.test.cjs.map +1 -1
- package/cjs/test/mock-logger.test.cjs +14 -13
- package/cjs/test/mock-logger.test.cjs.map +1 -1
- package/cjs/timeouted.test.cjs +313 -313
- package/cjs/timeouted.test.cjs.map +1 -1
- package/cjs/tracer.test.cjs +32 -31
- package/cjs/tracer.test.cjs.map +1 -1
- package/cjs/txt-en-decoder.test.cjs +31 -31
- package/cjs/txt-en-decoder.test.cjs.map +1 -1
- package/cjs/uri.test.cjs +239 -239
- package/cjs/uri.test.cjs.map +1 -1
- package/cjs/utils/consume.test.cjs +22 -22
- package/cjs/utils/consume.test.cjs.map +1 -1
- package/cjs/utils/rebuffer.test.cjs +40 -39
- package/cjs/utils/rebuffer.test.cjs.map +1 -1
- package/cjs/utils/relative-path.test.cjs +125 -124
- package/cjs/utils/relative-path.test.cjs.map +1 -1
- package/cjs/utils/sorted-object.test.cjs +8 -7
- package/cjs/utils/sorted-object.test.cjs.map +1 -1
- package/cjs/utils/stream-map.test.cjs +32 -31
- package/cjs/utils/stream-map.test.cjs.map +1 -1
- package/cjs/utils/stream2string.test.cjs +5 -5
- package/cjs/utils/stream2string.test.cjs.map +1 -1
- package/cjs/utils/string2stream.test.cjs +5 -5
- package/cjs/utils/string2stream.test.cjs.map +1 -1
- package/cjs/utils/stripper.test.cjs +21 -20
- package/cjs/utils/stripper.test.cjs.map +1 -1
- package/cjs/utils/to-sorted.test.cjs +27 -27
- package/cjs/utils/to-sorted.test.cjs.map +1 -1
- package/cjs/version.cjs +1 -1
- package/cjs/wait-for-value.cjs +58 -0
- package/cjs/wait-for-value.cjs.map +1 -0
- package/cjs/wait-for-value.d.ts +14 -0
- package/cjs/wait-for-value.d.ts.map +1 -0
- package/cjs/wait-for-value.test.cjs +135 -0
- package/cjs/wait-for-value.test.cjs.map +1 -0
- package/cjs/wait-for-value.test.d.ts +2 -0
- package/cjs/wait-for-value.test.d.ts.map +1 -0
- package/deno.json +1 -1
- package/esm/base-basic-sys-abstraction.test.js +1 -2
- package/esm/base-basic-sys-abstraction.test.js.map +1 -1
- package/esm/bin2text.test.js +2 -1
- package/esm/bin2text.test.js.map +1 -1
- package/esm/coerce-binary.test.js +1 -0
- package/esm/coerce-binary.test.js.map +1 -1
- package/esm/crypto.test.js +2 -1
- package/esm/crypto.test.js.map +1 -1
- package/esm/future.test.js +1 -0
- package/esm/future.test.js.map +1 -1
- package/esm/http_header.test.js +1 -1
- package/esm/http_header.test.js.map +1 -1
- package/esm/index.d.ts +3 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -1
- package/esm/is-json.test.js +2 -1
- package/esm/is-json.test.js.map +1 -1
- package/esm/is-promise.test.js +2 -2
- package/esm/is-promise.test.js.map +1 -1
- package/esm/json-en-decoder.test.js +2 -1
- package/esm/json-en-decoder.test.js.map +1 -1
- package/esm/keyed-ng.test.js +2 -2
- package/esm/keyed-ng.test.js.map +1 -1
- package/esm/load-asset.test.js +2 -3
- package/esm/load-asset.test.js.map +1 -1
- package/esm/logger.test.js +2 -3
- package/esm/logger.test.js.map +1 -1
- package/esm/lru-map-set.test.js +1 -0
- package/esm/lru-map-set.test.js.map +1 -1
- package/esm/mutable-url.test.js +1 -1
- package/esm/mutable-url.test.js.map +1 -1
- package/esm/node-fs/mock-file-service.test.js +1 -0
- package/esm/node-fs/mock-file-service.test.js.map +1 -1
- package/esm/node-fs/node-sys-abstraction.test.js +1 -0
- package/esm/node-fs/node-sys-abstraction.test.js.map +1 -1
- package/esm/on-func.test.d.ts.map +1 -1
- package/esm/on-func.test.js +2 -3
- package/esm/on-func.test.js.map +1 -1
- package/esm/option.d.ts +2 -2
- package/esm/option.d.ts.map +1 -1
- package/esm/option.js +14 -6
- package/esm/option.js.map +1 -1
- package/esm/path-ops.test.js +2 -1
- package/esm/path-ops.test.js.map +1 -1
- package/esm/poller.test.js +2 -2
- package/esm/poller.test.js.map +1 -1
- package/esm/promise-sleep.test.js +2 -1
- package/esm/promise-sleep.test.js.map +1 -1
- package/esm/resolve-once.d.ts +3 -6
- package/esm/resolve-once.d.ts.map +1 -1
- package/esm/resolve-once.js.map +1 -1
- package/esm/resolve-once.test.js +9 -4
- package/esm/resolve-once.test.js.map +1 -1
- package/esm/result.test.js +25 -1
- package/esm/result.test.js.map +1 -1
- package/esm/sys-env.test.js +1 -0
- package/esm/sys-env.test.js.map +1 -1
- package/esm/test/mock-logger.test.js +1 -0
- package/esm/test/mock-logger.test.js.map +1 -1
- package/esm/timeouted.test.js +2 -2
- package/esm/timeouted.test.js.map +1 -1
- package/esm/tracer.test.js +1 -0
- package/esm/tracer.test.js.map +1 -1
- package/esm/txt-en-decoder.test.js +2 -2
- package/esm/txt-en-decoder.test.js.map +1 -1
- package/esm/uri.test.js +2 -2
- package/esm/uri.test.js.map +1 -1
- package/esm/utils/consume.test.js +2 -2
- package/esm/utils/consume.test.js.map +1 -1
- package/esm/utils/rebuffer.test.js +2 -1
- package/esm/utils/rebuffer.test.js.map +1 -1
- package/esm/utils/relative-path.test.js +2 -1
- package/esm/utils/relative-path.test.js.map +1 -1
- package/esm/utils/sorted-object.test.js +2 -1
- package/esm/utils/sorted-object.test.js.map +1 -1
- package/esm/utils/stream-map.test.js +2 -1
- package/esm/utils/stream-map.test.js.map +1 -1
- package/esm/utils/stream2string.test.js +2 -2
- package/esm/utils/stream2string.test.js.map +1 -1
- package/esm/utils/string2stream.test.js +2 -2
- package/esm/utils/string2stream.test.js.map +1 -1
- package/esm/utils/stripper.test.js +2 -1
- package/esm/utils/stripper.test.js.map +1 -1
- package/esm/utils/to-sorted.test.js +2 -2
- package/esm/utils/to-sorted.test.js.map +1 -1
- package/esm/version.js +1 -1
- package/esm/wait-for-value.d.ts +14 -0
- package/esm/wait-for-value.d.ts.map +1 -0
- package/esm/wait-for-value.js +54 -0
- package/esm/wait-for-value.js.map +1 -0
- package/esm/wait-for-value.test.d.ts +2 -0
- package/esm/wait-for-value.test.d.ts.map +1 -0
- package/esm/wait-for-value.test.js +133 -0
- package/esm/wait-for-value.test.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +3 -0
- package/src/option.ts +21 -6
- package/src/resolve-once.ts +11 -60
- package/src/wait-for-value.ts +125 -0
- package/ts/cjs/base-basic-sys-abstraction.test.js +12 -13
- package/ts/cjs/base-basic-sys-abstraction.test.js.map +1 -1
- package/ts/cjs/bin2text.test.js +15 -14
- package/ts/cjs/bin2text.test.js.map +1 -1
- package/ts/cjs/coerce-binary.test.js +16 -15
- package/ts/cjs/coerce-binary.test.js.map +1 -1
- package/ts/cjs/crypto.test.js +9 -8
- package/ts/cjs/crypto.test.js.map +1 -1
- package/ts/cjs/future.test.js +12 -11
- package/ts/cjs/future.test.js.map +1 -1
- package/ts/cjs/http_header.test.js +13 -13
- package/ts/cjs/http_header.test.js.map +1 -1
- package/ts/cjs/index.d.ts +3 -0
- package/ts/cjs/index.d.ts.map +1 -1
- package/ts/cjs/index.js +3 -0
- package/ts/cjs/index.js.map +1 -1
- package/ts/cjs/is-json.test.js +59 -58
- package/ts/cjs/is-json.test.js.map +1 -1
- package/ts/cjs/is-promise.test.js +19 -19
- package/ts/cjs/is-promise.test.js.map +1 -1
- package/ts/cjs/json-en-decoder.test.js +13 -12
- package/ts/cjs/json-en-decoder.test.js.map +1 -1
- package/ts/cjs/keyed-ng.test.js +21 -21
- package/ts/cjs/keyed-ng.test.js.map +1 -1
- package/ts/cjs/logger.test.js +178 -179
- package/ts/cjs/logger.test.js.map +1 -1
- package/ts/cjs/lru-map-set.test.js +67 -66
- package/ts/cjs/lru-map-set.test.js.map +1 -1
- package/ts/cjs/mutable-url.test.js +44 -44
- package/ts/cjs/mutable-url.test.js.map +1 -1
- package/ts/cjs/node-fs/mock-file-service.test.js +7 -6
- package/ts/cjs/node-fs/mock-file-service.test.js.map +1 -1
- package/ts/cjs/node-fs/node-sys-abstraction.test.js +13 -12
- package/ts/cjs/node-fs/node-sys-abstraction.test.js.map +1 -1
- package/ts/cjs/on-func.test.d.ts.map +1 -1
- package/ts/cjs/on-func.test.js +42 -43
- package/ts/cjs/on-func.test.js.map +1 -1
- package/ts/cjs/option.d.ts +2 -2
- package/ts/cjs/option.d.ts.map +1 -1
- package/ts/cjs/option.js +14 -6
- package/ts/cjs/option.js.map +1 -1
- package/ts/cjs/path-ops.test.js +40 -39
- package/ts/cjs/path-ops.test.js.map +1 -1
- package/ts/cjs/poller.test.js +51 -51
- package/ts/cjs/poller.test.js.map +1 -1
- package/ts/cjs/promise-sleep.test.js +35 -34
- package/ts/cjs/promise-sleep.test.js.map +1 -1
- package/ts/cjs/resolve-once.d.ts +3 -6
- package/ts/cjs/resolve-once.d.ts.map +1 -1
- package/ts/cjs/resolve-once.js.map +1 -1
- package/ts/cjs/resolve-once.test.js +301 -296
- package/ts/cjs/resolve-once.test.js.map +1 -1
- package/ts/cjs/result.test.js +68 -44
- package/ts/cjs/result.test.js.map +1 -1
- package/ts/cjs/sys-env.test.js +67 -66
- package/ts/cjs/sys-env.test.js.map +1 -1
- package/ts/cjs/test/mock-logger.test.js +14 -13
- package/ts/cjs/test/mock-logger.test.js.map +1 -1
- package/ts/cjs/timeouted.test.js +313 -313
- package/ts/cjs/timeouted.test.js.map +1 -1
- package/ts/cjs/tracer.test.js +32 -31
- package/ts/cjs/tracer.test.js.map +1 -1
- package/ts/cjs/txt-en-decoder.test.js +31 -31
- package/ts/cjs/txt-en-decoder.test.js.map +1 -1
- package/ts/cjs/uri.test.js +239 -239
- package/ts/cjs/uri.test.js.map +1 -1
- package/ts/cjs/utils/consume.test.js +22 -22
- package/ts/cjs/utils/consume.test.js.map +1 -1
- package/ts/cjs/utils/rebuffer.test.js +40 -39
- package/ts/cjs/utils/rebuffer.test.js.map +1 -1
- package/ts/cjs/utils/relative-path.test.js +125 -124
- package/ts/cjs/utils/relative-path.test.js.map +1 -1
- package/ts/cjs/utils/sorted-object.test.js +8 -7
- package/ts/cjs/utils/sorted-object.test.js.map +1 -1
- package/ts/cjs/utils/stream-map.test.js +32 -31
- package/ts/cjs/utils/stream-map.test.js.map +1 -1
- package/ts/cjs/utils/stream2string.test.js +5 -5
- package/ts/cjs/utils/stream2string.test.js.map +1 -1
- package/ts/cjs/utils/string2stream.test.js +5 -5
- package/ts/cjs/utils/string2stream.test.js.map +1 -1
- package/ts/cjs/utils/stripper.test.js +21 -20
- package/ts/cjs/utils/stripper.test.js.map +1 -1
- package/ts/cjs/utils/to-sorted.test.js +27 -27
- package/ts/cjs/utils/to-sorted.test.js.map +1 -1
- package/ts/cjs/version.js +1 -1
- package/ts/cjs/wait-for-value.d.ts +14 -0
- package/ts/cjs/wait-for-value.d.ts.map +1 -0
- package/ts/cjs/wait-for-value.js +58 -0
- package/ts/cjs/wait-for-value.js.map +1 -0
- package/ts/cjs/wait-for-value.test.d.ts +2 -0
- package/ts/cjs/wait-for-value.test.d.ts.map +1 -0
- package/ts/cjs/wait-for-value.test.js +135 -0
- package/ts/cjs/wait-for-value.test.js.map +1 -0
- package/ts/esm/base-basic-sys-abstraction.test.js +1 -2
- package/ts/esm/base-basic-sys-abstraction.test.js.map +1 -1
- package/ts/esm/bin2text.test.js +2 -1
- package/ts/esm/bin2text.test.js.map +1 -1
- package/ts/esm/coerce-binary.test.js +1 -0
- package/ts/esm/coerce-binary.test.js.map +1 -1
- package/ts/esm/crypto.test.js +2 -1
- package/ts/esm/crypto.test.js.map +1 -1
- package/ts/esm/future.test.js +1 -0
- package/ts/esm/future.test.js.map +1 -1
- package/ts/esm/http_header.test.js +1 -1
- package/ts/esm/http_header.test.js.map +1 -1
- package/ts/esm/index.d.ts +3 -0
- package/ts/esm/index.d.ts.map +1 -1
- package/ts/esm/index.js +3 -0
- package/ts/esm/index.js.map +1 -1
- package/ts/esm/is-json.test.js +2 -1
- package/ts/esm/is-json.test.js.map +1 -1
- package/ts/esm/is-promise.test.js +2 -2
- package/ts/esm/is-promise.test.js.map +1 -1
- package/ts/esm/json-en-decoder.test.js +2 -1
- package/ts/esm/json-en-decoder.test.js.map +1 -1
- package/ts/esm/keyed-ng.test.js +2 -2
- package/ts/esm/keyed-ng.test.js.map +1 -1
- package/ts/esm/load-asset.test.js +2 -3
- package/ts/esm/load-asset.test.js.map +1 -1
- package/ts/esm/logger.test.js +2 -3
- package/ts/esm/logger.test.js.map +1 -1
- package/ts/esm/lru-map-set.test.js +1 -0
- package/ts/esm/lru-map-set.test.js.map +1 -1
- package/ts/esm/mutable-url.test.js +1 -1
- package/ts/esm/mutable-url.test.js.map +1 -1
- package/ts/esm/node-fs/mock-file-service.test.js +1 -0
- package/ts/esm/node-fs/mock-file-service.test.js.map +1 -1
- package/ts/esm/node-fs/node-sys-abstraction.test.js +1 -0
- package/ts/esm/node-fs/node-sys-abstraction.test.js.map +1 -1
- package/ts/esm/on-func.test.d.ts.map +1 -1
- package/ts/esm/on-func.test.js +2 -3
- package/ts/esm/on-func.test.js.map +1 -1
- package/ts/esm/option.d.ts +2 -2
- package/ts/esm/option.d.ts.map +1 -1
- package/ts/esm/option.js +14 -6
- package/ts/esm/option.js.map +1 -1
- package/ts/esm/path-ops.test.js +2 -1
- package/ts/esm/path-ops.test.js.map +1 -1
- package/ts/esm/poller.test.js +2 -2
- package/ts/esm/poller.test.js.map +1 -1
- package/ts/esm/promise-sleep.test.js +2 -1
- package/ts/esm/promise-sleep.test.js.map +1 -1
- package/ts/esm/resolve-once.d.ts +3 -6
- package/ts/esm/resolve-once.d.ts.map +1 -1
- package/ts/esm/resolve-once.js.map +1 -1
- package/ts/esm/resolve-once.test.js +9 -4
- package/ts/esm/resolve-once.test.js.map +1 -1
- package/ts/esm/result.test.js +25 -1
- package/ts/esm/result.test.js.map +1 -1
- package/ts/esm/sys-env.test.js +1 -0
- package/ts/esm/sys-env.test.js.map +1 -1
- package/ts/esm/test/mock-logger.test.js +1 -0
- package/ts/esm/test/mock-logger.test.js.map +1 -1
- package/ts/esm/timeouted.test.js +2 -2
- package/ts/esm/timeouted.test.js.map +1 -1
- package/ts/esm/tracer.test.js +1 -0
- package/ts/esm/tracer.test.js.map +1 -1
- package/ts/esm/txt-en-decoder.test.js +2 -2
- package/ts/esm/txt-en-decoder.test.js.map +1 -1
- package/ts/esm/uri.test.js +2 -2
- package/ts/esm/uri.test.js.map +1 -1
- package/ts/esm/utils/consume.test.js +2 -2
- package/ts/esm/utils/consume.test.js.map +1 -1
- package/ts/esm/utils/rebuffer.test.js +2 -1
- package/ts/esm/utils/rebuffer.test.js.map +1 -1
- package/ts/esm/utils/relative-path.test.js +2 -1
- package/ts/esm/utils/relative-path.test.js.map +1 -1
- package/ts/esm/utils/sorted-object.test.js +2 -1
- package/ts/esm/utils/sorted-object.test.js.map +1 -1
- package/ts/esm/utils/stream-map.test.js +2 -1
- package/ts/esm/utils/stream-map.test.js.map +1 -1
- package/ts/esm/utils/stream2string.test.js +2 -2
- package/ts/esm/utils/stream2string.test.js.map +1 -1
- package/ts/esm/utils/string2stream.test.js +2 -2
- package/ts/esm/utils/string2stream.test.js.map +1 -1
- package/ts/esm/utils/stripper.test.js +2 -1
- package/ts/esm/utils/stripper.test.js.map +1 -1
- package/ts/esm/utils/to-sorted.test.js +2 -2
- package/ts/esm/utils/to-sorted.test.js.map +1 -1
- package/ts/esm/version.js +1 -1
- package/ts/esm/wait-for-value.d.ts +14 -0
- package/ts/esm/wait-for-value.d.ts.map +1 -0
- package/ts/esm/wait-for-value.js +54 -0
- package/ts/esm/wait-for-value.js.map +1 -0
- package/ts/esm/wait-for-value.test.d.ts +2 -0
- package/ts/esm/wait-for-value.test.d.ts.map +1 -0
- package/ts/esm/wait-for-value.test.js +133 -0
- package/ts/esm/wait-for-value.test.js.map +1 -0
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Future } from "./future.js";
|
|
2
|
+
import { Option } from "./option.js";
|
|
3
|
+
import { ResolveOnce } from "./resolve-once.js";
|
|
4
|
+
export class WaitingForValue {
|
|
5
|
+
#value;
|
|
6
|
+
#waitFuture;
|
|
7
|
+
#waitValue;
|
|
8
|
+
constructor(opts = {}) {
|
|
9
|
+
this.init(opts.presetValue);
|
|
10
|
+
}
|
|
11
|
+
init(presetValue = Option.None()) {
|
|
12
|
+
this.#value = presetValue;
|
|
13
|
+
if (presetValue.IsSome() && this.#waitFuture) {
|
|
14
|
+
this.#waitFuture.resolve(presetValue.unwrap());
|
|
15
|
+
}
|
|
16
|
+
if (this.#value.IsSome()) {
|
|
17
|
+
this.#waitFuture = undefined;
|
|
18
|
+
const resolveOnce = new ResolveOnce();
|
|
19
|
+
this.#waitValue = () => resolveOnce.once(() => Promise.resolve(presetValue.unwrap()));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const myFuture = (this.#waitFuture = new Future());
|
|
23
|
+
const resolveOnce = new ResolveOnce();
|
|
24
|
+
this.#waitValue = () => resolveOnce.once(async () => myFuture.asPromise());
|
|
25
|
+
}
|
|
26
|
+
setValue(value) {
|
|
27
|
+
switch (true) {
|
|
28
|
+
case this.#value.IsNone():
|
|
29
|
+
this.#value = value;
|
|
30
|
+
if (value.IsSome()) {
|
|
31
|
+
this.#waitFuture?.resolve(value.unwrap());
|
|
32
|
+
}
|
|
33
|
+
break;
|
|
34
|
+
case this.#value.IsSome():
|
|
35
|
+
this.init(value);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
setError(err) {
|
|
40
|
+
if (this.#value.IsSome()) {
|
|
41
|
+
console.warn("WaitingForValue.setError called but value is already set, ignoring error", err);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.#waitFuture?.reject(err);
|
|
45
|
+
this.init();
|
|
46
|
+
}
|
|
47
|
+
waitValue() {
|
|
48
|
+
return this.#waitValue();
|
|
49
|
+
}
|
|
50
|
+
value() {
|
|
51
|
+
return this.#value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=wait-for-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for-value.js","sourceRoot":"","sources":["../../../src/wait-for-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAkChD,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAa;IACnB,WAAW,CAAa;IACxB,UAAU,CAAoB;IAO9B,YAAY,IAAI,GAA4B,EAAE,EAAE;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAAA,CAC7B;IASD,IAAI,CAAC,WAAW,GAAc,MAAM,CAAC,IAAI,EAAE,EAAQ;QACjD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QAC1B,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAEzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,GAAe,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,MAAM,EAAK,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAK,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,GAAe,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAAA,CACxF;IAUD,QAAQ,CAAC,KAAgB,EAAQ;QAE/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAEvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnB,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,MAAM;QACV,CAAC;IAAA,CACF;IAED,QAAQ,CAAC,GAAU,EAAQ;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAGzB,OAAO,CAAC,IAAI,CAAC,0EAA0E,EAAE,GAAG,CAAC,CAAC;YAC9F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;IAAA,CACb;IAUD,SAAS,GAAe;QACtB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAAA,CAC1B;IAED,KAAK,GAAc;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;IAAA,CACpB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for-value.test.d.ts","sourceRoot":"","sources":["../../../src/wait-for-value.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { WaitingForValue, sleep, Option, Future } from "@adviser/cement";
|
|
2
|
+
import { it, vi, expect } from "vitest";
|
|
3
|
+
it("waitFor void", async () => {
|
|
4
|
+
const wfv = new WaitingForValue();
|
|
5
|
+
const size = 10;
|
|
6
|
+
for (let i = 0; i < size; i++) {
|
|
7
|
+
const promiseWaits = Promise.all(Array(size)
|
|
8
|
+
.fill(0)
|
|
9
|
+
.map(() => wfv.waitValue()));
|
|
10
|
+
const results = vi.fn();
|
|
11
|
+
void promiseWaits.then(results);
|
|
12
|
+
await sleep(10);
|
|
13
|
+
expect(results).not.toHaveBeenCalled();
|
|
14
|
+
wfv.setValue(Option.None());
|
|
15
|
+
await sleep(10);
|
|
16
|
+
expect(results).not.toHaveBeenCalled();
|
|
17
|
+
wfv.setValue(Option.Some(undefined));
|
|
18
|
+
await sleep(10);
|
|
19
|
+
await promiseWaits;
|
|
20
|
+
expect(results).toHaveBeenCalledTimes(1);
|
|
21
|
+
expect(results).toHaveBeenCalledWith(Array(size).fill(undefined));
|
|
22
|
+
wfv.setValue(Option.Some(42));
|
|
23
|
+
const promiseWaits2 = Promise.all(Array(size)
|
|
24
|
+
.fill(0)
|
|
25
|
+
.map(() => wfv.waitValue())).then(results);
|
|
26
|
+
await sleep(10);
|
|
27
|
+
await promiseWaits2;
|
|
28
|
+
expect(results).toHaveBeenCalledTimes(2);
|
|
29
|
+
expect(results.mock.calls).toEqual([[Array(size).fill(undefined)], [Array(size).fill(42)]]);
|
|
30
|
+
wfv.init();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
it("waitFor object", async () => {
|
|
34
|
+
const wfv = new WaitingForValue();
|
|
35
|
+
const size = 10;
|
|
36
|
+
for (let i = 0; i < size; i++) {
|
|
37
|
+
const promiseWaits = Promise.all(Array(size)
|
|
38
|
+
.fill(0)
|
|
39
|
+
.map(() => wfv.waitValue()));
|
|
40
|
+
const results = vi.fn();
|
|
41
|
+
void promiseWaits.then(results);
|
|
42
|
+
await sleep(10);
|
|
43
|
+
expect(results).not.toHaveBeenCalled();
|
|
44
|
+
wfv.setValue(Option.None());
|
|
45
|
+
await sleep(10);
|
|
46
|
+
expect(results).not.toHaveBeenCalled();
|
|
47
|
+
wfv.setValue(Option.Some({ value: 0 }));
|
|
48
|
+
await sleep(10);
|
|
49
|
+
await promiseWaits;
|
|
50
|
+
expect(results).toHaveBeenCalledTimes(1);
|
|
51
|
+
expect(results).toHaveBeenCalledWith(Array(size).fill({ value: 0 }));
|
|
52
|
+
wfv.setValue(Option.Some({ value: 42 }));
|
|
53
|
+
const promiseWaits2 = Promise.all(Array(size)
|
|
54
|
+
.fill(0)
|
|
55
|
+
.map(() => wfv.waitValue())).then(results);
|
|
56
|
+
await sleep(10);
|
|
57
|
+
await promiseWaits2;
|
|
58
|
+
expect(results).toHaveBeenCalledTimes(2);
|
|
59
|
+
expect(results.mock.calls).toEqual([[Array(size).fill({ value: 0 })], [Array(size).fill({ value: 42 })]]);
|
|
60
|
+
wfv.init();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
it("waitFor preset value", async () => {
|
|
64
|
+
const wfv = new WaitingForValue({ presetValue: Option.Some(7) });
|
|
65
|
+
const size = 10;
|
|
66
|
+
const promiseWaits = Promise.all(Array(size)
|
|
67
|
+
.fill(0)
|
|
68
|
+
.map(() => wfv.waitValue()));
|
|
69
|
+
const results = vi.fn();
|
|
70
|
+
void promiseWaits.then(results);
|
|
71
|
+
await sleep(10);
|
|
72
|
+
await promiseWaits;
|
|
73
|
+
expect(results).toHaveBeenCalledTimes(1);
|
|
74
|
+
expect(results).toHaveBeenCalledWith(Array(size).fill(7));
|
|
75
|
+
wfv.setValue(Option.Some(42));
|
|
76
|
+
const promiseWaits2 = Promise.all(Array(size)
|
|
77
|
+
.fill(0)
|
|
78
|
+
.map(() => wfv.waitValue())).then(results);
|
|
79
|
+
await sleep(10);
|
|
80
|
+
await promiseWaits2;
|
|
81
|
+
expect(results).toHaveBeenCalledTimes(2);
|
|
82
|
+
expect(results.mock.calls).toEqual([[Array(size).fill(7)], [Array(size).fill(42)]]);
|
|
83
|
+
});
|
|
84
|
+
it("waitfor setError", async () => {
|
|
85
|
+
const wfv = new WaitingForValue();
|
|
86
|
+
const size = 10;
|
|
87
|
+
const promiseWaits = Promise.allSettled(Array(size)
|
|
88
|
+
.fill(0)
|
|
89
|
+
.map(() => wfv.waitValue()));
|
|
90
|
+
const results = vi.fn();
|
|
91
|
+
const errors = vi.fn();
|
|
92
|
+
void promiseWaits.then(results);
|
|
93
|
+
await sleep(10);
|
|
94
|
+
expect(results).not.toHaveBeenCalled();
|
|
95
|
+
expect(errors).not.toHaveBeenCalled();
|
|
96
|
+
wfv.setError(new Error("Test Error"));
|
|
97
|
+
await sleep(10);
|
|
98
|
+
await promiseWaits;
|
|
99
|
+
expect(results).toHaveBeenCalledTimes(1);
|
|
100
|
+
expect(results.mock.calls).toEqual([
|
|
101
|
+
[
|
|
102
|
+
Array(size).fill(expect.objectContaining({
|
|
103
|
+
status: "rejected",
|
|
104
|
+
reason: expect.objectContaining({ message: "Test Error" }),
|
|
105
|
+
})),
|
|
106
|
+
],
|
|
107
|
+
]);
|
|
108
|
+
});
|
|
109
|
+
it("waitfor reset to longer wait", async () => {
|
|
110
|
+
const tokenFN = vi.fn(() => {
|
|
111
|
+
return futureToken.asPromise();
|
|
112
|
+
});
|
|
113
|
+
const wfv = new WaitingForValue();
|
|
114
|
+
wfv.setValue(Option.Some("initial-token"));
|
|
115
|
+
const you = await wfv.waitValue();
|
|
116
|
+
expect(you).toBe("initial-token");
|
|
117
|
+
wfv.setValue(Option.None());
|
|
118
|
+
const futureToken = new Future();
|
|
119
|
+
const result = vi.fn();
|
|
120
|
+
const secondResult = wfv.waitValue().then(result);
|
|
121
|
+
const started = performance.now();
|
|
122
|
+
void sleep(20).then(() => {
|
|
123
|
+
void tokenFN().then((token) => {
|
|
124
|
+
wfv.setValue(Option.Some(token));
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
futureToken.resolve("valid-token-second");
|
|
128
|
+
await secondResult;
|
|
129
|
+
const duration = performance.now() - started;
|
|
130
|
+
expect(duration).toBeGreaterThanOrEqual(8);
|
|
131
|
+
expect(result).toHaveBeenCalledWith("valid-token-second");
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=wait-for-value.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for-value.test.js","sourceRoot":"","sources":["../../../src/wait-for-value.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -50,5 +50,8 @@ export * from "./utils/uint8array-equal.js";
|
|
|
50
50
|
export * from "./utils/coerce-uint8.js";
|
|
51
51
|
export * from "./utils/consume.js";
|
|
52
52
|
export * from "./utils/to-sorted.js";
|
|
53
|
+
export * from "./utils/relative-path.js";
|
|
53
54
|
|
|
54
55
|
export * from "./node-env/index.js";
|
|
56
|
+
export * from "./wait-for-value.js";
|
|
57
|
+
export * from "./is-json.js";
|
package/src/option.ts
CHANGED
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
export abstract class Option<T> {
|
|
29
|
-
static Some<T>(
|
|
30
|
-
return new Some(
|
|
29
|
+
static Some<T = void>(...args: T[]): Option<T> {
|
|
30
|
+
return args.length >= 1 ? new Some<T>(args[0]) : new Some<T>(undefined as unknown as T);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
static None<T>(): Option<T> {
|
|
@@ -38,11 +38,26 @@ export abstract class Option<T> {
|
|
|
38
38
|
return t instanceof Option;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
static From<T>(
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
static From<T = void>(...args: (T | undefined | null)[]): Option<T> {
|
|
42
|
+
const t = args.length >= 1 ? args[0] : undefined;
|
|
43
|
+
switch (typeof t) {
|
|
44
|
+
case "undefined":
|
|
45
|
+
return new None();
|
|
46
|
+
// case "boolean":
|
|
47
|
+
// case "number":
|
|
48
|
+
// case "bigint":
|
|
49
|
+
// case "string":
|
|
50
|
+
// case "symbol":
|
|
51
|
+
// case "function":
|
|
52
|
+
// return new Some(t);
|
|
53
|
+
case "object":
|
|
54
|
+
if (t === null) {
|
|
55
|
+
return new None();
|
|
56
|
+
}
|
|
57
|
+
return new Some(t);
|
|
58
|
+
default:
|
|
59
|
+
return new Some(t);
|
|
44
60
|
}
|
|
45
|
-
return new Some(t);
|
|
46
61
|
}
|
|
47
62
|
|
|
48
63
|
toValue(): T | undefined {
|
package/src/resolve-once.ts
CHANGED
|
@@ -269,22 +269,6 @@ export class SyncResolveOnce<T, CTX> implements SyncOrAsyncIf<T> {
|
|
|
269
269
|
}
|
|
270
270
|
return this.#value as ResultOnce<RET>;
|
|
271
271
|
}
|
|
272
|
-
|
|
273
|
-
// /**
|
|
274
|
-
// * Resets the cached state, allowing the function to be executed again.
|
|
275
|
-
// *
|
|
276
|
-
// * @param fn - Optional function to execute immediately after reset
|
|
277
|
-
// * @returns The result if fn provided, undefined otherwise
|
|
278
|
-
// */
|
|
279
|
-
// reset(fn?: () => RET): T | undefined {
|
|
280
|
-
// this.#value = undefined;
|
|
281
|
-
// this.#error = undefined;
|
|
282
|
-
// if (fn) {
|
|
283
|
-
// this.#state.setProcessing();
|
|
284
|
-
// return this.resolve(fn);
|
|
285
|
-
// }
|
|
286
|
-
// return undefined as T;
|
|
287
|
-
// }
|
|
288
272
|
}
|
|
289
273
|
|
|
290
274
|
/**
|
|
@@ -488,20 +472,6 @@ export class AsyncResolveOnce<T, CTX> implements SyncOrAsyncIf<T> {
|
|
|
488
472
|
|
|
489
473
|
return this.#active().resolve(fn);
|
|
490
474
|
}
|
|
491
|
-
|
|
492
|
-
// /**
|
|
493
|
-
// * Resets the cached state, allowing the function to be executed again.
|
|
494
|
-
// *
|
|
495
|
-
// * @param fn - Optional function to execute immediately after reset
|
|
496
|
-
// * @returns The result if fn provided, undefined otherwise
|
|
497
|
-
// */
|
|
498
|
-
// reset(fn?: () => ResultOnce<T>): T {
|
|
499
|
-
// this.#state.setProcessing();
|
|
500
|
-
// if (fn) {
|
|
501
|
-
// return this.resolve(fn);
|
|
502
|
-
// }
|
|
503
|
-
// return undefined as T;
|
|
504
|
-
// }
|
|
505
475
|
}
|
|
506
476
|
|
|
507
477
|
/**
|
|
@@ -687,36 +657,12 @@ export class ResolveOnce<T, CTX = void> implements ResolveOnceIf<T, CTX> {
|
|
|
687
657
|
return this.#syncOrAsync.Unwrap().error;
|
|
688
658
|
}
|
|
689
659
|
|
|
690
|
-
// get state(): ResolveState {
|
|
691
|
-
// return this.#state;
|
|
692
|
-
// }
|
|
693
|
-
// set state(value: ResolveState) {
|
|
694
|
-
// console.log(`ResolveOnce.state ${this.#state} -> ${value}`);
|
|
695
|
-
// if (value === "processed") {
|
|
696
|
-
// if (this.resetAfterTimer) {
|
|
697
|
-
// clearTimeout(this.resetAfterTimer);
|
|
698
|
-
// }
|
|
699
|
-
// if (typeof this.#opts.resetAfter === "number" && this.#opts.resetAfter > 0) {
|
|
700
|
-
// console.log("setting reset timer for", this.#opts.resetAfter);
|
|
701
|
-
// this.resetAfterTimer = setTimeout(() => {
|
|
702
|
-
// console.log("resetting after", this.#opts.resetAfter);
|
|
703
|
-
// this.reset();
|
|
704
|
-
// }, this.#opts.resetAfter);
|
|
705
|
-
// }
|
|
706
|
-
// }
|
|
707
|
-
// this.#state = value;
|
|
708
|
-
// }
|
|
709
|
-
|
|
710
660
|
once<RET extends T | Promise<T>>(fn: (arg: OnceActionArg<T, CTX>) => RET): ResultOnce<RET> {
|
|
711
661
|
let resultFn: () => RET;
|
|
712
662
|
if (this.#state.isInitial()) {
|
|
713
663
|
const state = this.#state;
|
|
714
664
|
try {
|
|
715
665
|
state.setProcessing();
|
|
716
|
-
// let prev: T | undefined = undefined;
|
|
717
|
-
// if (this.#syncOrAsync.IsSome()) {
|
|
718
|
-
// prev = this.#syncOrAsync.Unwrap().value as T;
|
|
719
|
-
// }
|
|
720
666
|
const isSyncOrAsync = fn(this._onceArg);
|
|
721
667
|
if (isPromise(isSyncOrAsync)) {
|
|
722
668
|
this.#syncOrAsync = Option.Some(new AsyncResolveOnce<T, CTX>(this, state, this.#syncOrAsync));
|
|
@@ -806,11 +752,14 @@ export type AddKeyedParam<K, V, CTX extends NonNullable<object>> = Omit<KeyedNgO
|
|
|
806
752
|
*/
|
|
807
753
|
export type WithKey<X extends NonNullable<object>, K> = X & { readonly key: K };
|
|
808
754
|
|
|
755
|
+
// interface ResetFunc {
|
|
756
|
+
// reset(): void;
|
|
757
|
+
// }
|
|
809
758
|
/**
|
|
810
759
|
* Type helper that adds an optional reset method to a value type.
|
|
811
760
|
* @template V - The value type
|
|
812
761
|
*/
|
|
813
|
-
export type WithOptionalReset<V> = V
|
|
762
|
+
// export type WithOptionalReset<V> = V extends ResetFunc ? V & ResetFunc : V;
|
|
814
763
|
|
|
815
764
|
/**
|
|
816
765
|
* Represents an item in a KeyedResolvOnce collection with its resolved result.
|
|
@@ -824,7 +773,7 @@ export interface KeyedResolveOnceItem<K, T, CTX extends NonNullable<object>> {
|
|
|
824
773
|
/** The resolved value wrapped in a Result (Ok or Err) */
|
|
825
774
|
readonly value: Result<T>;
|
|
826
775
|
/** The complete KeyedNgItem containing metadata */
|
|
827
|
-
readonly item: KeyedNgItem<K, ResolveOnce<
|
|
776
|
+
readonly item: KeyedNgItem<K, ResolveOnce<T, KeyedNgItemWithoutValue<K, CTX>>, CTX>;
|
|
828
777
|
}
|
|
829
778
|
|
|
830
779
|
/**
|
|
@@ -873,10 +822,12 @@ export interface KeyedResolveOnceItem<K, T, CTX extends NonNullable<object>> {
|
|
|
873
822
|
* ```
|
|
874
823
|
*/
|
|
875
824
|
export class KeyedResolvOnce<
|
|
876
|
-
T
|
|
825
|
+
T,
|
|
826
|
+
//export type WithOptionalReset<V> = V extends ResetFunc ? V & ResetFunc : V;
|
|
827
|
+
// WithOptionalReset<PT>,
|
|
877
828
|
K = string,
|
|
878
829
|
CTX extends NonNullable<object> = object,
|
|
879
|
-
PT =
|
|
830
|
+
// PT = unknown,
|
|
880
831
|
> implements Omit<
|
|
881
832
|
// KeyedIf<ResolveOnce<T, KeyedNgItemWithoutValue<K, CTX>>, WithOptionalReset<T>, K>
|
|
882
833
|
KeyedIf<
|
|
@@ -888,7 +839,7 @@ export class KeyedResolvOnce<
|
|
|
888
839
|
"entries" | "forEach" | "onSet" | "onDelete" | "values" | "setParam"
|
|
889
840
|
> {
|
|
890
841
|
/** @internal */
|
|
891
|
-
readonly _keyed: KeyedNg<K, ResolveOnce<
|
|
842
|
+
readonly _keyed: KeyedNg<K, ResolveOnce<T, KeyedNgItemWithoutValue<K, CTX>>, CTX>;
|
|
892
843
|
|
|
893
844
|
/**
|
|
894
845
|
* Creates a new KeyedResolvOnce instance.
|
|
@@ -896,7 +847,7 @@ export class KeyedResolvOnce<
|
|
|
896
847
|
* @param kp - Configuration options (key2string, ctx, lru)
|
|
897
848
|
*/
|
|
898
849
|
constructor(kp: Partial<AddKeyedParam<K, T, CTX>> = {}) {
|
|
899
|
-
this._keyed = new KeyedNg({
|
|
850
|
+
this._keyed = new KeyedNg<K, ResolveOnce<T, KeyedNgItemWithoutValue<K, CTX>>, CTX>({
|
|
900
851
|
createValue: (
|
|
901
852
|
item: KeyedNgItem<K, ResolveOnce<T, KeyedNgItemWithoutValue<K, CTX>>, CTX>,
|
|
902
853
|
): ResolveOnce<T, KeyedNgItemWithoutValue<K, CTX>> => {
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Future } from "./future.js";
|
|
2
|
+
import { Option } from "./option.js";
|
|
3
|
+
import { ResolveOnce } from "./resolve-once.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Configuration options for WaitingForValue.
|
|
7
|
+
*/
|
|
8
|
+
export interface WaitingForValueProps<T> {
|
|
9
|
+
/**
|
|
10
|
+
* Optional preset value to initialize the WaitingForValue with.
|
|
11
|
+
* If provided and Some, the value is immediately available.
|
|
12
|
+
*/
|
|
13
|
+
readonly presetValue?: Option<T>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A utility for managing a value that may not be immediately available.
|
|
18
|
+
* Allows multiple callers to await the same value efficiently, with all
|
|
19
|
+
* waiters resolved when the value becomes available.
|
|
20
|
+
*
|
|
21
|
+
* @template T - The type of value being waited for
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const waiting = new WaitingForValue<string>();
|
|
26
|
+
*
|
|
27
|
+
* // Multiple callers can await the value
|
|
28
|
+
* const promise1 = waiting.waitValue();
|
|
29
|
+
* const promise2 = waiting.waitValue();
|
|
30
|
+
*
|
|
31
|
+
* // Set the value - all waiters are resolved
|
|
32
|
+
* waiting.setValue(Option.Some("hello"));
|
|
33
|
+
*
|
|
34
|
+
* // Both promises resolve to "hello"
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class WaitingForValue<T = void> {
|
|
38
|
+
#value!: Option<T>;
|
|
39
|
+
#waitFuture?: Future<T>;
|
|
40
|
+
#waitValue!: () => Promise<T>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new WaitingForValue instance.
|
|
44
|
+
*
|
|
45
|
+
* @param opts - Configuration options
|
|
46
|
+
*/
|
|
47
|
+
constructor(opts: WaitingForValueProps<T> = {}) {
|
|
48
|
+
this.init(opts.presetValue);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Initializes or reinitializes the WaitingForValue with an optional preset value.
|
|
53
|
+
* If a preset value is provided and is Some, the value is immediately available.
|
|
54
|
+
* Otherwise, sets up the waiting mechanism for future value resolution.
|
|
55
|
+
*
|
|
56
|
+
* @param presetValue - Optional initial value
|
|
57
|
+
*/
|
|
58
|
+
init(presetValue: Option<T> = Option.None()): void {
|
|
59
|
+
this.#value = presetValue;
|
|
60
|
+
if (presetValue.IsSome() && this.#waitFuture) {
|
|
61
|
+
this.#waitFuture.resolve(presetValue.unwrap());
|
|
62
|
+
}
|
|
63
|
+
if (this.#value.IsSome()) {
|
|
64
|
+
// console.log("setValue: 3-Some:", this.#value, value)
|
|
65
|
+
this.#waitFuture = undefined;
|
|
66
|
+
const resolveOnce = new ResolveOnce();
|
|
67
|
+
this.#waitValue = (): Promise<T> => resolveOnce.once(() => Promise.resolve(presetValue.unwrap()));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const myFuture = (this.#waitFuture = new Future<T>());
|
|
71
|
+
const resolveOnce = new ResolveOnce<T>();
|
|
72
|
+
this.#waitValue = (): Promise<T> => resolveOnce.once(async () => myFuture.asPromise());
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Sets the value and resolves all pending waiters.
|
|
77
|
+
* If called when no value exists, resolves the waiting Future.
|
|
78
|
+
* If called when a value already exists, updates the value and resets the waiting mechanism.
|
|
79
|
+
* Does nothing if the provided value is None.
|
|
80
|
+
*
|
|
81
|
+
* @param value - The value to set (wrapped in Option)
|
|
82
|
+
*/
|
|
83
|
+
setValue(value: Option<T>): void {
|
|
84
|
+
// console.log("setValue", value, this.#value)
|
|
85
|
+
switch (true) {
|
|
86
|
+
case this.#value.IsNone():
|
|
87
|
+
// console.log("setValue: 2")
|
|
88
|
+
this.#value = value;
|
|
89
|
+
if (value.IsSome()) {
|
|
90
|
+
this.#waitFuture?.resolve(value.unwrap());
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
case this.#value.IsSome():
|
|
94
|
+
this.init(value);
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
setError(err: Error): void {
|
|
100
|
+
if (this.#value.IsSome()) {
|
|
101
|
+
// ignore error if value is already set
|
|
102
|
+
// eslint-disable-next-line no-console
|
|
103
|
+
console.warn("WaitingForValue.setError called but value is already set, ignoring error", err);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.#waitFuture?.reject(err);
|
|
107
|
+
this.init();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Returns a promise that resolves when the value becomes available.
|
|
112
|
+
* If the value is already set, returns a promise that resolves immediately.
|
|
113
|
+
* Multiple calls to this method are safe and efficient - all callers share
|
|
114
|
+
* the same resolution logic thanks to ResolveOnce.
|
|
115
|
+
*
|
|
116
|
+
* @returns A promise that resolves to the value
|
|
117
|
+
*/
|
|
118
|
+
waitValue(): Promise<T> {
|
|
119
|
+
return this.#waitValue();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
value(): Option<T> {
|
|
123
|
+
return this.#value;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -2,32 +2,31 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const index_js_1 = require("./web-env/index.js");
|
|
4
4
|
const index_js_2 = require("./cf-env/index.js");
|
|
5
|
-
const runtime_js_1 = require("./runtime.js");
|
|
6
|
-
const sys_abstraction_js_1 = require("./sys-abstraction.js");
|
|
7
5
|
const index_js_3 = require("./node-env/index.js");
|
|
8
6
|
const index_js_4 = require("./deno-env/index.js");
|
|
9
7
|
const vitest_1 = require("vitest");
|
|
8
|
+
const cement_1 = require("@adviser/cement");
|
|
10
9
|
const add_cement_do_not_export_js_1 = require("./add-cement-do-not-export.js");
|
|
11
10
|
const abstractions = [];
|
|
12
|
-
if ((0,
|
|
11
|
+
if ((0, cement_1.runtimeFn)().isCFWorker) {
|
|
13
12
|
abstractions.push({
|
|
14
13
|
name: "CFSysAbstraction",
|
|
15
14
|
fn: (a) => (0, index_js_2.CFBasicSysAbstraction)((0, add_cement_do_not_export_js_1.addCement)(a)),
|
|
16
15
|
});
|
|
17
16
|
}
|
|
18
|
-
if ((0,
|
|
17
|
+
if ((0, cement_1.runtimeFn)().isNodeIsh) {
|
|
19
18
|
abstractions.push({
|
|
20
19
|
name: "NodeSysAbstraction",
|
|
21
20
|
fn: (a) => (0, index_js_3.NodeBasicSysAbstraction)((0, add_cement_do_not_export_js_1.addCement)(a)),
|
|
22
21
|
});
|
|
23
22
|
}
|
|
24
|
-
if ((0,
|
|
23
|
+
if ((0, cement_1.runtimeFn)().isDeno) {
|
|
25
24
|
abstractions.push({
|
|
26
25
|
name: "DenoSysAbstraction",
|
|
27
26
|
fn: (a) => (0, index_js_4.DenoBasicSysAbstraction)((0, add_cement_do_not_export_js_1.addCement)(a)),
|
|
28
27
|
});
|
|
29
28
|
}
|
|
30
|
-
if ((0,
|
|
29
|
+
if ((0, cement_1.runtimeFn)().isBrowser) {
|
|
31
30
|
abstractions.push({
|
|
32
31
|
name: "WebSysAbstraction",
|
|
33
32
|
fn: (a) => (0, index_js_1.WebBasicSysAbstraction)((0, add_cement_do_not_export_js_1.addCement)(a)),
|
|
@@ -42,20 +41,20 @@ for (const abstraction of abstractions) {
|
|
|
42
41
|
(0, vitest_1.expect)(id1).not.toEqual(id2);
|
|
43
42
|
});
|
|
44
43
|
(0, vitest_1.it)("IdService explict UUID", () => {
|
|
45
|
-
const sys = abstraction.fn({ IdMode:
|
|
44
|
+
const sys = abstraction.fn({ IdMode: cement_1.IDMode.UUID });
|
|
46
45
|
const id1 = sys.NextId();
|
|
47
46
|
const id2 = sys.NextId();
|
|
48
47
|
(0, vitest_1.expect)(id1).not.toEqual(id2);
|
|
49
48
|
});
|
|
50
49
|
(0, vitest_1.it)("IdService const", () => {
|
|
51
|
-
const sys = abstraction.fn({ IdMode:
|
|
50
|
+
const sys = abstraction.fn({ IdMode: cement_1.IDMode.CONST });
|
|
52
51
|
const id1 = sys.NextId();
|
|
53
52
|
const id2 = sys.NextId();
|
|
54
53
|
(0, vitest_1.expect)(id1).toEqual(id2);
|
|
55
54
|
});
|
|
56
55
|
(0, vitest_1.it)("IdService set", () => {
|
|
57
56
|
for (let i = 0; i < 10; i++) {
|
|
58
|
-
const sys = abstraction.fn({ IdMode:
|
|
57
|
+
const sys = abstraction.fn({ IdMode: cement_1.IDMode.STEP });
|
|
59
58
|
const id1 = sys.NextId();
|
|
60
59
|
const id2 = sys.NextId();
|
|
61
60
|
(0, vitest_1.expect)(id1).toEqual("STEPId-0");
|
|
@@ -69,25 +68,25 @@ for (const abstraction of abstractions) {
|
|
|
69
68
|
(0, vitest_1.expect)(sys.Time().TimeSince(start)).toBeGreaterThan(90);
|
|
70
69
|
});
|
|
71
70
|
(0, vitest_1.it)("time sleep const", async () => {
|
|
72
|
-
const sys = abstraction.fn({ TimeMode:
|
|
71
|
+
const sys = abstraction.fn({ TimeMode: cement_1.TimeMode.REAL });
|
|
73
72
|
const start = new Date();
|
|
74
73
|
await sys.Time().Sleep(100);
|
|
75
74
|
const end = new Date();
|
|
76
75
|
(0, vitest_1.expect)(end.getTime() - start.getTime()).toBeGreaterThan(90);
|
|
77
76
|
});
|
|
78
77
|
(0, vitest_1.it)("time sleep step", async () => {
|
|
79
|
-
const sys = abstraction.fn({ TimeMode:
|
|
78
|
+
const sys = abstraction.fn({ TimeMode: cement_1.TimeMode.STEP });
|
|
80
79
|
const start = sys.Time().Now();
|
|
81
80
|
await sys.Time().Sleep(86400500);
|
|
82
81
|
(0, vitest_1.expect)(sys.Time().Now().getTime() - start.getTime()).toEqual(86401500);
|
|
83
82
|
});
|
|
84
83
|
(0, vitest_1.it)("const random", () => {
|
|
85
|
-
const sys = abstraction.fn({ RandomMode:
|
|
84
|
+
const sys = abstraction.fn({ RandomMode: cement_1.RandomMode.CONST });
|
|
86
85
|
(0, vitest_1.expect)(sys.Random0ToValue(10)).toEqual(5);
|
|
87
86
|
(0, vitest_1.expect)(sys.Random0ToValue(10)).toEqual(5);
|
|
88
87
|
});
|
|
89
88
|
(0, vitest_1.it)("step random", () => {
|
|
90
|
-
const sys = abstraction.fn({ RandomMode:
|
|
89
|
+
const sys = abstraction.fn({ RandomMode: cement_1.RandomMode.STEP });
|
|
91
90
|
(0, vitest_1.expect)(sys.Random0ToValue(10000)).toEqual(1);
|
|
92
91
|
(0, vitest_1.expect)(sys.Random0ToValue(10000)).toEqual(2);
|
|
93
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-basic-sys-abstraction.test.js","sourceRoot":"","sources":["../../../src/base-basic-sys-abstraction.test.ts"],"names":[],"mappings":";;AAAA,iDAA4D;AAC5D,gDAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"base-basic-sys-abstraction.test.js","sourceRoot":"","sources":["../../../src/base-basic-sys-abstraction.test.ts"],"names":[],"mappings":"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"}
|