diff --git a/test/test.ts b/test/test.ts index 786dbf6..e78933e 100644 --- a/test/test.ts +++ b/test/test.ts @@ -27,10 +27,7 @@ tap.test('should add a mongotarget to mongodump instance', async () => { tap.test('should dump a collection to a directory', async () => { const target = await testMongodump.addMongoTargetByMongoDescriptor(await testSmartMongo.getMongoDescriptor()); - const collections = await target.getCollections(); - for (const collection of collections) { - await target.dumpCollectionToDir(collection, '.nogit', doc => doc.id); - } + await target.dumpAllCollectionsToDir('.nogit', docArg => docArg.id, true); }) tap.test('should stop the smartmongo instance', async () => { diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index b4bb9b8..1e38f89 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@pushrocks/mongodump', - version: '1.0.4', + version: '1.0.5', description: 'a tool to handle dumps of mongodb databases' } diff --git a/ts/mongodump.classes.mongodumptarget.ts b/ts/mongodump.classes.mongodumptarget.ts index 9029eda..7ed2fc2 100644 --- a/ts/mongodump.classes.mongodumptarget.ts +++ b/ts/mongodump.classes.mongodumptarget.ts @@ -5,9 +5,7 @@ import * as plugins from './mongodump.plugins.js'; * + exposes functions to interact with the dump target */ export class MongoDumpTarget { - public static async createAndInit( - mongoDescriptorArg: plugins.tsclass.database.IMongoDescriptor - ) { + public static async createAndInit(mongoDescriptorArg: plugins.tsclass.database.IMongoDescriptor) { const mongoDumpTarget = new MongoDumpTarget(mongoDescriptorArg); await mongoDumpTarget.init(); return mongoDumpTarget; @@ -61,19 +59,48 @@ export class MongoDumpTarget { /** * dumps a collection to a directory */ - public async dumpCollectionToDir(collectionArg: plugins.mongodb.Collection, dirArg: string, nameTransformFunction = (doc: any) => doc._id) { + public async dumpCollectionToDir( + collectionArg: plugins.mongodb.Collection, + dirArg: string, + nameTransformFunction = (doc: any) => doc._id + ) { const dirPath = plugins.smartpath.transform.makeAbsolute(dirArg); const collectionDir = plugins.path.join(dirPath, collectionArg.collectionName); await plugins.smartfile.fs.ensureDir(collectionDir); const cursor = collectionArg.find(); let value = await cursor.next(); - while(value) { - await plugins.smartfile.memory.toFs(JSON.stringify(value, null, 2), plugins.path.join(collectionDir, `${nameTransformFunction(value)}.json`)); + while (value) { + await plugins.smartfile.memory.toFs( + JSON.stringify(value, null, 2), + plugins.path.join(collectionDir, `${nameTransformFunction(value)}.json`) + ); value = await cursor.next(); } } - public async dumpCollectionToTarArchive(collectionArg: plugins.mongodb.Collection) {} + public async dumpCollectionToTarArchiveStream(collectionArg: plugins.mongodb.Collection) {} - public async dumpAllCollectionsToDir() {} + public async dumpCollectionToTarArchiveFile( + collectionArg: plugins.mongodb.Collection, + filePathArg: string + ) {} + + public async dumpAllCollectionsToDir( + dirArg: string, + nameFunctionArg?: (docArg: any) => string, + cleanDirArg = false + ) { + if (cleanDirArg) { + await plugins.smartfile.fs.ensureEmptyDir(dirArg); + } + const collections = await this.getCollections(); + for (const collection of collections) { + await this.dumpCollectionToDir(collection, dirArg, nameFunctionArg); + } + } + + public async dumpAllCollectionsToTarArchiveStream( + collectionArg: plugins.mongodb.Collection, + filePathArg: string + ) {} }