@warp-drive/core 5.6.0-alpha.5 → 5.6.0-beta.0

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 (219) hide show
  1. package/README.md +8 -7
  2. package/cjs-dist/addon-shim.cjs +1 -0
  3. package/cjs-dist/cjs-set-config.cjs +1 -0
  4. package/declarations/build-config/babel-macros.d.ts +1 -0
  5. package/declarations/build-config/canary-features.d.ts +1 -0
  6. package/declarations/build-config/debugging.d.ts +1 -0
  7. package/declarations/build-config/deprecations.d.ts +1 -0
  8. package/declarations/build-config/env.d.ts +1 -0
  9. package/declarations/build-config/macros.d.ts +1 -0
  10. package/declarations/build-config.d.ts +1 -0
  11. package/declarations/configure.d.ts +7 -0
  12. package/declarations/graph/-private/-diff.d.ts +32 -0
  13. package/declarations/graph/-private/-edge-definition.d.ts +148 -0
  14. package/declarations/graph/-private/-state.d.ts +96 -0
  15. package/declarations/graph/-private/-utils.d.ts +31 -0
  16. package/declarations/graph/-private/coerce-id.d.ts +10 -0
  17. package/declarations/graph/-private/debug/assert-polymorphic-type.d.ts +18 -0
  18. package/declarations/graph/-private/edges/collection.d.ts +39 -0
  19. package/declarations/graph/-private/edges/implicit.d.ts +43 -0
  20. package/declarations/graph/-private/edges/resource.d.ts +24 -0
  21. package/declarations/graph/-private/graph.d.ts +90 -0
  22. package/declarations/graph/-private/normalize-link.d.ts +8 -0
  23. package/declarations/graph/-private/operations/add-to-related-records.d.ts +4 -0
  24. package/declarations/graph/-private/operations/merge-identifier.d.ts +3 -0
  25. package/declarations/graph/-private/operations/remove-from-related-records.d.ts +4 -0
  26. package/declarations/graph/-private/operations/replace-related-record.d.ts +3 -0
  27. package/declarations/graph/-private/operations/replace-related-records.d.ts +62 -0
  28. package/declarations/graph/-private/operations/update-relationship.d.ts +13 -0
  29. package/declarations/graph/-private.d.ts +13 -0
  30. package/declarations/index.d.ts +14 -3
  31. package/declarations/reactive/-private/document.d.ts +146 -0
  32. package/declarations/reactive/-private/fields/compute.d.ts +43 -0
  33. package/declarations/reactive/-private/fields/extension.d.ts +8 -0
  34. package/declarations/reactive/-private/fields/managed-array.d.ts +22 -0
  35. package/declarations/reactive/-private/fields/managed-object.d.ts +21 -0
  36. package/declarations/reactive/-private/fields/many-array-manager.d.ts +19 -0
  37. package/declarations/reactive/-private/hooks.d.ts +5 -0
  38. package/declarations/reactive/-private/record.d.ts +64 -0
  39. package/declarations/reactive/-private/schema.d.ts +271 -0
  40. package/declarations/reactive/-private/symbols.d.ts +36 -0
  41. package/declarations/reactive/-private.d.ts +1 -0
  42. package/declarations/reactive.d.ts +4 -0
  43. package/declarations/request/-private/context.d.ts +34 -35
  44. package/declarations/request/-private/debug.d.ts +2 -3
  45. package/declarations/request/-private/fetch.d.ts +24 -36
  46. package/declarations/request/-private/future.d.ts +3 -4
  47. package/declarations/request/-private/manager.d.ts +159 -132
  48. package/declarations/request/-private/promise-cache.d.ts +21 -13
  49. package/declarations/request/-private/types.d.ts +124 -123
  50. package/declarations/request/-private/utils.d.ts +8 -9
  51. package/declarations/request.d.ts +5 -433
  52. package/declarations/store/-private/cache-handler/handler.d.ts +62 -0
  53. package/declarations/store/-private/cache-handler/types.d.ts +98 -0
  54. package/declarations/store/-private/cache-handler/utils.d.ts +32 -0
  55. package/declarations/store/-private/caches/cache-utils.d.ts +12 -0
  56. package/declarations/store/-private/caches/identifier-cache.d.ts +304 -0
  57. package/declarations/store/-private/caches/instance-cache.d.ts +65 -0
  58. package/declarations/store/-private/caches/resource-utils.d.ts +9 -0
  59. package/declarations/store/-private/debug/utils.d.ts +6 -0
  60. package/declarations/store/-private/default-cache-policy.d.ts +384 -0
  61. package/declarations/store/-private/legacy-model-support/record-reference.d.ts +159 -0
  62. package/declarations/store/-private/legacy-model-support/shim-model-class.d.ts +17 -0
  63. package/declarations/store/-private/managers/cache-capabilities-manager.d.ts +25 -0
  64. package/declarations/store/-private/managers/cache-manager.d.ts +443 -0
  65. package/declarations/store/-private/managers/notification-manager.d.ts +98 -0
  66. package/declarations/store/-private/managers/record-array-manager.d.ts +97 -0
  67. package/declarations/store/-private/network/request-cache.d.ts +107 -0
  68. package/declarations/store/-private/new-core-tmp/promise-state.d.ts +263 -0
  69. package/declarations/store/-private/new-core-tmp/reactivity/configure.d.ts +176 -0
  70. package/declarations/store/-private/new-core-tmp/reactivity/internal.d.ts +169 -0
  71. package/declarations/store/-private/new-core-tmp/reactivity/signal.d.ts +35 -0
  72. package/declarations/store/-private/new-core-tmp/request-state.d.ts +277 -0
  73. package/declarations/store/-private/new-core-tmp/request-subscription.d.ts +261 -0
  74. package/declarations/store/-private/record-arrays/identifier-array.d.ts +147 -0
  75. package/declarations/store/-private/record-arrays/many-array.d.ts +197 -0
  76. package/declarations/store/-private/record-arrays/native-proxy-type-fix.d.ts +126 -0
  77. package/declarations/store/-private/store-service.d.ts +1605 -0
  78. package/declarations/store/-private/utils/coerce-id.d.ts +10 -0
  79. package/declarations/store/-private/utils/construct-resource.d.ts +6 -0
  80. package/declarations/store/-private/utils/is-non-empty-string.d.ts +1 -0
  81. package/declarations/store/-private/utils/normalize-model-name.d.ts +1 -0
  82. package/declarations/store/-private/utils/uuid-polyfill.d.ts +1 -0
  83. package/declarations/store/-private.d.ts +31 -0
  84. package/declarations/store/-types/q/cache-capabilities-manager.d.ts +99 -0
  85. package/declarations/store/-types/q/ds-model.d.ts +21 -0
  86. package/declarations/store/-types/q/identifier.d.ts +20 -0
  87. package/declarations/store/-types/q/record-instance.d.ts +23 -0
  88. package/declarations/store/-types/q/schema-service.d.ts +354 -0
  89. package/declarations/store/-types/q/store.d.ts +32 -0
  90. package/declarations/store.d.ts +1 -0
  91. package/declarations/types/-private.d.ts +16 -8
  92. package/declarations/types/cache/aliases.d.ts +11 -1
  93. package/declarations/types/cache/change.d.ts +4 -5
  94. package/declarations/types/cache/mutations.d.ts +51 -28
  95. package/declarations/types/cache/operations.d.ts +60 -47
  96. package/declarations/types/cache/relationship.d.ts +11 -9
  97. package/declarations/types/cache.d.ts +495 -484
  98. package/declarations/types/graph.d.ts +31 -40
  99. package/declarations/types/identifier.d.ts +83 -82
  100. package/declarations/types/json/raw.d.ts +1 -2
  101. package/declarations/types/params.d.ts +4 -5
  102. package/declarations/types/record.d.ts +117 -76
  103. package/declarations/types/request.d.ts +289 -266
  104. package/declarations/types/runtime.d.ts +8 -9
  105. package/declarations/types/schema/concepts.d.ts +19 -13
  106. package/declarations/types/schema/fields.d.ts +1712 -1741
  107. package/declarations/types/schema/fields.type-test.d.ts +0 -1
  108. package/declarations/types/spec/document.d.ts +28 -22
  109. package/declarations/types/spec/error.d.ts +16 -17
  110. package/declarations/types/spec/json-api-raw.d.ts +102 -102
  111. package/declarations/types/symbols.d.ts +74 -75
  112. package/declarations/types/utils.d.ts +5 -5
  113. package/declarations/types.d.ts +10 -7
  114. package/declarations/utils/string.d.ts +48 -0
  115. package/dist/build-config/babel-macros.js +1 -0
  116. package/dist/build-config/canary-features.js +1 -0
  117. package/dist/build-config/debugging.js +1 -0
  118. package/dist/build-config/deprecations.js +1 -0
  119. package/dist/build-config/env.js +1 -0
  120. package/dist/build-config/macros.js +1 -0
  121. package/dist/build-config.js +1 -0
  122. package/dist/configure-B48bFHOl.js +181 -0
  123. package/dist/configure.js +1 -0
  124. package/dist/{context-DE5sFezZ.js → context-COmAnXUQ.js} +2 -2
  125. package/dist/graph/-private.js +3372 -0
  126. package/dist/handler-C2T-IyJK.js +339 -0
  127. package/dist/index.js +37 -104
  128. package/dist/reactive/-private.js +1 -0
  129. package/dist/reactive.js +1988 -0
  130. package/dist/request-state-CjLph1LP.js +8139 -0
  131. package/dist/request.js +1 -1
  132. package/dist/store/-private.js +3 -0
  133. package/dist/store.js +545 -0
  134. package/dist/symbols-SIstXMLI.js +44 -0
  135. package/dist/types/-private.js +3 -3
  136. package/dist/types/record.js +1 -1
  137. package/dist/types/request.js +2 -2
  138. package/dist/types/runtime.js +1 -1
  139. package/dist/types/schema/fields.js +8 -41
  140. package/dist/types/symbols.js +3 -3
  141. package/dist/utils/string.js +92 -0
  142. package/logos/NCC-1701-a-blue.svg +4 -0
  143. package/logos/NCC-1701-a-gold.svg +4 -0
  144. package/logos/NCC-1701-a-gold_100.svg +1 -0
  145. package/logos/NCC-1701-a-gold_base-64.txt +1 -0
  146. package/logos/NCC-1701-a.svg +4 -0
  147. package/logos/README.md +4 -0
  148. package/logos/docs-badge.svg +2 -0
  149. package/logos/ember-data-logo-dark.svg +12 -0
  150. package/logos/ember-data-logo-light.svg +12 -0
  151. package/logos/github-header.svg +444 -0
  152. package/logos/social1.png +0 -0
  153. package/logos/social2.png +0 -0
  154. package/logos/warp-drive-logo-dark.svg +4 -0
  155. package/logos/warp-drive-logo-gold.svg +4 -0
  156. package/package.json +11 -8
  157. package/declarations/index.d.ts.map +0 -1
  158. package/declarations/request/-private/context.d.ts.map +0 -1
  159. package/declarations/request/-private/debug.d.ts.map +0 -1
  160. package/declarations/request/-private/fetch.d.ts.map +0 -1
  161. package/declarations/request/-private/future.d.ts.map +0 -1
  162. package/declarations/request/-private/manager.d.ts.map +0 -1
  163. package/declarations/request/-private/promise-cache.d.ts.map +0 -1
  164. package/declarations/request/-private/types.d.ts.map +0 -1
  165. package/declarations/request/-private/utils.d.ts.map +0 -1
  166. package/declarations/request.d.ts.map +0 -1
  167. package/declarations/types/-private.d.ts.map +0 -1
  168. package/declarations/types/cache/aliases.d.ts.map +0 -1
  169. package/declarations/types/cache/change.d.ts.map +0 -1
  170. package/declarations/types/cache/mutations.d.ts.map +0 -1
  171. package/declarations/types/cache/operations.d.ts.map +0 -1
  172. package/declarations/types/cache/relationship.d.ts.map +0 -1
  173. package/declarations/types/cache.d.ts.map +0 -1
  174. package/declarations/types/graph.d.ts.map +0 -1
  175. package/declarations/types/identifier.d.ts.map +0 -1
  176. package/declarations/types/json/raw.d.ts.map +0 -1
  177. package/declarations/types/params.d.ts.map +0 -1
  178. package/declarations/types/record.d.ts.map +0 -1
  179. package/declarations/types/record.type-test.d.ts +0 -2
  180. package/declarations/types/record.type-test.d.ts.map +0 -1
  181. package/declarations/types/request.d.ts.map +0 -1
  182. package/declarations/types/request.type-test.d.ts +0 -2
  183. package/declarations/types/request.type-test.d.ts.map +0 -1
  184. package/declarations/types/runtime.d.ts.map +0 -1
  185. package/declarations/types/schema/concepts.d.ts.map +0 -1
  186. package/declarations/types/schema/fields.d.ts.map +0 -1
  187. package/declarations/types/schema/fields.type-test.d.ts.map +0 -1
  188. package/declarations/types/spec/document.d.ts.map +0 -1
  189. package/declarations/types/spec/error.d.ts.map +0 -1
  190. package/declarations/types/spec/json-api-raw.d.ts.map +0 -1
  191. package/declarations/types/symbols.d.ts.map +0 -1
  192. package/declarations/types/utils.d.ts.map +0 -1
  193. package/declarations/types.d.ts.map +0 -1
  194. package/dist/context-DE5sFezZ.js.map +0 -1
  195. package/dist/index.js.map +0 -1
  196. package/dist/request.js.map +0 -1
  197. package/dist/types/-private.js.map +0 -1
  198. package/dist/types/cache/aliases.js.map +0 -1
  199. package/dist/types/cache/change.js.map +0 -1
  200. package/dist/types/cache/mutations.js.map +0 -1
  201. package/dist/types/cache/operations.js.map +0 -1
  202. package/dist/types/cache/relationship.js.map +0 -1
  203. package/dist/types/cache.js.map +0 -1
  204. package/dist/types/graph.js.map +0 -1
  205. package/dist/types/identifier.js.map +0 -1
  206. package/dist/types/json/raw.js.map +0 -1
  207. package/dist/types/params.js.map +0 -1
  208. package/dist/types/record.js.map +0 -1
  209. package/dist/types/request.js.map +0 -1
  210. package/dist/types/runtime.js.map +0 -1
  211. package/dist/types/schema/concepts.js.map +0 -1
  212. package/dist/types/schema/fields.js.map +0 -1
  213. package/dist/types/schema/fields.type-test.js.map +0 -1
  214. package/dist/types/spec/document.js.map +0 -1
  215. package/dist/types/spec/error.js.map +0 -1
  216. package/dist/types/spec/json-api-raw.js.map +0 -1
  217. package/dist/types/symbols.js.map +0 -1
  218. package/dist/types/utils.js.map +0 -1
  219. package/dist/types.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ import type { StableRecordIdentifier } from "../../../types.js";
