@warp-drive/legacy 5.8.0-alpha.4 → 5.8.0-alpha.40

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 (213) hide show
  1. package/README.md +14 -27
  2. package/declarations/adapter/error.d.ts +5 -5
  3. package/declarations/adapter/json-api.d.ts +6 -8
  4. package/declarations/adapter/rest.d.ts +5 -8
  5. package/declarations/adapter.d.ts +4 -6
  6. package/declarations/compat/-private.d.ts +1 -1
  7. package/declarations/compat/builders/find-all.d.ts +6 -6
  8. package/declarations/compat/builders/find-record.d.ts +8 -8
  9. package/declarations/compat/builders/query.d.ts +12 -12
  10. package/declarations/compat/extensions.d.ts +1 -1
  11. package/declarations/compat/legacy-network-handler/minimum-adapter-interface.d.ts +7 -9
  12. package/declarations/compat/legacy-network-handler/minimum-serializer-interface.d.ts +20 -30
  13. package/declarations/compat/utils.d.ts +17 -17
  14. package/declarations/compat.d.ts +35 -11
  15. package/declarations/index.d.ts +70 -0
  16. package/declarations/model/-private/attr.d.ts +5 -6
  17. package/declarations/model/-private/belongs-to.d.ts +4 -5
  18. package/declarations/model/-private/has-many.d.ts +4 -5
  19. package/declarations/model/-private/hooks.d.ts +1 -1
  20. package/declarations/model/-private/legacy-relationships-support.d.ts +2 -2
  21. package/declarations/model/-private/model.d.ts +8 -8
  22. package/declarations/model/-private/record-state.d.ts +1 -1
  23. package/declarations/model/-private/references/belongs-to.d.ts +5 -5
  24. package/declarations/model/-private/references/has-many.d.ts +3 -3
  25. package/declarations/model/migration-support.d.ts +46 -21
  26. package/declarations/model-fragments/extensions/fragment-array.d.ts +16 -0
  27. package/declarations/model-fragments/extensions/fragment.d.ts +15 -0
  28. package/declarations/model-fragments/hooks/model-for.d.ts +20 -0
  29. package/declarations/model-fragments/index.d.ts +5 -0
  30. package/declarations/model-fragments/instance-initializers/fragment-extensions.d.ts +9 -0
  31. package/declarations/model-fragments/utilities/with-array-defaults.d.ts +15 -0
  32. package/declarations/model-fragments/utilities/with-fragment-array-defaults.d.ts +20 -0
  33. package/declarations/model-fragments/utilities/with-fragment-defaults.d.ts +19 -0
  34. package/declarations/model-fragments/utilities/with-legacy.d.ts +3 -0
  35. package/declarations/model-fragments.d.ts +9 -0
  36. package/declarations/model.d.ts +2 -2
  37. package/declarations/serializer/-private/embedded-records-mixin.d.ts +1 -6
  38. package/declarations/serializer/-private/transforms/boolean.d.ts +2 -2
  39. package/declarations/serializer/-private/transforms/date.d.ts +2 -2
  40. package/declarations/serializer/-private/transforms/number.d.ts +1 -1
  41. package/declarations/serializer/-private/transforms/string.d.ts +1 -1
  42. package/declarations/serializer/json-api.d.ts +7 -9
  43. package/declarations/serializer/json.d.ts +7 -9
  44. package/declarations/serializer/rest.d.ts +4 -6
  45. package/declarations/serializer.d.ts +9 -12
  46. package/dist/{-private-8UmnAf9J.js → -private-B1pSSN52.js} +1 -1
  47. package/dist/adapter/-private.js +1 -1
  48. package/dist/adapter/error.js +12 -13
  49. package/dist/adapter/json-api.js +4 -1
  50. package/dist/adapter/rest.js +6 -9
  51. package/dist/adapter.js +4 -6
  52. package/dist/compat/-private.js +1 -1
  53. package/dist/compat/builders.js +26 -26
  54. package/dist/compat/utils.js +17 -18
  55. package/dist/compat.js +58 -41
  56. package/dist/{errors-8kD2mSe_.js → errors-CIGPcDvd.js} +87 -65
  57. package/dist/hooks-QqRnX108.js +74 -0
  58. package/dist/index.js +195 -0
  59. package/dist/{json-DziiodPf.js → json-BNrV8EYG.js} +12 -16
  60. package/dist/model/-private.js +1 -1
  61. package/dist/model/migration-support.js +54 -24
  62. package/dist/model-for-CqXsIKws.js +221 -0
  63. package/dist/model-fragments.js +76 -0
  64. package/dist/model.js +18 -90
  65. package/dist/{schema-provider-DQu4Rjco.js → schema-provider-g5MfTj8n.js} +18 -20
  66. package/dist/{serialize-into-hash-CS0MIv4F.js → serialize-into-hash-BnYvPex3.js} +1 -1
  67. package/dist/serializer/json-api.js +17 -44
  68. package/dist/serializer/json.js +1 -1
  69. package/dist/serializer/rest.js +14 -21
  70. package/dist/serializer/transform.js +15 -6
  71. package/dist/serializer.js +9 -13
  72. package/dist/store.js +3 -0
  73. package/dist/unpkg/dev/-private-DbaSCSym.js +1205 -0
  74. package/dist/unpkg/dev/adapter/-private.js +1 -0
  75. package/dist/unpkg/dev/adapter/error.js +335 -0
  76. package/dist/unpkg/dev/adapter/json-api.js +271 -0
  77. package/dist/unpkg/dev/adapter/rest.js +1255 -0
  78. package/dist/unpkg/dev/adapter.js +1252 -0
  79. package/dist/unpkg/dev/compat/-private.js +1 -0
  80. package/dist/unpkg/dev/compat/builders.js +275 -0
  81. package/dist/unpkg/dev/compat/extensions.js +242 -0
  82. package/dist/unpkg/dev/compat/utils.js +223 -0
  83. package/dist/unpkg/dev/compat.js +1146 -0
  84. package/dist/unpkg/dev/errors-DD96TBEs.js +2591 -0
  85. package/dist/unpkg/dev/hooks-CqWjNWeL.js +73 -0
  86. package/dist/unpkg/dev/index.js +197 -0
  87. package/dist/unpkg/dev/json-CCU-ZQ4b.js +1269 -0
  88. package/dist/unpkg/dev/model/-private.js +1 -0
  89. package/dist/unpkg/dev/model/migration-support.js +551 -0
  90. package/dist/unpkg/dev/model-for-CqXsIKws.js +221 -0
  91. package/dist/unpkg/dev/model-fragments.js +76 -0
  92. package/dist/unpkg/dev/model.js +678 -0
  93. package/dist/unpkg/dev/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
  94. package/dist/unpkg/dev/schema-provider-B8jiJOYC.js +2229 -0
  95. package/dist/unpkg/dev/serialize-into-hash-CPAZXrQU.js +259 -0
  96. package/dist/unpkg/dev/serializer/json-api.js +648 -0
  97. package/dist/unpkg/dev/serializer/json.js +4 -0
  98. package/dist/unpkg/dev/serializer/rest.js +1242 -0
  99. package/dist/unpkg/dev/serializer/transform.js +278 -0
  100. package/dist/unpkg/dev/serializer.js +248 -0
  101. package/dist/unpkg/dev/store.js +636 -0
  102. package/dist/unpkg/dev/util-DvanW33H.js +20 -0
  103. package/dist/unpkg/dev/utils-BhvS1iTS.js +8 -0
  104. package/dist/unpkg/dev-deprecated/-private-DbaSCSym.js +1205 -0
  105. package/dist/unpkg/dev-deprecated/adapter/-private.js +1 -0
  106. package/dist/unpkg/dev-deprecated/adapter/error.js +335 -0
  107. package/dist/unpkg/dev-deprecated/adapter/json-api.js +271 -0
  108. package/dist/unpkg/dev-deprecated/adapter/rest.js +1255 -0
  109. package/dist/unpkg/dev-deprecated/adapter.js +1252 -0
  110. package/dist/unpkg/dev-deprecated/compat/-private.js +1 -0
  111. package/dist/unpkg/dev-deprecated/compat/builders.js +275 -0
  112. package/dist/unpkg/dev-deprecated/compat/extensions.js +242 -0
  113. package/dist/unpkg/dev-deprecated/compat/utils.js +223 -0
  114. package/dist/unpkg/dev-deprecated/compat.js +1146 -0
  115. package/dist/unpkg/dev-deprecated/errors-DEnabIZj.js +2594 -0
  116. package/dist/unpkg/dev-deprecated/hooks-CAll-Ets.js +73 -0
  117. package/dist/unpkg/dev-deprecated/index.js +196 -0
  118. package/dist/unpkg/dev-deprecated/json-CCU-ZQ4b.js +1269 -0
  119. package/dist/unpkg/dev-deprecated/model/-private.js +1 -0
  120. package/dist/unpkg/dev-deprecated/model/migration-support.js +568 -0
  121. package/dist/unpkg/dev-deprecated/model-for-CqXsIKws.js +221 -0
  122. package/dist/unpkg/dev-deprecated/model-fragments.js +76 -0
  123. package/dist/unpkg/dev-deprecated/model.js +682 -0
  124. package/dist/unpkg/dev-deprecated/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
  125. package/dist/unpkg/dev-deprecated/schema-provider-k2qXQTBg.js +2254 -0
  126. package/dist/unpkg/dev-deprecated/serialize-into-hash-CPAZXrQU.js +259 -0
  127. package/dist/unpkg/dev-deprecated/serializer/json-api.js +648 -0
  128. package/dist/unpkg/dev-deprecated/serializer/json.js +4 -0
  129. package/dist/unpkg/dev-deprecated/serializer/rest.js +1242 -0
  130. package/dist/unpkg/dev-deprecated/serializer/transform.js +278 -0
  131. package/dist/unpkg/dev-deprecated/serializer.js +248 -0
  132. package/dist/unpkg/dev-deprecated/store.js +636 -0
  133. package/dist/unpkg/dev-deprecated/util-CWr5WQOT.js +24 -0
  134. package/dist/unpkg/dev-deprecated/utils-C9PJehtL.js +12 -0
  135. package/dist/unpkg/prod/-private-Cvf_97EG.js +970 -0
  136. package/dist/unpkg/prod/adapter/-private.js +1 -0
  137. package/dist/unpkg/prod/adapter/error.js +330 -0
  138. package/dist/unpkg/prod/adapter/json-api.js +266 -0
  139. package/dist/unpkg/prod/adapter/rest.js +1218 -0
  140. package/dist/unpkg/prod/adapter.js +1219 -0
  141. package/dist/unpkg/prod/compat/-private.js +1 -0
  142. package/dist/unpkg/prod/compat/builders.js +210 -0
  143. package/dist/unpkg/prod/compat/extensions.js +232 -0
  144. package/dist/unpkg/prod/compat/utils.js +218 -0
  145. package/dist/unpkg/prod/compat.js +726 -0
  146. package/dist/unpkg/prod/errors-CXnfnBfQ.js +2343 -0
  147. package/dist/unpkg/prod/hooks-DvyWhLNg.js +41 -0
  148. package/dist/unpkg/prod/index.js +151 -0
  149. package/dist/unpkg/prod/json-BYrUP8ao.js +1256 -0
  150. package/dist/unpkg/prod/model/-private.js +1 -0
  151. package/dist/unpkg/prod/model/migration-support.js +544 -0
  152. package/dist/unpkg/prod/model-for-CqXsIKws.js +221 -0
  153. package/dist/unpkg/prod/model-fragments.js +76 -0
  154. package/dist/unpkg/prod/model.js +593 -0
  155. package/dist/unpkg/prod/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
  156. package/dist/unpkg/prod/schema-provider-CHujJvA9.js +1904 -0
  157. package/dist/unpkg/prod/serialize-into-hash-DYU2egXl.js +215 -0
  158. package/dist/unpkg/prod/serializer/json-api.js +591 -0
  159. package/dist/unpkg/prod/serializer/json.js +4 -0
  160. package/dist/unpkg/prod/serializer/rest.js +1210 -0
  161. package/dist/unpkg/prod/serializer/transform.js +278 -0
  162. package/dist/unpkg/prod/serializer.js +248 -0
  163. package/dist/unpkg/prod/store.js +504 -0
  164. package/dist/unpkg/prod/util-DvanW33H.js +20 -0
  165. package/dist/unpkg/prod/utils-BhvS1iTS.js +8 -0
  166. package/dist/unpkg/prod-deprecated/-private-Cvf_97EG.js +970 -0
  167. package/dist/unpkg/prod-deprecated/adapter/-private.js +1 -0
  168. package/dist/unpkg/prod-deprecated/adapter/error.js +330 -0
  169. package/dist/unpkg/prod-deprecated/adapter/json-api.js +266 -0
  170. package/dist/unpkg/prod-deprecated/adapter/rest.js +1218 -0
  171. package/dist/unpkg/prod-deprecated/adapter.js +1219 -0
  172. package/dist/unpkg/prod-deprecated/compat/-private.js +1 -0
  173. package/dist/unpkg/prod-deprecated/compat/builders.js +210 -0
  174. package/dist/unpkg/prod-deprecated/compat/extensions.js +232 -0
  175. package/dist/unpkg/prod-deprecated/compat/utils.js +218 -0
  176. package/dist/unpkg/prod-deprecated/compat.js +726 -0
  177. package/dist/unpkg/prod-deprecated/errors-CG1SPYVg.js +2346 -0
  178. package/dist/unpkg/prod-deprecated/hooks-BIUBiNGR.js +41 -0
  179. package/dist/unpkg/prod-deprecated/index.js +150 -0
  180. package/dist/unpkg/prod-deprecated/json-BYrUP8ao.js +1256 -0
  181. package/dist/unpkg/prod-deprecated/model/-private.js +1 -0
  182. package/dist/unpkg/prod-deprecated/model/migration-support.js +561 -0
  183. package/dist/unpkg/prod-deprecated/model-for-CqXsIKws.js +221 -0
  184. package/dist/unpkg/prod-deprecated/model-fragments.js +76 -0
  185. package/dist/unpkg/prod-deprecated/model.js +596 -0
  186. package/dist/unpkg/prod-deprecated/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
  187. package/dist/unpkg/prod-deprecated/schema-provider-BJ4TWnZf.js +1947 -0
  188. package/dist/unpkg/prod-deprecated/serialize-into-hash-DYU2egXl.js +215 -0
  189. package/dist/unpkg/prod-deprecated/serializer/json-api.js +591 -0
  190. package/dist/unpkg/prod-deprecated/serializer/json.js +4 -0
  191. package/dist/unpkg/prod-deprecated/serializer/rest.js +1210 -0
  192. package/dist/unpkg/prod-deprecated/serializer/transform.js +278 -0
  193. package/dist/unpkg/prod-deprecated/serializer.js +248 -0
  194. package/dist/unpkg/prod-deprecated/store.js +504 -0
  195. package/dist/unpkg/prod-deprecated/util-B6cn-i93.js +23 -0
  196. package/dist/unpkg/prod-deprecated/utils-BUWwQwCh.js +11 -0
  197. package/logos/README.md +2 -2
  198. package/logos/logo-yellow-slab.svg +1 -0
  199. package/logos/word-mark-black.svg +1 -0
  200. package/logos/word-mark-white.svg +1 -0
  201. package/package.json +14 -6
  202. package/logos/NCC-1701-a-blue.svg +0 -4
  203. package/logos/NCC-1701-a-gold.svg +0 -4
  204. package/logos/NCC-1701-a-gold_100.svg +0 -1
  205. package/logos/NCC-1701-a-gold_base-64.txt +0 -1
  206. package/logos/NCC-1701-a.svg +0 -4
  207. package/logos/docs-badge.svg +0 -2
  208. package/logos/ember-data-logo-dark.svg +0 -12
  209. package/logos/ember-data-logo-light.svg +0 -12
  210. package/logos/social1.png +0 -0
  211. package/logos/social2.png +0 -0
  212. package/logos/warp-drive-logo-dark.svg +0 -4
  213. package/logos/warp-drive-logo-gold.svg +0 -4
