mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-02 08:35:07 +08:00
* feat: preserve class and child handles through unknown * fix: hide private fields from unknown views
24 lines
646 B
JavaScript
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);
|