UNPKG

@conte-ltd/trpc-shield

Version:

tRPC permissions as another layer of abstraction!

54 lines 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateMiddlewareFromRuleTree = void 0; /** * * @param ruleTree * @param options * * Generates middleware from given rules. * */ function generateMiddlewareFromRuleTree(ruleTree, options) { return ({ next, ctx, type, path, input, rawInput, }) => { var _a, _b; const opWithPath = path.split('.'); let rule; if (opWithPath.length > 1) { const opNames = opWithPath.reduce((prev, current, index) => { if (index === 0) { return [current, `${current}.*`]; } else if (index === opWithPath.length - 1) { const [prevHead, ...prevTail] = prev; return [`${prevHead}.${current}`, ...prevTail, `*.${current}`]; } else { const [prevHead, ...prevTail] = prev; return [`${prevHead}.${current}`, ...prevTail, `*.${current}.*`]; } }, []); opNames.push('*'); for (const opName of opNames) { rule = (_a = ruleTree === null || ruleTree === void 0 ? void 0 : ruleTree[type]) === null || _a === void 0 ? void 0 : _a[opName]; if (rule !== undefined) { break; } } } else { const opName = opWithPath[0]; rule = (_b = ruleTree === null || ruleTree === void 0 ? void 0 : ruleTree[type]) === null || _b === void 0 ? void 0 : _b[opName]; } if (rule) { return rule.resolve(ctx, type, path, input, rawInput, options).then((result) => { if (!result) throw options.fallbackError; return next(); }); } return next(); }; } exports.generateMiddlewareFromRuleTree = generateMiddlewareFromRuleTree; //# sourceMappingURL=generator.js.map