@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
69 lines • 2.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LinqQueryContext = void 0;
exports.withContext = withContext;
const linq_expression_parser_1 = require("./linq-expression-parser");
class LinqQueryContext {
context;
constructor(context = {}) {
this.context = context;
}
setVariable(name, value) {
this.context[name] = value;
}
getVariable(name) {
return this.context[name];
}
parseLambdaWithContext(lambdaFn) {
let result = linq_expression_parser_1.LinqExpressionParser.parseLambdaExpression(lambdaFn);
if (!result) {
const fnString = lambdaFn.toString();
const variables = linq_expression_parser_1.LinqExpressionParser.extractVariables(lambdaFn);
const missingVars = variables.filter((varName) => !(varName in this.context));
if (missingVars.length === 0) {
result = this.parseWithVariableSubstitution(fnString, variables);
}
}
return result;
}
parseWithVariableSubstitution(fnString, variables) {
let modifiedFnString = fnString;
for (const varName of variables) {
const value = this.context[varName];
let replacement;
if (typeof value === 'string') {
replacement = `"${value.replace(/"/g, '\\"')}"`;
}
else if (typeof value === 'number' ||
typeof value === 'boolean') {
replacement = String(value);
}
else {
replacement = JSON.stringify(value);
}
const regex = new RegExp(`\\b${varName}\\b(?!\\.)`, 'g');
modifiedFnString = modifiedFnString.replace(regex, replacement);
}
try {
const modifiedFn = new Function('return ' + modifiedFnString)();
return linq_expression_parser_1.LinqExpressionParser.parseLambdaExpression(modifiedFn);
}
catch (error) {
console.warn('Failed to parse lambda with variable substitution:', error);
return null;
}
}
static fromScope(variables) {
return new LinqQueryContext(variables);
}
}
exports.LinqQueryContext = LinqQueryContext;
function withContext(variables) {
return {
where: function (predicate) {
const context = LinqQueryContext.fromScope(variables);
return context.parseLambdaWithContext(predicate);
},
};
}
//# sourceMappingURL=linq-query-context.js.map