2
+ import type { ReplaceRelatedRecordsOperation } from "../../../types/graph.js";
3
+ import type { Graph } from "../graph.js";
4
+ /*
5
+ case many:1
6
+ ========
7
+ In a bi-directional graph with Many:1 edges, adding a value
8
+ results in up-to 3 discrete value transitions, while removing
9
+ a value is only 2 transitions.
10
+
11
+ For adding C to A
12
+ If: A <<-> B, C <->> D is the initial state,
13
+ and: B <->> A <<-> C, D is the final state
14
+
15
+ then we would undergo the following transitions.
16
+
17
+ add C to A
18
+ remove C from D
19
+ add A to C
20
+
21
+ For removing B from A
22
+ If: A <<-> B, C <->> D is the initial state,
23
+ and: A, B, C <->> D is the final state
24
+
25
+ then we would undergo the following transitions.
26
+
27
+ remove B from A
28
+ remove A from B
29
+
30
+ case many:many
31
+ ===========
32
+ In a bi-directional graph with Many:Many edges, adding or
33
+ removing a value requires only 2 value transitions.
34
+
35
+ For Adding
36
+ If: A<<->>B, C<<->>D is the initial state (double arrows representing the many side)
37
+ And: D<<->>C<<->>A<<->>B is the final state
38
+
39
+ Then we would undergo two transitions.
40
+
41
+ add C to A.
42
+ add A to C
43
+
44
+ For Removing
45
+ If: A<<->>B, C<<->>D is the initial state (double arrows representing the many side)
46
+ And: A, B, C<<->>D is the final state
47
+
48
+ Then we would undergo two transitions.
49
+
50
+ remove B from A
51
+ remove A from B
52
+
53
+ case many:?
54
+ ========
55
+ In a uni-directional graph with Many:? edges (modeled in WarpDrive with `inverse:null`) with
56
+ artificial (implicit) inverses, replacing a value results in 2 discrete value transitions.
57
+ This is because a Many:? relationship is effectively Many:Many.
58
+ */
59
+ export default function replaceRelatedRecords(graph: Graph, op: ReplaceRelatedRecordsOperation, isRemote: boolean): void;
60
+ export declare function addToInverse(graph: Graph, identifier: StableRecordIdentifier, key: string, value: StableRecordIdentifier, isRemote: boolean): void;
61
+ export declare function notifyInverseOfPotentialMaterialization(graph: Graph, identifier: StableRecordIdentifier, key: string, value: StableRecordIdentifier, isRemote: boolean): void;
62
+ export declare function removeFromInverse(graph: Graph, identifier: StableRecordIdentifier, key: string, value: StableRecordIdentifier, isRemote: boolean): void;
@@ -0,0 +1,13 @@
1
+ import type { Store } from "../../../index.js";
2
+ import type { StableRecordIdentifier } from "../../../types.js";
3
+ import type { UpdateResourceRelationshipOperation } from "../../../types/cache/operations.js";
4
+ import type { UpdateRelationshipOperation } from "../../../types/graph.js";
5
+ import type { ExistingResourceIdentifierObject, NewResourceIdentifierObject } from "../../../types/spec/json-api-raw.js";
6
+ import type { Graph } from "../graph.js";
7
+ type IdentifierCache = Store["identifierCache"];
8
+ /*
9
+ Updates the "canonical" or "remote" state of a relationship, replacing any existing
10
+ state and blowing away any local changes (excepting new records).
11
+ */
12
+ export default function updateRelationshipOperation(graph: Graph, op: UpdateRelationshipOperation | UpdateResourceRelationshipOperation): void;
13
+ export declare function upgradeIdentifiers(arr: (ExistingResourceIdentifierObject | NewResourceIdentifierObject | StableRecordIdentifier)[], cache: IdentifierCache): StableRecordIdentifier[];
@@ -0,0 +1,13 @@
1
+ import type { Store } from "../index.js";
2
+ import type { CacheCapabilitiesManager } from "../types.js";
3
+ import { Graph } from "./-private/graph.js";
4
+ export { isBelongsTo } from "./-private/-utils.js";
5
+ export type { CollectionEdge } from "./-private/edges/collection.js";
6
+ export type { ResourceEdge } from "./-private/edges/resource.js";
7
+ export type { ImplicitEdge } from "./-private/edges/implicit.js";
8
+ export type { GraphEdge } from "./-private/graph.js";
9
+ export type { UpgradedMeta } from "./-private/-edge-definition.js";
10
+ export type { Graph };
11
+ export declare function peekGraph(store: CacheCapabilitiesManager | Store): Graph | undefined;
12
+ export type peekGraph = typeof peekGraph;
13
+ export declare function graphFor(store: CacheCapabilitiesManager | Store): Graph;
@@ -1,3 +1,14 @@
1
- export { Fetch } from './request/-private/fetch.ts';
2
- export { RequestManager } from './request/-private/manager.ts';
3
- //# sourceMappingURL=index.d.ts.map
1
+ /**
2
+ * @module
3
+ * @mergeModuleWith <project>
4
+ */
5
+ import type { ReactiveDocument } from "./reactive/-private/document.js";
6
+ export { Fetch } from "./request/-private/fetch.js";
7
+ export { RequestManager } from "./request/-private/manager.js";
8
+ export { Store, type StoreRequestContext, CacheHandler, type CachePolicy, type StoreRequestInput, recordIdentifierFor, storeFor } from "./store/-private.js";
9
+ /**
10
+ * @deprecated use `ReactiveDocument` instead
11
+ */
12
+ export type Document<T> = ReactiveDocument<T>;
13
+ export type { DocumentCacheOperation, CacheOperation, NotificationType } from "./store/-private/managers/notification-manager.js";
14
+ export { setIdentifierGenerationMethod, setIdentifierUpdateMethod, setIdentifierForgetMethod, setIdentifierResetMethod, setKeyInfoForResource } from "./store/-private/caches/identifier-cache.js";
@@ -0,0 +1,146 @@
1
+ import type { Store } from "../../store/-private/store-service.js";
2
+ import type { StableDocumentIdentifier } from "../../types/identifier.js";
3
+ import type { ImmutableRequestInfo, RequestInfo } from "../../types/request.js";
4
+ import type { ResourceDocument } from "../../types/spec/document.js";
5
+ import type { Meta, PaginationLinks } from "../../types/spec/json-api-raw.js";
6
+ /**
7
+ * A Document is a class that wraps the response content from a request to the API
8
+ * returned by `Cache.put` or `Cache.peek`, converting resource-identifiers into
9
+ * record instances.
10
+ *
11
+ * It is not directly instantiated by the user, and its properties should not
12
+ * be directly modified. Whether individual properties are mutable or not is
13
+ * determined by the record instance itself.
14
+ *
15
+ * @public
16
+ * @hideconstructor
17
+ */
18
+ export declare class ReactiveDocument<T> {
19
+ #private;
20
+ /**
21
+ * The links object for this document, if any
22
+ *
23
+ * e.g.
24
+ *
25
+ * ```
26
+ * {
27
+ * self: '/articles?page[number]=3',
28
+ * }
29
+ * ```
30
+ *
31
+ * @property links
32
+ * @type {Object|undefined} - a links object
33
+ * @public
34
+ */
35
+ readonly links?: PaginationLinks;
36
+ /**
37
+ * The primary data for this document, if any.
38
+ *
39
+ * If this document has no primary data (e.g. because it is an error document)
40
+ * this property will be `undefined`.
41
+ *
42
+ * For collections this will be an array of record instances,
43
+ * for single resource requests it will be a single record instance or null.
44
+ *
45
+ * @property data
46
+ * @public
47
+ * @type {Object|Array<object>|null|undefined} - a data object
48
+ */
49
+ readonly data?: T;
50
+ /**
51
+ * The errors returned by the API for this request, if any
52
+ *
53
+ * @property errors
54
+ * @public
55
+ * @type {Object|undefined} - an errors object
56
+ */
57
+ readonly errors?: object[];
58
+ /**
59
+ * The meta object for this document, if any
60
+ *
61
+ * @property meta
62
+ * @public
63
+ * @type {Object|undefined} - a meta object
64
+ */
65
+ readonly meta?: Meta;
66
+ /**
67
+ * The identifier associated with this document, if any
68
+ *
69
+ * @property identifier
70
+ * @public
71
+ * @type {StableDocumentIdentifier|null}
72
+ */
73
+ readonly identifier: StableDocumentIdentifier | null;
74
+ protected readonly _store: Store;
75
+ protected readonly _localCache: {
76
+ document: ResourceDocument;
77
+ request: ImmutableRequestInfo;
78
+ } | null;
79
+ constructor(store: Store, identifier: StableDocumentIdentifier | null, localCache: {
80
+ document: ResourceDocument;
81
+ request: ImmutableRequestInfo;
82
+ } | null);
83
+ /**
84
+ * Fetches the related link for this document, returning a promise that resolves
85
+ * with the document when the request completes. If no related link is present,
86
+ * will fallback to the self link if present
87
+ *
88
+ * @public
89
+ * @param {Object} options
90
+ * @return {Promise<Document>}
91
+ */
92
+ fetch(options?: RequestInfo<ReactiveDocument<T>, T>): Promise<ReactiveDocument<T>>;
93
+ /**
94
+ * Fetches the next link for this document, returning a promise that resolves
95
+ * with the new document when the request completes, or null if there is no
96
+ * next link.
97
+ *
98
+ * @public
99
+ * @param {Object} options
100
+ * @return {Promise<Document | null>}
101
+ */
102
+ next(options?: RequestInfo<ReactiveDocument<T>, T>): Promise<ReactiveDocument<T> | null>;
103
+ /**
104
+ * Fetches the prev link for this document, returning a promise that resolves
105
+ * with the new document when the request completes, or null if there is no
106
+ * prev link.
107
+ *
108
+ * @public
109
+ * @param {Object} options
110
+ * @return {Promise<Document | null>}
111
+ */
112
+ prev(options: RequestInfo<ReactiveDocument<T>, T>): Promise<ReactiveDocument<T> | null>;
113
+ /**
114
+ * Fetches the first link for this document, returning a promise that resolves
115
+ * with the new document when the request completes, or null if there is no
116
+ * first link.
117
+ *
118
+ * @public
119
+ * @param {Object} options
120
+ * @return {Promise<Document | null>}
121
+ */
122
+ first(options: RequestInfo<ReactiveDocument<T>, T>): Promise<ReactiveDocument<T> | null>;
123
+ /**
124
+ * Fetches the last link for this document, returning a promise that resolves
125
+ * with the new document when the request completes, or null if there is no
126
+ * last link.
127
+ *
128
+ * @public
129
+ * @param {Object} options
130
+ * @return {Promise<Document | null>}
131
+ */
132
+ last(options: RequestInfo<ReactiveDocument<T>, T>): Promise<ReactiveDocument<T> | null>;
133
+ /**
134
+ * Implemented for `JSON.stringify` support.
135
+ *
136
+ * Returns the JSON representation of the document wrapper.
137
+ *
138
+ * This is a shallow serialization, it does not deeply serialize
139
+ * the document's contents, leaving that to the individual record
140
+ * instances to determine how to do, if at all.
141
+ *
142
+ * @public
143
+ * @return
144
+ */
145
+ toJSON(): object;
146
+ }
@@ -0,0 +1,43 @@
1
+ import type { Store, StoreRequestInput } from "../../../index.js";
2
+ import type { Future } from "../../../request.js";
3
+ import { RelatedCollection as ManyArray } from "../../../store/-private.js";
4
+ import type { Cache } from "../../../types/cache.js";
5
+ import type { StableRecordIdentifier } from "../../../types/identifier.js";
6
+ import type { ArrayField, DerivedField, FieldSchema, GenericField, LegacyHasManyField, LocalField, ObjectField, SchemaArrayField, SchemaObjectField } from "../../../types/schema/fields.js";
7
+ import type { Links } from "../../../types/spec/json-api-raw.js";
8
+ import { RecordStore } from "../../../types/symbols.js";
9
+ import { ReactiveResource } from "../record.js";
10
+ import type { SchemaService } from "../schema.js";
11
+ import { Parent } from "../symbols.js";
12
+ import { ManagedArray } from "./managed-array.js";
13
+ import { ManagedObject } from "./managed-object.js";
14
+ export declare const ManagedArrayMap: Map<ReactiveResource, Map<string, ManagedArray | ManyArray>>;
15
+ export declare const ManagedObjectMap: Map<ReactiveResource, Map<string, ManagedObject | ReactiveResource>>;
16
+ export declare function computeLocal(record: typeof Proxy<ReactiveResource>, field: LocalField, prop: string): unknown;
17
+ export declare function peekManagedArray(record: ReactiveResource, field: FieldSchema): ManyArray | ManagedArray | undefined;
18
+ export declare function peekManagedObject(record: ReactiveResource, field: ObjectField): ManagedObject | undefined;
19
+ export declare function peekManagedObject(record: ReactiveResource, field: SchemaObjectField): ReactiveResource | undefined;
20
+ export declare function computeField(schema: SchemaService, cache: Cache, record: ReactiveResource, identifier: StableRecordIdentifier, field: GenericField, prop: string | string[], editable: boolean): unknown;
21
+ export declare function computeArray(store: Store, schema: SchemaService, cache: Cache, record: ReactiveResource, identifier: StableRecordIdentifier, field: ArrayField | SchemaArrayField, path: string[], editable: boolean, legacy: boolean): ManagedArray | null;
22
+ export declare function computeObject(schema: SchemaService, cache: Cache, record: ReactiveResource, identifier: StableRecordIdentifier, field: ObjectField, path: string[], editable: boolean, legacy: boolean): ManagedObject | null;
23
+ export declare function computeSchemaObject(store: Store, cache: Cache, record: ReactiveResource, identifier: StableRecordIdentifier, field: SchemaObjectField, path: string[], legacy: boolean, editable: boolean): ReactiveResource | null;
24
+ export declare function computeAttribute(cache: Cache, identifier: StableRecordIdentifier, prop: string, editable: boolean): unknown;
25
+ export declare function computeDerivation(schema: SchemaService, record: ReactiveResource, identifier: StableRecordIdentifier, field: DerivedField, prop: string): unknown;
26
+ interface ResourceRelationship<T extends ReactiveResource = ReactiveResource> {
27
+ lid: string;
28
+ [Parent]: ReactiveResource;
29
+ [RecordStore]: Store;
30
+ name: string;
31
+ data: T | null;
32
+ links: Links;
33
+ meta: Record<string, unknown>;
34
+ }
35
+ // TODO probably this should just be a Document
36
+ // but its separate until we work out the lid situation
37
+ declare class ResourceRelationship<T extends ReactiveResource = ReactiveResource> {
38
+ constructor(store: Store, cache: Cache, parent: ReactiveResource, identifier: StableRecordIdentifier, field: FieldSchema, name: string, editable: boolean);
39
+ fetch(options?: StoreRequestInput<T, T>): Future<T>;
40
+ }
41
+ export declare function computeResource<T extends ReactiveResource>(store: Store, cache: Cache, parent: ReactiveResource, identifier: StableRecordIdentifier, field: FieldSchema, prop: string, editable: boolean): ResourceRelationship<T>;
42
+ export declare function computeHasMany(store: Store, schema: SchemaService, cache: Cache, record: ReactiveResource, identifier: StableRecordIdentifier, field: LegacyHasManyField, path: string[], editable: boolean, legacy: boolean): ManyArray | null;
43
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { SignalStore, WarpDriveSignal } from "../../../store/-private/new-core-tmp/reactivity/internal.js";
2
+ import type { ExtensionDef } from "../schema.js";
3
+ export type ProxiedMethod = (...args: unknown[]) => unknown;
4
+ export declare function expectNever(value: never): void;
5
+ export declare function isExtensionProp(extensions: Map<string | symbol, ExtensionDef> | null, prop: string | number | symbol): prop is string | symbol;
6
+ export declare function performObjectExtensionGet(receiver: object, extensions: Map<string | symbol, ExtensionDef>, signals: SignalStore, prop: string | symbol): unknown;
7
+ export declare function performExtensionSet(receiver: object, extensions: Map<string | symbol, ExtensionDef>, signals: SignalStore, prop: string | symbol, value: unknown): boolean;
8
+ export declare function performArrayExtensionGet(receiver: object, extensions: Map<string | symbol, ExtensionDef>, signals: SignalStore, prop: string | symbol, _SIGNAL: WarpDriveSignal, boundFns: Map<string | symbol | number, ProxiedMethod>, transaction: (v: boolean) => void): unknown;
@@ -0,0 +1,22 @@
1
+ import type { Store } from "../../../index.js";
2
+ import type { WarpDriveSignal } from "../../../store/-private.js";
3
+ import { ARRAY_SIGNAL } from "../../../store/-private.js";
4
+ import type { Cache } from "../../../types/cache.js";
5
+ import type { StableRecordIdentifier } from "../../../types/identifier.js";
6
+ import type { ArrayField, SchemaArrayField } from "../../../types/schema/fields.js";
7
+ import { ReactiveResource } from "../record.js";
8
+ import type { SchemaService } from "../schema.js";
9
+ import { Editable, Legacy, SOURCE } from "../symbols.js";
10
+ export interface ManagedArray extends Omit<Array<unknown>, "[]"> {
11
+ [SOURCE]: unknown[];
12
+ identifier: StableRecordIdentifier;
13
+ path: string[];
14
+ owner: ReactiveResource;
15
+ [ARRAY_SIGNAL]: WarpDriveSignal;
16
+ [Editable]: boolean;
17
+ [Legacy]: boolean;
18
+ }
19
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
20
+ export declare class ManagedArray {
21
+ constructor(store: Store, schema: SchemaService, cache: Cache, field: ArrayField | SchemaArrayField, data: unknown[], identifier: StableRecordIdentifier, path: string[], owner: ReactiveResource, isSchemaArray: boolean, editable: boolean, legacy: boolean);
22
+ }
@@ -0,0 +1,21 @@
1
+ import { OBJECT_SIGNAL, type WarpDriveSignal } from "../../../store/-private.js";
2
+ import type { Cache } from "../../../types/cache.js";
3
+ import type { StableRecordIdentifier } from "../../../types/identifier.js";
4
+ import type { ObjectField, SchemaObjectField } from "../../../types/schema/fields.js";
5
+ import type { ReactiveResource } from "../record.js";
6
+ import type { SchemaService } from "../schema.js";
7
+ import { Editable, EmbeddedPath, Legacy, Parent, SOURCE } from "../symbols.js";
8
+ export declare function notifyObject(obj: ManagedObject): void;
9
+ // const ignoredGlobalFields = new Set<string>(['setInterval', 'nodeType', 'nodeName', 'length', 'document', STRUCTURED]);
10
+ export interface ManagedObject {
11
+ [SOURCE]: object;
12
+ [Parent]: StableRecordIdentifier;
13
+ [EmbeddedPath]: string[];
14
+ [OBJECT_SIGNAL]: WarpDriveSignal;
15
+ [Editable]: boolean;
16
+ [Legacy]: boolean;
17
+ }
18
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
19
+ export declare class ManagedObject {
20
+ constructor(schema: SchemaService, cache: Cache, field: ObjectField | SchemaObjectField, data: object, identifier: StableRecordIdentifier, path: string[], owner: ReactiveResource, editable: boolean, legacy: boolean);
21
+ }
@@ -0,0 +1,19 @@
1
+ import type { Store } from "../../../index.js";
2
+ import type { RelatedCollection as ManyArray } from "../../../store/-private.js";
3
+ import type { LocalRelationshipOperation } from "../../../types/graph.js";
4
+ import type { StableRecordIdentifier } from "../../../types/identifier.js";
5
+ import type { ReactiveResource } from "../record.js";
6
+ export interface FindHasManyOptions {
7
+ reload?: boolean;
8
+ backgroundReload?: boolean;
9
+ }
10
+ export declare class ManyArrayManager {
11
+ record: ReactiveResource;
12
+ store: Store;
13
+ identifier: StableRecordIdentifier;
14
+ editable: boolean;
15
+ constructor(record: ReactiveResource, editable: boolean);
16
+ _syncArray(array: ManyArray): void;
17
+ reloadHasMany<T>(key: string, options?: FindHasManyOptions): Promise<ManyArray<T>>;
18
+ mutate(mutation: LocalRelationshipOperation): void;
19
+ }
@@ -0,0 +1,5 @@
1
+ import type { Store } from "../../index.js";
2
+ import type { StableRecordIdentifier } from "../../types.js";
3
+ import { ReactiveResource } from "./record.js";
4
+ export declare function instantiateRecord(store: Store, identifier: StableRecordIdentifier, createArgs?: Record<string, unknown>): ReactiveResource;
5
+ export declare function teardownRecord(record: unknown): void;
@@ -0,0 +1,64 @@
1
+ import type { Store } from "../../index.js";
2
+ import type { StableRecordIdentifier } from "../../types/identifier.js";
3
+ import type { SchemaArrayField, SchemaObjectField } from "../../types/schema/fields.js";
4
+ import { RecordStore } from "../../types/symbols.js";
5
+ import { Checkout, Destroy, Editable, EmbeddedField, EmbeddedPath, Identifier, Legacy, Parent } from "./symbols.js";
6
+ export { Editable, Legacy, Checkout } from "./symbols.js";
7
+ export interface ReactiveResource {
8
+ [Symbol.toStringTag]: `ReactiveResource<${string}>`;
9
+ /** @internal */
10
+ [RecordStore]: Store;
11
+ /** @internal */
12
+ [Identifier]: StableRecordIdentifier;
13
+ /** @internal */
14
+ [Parent]: StableRecordIdentifier;
15
+ /** @internal */
16
+ [EmbeddedField]: SchemaArrayField | SchemaObjectField | null;
17
+ /** @internal */
18
+ [EmbeddedPath]: string[] | null;
19
+ /** @internal */
20
+ [Editable]: boolean;
21
+ /** @internal */
22
+ [Legacy]: boolean;
23
+ /** @internal */
24
+ ___notifications: object;
25
+ /** @internal */
26
+ [Destroy](): void;
27
+ /**
28
+ * Create an editable copy of the record
29
+ *
30
+ * ReactiveResource instances are not editable by default. This method creates an editable copy of the record. To use,
31
+ * import the `Checkout` symbol from `@warp-drive/schema-record` and call it on the record.
32
+ *
33
+ * ```ts
34
+ * import { Checkout } from '@warp-drive/schema-record';
35
+ *
36
+ * const record = store.peekRecord('user', '1');
37
+ * const editableRecord = await record[Checkout]();
38
+ * ```
39
+ *
40
+ * @returns a promise that resolves to the editable record
41
+ * @throws if the record is already editable or if the record is embedded
42
+ *
43
+ */
44
+ [Checkout]<T>(): Promise<T>;
45
+ }
46
+ /**
47
+ * A class that uses a the ResourceSchema for a ResourceType
48
+ * and a ResouceKey to transform data from the cache into a rich, reactive
49
+ * object.
50
+ *
51
+ * This class is not directly instantiable. To use it, you should
52
+ * configure the store's `instantiateRecord` and `teardownRecord` hooks
53
+ * with the matching hooks provided by this package.
54
+ *
55
+ * @hideconstructor
56
+ * @public
57
+ */
58
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class
59
+ export declare class ReactiveResource {
60
+ constructor(store: Store, identifier: StableRecordIdentifier, Mode: {
61
+ [Editable]: boolean;
62
+ [Legacy]: boolean;
63
+ }, isEmbedded?: boolean, embeddedField?: SchemaArrayField | SchemaObjectField | null, embeddedPath?: string[] | null);
64
+ }