@warp-drive/core 5.6.0-alpha.17 → 5.6.0-alpha.5

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 +7 -8
  2. package/declarations/index.d.ts +3 -14
  3. package/declarations/index.d.ts.map +1 -0
  4. package/declarations/request/-private/context.d.ts +35 -34
  5. package/declarations/request/-private/context.d.ts.map +1 -0
  6. package/declarations/request/-private/debug.d.ts +3 -2
  7. package/declarations/request/-private/debug.d.ts.map +1 -0
  8. package/declarations/request/-private/fetch.d.ts +36 -24
  9. package/declarations/request/-private/fetch.d.ts.map +1 -0
  10. package/declarations/request/-private/future.d.ts +4 -3
  11. package/declarations/request/-private/future.d.ts.map +1 -0
  12. package/declarations/request/-private/manager.d.ts +132 -159
  13. package/declarations/request/-private/manager.d.ts.map +1 -0
  14. package/declarations/request/-private/promise-cache.d.ts +13 -21
  15. package/declarations/request/-private/promise-cache.d.ts.map +1 -0
  16. package/declarations/request/-private/types.d.ts +123 -124
  17. package/declarations/request/-private/types.d.ts.map +1 -0
  18. package/declarations/request/-private/utils.d.ts +9 -8
  19. package/declarations/request/-private/utils.d.ts.map +1 -0
  20. package/declarations/request.d.ts +433 -5
  21. package/declarations/request.d.ts.map +1 -0
  22. package/declarations/types/-private.d.ts +8 -16
  23. package/declarations/types/-private.d.ts.map +1 -0
  24. package/declarations/types/cache/aliases.d.ts +1 -11
  25. package/declarations/types/cache/aliases.d.ts.map +1 -0
  26. package/declarations/types/cache/change.d.ts +5 -4
  27. package/declarations/types/cache/change.d.ts.map +1 -0
  28. package/declarations/types/cache/mutations.d.ts +28 -51
  29. package/declarations/types/cache/mutations.d.ts.map +1 -0
  30. package/declarations/types/cache/operations.d.ts +47 -60
  31. package/declarations/types/cache/operations.d.ts.map +1 -0
  32. package/declarations/types/cache/relationship.d.ts +9 -11
  33. package/declarations/types/cache/relationship.d.ts.map +1 -0
  34. package/declarations/types/cache.d.ts +484 -495
  35. package/declarations/types/cache.d.ts.map +1 -0
  36. package/declarations/types/graph.d.ts +40 -31
  37. package/declarations/types/graph.d.ts.map +1 -0
  38. package/declarations/types/identifier.d.ts +82 -83
  39. package/declarations/types/identifier.d.ts.map +1 -0
  40. package/declarations/types/json/raw.d.ts +2 -1
  41. package/declarations/types/json/raw.d.ts.map +1 -0
  42. package/declarations/types/params.d.ts +5 -4
  43. package/declarations/types/params.d.ts.map +1 -0
  44. package/declarations/types/record.d.ts +76 -117
  45. package/declarations/types/record.d.ts.map +1 -0
  46. package/declarations/types/record.type-test.d.ts +2 -0
  47. package/declarations/types/record.type-test.d.ts.map +1 -0
  48. package/declarations/types/request.d.ts +266 -289
  49. package/declarations/types/request.d.ts.map +1 -0
  50. package/declarations/types/request.type-test.d.ts +2 -0
  51. package/declarations/types/request.type-test.d.ts.map +1 -0
  52. package/declarations/types/runtime.d.ts +9 -8
  53. package/declarations/types/runtime.d.ts.map +1 -0
  54. package/declarations/types/schema/concepts.d.ts +13 -19
  55. package/declarations/types/schema/concepts.d.ts.map +1 -0
  56. package/declarations/types/schema/fields.d.ts +1741 -1712
  57. package/declarations/types/schema/fields.d.ts.map +1 -0
  58. package/declarations/types/schema/fields.type-test.d.ts +1 -0
  59. package/declarations/types/schema/fields.type-test.d.ts.map +1 -0
  60. package/declarations/types/spec/document.d.ts +22 -28
  61. package/declarations/types/spec/document.d.ts.map +1 -0
  62. package/declarations/types/spec/error.d.ts +17 -16
  63. package/declarations/types/spec/error.d.ts.map +1 -0
  64. package/declarations/types/spec/json-api-raw.d.ts +102 -102
  65. package/declarations/types/spec/json-api-raw.d.ts.map +1 -0
  66. package/declarations/types/symbols.d.ts +75 -74
  67. package/declarations/types/symbols.d.ts.map +1 -0
  68. package/declarations/types/utils.d.ts +5 -5
  69. package/declarations/types/utils.d.ts.map +1 -0
  70. package/declarations/types.d.ts +7 -10
  71. package/declarations/types.d.ts.map +1 -0
  72. package/dist/{context-COmAnXUQ.js → context-DE5sFezZ.js} +2 -2
  73. package/dist/context-DE5sFezZ.js.map +1 -0
  74. package/dist/index.js +104 -37
  75. package/dist/index.js.map +1 -0
  76. package/dist/request.js +1 -1
  77. package/dist/request.js.map +1 -0
  78. package/dist/types/-private.js +3 -3
  79. package/dist/types/-private.js.map +1 -0
  80. package/dist/types/cache/aliases.js.map +1 -0
  81. package/dist/types/cache/change.js.map +1 -0
  82. package/dist/types/cache/mutations.js.map +1 -0
  83. package/dist/types/cache/operations.js.map +1 -0
  84. package/dist/types/cache/relationship.js.map +1 -0
  85. package/dist/types/cache.js.map +1 -0
  86. package/dist/types/graph.js.map +1 -0
  87. package/dist/types/identifier.js.map +1 -0
  88. package/dist/types/json/raw.js.map +1 -0
  89. package/dist/types/params.js.map +1 -0
  90. package/dist/types/record.js +1 -1
  91. package/dist/types/record.js.map +1 -0
  92. package/dist/types/request.js +2 -2
  93. package/dist/types/request.js.map +1 -0
  94. package/dist/types/runtime.js +1 -1
  95. package/dist/types/runtime.js.map +1 -0
  96. package/dist/types/schema/concepts.js.map +1 -0
  97. package/dist/types/schema/fields.js +41 -8
  98. package/dist/types/schema/fields.js.map +1 -0
  99. package/dist/types/schema/fields.type-test.js.map +1 -0
  100. package/dist/types/spec/document.js.map +1 -0
  101. package/dist/types/spec/error.js.map +1 -0
  102. package/dist/types/spec/json-api-raw.js.map +1 -0
  103. package/dist/types/symbols.js +3 -3
  104. package/dist/types/symbols.js.map +1 -0
  105. package/dist/types/utils.js.map +1 -0
  106. package/dist/types.js.map +1 -0
  107. package/package.json +8 -11
  108. package/cjs-dist/addon-shim.cjs +0 -1
  109. package/cjs-dist/cjs-set-config.cjs +0 -1
  110. package/declarations/build-config/babel-macros.d.ts +0 -1
  111. package/declarations/build-config/canary-features.d.ts +0 -1
  112. package/declarations/build-config/debugging.d.ts +0 -1
  113. package/declarations/build-config/deprecations.d.ts +0 -1
  114. package/declarations/build-config/env.d.ts +0 -1
  115. package/declarations/build-config/macros.d.ts +0 -1
  116. package/declarations/build-config.d.ts +0 -1
  117. package/declarations/configure.d.ts +0 -7
  118. package/declarations/graph/-private/-diff.d.ts +0 -32
  119. package/declarations/graph/-private/-edge-definition.d.ts +0 -148
  120. package/declarations/graph/-private/-state.d.ts +0 -96
  121. package/declarations/graph/-private/-utils.d.ts +0 -31
  122. package/declarations/graph/-private/coerce-id.d.ts +0 -10
  123. package/declarations/graph/-private/debug/assert-polymorphic-type.d.ts +0 -18
  124. package/declarations/graph/-private/edges/collection.d.ts +0 -39
  125. package/declarations/graph/-private/edges/implicit.d.ts +0 -43
  126. package/declarations/graph/-private/edges/resource.d.ts +0 -24
  127. package/declarations/graph/-private/graph.d.ts +0 -90
  128. package/declarations/graph/-private/normalize-link.d.ts +0 -8
  129. package/declarations/graph/-private/operations/add-to-related-records.d.ts +0 -4
  130. package/declarations/graph/-private/operations/merge-identifier.d.ts +0 -3
  131. package/declarations/graph/-private/operations/remove-from-related-records.d.ts +0 -4
  132. package/declarations/graph/-private/operations/replace-related-record.d.ts +0 -3
  133. package/declarations/graph/-private/operations/replace-related-records.d.ts +0 -62
  134. package/declarations/graph/-private/operations/update-relationship.d.ts +0 -13
  135. package/declarations/graph/-private.d.ts +0 -13
  136. package/declarations/reactive/-private/document.d.ts +0 -146
  137. package/declarations/reactive/-private/fields/compute.d.ts +0 -43
  138. package/declarations/reactive/-private/fields/extension.d.ts +0 -8
  139. package/declarations/reactive/-private/fields/managed-array.d.ts +0 -22
  140. package/declarations/reactive/-private/fields/managed-object.d.ts +0 -21
  141. package/declarations/reactive/-private/fields/many-array-manager.d.ts +0 -19
  142. package/declarations/reactive/-private/hooks.d.ts +0 -5
  143. package/declarations/reactive/-private/record.d.ts +0 -64
  144. package/declarations/reactive/-private/schema.d.ts +0 -271
  145. package/declarations/reactive/-private/symbols.d.ts +0 -36
  146. package/declarations/reactive/-private.d.ts +0 -1
  147. package/declarations/reactive.d.ts +0 -4
  148. package/declarations/store/-private/cache-handler/handler.d.ts +0 -62
  149. package/declarations/store/-private/cache-handler/types.d.ts +0 -98
  150. package/declarations/store/-private/cache-handler/utils.d.ts +0 -32
  151. package/declarations/store/-private/caches/cache-utils.d.ts +0 -12
  152. package/declarations/store/-private/caches/identifier-cache.d.ts +0 -304
  153. package/declarations/store/-private/caches/instance-cache.d.ts +0 -65
  154. package/declarations/store/-private/caches/resource-utils.d.ts +0 -9
  155. package/declarations/store/-private/debug/utils.d.ts +0 -6
  156. package/declarations/store/-private/default-cache-policy.d.ts +0 -384
  157. package/declarations/store/-private/legacy-model-support/record-reference.d.ts +0 -159
  158. package/declarations/store/-private/legacy-model-support/shim-model-class.d.ts +0 -17
  159. package/declarations/store/-private/managers/cache-capabilities-manager.d.ts +0 -25
  160. package/declarations/store/-private/managers/cache-manager.d.ts +0 -443
  161. package/declarations/store/-private/managers/notification-manager.d.ts +0 -98
  162. package/declarations/store/-private/managers/record-array-manager.d.ts +0 -97
  163. package/declarations/store/-private/network/request-cache.d.ts +0 -107
  164. package/declarations/store/-private/new-core-tmp/promise-state.d.ts +0 -263
  165. package/declarations/store/-private/new-core-tmp/reactivity/configure.d.ts +0 -176
  166. package/declarations/store/-private/new-core-tmp/reactivity/internal.d.ts +0 -169
  167. package/declarations/store/-private/new-core-tmp/reactivity/signal.d.ts +0 -35
  168. package/declarations/store/-private/new-core-tmp/request-state.d.ts +0 -277
  169. package/declarations/store/-private/new-core-tmp/request-subscription.d.ts +0 -261
  170. package/declarations/store/-private/record-arrays/identifier-array.d.ts +0 -147
  171. package/declarations/store/-private/record-arrays/many-array.d.ts +0 -197
  172. package/declarations/store/-private/record-arrays/native-proxy-type-fix.d.ts +0 -126
  173. package/declarations/store/-private/store-service.d.ts +0 -1605
  174. package/declarations/store/-private/utils/coerce-id.d.ts +0 -10
  175. package/declarations/store/-private/utils/construct-resource.d.ts +0 -6
  176. package/declarations/store/-private/utils/is-non-empty-string.d.ts +0 -1
  177. package/declarations/store/-private/utils/normalize-model-name.d.ts +0 -1
  178. package/declarations/store/-private/utils/uuid-polyfill.d.ts +0 -1
  179. package/declarations/store/-private.d.ts +0 -31
  180. package/declarations/store/-types/q/cache-capabilities-manager.d.ts +0 -99
  181. package/declarations/store/-types/q/ds-model.d.ts +0 -21
  182. package/declarations/store/-types/q/identifier.d.ts +0 -20
  183. package/declarations/store/-types/q/record-instance.d.ts +0 -23
  184. package/declarations/store/-types/q/schema-service.d.ts +0 -354
  185. package/declarations/store/-types/q/store.d.ts +0 -32
  186. package/declarations/store.d.ts +0 -1
  187. package/declarations/utils/string.d.ts +0 -48
  188. package/dist/build-config/babel-macros.js +0 -1
  189. package/dist/build-config/canary-features.js +0 -1
  190. package/dist/build-config/debugging.js +0 -1
  191. package/dist/build-config/deprecations.js +0 -1
  192. package/dist/build-config/env.js +0 -1
  193. package/dist/build-config/macros.js +0 -1
  194. package/dist/build-config.js +0 -1
  195. package/dist/configure-B48bFHOl.js +0 -181
  196. package/dist/configure.js +0 -1
  197. package/dist/graph/-private.js +0 -3372
  198. package/dist/handler-C2T-IyJK.js +0 -339
  199. package/dist/reactive/-private.js +0 -1
  200. package/dist/reactive.js +0 -1988
  201. package/dist/request-state-CjLph1LP.js +0 -8139
  202. package/dist/store/-private.js +0 -3
  203. package/dist/store.js +0 -545
  204. package/dist/symbols-SIstXMLI.js +0 -44
  205. package/dist/utils/string.js +0 -92
  206. package/logos/NCC-1701-a-blue.svg +0 -4
  207. package/logos/NCC-1701-a-gold.svg +0 -4
  208. package/logos/NCC-1701-a-gold_100.svg +0 -1
  209. package/logos/NCC-1701-a-gold_base-64.txt +0 -1
  210. package/logos/NCC-1701-a.svg +0 -4
  211. package/logos/README.md +0 -4
  212. package/logos/docs-badge.svg +0 -2
  213. package/logos/ember-data-logo-dark.svg +0 -12
  214. package/logos/ember-data-logo-light.svg +0 -12
  215. package/logos/github-header.svg +0 -444
  216. package/logos/social1.png +0 -0
  217. package/logos/social2.png +0 -0
  218. package/logos/warp-drive-logo-dark.svg +0 -4
  219. package/logos/warp-drive-logo-gold.svg +0 -4
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  <h1 align="center">
2
2
  <img
