diff --git a/lib/model.js b/lib/model.js index d9d65a09..6d6bc19b 100644 --- a/lib/model.js +++ b/lib/model.js @@ -418,6 +418,12 @@ ModelBaseClass.toString = function() { * @returns {Object} returns Plain JSON object */ ModelBaseClass.prototype.toObject = function(onlySchema, removeHidden, removeProtected) { + if (typeof onlySchema === 'object' && onlySchema != null) { + var options = onlySchema; + onlySchema = options.onlySchema; + removeHidden = options.removeHidden; + removeProtected = options.removeProtected; + } if (onlySchema === undefined) { onlySchema = true; } diff --git a/test/loopback-dl.test.js b/test/loopback-dl.test.js index a59480d3..17757b47 100644 --- a/test/loopback-dl.test.js +++ b/test/loopback-dl.test.js @@ -133,8 +133,8 @@ describe('ModelBuilder', function() { // Predefined property bio should be kept user.toObject().should.have.property('bio', 'me'); - user.toObject(true).should.have.property('bio', 'me'); - user.toObject(false).should.have.property('bio', 'me'); + user.toObject({onlySchema: true}).should.have.property('bio', 'me'); + user.toObject({onlySchema: false}).should.have.property('bio', 'me'); done(null, User); }); diff --git a/types/datasource.d.ts b/types/datasource.d.ts index 382f4cbf..35ac5a20 100644 --- a/types/datasource.d.ts +++ b/types/datasource.d.ts @@ -83,7 +83,9 @@ export declare class DataSource { DataAccessObject: AnyObject & {prototype: AnyObject}; - constructor(name?: string, settings?: Options, modelBuilder?: ModelBuilder); + constructor(name: string, settings?: Options, modelBuilder?: ModelBuilder); + + constructor(settings?: Options, modelBuilder?: ModelBuilder); constructor( connectorModule: Connector, diff --git a/types/model.d.ts b/types/model.d.ts index 97743b69..dc12c48b 100644 --- a/types/model.d.ts +++ b/types/model.d.ts @@ -92,7 +92,7 @@ export declare class ModelDefinition extends EventEmitter implements Schema { } /** - * Base model class + * Base class for LoopBack 3.x models */ export declare class ModelBase { static dataSource?: DataSource; @@ -135,15 +135,16 @@ export declare class ModelBase { static getUpdateOnlyProperties(): string[]; /** - * Model class: base class for all persistent objects. + * Constructor for ModelBase * - * `ModelBaseClass` mixes `Validatable` and `Hookable` classes methods + * NOTE: We have to use `constructor(...args: any[]);` so that it can be used + * for `return class extends superClass`. * - * @class * @param {AnyObject} data Initial object data * @param {Options} options An object to control the instantiation */ - constructor(data: AnyObject, options?: Options); + constructor(...args: any[]); + // constructor(data: AnyObject, options?: Options); /** * Convert the model instance to a plain json object @@ -160,20 +161,17 @@ export declare class ModelBase { * Convert model instance to a plain JSON object. * Returns a canonical object representation (no getters and setters). * - * @param {boolean} onlySchema Restrict properties to dataSource only. + * @param options Options for the conversion + * @property {boolean} onlySchema Restrict properties to dataSource only. * Default is false. If true, the function returns only properties defined * in the schema; Otherwise it returns all enumerable properties. - * @param {boolean} removeHidden Boolean flag as part of the transformation. + * @property {boolean} removeHidden Boolean flag as part of the transformation. * If true, then hidden properties should not be brought out. - * @param {boolean} removeProtected Boolean flag as part of the transformation. + * @property {boolean} removeProtected Boolean flag as part of the transformation. * If true, then protected properties should not be brought out. * @returns {object} returns Plain JSON object */ - toObject( - onlySchema?: boolean, - removeHidden?: boolean, - removeProtected?: boolean, - ): AnyObject; + toObject(options?: Options): AnyObject; /** * Define a property on the model.