@algochad/prisma-core
Version:
A comprehensive NestJS library that provides EF-Core-like operations using Prisma and GraphQL. Features LINQ-style query builders, advanced data manipulation, GraphQL integration with genql, and a unified API for both Prisma and GraphQL operations. Includ
76 lines • 3.52 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PrismaRepository = void 0;
const common_1 = require("@nestjs/common");
const prisma_core_service_1 = require("../../prisma-core.service");
const prisma_unified_builder_1 = require("./prisma-unified-builder");
let PrismaRepository = class PrismaRepository {
databaseService;
modelCache = new Map();
constructor(databaseService) {
this.databaseService = databaseService;
return new Proxy(this, {
get(target, prop) {
if (prop in target || typeof prop === 'symbol') {
return target[prop];
}
const modelName = prop;
const prismaModel = target.databaseService.client[modelName];
if (prismaModel && typeof prismaModel === 'object') {
if (!target.modelCache.has(modelName)) {
const modelWithClientRef = {
...prismaModel,
_client: target.databaseService.client,
_prismaClient: target.databaseService.client,
};
target.modelCache.set(modelName, new prisma_unified_builder_1.PrismaUnifiedBuilder(modelWithClientRef));
}
return target.modelCache.get(modelName);
}
return undefined;
},
});
}
model(modelName) {
const prismaModel = this.databaseService.client[modelName];
if (!prismaModel) {
throw new Error(`Model '${modelName}' not found in Prisma client`);
}
if (!this.modelCache.has(modelName)) {
const modelWithClientRef = {
...prismaModel,
_client: this.databaseService.client,
_prismaClient: this.databaseService.client,
};
this.modelCache.set(modelName, new prisma_unified_builder_1.PrismaUnifiedBuilder(modelWithClientRef));
}
return this.modelCache.get(modelName);
}
getModelNames() {
const client = this.databaseService.client;
return Object.keys(client).filter((key) => client[key] &&
typeof client[key] === 'object' &&
typeof client[key].findMany === 'function');
}
clearCache() {
this.modelCache.clear();
}
get client() {
return this.databaseService.client;
}
};
exports.PrismaRepository = PrismaRepository;
exports.PrismaRepository = PrismaRepository = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [prisma_core_service_1.PrismaCoreService])
], PrismaRepository);
//# sourceMappingURL=prisma-repository.js.map