package/dist/index.js ADDED
@@ -0,0 +1,195 @@
1
+ import { Store, RequestManager, Fetch, CacheHandler, recordIdentifierFor } from '@warp-drive/core';
2
+ import { SchemaService, registerDerivations, instantiateRecord as instantiateRecord$1, teardownRecord as teardownRecord$1 } from '@warp-drive/core/reactive';
3
+ import { DefaultCachePolicy } from '@warp-drive/core/store';
4
+ import { LegacyNetworkHandler, adapterFor, serializerFor, pushPayload, normalize, serializeRecord, cleanup } from './compat.js';
5
+ import { EmberArrayLikeExtension, EmberObjectArrayExtension, EmberObjectExtension } from './compat/extensions.js';
6
+ import '@ember/object';
7
+ import '@warp-drive/core/types/symbols';
8
+ import '@ember/debug';
9
+ import '@warp-drive/utilities/string';
10
+ import { macroCondition, getGlobalConfig } from '@embroider/macros';
11
+ import '@warp-drive/core/store/-private';
12
+ import "./errors-CIGPcDvd.js";
13
+ import "./schema-provider-g5MfTj8n.js";
14
+ import { i as instantiateRecord, t as teardownRecord, m as modelFor } from "./hooks-QqRnX108.js";
15
+ import { registerDerivations as registerDerivations$1, DelegatingSchemaService } from './model/migration-support.js';
16
+ import { F as FragmentExtension, a as FragmentArrayExtension, f as fragmentsModelFor } from "./model-for-CqXsIKws.js";
17
+ import { restoreDeprecatedStoreBehaviors } from './store.js';
18
+
19
+ /**
20
+ * @module
21
+ * @mergeModuleWith <project>
22
+ */
23
+
24
+ /**
25
+ * Use the legacy store with the given options.
26
+ */
27
+ function useLegacyStore(options, StoreKlass = Store) {
28
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
29
+ if (!test) {
30
+ throw new Error(`If legacyRequests is true, linksMode must be false`);
31
+ }
32
+ })(!(options.linksMode && options.legacyRequests)) : {};
33
+ // we extend the store to ensure we don't leak our prototype overrides to other stores below.
34
+ class BaseKlass extends StoreKlass {}
35
+ class LegacyConfiguredStore extends BaseKlass {
36
+ requestManager = new RequestManager().use([options.linksMode ? null : LegacyNetworkHandler, ...(options.handlers ?? []), Fetch].filter(Boolean)).useCache(CacheHandler);
37
+ lifetimes = options.policy ?? new DefaultCachePolicy({
38
+ apiCacheHardExpires: 15 * 60 * 1000,
39
+ // 15 minutes
40
+ apiCacheSoftExpires: 1 * 30 * 1000,
41
+ // 30 seconds
42
+ constraints: {
43
+ headers: {
44
+ 'X-WarpDrive-Expires': true,
45
+ 'Cache-Control': true,
46
+ Expires: true
47
+ }
48
+ }
49
+ });
50
+ createSchemaService() {
51
+ // prepare for PolarisMode
52
+ const schema = new SchemaService();
53
+ registerDerivations(schema);
54
+ if (options.schemas) schema.registerResources(options.schemas);
55
+ if (options.traits) {
56
+ for (const trait of options.traits) {
57
+ schema.registerTrait(trait);
58
+ }
59
+ }
60
+ if (options.derivations) {
61
+ for (const derivation of options.derivations) {
62
+ schema.registerDerivation(derivation);
63
+ }
64
+ }
65
+ if (options.transformations) {
66
+ for (const transformation of options.transformations) {
67
+ schema.registerTransformation(transformation);
68
+ }
69
+ }
70
+ if (options.hashFns) {
71
+ for (const hashFn of options.hashFns) {
72
+ schema.registerHashFn(hashFn);
73
+ }
74
+ }
75
+ if (options.CAUTION_MEGA_DANGER_ZONE_extensions) {
76
+ for (const extension of options.CAUTION_MEGA_DANGER_ZONE_extensions) {
77
+ schema.CAUTION_MEGA_DANGER_ZONE_registerExtension(extension);
78
+ }
79
+ }
80
+
81
+ // Add support for LegacyMode ReactiveResource with Maximal coverage
82
+ // for upgrading from 4.x
83
+ registerDerivations$1(schema);
84
+ schema.CAUTION_MEGA_DANGER_ZONE_registerExtension(EmberArrayLikeExtension);
85
+ schema.CAUTION_MEGA_DANGER_ZONE_registerExtension(EmberObjectArrayExtension);
86
+ schema.CAUTION_MEGA_DANGER_ZONE_registerExtension(EmberObjectExtension);
87
+
88
+ // add support for fragments
89
+ if (options.modelFragments) {
90
+ schema.CAUTION_MEGA_DANGER_ZONE_registerExtension?.(FragmentExtension);
91
+ schema.CAUTION_MEGA_DANGER_ZONE_registerExtension?.(FragmentArrayExtension);
92
+ }
93
+
94
+ // Add fallback for Models
95
+ return new DelegatingSchemaService(this, schema);
96
+ }
97
+ createCache(capabilities) {
98
+ // eslint-disable-next-line new-cap
99
+ return new options.cache(capabilities);
100
+ }
101
+ instantiateRecord(key, createArgs) {
102
+ if (this.schema.isDelegated(key)) {
103
+ return instantiateRecord.call(this, key, createArgs);
104
+ }
105
+ return instantiateRecord$1(this, key, createArgs);
106
+ }
107
+ teardownRecord(record) {
108
+ const key = recordIdentifierFor(record);
109
+ if (this.schema.isDelegated(key)) {
110
+ return teardownRecord.call(this, record);
111
+ }
112
+ return teardownRecord$1(record);
113
+ }
114
+ modelFor(type) {
115
+ assertType(this.schema, type);
116
+ // TODO I'm not sure this is right
117
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
118
+ if (!test) {
119
+ throw new Error(`modelFor should only be used to lookup legacy models when in linksMode: false`);
120
+ }
121
+ })(!options.linksMode || !this.schema.isDelegated({
122
+ type
123
+ })) : {};
124
+ const klass =
125
+ // prefer real models if present
126
+ modelFor.call(this, type) || (
127
+ // fallback to ShimModelClass specific to fragments if fragments support in use
128
+ options.modelFragments ? fragmentsModelFor.call(this, type) : false) ||
129
+ // fallback to ShimModelClass
130
+ super.modelFor(type);
131
+ return klass;
132
+ }
133
+ adapterFor(modelName, _allowMissing) {
134
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
135
+ if (!test) {
136
+ throw new Error(`useLegacyStore was setup in linksMode. linksMode assumes that all requests have been migrated away from adapters and serializers.`);
137
+ }
138
+ })(!options.linksMode) : {};
139
+ // @ts-expect-error
140
+ return adapterFor.call(this, modelName, _allowMissing);
141
+ }
142
+ serializerFor(...args) {
143
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
144
+ if (!test) {
145
+ throw new Error(`useLegacyStore was setup in linksMode. linksMode assumes that all requests have been migrated away from adapters and serializers.`);
146
+ }
147
+ })(!options.linksMode) : {};
148
+ return serializerFor.call(this, ...args);
149
+ }
150
+ pushPayload(...args) {
151
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
152
+ if (!test) {
153
+ throw new Error(`useLegacyStore was setup in linksMode. linksMode assumes that all requests have been migrated away from adapters and serializers.`);
154
+ }
155
+ })(!options.linksMode) : {};
156
+ return pushPayload.call(this, ...args);
157
+ }
158
+ normalize(...args) {
159
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
160
+ if (!test) {
161
+ throw new Error(`useLegacyStore was setup in linksMode. linksMode assumes that all requests have been migrated away from adapters and serializers.`);
162
+ }
163
+ })(!options.linksMode) : {};
164
+ return normalize.call(this, ...args);
165
+ }
166
+ serializeRecord(...args) {
167
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
168
+ if (!test) {
169
+ throw new Error(`useLegacyStore was setup in linksMode. linksMode assumes that all requests have been migrated away from adapters and serializers.`);
170
+ }
171
+ })(!options.linksMode) : {};
172
+ return serializeRecord.call(this, ...args);
173
+ }
174
+ destroy() {
175
+ if (!options.linksMode) {
176
+ cleanup.call(this);
177
+ }
178
+ super.destroy();
179
+ }
180
+ }
181
+ if (options.legacyRequests) {
182
+ restoreDeprecatedStoreBehaviors(BaseKlass);
183
+ }
184
+ return LegacyConfiguredStore;
185
+ }
186
+ function assertType(schema, type) {
187
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
188
+ if (!test) {
189
+ throw new Error(`Expected type ${type} to be a valid ResourceType`);
190
+ }
191
+ })(schema.hasResource({
192
+ type
193
+ })) : {};
194
+ }
195
+ export { useLegacyStore };
@@ -25,20 +25,18 @@ const SOURCE_POINTER_PRIMARY_REGEXP = /^\/?data/;
25
25
  const PRIMARY_ATTRIBUTE_KEY = 'base';
