@inaiat/fastify-papr
Version:
Fastify Papr Plugin Integration
61 lines (60 loc) • 2.06 kB
JavaScript
import { ensureMongoDriverVersion } from "./mongo-driver-version.js";
import { paprHelper } from "./papr-helper.js";
import fp from "fastify-plugin";
//#region src/fastify-papr-plugin.ts
/**
* Helper function to create a model registration
* @param name Collection name
* @param schema Papr schema definition with options
* @param indexes Optional MongoDB indexes to create
* @returns A model registration object
*/
const asCollection = (name, schema, indexes) => ({
name,
schema,
indexes
});
const registerNamedModels = (mutableFastify, dbName, models) => {
if (!mutableFastify.hasDecorator("papr")) {
mutableFastify.decorate("papr", { [dbName]: models });
return;
}
if (mutableFastify.papr[dbName]) throw new Error(`Connection name already registered: ${dbName}`);
mutableFastify.log.info(`Registering connection name: ${dbName}`);
mutableFastify.papr = {
...mutableFastify.papr,
[dbName]: models
};
};
const registerDefaultModels = (mutableFastify, models) => {
if (mutableFastify.hasDecorator("papr")) {
const items = Object.keys(mutableFastify.papr).join(", ");
throw new Error(`Models already registered: ${items}`);
}
mutableFastify.decorate("papr", models);
};
/**
* Main Fastify plugin for Papr integration
* Registers models to MongoDB and decorates fastify with them
*/
const fastifyPaprPlugin = async (mutable_fastify, options) => {
ensureMongoDriverVersion();
const models = await paprHelper(mutable_fastify, options.db, options.disableSchemaReconciliation).register(options.models);
const { name: dbName } = options;
if (dbName !== void 0 && dbName !== "") {
registerNamedModels(mutable_fastify, dbName, models);
return;
}
registerDefaultModels(mutable_fastify, models);
};
/**
* Default export as a Fastify plugin
* Compatible with Fastify v4 and v5
*/
var fastify_papr_plugin_default = fp(fastifyPaprPlugin, {
name: "fastify-papr-plugin",
fastify: "4.x || 5.x"
});
//#endregion
export { asCollection, fastify_papr_plugin_default as default, fastifyPaprPlugin };
//# sourceMappingURL=fastify-papr-plugin.js.map