@httpc/kit
Version:
httpc toolbox for building function-based API with minimal code and end-to-end type safety
46 lines (45 loc) • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.authenticated = exports.noCall = exports.call = exports.decoratorMetadata = exports.decoratorMiddleware = void 0;
const auth_1 = require("../auth");
function assertReflectMetadata() {
if (typeof Reflect.defineMetadata === "undefined") {
throw new Error("Missing 'reflect-metadata' dependency");
}
}
function metadataSet(key, value) {
return (target, property) => {
assertReflectMetadata();
return property
? Reflect.defineMetadata(key, value, target, property)
: Reflect.defineMetadata(key, value, target);
};
}
function metadataPush(key, item) {
return (target, property) => {
assertReflectMetadata();
const metadata = (property
? Reflect.getMetadata(key, target, property)
: Reflect.getMetadata(key, target)) || [];
metadata.push(item);
return property
? Reflect.defineMetadata(key, metadata, target, property)
: Reflect.defineMetadata(key, metadata, target);
};
}
function decoratorMiddleware(factory) {
return (...args) => metadataPush("CALL_MIDDLEWARE", factory(...args));
}
exports.decoratorMiddleware = decoratorMiddleware;
function decoratorMetadata(key, value) {
return (...args) => {
if (typeof key === "function") {
({ key, value } = key(...args));
}
return metadataSet(key, value);
};
}
exports.decoratorMetadata = decoratorMetadata;
exports.call = decoratorMetadata((access = "write") => ({ key: "CALL_ACCESS", value: access }));
exports.noCall = decoratorMetadata("CALL_ACCESS", false);
exports.authenticated = decoratorMiddleware(auth_1.Authenticated);