UNPKG

forest-cli

Version:

The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.

36 lines 4.82 kB
const P = require('bluebird'); const { findCollectionMatchingSamples, filterReferenceCollection, } = require('../../../../utils/mongo-collections'); const OBJECT_ID = 'Mongoose.Schema.Types.ObjectId'; const SAMPLE_COUNT_TO_FETCH = 10; const pickSampleValues = (databaseConnection, collectionName, field) => databaseConnection .collection(collectionName) .aggregate([ { $match: { [field.name]: { $ne: null } } }, { $sample: { size: SAMPLE_COUNT_TO_FETCH } }, { $project: { _id: false, value: `$${field.name}` } }, ]) .toArray() .then(samples => samples.map(sample => sample.value)); const buildReference = (collectionName, referencedCollection, field) => { if (referencedCollection) { return { from: { collectionName, fieldName: field.name }, to: { collectionName: referencedCollection }, }; } return null; }; const detectReference = (databaseConnection, field, collectionName) => pickSampleValues(databaseConnection, collectionName, field) .then(samples => findCollectionMatchingSamples(databaseConnection, samples)) .then(matches => filterReferenceCollection(matches)) .then(referencedCollection => buildReference(collectionName, referencedCollection, field)); const detectReferences = (databaseConnection, fields, collectionName) => { const objectIdFields = fields.filter(field => field.type === OBJECT_ID); return P.mapSeries(objectIdFields, objectIdField => detectReference(databaseConnection, objectIdField, collectionName)).then(references => references.filter(reference => reference)); }; const applyReferences = (fields, references) => references.forEach(reference => { const field = fields.find(searchedField => searchedField.name === reference.from.fieldName); field.ref = reference.to.collectionName; }); module.exports = { detectReferences, applyReferences }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ28tcmVmZXJlbmNlcy1hbmFseXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9zY2hlbWEvdXBkYXRlL2FuYWx5emVyL21vbmdvLXJlZmVyZW5jZXMtYW5hbHl6ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sRUFDSiw2QkFBNkIsRUFDN0IseUJBQXlCLEdBQzFCLEdBQUcsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFFbkQsTUFBTSxTQUFTLEdBQUcsZ0NBQWdDLENBQUM7QUFDbkQsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFFakMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNyRSxrQkFBa0I7S0FDZixVQUFVLENBQUMsY0FBYyxDQUFDO0tBQzFCLFNBQVMsQ0FBQztJQUNULEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtJQUMzQyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxFQUFFO0lBQzVDLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtDQUN0RCxDQUFDO0tBQ0QsT0FBTyxFQUFFO0tBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRTFELE1BQU0sY0FBYyxHQUFHLENBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3JFLElBQUksb0JBQW9CLEVBQUU7UUFDeEIsT0FBTztZQUNMLElBQUksRUFBRSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtZQUMvQyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUU7U0FDN0MsQ0FBQztLQUNIO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUNwRSxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDO0tBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzNFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRS9GLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQUU7SUFDdEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDeEUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUNqRCxlQUFlLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUNuRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQzdDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDN0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RixLQUFLLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDO0FBRUwsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFDIn0=