UNPKG

moleculer-mongobubble

Version:

A Moleculer module for generating CRUD APIs using MongoBubble.

105 lines 8.45 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseIdFromParams = exports.unmergeAndValidate = exports.validateParams = exports.unmergeParams = void 0; const ajv_1 = __importDefault(require("ajv")); const bson_1 = require("bson"); const moleculer_1 = require("moleculer"); const ejson_1 = require("./ejson"); function unmergeParams(ctx, { paramsProps = [], queryProps = [], bodyProps = [], mergeAdditionalProps = false, } = {}) { // This was necessary because moleculer-web has an issue that // `mergeParams` cannot be defined per action when using auto-aliases // https://github.com/moleculerjs/moleculer-web/issues/333 // Then, I were also forced to develop a new validation method // that would work with the unmerged params and also coerce types // TODO: remove this when the issue is fixed? // TODO: make another community module with those workarounds? if (ctx.params.params || ctx.params.query || ctx.params.body) { // already unmerged return ctx.params; } const params = {}; if (!queryProps?.length && !bodyProps?.length && !mergeAdditionalProps) { params.body = ctx.params; return params; } if (queryProps.length) { params.query = {}; queryProps.forEach((prop) => { params.query[prop] = ctx.params[prop]; }); } if (bodyProps.length) { params.body = {}; bodyProps.forEach((prop) => { params.body[prop] = ctx.params[prop]; }); } if (mergeAdditionalProps) { if (!params.body) { params.body = {}; } const additionalProps = Object .keys(ctx.params) .filter(prop => !queryProps.includes(prop) && !bodyProps.includes(prop) && !paramsProps.includes(prop)); additionalProps.forEach((prop) => { params.body[prop] = ctx.params[prop]; }); } return params; } exports.unmergeParams = unmergeParams; function validateParams(params, schema) { const ajv = new ajv_1.default({ coerceTypes: true, useDefaults: true, }); const validate = ajv.compile(schema); const valid = validate(params); if (!valid) { throw new moleculer_1.Errors.ValidationError(`Invalid params: ${ajv.errorsText(validate.errors)}`); } } exports.validateParams = validateParams; function unmergeAndValidate(ctx, schema, excludeParams = []) { const params = unmergeParams(ctx, { queryProps: schema.properties.query ? Object.keys(schema.properties.query?.properties || {}) : [], paramsProps: excludeParams, bodyProps: schema.properties.body ? Object.keys(schema.properties.body?.properties || {}) : [], mergeAdditionalProps: schema.properties.body ? schema.properties.body.additionalProperties : false, }); validateParams(params, schema); return params; } exports.unmergeAndValidate = unmergeAndValidate; function parseIdFromParams(ctx) { let id = ctx.params.id || ctx.params?.params?.id; if (!id) { throw new moleculer_1.Errors.ValidationError('Missing id in params'); } if (typeof id === 'object' && (0, ejson_1.isEJSON)(id)) { id = bson_1.EJSON.deserialize(id); } else if (typeof id === 'object' && id._id) { id = id._id; } else { id = decodeURIComponent(id); } if (ctx.service?.entityClass?.parseId) { id = ctx.service?.entityClass?.parseId(id); } return id; } exports.parseIdFromParams = parseIdFromParams; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBc0I7QUFDdEIsK0JBQXVDO0FBQ3ZDLHlDQUE0QztBQUM1QyxtQ0FBa0M7QUFHbEMsU0FBZ0IsYUFBYSxDQUFDLEdBQXNCLEVBQUUsRUFDcEQsV0FBVyxHQUFHLEVBQWMsRUFDNUIsVUFBVSxHQUFHLEVBQWMsRUFDM0IsU0FBUyxHQUFHLEVBQWMsRUFDMUIsb0JBQW9CLEdBQUcsS0FBSyxNQUMxQixFQUFFO0lBQ0osNkRBQTZEO0lBQzdELHFFQUFxRTtJQUNyRSwwREFBMEQ7SUFFMUQsOERBQThEO0lBQzlELGlFQUFpRTtJQUVqRSw2Q0FBNkM7SUFFN0MsOERBQThEO0lBRTlELElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3RCxtQkFBbUI7UUFDbkIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxFQUEyQyxDQUFDO0lBRTNELElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdkUsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNsQixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxH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