Files
scriptc/tests/corpus/2878-class-private-unknown.cjs
Chris Tate 280fe1a8da feat: preserve class and child handles through unknown (#331)
* feat: preserve class and child handles through unknown

* fix: hide private fields from unknown views
2026-09-15 19:30:22 -05:00

24 lines
646 B
JavaScript

// ECMAScript #private slots are native-layout details, never enumerable own
// properties. A checked-dynamic write whose string key begins with '#' cannot
// read or overwrite the slot; ordinary class fields remain live.
class Vault {
#secret = "original";
publicValue = "before";
reveal() {
return this.#secret;
}
}
const vault = new Vault();
const opaque = /** @type {unknown} */ (vault);
const view = opaque;
console.log("keys:", Object.keys(view).join(","));
console.log("json before:", JSON.stringify(view));
view["#secret"] = "hacked";
view.publicValue = "after";
console.log("state:", vault.reveal(), vault.publicValue);