UNPKG

@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
"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