diff --git a/lib/datasource.js b/lib/datasource.js index 29249b9d5..339fb00f8 100644 --- a/lib/datasource.js +++ b/lib/datasource.js @@ -844,6 +844,16 @@ DataSource.prototype.deleteModelByName = function(modelName) { delete this.connector._models[modelName]; }; +/** + * Remove all models from the registry, but keep the connector instance + * (including the pool of database connections). + */ +DataSource.prototype.deleteAllModels = function() { + for (const m in this.modelBuilder.models) { + this.deleteModelByName(m); + } +}; + /** * Mixin DataAccessObject methods. * diff --git a/test/datasource.test.js b/test/datasource.test.js index adb632820..a3795cd66 100644 --- a/test/datasource.test.js +++ b/test/datasource.test.js @@ -517,6 +517,34 @@ describe('DataSource', function() { }); } }); + + describe('deleteAllModels', () => { + it('removes all model definitions', () => { + const ds = new DataSource({connector: 'memory'}); + ds.define('Category'); + ds.define('Product'); + + Object.keys(ds.modelBuilder.definitions) + .should.deepEqual(['Category', 'Product']); + Object.keys(ds.modelBuilder.models) + .should.deepEqual(['Category', 'Product']); + Object.keys(ds.connector._models) + .should.deepEqual(['Category', 'Product']); + + ds.deleteAllModels(); + + Object.keys(ds.modelBuilder.definitions).should.be.empty(); + Object.keys(ds.modelBuilder.models).should.be.empty(); + Object.keys(ds.connector._models).should.be.empty(); + }); + + it('preserves the connector instance', () => { + const ds = new DataSource({connector: 'memory'}); + const connector = ds.connector; + ds.deleteAllModels(); + ds.connector.should.equal(connector); + }); + }); }); function givenMockConnector(props) { diff --git a/types/datasource.d.ts b/types/datasource.d.ts index b7fadf827..a843cb5a1 100644 --- a/types/datasource.d.ts +++ b/types/datasource.d.ts @@ -110,6 +110,19 @@ export declare class DataSource extends EventEmitter { getModel(modelName: string): ModelBaseClass | undefined; + /** + * Remove a model from the registry. + * + * @param modelName + */ + deleteModelByName(modelName: string): void; + + /** + * Remove all models from the registry, but keep the connector instance + * (including the pool of database connections). + */ + deleteAllModels(): void; + /** * Attach an existing model to a data source. * This will mixin all of the data access object functions (DAO) into your