3
- class="project-logo light-only"
4
- src="./logos/github-header.svg#gh-light-mode-only"
3
+ class="project-logo"
4
+ src="https://github.com/emberjs/data/blob/main/logos/github-header.svg#gh-light-mode-only"
5
5
  alt="WarpDrive | Boldly go where no app has gone before"
6
6
  title="WarpDrive | Boldly go where no app has gone before"
7
7
  />
8
8
  <img
9
- class="project-logo dark-only"
10
- src="./logos/github-header.svg#gh-dark-mode-only"
9
+ class="project-logo"
10
+ src="https://github.com/emberjs/data/blob/main/logos/github-header.svg#gh-dark-mode-only"
11
11
  alt="WarpDrive | Boldly go where no app has gone before"
12
12
  title="WarpDrive | Boldly go where no app has gone before"
13
13
  />
@@ -25,9 +25,8 @@
25
25
  <a href="https://warp-drive.io">WarpDrive</a> is a lightweight data library for web apps &mdash;
26
26
  <br>
27
27
  universal, typed, reactive, and ready to scale.
28
- <br>
29
- <br>
30
- </p>
28
+ <br/><br/>
29
+ <p>
31
30
 
32
31
  WarpDrive provides features that make it easy to build scalable, fast, feature
33
32
  rich application &mdash; letting you ship better experiences more quickly without re-architecting your app or API. WarpDrive is:
