@ember-data-mirror/serializer 5.4.0-alpha.49

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.
Files changed (58) hide show
  1. package/LICENSE.md +11 -0
  2. package/README.md +98 -0
  3. package/addon/-private.js +3 -0
  4. package/addon/-private.js.map +1 -0
  5. package/addon/embedded-records-mixin-QJe_8jrF.js +572 -0
  6. package/addon/embedded-records-mixin-QJe_8jrF.js.map +1 -0
  7. package/addon/index.js +181 -0
  8. package/addon/index.js.map +1 -0
  9. package/addon/json-api.js +508 -0
  10. package/addon/json-api.js.map +1 -0
  11. package/addon/json.js +1375 -0
  12. package/addon/json.js.map +1 -0
  13. package/addon/rest.js +684 -0
  14. package/addon/rest.js.map +1 -0
  15. package/addon/string-Juwz4cu0.js +345 -0
  16. package/addon/string-Juwz4cu0.js.map +1 -0
  17. package/addon/transform.js +1 -0
  18. package/addon/transform.js.map +1 -0
  19. package/addon/utils-NcVD2Jb5.js +12 -0
  20. package/addon/utils-NcVD2Jb5.js.map +1 -0
  21. package/addon-main.js +94 -0
  22. package/blueprints/serializer/files/__root__/__path__/__name__.js +4 -0
  23. package/blueprints/serializer/index.js +14 -0
  24. package/blueprints/serializer/native-files/__root__/__path__/__name__.js +4 -0
  25. package/blueprints/serializer-test/index.js +29 -0
  26. package/blueprints/serializer-test/qunit-files/__root__/__path__/__test__.js +24 -0
  27. package/blueprints/transform/files/__root__/__path__/__name__.js +13 -0
  28. package/blueprints/transform/index.js +7 -0
  29. package/blueprints/transform/native-files/__root__/__path__/__name__.js +13 -0
  30. package/blueprints/transform-test/index.js +29 -0
  31. package/blueprints/transform-test/qunit-files/__root__/__path__/__test__.js +13 -0
  32. package/package.json +113 -0
  33. package/unstable-preview-types/-private/embedded-records-mixin.d.ts +7 -0
  34. package/unstable-preview-types/-private/embedded-records-mixin.d.ts.map +1 -0
  35. package/unstable-preview-types/-private/transforms/boolean.d.ts +52 -0
  36. package/unstable-preview-types/-private/transforms/boolean.d.ts.map +1 -0
  37. package/unstable-preview-types/-private/transforms/date.d.ts +33 -0
  38. package/unstable-preview-types/-private/transforms/date.d.ts.map +1 -0
  39. package/unstable-preview-types/-private/transforms/number.d.ts +34 -0
  40. package/unstable-preview-types/-private/transforms/number.d.ts.map +1 -0
  41. package/unstable-preview-types/-private/transforms/string.d.ts +34 -0
  42. package/unstable-preview-types/-private/transforms/string.d.ts.map +1 -0
  43. package/unstable-preview-types/-private/transforms/transform.d.ts +128 -0
  44. package/unstable-preview-types/-private/transforms/transform.d.ts.map +1 -0
  45. package/unstable-preview-types/-private/utils.d.ts +6 -0
  46. package/unstable-preview-types/-private/utils.d.ts.map +1 -0
  47. package/unstable-preview-types/-private.d.ts +13 -0
  48. package/unstable-preview-types/-private.d.ts.map +1 -0
  49. package/unstable-preview-types/index.d.ts +278 -0
  50. package/unstable-preview-types/index.d.ts.map +1 -0
  51. package/unstable-preview-types/json-api.d.ts +515 -0
  52. package/unstable-preview-types/json-api.d.ts.map +1 -0
  53. package/unstable-preview-types/json.d.ts +1094 -0
  54. package/unstable-preview-types/json.d.ts.map +1 -0
  55. package/unstable-preview-types/rest.d.ts +602 -0
  56. package/unstable-preview-types/rest.d.ts.map +1 -0
  57. package/unstable-preview-types/transform.d.ts +7 -0
  58. package/unstable-preview-types/transform.d.ts.map +1 -0
