nukak
Version:
flexible and efficient ORM, with declarative JSON syntax and smart type-safety
34 lines • 4.65 kB
JavaScript
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==