@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.
- package/README.md +14 -27
- package/declarations/adapter/error.d.ts +5 -5
- package/declarations/adapter/json-api.d.ts +6 -8
- package/declarations/adapter/rest.d.ts +5 -8
- package/declarations/adapter.d.ts +4 -6
- package/declarations/compat/-private.d.ts +1 -1
- package/declarations/compat/builders/find-all.d.ts +6 -6
- package/declarations/compat/builders/find-record.d.ts +8 -8
- package/declarations/compat/builders/query.d.ts +12 -12
- package/declarations/compat/extensions.d.ts +1 -1
- package/declarations/compat/legacy-network-handler/minimum-adapter-interface.d.ts +7 -9
- package/declarations/compat/legacy-network-handler/minimum-serializer-interface.d.ts +20 -30
- package/declarations/compat/utils.d.ts +17 -17
- package/declarations/compat.d.ts +35 -11
- package/declarations/index.d.ts +70 -0
- package/declarations/model/-private/attr.d.ts +5 -6
- package/declarations/model/-private/belongs-to.d.ts +4 -5
- package/declarations/model/-private/has-many.d.ts +4 -5
- package/declarations/model/-private/hooks.d.ts +1 -1
- package/declarations/model/-private/legacy-relationships-support.d.ts +2 -2
- package/declarations/model/-private/model.d.ts +8 -8
- package/declarations/model/-private/record-state.d.ts +1 -1
- package/declarations/model/-private/references/belongs-to.d.ts +5 -5
- package/declarations/model/-private/references/has-many.d.ts +3 -3
- package/declarations/model/migration-support.d.ts +46 -21
- package/declarations/model-fragments/extensions/fragment-array.d.ts +16 -0
- package/declarations/model-fragments/extensions/fragment.d.ts +15 -0
- package/declarations/model-fragments/hooks/model-for.d.ts +20 -0
- package/declarations/model-fragments/index.d.ts +5 -0
- package/declarations/model-fragments/instance-initializers/fragment-extensions.d.ts +9 -0
- package/declarations/model-fragments/utilities/with-array-defaults.d.ts +15 -0
- package/declarations/model-fragments/utilities/with-fragment-array-defaults.d.ts +20 -0
- package/declarations/model-fragments/utilities/with-fragment-defaults.d.ts +19 -0
- package/declarations/model-fragments/utilities/with-legacy.d.ts +3 -0
- package/declarations/model-fragments.d.ts +9 -0
- package/declarations/model.d.ts +2 -2
- package/declarations/serializer/-private/embedded-records-mixin.d.ts +1 -6
- package/declarations/serializer/-private/transforms/boolean.d.ts +2 -2
- package/declarations/serializer/-private/transforms/date.d.ts +2 -2
- package/declarations/serializer/-private/transforms/number.d.ts +1 -1
- package/declarations/serializer/-private/transforms/string.d.ts +1 -1
- package/declarations/serializer/json-api.d.ts +7 -9
- package/declarations/serializer/json.d.ts +7 -9
- package/declarations/serializer/rest.d.ts +4 -6
- package/declarations/serializer.d.ts +9 -12
- package/dist/{-private-8UmnAf9J.js → -private-B1pSSN52.js} +1 -1
- package/dist/adapter/-private.js +1 -1
- package/dist/adapter/error.js +12 -13
- package/dist/adapter/json-api.js +4 -1
- package/dist/adapter/rest.js +6 -9
- package/dist/adapter.js +4 -6
- package/dist/compat/-private.js +1 -1
- package/dist/compat/builders.js +26 -26
- package/dist/compat/utils.js +17 -18
- package/dist/compat.js +58 -41
- package/dist/{errors-8kD2mSe_.js → errors-CIGPcDvd.js} +87 -65
- package/dist/hooks-QqRnX108.js +74 -0
- package/dist/index.js +195 -0
- package/dist/{json-DziiodPf.js → json-BNrV8EYG.js} +12 -16
- package/dist/model/-private.js +1 -1
- package/dist/model/migration-support.js +54 -24
- package/dist/model-for-CqXsIKws.js +221 -0
- package/dist/model-fragments.js +76 -0
- package/dist/model.js +18 -90
- package/dist/{schema-provider-DQu4Rjco.js → schema-provider-g5MfTj8n.js} +18 -20
- package/dist/{serialize-into-hash-CS0MIv4F.js → serialize-into-hash-BnYvPex3.js} +1 -1
- package/dist/serializer/json-api.js +17 -44
- package/dist/serializer/json.js +1 -1
- package/dist/serializer/rest.js +14 -21
- package/dist/serializer/transform.js +15 -6
- package/dist/serializer.js +9 -13
- package/dist/store.js +3 -0
- package/dist/unpkg/dev/-private-DbaSCSym.js +1205 -0
- package/dist/unpkg/dev/adapter/-private.js +1 -0
- package/dist/unpkg/dev/adapter/error.js +335 -0
- package/dist/unpkg/dev/adapter/json-api.js +271 -0
- package/dist/unpkg/dev/adapter/rest.js +1255 -0
- package/dist/unpkg/dev/adapter.js +1252 -0
- package/dist/unpkg/dev/compat/-private.js +1 -0
- package/dist/unpkg/dev/compat/builders.js +275 -0
- package/dist/unpkg/dev/compat/extensions.js +242 -0
- package/dist/unpkg/dev/compat/utils.js +223 -0
- package/dist/unpkg/dev/compat.js +1146 -0
- package/dist/unpkg/dev/errors-DD96TBEs.js +2591 -0
- package/dist/unpkg/dev/hooks-CqWjNWeL.js +73 -0
- package/dist/unpkg/dev/index.js +197 -0
- package/dist/unpkg/dev/json-CCU-ZQ4b.js +1269 -0
- package/dist/unpkg/dev/model/-private.js +1 -0
- package/dist/unpkg/dev/model/migration-support.js +551 -0
- package/dist/unpkg/dev/model-for-CqXsIKws.js +221 -0
- package/dist/unpkg/dev/model-fragments.js +76 -0
- package/dist/unpkg/dev/model.js +678 -0
- package/dist/unpkg/dev/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
- package/dist/unpkg/dev/schema-provider-B8jiJOYC.js +2229 -0
- package/dist/unpkg/dev/serialize-into-hash-CPAZXrQU.js +259 -0
- package/dist/unpkg/dev/serializer/json-api.js +648 -0
- package/dist/unpkg/dev/serializer/json.js +4 -0
- package/dist/unpkg/dev/serializer/rest.js +1242 -0
- package/dist/unpkg/dev/serializer/transform.js +278 -0
- package/dist/unpkg/dev/serializer.js +248 -0
- package/dist/unpkg/dev/store.js +636 -0
- package/dist/unpkg/dev/util-DvanW33H.js +20 -0
- package/dist/unpkg/dev/utils-BhvS1iTS.js +8 -0
- package/dist/unpkg/dev-deprecated/-private-DbaSCSym.js +1205 -0
- package/dist/unpkg/dev-deprecated/adapter/-private.js +1 -0
- package/dist/unpkg/dev-deprecated/adapter/error.js +335 -0
- package/dist/unpkg/dev-deprecated/adapter/json-api.js +271 -0
- package/dist/unpkg/dev-deprecated/adapter/rest.js +1255 -0
- package/dist/unpkg/dev-deprecated/adapter.js +1252 -0
- package/dist/unpkg/dev-deprecated/compat/-private.js +1 -0
- package/dist/unpkg/dev-deprecated/compat/builders.js +275 -0
- package/dist/unpkg/dev-deprecated/compat/extensions.js +242 -0
- package/dist/unpkg/dev-deprecated/compat/utils.js +223 -0
- package/dist/unpkg/dev-deprecated/compat.js +1146 -0
- package/dist/unpkg/dev-deprecated/errors-DEnabIZj.js +2594 -0
- package/dist/unpkg/dev-deprecated/hooks-CAll-Ets.js +73 -0
- package/dist/unpkg/dev-deprecated/index.js +196 -0
- package/dist/unpkg/dev-deprecated/json-CCU-ZQ4b.js +1269 -0
- package/dist/unpkg/dev-deprecated/model/-private.js +1 -0
- package/dist/unpkg/dev-deprecated/model/migration-support.js +568 -0
- package/dist/unpkg/dev-deprecated/model-for-CqXsIKws.js +221 -0
- package/dist/unpkg/dev-deprecated/model-fragments.js +76 -0
- package/dist/unpkg/dev-deprecated/model.js +682 -0
- package/dist/unpkg/dev-deprecated/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
- package/dist/unpkg/dev-deprecated/schema-provider-k2qXQTBg.js +2254 -0
- package/dist/unpkg/dev-deprecated/serialize-into-hash-CPAZXrQU.js +259 -0
- package/dist/unpkg/dev-deprecated/serializer/json-api.js +648 -0
- package/dist/unpkg/dev-deprecated/serializer/json.js +4 -0
- package/dist/unpkg/dev-deprecated/serializer/rest.js +1242 -0
- package/dist/unpkg/dev-deprecated/serializer/transform.js +278 -0
- package/dist/unpkg/dev-deprecated/serializer.js +248 -0
- package/dist/unpkg/dev-deprecated/store.js +636 -0
- package/dist/unpkg/dev-deprecated/util-CWr5WQOT.js +24 -0
- package/dist/unpkg/dev-deprecated/utils-C9PJehtL.js +12 -0
- package/dist/unpkg/prod/-private-Cvf_97EG.js +970 -0
- package/dist/unpkg/prod/adapter/-private.js +1 -0
- package/dist/unpkg/prod/adapter/error.js +330 -0
- package/dist/unpkg/prod/adapter/json-api.js +266 -0
- package/dist/unpkg/prod/adapter/rest.js +1218 -0
- package/dist/unpkg/prod/adapter.js +1219 -0
- package/dist/unpkg/prod/compat/-private.js +1 -0
- package/dist/unpkg/prod/compat/builders.js +210 -0
- package/dist/unpkg/prod/compat/extensions.js +232 -0
- package/dist/unpkg/prod/compat/utils.js +218 -0
- package/dist/unpkg/prod/compat.js +726 -0
- package/dist/unpkg/prod/errors-CXnfnBfQ.js +2343 -0
- package/dist/unpkg/prod/hooks-DvyWhLNg.js +41 -0
- package/dist/unpkg/prod/index.js +151 -0
- package/dist/unpkg/prod/json-BYrUP8ao.js +1256 -0
- package/dist/unpkg/prod/model/-private.js +1 -0
- package/dist/unpkg/prod/model/migration-support.js +544 -0
- package/dist/unpkg/prod/model-for-CqXsIKws.js +221 -0
- package/dist/unpkg/prod/model-fragments.js +76 -0
- package/dist/unpkg/prod/model.js +593 -0
- package/dist/unpkg/prod/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
- package/dist/unpkg/prod/schema-provider-CHujJvA9.js +1904 -0
- package/dist/unpkg/prod/serialize-into-hash-DYU2egXl.js +215 -0
- package/dist/unpkg/prod/serializer/json-api.js +591 -0
- package/dist/unpkg/prod/serializer/json.js +4 -0
- package/dist/unpkg/prod/serializer/rest.js +1210 -0
- package/dist/unpkg/prod/serializer/transform.js +278 -0
- package/dist/unpkg/prod/serializer.js +248 -0
- package/dist/unpkg/prod/store.js +504 -0
- package/dist/unpkg/prod/util-DvanW33H.js +20 -0
- package/dist/unpkg/prod/utils-BhvS1iTS.js +8 -0
- package/dist/unpkg/prod-deprecated/-private-Cvf_97EG.js +970 -0
- package/dist/unpkg/prod-deprecated/adapter/-private.js +1 -0
- package/dist/unpkg/prod-deprecated/adapter/error.js +330 -0
- package/dist/unpkg/prod-deprecated/adapter/json-api.js +266 -0
- package/dist/unpkg/prod-deprecated/adapter/rest.js +1218 -0
- package/dist/unpkg/prod-deprecated/adapter.js +1219 -0
- package/dist/unpkg/prod-deprecated/compat/-private.js +1 -0
- package/dist/unpkg/prod-deprecated/compat/builders.js +210 -0
- package/dist/unpkg/prod-deprecated/compat/extensions.js +232 -0
- package/dist/unpkg/prod-deprecated/compat/utils.js +218 -0
- package/dist/unpkg/prod-deprecated/compat.js +726 -0
- package/dist/unpkg/prod-deprecated/errors-CG1SPYVg.js +2346 -0
- package/dist/unpkg/prod-deprecated/hooks-BIUBiNGR.js +41 -0
- package/dist/unpkg/prod-deprecated/index.js +150 -0
- package/dist/unpkg/prod-deprecated/json-BYrUP8ao.js +1256 -0
- package/dist/unpkg/prod-deprecated/model/-private.js +1 -0
- package/dist/unpkg/prod-deprecated/model/migration-support.js +561 -0
- package/dist/unpkg/prod-deprecated/model-for-CqXsIKws.js +221 -0
- package/dist/unpkg/prod-deprecated/model-fragments.js +76 -0
- package/dist/unpkg/prod-deprecated/model.js +596 -0
- package/dist/unpkg/prod-deprecated/runtime-BPCpkOf1-BKOwiRJp.js +65 -0
- package/dist/unpkg/prod-deprecated/schema-provider-BJ4TWnZf.js +1947 -0
- package/dist/unpkg/prod-deprecated/serialize-into-hash-DYU2egXl.js +215 -0
- package/dist/unpkg/prod-deprecated/serializer/json-api.js +591 -0
- package/dist/unpkg/prod-deprecated/serializer/json.js +4 -0
- package/dist/unpkg/prod-deprecated/serializer/rest.js +1210 -0
- package/dist/unpkg/prod-deprecated/serializer/transform.js +278 -0
- package/dist/unpkg/prod-deprecated/serializer.js +248 -0
- package/dist/unpkg/prod-deprecated/store.js +504 -0
- package/dist/unpkg/prod-deprecated/util-B6cn-i93.js +23 -0
- package/dist/unpkg/prod-deprecated/utils-BUWwQwCh.js +11 -0
- package/logos/README.md +2 -2
- package/logos/logo-yellow-slab.svg +1 -0
- package/logos/word-mark-black.svg +1 -0
- package/logos/word-mark-white.svg +1 -0
- package/package.json +14 -6
- package/logos/NCC-1701-a-blue.svg +0 -4
- package/logos/NCC-1701-a-gold.svg +0 -4
- package/logos/NCC-1701-a-gold_100.svg +0 -1
- package/logos/NCC-1701-a-gold_base-64.txt +0 -1
- package/logos/NCC-1701-a.svg +0 -4
- package/logos/docs-badge.svg +0 -2
- package/logos/ember-data-logo-dark.svg +0 -12
- package/logos/ember-data-logo-light.svg +0 -12
- package/logos/social1.png +0 -0
- package/logos/social2.png +0 -0
- package/logos/warp-drive-logo-dark.svg +0 -4
- 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
|
-
*
|
|
29
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
</blockquote>
|
|
31
|
+
{@link Handler} instead to be used with the {@link RequestManager}
|
|
32
|
+
:::
|
|
35
33
|
|
|
36
|
-
In
|
|
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,
|
|
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 '@
|
|
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 '@
|
|
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
|
-
```
|
|
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
|
-
@
|
|
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 '@
|
|
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 '@
|
|
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) {
|
package/dist/model/-private.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { E as Errors, L as LEGACY_SUPPORT, P as PromiseBelongsTo, a as PromiseManyArray, l as lookupLegacySupport } from "../errors-
|
|
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-
|
|
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,
|
|
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 @
|
|
13
|
-
* to @warp-drive/
|
|
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
|
-
* @
|
|
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 '@
|
|
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 '@
|
|
41
|
-
* import { Type } from '@warp-drive/core
|
|
42
|
-
* import type { HasMany } from '
|
|
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
|
-
* @
|
|
159
|
+
* @warp-drive/legacy/model while migrating to WarpDrive.
|
|
160
160
|
*
|
|
161
161
|
* Example:
|
|
162
162
|
*
|
|
163
163
|
* ```ts
|
|
164
|
-
* import { withDefaults, WithLegacy } from '@
|
|
165
|
-
* import { Type } from '@warp-drive/core
|
|
166
|
-
* import type { HasMany } from '@
|
|
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 '@
|
|
201
|
+
* import { registerDerivations } from '@warp-drive/legacy/model/migration-support';
|
|
202
202
|
*
|
|
203
203
|
* registerDerivations(schema);
|
|
204
204
|
* ```
|
|
205
205
|
*
|
|
206
|
-
* @param
|
|
207
|
-
* @return
|
|
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 @
|
|
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
|
-
*
|
|
301
|
-
*
|
|
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 '@
|
|
402
|
-
* import { SchemaService } from '@warp-drive/
|
|
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 };
|