UNPKG

@opra/common

Version:
78 lines (77 loc) 2.44 kB
"use strict"; var _a, _b; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataTypeMap = void 0; const index_js_1 = require("../../helpers/index.js"); const constants_js_1 = require("../constants.js"); const data_type_js_1 = require("../data-type/data-type.js"); const kMap = Symbol.for('kMap'); const kCtorMap = Symbol.for('kCtorMap'); /** * @class DataTypeMap */ class DataTypeMap { constructor() { this[_a] = new index_js_1.ResponsiveMap(); this[_b] = new WeakMap(); } get size() { return this[kMap].size; } forEach(callbackFn, thisArg) { this[kMap].forEach(callbackFn, thisArg); } get(nameOrCtor) { let name = typeof nameOrCtor === 'string' ? nameOrCtor : this[kCtorMap].get(nameOrCtor); if (!name && typeof nameOrCtor === 'function') { const metadata = Reflect.getMetadata(constants_js_1.DATATYPE_METADATA, nameOrCtor); name = metadata?.name; } if (!name && typeof nameOrCtor === 'object') { const metadata = nameOrCtor[constants_js_1.DATATYPE_METADATA]; name = metadata?.name; } if (!name) return; const out = this[kMap].get(name); if (!out) return; if (typeof nameOrCtor === 'function' && out.kind === 'ComplexType') return out.ctor === nameOrCtor ? out : undefined; return out; } set(name, dataType) { this[kMap].set(name, dataType); if (dataType.ctor) this[kCtorMap].set(dataType.ctor, name); else if (dataType.instance) this[kCtorMap].set(dataType.instance, name); } has(nameOrCtor) { if (nameOrCtor instanceof data_type_js_1.DataType) return !!nameOrCtor.name && this[kMap].has(nameOrCtor.name); const name = typeof nameOrCtor === 'string' ? nameOrCtor : this[kCtorMap].get(nameOrCtor); return name ? this[kMap].has(name) : false; } keys() { return this[kMap].keys(); } values() { return this[kMap].values(); } entries() { return this[kMap].entries(); } sort(compareFn) { this[kMap].sort(compareFn); return this; } [(_a = kMap, _b = kCtorMap, Symbol.iterator)]() { return this[kMap][Symbol.iterator](); } } exports.DataTypeMap = DataTypeMap;