getRecord(properties?) { if (!this._record && !this._isDematerializing) { let { store } = this; // lookupFactory should really return an object that creates // instances with the injections applied let createOptions: any = { store, _internalModel: this, currentState: this.currentState, isError: this.isError, adapterError: this.error, }; if (properties !== undefined) { assert( `You passed '${properties}' as properties for record creation instead of an object.`, typeof properties === 'object' && properties !== null ); if ('id' in properties) { this.setId(properties.id); } // convert relationship Records to RecordDatas before passing to RecordData let defs = store._relationshipsDefinitionFor(this.modelName); if (defs !== null) { let keys = Object.keys(properties); let relationshipValue; for (let i = 0; i < keys.length; i++) { let prop = keys[i]; let def = defs[prop]; if (def !== undefined) { if (def.kind === 'hasMany') { if (DEBUG) { assertRecordsPassedToHasMany(properties[prop]); } relationshipValue = extractRecordDatasFromRecords(properties[prop]); } else { relationshipValue = extractRecordDataFromRecord(properties[prop]); } properties[prop] = relationshipValue; } } } } let additionalCreateOptions = this._recordData._initRecordCreateOptions(properties); assign(createOptions, additionalCreateOptions); if (setOwner) { // ensure that `getOwner(this)` works inside a model instance setOwner(createOptions, getOwner(store)); } else { createOptions.container = store.container; } this._record = store._modelFactoryFor(this.modelName).create(createOptions); this._triggerDeferredTriggers(); } return this._record; }
constructor(...args: any[]) { super(...args); setOwner(this, owner); }
static create(injections: StoreSettings) { const owner = getOwner(injections); const store = new this(injections); setOwner(store, owner); return store; }