Files
adopt-a-street/node_modules/mongoose/lib/helpers/schema/applyPlugins.js
William Valentin 5aca521c52 feat: Complete CouchDB migration and Docker configuration
- Add comprehensive CouchDB setup and configuration
- Update Docker files for CouchDB compatibility
- Create Kubernetes manifests for CouchDB deployment
- Add migration scripts and documentation
- Update seeding scripts to support both CouchDB and MongoDB
- Add docker-compose for local development
- Create comprehensive setup and deployment guides

🤖 Generated with [AI Assistant]

Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
2025-11-01 13:32:39 -07:00

56 lines
1.5 KiB
JavaScript

'use strict';
module.exports = function applyPlugins(schema, plugins, options, cacheKey) {
if (schema[cacheKey]) {
return;
}
schema[cacheKey] = true;
if (!options || !options.skipTopLevel) {
let pluginTags = null;
for (const plugin of plugins) {
const tags = plugin[1] == null ? null : plugin[1].tags;
if (!Array.isArray(tags)) {
schema.plugin(plugin[0], plugin[1]);
continue;
}
pluginTags = pluginTags || new Set(schema.options.pluginTags || []);
if (!tags.find(tag => pluginTags.has(tag))) {
continue;
}
schema.plugin(plugin[0], plugin[1]);
}
}
options = Object.assign({}, options);
delete options.skipTopLevel;
if (options.applyPluginsToChildSchemas !== false) {
for (const path of Object.keys(schema.paths)) {
const type = schema.paths[path];
if (type.schema != null) {
applyPlugins(type.schema, plugins, options, cacheKey);
// Recompile schema because plugins may have changed it, see gh-7572
type.caster.prototype.$__setSchema(type.schema);
}
}
}
const discriminators = schema.discriminators;
if (discriminators == null) {
return;
}
const applyPluginsToDiscriminators = options.applyPluginsToDiscriminators;
const keys = Object.keys(discriminators);
for (const discriminatorKey of keys) {
const discriminatorSchema = discriminators[discriminatorKey];
applyPlugins(discriminatorSchema, plugins,
{ skipTopLevel: !applyPluginsToDiscriminators }, cacheKey);
}
};