UNPKG

nukak

Version:

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

33 lines 4.65 kB
const metadataKey = Symbol('InjectQuerier'); export function InjectQuerier() { return (proto, key, index) => { if (!proto[metadataKey]) { proto[metadataKey] = new WeakMap(); } if (!proto[metadataKey].has(proto.constructor)) { proto[metadataKey].set(proto.constructor, {}); } const meta = proto[metadataKey].get(proto.constructor); const isAlreadyInjected = key in meta; if (isAlreadyInjected) { throw new TypeError(`@InjectQuerier() can only appears once in '${proto.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0UXVlcmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVyaWVyL2RlY29yYXRvci9pbmplY3RRdWVyaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUU1QyxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQUMsS0FBNkIsRUFBRSxHQUFXLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0saUJBQWlCLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztRQUV0QyxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLFNBQVMsQ0FBQyw4Q0FBOEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFJLE9BQWdCLEVBQUUsR0FBVztJQUN0RSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBRTlCLE9BQU8sS0FBSyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4RCxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQWEsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXksIFByaW1pdGl2ZSwgVHlwZSB9IGZyb20gJy4uLy4uL3R5cGUvaW5kZXguanMnO1xuXG5jb25zdCBtZXRhZGF0YUtleSA9IFN5bWJvbCgnSW5qZWN0UXVlcmllcicpO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0UXVlcmllcigpIHtcbiAgcmV0dXJuIChwcm90bzogUmVjb3JkPFByaW1pdGl2ZSwgYW55Piwga2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoIXByb3RvW21ldGFkYXRhS2V5XSkge1xuICAgICAgcHJvdG9bbWV0YWRhdGFLZXldID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb3RvW21ldGFkYXRhS2V5XS5oYXMocHJvdG8uY29uc3RydWN0b3IpKSB7XG4gICAgICBwcm90b1ttZXRhZGF0YUtleV0uc2V0KHByb3RvLmNvbnN0cnVjdG9yLCB7fSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YSA9IHByb3RvW21ldGFkYXRhS2V5XS5nZXQocHJvdG8uY29uc3RydWN0b3IpO1xuICAgIGNvbnN0IGlzQWxyZWFkeUluamVjdGVkID0ga2V5IGluIG1ldGE7XG5cbiAgICBpZiAoaXNBbHJlYWR5SW5qZWN0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEBJbmplY3RRdWVyaWVyKCkgY2FuIG9ubHkgYXBwZWFycyBvbmNlIGluICcke3Byb3RvLmNvbnN0cnVjdG9yLm5hbWV9LiR7a2V5fSd9YCk7XG4gICAgfVxuXG4gICAgbWV0YVtrZXldID0gaW5kZXg7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmplY3RlZFF1ZXJpZXJJbmRleDxTPihzZXJ2aWNlOiBUeXBlPFM+LCBrZXk6IEtleTxTPikge1xuICBsZXQgcHJvdG8gPSBzZXJ2aWNlLnByb3RvdHlwZTtcblxuICB3aGlsZSAocHJvdG8uY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGNvbnN0IG1ldGEgPSBwcm90b1ttZXRhZGF0YUtleV0/LmdldChwcm90by5jb25zdHJ1Y3Rvcik7XG5cbiAgICBpZiAobWV0YSAmJiBrZXkgaW4gbWV0YSkge1xuICAgICAgcmV0dXJuIG1ldGFba2V5XTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pIGFzIEtleTxTPltdO1xuICAgIGNvbnN0IGlzT3duS2V5ID0ga2V5cy5pbmNsdWRlcyhrZXkpO1xuXG4gICAgaWYgKGlzT3duS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG59XG4iXX0=