26
26
 
27
27
  /**
28
- * <blockquote style="margin: 1em; padding: .1em 1em .1em 1em; border-left: solid 1em #E34C32; background: #e0e0e0;">
29
- <p>
30
- ⚠️ <strong>This is LEGACY documentation</strong> for a feature that is no longer encouraged to be used.
28
+ * :::danger
29
+ ⚠️ **This is LEGACY documentation** for a feature that is no longer encouraged to be used.
31
30
  If starting a new app or thinking of implementing a new adapter, consider writing a
32
- <a href="/ember-data/release/classes/%3CInterface%3E%20Handler">Handler</a> instead to be used with the <a href="https://github.com/warp-drive-data/warp-drive/tree/main/packages/request#readme">RequestManager</a>
33
- </p>
34
- </blockquote>
31
+ {@link Handler} instead to be used with the {@link RequestManager}
32
+ :::
35
33
 
36
- In EmberData a Serializer is used to serialize and deserialize
34
+ In WarpDrive a Serializer is used to serialize and deserialize
37
35
  records when they are transferred in and out of an external source.
38
36
  This process involves normalizing property names, transforming
39
37
  attribute values and serializing relationships.
40
38
 
41
- By default, EmberData uses and recommends the `JSONAPISerializer`.
39
+ By default, WarpDrive uses and recommends the `JSONAPISerializer`.
42
40
 
43
41
  `JSONSerializer` is useful for simpler or legacy backends that may
44
42
  not support the http://jsonapi.org/ spec.
@@ -46,7 +44,7 @@ const PRIMARY_ATTRIBUTE_KEY = 'base';
46
44
  For example, given the following `User` model and JSON payload:
47
45
 
48
46
  ```js [app/models/user.js]
49
- import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
47
+ import Model, { attr, belongsTo, hasMany } from '@warp-drive/legacy/model';
50
48
 
51
49
  export default class UserModel extends Model {
52
50
  @hasMany('user') friends;
@@ -129,7 +127,7 @@ const JSONSerializer = Serializer.extend({
129
127
  the response payload.
130
128
  Example
131
129
  ```js [app/models/person.js]
132
- import Model, { attr } from '@ember-data/model';
130
+ import Model, { attr } from '@warp-drive/legacy/model';
133
131
  export default class PersonModel extends Model {
134
132
  @attr('string') firstName;
135
133
  @attr('string') lastName;
@@ -159,7 +157,7 @@ const JSONSerializer = Serializer.extend({
159
157
  }
160
158
  ```
161
159
  When serialized:
162
- ```javascript
160
+ ```js
163
161
  {
164
162
  "firstName": "Harry",
165
163
  "lastName": "Houdini",
@@ -170,9 +168,7 @@ const JSONSerializer = Serializer.extend({
170
168
  Setting `serialize` to `true` enforces serialization for hasMany
171
169
  relationships even if it's neither a many-to-many nor many-to-none
172
170
  relationship.
173
- @property attrs
174
- @public
175
- @type {Object}
171
+ @public
176
172
  */
