UNPKG

nukak

Version:

flexible and efficient ORM, with declarative JSON syntax and smart type-safety

34 lines 4.65 kB
const metadataKey = Symbol('InjectQuerier'); export function InjectQuerier() { return (proto, key, index) => { const { constructor } = proto; if (!proto[metadataKey]) { proto[metadataKey] = new WeakMap(); } if (!proto[metadataKey].has(constructor)) { proto[metadataKey].set(constructor, {}); } const meta = proto[metadataKey].get(constructor); const isAlreadyInjected = key in meta; if (isAlreadyInjected) { throw new TypeError(`@InjectQuerier() can only appears once in '${constructor.name}.${key}'}`); } meta[key] = index; }; } export function getInjectedQuerierIndex(service, key) { let proto = service.prototype; while (proto.constructor !== Object) { const meta = proto[metadataKey]?.get(proto.constructor); if (meta && key in meta) { return meta[key]; } const keys = Object.getOwnPropertyNames(proto); const isOwnKey = keys.includes(key); if (isOwnKey) { return; } proto = Object.getPrototypeOf(proto); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0UXVlcmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVyaWVyL2RlY29yYXRvci9pbmplY3RRdWVyaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUU1QyxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxLQUFhLEVBQUUsRUFBRTtRQUNuRCxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRTlCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFFdEMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxTQUFTLENBQUMsOENBQThDLFdBQVcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFJLE9BQWdCLEVBQUUsR0FBVztJQUN0RSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBRTlCLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4RCxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQWEsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXksIFR5cGUgfSBmcm9tICcuLi8uLi90eXBlL2luZGV4LmpzJztcblxuY29uc3QgbWV0YWRhdGFLZXkgPSBTeW1ib2woJ0luamVjdFF1ZXJpZXInKTtcblxuZXhwb3J0IGZ1bmN0aW9uIEluamVjdFF1ZXJpZXIoKSB7XG4gIHJldHVybiAocHJvdG86IG9iamVjdCwga2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yIH0gPSBwcm90bztcblxuICAgIGlmICghcHJvdG9bbWV0YWRhdGFLZXldKSB7XG4gICAgICBwcm90b1ttZXRhZGF0YUtleV0gPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cblxuICAgIGlmICghcHJvdG9bbWV0YWRhdGFLZXldLmhhcyhjb25zdHJ1Y3RvcikpIHtcbiAgICAgIHByb3RvW21ldGFkYXRhS2V5XS5zZXQoY29uc3RydWN0b3IsIHt9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhID0gcHJvdG9bbWV0YWRhdGFLZXldLmdldChjb25zdHJ1Y3Rvcik7XG4gICAgY29uc3QgaXNBbHJlYWR5SW5qZWN0ZWQgPSBrZXkgaW4gbWV0YTtcblxuICAgIGlmIChpc0FscmVhZHlJbmplY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQEluamVjdFF1ZXJpZXIoKSBjYW4gb25seSBhcHBlYXJzIG9uY2UgaW4gJyR7Y29uc3RydWN0b3IubmFtZX0uJHtrZXl9J31gKTtcbiAgICB9XG5cbiAgICBtZXRhW2tleV0gPSBpbmRleDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluamVjdGVkUXVlcmllckluZGV4PFM+KHNlcnZpY2U6IFR5cGU8Uz4sIGtleTogS2V5PFM+KSB7XG4gIGxldCBwcm90byA9IHNlcnZpY2UucHJvdG90eXBlO1xuXG4gIHdoaWxlIChwcm90by5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgY29uc3QgbWV0YSA9IHByb3RvW21ldGFkYXRhS2V5XT8uZ2V0KHByb3RvLmNvbnN0cnVjdG9yKTtcblxuICAgIGlmIChtZXRhICYmIGtleSBpbiBtZXRhKSB7XG4gICAgICByZXR1cm4gbWV0YVtrZXldO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykgYXMgS2V5PFM+W107XG4gICAgY29uc3QgaXNPd25LZXkgPSBrZXlzLmluY2x1ZGVzKGtleSk7XG5cbiAgICBpZiAoaXNPd25LZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbn1cbiJdfQ==