@ember-data/serializer 4.8.0-alpha.1 → 4.8.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/addon/json-api.js CHANGED
@@ -9,7 +9,6 @@ import { DEBUG } from '@glimmer/env';
9
9
  import { pluralize, singularize } from 'ember-inflector';
10
10
 
11
11
  import JSONSerializer from '@ember-data/serializer/json';
12
- import { normalizeModelName } from '@ember-data/store';
13
12
 
14
13
  /**
15
14
  Ember Data 2.0 Serializer:
@@ -361,7 +360,7 @@ const JSONAPISerializer = JSONSerializer.extend({
361
360
  @return {String} the model's modelName
362
361
  */
363
362
  modelNameFromPayloadKey(key) {
364
- return singularize(normalizeModelName(key));
363
+ return singularize(dasherize(key));
365
364
  },
366
365
 
367
366
  /**
package/addon/json.js CHANGED
@@ -4,14 +4,18 @@
4
4
  import { getOwner } from '@ember/application';
5
5
  import { assert, warn } from '@ember/debug';
6
6
  import { get } from '@ember/object';
7
+ import { dasherize } from '@ember/string';
7
8
  import { isNone, typeOf } from '@ember/utils';
8
9
 
9
10
  import Serializer from '@ember-data/serializer';
10
- import { normalizeModelName } from '@ember-data/store';
11
- import { coerceId, errorsArrayToHash } from '@ember-data/store/-private';
11
+ import { coerceId } from '@ember-data/store/-private';
12
12
 
13
13
  import { modelHasAttributeOrRelationshipNamedType } from './-private';
14
14
 
15
+ const SOURCE_POINTER_REGEXP = /^\/?data\/(attributes|relationships)\/(.*)/;
16
+ const SOURCE_POINTER_PRIMARY_REGEXP = /^\/?data/;
17
+ const PRIMARY_ATTRIBUTE_KEY = 'base';
18
+
15
19
  /**
16
20
  Ember Data 2.0 Serializer:
17
21
 
@@ -795,7 +799,7 @@ const JSONSerializer = Serializer.extend({
795
799
  @return {String} the model's modelName
796
800
  */
797
801
  modelNameFromPayloadKey(key) {
798
- return normalizeModelName(key);
802
+ return dasherize(key);
799
803
  },
800
804
 
801
805
  /**
@@ -1467,25 +1471,48 @@ const JSONSerializer = Serializer.extend({
1467
1471
  */