177
173
  mergedProperties: ['attrs'],
178
174
  /**
@@ -773,7 +769,7 @@ const JSONSerializer = Serializer.extend({
773
769
  each attribute and belongsTo relationship.
774
770
  For example, consider this model:
775
771
  ```js [app/models/comment.js]
776
- import Model, { attr, belongsTo } from '@ember-data/model';
772
+ import Model, { attr, belongsTo } from '@warp-drive/legacy/model';
777
773
  export default class CommentModel extends Model {
778
774
  @attr title;
779
775
  @attr body;
@@ -908,7 +904,7 @@ const JSONSerializer = Serializer.extend({
908
904
  The hash property should be modified by reference.
909
905
  For example, your server may expect underscored root objects.
910
906
  ```js [app/serializers/application.js]
911
- import RESTSerializer from '@ember-data/serializer/rest';
907
+ import RESTSerializer from '@warp-drive/legacy/serializer/rest';
912
908
  import { underscoren} from '<app-name>/utils/string-utils';
913
909
  export default class ApplicationSerializer extends RESTSerializer {
914
910
  serializeIntoHash(data, type, snapshot, options) {
@@ -1 +1 @@
1
- export { E as Errors, L as LEGACY_SUPPORT, P as PromiseBelongsTo, a as PromiseManyArray, l as lookupLegacySupport } from "../errors-8kD2mSe_.js";
1
+ export { E as Errors, L as LEGACY_SUPPORT, P as PromiseBelongsTo, a as PromiseManyArray, l as lookupLegacySupport } from "../errors-CIGPcDvd.js";
@@ -4,20 +4,20 @@ import { Context } from '@warp-drive/core/reactive/-private';
4
4
  import { notifyInternalSignal, assertPrivateStore } from '@warp-drive/core/store/-private';
5
5
  import { getOrSetGlobal } from '@warp-drive/core/types/-private';
6
6
  import { Type } from '@warp-drive/core/types/symbols';
7
- import { l as lookupLegacySupport, E as Errors } from "../errors-8kD2mSe_.js";
8
- import { b as buildSchema, u as unloadRecord, s as serialize, _ as _save, a as save, r as rollbackAttributes, c as _reload, d as reload, h as hasMany, e as _destroyRecord, f as destroyRecord, g as deleteRecord, R as RecordState, i as changedAttributes, j as belongsTo, k as createSnapshot } from "../schema-provider-DQu4Rjco.js";
7
+ import { l as lookupLegacySupport, E as Errors } from "../errors-CIGPcDvd.js";
8
+ import { b as buildSchema, u as unloadRecord, s as serialize, _ as _save, a as save, r as rollbackAttributes, c as _reload, d as reload, h as hasMany, e as _destroyRecord, f as destroyRecord, i as deleteRecord, R as RecordState, j as changedAttributes, k as belongsTo, l as createSnapshot } from "../schema-provider-g5MfTj8n.js";
9
9
  import { macroCondition, getGlobalConfig } from '@embroider/macros';
10
10
 
11
11
  /**
12
- * This module provides support for migrating away from @ember-data/model
13
- * to @warp-drive/schema-record.
12
+ * This module provides support for migrating away from @warp-drive/legacy/model
13
+ * to ReactiveResource from @warp-drive/core/reactive.
14
14
  *
15
15
  * It includes:
16
16
  *
17
17
  * - A `withDefaults` function to assist in creating a schema in LegacyMode
18
18
  * - A `registerDerivations` function to register the derivations necessary to support LegacyMode
19
19
  * - A `DelegatingSchemaService` that can be used to provide a schema service that works with both
20
- * @ember-data/model and @warp-drive/schema-record simultaneously for migration purposes.
20
+ * @warp-drive/legacy/model and @warp-drive/core/reactive simultaneously for migration purposes.
21
21
  * - A `WithLegacy` type util that can be used to create a type that includes the legacy
22
22
  * properties and methods of a record.
23
23
  *
@@ -32,14 +32,14 @@ const LegacyFields = ['_createSnapshot', 'adapterError', 'belongsTo', 'changedAt
32
32
 
33
33
  /**
34
34
  * A Type utility that enables quickly adding type information for the fields
35
- * defined by `import { withDefaults } from '@ember-data/model/migration-support'`.
35
+ * defined by `import { withDefaults } from '@warp-drive/legacy/model/migration-support'`.
36
36
  *
37
37
  * Example:
38
38
  *
39
39
  * ```ts
40
- * import { withDefaults, WithLegacy } from '@ember-data/model/migration-support';
41
- * import { Type } from '@warp-drive/core-types/symbols';
42
- * import type { HasMany } from '@ember-data/model';
40
+ * import { withDefaults, WithLegacy } from '@warp-drive/legacy/model/migration-support';
41
+ * import { Type } from '@warp-drive/core/types/symbols';
42
+ * import type { HasMany } from '@@warp-drive/legacy/model';
43
43
  *
44
44
  * export const UserSchema = withDefaults({
45
45
  * type: 'user',
@@ -156,14 +156,14 @@ legacySupport[Type] = '@legacy';
156
156
  /**
157
157
  * A function which adds the necessary fields to a schema and marks it as
158
158
  * being in LegacyMode. This is used to support the legacy features of
159
- * @ember-data/model while migrating to WarpDrive.
159
+ * @warp-drive/legacy/model while migrating to WarpDrive.
160
160
  *
161
161
  * Example:
162
162
  *
163
163
  * ```ts
164
- * import { withDefaults, WithLegacy } from '@ember-data/model/migration-support';
165
- * import { Type } from '@warp-drive/core-types/symbols';
166
- * import type { HasMany } from '@ember-data/model';
164
+ * import { withDefaults, WithLegacy } from '@warp-drive/legacy/model/migration-support';
165
+ * import { Type } from '@warp-drive/core/types/symbols';
166
+ * import type { HasMany } from '@warp-drive/legacy/model';
167
167
  *
168
168
  * export const UserSchema = withDefaults({
169
169
  * type: 'user',
@@ -198,13 +198,13 @@ legacySupport[Type] = '@legacy';
198
198
  * it requires with the schema service.
199
199
  *
200
200
  * ```ts
201
- * import { registerDerivations } from '@ember-data/model/migration-support';
201
+ * import { registerDerivations } from '@warp-drive/legacy/model/migration-support';
202
202
  *
203
203
  * registerDerivations(schema);
204
204
  * ```
205
205
  *
206
- * @param {LegacyResourceSchema} schema The schema to add legacy support to.
207
- * @return {LegacyResourceSchema} The schema with legacy support added.
206
+ * @param schema The schema to add legacy support to.
207
+ * @return The schema with legacy support added.
208
208
  * @public
209
209
  */
