@ember-data/serializer 4.7.0-beta.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 +1 -2
- package/addon/json.js +38 -11
- package/addon/rest.js +7 -5
- package/package.json +4 -4
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(
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 &&
|
|
1477
|
-
|
|
1478
|
-
delete
|
|
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 &&
|
|
1485
|
-
|
|
1486
|
-
delete
|
|
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
|
|
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(
|
|
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.
|
|
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.
|
|
22
|
-
"@ember-data/store": "4.
|
|
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.
|
|
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",
|