1468
1472
  extractErrors(store, typeClass, payload, id) {
1469
1473
  if (payload && typeof payload === 'object' && payload.errors) {
1470
- payload = errorsArrayToHash(payload.errors);
1474
+ // the default assumption is that errors is already in JSON:API format
1475
+ const extracted = {};
1476
+
1477
+ payload.errors.forEach((error) => {
1478
+ if (error.source && error.source.pointer) {
1479
+ let key = error.source.pointer.match(SOURCE_POINTER_REGEXP);
1471
1480
 
1472
- this.normalizeUsingDeclaredMapping(typeClass, payload);
1481
+ if (key) {
1482
+ key = key[2];
1483
+ } else if (error.source.pointer.search(SOURCE_POINTER_PRIMARY_REGEXP) !== -1) {
1484
+ key = PRIMARY_ATTRIBUTE_KEY;
1485
+ }
1473
1486
 
1487
+ if (key) {
1488
+ extracted[key] = extracted[key] || [];
1489
+ extracted[key].push(error.detail || error.title);
1490
+ }
1491
+ }
1492
+ });
1493
+
1494
+ // if the user has an attrs hash, convert keys using it
1495
+ this.normalizeUsingDeclaredMapping(typeClass, extracted);
1496
+
1497
+ // for each attr and relationship, make sure that we use
1498
+ // the normalized key
1474
1499
  typeClass.eachAttribute((name) => {
1475
1500
  let key = this.keyForAttribute(name, 'deserialize');
1476
- if (key !== name && payload[key] !== undefined) {
1477
- payload[name] = payload[key];
1478
- delete payload[key];
1501
+ if (key !== name && extracted[key] !== undefined) {
1502
+ extracted[name] = extracted[key];
1503
+ delete extracted[key];
1479
1504
  }
1480
1505
  });
1481
1506
 
1482
1507
  typeClass.eachRelationship((name) => {
1483
1508
  let key = this.keyForRelationship(name, 'deserialize');
1484
- if (key !== name && payload[key] !== undefined) {
1485
- payload[name] = payload[key];
1486
- delete payload[key];
1509
+ if (key !== name && extracted[key] !== undefined) {
1510
+ extracted[name] = extracted[key];
1511
+ delete extracted[key];
1487
1512
  }
1488
1513
  });
1514
+
1515
+ return extracted;
1489
1516
  }
1490
1517
 
1491
1518
  return payload;
package/addon/rest.js CHANGED
@@ -1,20 +1,22 @@
1
1
  /**
2
2
  * @module @ember-data/serializer/rest
3
3
  */
4
- import { makeArray } from '@ember/array';
5
4
  import { assert, warn } from '@ember/debug';
6
- import { camelize } from '@ember/string';
5
+ import { camelize, dasherize } from '@ember/string';
7
6
  import { isNone, typeOf } from '@ember/utils';
8
7
  import { DEBUG } from '@glimmer/env';
9
8
 
10
9
  import { singularize } from 'ember-inflector';
11
10
 
12
11
  import JSONSerializer from '@ember-data/serializer/json';
13
- import { normalizeModelName } from '@ember-data/store';
14
12
  import { coerceId } from '@ember-data/store/-private';
15
13
 
16
14
  import { modelHasAttributeOrRelationshipNamedType } from './-private';
17
15
 
16
+ function makeArray(value) {
17
+ return Array.isArray(value) ? value : [value];
18
+ }
19
+
18
20
  /**
19
21
  Normally, applications will use the `RESTSerializer` by implementing
20
22
  the `normalize` method.
@@ -350,7 +352,7 @@ const RESTSerializer = JSONSerializer.extend({
350
352
  },
351
353
 
352
354
  isPrimaryType(store, modelName, primaryModelClass) {
353
- return normalizeModelName(modelName) === primaryModelClass.modelName;
355
+ return dasherize(modelName) === primaryModelClass.modelName;
354
356
  },
355
357
 
356
358
  /**
@@ -473,7 +475,7 @@ const RESTSerializer = JSONSerializer.extend({
473
475
  @return {String} the model's modelName
474
476
  */
475
477
  modelNameFromPayloadKey(key) {
476
- return singularize(normalizeModelName(key));
478
+ return singularize(dasherize(key));
477
479
  },
478
480
 
479
481
  // SERIALIZE
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ember-data/serializer",
3
- "version": "4.8.0-alpha.1",
3
+ "version": "4.8.0-alpha.2",
4
4
  "description": "The default blueprint for ember-cli addons.",
5
5
  "keywords": [
6
6
  "ember-addon"
@@ -18,15 +18,15 @@
18
18
  "test:node": "mocha"
19
19
  },
20
20
  "dependencies": {
21
- "@ember-data/private-build-infra": "4.8.0-alpha.1",
22
- "@ember-data/store": "4.8.0-alpha.1",
21
+ "@ember-data/private-build-infra": "4.8.0-alpha.2",
22
+ "@ember-data/store": "4.8.0-alpha.2",
23
23
  "ember-auto-import": "^2.4.2",
24
24
  "ember-cli-babel": "^7.26.11",
25
25
  "ember-cli-test-info": "^1.0.0",
26
26
  "ember-cli-typescript": "^5.1.0"
27
27
  },
28
28
  "devDependencies": {
29
- "@ember-data/unpublished-test-infra": "4.8.0-alpha.1",
29
+ "@ember-data/unpublished-test-infra": "4.8.0-alpha.2",
30
30
  "@ember/optional-features": "^2.0.0",
31
31
  "@ember/string": "^3.0.0",
32
32
  "@ember/test-helpers": "~2.7.0",