210
210
  function withDefaults(schema) {
@@ -248,6 +248,26 @@ function withDefaults(schema) {
248
248
  schema.objectExtensions.push('deprecated-model-behaviors');
249
249
  return schema;
250
250
  }
251
+
252
+ /**
253
+ * Adds the necessasary fields to the schema for supporting
254
+ * the deprecated request methods on LegacyMode schemas.
255
+ *
256
+ * Use this instead of `withDefaults` to add the fields
257
+ * and behaviors necessary to support Model-Like capabilities.
258
+ *
259
+ * ```ts
260
+ * import { withRestoredDeprecatedModelRequestBehaviors } from '@warp-drive/legacy/model/migration-support';
261
+ *
262
+ * export const UserSchema = withRestoredDeprecatedModelRequestBehaviors({
263
+ * type: 'user',
264
+ * fields: [
265
+ * { name: 'firstName', kind: 'attribute' },
266
+ * { name: 'lastName', kind: 'attribute' },
267
+ * ]
268
+ * });
269
+ * ```
270
+ */
251
271
  function withRestoredDeprecatedModelRequestBehaviors(schema) {
252
272
  schema.legacy = true;
253
273
  schema.identity = {
@@ -293,13 +313,10 @@ function withRestoredDeprecatedModelRequestBehaviors(schema) {
293
313
 
294
314
  /**
295
315
  * A function which registers the necessary derivations to support
296
- * the LegacyMode features of @ember-data/model while migrating to WarpDrive.
297
- *
298
- * This must be called in order to use the fields added by:
316
+ * the LegacyMode features of @warp-drive/legacy/model while migrating to WarpDrive.
299
317
  *
300
- * ```ts
301
- * import { withDefaults } from '@ember-data/model/migration-support';
302
- * ```
318
+ * This must be called in order to use the fields added by {@link withDefaults} or
319
+ * {@link withRestoredDeprecatedModelRequestBehaviors}.
303
320
  *
304
321
  * @param schema The schema service to register the derivations with.
305
322
  * @public
@@ -398,8 +415,8 @@ function registerDerivations(schema) {
398
415
  * provide their own schema information to the application.
399
416
  *
400
417
  * ```ts
401
- * import { DelegatingSchemaService } from '@ember-data/model/migration-support';
402
- * import { SchemaService } from '@warp-drive/schema-record';
418
+ * import { DelegatingSchemaService } from '@warp-drive/legacy/model/migration-support';
419
+ * import { SchemaService } from '@warp-drive/core/reactive';
403
420
  *
404
421
  * class AppStore extends Store {
405
422
  * createSchemaService() {
@@ -417,7 +434,9 @@ function registerDerivations(schema) {
417
434
  */
418
435
 
419
436
  class DelegatingSchemaService {
437
+ /** @internal */
420
438
  _preferred;
439
+ /** @internal */
421
440
  _secondary;
422
441
  constructor(store, schema) {
423
442
  this._preferred = schema;
@@ -452,6 +471,14 @@ class DelegatingSchemaService {
452
471
  }
453
472
  return this._secondary.fields(resource);
454
473
  }
474
+ cacheFields(resource) {
475
+ if (this._preferred.cacheFields?.(resource)) {
476
+ return this._preferred.cacheFields(resource);
477
+ }
478
+
479
+ // @ts-expect-error
480
+ return this._secondary.cacheFields?.(resource);
481
+ }
455
482
  transformation(field) {
456
483
  return this._preferred.transformation(field);
457
484
  }
@@ -482,6 +509,9 @@ class DelegatingSchemaService {
482
509
  registerHashFn(hashFn) {
483
510
  this._preferred.registerHashFn(hashFn);
484
511
  }
512
+ CAUTION_MEGA_DANGER_ZONE_hasExtension(ext) {
513
+ return this._preferred.CAUTION_MEGA_DANGER_ZONE_hasExtension(ext);
514
+ }
485
515
  CAUTION_MEGA_DANGER_ZONE_registerExtension(extension) {
486
516
  this._preferred.CAUTION_MEGA_DANGER_ZONE_registerExtension(extension);
487
517
  }
@@ -0,0 +1,221 @@
1
+ import { tracked, cached } from '@glimmer/tracking';
2
+ import { Context } from '@warp-drive/core/reactive/-private';
3
+ import { a as decorateFieldV2, i as initializeDeferredDecorator, d as decorateMethodV2 } from "./runtime-BPCpkOf1-BKOwiRJp.js";
4
+ class Fragment {
5
+ static {
6
+ decorateFieldV2(this.prototype, "isDestroying", [tracked], function () {
7
+ return false;
8
+ });
9
+ }
10
+ #isDestroying = (initializeDeferredDecorator(this, "isDestroying"), void 0); // We might want to check the parent values once we move this code to warp-drive.
11
+ static {
12
+ decorateFieldV2(this.prototype, "isDestroyed", [tracked], function () {
13
+ return false;
14
+ });
15
+ }
16
+ #isDestroyed = (initializeDeferredDecorator(this, "isDestroyed"), void 0);
17
+ get hasDirtyAttributes() {
18
+ const {
19
+ path,
20
+ resourceKey,
21
+ store
22
+ } = this[Context];
23
+ const record = store.peekRecord(resourceKey);
24
+ if (record.hasDirtyAttributes && path) {
25
+ const root = path.at(0);
26
+ return root in record.changedAttributes();
27
+ }
28
+ return false;
29
+ }
30
+ static {
31
+ decorateMethodV2(this.prototype, "hasDirtyAttributes", [cached]);
32
+ }
33
+ get isFragment() {
34
+ return true;
35
+ }
36
+ get $type() {
37
+ const {
38
+ field
39
+ } = this[Context];
40
+ return field?.type;
41
+ }
42
+ rollbackAttributes() {
43
+ const {
44
+ path,
45
+ resourceKey,
46
+ store
47
+ } = this[Context];
48
+ if (path) {
49
+ const oldValue = store.cache.getRemoteAttr(resourceKey, path);
50
+ store.cache.setAttr(resourceKey, path, oldValue);
51
+ }
52
+ }
53
+ }
54
+ const FragmentExtension = {
55
+ kind: 'object',
56
+ name: 'fragment',
57
+ features: Fragment
58
+ };
59
+ class FragmentArray {
60
+ static {
61
+ decorateFieldV2(this.prototype, "isDestroying", [tracked], function () {
62
+ return false;
63
+ });
64
+ }
65
+ #isDestroying = (initializeDeferredDecorator(this, "isDestroying"), void 0); // We might want to check the parent values once we move this code to warp-drive.
66
+ static {
67
+ decorateFieldV2(this.prototype, "isDestroyed", [tracked], function () {
68
+ return false;
69
+ });
70
+ }
71
+ #isDestroyed = (initializeDeferredDecorator(this, "isDestroyed"), void 0);
72
+ get hasDirtyAttributes() {
73
+ const {
74
+ path,
75
+ resourceKey,
76
+ store
77
+ } = this[Context];
78
+ const record = store.peekRecord(resourceKey);
79
+ if (record.hasDirtyAttributes && path) {
80
+ const root = path.at(0);
81
+ return root in record.changedAttributes();
82
+ }
83
+ return false;
84
+ }
85
+ static {
86
+ decorateMethodV2(this.prototype, "hasDirtyAttributes", [cached]);
87
+ }
88
+ addFragment(fragment) {
89
+ if (!fragment) {
90
+ return;
91
+ }
92
+ return this.addObject(fragment);
93
+ }
94
+ createFragment(fragment) {
95
+ if (!fragment) {
96
+ return;
97
+ }
98
+ return this.pushObject(fragment);
99
+ }
100
+ removeFragment(fragment) {
101
+ if (!fragment) {
102
+ return;
103
+ }
104
+ const index = this.indexOf(fragment);
105
+ if (index !== -1) {
106
+ this.splice(index, 1);
107
+ }
108
+ }
109
+ rollbackAttributes() {
110
+ for (const fragment of this) {
111
+ // @ts-expect-error TODO: fix these types
112
+ fragment?.rollbackAttributes?.();
113
+ }
114
+ }
115
+ }
116
+ const FragmentArrayExtension = {
117
+ kind: 'array',
118
+ name: 'fragment-array',
119
+ features: FragmentArray
120
+ };
121
+
122
+ // if modelFor turns out to be a bottleneck we should replace with a Map
123
+ // and clear it during store teardown.
124
+ const AvailableShims = new WeakMap();
125
+ function getShimClass(store, modelName) {
126
+ let shims = AvailableShims.get(store);
127
+ if (!shims) {
128
+ shims = Object.create(null);
129
+ AvailableShims.set(store, shims);
130
+ }
131
+ let shim = shims[modelName];
132
+ if (shim === undefined) {
133
+ shim = shims[modelName] = new ShimModelClass(store, modelName);
134
+ }
135
+ return shim;
136
+ }
137
+ const AttributeKinds = ['field', 'attribute', 'object', 'array', 'schema-object', 'schema-array'];
138
+
139
+ // Mimics the static apis of @warp-drive/legacy/model
140
+ class ShimModelClass {
141
+ constructor(store, modelName) {
142
+ this.__store = store;
143
+ this.modelName = modelName;
144
+ }
145
+ get fields() {
146
+ const fields = new Map();
147
+ const fieldSchemas = this.__store.schema.fields({
148
+ type: this.modelName
149
+ });
150
+ fieldSchemas.forEach((schema, key) => {
151
+ // @ts-expect-error checking if a string is a valid string
152
+ if (AttributeKinds.includes(schema.kind)) {
153
+ fields.set(key, 'attribute');
154
+ } else if (schema.kind === 'belongsTo' || schema.kind === 'hasMany') {
155
+ fields.set(key, schema.kind);
156
+ }
157
+ });
158
+ return fields;
159
+ }
160
+ get attributes() {
161
+ const attrs = new Map();
162
+ const fields = this.__store.schema.fields({
163
+ type: this.modelName
164
+ });
165
+ fields.forEach((schema, key) => {
166
+ if (schema.kind === 'attribute') {
167
+ attrs.set(key, schema);
168
+ // @ts-expect-error checking if a string is a valid string
169
+ } else if (AttributeKinds.includes(schema.kind)) {
170
+ attrs.set(key, {
171
+ kind: 'attribute',
172
+ name: key,
173
+ type: null,
174
+ options: schema.options ?? {}
175
+ });
176
+ }
177
+ });
178
+ return attrs;
179
+ }
180
+ get relationshipsByName() {
181
+ const rels = new Map();
182
+ const fields = this.__store.schema.fields({
183
+ type: this.modelName
184
+ });
185
+ fields.forEach((schema, key) => {
186
+ if (schema.kind === 'belongsTo' || schema.kind === 'hasMany') {
187
+ rels.set(key, schema);
188
+ }
189
+ });
190
+ return rels;
191
+ }
192
+ eachAttribute(callback, binding) {
193
+ this.attributes.forEach((schema, key) => {
194
+ callback.call(binding, key, schema);
195
+ });
196
+ }
197
+ eachRelationship(callback, binding) {
198
+ this.__store.schema.fields({
199
+ type: this.modelName
200
+ }).forEach((schema, key) => {
201
+ if (schema.kind === 'belongsTo' || schema.kind === 'hasMany') {
202
+ callback.call(binding, key, schema);
203
+ }
204
+ });
205
+ }
206
+ eachTransformedAttribute(callback, binding) {
207
+ this.__store.schema.fields({
208
+ type: this.modelName
209
+ }).forEach((schema, key) => {
210
+ if (schema.kind === 'attribute') {
211
+ const type = schema.type;
212
+ if (type) callback.call(binding, key, type);
213
+ }
214
+ });
215
+ }
216
+ }
217
+ function fragmentsModelFor(modelName) {
218
+ return getShimClass(this, modelName);
219
+ }
220
+ const modelFor = fragmentsModelFor;
221
+ export { FragmentExtension as F, FragmentArrayExtension as a, FragmentArray as b, Fragment as c, fragmentsModelFor as f, modelFor as m };