Skip to content

Commit 69c9e08

Browse files
committedMar 11, 2024
feat: typed serializers
1 parent 7127828 commit 69c9e08

File tree

11 files changed

+531
-359
lines changed

11 files changed

+531
-359
lines changed
 

‎packages/model/src/-private/model.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class Model extends EmberObject {
7171
binding?: T
7272
): void;
7373
static eachTransformedAttribute<K extends keyof this & string>(
74-
callback: (this: ModelSchema<this>, key: K, type: string | null) => void,
74+
callback: (this: ModelSchema<this>, key: K, type: string) => void,
7575
binding?: T
7676
): void;
7777

‎packages/serializer/.eslintrc.cjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = {
1717
isolation.rules({
1818
allowedImports: [
1919
'ember-inflector',
20-
'@ember/application',
20+
'@ember/owner',
2121
'@ember/service',
2222
'@ember/debug',
2323
'@ember/object',

‎packages/serializer/package.json

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"peerDependencies": {
5050
"@ember/string": "^3.1.1",
5151
"@warp-drive/core-types": "workspace:0.0.0-alpha.21",
52+
"@ember-data/legacy-compat": "workspace:5.4.0-alpha.35",
5253
"ember-inflector": "^4.0.2"
5354
},
5455
"dependenciesMeta": {
@@ -72,6 +73,9 @@
7273
},
7374
"@ember-data/tracking": {
7475
"injected": true
76+
},
77+
"@ember-data/legacy-compat": {
78+
"injected": true
7579
}
7680
},
7781
"dependencies": {
@@ -95,6 +99,7 @@
9599
"@ember-data/request": "workspace:5.4.0-alpha.35",
96100
"@ember-data/store": "workspace:5.4.0-alpha.35",
97101
"@ember-data/tracking": "workspace:5.4.0-alpha.35",
102+
"@ember-data/legacy-compat": "workspace:5.4.0-alpha.35",
98103
"@ember/string": "^3.1.1",
99104
"@embroider/addon-dev": "^4.1.2",
100105
"@glimmer/component": "^1.1.2",

‎packages/serializer/src/-private/transforms/boolean.ts

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
@module @ember-data/serializer
33
*/
44

5+
import { TransformName } from '@warp-drive/core-types/symbols';
6+
57
/**
68
The `BooleanTransform` class is used to serialize and deserialize
79
boolean attributes on Ember Data record objects. This transform is
@@ -62,6 +64,8 @@ export default class BooleanTransform {
6264
return Boolean(deserialized);
6365
}
6466

67+
[TransformName] = 'boolean' as const;
68+
6569
static create() {
6670
return new this();
6771
}

‎packages/serializer/src/-private/transforms/date.ts

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
@module @ember-data/serializer
33
*/
44

5+
import { TransformName } from '@warp-drive/core-types/symbols';
6+
57
/**
68
The `DateTransform` class is used to serialize and deserialize
79
date attributes on Ember Data record objects. This transform is used
@@ -53,6 +55,8 @@ export default class DateTransform {
5355
}
5456
}
5557

58+
[TransformName] = 'date' as const;
59+
5660
static create() {
5761
return new this();
5862
}

‎packages/serializer/src/-private/transforms/number.ts

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
@module @ember-data/serializer
33
*/
44

5+
import { TransformName } from '@warp-drive/core-types/symbols';
6+
57
function isNumber(value: number) {
68
return value === value && value !== Infinity && value !== -Infinity;
79
}
@@ -48,6 +50,8 @@ export default class NumberTransform {
4850
}
4951
}
5052

53+
[TransformName] = 'number' as const;
54+
5155
static create() {
5256
return new this();
5357
}

‎packages/serializer/src/-private/transforms/string.ts

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
@module @ember-data/serializer
33
*/
44

5+
import { TransformName } from '@warp-drive/core-types/symbols';
6+
57
/**
68
The `StringTransform` class is used to serialize and deserialize
79
string attributes on Ember Data record objects. This transform is
@@ -31,6 +33,8 @@ export default class StringTransform {
3133
return !deserialized && deserialized !== '' ? null : String(deserialized);
3234
}
3335

36+
[TransformName] = 'string' as const;
37+
3438
static create() {
3539
return new this();
3640
}

‎packages/serializer/src/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ import { inject as service } from '@ember/service';
112112

113113
import type Store from '@ember-data/store';
114114
import type { ModelSchema } from '@ember-data/store/-types/q/ds-model';
115+
import type { EmptyResourceDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/raw';
115116

116117
/**
117118
> ⚠️ CAUTION you likely want the docs for [<Interface> Serializer](/ember-data/release/classes/%3CInterface%3E%20Serializer)
@@ -265,7 +266,7 @@ export default class extends EmberObject {
265266
@param {Object} hash
266267
@return {Object}
267268
*/
268-
normalize(_typeClass: ModelSchema, hash: Record<string, unknown>): Record<string, unknown> {
269-
return hash;
269+
normalize(_typeClass: ModelSchema, hash: Record<string, unknown>): SingleResourceDocument | EmptyResourceDocument {
270+
return hash as unknown as SingleResourceDocument;
270271
}
271272
}

0 commit comments

Comments
 (0)