UNPKG

@hazae41/box

Version:

Rust-like Box and similar objects for TypeScript

1 lines 3.36 kB
{"version":3,"file":"index.cjs","sources":["../../../../../src/mods/disposer/index.ts"],"sourcesContent":["import { AsyncDeferred, Deferred } from \"mods/deferred/index.js\"\n\nexport class Disposer<T> implements Disposable {\n\n constructor(\n readonly value: T,\n readonly clean: Deferred\n ) { }\n\n static wrap<T>(value: T, clean: (value: T) => void = () => { }) {\n return new Disposer(value, new Deferred(() => clean(value)))\n }\n\n static from<T>(value: T & Disposable) {\n return new Disposer(value, new Deferred(() => value[Symbol.dispose]()))\n }\n\n [Symbol.dispose]() {\n this.clean[Symbol.dispose]()\n }\n\n async [Symbol.asyncDispose]() {\n this[Symbol.dispose]()\n }\n\n get() {\n return this.value\n }\n\n async await<T>(this: Disposer<Promise<T>>) {\n using _ = this.clean\n return await this.get()\n }\n\n}\n\nexport class AsyncDisposer<T> implements AsyncDisposable {\n\n constructor(\n readonly value: T,\n readonly clean: AsyncDeferred\n ) { }\n\n static wrap<T>(value: T, clean: (value: T) => PromiseLike<void> = async () => { }) {\n return new AsyncDisposer(value, new AsyncDeferred(() => clean(value)))\n }\n\n static from<T>(value: T & AsyncDisposable) {\n return new AsyncDisposer(value, new AsyncDeferred(() => value[Symbol.asyncDispose]()))\n }\n\n async [Symbol.asyncDispose]() {\n await this.clean[Symbol.asyncDispose]()\n }\n\n get() {\n return this.value\n }\n\n async await<T>(this: AsyncDisposer<Promise<T>>) {\n await using _ = this.clean\n return await this.get()\n }\n\n}\n"],"names":["Deferred","__addDisposableResource","AsyncDeferred"],"mappings":";;;;;MAEa,QAAQ,CAAA;AAGR,IAAA,KAAA,CAAA;AACA,IAAA,KAAA,CAAA;IAFX,WACW,CAAA,KAAQ,EACR,KAAe,EAAA;QADf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAG;QACR,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;KACrB;IAEL,OAAO,IAAI,CAAI,KAAQ,EAAE,KAA4B,GAAA,MAAK,GAAI,EAAA;AAC5D,QAAA,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAIA,cAAQ,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KAC7D;IAED,OAAO,IAAI,CAAI,KAAqB,EAAA;QAClC,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAIA,cAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;KACxE;IAED,CAAC,MAAM,CAAC,OAAO,CAAC,GAAA;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;KAC7B;AAED,IAAA,OAAO,MAAM,CAAC,YAAY,CAAC,GAAA;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;KACvB;IAED,GAAG,GAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;KAClB;AAED,IAAA,MAAM,KAAK,GAAA;;;AACT,YAAA,MAAM,CAAC,GAAGC,iCAAA,CAAA,KAAA,EAAA,IAAI,CAAC,KAAK,QAAA,CAAA;AACpB,YAAA,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;;;;;;;;;AACxB,KAAA;AAEF,CAAA;MAEY,aAAa,CAAA;AAGb,IAAA,KAAA,CAAA;AACA,IAAA,KAAA,CAAA;IAFX,WACW,CAAA,KAAQ,EACR,KAAoB,EAAA;QADpB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAG;QACR,IAAK,CAAA,KAAA,GAAL,KAAK,CAAe;KAC1B;IAEL,OAAO,IAAI,CAAI,KAAQ,EAAE,QAAyC,YAAW,GAAI,EAAA;AAC/E,QAAA,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE,IAAIC,mBAAa,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACvE;IAED,OAAO,IAAI,CAAI,KAA0B,EAAA;QACvC,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE,IAAIA,mBAAa,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;KACvF;AAED,IAAA,OAAO,MAAM,CAAC,YAAY,CAAC,GAAA;QACzB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAA;KACxC;IAED,GAAG,GAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;KAClB;AAED,IAAA,MAAM,KAAK,GAAA;;;AACT,YAAA,MAAY,CAAC,GAAGD,iCAAA,CAAA,KAAA,EAAA,IAAI,CAAC,KAAK,OAAA,CAAA;AAC1B,YAAA,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;;;;;;;;;;;AACxB,KAAA;AAEF;;;;;"}