@@ -54,7 +53,7 @@ rich application &mdash; letting you ship better experiences more quickly withou
54
53
  ## Installation
55
54
 
56
55
  ```sh
57
- pnpm add -E @warp-drive/core@latest
56
+ pnpm add @warp-drive/core
58
57
  ```
59
58
 
60
59
  <br>
@@ -1,14 +1,3 @@
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";
1
+ export { Fetch } from './request/-private/fetch.ts';
2
+ export { RequestManager } from './request/-private/manager.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,41 +1,42 @@
1
- import type { StableDocumentIdentifier } from "../../types/identifier.js";
2
- import type { ImmutableHeaders, ImmutableRequestInfo, RequestInfo, ResponseInfo } from "../../types/request.js";
3
- import type { DeferredStream, GodContext } from "./types.js";
1
+ import type { StableDocumentIdentifier } from '../../types/identifier';
2
+ import type { ImmutableHeaders, ImmutableRequestInfo, RequestInfo, ResponseInfo } from '../../types/request';
3
+ import type { DeferredStream, GodContext } from './types';
4
4
  export declare function upgradeHeaders(headers: Headers | ImmutableHeaders): ImmutableHeaders;
5
5
  export declare function cloneResponseProperties(response: Response): ResponseInfo;
6
6
  export declare class ContextOwner {
7
- hasSetStream: boolean;
8
- hasSetResponse: boolean;
9
- hasSubscribers: boolean;
10
- stream: DeferredStream;
11
- response: ResponseInfo | null;
12
- request: ImmutableRequestInfo;
13
- enhancedRequest: ImmutableRequestInfo;
14
- nextCalled: number;
15
- god: GodContext;
16
- controller: AbortController;
17
- requestId: number;
18
- isRoot: boolean;
19
- constructor(request: RequestInfo, god: GodContext, isRoot?: boolean);
20
- get hasRequestedStream(): boolean;
21
- getResponse(): ResponseInfo | null;
22
- getStream(): Promise<ReadableStream | null>;
23
- abort(reason: DOMException): void;
24
- setStream(stream: ReadableStream | Promise<ReadableStream | null> | null): void;
25
- resolveStream(): void;
26
- setResponse(response: ResponseInfo | Response | null): void;
7
+ hasSetStream: boolean;
8
+ hasSetResponse: boolean;
9
+ hasSubscribers: boolean;
10
+ stream: DeferredStream;
11
+ response: ResponseInfo | null;
12
+ request: ImmutableRequestInfo;
13
+ enhancedRequest: ImmutableRequestInfo;
14
+ nextCalled: number;
15
+ god: GodContext;
16
+ controller: AbortController;
17
+ requestId: number;
18
+ isRoot: boolean;
19
+ constructor(request: RequestInfo, god: GodContext, isRoot?: boolean);
20
+ get hasRequestedStream(): boolean;
21
+ getResponse(): ResponseInfo | null;
22
+ getStream(): Promise<ReadableStream | null>;
23
+ abort(reason: DOMException): void;
24
+ setStream(stream: ReadableStream | Promise<ReadableStream | null> | null): void;
25
+ resolveStream(): void;
26
+ setResponse(response: ResponseInfo | Response | null): void;
27
27
  }
