@hazae41/box
Version:
Rust-like Box and similar objects for TypeScript
64 lines (60 loc) • 1.32 kB
JavaScript
;
var index = require('../deferred/index.cjs');
/**
* A simple reference
*/
class Ref {
value;
clean;
constructor(value, clean) {
this.value = value;
this.clean = clean;
}
static wrap(value) {
return new Ref(value, value);
}
static from(value) {
return new Ref(value.get(), value);
}
static with(value, clean) {
return new Ref(value, new index.Deferred(() => clean(value)));
}
[Symbol.dispose]() {
this.clean[Symbol.dispose]();
}
async [Symbol.asyncDispose]() {
this[Symbol.dispose]();
}
get() {
return this.value;
}
}
/**
* A simple reference
*/
class AsyncRef {
value;
clean;
constructor(value, clean) {
this.value = value;
this.clean = clean;
}
static wrap(value) {
return new AsyncRef(value, value);
}
static from(value) {
return new AsyncRef(value.get(), value);
}
static with(value, clean) {
return new AsyncRef(value, new index.Deferred(() => clean(value)));
}
async [Symbol.asyncDispose]() {
await this.clean[Symbol.asyncDispose]();
}
get() {
return this.value;
}
}
exports.AsyncRef = AsyncRef;
exports.Ref = Ref;
//# sourceMappingURL=index.cjs.map