mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-23 06:10:02 +08:00
- Store checked values in native collections while preserving supported object identities and JavaScript key equality. - Support collection iteration and reject reference conversions that would copy or adapt stored objects.
38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
// Bundled OpenTUI stores renderables by number without type arguments.
|
|
class Renderable {
|
|
static next = 1;
|
|
static byNumber = new Map();
|
|
num;
|
|
constructor() {
|
|
this.num = Renderable.next++;
|
|
Renderable.byNumber.set(this.num, this);
|
|
}
|
|
destroy() {
|
|
Renderable.byNumber.delete(this.num);
|
|
}
|
|
}
|
|
|
|
const first = new Renderable();
|
|
const second = new Renderable();
|
|
console.log(first.num, second.num, Renderable.byNumber.size);
|
|
console.log(Renderable.byNumber.get(first.num) === first);
|
|
first.destroy();
|
|
console.log(Renderable.byNumber.has(first.num), Renderable.byNumber.get(second.num) === second);
|
|
second.destroy();
|
|
console.log(Renderable.byNumber.size, Renderable.byNumber.get(123) === undefined);
|
|
|
|
class Services {
|
|
registered = new Set();
|
|
add(value) { this.registered.add(value); }
|
|
remove(value) { return this.registered.delete(value); }
|
|
has(value) { return this.registered.has(value); }
|
|
}
|
|
const services = new Services();
|
|
services.add(first);
|
|
services.add(first);
|
|
services.add(second);
|
|
console.log(services.registered.size, services.has(first), services.has(second));
|
|
console.log(services.remove(first), services.remove(first), services.has(second));
|
|
services.registered.clear();
|
|
console.log(services.registered.size);
|