28
28
  export declare class Context {
29
- #private;
30
- request: ImmutableRequestInfo;
31
- id: number;
32
- private _isCacheHandler;
33
- private _finalized;
34
- constructor(owner: ContextOwner, isCacheHandler: boolean);
35
- setStream(stream: ReadableStream | Promise<ReadableStream | null>): void;
36
- setResponse(response: ResponseInfo | Response | null): void;
37
- setIdentifier(identifier: StableDocumentIdentifier): void;
38
- get hasRequestedStream(): boolean;
39
- _finalize(): void;
29
+ #private;
30
+ request: ImmutableRequestInfo;
31
+ id: number;
32
+ private _isCacheHandler;
33
+ private _finalized;
34
+ constructor(owner: ContextOwner, isCacheHandler: boolean);
35
+ setStream(stream: ReadableStream | Promise<ReadableStream | null>): void;
36
+ setResponse(response: ResponseInfo | Response | null): void;
37
+ setIdentifier(identifier: StableDocumentIdentifier): void;
38
+ get hasRequestedStream(): boolean;
39
+ _finalize(): void;
40
40
  }
41
41
  export type HandlerRequestContext = Context;
42
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/request/-private/context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAI7G,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1D,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAQpF;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAYxE;AAED,qBAAa,YAAY;IACvB,YAAY,UAAS;IACrB,cAAc,UAAS;IACvB,cAAc,UAAS;IACvB,MAAM,EAAE,cAAc,CAA2C;IACjE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAQ;IAC7B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,eAAe,EAAE,oBAAoB,CAAC;IAC9C,UAAU,SAAK;IACP,GAAG,EAAE,UAAU,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;gBAEZ,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,UAAQ;IAuCjE,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,WAAW,IAAI,YAAY,GAAG,IAAI;IASlC,SAAS,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAW3C,KAAK,CAAC,MAAM,EAAE,YAAY;IAI1B,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,IAAI;IAYxE,aAAa;IAIb,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,IAAI;CAwBrD;AAED,qBAAa,OAAO;;IAEV,OAAO,EAAE,oBAAoB,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;IACnB,QAAgB,eAAe,CAAU;IACzC,QAAgB,UAAU,CAAU;gBAExB,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO;IAOxD,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAGjE,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,IAAI;IAIpD,aAAa,CAAC,UAAU,EAAE,wBAAwB;IAQlD,IAAI,kBAAkB,YAErB;IAED,SAAS;CAGV;AACD,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { RequestInfo } from "../../types/request.js";
2
- import { Context } from "./context.js";
1
+ import type { RequestInfo } from '../../types/request';
2
+ import { Context } from './context';
3
3
  export declare function deepFreeze<T = unknown>(value: T): T;
