moleculer-mongobubble
Version:
A Moleculer module for generating CRUD APIs using MongoBubble.
94 lines • 6.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const mongobubble_1 = require("mongobubble");
const mongodb_1 = require("mongodb");
const list_1 = require("./actions/list");
const get_1 = require("./actions/get");
const create_1 = require("./actions/create");
const patch_1 = require("./actions/patch");
const replace_1 = require("./actions/replace");
const delete_1 = require("./actions/delete");
const put_1 = require("./actions/put");
const call_override_1 = require("./utils/call-override");
let GLOBAL_CLIENT;
function createDbServiceMixin(entityClass, mixinOptions = {}, repositoryOptions = {}) {
const mixin = {
name: entityClass.COLLECTION,
mongobubbleMixinOptions: mixinOptions,
entityClass,
repository: null,
async created() {
mixinOptions.reuseGlobalClient = typeof mixinOptions.reuseGlobalClient === 'undefined'
? true
: mixinOptions.reuseGlobalClient;
mixinOptions.reuseLocalRepository = typeof mixinOptions.reuseLocalRepository === 'undefined'
? true
: mixinOptions.reuseLocalRepository;
if (mixinOptions.reuseGlobalClient && !GLOBAL_CLIENT) {
GLOBAL_CLIENT = await mongodb_1.MongoClient.connect(mixinOptions.uri || 'mongodb://localhost:27017');
}
if (mixinOptions.reuseLocalRepository && !this.repository) {
this.repository = await this.newReusableRepository();
}
},
stopped() {
// try {
// if (this.repository) {
// this.repository.dispose();
// }
// if (GLOBAL_CLIENT && GLOBAL_CLIENT.close) {
// GLOBAL_CLIENT.close();
// }
// } catch (e) {
// // this.logger.warn("Unable to stop database connection gracefully.", e);
// }
},
methods: {
async newReusableRepository() {
return new mongobubble_1.MongoBubble({
...repositoryOptions,
client: GLOBAL_CLIENT,
db: mixinOptions.dbName,
autoConnectionSwitch: false,
EntityClass: entityClass,
});
},
getRepository() {
if (mixinOptions.reuseLocalRepository) {
return this.repository;
}
if (mixinOptions.reuseGlobalClient) {
return this.newRepository();
}
return new mongobubble_1.MongoBubble({
...repositoryOptions,
autoConnectionSwitch: true,
});
},
getGlobalClient() {
return GLOBAL_CLIENT;
},
call: call_override_1.call,
},
actions: {
list: list_1.list,
listDrafts: list_1.listDrafts,
listArchive: list_1.listArchive,
getById: get_1.getById,
insertOne: create_1.insertOne,
patchOneByIdRest: patch_1.patchOneByIdRest,
patchOneById: patch_1.patchOneById,
patchOneRest: patch_1.patchOneRest,
patchOne: patch_1.patchOne,
replaceOneRest: replace_1.replaceOneRest,
replaceOne: replace_1.replaceOne,
deleteOne: delete_1.deleteOne,
publish: put_1.publish,
archive: put_1.archive,
unpublish: put_1.unpublish,
},
};
return mixin;
}
exports.default = createDbServiceMixin;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29CdWJibGVTZXJ2aWNlLm1peGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01vbmdvQnViYmxlU2VydmljZS5taXhpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLDZDQUF1RjtBQUN2RixxQ0FBZ0Q7QUFDaEQseUNBQStEO0FBQy9ELHVDQUF3QztBQUN4Qyw2Q0FBNkM7QUFDN0MsMkNBQXlGO0FBQ3pGLCtDQUErRDtBQUMvRCw2Q0FBNkM7QUFDN0MsdUNBQTREO0FBQzVELHlEQUE2QztBQUU3QyxJQUFJLGFBQTBCLENBQUM7QUFzQi9CLFNBQXdCLG9CQUFvQixDQUkxQyxXQUE0QyxFQUM1QyxlQUF3QyxFQUE2QixFQUNyRSxvQkFBb0IsRUFBeUU7SUFFN0YsTUFBTSxLQUFLLEdBQXdDO1FBQ2pELElBQUksRUFBRSxXQUFXLENBQUMsVUFBVTtRQUU1Qix1QkFBdUIsRUFBRSxZQUFZO1FBRXJDLFdBQVc7UUFFWCxVQUFVLEVBQUUsSUFBSTtRQUVoQixLQUFLLENBQUMsT0FBTztZQUNYLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLFlBQVksQ0FBQyxpQkFBaUIsS0FBSyxXQUFXO2dCQUNwRixDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1lBQ25DLFlBQVksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLFlBQVksQ0FBQyxvQkFBb0IsS0FBSyxXQUFXO2dCQUMxRixDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDO1lBRXRDLElBQUksWUFBWSxDQUFDLGlCQUFpQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JELGFBQWEsR0FBRyxNQUFNLHFCQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksMkJBQTJCLENBQUMsQ0FBQztZQUM3RixDQUFDO1lBRUQsSUFBSSxZQUFZLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxRQUFRO1lBQ1IsMkJBQTJCO1lBQzNCLGlDQUFpQztZQUNqQyxNQUFNO1lBQ04sZ0RBQWdEO1lBQ2hELDZCQUE2QjtZQUM3QixNQUFNO1lBQ04sZ0JBQWdCO1lBQ2hCLDhFQUE4RTtZQUM5RSxJQUFJO1FBQ04sQ0FBQztRQUVELE9BQU8sRUFBRTtZQUNQLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQ3pCLE9BQU8sSUFBSSx5QkFBVyxDQUNwQjtvQkFDRSxHQUFHLGlCQUFpQjtvQkFDcEIsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLEVBQUUsRUFBRSxZQUFZLENBQUMsTUFBTTtvQkFDdkIsb0JBQW9CLEVBQUUsS0FBSztvQkFDM0IsV0FBVyxFQUFFLFdBQVc7aUJBQ3pCLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFFRCxhQUFhO2dCQUNYLElBQUksWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQ3RDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDekIsQ0FBQztnQkFFRCxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQztnQkFFRCxPQUFPLElBQUkseUJBQVcsQ0FDcEI7b0JBQ0UsR0FBRyxpQkFBaUI7b0JBQ3BCLG9CQUFvQixFQUFFLElBQUk7aUJBQzNCLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFFRCxlQUFlO2dCQUNiLE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLENBQUM7WUFFRCxJQUFJLEVBQUosb0JBQUk7U0FDTDtRQUVELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBSixXQUFJO1lBQ0osVUFBVSxFQUFWLGlCQUFVO1lBQ1YsV0FBVyxFQUFYLGtCQUFXO1lBQ1gsT0FBTyxFQUFQLGFBQU87WUFDUCxTQUFTLEVBQVQsa0JBQVM7WUFDVCxnQkFBZ0IsRUFBaEIsd0JBQWdCO1lBQ2hCLFlBQVksRUFBWixvQkFBWTtZQUNaLFlBQVksRUFBWixvQkFBWTtZQUNaLFFBQVEsRUFBUixnQkFBUTtZQUNSLGNBQWMsRUFBZCx3QkFBYztZQUNkLFVBQVUsRUFBVixvQkFBVTtZQUNWLFNBQVMsRUFBVCxrQkFBUztZQUNULE9BQU8sRUFBUCxhQUFPO1lBQ1AsT0FBTyxFQUFQLGFBQU87WUFDUCxTQUFTLEVBQVQsZUFBUztTQUNWO0tBQ0YsQ0FBQztJQUVGLE9BQU8sS0FBK0IsQ0FBQztBQUN6QyxDQUFDO0FBeEdELHVDQXdHQyJ9