nestjs-prisma-base
Version:
A comprehensive NestJS package providing base classes, utilities, and decorators for building CRUD APIs with Prisma ORM integration, featuring pagination, search, filtering, relation loading, configurable DTOs, and modular composition capabilities.
80 lines • 3.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ENDPOINT_DISABLED_KEY = exports.ENDPOINT_ENABLED_KEY = exports.DISABLED_ENDPOINTS_KEY = exports.ENABLED_ENDPOINTS_KEY = exports.EndpointType = void 0;
exports.EnableEndpoint = EnableEndpoint;
exports.DisableEndpoint = DisableEndpoint;
exports.EnableAllEndpoints = EnableAllEndpoints;
exports.isEndpointEnabled = isEndpointEnabled;
exports.ApiExcludeDisabledEndpoint = ApiExcludeDisabledEndpoint;
require("reflect-metadata");
const swagger_1 = require("@nestjs/swagger");
var EndpointType;
(function (EndpointType) {
EndpointType["FIND_ALL"] = "findAll";
EndpointType["FIND_ONE"] = "findOne";
EndpointType["CREATE"] = "create";
EndpointType["UPDATE"] = "update";
EndpointType["REMOVE"] = "remove";
})(EndpointType || (exports.EndpointType = EndpointType = {}));
exports.ENABLED_ENDPOINTS_KEY = 'endpoints:enabled';
exports.DISABLED_ENDPOINTS_KEY = 'endpoints:disabled';
exports.ENDPOINT_ENABLED_KEY = 'endpoint:enabled';
exports.ENDPOINT_DISABLED_KEY = 'endpoint:disabled';
function EnableEndpoint(endpointName) {
return function (target, propertyKey, descriptor) {
if (propertyKey && descriptor) {
Reflect.defineMetadata(exports.ENDPOINT_ENABLED_KEY, true, target, propertyKey);
return descriptor;
}
const enabledEndpoints = Reflect.getMetadata(exports.ENABLED_ENDPOINTS_KEY, target) || [];
enabledEndpoints.push(endpointName);
Reflect.defineMetadata(exports.ENABLED_ENDPOINTS_KEY, enabledEndpoints, target);
return target;
};
}
function DisableEndpoint(endpointName) {
return function (target, propertyKey, descriptor) {
if (propertyKey && descriptor) {
Reflect.defineMetadata(exports.ENDPOINT_DISABLED_KEY, true, target, propertyKey);
return descriptor;
}
const disabledEndpoints = Reflect.getMetadata(exports.DISABLED_ENDPOINTS_KEY, target) || [];
disabledEndpoints.push(endpointName);
Reflect.defineMetadata(exports.DISABLED_ENDPOINTS_KEY, disabledEndpoints, target);
return target;
};
}
function EnableAllEndpoints() {
return EnableEndpoint('*');
}
function isEndpointEnabled(target, endpointName) {
if (Reflect.getMetadata(exports.ENDPOINT_DISABLED_KEY, target, endpointName)) {
return false;
}
if (Reflect.getMetadata(exports.ENDPOINT_ENABLED_KEY, target, endpointName)) {
return true;
}
const enabledEndpoints = Reflect.getMetadata(exports.ENABLED_ENDPOINTS_KEY, target.constructor) || [];
if (enabledEndpoints.includes(endpointName) || enabledEndpoints.includes('*')) {
const disabledEndpoints = Reflect.getMetadata(exports.DISABLED_ENDPOINTS_KEY, target.constructor) || [];
return !disabledEndpoints.includes(endpointName);
}
return false;
}
function ApiExcludeDisabledEndpoint(endpointName) {
return (target, propertyKey, descriptor) => {
Reflect.defineMetadata('api:shouldExclude', endpointName, target, propertyKey.toString());
const originalMethod = descriptor.value;
descriptor.value = function (...args) {
const thisInstance = this;
const methodName = propertyKey.toString();
const endpointToCheck = Reflect.getMetadata('api:shouldExclude', target, methodName);
if (!isEndpointEnabled(thisInstance, endpointToCheck)) {
(0, swagger_1.ApiExcludeEndpoint)()(target, methodName, descriptor);
}
return originalMethod.apply(this, args);
};
return descriptor;
};
}
//# sourceMappingURL=endpoint.decorator.js.map