@geekbears/gb-mongoose-keywords-plugin
Version:
A Mongoose plugin for keyword generation
62 lines • 3.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateOptions = void 0;
const lodash_1 = require("lodash");
const constants_1 = require("../constants");
/**
* Validate the provided options by checking if specified paths and virtuals exist. Handle default omitted words
* @param schema the source schema
* @param options the provided options
* @returns a validated set of options with defaults applied
*/
const validateOptions = (schema, options) => {
if ((0, lodash_1.isNil)(options))
throw new Error(`KeywordsMiddleware: Error setting up middleware. No options provided`);
if (!(0, lodash_1.isNil)(options.paths)) {
if (!(0, lodash_1.isArray)(options.paths))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Paths option must be an array`);
for (const field of options.paths) {
if (!(0, lodash_1.isString)(field))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Paths must only contain strings`);
if (!(0, lodash_1.has)(schema.paths, field))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Path ${field} not present in schema`);
}
}
if (!(0, lodash_1.isNil)(options.virtuals)) {
if (!(0, lodash_1.isObject)(options.virtuals))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Virtuals option must be an object`);
for (const virtual of (0, lodash_1.keys)(options.virtuals)) {
if (!(0, lodash_1.isString)(virtual))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Virtuals must only contain strings`);
if (!(0, lodash_1.has)(schema.virtuals, virtual))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Virtual ${virtual} not present in schema`);
}
}
if ((0, lodash_1.isNil)(options.paths) && (0, lodash_1.isNil)(options.virtuals))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Must provide at least one of the following options: paths, virtuals`);
if (!(0, lodash_1.isNil)(options.logging)) {
if (!(0, lodash_1.isBoolean)(options.logging))
throw new Error(`KeywordsMiddleware: Error setting up middleware. Logging must be boolean`);
}
if (!(0, lodash_1.isNil)(options.onNew)) {
if (!(0, lodash_1.isBoolean)(options.onNew))
throw new Error(`KeywordsMiddleware: Error setting up middleware. OnNew must be boolean`);
}
if (!(0, lodash_1.isNil)(options.onUpdate)) {
if (!(0, lodash_1.isBoolean)(options.onUpdate))
throw new Error(`KeywordsMiddleware: Error setting up middleware. OnUpdate must be boolean`);
}
if (!(0, lodash_1.isNil)(options.onNew) && !(0, lodash_1.isNil)(options.onUpdate)) {
if (!options.onNew && !options.onUpdate)
console.warn(`KeywordsMiddleware: Warning. Keywords are disabled for both operation hooks (onNew, onUpdate)`);
}
const paths = (0, lodash_1.isNil)(options.paths) ? [] : [...options.paths];
const virtuals = (0, lodash_1.isNil)(options.virtuals) ? {} : { ...options.virtuals };
const omit = (0, lodash_1.isNil)(options.omit) || (0, lodash_1.isEmpty)(options.omit) ? constants_1.DEFAULT_KEYWORD_OPTIONS.omit : [...options.omit];
const logging = (0, lodash_1.isNil)(options.logging) ? constants_1.DEFAULT_KEYWORD_OPTIONS.logging : options.logging;
const onNew = (0, lodash_1.isNil)(options.onNew) ? constants_1.DEFAULT_KEYWORD_OPTIONS.onNew : options.onNew;
const onUpdate = (0, lodash_1.isNil)(options.onUpdate) ? constants_1.DEFAULT_KEYWORD_OPTIONS.onUpdate : options.onUpdate;
return { paths, virtuals, omit, logging, onNew, onUpdate };
};
exports.validateOptions = validateOptions;
//# sourceMappingURL=validate-options.helper.js.map