@@ -0,0 +1,24 @@
1
+ import { module, test } from 'qunit';
2
+
3
+ import { setupTest } from '<%= modulePrefix %>/tests/helpers';
4
+
5
+ module('<%= friendlyTestDescription %>', function (hooks) {
6
+ setupTest(hooks);
7
+
8
+ // Replace this with your real tests.
9
+ test('it exists', function (assert) {
10
+ let store = this.owner.lookup('service:store');
11
+ let serializer = store.serializerFor('<%= dasherizedModuleName %>');
12
+
13
+ assert.ok(serializer);
14
+ });
15
+
16
+ test('it serializes records', function (assert) {
17
+ let store = this.owner.lookup('service:store');
18
+ let record = store.createRecord('<%= dasherizedModuleName %>', {});
19
+
20
+ let serializedRecord = record.serialize();
21
+
22
+ assert.ok(serializedRecord);
23
+ });
24
+ });
@@ -0,0 +1,13 @@
1
+ export default class <%= classifiedModuleName %>Transform {
2
+ deserialize(serialized) {
3
+ return serialized;
4
+ }
5
+
6
+ serialize(deserialized) {
7
+ return deserialized;
8
+ }
9
+
10
+ static create() {
11
+ return new this();
12
+ }
13
+ }
@@ -0,0 +1,7 @@
1
+ const useEditionDetector = require('@ember-data-mirror/private-build-infra/src/utilities/edition-detector');
2
+
3
+ module.exports = useEditionDetector({
4
+ description: 'Generates an ember-data value transform.',
5
+
6
+ root: __dirname,
7
+ });
@@ -0,0 +1,13 @@
1
+ export default class <%= classifiedModuleName %>Transform {
2
+ deserialize(serialized) {
3
+ return serialized;
4
+ }
5
+
6
+ serialize(deserialized) {
7
+ return deserialized;
8
+ }
9
+
10
+ static create() {
11
+ return new this();
12
+ }
13
+ }
@@ -0,0 +1,29 @@
1
+ const path = require('path');
2
+
3
+ const testInfo = require('ember-cli-test-info');
4
+ const useTestFrameworkDetector = require('@ember-data-mirror/private-build-infra/src/utilities/test-framework-detector');
5
+ const modulePrefixForProject = require('@ember-data-mirror/private-build-infra/src/utilities/module-prefix-for-project');
6
+
7
+ module.exports = useTestFrameworkDetector({
8
+ description: 'Generates a transform unit test.',
9
+
10
+ root: __dirname,
11
+
12
+ fileMapTokens(options) {
13
+ return {
14
+ __root__() {
15
+ return 'tests';
16
+ },
17
+ __path__() {
18
+ return path.join('unit', 'transforms');
19
+ },
20
+ };
21
+ },
22
+
23
+ locals(options) {
24
+ return {
25
+ friendlyTestDescription: testInfo.description(options.entity.name, 'Unit', 'Transform'),
26
+ modulePrefix: modulePrefixForProject(options.project),
27
+ };
28
+ },
29
+ });
@@ -0,0 +1,13 @@
1
+ import { module, test } from 'qunit';
2
+
3
+ import { setupTest } from '<%= modulePrefix %>/tests/helpers';
4
+
5
+ module('<%= friendlyTestDescription %>', function (hooks) {
6
+ setupTest(hooks);
7
+
8
+ // Replace this with your real tests.
9
+ test('it exists', function (assert) {
10
+ let transform = this.owner.lookup('transform:<%= dasherizedModuleName %>');
11
+ assert.ok(transform);
12
+ });
13
+ });
package/package.json ADDED
@@ -0,0 +1,113 @@
1
+ {
2
+ "name": "@ember-data-mirror/serializer",
3
+ "version": "5.4.0-alpha.49",
4
+ "description": "Provides Legacy JSON, JSON:API and REST Implementations of the Serializer Interface for use with @ember-data-mirror/store",
5
+ "keywords": [
6
+ "ember-addon"
7
+ ],
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+ssh://git@github.com:emberjs/data.git",
11
+ "directory": "packages/serializer"
12
+ },
13
+ "license": "MIT",
14
+ "author": "",
15
+ "directories": {},
16
+ "scripts": {
17
+ "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives",
18
+ "build:types": "tsc --build",
19
+ "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js",
20
+ "_build": "bun run build:client && bun run build:types",
21
+ "_syncPnpm": "bun run sync-dependencies-meta-injected"
22
+ },
23
+ "ember-addon": {
24
+ "main": "addon-main.js",
25
+ "type": "addon",
26
+ "version": 1
27
+ },
28
+ "files": [
29
+ "unstable-preview-types",
30
+ "blueprints",
31
+ "addon-main.js",
32
+ "addon",
33
+ "README.md",
34
+ "LICENSE.md",
35
+ "ember-data-mirror-logo-dark.svg",
36
+ "ember-data-mirror-logo-light.svg"
37
+ ],
38
+ "peerDependencies": {
39
+ "@ember/string": "^3.1.1",
40
+ "@warp-drive-mirror/core-types": "0.0.0-alpha.35",
41
+ "@ember-data-mirror/legacy-compat": "5.4.0-alpha.49",
42
+ "ember-inflector": "^4.0.2"
43
+ },
44
+ "dependenciesMeta": {
45
+ "@ember-data-mirror/private-build-infra": {
46
+ "injected": true
47
+ },
48
+ "@warp-drive-mirror/core-types": {
49
+ "injected": true
50
+ },
51
+ "@ember/string": {
52
+ "injected": true
53
+ },
54
+ "ember-inflector": {
55
+ "injected": true
56
+ },
57
+ "@ember-data-mirror/store": {
58
+ "injected": true
59
+ },
60
+ "@ember-data-mirror/request": {
61
+ "injected": true
62
+ },
63
+ "@ember-data-mirror/tracking": {
64
+ "injected": true
65
+ },
66
+ "@ember-data-mirror/legacy-compat": {
67
+ "injected": true
68
+ }
69
+ },
70
+ "dependencies": {
71
+ "@ember-data-mirror/private-build-infra": "5.4.0-alpha.49",
72
+ "@embroider/macros": "^1.15.0",
73
+ "ember-cli-babel": "^8.2.0",
74
+ "ember-cli-test-info": "^1.0.0"
75
+ },
76
+ "devDependencies": {
77
+ "@babel/cli": "^7.24.1",
78
+ "@babel/core": "^7.24.3",
79
+ "@babel/plugin-proposal-decorators": "^7.24.1",
80
+ "@babel/plugin-transform-class-properties": "^7.24.1",
81
+ "@babel/plugin-transform-private-methods": "^7.24.1",
82
+ "@babel/plugin-transform-runtime": "^7.24.3",
83
+ "@babel/plugin-transform-typescript": "^7.24.1",
84
+ "@babel/preset-env": "^7.24.3",
85
+ "@babel/preset-typescript": "^7.24.1",
86
+ "@babel/runtime": "^7.24.1",
87
+ "@ember-data-mirror/request": "5.4.0-alpha.49",
88
+ "@ember-data-mirror/store": "5.4.0-alpha.49",
89
+ "@ember-data-mirror/tracking": "5.4.0-alpha.49",
90
+ "@ember-data-mirror/legacy-compat": "5.4.0-alpha.49",
91
+ "@ember/string": "^3.1.1",
92
+ "@embroider/addon-dev": "^4.2.1",
93
+ "@glimmer/component": "^1.1.2",
94
+ "@rollup/plugin-babel": "^6.0.4",
95
+ "@rollup/plugin-node-resolve": "^15.2.3",
96
+ "@warp-drive-mirror/core-types": "0.0.0-alpha.35",
97
+ "@warp-drive/internal-config": "5.4.0-alpha.49",
98
+ "ember-inflector": "^4.0.2",
99
+ "ember-source": "~5.7.0",
100
+ "pnpm-sync-dependencies-meta-injected": "0.0.10",
101
+ "rollup": "^4.13.0",
102
+ "typescript": "^5.4.3",
103
+ "walk-sync": "^3.0.0",
104
+ "webpack": "^5.91.0"
105
+ },
106
+ "engines": {
107
+ "node": ">= 18.19.1"
108
+ },
109
+ "volta": {
110
+ "extends": "../../../../../../package.json"
111
+ },
112
+ "packageManager": "pnpm@8.15.5"
113
+ }
@@ -0,0 +1,7 @@
1
+ declare module '@ember-data-mirror/serializer/-private/embedded-records-mixin' {
2
+ /// <reference types="ember-source/types" />
3
+ const _default: Mixin;
4
+ export default _default;
5
+ import Mixin from '@ember/object/mixin';
6
+ }
7
+ //# sourceMappingURL=embedded-records-mixin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-records-mixin.d.ts","sourceRoot":"","sources":["../../src/-private/embedded-records-mixin.js"],"names":[],"mappings":";;;kBACkB,qBAAqB"}
@@ -0,0 +1,52 @@
1
+ declare module '@ember-data-mirror/serializer/-private/transforms/boolean' {
2
+ /**
3
+ @module @ember-data-mirror/serializer
4
+ */
5
+ import { TransformName } from '@warp-drive-mirror/core-types/symbols';
6
+ /**
7
+ The `BooleanTransform` class is used to serialize and deserialize
8
+ boolean attributes on Ember Data record objects. This transform is
9
+ used when `boolean` is passed as the type parameter to the
10
+ [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.
11
+
12
+ Usage
13
+
14
+ ```app/models/user.js
15
+ import Model, { attr } from '@ember-data-mirror/model';
16
+
17
+ export default class UserModel extends Model {
18
+ @attr('boolean') isAdmin;
19
+ @attr('string') name;
20
+ @attr('string') email;
21
+ }
22
+ ```
23
+
24
+ By default, the boolean transform only allows for values of `true` or
25
+ `false`. You can opt into allowing `null` values for
26
+ boolean attributes via `attr('boolean', { allowNull: true })`
27
+
28
+ ```app/models/user.js
29
+ import Model, { attr } from '@ember-data-mirror/model';
30
+
31
+ export default class UserModel extends Model {
32
+ @attr('string') email;
33
+ @attr('string') username;
34
+ @attr('boolean', { allowNull: true }) wantsWeeklyEmail;
35
+ }
36
+ ```
37
+
38
+ @class BooleanTransform
39
+ @public
40
+ */
41
+ export default class BooleanTransform {
42
+ deserialize(serialized: boolean | null | number | string, options?: {
43
+ allowNull?: boolean;
44
+ }): boolean | null;
45
+ serialize(deserialized: boolean | null, options?: {
46
+ allowNull?: boolean;
47
+ }): boolean | null;
48
+ [TransformName]: "boolean";
49
+ static create(): BooleanTransform;
50
+ }
51
+ }
52
+ //# sourceMappingURL=boolean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../../src/-private/transforms/boolean.ts"],"names":[],"mappings":"AAAA;;EAEE;AAEF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,WAAW,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,IAAI;IAgB5G,SAAS,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,IAAI;IAQ1F,CAAC,aAAa,CAAC,YAAsB;IAErC,MAAM,CAAC,MAAM;CAGd"}
@@ -0,0 +1,33 @@
1
+ declare module '@ember-data-mirror/serializer/-private/transforms/date' {
2
+ /**
3
+ @module @ember-data-mirror/serializer
4
+ */
5
+ import { TransformName } from '@warp-drive-mirror/core-types/symbols';
6
+ /**
7
+ The `DateTransform` class is used to serialize and deserialize
8
+ date attributes on Ember Data record objects. This transform is used
9
+ when `date` is passed as the type parameter to the
10
+ [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function. It uses the [`ISO 8601`](https://en.wikipedia.org/wiki/ISO_8601)
11
+ standard.
12
+
13
+ ```app/models/score.js
14
+ import Model, { attr, belongsTo } from '@ember-data-mirror/model';
15
+
16
+ export default class ScoreModel extends Model {
17
+ @attr('number') value;
18
+ @belongsTo('player') player;
19
+ @attr('date') date;
20
+ }
21
+ ```
22
+
23
+ @class DateTransform
24
+ @public
25
+ */
26
+ export default class DateTransform {
27
+ deserialize(serialized: string | number | null, _options?: Record<string, unknown>): Date | null;
28
+ serialize(date: Date, _options?: Record<string, unknown>): string | null;
29
+ [TransformName]: "date";
30
+ static create(): DateTransform;
31
+ }
32
+ }
33
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../../src/-private/transforms/date.ts"],"names":[],"mappings":"AAAA;;EAEE;AAEF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoBlF,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;IASxE,CAAC,aAAa,CAAC,SAAmB;IAElC,MAAM,CAAC,MAAM;CAGd"}
@@ -0,0 +1,34 @@
1
+ declare module '@ember-data-mirror/serializer/-private/transforms/number' {
2
+ /**
3
+ @module @ember-data-mirror/serializer
4
+ */
5
+ import { TransformName } from '@warp-drive-mirror/core-types/symbols';
6
+ /**
7
+ The `NumberTransform` class is used to serialize and deserialize
8
+ numeric attributes on Ember Data record objects. This transform is
9
+ used when `number` is passed as the type parameter to the
10
+ [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.
11
+
12
+ Usage
13
+
14
+ ```app/models/score.js
15
+ import Model, { attr, belongsTo } from '@ember-data-mirror/model';
16
+
17
+ export default class ScoreModel extends Model {
18
+ @attr('number') value;
19
+ @belongsTo('player') player;
20
+ @attr('date') date;
21
+ }
22
+ ```
23
+
24
+ @class NumberTransform
25
+ @public
26
+ */
27
+ export default class NumberTransform {
28
+ deserialize(serialized: string | number | null | undefined, _options?: Record<string, unknown>): number | null;
29
+ serialize(deserialized: string | number | null | undefined, _options?: Record<string, unknown>): number | null;
30
+ [TransformName]: "number";
31
+ static create(): NumberTransform;
32
+ }
33
+ }
34
+ //# sourceMappingURL=number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../src/-private/transforms/number.ts"],"names":[],"mappings":"AAAA;;EAEE;AAEF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAM/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;IAU9G,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;IAU9G,CAAC,aAAa,CAAC,WAAqB;IAEpC,MAAM,CAAC,MAAM;CAGd"}
@@ -0,0 +1,34 @@
1
+ declare module '@ember-data-mirror/serializer/-private/transforms/string' {
2
+ /**
3
+ @module @ember-data-mirror/serializer
4
+ */
5
+ import { TransformName } from '@warp-drive-mirror/core-types/symbols';
6
+ /**
7
+ The `StringTransform` class is used to serialize and deserialize
8
+ string attributes on Ember Data record objects. This transform is
9
+ used when `string` is passed as the type parameter to the
10
+ [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.
11
+
12
+ Usage
13
+
14
+ ```app/models/user.js
15
+ import Model, { attr, belongsTo } from '@ember-data-mirror/model';
16
+
17
+ export default class UserModel extends Model {
18
+ @attr('boolean') isAdmin;
19
+ @attr('string') name;
20
+ @attr('string') email;
21
+ }
22
+ ```
23
+
24
+ @class StringTransform
25
+ @public
26
+ */
27
+ export default class StringTransform {
28
+ deserialize(serialized: unknown, _options?: Record<string, unknown>): string | null;
29
+ serialize(deserialized: unknown, _options?: Record<string, unknown>): string | null;
30
+ [TransformName]: "string";
31
+ static create(): StringTransform;
32
+ }
33
+ }
34
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../../src/-private/transforms/string.ts"],"names":[],"mappings":"AAAA;;EAEE;AAEF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;IAGnF,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;IAInF,CAAC,aAAa,CAAC,WAAqB;IAEpC,MAAM,CAAC,MAAM;CAGd"}
@@ -0,0 +1,128 @@
1
+ declare module '@ember-data-mirror/serializer/-private/transforms/transform' {
2
+ /// <reference types="ember-source/types" />
3
+ /**
4
+ @module @ember-data-mirror/serializer
5
+ */
6
+ import EmberObject from '@ember/object';
7
+ import type { AttributeSchema } from '@warp-drive-mirror/core-types/schema';
8
+ /**
9
+ The `Transform` class is used to serialize and deserialize model
10
+ attributes when they are saved or loaded from an
11
+ adapter. Subclassing `Transform` is useful for creating custom
12
+ attributes. All subclasses of `Transform` must implement a
13
+ `serialize` and a `deserialize` method.
14
+
15
+ Example
16
+
17
+ ```app/transforms/temperature.js
18
+
19
+ // Converts centigrade in the JSON to fahrenheit in the app
20
+ export default class TemperatureTransform {
21
+ deserialize(serialized, options) {
22
+ return (serialized * 1.8) + 32;
23
+ }
24
+
25
+ serialize(deserialized, options) {
26
+ return (deserialized - 32) / 1.8;
27
+ }
28
+
29
+ static create() {
30
+ return new this();
31
+ }
32
+ }
33
+ ```
34
+
35
+ Usage
36
+
37
+ ```app/models/requirement.js
38
+ import Model, { attr } from '@ember-data-mirror/model';
39
+
40
+ export default class RequirementModel extends Model {
41
+ @attr('string') name;
42
+ @attr('temperature') temperature;
43
+ }
44
+ ```
45
+
46
+ The options passed into the `attr` function when the attribute is
47
+ declared on the model is also available in the transform.
48
+
49
+ ```app/models/post.js
50
+ import Model, { attr } from '@ember-data-mirror/model';
51
+
52
+ export default class PostModel extends Model {
53
+ @attr('string') title;
54
+ @attr('markdown', {
55
+ markdown: {
56
+ gfm: false,
57
+ sanitize: true
58
+ }
59
+ })
60
+ markdown;
61
+ }
62
+ ```
63
+
64
+ ```app/transforms/markdown.js
65
+ export default class MarkdownTransform {
66
+ serialize(deserialized, options) {
67
+ return deserialized.raw;
68
+ }
69
+
70
+ deserialize(serialized, options) {
71
+ let markdownOptions = options.markdown || {};
72
+
73
+ return marked(serialized, markdownOptions);
74
+ }
75
+
76
+ static create() {
77
+ return new this();
78
+ }
79
+ }
80
+ ```
81
+
82
+ @class Transform
83
+ @public
84
+ */
85
+ /**
86
+ When given a deserialized value from a record attribute this
87
+ method must return the serialized value.
88
+
89
+ Example
90
+
91
+ ```javascript
92
+ serialize(deserialized, options) {
93
+ return deserialized ? null : Number(deserialized);
94
+ }
95
+ ```
96
+
97
+ @method serialize
98
+ @public
99
+ @param deserialized The deserialized value
100
+ @param options hash of options passed to `attr`
101
+ @return The serialized value
102
+ */
103
+ /**
104
+ When given a serialized value from a JSON object this method must
105
+ return the deserialized value for the record attribute.
106
+
107
+ Example
108
+
109
+ ```javascript
110
+ deserialize(serialized, options) {
111
+ return empty(serialized) ? null : Number(serialized);
112
+ }
113
+ ```
114
+
115
+ @method deserialize
116
+ @public
117
+ @param serialized The serialized value
118
+ @param options hash of options passed to `attr`
119
+ @return The deserialized value
120
+ */
121
+ interface Transform {
122
+ serialize(value: unknown, options: AttributeSchema['options']): unknown;
123
+ deserialize(value: unknown, options: AttributeSchema['options']): unknown;
124
+ }
125
+ const Transform: typeof EmberObject;
126
+ export default Transform;
127
+ }
128
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/-private/transforms/transform.ts"],"names":[],"mappings":";AAAA;;EAEE;AACF,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AACH;;;;;;;;;;;;;;;;;EAiBE;AACF;;;;;;;;;;;;;;;;;EAiBE;AACF,UAAU,SAAS;IACjB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IACxE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;CAC3E;AACD,QAAA,MAAM,SAAS,oBAAc,CAAC;AAE9B,eAAe,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ declare module '@ember-data-mirror/serializer/-private/utils' {
2
+ type Coercable = string | number | boolean | null | undefined | symbol;
3
+ export function coerceId(id: Coercable): string | null;
4
+ export {};
5
+ }
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/-private/utils.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvE,wBAAgB,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAUrD"}
@@ -0,0 +1,13 @@
1
+ declare module '@ember-data-mirror/serializer/-private' {
2
+ /**
3
+ @module @ember-data-mirror/serializer
4
+ */
5
+ export { default as EmbeddedRecordsMixin } from '@ember-data-mirror/serializer/-private/embedded-records-mixin';
6
+ export { default as Transform } from '@ember-data-mirror/serializer/-private/transforms/transform';
7
+ export { default as BooleanTransform } from '@ember-data-mirror/serializer/-private/transforms/boolean';
8
+ export { default as DateTransform } from '@ember-data-mirror/serializer/-private/transforms/date';
9
+ export { default as NumberTransform } from '@ember-data-mirror/serializer/-private/transforms/number';
10
+ export { default as StringTransform } from '@ember-data-mirror/serializer/-private/transforms/string';
11
+ export { coerceId } from '@ember-data-mirror/serializer/-private/utils';
12
+ }
13
+ //# sourceMappingURL=-private.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"-private.d.ts","sourceRoot":"","sources":["../src/-private.ts"],"names":[],"mappings":"AAAA;;EAEE;AAEF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEpF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}