dist/globals/ember-data.prod.js in ember-data-source-2.5.5 vs dist/globals/ember-data.prod.js in ember-data-source-2.6.0.beta.1
- old
+ new
@@ -4,65 +4,149 @@
/*!
* @overview Ember Data
* @copyright Copyright 2011-2016 Tilde Inc. and contributors.
* Portions Copyright 2011 LivingSocial Inc.
* @license Licensed under MIT license (see license.js)
- * @version 2.5.5
+ * @version 2.6.0-beta.1
*/
-var define, requireModule, require, requirejs;
+var loader, define, requireModule, require, requirejs;
-(function() {
+(function(global) {
+ 'use strict';
+ // Save off the original values of these globals, so we can restore them if someone asks us to
+ var oldGlobals = {
+ loader: loader,
+ define: define,
+ requireModule: requireModule,
+ require: require,
+ requirejs: requirejs
+ };
+
+ loader = {
+ noConflict: function(aliases) {
+ var oldName, newName;
+
+ for (oldName in aliases) {
+ if (aliases.hasOwnProperty(oldName)) {
+ if (oldGlobals.hasOwnProperty(oldName)) {
+ newName = aliases[oldName];
+
+ global[newName] = global[oldName];
+ global[oldName] = oldGlobals[oldName];
+ }
+ }
+ }
+ }
+ };
+
var _isArray;
if (!Array.isArray) {
_isArray = function (x) {
- return Object.prototype.toString.call(x) === "[object Array]";
+ return Object.prototype.toString.call(x) === '[object Array]';
};
} else {
_isArray = Array.isArray;
}
var registry = {};
var seen = {};
var FAILED = false;
+ var LOADED = true;
var uuid = 0;
- function tryFinally(tryable, finalizer) {
- try {
- return tryable();
- } finally {
- finalizer();
- }
- }
-
function unsupportedModule(length) {
- throw new Error("an unsupported module was defined, expected `define(name, deps, module)` instead got: `" + length + "` arguments to define`");
+ throw new Error('an unsupported module was defined, expected `define(name, deps, module)` instead got: `' +
+ length + '` arguments to define`');
}
var defaultDeps = ['require', 'exports', 'module'];
- function Module(name, deps, callback, exports) {
- this.id = uuid++;
- this.name = name;
- this.deps = !deps.length && callback.length ? defaultDeps : deps;
- this.exports = exports || { };
- this.callback = callback;
- this.state = undefined;
+ function Module(name, deps, callback) {
+ this.id = uuid++;
+ this.name = name;
+ this.deps = !deps.length && callback.length ? defaultDeps : deps;
+ this.module = { exports: {} };
+ this.callback = callback;
+ this.state = undefined;
this._require = undefined;
+ this.finalized = false;
+ this.hasExportsAsDep = false;
}
+ Module.prototype.makeDefaultExport = function() {
+ var exports = this.module.exports;
+ if (exports !== null &&
+ (typeof exports === 'object' || typeof exports === 'function') &&
+ exports['default'] === undefined) {
+ exports['default'] = exports;
+ }
+ };
+ Module.prototype.exports = function(reifiedDeps) {
+ if (this.finalized) {
+ return this.module.exports;
+ } else {
+ if (loader.wrapModules) {
+ this.callback = loader.wrapModules(this.name, this.callback);
+ }
+ var result = this.callback.apply(this, reifiedDeps);
+ if (!(this.hasExportsAsDep && result === undefined)) {
+ this.module.exports = result;
+ }
+ this.makeDefaultExport();
+ this.finalized = true;
+ return this.module.exports;
+ }
+ };
+
+ Module.prototype.unsee = function() {
+ this.finalized = false;
+ this.state = undefined;
+ this.module = { exports: {}};
+ };
+
+ Module.prototype.reify = function() {
+ var deps = this.deps;
+ var length = deps.length;
+ var reified = new Array(length);
+ var dep;
+
+ for (var i = 0, l = length; i < l; i++) {
+ dep = deps[i];
+ if (dep === 'exports') {
+ this.hasExportsAsDep = true;
+ reified[i] = this.module.exports;
+ } else if (dep === 'require') {
+ reified[i] = this.makeRequire();
+ } else if (dep === 'module') {
+ reified[i] = this.module;
+ } else {
+ reified[i] = findModule(resolve(dep, this.name), this.name).module.exports;
+ }
+ }
+
+ return reified;
+ };
+
Module.prototype.makeRequire = function() {
var name = this.name;
return this._require || (this._require = function(dep) {
return require(resolve(dep, name));
});
- }
+ };
+ Module.prototype.build = function() {
+ if (this.state === FAILED) { return; }
+ this.state = FAILED;
+ this.exports(this.reify());
+ this.state = LOADED;
+ };
+
define = function(name, deps, callback) {
if (arguments.length < 2) {
unsupportedModule(arguments.length);
}
@@ -85,96 +169,32 @@
define.alias = function(path) {
return new Alias(path);
};
- function reify(mod, name, seen) {
- var deps = mod.deps;
- var length = deps.length;
- var reified = new Array(length);
- var dep;
- // TODO: new Module
- // TODO: seen refactor
- var module = { };
-
- for (var i = 0, l = length; i < l; i++) {
- dep = deps[i];
- if (dep === 'exports') {
- module.exports = reified[i] = seen;
- } else if (dep === 'require') {
- reified[i] = mod.makeRequire();
- } else if (dep === 'module') {
- mod.exports = seen;
- module = reified[i] = mod;
- } else {
- reified[i] = requireFrom(resolve(dep, name), name);
- }
- }
-
- return {
- deps: reified,
- module: module
- };
+ function missingModule(name, referrer) {
+ throw new Error('Could not find module `' + name + '` imported from `' + referrer + '`');
}
- function requireFrom(name, origin) {
- var mod = registry[name];
- if (!mod) {
- throw new Error('Could not find module `' + name + '` imported from `' + origin + '`');
- }
- return require(name);
- }
-
- function missingModule(name) {
- throw new Error('Could not find module ' + name);
- }
requirejs = require = requireModule = function(name) {
- var mod = registry[name];
+ return findModule(name, '(require)').module.exports;
+ };
- if (mod && mod.callback instanceof Alias) {
- mod = registry[mod.callback.name];
- }
+ function findModule(name, referrer) {
+ var mod = registry[name] || registry[name + '/index'];
- if (!mod) { missingModule(name); }
-
- if (mod.state !== FAILED &&
- seen.hasOwnProperty(name)) {
- return seen[name];
+ while (mod && mod.callback instanceof Alias) {
+ name = mod.callback.name;
+ mod = registry[name];
}
- var reified;
- var module;
- var loaded = false;
+ if (!mod) { missingModule(name, referrer); }
- seen[name] = { }; // placeholder for run-time cycles
+ mod.build();
+ return mod;
+ }
- tryFinally(function() {
- reified = reify(mod, name, seen[name]);
- module = mod.callback.apply(this, reified.deps);
- loaded = true;
- }, function() {
- if (!loaded) {
- mod.state = FAILED;
- }
- });
-
- var obj;
- if (module === undefined && reified.module.exports) {
- obj = reified.module.exports;
- } else {
- obj = seen[name] = module;
- }
-
- if (obj !== null &&
- (typeof obj === 'object' || typeof obj === 'function') &&
- obj['default'] === undefined) {
- obj['default'] = obj;
- }
-
- return (seen[name] = obj);
- };
-
function resolve(child, name) {
if (child.charAt(0) !== '.') { return child; }
var parts = child.split('/');
var nameParts = name.split('/');
@@ -196,18 +216,18 @@
return parentBase.join('/');
}
requirejs.entries = requirejs._eak_seen = registry;
requirejs.unsee = function(moduleName) {
- delete seen[moduleName];
+ findModule(moduleName, '(unsee)').unsee();
};
requirejs.clear = function() {
requirejs.entries = requirejs._eak_seen = registry = {};
- seen = state = {};
+ seen = {};
};
-})();
+})(this);
define("ember-data/-private/adapters", ["exports", "ember-data/adapters/json-api", "ember-data/adapters/rest"], function (exports, _emberDataAdaptersJsonApi, _emberDataAdaptersRest) {
exports.JSONAPIAdapter = _emberDataAdaptersJsonApi.default;
exports.RESTAdapter = _emberDataAdaptersRest.default;
});
@@ -387,11 +407,11 @@
urlForFindHasMany: function (id, modelName, snapshot) {
return this._buildURL(modelName, id);
},
/**
- * @method urlForFindBelongTo
+ * @method urlForFindBelongsTo
* @param {String} id
* @param {String} modelName
* @param {DS.Snapshot} snapshot
* @return {String} url
*/
@@ -496,192 +516,10 @@
var camelized = _ember.default.String.camelize(modelName);
return _ember.default.String.pluralize(camelized);
}
});
});
-define('ember-data/-private/adapters/errors', ['exports', 'ember', 'ember-data/-private/debug'], function (exports, _ember, _emberDataPrivateDebug) {
- exports.AdapterError = AdapterError;
- exports.InvalidError = InvalidError;
- exports.TimeoutError = TimeoutError;
- exports.AbortError = AbortError;
- exports.errorsHashToArray = errorsHashToArray;
- exports.errorsArrayToHash = errorsArrayToHash;
-
- var EmberError = _ember.default.Error;
-
- var SOURCE_POINTER_REGEXP = /^\/?data\/(attributes|relationships)\/(.*)/;
- var SOURCE_POINTER_PRIMARY_REGEXP = /^\/?data/;
- var PRIMARY_ATTRIBUTE_KEY = 'base';
-
- /**
- @class AdapterError
- @namespace DS
- */
-
- function AdapterError(errors) {
- var message = arguments.length <= 1 || arguments[1] === undefined ? 'Adapter operation failed' : arguments[1];
-
- this.isAdapterError = true;
- EmberError.call(this, message);
-
- this.errors = errors || [{
- title: 'Adapter Error',
- detail: message
- }];
- }
-
- AdapterError.prototype = Object.create(EmberError.prototype);
-
- /**
- A `DS.InvalidError` is used by an adapter to signal the external API
- was unable to process a request because the content was not
- semantically correct or meaningful per the API. Usually this means a
- record failed some form of server side validation. When a promise
- from an adapter is rejected with a `DS.InvalidError` the record will
- transition to the `invalid` state and the errors will be set to the
- `errors` property on the record.
-
- For Ember Data to correctly map errors to their corresponding
- properties on the model, Ember Data expects each error to be
- a valid json-api error object with a `source/pointer` that matches
- the property name. For example if you had a Post model that
- looked like this.
-
- ```app/models/post.js
- import DS from 'ember-data';
-
- export default DS.Model.extend({
- title: DS.attr('string'),
- content: DS.attr('string')
- });
- ```
-
- To show an error from the server related to the `title` and
- `content` properties your adapter could return a promise that
- rejects with a `DS.InvalidError` object that looks like this:
-
- ```app/adapters/post.js
- import Ember from 'ember';
- import DS from 'ember-data';
-
- export default DS.RESTAdapter.extend({
- updateRecord: function() {
- // Fictional adapter that always rejects
- return Ember.RSVP.reject(new DS.InvalidError([
- {
- detail: 'Must be unique',
- source: { pointer: '/data/attributes/title' }
- },
- {
- detail: 'Must not be blank',
- source: { pointer: '/data/attributes/content'}
- }
- ]));
- }
- });
- ```
-
- Your backend may use different property names for your records the
- store will attempt extract and normalize the errors using the
- serializer's `extractErrors` method before the errors get added to
- the the model. As a result, it is safe for the `InvalidError` to
- wrap the error payload unaltered.
-
- @class InvalidError
- @namespace DS
- */
-
- function InvalidError(errors) {
- AdapterError.call(this, errors, 'The adapter rejected the commit because it was invalid');
- }
-
- InvalidError.prototype = Object.create(AdapterError.prototype);
-
- /**
- @class TimeoutError
- @namespace DS
- */
-
- function TimeoutError() {
- AdapterError.call(this, null, 'The adapter operation timed out');
- }
-
- TimeoutError.prototype = Object.create(AdapterError.prototype);
-
- /**
- @class AbortError
- @namespace DS
- */
-
- function AbortError() {
- AdapterError.call(this, null, 'The adapter operation was aborted');
- }
-
- AbortError.prototype = Object.create(AdapterError.prototype);
-
- /**
- @method errorsHashToArray
- @private
- */
-
- function errorsHashToArray(errors) {
- var out = [];
-
- if (_ember.default.isPresent(errors)) {
- Object.keys(errors).forEach(function (key) {
- var messages = _ember.default.makeArray(errors[key]);
- for (var i = 0; i < messages.length; i++) {
- var title = 'Invalid Attribute';
- var pointer = '/data/attributes/' + key;
- if (key === PRIMARY_ATTRIBUTE_KEY) {
- title = 'Invalid Document';
- pointer = '/data';
- }
- out.push({
- title: title,
- detail: messages[i],
- source: {
- pointer: pointer
- }
- });
- }
- });
- }
-
- return out;
- }
-
- /**
- @method errorsArrayToHash
- @private
- */
-
- function errorsArrayToHash(errors) {
- var out = {};
-
- if (_ember.default.isPresent(errors)) {
- errors.forEach(function (error) {
- if (error.source && error.source.pointer) {
- var key = error.source.pointer.match(SOURCE_POINTER_REGEXP);
-
- if (key) {
- key = key[2];
- } else if (error.source.pointer.search(SOURCE_POINTER_PRIMARY_REGEXP) !== -1) {
- key = PRIMARY_ATTRIBUTE_KEY;
- }
-
- if (key) {
- out[key] = out[key] || [];
- out[key].push(error.detail || error.title);
- }
- }
- });
- }
-
- return out;
- }
-});
define('ember-data/-private/core', ['exports', 'ember', 'ember-data/version'], function (exports, _ember, _emberDataVersion) {
/**
@module ember-data
*/
@@ -1385,11 +1223,15 @@
return !internalModel.isDeleted();
});
//a hack for not removing new records
//TODO remove once we have proper diffing
- var newRecords = this.currentState.filter(function (internalModel) {
+ var newRecords = this.currentState.filter(
+ // only add new records which are not yet in the canonical state of this
+ // relationship (a new record can be in the canonical state if it has
+ // been 'acknowleged' to be in the relationship via a store.push)
+ function (internalModel) {
return internalModel.isNew() && toSet.indexOf(internalModel) === -1;
});
toSet = toSet.concat(newRecords);
var oldLength = this.length;
this.arrayContentWillChange(0, this.length, toSet.length);
@@ -2987,30 +2829,27 @@
return "<" + this.modelName + ":" + this.id + ">";
}
}
};
- if (true) {
+ InternalModel.prototype.referenceFor = function (type, name) {
+ var reference = this.references[name];
- InternalModel.prototype.referenceFor = function (type, name) {
- var reference = this.references[name];
+ if (!reference) {
+ var relationship = this._relationships.get(name);
- if (!reference) {
- var relationship = this._relationships.get(name);
-
- if (type === "belongsTo") {
- reference = new _emberDataPrivateSystemReferences.BelongsToReference(this.store, this, relationship);
- } else if (type === "hasMany") {
- reference = new _emberDataPrivateSystemReferences.HasManyReference(this.store, this, relationship);
- }
-
- this.references[name] = reference;
+ if (type === "belongsTo") {
+ reference = new _emberDataPrivateSystemReferences.BelongsToReference(this.store, this, relationship);
+ } else if (type === "hasMany") {
+ reference = new _emberDataPrivateSystemReferences.HasManyReference(this.store, this, relationship);
}
- return reference;
- };
- }
+ this.references[name] = reference;
+ }
+
+ return reference;
+ };
});
define("ember-data/-private/system/model/model", ["exports", "ember", "ember-data/-private/debug", "ember-data/-private/system/promise-proxies", "ember-data/-private/system/model/errors", "ember-data/-private/features", "ember-data/-private/system/debug/debug-info", "ember-data/-private/system/relationships/belongs-to", "ember-data/-private/system/relationships/has-many", "ember-data/-private/system/relationships/ext", "ember-data/-private/system/model/attr"], function (exports, _ember, _emberDataPrivateDebug, _emberDataPrivateSystemPromiseProxies, _emberDataPrivateSystemModelErrors, _emberDataPrivateFeatures, _emberDataPrivateSystemDebugDebugInfo, _emberDataPrivateSystemRelationshipsBelongsTo, _emberDataPrivateSystemRelationshipsHasMany, _emberDataPrivateSystemRelationshipsExt, _emberDataPrivateSystemModelAttr) {
/**
@module ember-data
@@ -3755,112 +3594,109 @@
return this.store.container;
}
});
}
- if (true) {
+ Model.reopen({
- Model.reopen({
-
- /**
- Get the reference for the specified belongsTo relationship.
- Example
- ```javascript
- // models/blog.js
- export default DS.Model.extend({
- user: DS.belongsTo({ async: true })
- });
- store.push({
- type: 'blog',
- id: 1,
- relationships: {
- user: { type: 'user', id: 1 }
- }
- });
- var userRef = blog.belongsTo('user');
- // check if the user relationship is loaded
- var isLoaded = userRef.value() !== null;
- // get the record of the reference (null if not yet available)
- var user = userRef.value();
- // get the identifier of the reference
- if (userRef.remoteType() === "id") {
- var id = userRef.id();
- } else if (userRef.remoteType() === "link") {
- var link = userRef.link();
+ /**
+ Get the reference for the specified belongsTo relationship.
+ Example
+ ```javascript
+ // models/blog.js
+ export default DS.Model.extend({
+ user: DS.belongsTo({ async: true })
+ });
+ store.push({
+ type: 'blog',
+ id: 1,
+ relationships: {
+ user: { type: 'user', id: 1 }
}
- // load user (via store.findRecord or store.findBelongsTo)
- userRef.load().then(...)
- // or trigger a reload
- userRef.reload().then(...)
- // provide data for reference
- userRef.push({
- type: 'user',
- id: 1,
- attributes: {
- username: "@user"
- }
- }).then(function(user) {
- userRef.value() === user;
- });
- ```
- @method belongsTo
- @param {String} name of the relationship
- @return {BelongsToReference} reference for this relationship
- */
- belongsTo: function (name) {
- return this._internalModel.referenceFor('belongsTo', name);
- },
+ });
+ var userRef = blog.belongsTo('user');
+ // check if the user relationship is loaded
+ var isLoaded = userRef.value() !== null;
+ // get the record of the reference (null if not yet available)
+ var user = userRef.value();
+ // get the identifier of the reference
+ if (userRef.remoteType() === "id") {
+ var id = userRef.id();
+ } else if (userRef.remoteType() === "link") {
+ var link = userRef.link();
+ }
+ // load user (via store.findRecord or store.findBelongsTo)
+ userRef.load().then(...)
+ // or trigger a reload
+ userRef.reload().then(...)
+ // provide data for reference
+ userRef.push({
+ type: 'user',
+ id: 1,
+ attributes: {
+ username: "@user"
+ }
+ }).then(function(user) {
+ userRef.value() === user;
+ });
+ ```
+ @method belongsTo
+ @param {String} name of the relationship
+ @return {BelongsToReference} reference for this relationship
+ */
+ belongsTo: function (name) {
+ return this._internalModel.referenceFor('belongsTo', name);
+ },
- /**
- Get the reference for the specified hasMany relationship.
- Example
- ```javascript
- // models/blog.js
- export default DS.Model.extend({
- comments: DS.hasMany({ async: true })
- });
- store.push({
- type: 'blog',
- id: 1,
- relationships: {
- comments: {
- data: [
- { type: 'comment', id: 1 },
- { type: 'comment', id: 2 }
- ]
- }
+ /**
+ Get the reference for the specified hasMany relationship.
+ Example
+ ```javascript
+ // models/blog.js
+ export default DS.Model.extend({
+ comments: DS.hasMany({ async: true })
+ });
+ store.push({
+ type: 'blog',
+ id: 1,
+ relationships: {
+ comments: {
+ data: [
+ { type: 'comment', id: 1 },
+ { type: 'comment', id: 2 }
+ ]
}
- });
- var commentsRef = blog.hasMany('comments');
- // check if the comments are loaded already
- var isLoaded = commentsRef.value() !== null;
- // get the records of the reference (null if not yet available)
- var comments = commentsRef.value();
- // get the identifier of the reference
- if (commentsRef.remoteType() === "ids") {
- var ids = commentsRef.ids();
- } else if (commentsRef.remoteType() === "link") {
- var link = commentsRef.link();
}
- // load comments (via store.findMany or store.findHasMany)
- commentsRef.load().then(...)
- // or trigger a reload
- commentsRef.reload().then(...)
- // provide data for reference
- commentsRef.push([{ type: 'comment', id: 1 }, { type: 'comment', id: 2 }]).then(function(comments) {
- commentsRef.value() === comments;
- });
- ```
- @method hasMany
- @param {String} name of the relationship
- @return {HasManyReference} reference for this relationship
- */
- hasMany: function (name) {
- return this._internalModel.referenceFor('hasMany', name);
+ });
+ var commentsRef = blog.hasMany('comments');
+ // check if the comments are loaded already
+ var isLoaded = commentsRef.value() !== null;
+ // get the records of the reference (null if not yet available)
+ var comments = commentsRef.value();
+ // get the identifier of the reference
+ if (commentsRef.remoteType() === "ids") {
+ var ids = commentsRef.ids();
+ } else if (commentsRef.remoteType() === "link") {
+ var link = commentsRef.link();
}
- });
- }
+ // load comments (via store.findMany or store.findHasMany)
+ commentsRef.load().then(...)
+ // or trigger a reload
+ commentsRef.reload().then(...)
+ // provide data for reference
+ commentsRef.push([{ type: 'comment', id: 1 }, { type: 'comment', id: 2 }]).then(function(comments) {
+ commentsRef.value() === comments;
+ });
+ ```
+ @method hasMany
+ @param {String} name of the relationship
+ @return {HasManyReference} reference for this relationship
+ */
+ hasMany: function (name) {
+ return this._internalModel.referenceFor('hasMany', name);
+ }
+ });
Model.reopenClass(_emberDataPrivateSystemRelationshipsExt.RelationshipsClassMethodsMixin);
Model.reopenClass(_emberDataPrivateSystemModelAttr.AttrClassMethodsMixin);
exports.default = Model.extend(_emberDataPrivateSystemDebugDebugInfo.default, _emberDataPrivateSystemRelationshipsBelongsTo.BelongsToMixin, _emberDataPrivateSystemRelationshipsExt.DidDefinePropertyMixin, _emberDataPrivateSystemRelationshipsExt.RelationshipsInstanceMethodsMixin, _emberDataPrivateSystemRelationshipsHasMany.HasManyMixin, _emberDataPrivateSystemModelAttr.AttrInstanceMethodsMixin);
@@ -5189,11 +5025,11 @@
exports.AdapterPopulatedRecordArray = _emberDataPrivateSystemRecordArraysAdapterPopulatedRecordArray.default;
});
/**
@module ember-data
*/
-define("ember-data/-private/system/record-arrays/adapter-populated-record-array", ["exports", "ember", "ember-data/-private/system/record-arrays/record-array", "ember-data/-private/system/clone-null"], function (exports, _ember, _emberDataPrivateSystemRecordArraysRecordArray, _emberDataPrivateSystemCloneNull) {
+define("ember-data/-private/system/record-arrays/adapter-populated-record-array", ["exports", "ember", "ember-data/-private/system/record-arrays/record-array", "ember-data/-private/system/clone-null", "ember-data/-private/features"], function (exports, _ember, _emberDataPrivateSystemRecordArraysRecordArray, _emberDataPrivateSystemCloneNull, _emberDataPrivateFeatures) {
/**
@module ember-data
*/
@@ -6849,13 +6685,21 @@
define("ember-data/-private/system/relationships/state/create", ["exports", "ember", "ember-data/-private/system/relationships/state/has-many", "ember-data/-private/system/relationships/state/belongs-to", "ember-data/-private/system/empty-object"], function (exports, _ember, _emberDataPrivateSystemRelationshipsStateHasMany, _emberDataPrivateSystemRelationshipsStateBelongsTo, _emberDataPrivateSystemEmptyObject) {
exports.default = Relationships;
var get = _ember.default.get;
+ function shouldFindInverse(relationshipMeta) {
+ var options = relationshipMeta.options;
+ return !(options && options.inverse === null);
+ }
+
function createRelationshipFor(record, relationshipMeta, store) {
- var inverseKey;
- var inverse = record.type.inverseFor(relationshipMeta.key, store);
+ var inverseKey = undefined;
+ var inverse = null;
+ if (shouldFindInverse(relationshipMeta)) {
+ inverse = record.type.inverseFor(relationshipMeta.key, store);
+ }
if (inverse) {
inverseKey = inverse.name;
}
@@ -7423,13 +7267,11 @@
@property adapterOptions
@type {Object}
*/
this.adapterOptions = options.adapterOptions;
- if (true) {
- this.include = options.include;
- }
+ this.include = options.include;
}
/**
Get snapshots of the underlying record array
@method snapshots
@@ -7488,13 +7330,11 @@
@property adapterOptions
@type {Object}
*/
this.adapterOptions = options.adapterOptions;
- if (true) {
- this.include = options.include;
- }
+ this.include = options.include;
this._changedAttributes = record.changedAttributes();
}
Snapshot.prototype = {
@@ -7774,17 +7614,16 @@
};
});
/**
@module ember-data
*/
-define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/model', 'ember-data/-private/debug', 'ember-data/-private/system/normalize-link', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/adapters/errors', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/store/common', 'ember-data/-private/system/store/serializer-response', 'ember-data/-private/system/store/serializers', 'ember-data/-private/system/store/finders', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/store/container-instance-cache', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/system/empty-object', 'ember-data/-private/features'], function (exports, _ember, _emberDataModel, _emberDataPrivateDebug, _emberDataPrivateSystemNormalizeLink, _emberDataPrivateSystemNormalizeModelName, _emberDataPrivateAdaptersErrors, _emberDataPrivateSystemPromiseProxies, _emberDataPrivateSystemStoreCommon, _emberDataPrivateSystemStoreSerializerResponse, _emberDataPrivateSystemStoreSerializers, _emberDataPrivateSystemStoreFinders, _emberDataPrivateUtils, _emberDataPrivateSystemCoerceId, _emberDataPrivateSystemRecordArrayManager, _emberDataPrivateSystemStoreContainerInstanceCache, _emberDataPrivateSystemModelInternalModel, _emberDataPrivateSystemEmptyObject, _emberDataPrivateFeatures) {
+define('ember-data/-private/system/store', ['exports', 'ember', 'ember-data/model', 'ember-data/-private/debug', 'ember-data/-private/system/normalize-link', 'ember-data/-private/system/normalize-model-name', 'ember-data/adapters/errors', 'ember-data/-private/system/promise-proxies', 'ember-data/-private/system/store/common', 'ember-data/-private/system/store/serializer-response', 'ember-data/-private/system/store/serializers', 'ember-data/-private/system/store/finders', 'ember-data/-private/utils', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/record-array-manager', 'ember-data/-private/system/store/container-instance-cache', 'ember-data/-private/system/model/internal-model', 'ember-data/-private/system/empty-object', 'ember-data/-private/features'], function (exports, _ember, _emberDataModel, _emberDataPrivateDebug, _emberDataPrivateSystemNormalizeLink, _emberDataPrivateSystemNormalizeModelName, _emberDataAdaptersErrors, _emberDataPrivateSystemPromiseProxies, _emberDataPrivateSystemStoreCommon, _emberDataPrivateSystemStoreSerializerResponse, _emberDataPrivateSystemStoreSerializers, _emberDataPrivateSystemStoreFinders, _emberDataPrivateUtils, _emberDataPrivateSystemCoerceId, _emberDataPrivateSystemRecordArrayManager, _emberDataPrivateSystemStoreContainerInstanceCache, _emberDataPrivateSystemModelInternalModel, _emberDataPrivateSystemEmptyObject, _emberDataPrivateFeatures) {
var badIdFormatAssertion = '`id` has to be non-empty string or number';
exports.badIdFormatAssertion = badIdFormatAssertion;
var Backburner = _ember.default._Backburner;
var Map = _ember.default.Map;
- var isArray = Array.isArray || _ember.default.isArray;
//Get the materialized model from the internalModel/promise that returns
//an internal model and return it in a promiseObject. Useful for returning
//from find methods
function promiseRecord(internalModel, label) {
@@ -8604,12 +8443,10 @@
_fetchAll: function (typeClass, array, options) {
options = options || {};
var adapter = this.adapterFor(typeClass.modelName);
var sinceToken = this.typeMapFor(typeClass).metadata.since;
- set(array, 'isUpdating', true);
-
if (options.reload) {
return (0, _emberDataPrivateSystemPromiseProxies.promiseArray)((0, _emberDataPrivateSystemStoreFinders._findAll)(adapter, this, typeClass, sinceToken, options));
}
var snapshotArray = array.createSnapshot(options);
if (adapter.shouldReloadAll(this, snapshotArray)) {
@@ -9190,11 +9027,11 @@
for (i = 0, length = included.length; i < length; i++) {
this._pushInternalModel(included[i]);
}
}
- if (isArray(data.data)) {
+ if (Array.isArray(data.data)) {
length = data.data.length;
var internalModels = new Array(length);
for (i = 0; i < length; i++) {
internalModels[i] = this._pushInternalModel(data.data[i]).getRecord();
}
@@ -9217,17 +9054,10 @@
_pushInternalModel: function (data) {
var _this2 = this;
var modelName = data.type;
- var type = this.modelFor(modelName);
-
- // If Ember.ENV.DS_WARN_ON_UNKNOWN_KEYS is set to true and the payload
- // contains unknown keys, log a warning.
-
- if (_ember.default.ENV.DS_WARN_ON_UNKNOWN_KEYS) {}
-
// Actually load the record into the store.
var internalModel = this._load(data);
this._backburner.join(function () {
_this2._backburner.schedule('normalizeRelationships', _this2, '_setupRelationships', internalModel, data);
@@ -9296,30 +9126,25 @@
} else {
payload = inputPayload;
serializer = this.serializerFor(modelName);
}
- if (false) {
- return this._adapterRun(function () {
- return serializer.pushPayload(_this3, payload);
- });
- } else {
- this._adapterRun(function () {
- return serializer.pushPayload(_this3, payload);
- });
- }
+
+ this._adapterRun(function () {
+ return serializer.pushPayload(_this3, payload);
+ });
},
/**
`normalize` converts a json payload into the normalized form that
[push](#method_push) expects.
Example
```js
socket.on('message', function(message) {
var modelName = message.model;
var data = message.data;
- store.push(modelName, store.normalize(modelName, data));
+ store.push(store.normalize(modelName, data));
});
```
@method normalize
@param {String} modelName The name of the model type for this payload
@param {Object} payload
@@ -9488,45 +9313,42 @@
this.unloadAll();
}
});
- if (true) {
-
- Store.reopen({
- /**
- Get the reference for the specified record.
- Example
- ```javascript
- var userRef = store.getReference('user', 1);
- // check if the user is loaded
- var isLoaded = userRef.value() !== null;
- // get the record of the reference (null if not yet available)
- var user = userRef.value();
- // get the identifier of the reference
- if (userRef.remoteType() === "id") {
- var id = userRef.id();
- }
- // load user (via store.find)
- userRef.load().then(...)
- // or trigger a reload
- userRef.reload().then(...)
- // provide data for reference
- userRef.push({ id: 1, username: "@user" }).then(function(user) {
- userRef.value() === user;
- });
- ```
- @method getReference
- @param {String} type
- @param {String|Integer} id
- @return {RecordReference}
- */
- getReference: function (type, id) {
- return this._internalModelForId(type, id).recordReference;
+ Store.reopen({
+ /**
+ Get the reference for the specified record.
+ Example
+ ```javascript
+ var userRef = store.getReference('user', 1);
+ // check if the user is loaded
+ var isLoaded = userRef.value() !== null;
+ // get the record of the reference (null if not yet available)
+ var user = userRef.value();
+ // get the identifier of the reference
+ if (userRef.remoteType() === "id") {
+ var id = userRef.id();
}
- });
- }
+ // load user (via store.find)
+ userRef.load().then(...)
+ // or trigger a reload
+ userRef.reload().then(...)
+ // provide data for reference
+ userRef.push({ id: 1, username: "@user" }).then(function(user) {
+ userRef.value() === user;
+ });
+ ```
+ @method getReference
+ @param {String} type
+ @param {String|Integer} id
+ @return {RecordReference}
+ */
+ getReference: function (type, id) {
+ return this._internalModelForId(type, id).recordReference;
+ }
+ });
function deserializeRecordId(store, key, relationship, id) {
if (isNone(id)) {
return;
}
@@ -9580,11 +9402,11 @@
store.didSaveRecord(internalModel, { data: data });
});
return internalModel;
}, function (error) {
- if (error instanceof _emberDataPrivateAdaptersErrors.InvalidError) {
+ if (error instanceof _emberDataAdaptersErrors.InvalidError) {
var errors = serializer.extractErrors(store, typeClass, error, snapshot.id);
store.recordWasInvalid(internalModel, errors);
} else {
store.recordWasError(internalModel, error);
}
@@ -9655,10 +9477,17 @@
exports.default = Store;
});
/**
@module ember-data
*/
+
+// If Ember.ENV.DS_WARN_ON_UNKNOWN_KEYS is set to true and the payload
+// contains unknown attributes or relationships, log a warning.
+
+// Check unknown attributes
+
+// Check unknown relationships
define('ember-data/-private/system/store/common', ['exports', 'ember'], function (exports, _ember) {
exports._bind = _bind;
exports._guard = _guard;
exports._objectIsAlive = _objectIsAlive;
@@ -9785,11 +9614,11 @@
exports._queryRecord = _queryRecord;
var Promise = _ember.default.RSVP.Promise;
function payloadIsNotBlank(adapterPayload) {
- if (_ember.default.isArray(adapterPayload)) {
+ if (Array.isArray(adapterPayload)) {
return true;
} else {
return Object.keys(adapterPayload || {}).length;
}
}
@@ -9994,21 +9823,21 @@
if ('data' in doc && 'errors' in doc) {
errors.push('Top level keys "errors" and "data" cannot both be present in a JSON API document');
}
}
if ('data' in doc) {
- if (!(doc.data === null || _ember.default.isArray(doc.data) || typeof doc.data === 'object')) {
+ if (!(doc.data === null || Array.isArray(doc.data) || typeof doc.data === 'object')) {
errors.push('data must be null, an object, or an array');
}
}
if ('meta' in doc) {
if (typeof doc.meta !== 'object') {
errors.push('meta must be an object');
}
}
if ('errors' in doc) {
- if (!_ember.default.isArray(doc.errors)) {
+ if (!Array.isArray(doc.errors)) {
errors.push('errors must be an array');
}
}
if ('links' in doc) {
if (typeof doc.links !== 'object') {
@@ -10076,11 +9905,12 @@
exports.NumberTransform = _emberDataPrivateTransformsNumber.default;
exports.DateTransform = _emberDataPrivateTransformsDate.default;
exports.StringTransform = _emberDataPrivateTransformsString.default;
exports.BooleanTransform = _emberDataPrivateTransformsBoolean.default;
});
-define("ember-data/-private/transforms/boolean", ["exports", "ember-data/transform"], function (exports, _emberDataTransform) {
+define('ember-data/-private/transforms/boolean', ['exports', 'ember', 'ember-data/transform', 'ember-data/-private/features'], function (exports, _ember, _emberDataTransform, _emberDataPrivateFeatures) {
+ var isNone = _ember.default.isNone;
/**
The `DS.BooleanTransform` class is used to serialize and deserialize
boolean attributes on Ember Data record objects. This transform is
used when `boolean` is passed as the type parameter to the
@@ -10101,11 +9931,11 @@
@class BooleanTransform
@extends DS.Transform
@namespace DS
*/
exports.default = _emberDataTransform.default.extend({
- deserialize: function (serialized) {
+ deserialize: function (serialized, options) {
var type = typeof serialized;
if (type === "boolean") {
return serialized;
} else if (type === "string") {
@@ -10115,11 +9945,12 @@
} else {
return false;
}
},
- serialize: function (deserialized) {
+ serialize: function (deserialized, options) {
+
return Boolean(deserialized);
}
});
});
define("ember-data/-private/transforms/date", ["exports", "ember", "ember-data/-private/ext/date", "ember-data/transform"], function (exports, _ember, _emberDataPrivateExtDate, _emberDataTransform) {
@@ -10423,13 +10254,13 @@
defaultSerializer: '-default',
/**
The `findRecord()` method is invoked when the store is asked for a record that
has not previously been loaded. In response to `findRecord()` being called, you
- should query your persistence layer for a record with the given ID. Once
- found, you can asynchronously call the store's `push()` method to push
- the record into the store.
+ should query your persistence layer for a record with the given ID. The `findRecord`
+ method should return a promise that will resolve to a JavaScript object that will be
+ normalized by the serializer.
Here is an example `findRecord` implementation:
```app/adapters/application.js
import DS from 'ember-data';
export default DS.Adapter.extend({
findRecord: function(store, type, id, snapshot) {
@@ -10811,19 +10642,250 @@
});
});
/**
@module ember-data
*/
-define('ember-data/adapters/json-api', ['exports', 'ember', 'ember-data/adapters/rest'], function (exports, _ember, _emberDataAdaptersRest) {
+define('ember-data/adapters/errors', ['exports', 'ember', 'ember-data/-private/debug', 'ember-data/-private/features'], function (exports, _ember, _emberDataPrivateDebug, _emberDataPrivateFeatures) {
+ exports.AdapterError = AdapterError;
+ exports.errorsHashToArray = errorsHashToArray;
+ exports.errorsArrayToHash = errorsArrayToHash;
+ var EmberError = _ember.default.Error;
+
+ var SOURCE_POINTER_REGEXP = /^\/?data\/(attributes|relationships)\/(.*)/;
+ var SOURCE_POINTER_PRIMARY_REGEXP = /^\/?data/;
+ var PRIMARY_ATTRIBUTE_KEY = 'base';
+
/**
+ @class AdapterError
+ @namespace DS
+ */
+
+ function AdapterError(errors) {
+ var message = arguments.length <= 1 || arguments[1] === undefined ? 'Adapter operation failed' : arguments[1];
+
+ this.isAdapterError = true;
+ EmberError.call(this, message);
+
+ this.errors = errors || [{
+ title: 'Adapter Error',
+ detail: message
+ }];
+ }
+
+ var extendedErrorsEnabled = false;
+
+ function extendFn(ErrorClass) {
+ return function () {
+ var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+ var defaultMessage = _ref.message;
+
+ return extend(ErrorClass, defaultMessage);
+ };
+ }
+
+ function extend(ParentErrorClass, defaultMessage) {
+ var ErrorClass = function (errors, message) {
+ ParentErrorClass.call(this, errors, message || defaultMessage);
+ };
+ ErrorClass.prototype = Object.create(ParentErrorClass.prototype);
+
+ if (extendedErrorsEnabled) {
+ ErrorClass.extend = extendFn(ErrorClass);
+ }
+
+ return ErrorClass;
+ }
+
+ AdapterError.prototype = Object.create(EmberError.prototype);
+
+ if (extendedErrorsEnabled) {
+ AdapterError.extend = extendFn(AdapterError);
+ }
+
+ /**
+ A `DS.InvalidError` is used by an adapter to signal the external API
+ was unable to process a request because the content was not
+ semantically correct or meaningful per the API. Usually this means a
+ record failed some form of server side validation. When a promise
+ from an adapter is rejected with a `DS.InvalidError` the record will
+ transition to the `invalid` state and the errors will be set to the
+ `errors` property on the record.
+
+ For Ember Data to correctly map errors to their corresponding
+ properties on the model, Ember Data expects each error to be
+ a valid json-api error object with a `source/pointer` that matches
+ the property name. For example if you had a Post model that
+ looked like this.
+
+ ```app/models/post.js
+ import DS from 'ember-data';
+
+ export default DS.Model.extend({
+ title: DS.attr('string'),
+ content: DS.attr('string')
+ });
+ ```
+
+ To show an error from the server related to the `title` and
+ `content` properties your adapter could return a promise that
+ rejects with a `DS.InvalidError` object that looks like this:
+
+ ```app/adapters/post.js
+ import Ember from 'ember';
+ import DS from 'ember-data';
+
+ export default DS.RESTAdapter.extend({
+ updateRecord: function() {
+ // Fictional adapter that always rejects
+ return Ember.RSVP.reject(new DS.InvalidError([
+ {
+ detail: 'Must be unique',
+ source: { pointer: '/data/attributes/title' }
+ },
+ {
+ detail: 'Must not be blank',
+ source: { pointer: '/data/attributes/content'}
+ }
+ ]));
+ }
+ });
+ ```
+
+ Your backend may use different property names for your records the
+ store will attempt extract and normalize the errors using the
+ serializer's `extractErrors` method before the errors get added to
+ the the model. As a result, it is safe for the `InvalidError` to
+ wrap the error payload unaltered.
+
+ @class InvalidError
+ @namespace DS
+ */
+ var InvalidError = extend(AdapterError, 'The adapter rejected the commit because it was invalid');
+
+ exports.InvalidError = InvalidError;
+ /**
+ @class TimeoutError
+ @namespace DS
+ */
+ var TimeoutError = extend(AdapterError, 'The adapter operation timed out');
+
+ exports.TimeoutError = TimeoutError;
+ /**
+ @class AbortError
+ @namespace DS
+ */
+ var AbortError = extend(AdapterError, 'The adapter operation was aborted');
+
+ exports.AbortError = AbortError;
+ /**
+ @class UnauthorizedError
+ @namespace DS
+ */
+ var UnauthorizedError = extendedErrorsEnabled ? extend(AdapterError, 'The adapter operation is unauthorized') : null;
+
+ exports.UnauthorizedError = UnauthorizedError;
+ /**
+ @class ForbiddenError
+ @namespace DS
+ */
+ var ForbiddenError = extendedErrorsEnabled ? extend(AdapterError, 'The adapter operation is forbidden') : null;
+
+ exports.ForbiddenError = ForbiddenError;
+ /**
+ @class NotFoundError
+ @namespace DS
+ */
+ var NotFoundError = extendedErrorsEnabled ? extend(AdapterError, 'The adapter could not find the resource') : null;
+
+ exports.NotFoundError = NotFoundError;
+ /**
+ @class ConflictError
+ @namespace DS
+ */
+ var ConflictError = extendedErrorsEnabled ? extend(AdapterError, 'The adapter operation failed due to a conflict') : null;
+
+ exports.ConflictError = ConflictError;
+ /**
+ @class ServerError
+ @namespace DS
+ */
+ var ServerError = extendedErrorsEnabled ? extend(AdapterError, 'The adapter operation failed due to a server error') : null;
+
+ exports.ServerError = ServerError;
+ /**
+ @method errorsHashToArray
+ @private
+ */
+
+ function errorsHashToArray(errors) {
+ var out = [];
+
+ if (_ember.default.isPresent(errors)) {
+ Object.keys(errors).forEach(function (key) {
+ var messages = _ember.default.makeArray(errors[key]);
+ for (var i = 0; i < messages.length; i++) {
+ var title = 'Invalid Attribute';
+ var pointer = '/data/attributes/' + key;
+ if (key === PRIMARY_ATTRIBUTE_KEY) {
+ title = 'Invalid Document';
+ pointer = '/data';
+ }
+ out.push({
+ title: title,
+ detail: messages[i],
+ source: {
+ pointer: pointer
+ }
+ });
+ }
+ });
+ }
+
+ return out;
+ }
+
+ /**
+ @method errorsArrayToHash
+ @private
+ */
+
+ function errorsArrayToHash(errors) {
+ var out = {};
+
+ if (_ember.default.isPresent(errors)) {
+ errors.forEach(function (error) {
+ if (error.source && error.source.pointer) {
+ var key = error.source.pointer.match(SOURCE_POINTER_REGEXP);
+
+ if (key) {
+ key = key[2];
+ } else if (error.source.pointer.search(SOURCE_POINTER_PRIMARY_REGEXP) !== -1) {
+ key = PRIMARY_ATTRIBUTE_KEY;
+ }
+
+ if (key) {
+ out[key] = out[key] || [];
+ out[key].push(error.detail || error.title);
+ }
+ }
+ });
+ }
+
+ return out;
+ }
+});
+define('ember-data/adapters/json-api', ['exports', 'ember', 'ember-data/adapters/rest', 'ember-data/-private/features'], function (exports, _ember, _emberDataAdaptersRest, _emberDataPrivateFeatures) {
+
+ /**
@class JSONAPIAdapter
@constructor
@namespace DS
@extends DS.RESTAdapter
*/
- exports.default = _emberDataAdaptersRest.default.extend({
+ var JSONAPIAdapter = _emberDataAdaptersRest.default.extend({
defaultSerializer: '-json-api',
/**
@method ajaxOptions
@private
@@ -10929,15 +10991,17 @@
var url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');
return this.ajax(url, 'PATCH', { data: data });
}
});
+
+ exports.default = JSONAPIAdapter;
});
/**
@module ember-data
*/
-define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'ember-data/-private/adapters/errors', 'ember-data/-private/adapters/build-url-mixin', 'ember-data/-private/features', 'ember-data/-private/utils/parse-response-headers'], function (exports, _ember, _emberDataAdapter, _emberDataPrivateAdaptersErrors, _emberDataPrivateAdaptersBuildUrlMixin, _emberDataPrivateFeatures, _emberDataPrivateUtilsParseResponseHeaders) {
+define('ember-data/adapters/rest', ['exports', 'ember', 'ember-data/adapter', 'ember-data/adapters/errors', 'ember-data/-private/adapters/build-url-mixin', 'ember-data/-private/features', 'ember-data/-private/debug', 'ember-data/-private/utils/parse-response-headers'], function (exports, _ember, _emberDataAdapter, _emberDataAdaptersErrors, _emberDataPrivateAdaptersBuildUrlMixin, _emberDataPrivateFeatures, _emberDataPrivateDebug, _emberDataPrivateUtilsParseResponseHeaders) {
var MapWithDefault = _ember.default.MapWithDefault;
var get = _ember.default.get;
/**
The REST adapter allows your store to communicate with an HTTP server by
@@ -11147,11 +11211,11 @@
@constructor
@namespace DS
@extends DS.Adapter
@uses DS.BuildURLMixin
*/
- exports.default = _emberDataAdapter.default.extend(_emberDataPrivateAdaptersBuildUrlMixin.default, {
+ var RESTAdapter = _emberDataAdapter.default.extend(_emberDataPrivateAdaptersBuildUrlMixin.default, {
defaultSerializer: '-rest',
/**
By default, the RESTAdapter will send the query params sorted alphabetically to the
server.
@@ -11313,13 +11377,18 @@
@param {String} sinceToken
@param {DS.SnapshotRecordArray} snapshotRecordArray
@return {Promise} promise
*/
findAll: function (store, type, sinceToken, snapshotRecordArray) {
- var url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll');
var query = this.buildQuery(snapshotRecordArray);
+ var url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll');
+
+ if (sinceToken) {
+ query.since = sinceToken;
+ }
+
return this.ajax(url, 'GET', { data: query });
},
/**
Called by the store in order to fetch a JSON array for
@@ -11641,17 +11710,17 @@
*/
handleResponse: function (status, headers, payload, requestData) {
if (this.isSuccess(status, headers, payload)) {
return payload;
} else if (this.isInvalid(status, headers, payload)) {
- return new _emberDataPrivateAdaptersErrors.InvalidError(payload.errors);
+ return new _emberDataAdaptersErrors.InvalidError(payload.errors);
}
var errors = this.normalizeErrorResponse(status, headers, payload);
var detailedMessage = this.generatedDetailedMessage(status, headers, payload, requestData);
- return new _emberDataPrivateAdaptersErrors.AdapterError(errors, detailedMessage);
+ return new _emberDataAdaptersErrors.AdapterError(errors, detailedMessage);
},
/**
Default `handleResponse` implementation uses this hook to decide if the
response is a success.
@@ -11719,18 +11788,19 @@
_ember.default.run.join(null, resolve, response);
}
};
hash.error = function (jqXHR, textStatus, errorThrown) {
+
var error = undefined;
if (errorThrown instanceof Error) {
error = errorThrown;
} else if (textStatus === 'timeout') {
- error = new _emberDataPrivateAdaptersErrors.TimeoutError();
+ error = new _emberDataAdaptersErrors.TimeoutError();
} else if (textStatus === 'abort') {
- error = new _emberDataPrivateAdaptersErrors.AbortError();
+ error = new _emberDataAdaptersErrors.AbortError();
} else {
error = adapter.handleResponse(jqXHR.status, (0, _emberDataPrivateUtilsParseResponseHeaders.default)(jqXHR.getAllResponseHeaders()), adapter.parseErrorResponse(jqXHR.responseText) || errorThrown, requestData);
}
_ember.default.run.join(null, reject, error);
@@ -11845,17 +11915,15 @@
},
buildQuery: function (snapshot) {
var query = {};
- if (true) {
- if (snapshot) {
- var include = snapshot.include;
+ if (snapshot) {
+ var include = snapshot.include;
- if (include) {
- query.include = include;
- }
+ if (include) {
+ query.include = include;
}
}
return query;
}
@@ -11867,23 +11935,97 @@
return string.indexOf(suffix, string.length - suffix.length) !== -1;
} else {
return string.endsWith(suffix);
}
}
+
+ exports.default = RESTAdapter;
});
/**
@module ember-data
*/
-define("ember-data/attr", ["exports", "ember", "ember-data/-private/debug"], function (exports, _ember, _emberDataPrivateDebug) {
+
+/**
+ * Get the data (body or query params) for a request.
+ *
+ * @public
+ * @method dataForRequest
+ * @param {Object} params
+ * @return {Object} data
+ */
+
+// type is not passed to findBelongsTo and findHasMany
+
+/**
+ * Get the HTTP method for a request.
+ *
+ * @public
+ * @method methodForRequest
+ * @param {Object} params
+ * @return {String} HTTP method
+ */
+
+/**
+ * Get the URL for a request.
+ *
+ * @public
+ * @method urlForRequest
+ * @param {Object} params
+ * @return {String} URL
+ */
+
+// type and id are not passed from updateRecord and deleteRecord, hence they
+// are defined if not set
+
+/**
+ * Get the headers for a request.
+ *
+ * By default the value of the `headers` property of the adapter is
+ * returned.
+ *
+ * @public
+ * @method headersForRequest
+ * @param {Object} params
+ * @return {Object} headers
+ */
+
+/**
+ * Get an object which contains all properties for a request which should
+ * be made.
+ *
+ * @private
+ * @method _requestFor
+ * @param {Object} params
+ * @return {Object} request object
+ */
+
+/**
+ * Convert a request object into a hash which can be passed to `jQuery.ajax`.
+ *
+ * @private
+ * @method _requestToJQueryAjaxHash
+ * @param {Object} request
+ * @return {Object} jQuery ajax hash
+ */
+
+/**
+ * Make a request using `jQuery.ajax`.
+ *
+ * @private
+ * @method _makeRequest
+ * @param {Object} request
+ * @return {Promise} promise
+ */
+define('ember-data/attr', ['exports', 'ember', 'ember-data/-private/debug'], function (exports, _ember, _emberDataPrivateDebug) {
exports.default = attr;
/**
@module ember-data
*/
function getDefaultValue(record, options, key) {
- if (typeof options.defaultValue === "function") {
+ if (typeof options.defaultValue === 'function') {
return options.defaultValue.apply(null, arguments);
} else {
var defaultValue = options.defaultValue;
return defaultValue;
@@ -12030,23 +12172,21 @@
// * })
// * ```
// *
// */
});
-define("ember-data", ["exports", "ember", "ember-data/-private/debug", "ember-data/-private/core", "ember-data/-private/system/normalize-model-name", "ember-data/-private/system/model/internal-model", "ember-data/-private/system/promise-proxies", "ember-data/-private/system/store", "ember-data/-private/system/model", "ember-data/model", "ember-data/-private/system/snapshot", "ember-data/adapter", "ember-data/serializer", "ember-data/-private/system/debug", "ember-data/-private/adapters/errors", "ember-data/-private/system/record-arrays", "ember-data/-private/system/many-array", "ember-data/-private/system/record-array-manager", "ember-data/-private/adapters", "ember-data/-private/adapters/build-url-mixin", "ember-data/-private/serializers", "ember-inflector", "ember-data/serializers/embedded-records-mixin", "ember-data/-private/transforms", "ember-data/relationships", "ember-data/setup-container", "ember-data/-private/instance-initializers/initialize-store-service", "ember-data/-private/system/container-proxy", "ember-data/-private/system/relationships/state/relationship"], function (exports, _ember, _emberDataPrivateDebug, _emberDataPrivateCore, _emberDataPrivateSystemNormalizeModelName, _emberDataPrivateSystemModelInternalModel, _emberDataPrivateSystemPromiseProxies, _emberDataPrivateSystemStore, _emberDataPrivateSystemModel, _emberDataModel, _emberDataPrivateSystemSnapshot, _emberDataAdapter, _emberDataSerializer, _emberDataPrivateSystemDebug, _emberDataPrivateAdaptersErrors, _emberDataPrivateSystemRecordArrays, _emberDataPrivateSystemManyArray, _emberDataPrivateSystemRecordArrayManager, _emberDataPrivateAdapters, _emberDataPrivateAdaptersBuildUrlMixin, _emberDataPrivateSerializers, _emberInflector, _emberDataSerializersEmbeddedRecordsMixin, _emberDataPrivateTransforms, _emberDataRelationships, _emberDataSetupContainer, _emberDataPrivateInstanceInitializersInitializeStoreService, _emberDataPrivateSystemContainerProxy, _emberDataPrivateSystemRelationshipsStateRelationship) {
+define("ember-data", ["exports", "ember", "ember-data/-private/debug", "ember-data/-private/features", "ember-data/-private/core", "ember-data/-private/system/normalize-model-name", "ember-data/-private/system/model/internal-model", "ember-data/-private/system/promise-proxies", "ember-data/-private/system/store", "ember-data/-private/system/model", "ember-data/model", "ember-data/-private/system/snapshot", "ember-data/adapter", "ember-data/serializer", "ember-data/-private/system/debug", "ember-data/adapters/errors", "ember-data/-private/system/record-arrays", "ember-data/-private/system/many-array", "ember-data/-private/system/record-array-manager", "ember-data/-private/adapters", "ember-data/-private/adapters/build-url-mixin", "ember-data/-private/serializers", "ember-inflector", "ember-data/serializers/embedded-records-mixin", "ember-data/-private/transforms", "ember-data/relationships", "ember-data/setup-container", "ember-data/-private/instance-initializers/initialize-store-service", "ember-data/-private/system/container-proxy", "ember-data/-private/system/relationships/state/relationship"], function (exports, _ember, _emberDataPrivateDebug, _emberDataPrivateFeatures, _emberDataPrivateCore, _emberDataPrivateSystemNormalizeModelName, _emberDataPrivateSystemModelInternalModel, _emberDataPrivateSystemPromiseProxies, _emberDataPrivateSystemStore, _emberDataPrivateSystemModel, _emberDataModel, _emberDataPrivateSystemSnapshot, _emberDataAdapter, _emberDataSerializer, _emberDataPrivateSystemDebug, _emberDataAdaptersErrors, _emberDataPrivateSystemRecordArrays, _emberDataPrivateSystemManyArray, _emberDataPrivateSystemRecordArrayManager, _emberDataPrivateAdapters, _emberDataPrivateAdaptersBuildUrlMixin, _emberDataPrivateSerializers, _emberInflector, _emberDataSerializersEmbeddedRecordsMixin, _emberDataPrivateTransforms, _emberDataRelationships, _emberDataSetupContainer, _emberDataPrivateInstanceInitializersInitializeStoreService, _emberDataPrivateSystemContainerProxy, _emberDataPrivateSystemRelationshipsStateRelationship) {
/**
Ember Data
@module ember-data
@main ember-data
*/
if (_ember.default.VERSION.match(/^1\.([0-9]|1[0-2])\./)) {
throw new _ember.default.Error("Ember Data requires at least Ember 1.13.0, but you have " + _ember.default.VERSION + ". Please upgrade your version of Ember, then upgrade Ember Data.");
}
- if (_ember.default.VERSION.match(/^1\.13\./)) {}
-
_emberDataPrivateCore.default.Store = _emberDataPrivateSystemStore.Store;
_emberDataPrivateCore.default.PromiseArray = _emberDataPrivateSystemPromiseProxies.PromiseArray;
_emberDataPrivateCore.default.PromiseObject = _emberDataPrivateSystemPromiseProxies.PromiseObject;
_emberDataPrivateCore.default.PromiseManyArray = _emberDataPrivateSystemPromiseProxies.PromiseManyArray;
@@ -12059,17 +12199,17 @@
_emberDataPrivateCore.default.InternalModel = _emberDataPrivateSystemModelInternalModel.default;
_emberDataPrivateCore.default.Snapshot = _emberDataPrivateSystemSnapshot.default;
_emberDataPrivateCore.default.Adapter = _emberDataAdapter.default;
- _emberDataPrivateCore.default.AdapterError = _emberDataPrivateAdaptersErrors.AdapterError;
- _emberDataPrivateCore.default.InvalidError = _emberDataPrivateAdaptersErrors.InvalidError;
- _emberDataPrivateCore.default.TimeoutError = _emberDataPrivateAdaptersErrors.TimeoutError;
- _emberDataPrivateCore.default.AbortError = _emberDataPrivateAdaptersErrors.AbortError;
+ _emberDataPrivateCore.default.AdapterError = _emberDataAdaptersErrors.AdapterError;
+ _emberDataPrivateCore.default.InvalidError = _emberDataAdaptersErrors.InvalidError;
+ _emberDataPrivateCore.default.TimeoutError = _emberDataAdaptersErrors.TimeoutError;
+ _emberDataPrivateCore.default.AbortError = _emberDataAdaptersErrors.AbortError;
- _emberDataPrivateCore.default.errorsHashToArray = _emberDataPrivateAdaptersErrors.errorsHashToArray;
- _emberDataPrivateCore.default.errorsArrayToHash = _emberDataPrivateAdaptersErrors.errorsArrayToHash;
+ _emberDataPrivateCore.default.errorsHashToArray = _emberDataAdaptersErrors.errorsHashToArray;
+ _emberDataPrivateCore.default.errorsArrayToHash = _emberDataAdaptersErrors.errorsArrayToHash;
_emberDataPrivateCore.default.Serializer = _emberDataSerializer.default;
_emberDataPrivateCore.default.DebugAdapter = _emberDataPrivateSystemDebug.default;
@@ -12206,11 +12346,11 @@
});
});
/**
@module ember-data
*/
-define('ember-data/serializers/embedded-records-mixin', ['exports', 'ember', 'ember-data/-private/debug'], function (exports, _ember, _emberDataPrivateDebug) {
+define('ember-data/serializers/embedded-records-mixin', ['exports', 'ember', 'ember-data/-private/debug', 'ember-data/-private/features'], function (exports, _ember, _emberDataPrivateDebug, _emberDataPrivateFeatures) {
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
var get = _ember.default.get;
var set = _ember.default.set;
var camelize = _ember.default.String.camelize;
@@ -12431,11 +12571,11 @@
}
}
},
/**
- Serialize `hasMany` relationship when it is configured as embedded objects.
+ Serializes `hasMany` relationships when it is configured as embedded objects.
This example of a post model has many comments:
```js
Post = DS.Model.extend({
title: DS.attr('string'),
body: DS.attr('string'),
@@ -12472,11 +12612,11 @@
}]
}
}
```
The attrs options object can use more specific instruction for extracting and
- serializing. When serializing, an option to embed `ids` or `records` can be set.
+ serializing. When serializing, an option to embed `ids`, `ids-and-types` or `records` can be set.
When extracting the only option is `records`.
So `{ embedded: 'always' }` is shorthand for:
`{ serialize: 'records', deserialize: 'records' }`
To embed the `ids` for a related object (using a hasMany relationship):
```app/serializers/post.js
@@ -12495,10 +12635,51 @@
"body": "I want this for my ORM, I want that for my template language..."
"comments": ["1", "2"]
}
}
```
+ To embed the relationship as a collection of objects with `id` and `type` keys, set
+ `ids-and-types` for the related object.
+ This is particularly useful for polymorphic relationships where records don't share
+ the same table and the `id` is not enough information.
+ By example having a user that has many pets:
+ ```js
+ User = DS.Model.extend({
+ name: DS.attr('string'),
+ pets: DS.hasMany('pet', { polymorphic: true })
+ });
+ Pet = DS.Model.extend({
+ name: DS.attr('string'),
+ });
+ Cat = Pet.extend({
+ // ...
+ });
+ Parrot = Pet.extend({
+ // ...
+ });
+ ```
+ ```app/serializers/user.js
+ import DS from 'ember-data;
+ export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
+ attrs: {
+ pets: { serialize: 'ids-and-types', deserialize: 'records' }
+ }
+ });
+ ```
+ ```js
+ {
+ "user": {
+ "id": "1"
+ "name": "Bertin Osborne",
+ "pets": [
+ { "id": "1", "type": "Cat" },
+ { "id": "1", "type": "Parrot"}
+ ]
+ }
+ }
+ ```
+ Note that the `ids-and-types` strategy is still behind the `ds-serialize-ids-and-types` feature flag.
@method serializeHasMany
@param {DS.Snapshot} snapshot
@param {Object} json
@param {Object} relationship
*/
@@ -12506,20 +12687,43 @@
var attr = relationship.key;
if (this.noSerializeOptionSpecified(attr)) {
this._super(snapshot, json, relationship);
return;
}
- var includeIds = this.hasSerializeIdsOption(attr);
- var includeRecords = this.hasSerializeRecordsOption(attr);
- if (includeIds) {
+
+ if (this.hasSerializeIdsOption(attr)) {
var serializedKey = this.keyForRelationship(attr, relationship.kind, 'serialize');
json[serializedKey] = snapshot.hasMany(attr, { ids: true });
- } else if (includeRecords) {
+ } else if (this.hasSerializeRecordsOption(attr)) {
this._serializeEmbeddedHasMany(snapshot, json, relationship);
+ } else {
+ if (this.hasSerializeIdsAndTypesOption(attr)) {
+ this._serializeHasManyAsIdsAndTypes(snapshot, json, relationship);
+ }
}
},
+ /**
+ Serializes a hasMany relationship as an array of objects containing only `id` and `type`
+ keys.
+ This has its use case on polymorphic hasMany relationships where the server is not storing
+ all records in the same table using STI, and therefore the `id` is not enough information
+ TODO: Make the default in Ember-data 3.0??
+ */
+ _serializeHasManyAsIdsAndTypes: function (snapshot, json, relationship) {
+ var serializedKey = this.keyForAttribute(relationship.key, 'serialize');
+ var hasMany = snapshot.hasMany(relationship.key);
+
+ json[serializedKey] = _ember.default.A(hasMany).map(function (recordSnapshot) {
+ //
+ // I'm sure I'm being utterly naive here. Propably id is a configurate property and
+ // type too, and the modelName has to be normalized somehow.
+ //
+ return { id: recordSnapshot.id, type: recordSnapshot.modelName };
+ });
+ },
+
_serializeEmbeddedHasMany: function (snapshot, json, relationship) {
var serializedKey = this._getMappedKey(relationship.key, snapshot.type);
if (serializedKey === relationship.key && this.keyForRelationship) {
serializedKey = this.keyForRelationship(relationship.key, relationship.kind, "serialize");
}
@@ -12591,10 +12795,16 @@
hasSerializeIdsOption: function (attr) {
var option = this.attrsOption(attr);
return option && (option.serialize === 'ids' || option.serialize === 'id');
},
+ // checks config for attrs option to serialize records as objects containing id and types
+ hasSerializeIdsAndTypesOption: function (attr) {
+ var option = this.attrsOption(attr);
+ return option && (option.serialize === 'ids-and-types' || option.serialize === 'id-and-type');
+ },
+
// checks config for attrs option to serialize records
noSerializeOptionSpecified: function (attr) {
var option = this.attrsOption(attr);
return !(option && (option.serialize || option.embedded));
},
@@ -12709,11 +12919,12 @@
}
var modelClass = store.modelFor(modelName);
var serializer = store.serializerFor(modelName);
return serializer.normalize(modelClass, relationshipHash, null);
- }
+ },
+ isEmbeddedRecordsMixin: true
});
});
define('ember-data/serializers/json-api', ['exports', 'ember', 'ember-data/-private/debug', 'ember-data/serializers/json', 'ember-data/-private/system/normalize-model-name', 'ember-inflector', 'ember-data/-private/features'], function (exports, _ember, _emberDataPrivateDebug, _emberDataSerializersJson, _emberDataPrivateSystemNormalizeModelName, _emberInflector, _emberDataPrivateFeatures) {
var dasherize = _ember.default.String.dasherize;
@@ -12882,15 +13093,12 @@
@param {DS.Store} store
@param {Object} payload
*/
pushPayload: function (store, payload) {
var normalizedPayload = this._normalizeDocumentHelper(payload);
- if (false) {
- return store.push(normalizedPayload);
- } else {
- store.push(normalizedPayload);
- }
+
+ store.push(normalizedPayload);
},
/**
@method _normalizeResponse
@param {DS.Store} store
@@ -13200,11 +13408,11 @@
exports.default = JSONAPISerializer;
});
/**
@module ember-data
*/
-define('ember-data/serializers/json', ['exports', 'ember', 'ember-data/-private/debug', 'ember-data/serializer', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/utils', 'ember-data/-private/adapters/errors', 'ember-data/-private/features'], function (exports, _ember, _emberDataPrivateDebug, _emberDataSerializer, _emberDataPrivateSystemCoerceId, _emberDataPrivateSystemNormalizeModelName, _emberDataPrivateUtils, _emberDataPrivateAdaptersErrors, _emberDataPrivateFeatures) {
+define('ember-data/serializers/json', ['exports', 'ember', 'ember-data/-private/debug', 'ember-data/serializer', 'ember-data/-private/system/coerce-id', 'ember-data/-private/system/normalize-model-name', 'ember-data/-private/utils', 'ember-data/adapters/errors', 'ember-data/-private/features'], function (exports, _ember, _emberDataPrivateDebug, _emberDataSerializer, _emberDataPrivateSystemCoerceId, _emberDataPrivateSystemNormalizeModelName, _emberDataPrivateUtils, _emberDataAdaptersErrors, _emberDataPrivateFeatures) {
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
var get = _ember.default.get;
var isNone = _ember.default.isNone;
var assign = _ember.default.assign || _ember.default.merge;
@@ -13362,26 +13570,22 @@
*/
applyTransforms: function (typeClass, data) {
var _this = this;
var attributes = undefined;
- if (true) {
- attributes = get(typeClass, 'attributes');
- }
+ attributes = get(typeClass, 'attributes');
+
typeClass.eachTransformedAttribute(function (key, typeClass) {
- if (!data.hasOwnProperty(key)) {
+ if (!(key in data)) {
return;
}
var transform = _this.transformFor(typeClass);
- if (true) {
- var transformMeta = attributes.get(key);
- data[key] = transform.deserialize(data[key], transformMeta.options);
- } else {
- data[key] = transform.deserialize(data[key]);
- }
+
+ var transformMeta = attributes.get(key);
+ data[key] = transform.deserialize(data[key], transformMeta.options);
});
return data;
},
@@ -14217,15 +14421,12 @@
if (this._canSerialize(key)) {
var value = snapshot.attr(key);
if (type) {
var transform = this.transformFor(type);
- if (true) {
- value = transform.serialize(value, attribute.options);
- } else {
- value = transform.serialize(value);
- }
+
+ value = transform.serialize(value, attribute.options);
}
// if provided, use the mapping provided by `attrs` in
// the serializer
var payloadKey = this._getMappedKey(key, snapshot.type);
@@ -14458,11 +14659,11 @@
*/
extractErrors: function (store, typeClass, payload, id) {
var _this7 = this;
if (payload && typeof payload === 'object' && payload.errors) {
- payload = (0, _emberDataPrivateAdaptersErrors.errorsArrayToHash)(payload.errors);
+ payload = (0, _emberDataAdaptersErrors.errorsArrayToHash)(payload.errors);
this.normalizeUsingDeclaredMapping(typeClass, payload);
typeClass.eachAttribute(function (name) {
var key = _this7.keyForAttribute(name, 'deserialize');
@@ -14561,12 +14762,11 @@
var camelize = _ember.default.String.camelize;
/**
Normally, applications will use the `RESTSerializer` by implementing
- the `normalize` method and individual normalizations under
- `normalizeHash`.
+ the `normalize` method.
This allows you to do whatever kind of munging you need, and is
especially useful if your server is inconsistent and you need to
do munging differently for many different kinds of responses.
@@ -14575,11 +14775,11 @@
## Across the Board Normalization
There are also a number of hooks that you might find useful to define
across-the-board rules for your payload. These rules will be useful
if your server is consistent, or if you're building an adapter for
- an infrastructure service, like Parse, and want to encode service
+ an infrastructure service, like Firebase, and want to encode service
conventions.
For example, if all of your keys are underscored and all-caps, but
otherwise consistent with the names you use in your models, you
can implement across-the-board rules for how to convert an attribute
@@ -14659,40 +14859,40 @@
The `normalize` method will be called three times:
* With `App.Post`, `"posts"` and `{ id: 1, title: "Rails is omakase", ... }`
* With `App.Comment`, `"comments"` and `{ id: 1, body: "FIRST" }`
* With `App.Comment`, `"comments"` and `{ id: 2, body: "Rails is unagi" }`
You can use this method, for example, to normalize underscored keys to camelized
- or other general-purpose normalizations.
- If you want to do normalizations specific to some part of the payload, you
- can specify those under `normalizeHash`.
+ or other general-purpose normalizations. You will only need to implement
+ `normalize` and manipulate the payload as desired.
For example, if the `IDs` under `"comments"` are provided as `_id` instead of
`id`, you can specify how to normalize just the comments:
```app/serializers/post.js
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
- normalizeHash: {
- comments: function(hash) {
+ normalize(model, hash, prop) {
+ if (prop === 'comments') {
hash.id = hash._id;
- delete hash._id;
- return hash;
+ delete hash._id;
}
+ return this._super(...arguments);
}
});
```
- The key under `normalizeHash` is just the original key that was in the original
- payload.
+ On each call to the `normalize` method, the third parameter (`prop`) is always
+ one of the keys that were in the original payload or in the result of another
+ normalization as `normalizeResponse`.
@method normalize
@param {DS.Model} modelClass
@param {Object} resourceHash
@param {String} prop
@return {Object}
*/
normalize: function (modelClass, resourceHash, prop) {
if (this.normalizeHash && this.normalizeHash[prop]) {
this.normalizeHash[prop](resourceHash);
}
- return this._super(modelClass, resourceHash, prop);
+ return this._super(modelClass, resourceHash);
},
/**
Normalizes an array of resource payloads and returns a JSON-API Document
with primary data and, if any, included data as `{ data, included }`.
@@ -14943,15 +15143,11 @@
(_documentHash$included5 = documentHash.included).push.apply(_documentHash$included5, _toConsumableArray(included));
}
});
}
- if (false) {
- return store.push(documentHash);
- } else {
- store.push(documentHash);
- }
+ store.push(documentHash);
},
/**
This method is used to convert each JSON root key in the payload
into a modelName that it can use to look up the appropriate model for
@@ -15358,11 +15554,11 @@
*/
deserialize: null
});
});
define("ember-data/version", ["exports"], function (exports) {
- exports.default = "2.5.5";
+ exports.default = "2.6.0-beta.1";
});
define("ember-inflector", ["exports", "ember", "ember-inflector/lib/system", "ember-inflector/lib/ext/string"], function (exports, _ember, _emberInflectorLibSystem, _emberInflectorLibExtString) {
_emberInflectorLibSystem.Inflector.defaultRules = _emberInflectorLibSystem.defaultRules;
_ember.default.Inflector = _emberInflectorLibSystem.Inflector;
@@ -15753,19 +15949,19 @@
if (isUncountable) {
return word;
}
- for (rule in irregular) {
+ for (rule in this.rules.irregular) {
if (lowercase.match(rule + "$")) {
substitution = irregular[rule];
if (isCamelized && irregular[lastWord]) {
substitution = capitalize(substitution);
rule = capitalize(rule);
}
- return word.replace(new RegExp(rule, 'i'), substitution);
+ return word.replace(rule, substitution);
}
}
for (var i = typeRules.length, min = 0; i > min; i--) {
inflection = typeRules[i - 1];