reactronic
Version:
Reactronic - Transactional Reactive State Management
27 lines (26 loc) • 964 B
JavaScript
import { Log, misuse } from "./Dbg.js";
export class Sealant {
static seal(collection, sealedType, typeName, member) {
let result = collection;
const createCopy = result[Sealant.CreateCopy];
if (createCopy)
result = createCopy.call(result);
if (Log.isOn && Log.opt.write)
Log.write("║", " ", `${typeName}.${member.toString()} - collection is sealed`);
Object.setPrototypeOf(result, sealedType);
Object.freeze(result);
return result;
}
static toMutable(collection) {
const a = collection;
const createCopy = a[Sealant.CreateCopy];
if (createCopy)
collection = createCopy.call(collection);
return collection;
}
static error(collection) {
return misuse("use toMutable to create mutable copy of sealed collection");
}
}
Sealant.SealedType = Symbol("rxSealedType");
Sealant.CreateCopy = Symbol("rxCreateCopy");