Merge pull request #1738 from strongloop/fix/modification-of-datasource-config

datasource: copy settings object in constructor
This commit is contained in:
Miroslav Bajtoš 2019-05-10 16:01:39 +02:00 committed by GitHub
commit 91ab3e9162
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 0 deletions

View File

@ -126,6 +126,12 @@ function DataSource(name, settings, modelBuilder) {
settings = utils.parseSettings(settings);
}
// Shallow-clone the settings so that updates to `ds.settings`
// do not modify the original object provided via constructor arguments
if (settings) settings = Object.assign({}, settings);
// It's possible to provide settings object via the "name" arg too!
if (typeof name === 'object') name = Object.assign({}, name);
this.modelBuilder = modelBuilder || new ModelBuilder();
this.models = this.modelBuilder.models;
this.definitions = this.modelBuilder.definitions;

View File

@ -9,6 +9,15 @@ const should = require('./init.js');
const DataSource = require('../lib/datasource.js').DataSource;
describe('DataSource', function() {
it('clones settings to prevent surprising changes in passed args', () => {
const config = {connector: 'memory'};
const ds = new DataSource(config);
ds.settings.extra = true;
config.should.eql({connector: 'memory'});
});
it('reports helpful error when connector init throws', function() {
const throwingConnector = {
name: 'loopback-connector-throwing',