@godspeedsystems/prisma-deterministic-search-field-encryption
Version:
Transparent and customizable field-level encryption at rest for Prisma based on prisma-field-encryption package
57 lines (56 loc) • 2.03 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.visitOutputTargetFields = exports.visitInputTargetFields = void 0;
const traverseTree_1 = require("./traverseTree");
const makeVisitor = (models, visitor) => function visitNode(state, { key, type, node, path }) {
const model = models[state.currentModel];
if (!model || !key) {
return state;
}
if (type === 'string' && key in model.fields) {
const targetField = {
field: key,
model: state.currentModel,
fieldConfig: model.fields[key],
path: path.join('.'),
value: node
};
visitor(targetField);
return state;
}
// Special case: {field}.set for updates
if (type === 'object' &&
key in model.fields &&
typeof (node === null || node === void 0 ? void 0 : node.set) === 'string') {
const value = node.set;
const targetField = {
field: key,
model: state.currentModel,
fieldConfig: model.fields[key],
path: path.join('.') + '.set',
value
};
visitor(targetField);
return state;
}
if (['object', 'array'].includes(type) && key in model.connections) {
// Follow the connection: from there on downwards, we're changing models.
// Return a new object to break from existing references.
return {
currentModel: model.connections[key].modelName
};
}
return state;
};
function visitInputTargetFields(params, models, visitor) {
(0, traverseTree_1.traverseTree)(params.args, makeVisitor(models, visitor), {
currentModel: params.model
});
}
exports.visitInputTargetFields = visitInputTargetFields;
function visitOutputTargetFields(params, result, models, visitor) {
(0, traverseTree_1.traverseTree)(result, makeVisitor(models, visitor), {
currentModel: params.model
});
}
exports.visitOutputTargetFields = visitOutputTargetFields;
;