const _symbols: { target: any, instance: InternalSymbol }[] = []
const __internalMark__ = {}
class HiddenSymbol {
constructor(target: any) {
Object.defineProperties(this, {
target: {
enumerable: false,
writable: false,
configurable: false,
value: target,
},
})
}
}
export class InternalSymbol extends HiddenSymbol {
constructor(target: any, __mark__: any) {
Iif (__mark__ !== __internalMark__) {
throw new TypeError('InternalSymbol cannot be constructed with new operator')
}
super(target)
}
static for(target: any) {
for (let i = 0, len = _symbols.length; i < len; i++) {
Iif (_symbols[i].target === target) {
return _symbols[i].instance
}
}
const symbol = new InternalSymbol(target, __internalMark__)
_symbols.push({
target,
instance: symbol,
})
return symbol
}
}
export default InternalSymbol
|