4
4
  export declare function assertValidRequest(request: RequestInfo | Context, isTopLevel: boolean): asserts request is RequestInfo;
5
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../src/request/-private/debug.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAmFpD,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAuDnD;AAmJD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,GAAG,OAAO,EAC9B,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,OAAO,IAAI,WAAW,CA8DhC"}
@@ -1,31 +1,43 @@
1
- import { type Context } from "./context.js";
1
+ /**
2
+ * A basic Fetch Handler which converts a request into a
3
+ * `fetch` call presuming the response to be `json`.
4
+ *
5
+ * ```ts
6
+ * import Fetch from '@ember-data/request/fetch';
7
+ *
8
+ * manager.use([Fetch]);
9
+ * ```
10
+ *
11
+ * @module
12
+ */
13
+ import { type Context } from './context';
2
14
  interface FastbootRequest extends Request {
3
- protocol: string;
4
- host: string;
15
+ protocol: string;
16
+ host: string;
17
+ }
18
+ interface FastBoot {
19
+ require(moduleName: string): unknown;
20
+ isFastBoot: boolean;
21
+ request: FastbootRequest;
5
22
  }
6
- export interface FastBoot {
7
- require(moduleName: string): unknown;
8
- isFastBoot: boolean;
9
- request: FastbootRequest;
23
+ declare global {
24
+ const FastBoot: undefined | FastBoot;
10
25
  }
11
26
  /**
12
- * ```ts
13
- * import { Fetch } from '@warp-drive/core';
14
- * ```
15
- *
16
- * A basic Fetch Handler which converts a request into a
17
- * `fetch` call presuming the response to be `json`.
18
- *
19
- * ```ts
20
- * import { RequestManager, Fetch } from '@warp-drive/core';
21
- *
22
- * const manager = new RequestManager()
23
- * .use([Fetch]);
24
- * ```
25
- *
26
- * @public
27
- */
27
+ * A basic handler which converts a request into a
28
+ * `fetch` call presuming the response to be `json`.
29
+ *
30
+ * ```ts
31
+ * import Fetch from '@ember-data/request/fetch';
32
+ *
33
+ * manager.use([Fetch]);
34
+ * ```
35
+ *
36
+ * @class Fetch
37
+ * @public
38
+ */
28
39
  declare const Fetch: {
29
- request<T>(context: Context): Promise<T>;
40
+ request<T>(context: Context): Promise<T>;
30
41
  };
31
42
  export { Fetch };
43
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/request/-private/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAGlE,UAAU,eAAgB,SAAQ,OAAO;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AACD,UAAU,QAAQ;IAChB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,MAAM,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;CACtC;AA6ED;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,KAAK;YACK,CAAC,WAAW,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAoJ/C,CAAC;AAMF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -1,7 +1,8 @@
1
- import { type StructuredDocument } from "../../types/request.js";
2
- import type { ContextOwner } from "./context.js";
3
- import type { Deferred, DeferredFuture, Future } from "./types.js";
1
+ import { type StructuredDocument } from '../../types/request';
2
+ import type { ContextOwner } from './context';
3
+ import type { Deferred, DeferredFuture, Future } from './types';
4
4
  export declare function isFuture<T>(maybe: unknown): maybe is Future<T>;
5
5
  export declare function createDeferred<T>(): Deferred<T>;
6
6
  export declare function upgradePromise<T>(promise: Promise<StructuredDocument<T>>, future: Future<T>): Future<T>;
7
7
  export declare function createFuture<T>(owner: ContextOwner): DeferredFuture<T>;
8
+ //# sourceMappingURL=future.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"future.d.ts","sourceRoot":"","sources":["../../../src/request/-private/future.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGhE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAE9D;AAED,wBAAgB,cAAc,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAQ/C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAYvG;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CA0BtE"}
@@ -1,162 +1,135 @@
1
- import type { StableDocumentIdentifier } from "../../types/identifier.js";
2
- import type { RequestInfo } from "../../types/request.js";
3
- import type { CacheHandler, Future, GenericCreateArgs, Handler, ManagedRequestPriority } from "./types.js";
4
- import { IS_CACHE_HANDLER } from "./utils.js";
1
+ import type { StableDocumentIdentifier } from '../../types/identifier';
2
+ import type { RequestInfo } from '../../types/request';
3
+ import type { CacheHandler, Future, GenericCreateArgs, Handler, ManagedRequestPriority } from './types';
4
+ import { IS_CACHE_HANDLER } from './utils';
5
5
  /**
6
- * ## Import
7
- *
8
- * ```js
9
- * import { RequestManager } from '@warp-drive/core';
10
- * ```
11
- *
12
- * For complete usage guide see the [RequestManager Documentation](/guides/).
13
- *
14
- * ## How It Works
15
- *
16
- * ```ts
17
- * interface RequestManager {
18
- * request<T>(req: RequestInfo): Future<T>;
19
- * }
20
- * ```
21
- *
22
- * A RequestManager provides a request/response flow in which configured
23
- * handlers are successively given the opportunity to handle, modify, or
24
- * pass-along a request.
25
- *
26
- * <img src="/images/handlers-all-labeled.gif" alt="RequestManager Flow Animation" width="100%" />
27
- *
28
- * For example:
29
- *
30
- * ::: code-group
31
- *
32
- * ```ts [Setup.ts]
33
- * import { RequestManager, Fetch } from '@warp-drive/core';
34
- * import { AutoCompress } from '@warp-drive/utilities/handlers';
35
- * import Auth from 'ember-simple-auth/handler';
36
- *
37
- * // ... create manager
38
- * const manager = new RequestManager()
39
- * .use([Auth, new AutoCompress(), Fetch]); // [!code focus]
40
- * ```
41
- *
42
- * ```ts [Usage.ts]
43
- * import Config from './config';
44
- *
45
- * const { apiUrl } = Config;
46
- *
47
- * // ... execute a request
48
- * const response = await manager.request({
49
- * url: `${apiUrl}/users`
50
- * });
51
- * ```
52
- *
53
- * :::
54
- *
55
- * ### Futures
56
- *
57
- * The return value of `manager.request` is a `Future`, which allows
58
- * access to limited information about the request while it is still
59
- * pending and fulfills with the final state when the request completes.
60
- *
61
- * A `Future` is cancellable via `abort`.
62
- *
63
- * Handlers may optionally expose a `ReadableStream` to the `Future` for
64
- * streaming data; however, when doing so the future should not resolve
65
- * until the response stream is fully read.
66
- *
67
- * ```ts
68
- * interface Future<T> extends Promise<StructuredDocument<T>> {
69
- * abort(): void;
70
- *
71
- * async getStream(): ReadableStream | null;
72
- * }
73
- * ```
74
- *
75
- * ### StructuredDocuments
76
- *
77
- * A Future resolves with a `StructuredDataDocument` or rejects with a `StructuredErrorDocument`.
78
- *
79
- * ```ts
80
- * interface StructuredDataDocument<T> {
81
- * request: ImmutableRequestInfo;
82
- * response: ImmutableResponseInfo;
83
- * content: T;
84
- * }
85
- * interface StructuredErrorDocument extends Error {
86
- * request: ImmutableRequestInfo;
87
- * response: ImmutableResponseInfo;
88
- * error: string | object;
89
- * }
90
- * type StructuredDocument<T> = StructuredDataDocument<T> | StructuredErrorDocument;
91
- * ```
92
- *
93
- * @class RequestManager
94
- * @public
95
- */
6
+ * ```js
7
+ * import RequestManager from '@ember-data/request';
8
+ * ```
9
+ *
10
+ * A RequestManager provides a request/response flow in which configured
11
+ * handlers are successively given the opportunity to handle, modify, or
12
+ * pass-along a request.
13
+ *
14
+ * ```ts
15
+ * interface RequestManager {
16
+ * request<T>(req: RequestInfo): Future<T>;
17
+ * }
18
+ * ```
19
+ *
20
+ * For example:
21
+ *
22
+ * ```ts
23
+ * import RequestManager from '@ember-data/request';
24
+ * import Fetch from '@ember-data/request/fetch';
25
+ * import Auth from 'ember-simple-auth/ember-data-handler';
26
+ * import Config from './config';
27
+ *
28
+ * const { apiUrl } = Config;
29
+ *
30
+ * // ... create manager
31
+ * const manager = new RequestManager().use([Auth, Fetch]);
32
+ *
33
+ * // ... execute a request
34
+ * const response = await manager.request({
35
+ * url: `${apiUrl}/users`
36
+ * });
37
+ * ```
38
+ *
39
+ * ### Futures
40
+ *
41
+ * The return value of `manager.request` is a `Future`, which allows
42
+ * access to limited information about the request while it is still
43
+ * pending and fulfills with the final state when the request completes.
44
+ *
45
+ * A `Future` is cancellable via `abort`.
46
+ *
47
+ * Handlers may optionally expose a `ReadableStream` to the `Future` for
48
+ * streaming data; however, when doing so the future should not resolve
49
+ * until the response stream is fully read.
50
+ *
51
+ * ```ts
52
+ * interface Future<T> extends Promise<StructuredDocument<T>> {
53
+ * abort(): void;
54
+ *
55
+ * async getStream(): ReadableStream | null;
56
+ * }
57
+ * ```
58
+ *
59
+ * ### StructuredDocuments
60
+ *
61
+ * A Future resolves with a `StructuredDataDocument` or rejects with a `StructuredErrorDocument`.
62
+ *
63
+ * ```ts
64
+ * interface StructuredDataDocument<T> {
65
+ * request: ImmutableRequestInfo;
66
+ * response: ImmutableResponseInfo;
67
+ * content: T;
68
+ * }
69
+ * interface StructuredErrorDocument extends Error {
70
+ * request: ImmutableRequestInfo;
71
+ * response: ImmutableResponseInfo;
72
+ * error: string | object;
73
+ * }
74
+ * type StructuredDocument<T> = StructuredDataDocument<T> | StructuredErrorDocument;
75
+ * ```
76
+ *
77
+ * @class RequestManager
78
+ * @public
79
+ */
96
80
  export declare class RequestManager {
97
- #private;
98
- /** @internal */
99
- _hasCacheHandler: boolean;
100
- /**
101
- * A map of pending requests from request.id to their
102
- * associated CacheHandler promise.
103
- *
104
- * This queue is managed by the CacheHandler
105
- *
106
- * @internal
107
- */
108
- _pending: Map<number, Promise<unknown>>;
109
- /** @internal */
110
- _deduped: Map<StableDocumentIdentifier, {
111
- priority: ManagedRequestPriority;
112
- promise: Promise<unknown>;
113
- }>;
114
- constructor(options?: GenericCreateArgs);
115
- /**
116
- * Register a handler to use for primary cache intercept.
117
- *
118
- * Only one such handler may exist. If using the same
119
- * RequestManager as the Store instance the Store
120
- * registers itself as a Cache handler.
121
- *
122
- * @public
123
- */
124
- useCache(cacheHandler: CacheHandler & {
125
- [IS_CACHE_HANDLER]?: true;
126
- }): this;
127
- /**
128
- * Register handler(s) to use when a request is issued.
129
- *
130
- * Handlers will be invoked in the order they are registered.
131
- * Each Handler is given the opportunity to handle the request,
132
- * curry the request, or pass along a modified request.
133
- *
134
- * @public
135
- * @param {Handler[]} newHandlers
136
- * @return {ThisType}
137
- */
138
- use(newHandlers: Handler[]): this;
139
- /**
140
- * Issue a Request.
141
- *
142
- * Returns a Future that fulfills with a StructuredDocument
143
- *
144
- * @public
145
- * @param {RequestInfo} request
146
- * @return {Future}
147
- */
148
- request<
149
- RT,
150
- T = unknown
151
- >(request: RequestInfo<RT, T>): Future<RT>;
152
- /**
153
- * This method exists so that the RequestManager can be created
154
- * can be created by container/factory systems that expect to
155
- * call a static `create` method to instantiate the class.
156
- *
157
- * Using `new RequestManager()` directly is preferred.
158
- *
159
- * @private
160
- */
161
- static create(options?: GenericCreateArgs): RequestManager;
81
+ #private;
82
+ _hasCacheHandler: boolean;
83
+ /**
84
+ * A map of pending requests from request.id to their
85
+ * associated CacheHandler promise.
86
+ *
87
+ * This queue is managed by the CacheHandler
88
+ *
89
+ * @internal
90
+ */
91
+ _pending: Map<number, Promise<unknown>>;
92
+ _deduped: Map<StableDocumentIdentifier, {
93
+ priority: ManagedRequestPriority;
94
+ promise: Promise<unknown>;
95
+ }>;
96
+ constructor(options?: GenericCreateArgs);
97
+ /**
98
+ * Register a handler to use for primary cache intercept.
99
+ *
100
+ * Only one such handler may exist. If using the same
101
+ * RequestManager as the Store instance the Store
102
+ * registers itself as a Cache handler.
103
+ *
104
+ * @public
105
+ * @param {Handler[]} cacheHandler
106
+ * @return {ThisType}
107
+ */
108
+ useCache(cacheHandler: CacheHandler & {
109
+ [IS_CACHE_HANDLER]?: true;
110
+ }): this;
111
+ /**
112
+ * Register handler(s) to use when a request is issued.
113
+ *
114
+ * Handlers will be invoked in the order they are registered.
115
+ * Each Handler is given the opportunity to handle the request,
116
+ * curry the request, or pass along a modified request.
117
+ *
118
+ * @public
119
+ * @param {Handler[]} newHandlers
120
+ * @return {ThisType}
121
+ */
122
+ use(newHandlers: Handler[]): this;
123
+ /**
124
+ * Issue a Request.
125
+ *
126
+ * Returns a Future that fulfills with a StructuredDocument
127
+ *
128
+ * @public
129
+ * @param {RequestInfo} request
130
+ * @return {Future}
131
+ */
132
+ request<RT, T = unknown>(request: RequestInfo<RT, T>): Future<RT>;
133
+ static create(options?: GenericCreateArgs): RequestManager;
162
134
  }
135
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/request/-private/manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAA2B,MAAM,qBAAqB,CAAC;AAIhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACxG,OAAO,EAAsB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,qBAAa,cAAc;;IAEjB,gBAAgB,EAAE,OAAO,CAAC;IAClC;;;;;;;OAOG;IACK,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,QAAQ,EAAE,GAAG,CAAC,wBAAwB,EAAE;QAAE,QAAQ,EAAE,sBAAsB,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;gBAErG,OAAO,CAAC,EAAE,iBAAiB;IAMvC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG;QAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI;IAiB1E;;;;;;;;;;OAUG;IACH,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI;IAuBjC;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IA0FjE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,iBAAiB;CAG1C"}
@@ -1,28 +1,20 @@
1
- export type CacheResult<
2
- T = unknown,
3
- E = unknown
4
- > = {
5
- isError: true;
6
- result: E;
1
+ export type CacheResult<T = unknown, E = unknown> = {
2
+ isError: true;
3
+ result: E;
7
4
  } | {
8
- isError: false;
9
- result: T;
5
+ isError: false;
6
+ result: T;
10
7
  };
11
- export type Awaitable<
12
- T = unknown,
13
- E = unknown
14
- > = {
15
- then: (onFulfilled: (value: T) => unknown, onRejected: (reason: E) => unknown) => unknown;
16
- catch: (onRejected: (reason: E) => unknown) => unknown;
17
- finally: (onFinally: () => unknown) => unknown;
8
+ export type Awaitable<T = unknown, E = unknown> = {
9
+ then: (onFulfilled: (value: T) => unknown, onRejected: (reason: E) => unknown) => unknown;
10
+ catch: (onRejected: (reason: E) => unknown) => unknown;
11
+ finally: (onFinally: () => unknown) => unknown;
18
12
  };
19
- export declare const PromiseCache: WeakMap<Awaitable, CacheResult>;
20
- export declare const RequestMap: Map<number, CacheResult>;
13
+ export declare const PromiseCache: WeakMap<Awaitable<unknown, unknown>, CacheResult<unknown, unknown>>;
14
+ export declare const RequestMap: Map<number, CacheResult<unknown, unknown>>;
21
15
  export declare function setRequestResult(requestId: number, result: CacheResult): void;
22
16
  export declare function clearRequestResult(requestId: number): void;
23
17
  export declare function getRequestResult(requestId: number): CacheResult | undefined;
24
18
  export declare function setPromiseResult(promise: Promise<unknown> | Awaitable, result: CacheResult): void;
25
- export declare function getPromiseResult<
26
- T,
27
- E
28
- >(promise: Promise<T> | Awaitable<T, E>): CacheResult<T, E> | undefined;
19
+ export declare function getPromiseResult<T, E>(promise: Promise<T> | Awaitable<T, E>): CacheResult<T, E> | undefined;
20
+ //# sourceMappingURL=promise-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-cache.d.ts","sourceRoot":"","sources":["../../../src/request/-private/promise-cache.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC;AAEjH,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI;IAChD,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC;IAC1F,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC;IACvD,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC;CAChD,CAAC;AAEF,eAAO,MAAM,YAAY,qEAA2E,CAAC;AACrG,eAAO,MAAM,UAAU,4CAAkE,CAAC;AAE1F,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,QAEtE;AACD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,QAEnD;AACD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE3E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,WAAW,QAE1F;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAE3G"}