@cardstack/boxel-cli 0.13.0-unstable.4 → 0.13.0-unstable.6

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 (1058) hide show
  1. package/bundled-realms/pretui/components/doc-report.gts +2 -2
  2. package/bundled-realms/pretui/components/doc-report.usage.gts +3 -3
  3. package/bundled-realms/pretui/components/form-field.md +1 -1
  4. package/bundled-realms/pretui/components/icon-button.md +1 -1
  5. package/bundled-realms/pretui/components/popup.md +1 -1
  6. package/bundled-realms/pretui/components/switch.gts +13 -0
  7. package/bundled-realms/pretui/components/switch.md +5 -3
  8. package/bundled-realms/pretui/components/theme-frame.gts +49 -22
  9. package/bundled-realms/pretui/components/tooltip.gts +141 -42
  10. package/bundled-realms/pretui/components/tooltip.md +10 -12
  11. package/bundled-realms/pretui/components/tooltip.usage.gts +3 -5
  12. package/bundled-realms/pretui/docs/structure.md +1 -1
  13. package/bundled-realms/pretui/internal/overlay.gts +4 -2
  14. package/bundled-realms/pretui/pretui-css.gts +6 -2
  15. package/bundled-realms/pretui/theme-scoped-css.gts +262 -0
  16. package/bundled-test-harness/assets/account-switch-failed-test-DwAZq6Sc.js +45 -0
  17. package/bundled-test-harness/assets/adapter-C_6pnsx1.js +2 -0
  18. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-zMYtJWBv.js +112 -0
  19. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-CwhAV-Ow.js +130 -0
  20. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DNgclkGJ.js +46 -0
  21. package/bundled-test-harness/assets/ai-assistant-test-DGYFiRTb.js +2223 -0
  22. package/bundled-test-harness/assets/ai-function-generation-test-Dj6WzKkh.js +1176 -0
  23. package/bundled-test-harness/assets/ai-module-creation-test-C4zhhxaZ.js +151 -0
  24. package/bundled-test-harness/assets/aibot-message-BShcljQ9.js +1312 -0
  25. package/bundled-test-harness/assets/app-DiEYqT6T.js +14146 -0
  26. package/bundled-test-harness/assets/apply-markdown-edit-test-CPhfeg1i.js +230 -0
  27. package/bundled-test-harness/assets/ask-user-picker-NVRkhKwt.js +370 -0
  28. package/bundled-test-harness/assets/ask-user-picker-test-SsZqFm9W.js +39 -0
  29. package/bundled-test-harness/assets/assistant-transcript-test-DesuBCIB.js +57 -0
  30. package/bundled-test-harness/assets/audio-metadata-extractor-test-8JM6oZXG.js +1176 -0
  31. package/bundled-test-harness/assets/authed-fetch-test-yPTMe-9V.js +73 -0
  32. package/bundled-test-harness/assets/avif-image-def-test-Kyknj908.js +187 -0
  33. package/bundled-test-harness/assets/basic-test-D9OrrMaq.js +139 -0
  34. package/bundled-test-harness/assets/binary-upload-dedupe-test-C0RFmHma.js +308 -0
  35. package/bundled-test-harness/assets/bot-registration-test-Bk2lTaCW.js +97 -0
  36. package/bundled-test-harness/assets/box-test-BbV9sMyU.js +50 -0
  37. package/bundled-test-harness/assets/brand-guide-attachments-test-z4wTsKbI.js +84 -0
  38. package/bundled-test-harness/assets/brand-guide-custom-css-test-BlSJE8xo.js +196 -0
  39. package/bundled-test-harness/assets/brand-guide-edit-test-DJ1OQ6IB.js +140 -0
  40. package/bundled-test-harness/assets/brand-logo-mark-field-test-ux7eetkO.js +86 -0
  41. package/bundled-test-harness/assets/broken-link-template-test-CqB3MWyw.js +192 -0
  42. package/bundled-test-harness/assets/bundled-base-modules-test-B2oNLZSJ.js +54 -0
  43. package/bundled-test-harness/assets/bundled-base-oracle-test-DelPfFjn.js +37 -0
  44. package/bundled-test-harness/assets/buried-stack-item-scroll-test-Ixsl1tS0.js +236 -0
  45. package/bundled-test-harness/assets/button-BvYQm_A1.js +141 -0
  46. package/bundled-test-harness/assets/bxl-cyclic-graph-test-p23WCLRW.js +47 -0
  47. package/bundled-test-harness/assets/bxl-expression-test-CVTQYT_C.js +250 -0
  48. package/bundled-test-harness/assets/bxl-indexing-test-D_A7X2sr.js +212 -0
  49. package/bundled-test-harness/assets/bxl-platform-module-test-Cltfyybp.js +71 -0
  50. package/bundled-test-harness/assets/can-invoke-test-CVfE1l1V.js +455 -0
  51. package/bundled-test-harness/assets/can-read-realm-test-CIz6WX_K.js +56 -0
  52. package/bundled-test-harness/assets/cancel-indexing-job-test-0LlrOgYK.js +69 -0
  53. package/bundled-test-harness/assets/capture-test-diHIWmh0.js +360 -0
  54. package/bundled-test-harness/assets/card-api-test-Ci9b0ghP.js +198 -0
  55. package/bundled-test-harness/assets/card-basics-test-RKQoQWZD.js +5364 -0
  56. package/bundled-test-harness/assets/card-chooser-paging-test-BN21sDpP.js +235 -0
  57. package/bundled-test-harness/assets/card-chooser-test-C9jDiIgM.js +393 -0
  58. package/bundled-test-harness/assets/card-context-search-results-KmkXJbmC.js +30 -0
  59. package/bundled-test-harness/assets/card-context-search-results-test-CpMr8OlX.js +184 -0
  60. package/bundled-test-harness/assets/card-def-field-def-relationships-test-D_30xak6.js +562 -0
  61. package/bundled-test-harness/assets/card-def-menu-items-test-ohuHc0b4.js +228 -0
  62. package/bundled-test-harness/assets/card-delete-test-BlsD9Xw4.js +466 -0
  63. package/bundled-test-harness/assets/card-error-3q1o3i0e.js +72 -0
  64. package/bundled-test-harness/assets/card-error-awaiting-index-test-DPgYKfbF.js +53 -0
  65. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-CVfeJyjt.js +219 -0
  66. package/bundled-test-harness/assets/card-playground-test-D-7bi4PQ.js +1491 -0
  67. package/bundled-test-harness/assets/card-prerender-DemTfK_a.js +12939 -0
  68. package/bundled-test-harness/assets/card-thunk-error-test-DCBh1vRT.js +48 -0
  69. package/bundled-test-harness/assets/card-type-service-test-DXPrfVYk.js +161 -0
  70. package/bundled-test-harness/assets/check-correctness-test-DjE7r1X2.js +1093 -0
  71. package/bundled-test-harness/assets/check-domain-availability-test-U10xSKbY.js +98 -0
  72. package/bundled-test-harness/assets/chip-0r_r9SC8.js +44 -0
  73. package/bundled-test-harness/assets/choreo-CZUXQKjf.js +1110 -0
  74. package/bundled-test-harness/assets/choreo-D8RcLuoq.js +2 -0
  75. package/bundled-test-harness/assets/choreo-feature-reel-test-DRGloCAJ.js +155 -0
  76. package/bundled-test-harness/assets/choreo-gallery-build-order-test-BR-r7gaw.js +436 -0
  77. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CWRLfcNT.js +399 -0
  78. package/bundled-test-harness/assets/choreo-gallery-cover-test-BT05gNKC.js +214 -0
  79. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-WJ7FmjYi.js +133 -0
  80. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-C-yxdVT_.js +42 -0
  81. package/bundled-test-harness/assets/choreo-gallery-drift-test-HX1mK3od.js +620 -0
  82. package/bundled-test-harness/assets/choreo-gallery-escort-test-jZEVk_V4.js +187 -0
  83. package/bundled-test-harness/assets/choreo-gallery-films-test-DLDQzsxb.js +140 -0
  84. package/bundled-test-harness/assets/choreo-gallery-filter-test-BJv8KEeP.js +46 -0
  85. package/bundled-test-harness/assets/choreo-gallery-fold-test-BssKC8A8.js +180 -0
  86. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-DS41eNNV.js +114 -0
  87. package/bundled-test-harness/assets/choreo-gallery-guides-test-DTj7yEKp.js +321 -0
  88. package/bundled-test-harness/assets/choreo-gallery-hang-test-BqJLmeFF.js +426 -0
  89. package/bundled-test-harness/assets/choreo-gallery-highlight-test-B1Q7-ICm.js +60 -0
  90. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-7My9lVam.js +370 -0
  91. package/bundled-test-harness/assets/choreo-gallery-interruption-test-BlIAaGrw.js +176 -0
  92. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-C9NnYIP8.js +104 -0
  93. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CWzXkvbW.js +193 -0
  94. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-CwdiZWeI.js +111 -0
  95. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-D55fxwTn.js +127 -0
  96. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-D8Wxv0lb.js +100 -0
  97. package/bundled-test-harness/assets/choreo-gallery-presentation-test-BLoWfp6G.js +157 -0
  98. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-D5XxTBDS.js +145 -0
  99. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-DrHTTvss.js +89 -0
  100. package/bundled-test-harness/assets/choreo-gallery-sheet-test-BFVdnM_b.js +48 -0
  101. package/bundled-test-harness/assets/choreo-gallery-site-test-BhEBHdvI.js +237 -0
  102. package/bundled-test-harness/assets/choreo-gallery-stage-DcKKsdcu.js +256 -0
  103. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-Fcc6SC3F.js +102 -0
  104. package/bundled-test-harness/assets/choreo-gallery-stages-test-Cb-ADpxK.js +35 -0
  105. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-DMJ6C9FW.js +138 -0
  106. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CAjSUdLJ.js +144 -0
  107. package/bundled-test-harness/assets/choreo-gallery-theater-test-B-3IZMj9.js +252 -0
  108. package/bundled-test-harness/assets/choreo-gallery-tuning-test-BVxK5Ry_.js +95 -0
  109. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-uWBH1EKE.js +88 -0
  110. package/bundled-test-harness/assets/choreo-gallery-wires-test-Bo4Sd1Vn.js +148 -0
  111. package/bundled-test-harness/assets/client-telemetry-test-DFM4mML2.js +340 -0
  112. package/bundled-test-harness/assets/clip-DY6N6K67.js +92 -0
  113. package/bundled-test-harness/assets/clip-DzXoPdp-.js +2 -0
  114. package/bundled-test-harness/assets/code-block-DRE8KQZQ.js +502 -0
  115. package/bundled-test-harness/assets/code-ref-test-CDcqE8_C.js +163 -0
  116. package/bundled-test-harness/assets/code-submode-availability-test-DPTqZYYm.js +198 -0
  117. package/bundled-test-harness/assets/code-submode-test-AHV4mzJ4.js +1839 -0
  118. package/bundled-test-harness/assets/codeblocks-test-D6ijVvEL.js +418 -0
  119. package/bundled-test-harness/assets/codemirror-editor-test-BeAMVivu.js +1512 -0
  120. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bnb7_KUT.js +366 -0
  121. package/bundled-test-harness/assets/color-field-test-CR6gGEqE.js +212 -0
  122. package/bundled-test-harness/assets/compaction-test-CjEsY0uG.js +150 -0
  123. package/bundled-test-harness/assets/computed-test-DtyZGgdc.js +1320 -0
  124. package/bundled-test-harness/assets/container-BYGZImLU.css +5101 -0
  125. package/bundled-test-harness/assets/container-CBZZ8uFw.js +10925 -0
  126. package/bundled-test-harness/assets/content-preview-components-test-BztI4fz-.js +462 -0
  127. package/bundled-test-harness/assets/copy-and-edit-test-Cqw7kcur.js +292 -0
  128. package/bundled-test-harness/assets/copy-card-test-D5m3eVEH.js +218 -0
  129. package/bundled-test-harness/assets/copy-file-to-realm-test-FPY-6Ddm.js +148 -0
  130. package/bundled-test-harness/assets/copy-source-test-9pJD-qey.js +56 -0
  131. package/bundled-test-harness/assets/create-file-test-DjMf88u_.js +1086 -0
  132. package/bundled-test-harness/assets/create-file-test-XbgOqg38.js +464 -0
  133. package/bundled-test-harness/assets/create-listing-modal-test-De7b4vu3.js +273 -0
  134. package/bundled-test-harness/assets/create-listing-pr-request-test-CBtIV0Z8.js +117 -0
  135. package/bundled-test-harness/assets/create-spec-test-4xR0gM7E.js +256 -0
  136. package/bundled-test-harness/assets/create-submission-workflow-test-DQpWrpGT.js +132 -0
  137. package/bundled-test-harness/assets/create-workspace-test-BQAudgpS.js +104 -0
  138. package/bundled-test-harness/assets/credential-fields-test-DXKBdbZD.js +200 -0
  139. package/bundled-test-harness/assets/csv-file-def-test-Cnp4y834.js +102 -0
  140. package/bundled-test-harness/assets/dashboard-CmuOhIYC.js +3628 -0
  141. package/bundled-test-harness/assets/dashboard-CzN49x74.css +2400 -0
  142. package/bundled-test-harness/assets/dashboard-add-workspace-test-T32hWB-g.js +50 -0
  143. package/bundled-test-harness/assets/dashboard-agents-test-BN5maCgQ.js +334 -0
  144. package/bundled-test-harness/assets/dashboard-archive-test-BzwUte_Z.js +128 -0
  145. package/bundled-test-harness/assets/dashboard-delete-test-D2Gcp81V.js +163 -0
  146. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-BgKNIr35.js +71 -0
  147. package/bundled-test-harness/assets/dashboard-duplicate-test-D7JEWylc.js +222 -0
  148. package/bundled-test-harness/assets/dashboard-get-started-test-DOGPzGoA.js +374 -0
  149. package/bundled-test-harness/assets/dashboard-ir2bakJS.js +142 -0
  150. package/bundled-test-harness/assets/dashboard-pinned-cards-test-Bn_P9xJU.js +220 -0
  151. package/bundled-test-harness/assets/dashboard-publish-test-64sGQ0nG.js +70 -0
  152. package/bundled-test-harness/assets/dashboard-reindex-test-DJjYq1ct.js +115 -0
  153. package/bundled-test-harness/assets/dashboard-section-rail-test-ZkAhWu5V.js +169 -0
  154. package/bundled-test-harness/assets/dashboard-state-test-BbkpPB5L.js +162 -0
  155. package/bundled-test-harness/assets/dashboard-test-CBLdPrSt.js +545 -0
  156. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DFT3R1Zx.js +62 -0
  157. package/bundled-test-harness/assets/dashboard-workspace-test-DqBdCFo2.js +537 -0
  158. package/bundled-test-harness/assets/dashboard-workspaces-section-test-CH1HDfxR.js +410 -0
  159. package/bundled-test-harness/assets/data-file-def-preview-test-CNsZwQEJ.js +155 -0
  160. package/bundled-test-harness/assets/date-time-fields-test-CEFaZTnF.js +359 -0
  161. package/bundled-test-harness/assets/debug-message-test-Ck3BfFv3.js +117 -0
  162. package/bundled-test-harness/assets/declared-captures-test-C-0yPRU7.js +879 -0
  163. package/bundled-test-harness/assets/delete-workspace-test-CZOwGy78.js +102 -0
  164. package/bundled-test-harness/assets/diffing-test-BEKI905O.js +210 -0
  165. package/bundled-test-harness/assets/download-file-to-realm-test-C1kAGDll.js +119 -0
  166. package/bundled-test-harness/assets/editor-test-C9x5ZY6g.js +688 -0
  167. package/bundled-test-harness/assets/edits-D76-aanh.js +651 -0
  168. package/bundled-test-harness/assets/email-field-test-LGkrB_2B.js +75 -0
  169. package/bundled-test-harness/assets/enum-field-test-CPyV1J-m.js +935 -0
  170. package/bundled-test-harness/assets/error-display-test-bWuUtfIG.js +343 -0
  171. package/bundled-test-harness/assets/evaluate-module-test-CbS5h8t3.js +91 -0
  172. package/bundled-test-harness/assets/execute-atomic-operations-test-B4Kfco0k.js +113 -0
  173. package/bundled-test-harness/assets/externals-k-2ZBepK.js +4393 -0
  174. package/bundled-test-harness/assets/fallback-banner-live-delete-test-CuFiH1D8.js +207 -0
  175. package/bundled-test-harness/assets/fallback-banner-test-CqSRN7D8.js +225 -0
  176. package/bundled-test-harness/assets/fallback-banner-test-DQkrFE4-.js +53 -0
  177. package/bundled-test-harness/assets/fallback-models-test-BWekNxC0.js +161 -0
  178. package/bundled-test-harness/assets/fetch-card-json-test-DULUqUEu.js +61 -0
  179. package/bundled-test-harness/assets/field-configuration-test-BXZq28xa.js +551 -0
  180. package/bundled-test-harness/assets/field-markdown-domain-test-DdXCifs6.js +616 -0
  181. package/bundled-test-harness/assets/field-markdown-oversize-test-DouPPTHX.js +88 -0
  182. package/bundled-test-harness/assets/field-markdown-primitives-test-DSRGJeyl.js +365 -0
  183. package/bundled-test-harness/assets/field-markdown-specialized-test-DlTYLl_s.js +534 -0
  184. package/bundled-test-harness/assets/field-playground-test-NhS4VvoN.js +894 -0
  185. package/bundled-test-harness/assets/field-support-predicates-test-DWpyT1Qf.js +167 -0
  186. package/bundled-test-harness/assets/file-attachment-test-LwZf-BSY.js +796 -0
  187. package/bundled-test-harness/assets/file-chooser-panel-test-DuAqD9bn.js +153 -0
  188. package/bundled-test-harness/assets/file-chooser-test-CjaXXwpT.js +504 -0
  189. package/bundled-test-harness/assets/file-def-format-templates-test-BDs4OmHq.js +380 -0
  190. package/bundled-test-harness/assets/file-def-live-reload-test-BqTdnq-W.js +124 -0
  191. package/bundled-test-harness/assets/file-def-menu-items-test-DqdINXsD.js +138 -0
  192. package/bundled-test-harness/assets/file-def-navigation-test-BPGr0SQy.js +109 -0
  193. package/bundled-test-harness/assets/file-def-serialization-test-CvjW-FlC.js +89 -0
  194. package/bundled-test-harness/assets/file-def-test-C-Yv_NjS.js +216 -0
  195. package/bundled-test-harness/assets/file-preview-live-reload-test-MzwGwasU.js +310 -0
  196. package/bundled-test-harness/assets/file-resource-primitives-test-D3GmfqNs.js +255 -0
  197. package/bundled-test-harness/assets/file-tree-from-index-test-CfldnUgm.js +96 -0
  198. package/bundled-test-harness/assets/file-tree-test--0ZCPRe9.js +851 -0
  199. package/bundled-test-harness/assets/file-view-model-test-BDIAeBV8.js +346 -0
  200. package/bundled-test-harness/assets/filedef-export-shape-test-B2tgU404.js +61 -0
  201. package/bundled-test-harness/assets/film-Bf73ypzi.js +4074 -0
  202. package/bundled-test-harness/assets/film-C54lhaiU.js +2 -0
  203. package/bundled-test-harness/assets/film-DPcMEHYu.js +13 -0
  204. package/bundled-test-harness/assets/flac-audio-def-test-ByoXMoQ1.js +143 -0
  205. package/bundled-test-harness/assets/font-metadata-extractor-test-hawLTDTG.js +415 -0
  206. package/bundled-test-harness/assets/formatted-aibot-message-test-BahBj3x8.js +109 -0
  207. package/bundled-test-harness/assets/formatted-user-message-test-CodbrU3t.js +43 -0
  208. package/bundled-test-harness/assets/freestyle-test-faQhSciz.js +17 -0
  209. package/bundled-test-harness/assets/full-reindex-realm-test-CE5RJTIC.js +101 -0
  210. package/bundled-test-harness/assets/garbage-collection-test-v-3sev77.js +403 -0
  211. package/bundled-test-harness/assets/general-test-DKZPBtSb.js +923 -0
  212. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-CucWyrkH.js +65 -0
  213. package/bundled-test-harness/assets/generic-file-def-preview-test-_EDRsebi.js +71 -0
  214. package/bundled-test-harness/assets/get-available-realm-identifiers-test-CV023yek.js +47 -0
  215. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test--DOu3DyV.js +47 -0
  216. package/bundled-test-harness/assets/get-default-writable-realm-test-Bic8jl6R.js +54 -0
  217. package/bundled-test-harness/assets/get-published-realms-test-DrA5YcFN.js +71 -0
  218. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-jfU6SIWn.js +54 -0
  219. package/bundled-test-harness/assets/get-relationship-membership-state-test-Ccy2Z7MN.js +1308 -0
  220. package/bundled-test-harness/assets/get-user-system-card-test-Bmq2lmWv.js +67 -0
  221. package/bundled-test-harness/assets/gif-image-def-test-N1mMQC-X.js +188 -0
  222. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BkUDjiTs.js +160 -0
  223. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-DsFWCzTs.js +74 -0
  224. package/bundled-test-harness/assets/gts-file-def-test-BL1jpQ9J.js +100 -0
  225. package/bundled-test-harness/assets/head-format-preview-test-BVCaPQqc.js +158 -0
  226. package/bundled-test-harness/assets/helpers-Ds68JxHe.js +5 -0
  227. package/bundled-test-harness/assets/host-mode-service-B4bisRdR.js +262 -0
  228. package/bundled-test-harness/assets/host-mode-test-BmkN2PCJ.js +831 -0
  229. package/bundled-test-harness/assets/host-submode-test-C6SxQ796.js +1392 -0
  230. package/bundled-test-harness/assets/html-component-test-CNQ9wF0Q.js +65 -0
  231. package/bundled-test-harness/assets/html-def-test-BcaCVVQq.js +160 -0
  232. package/bundled-test-harness/assets/html-meta-extractor-test-BU1hjkTp.js +60 -0
  233. package/bundled-test-harness/assets/hydratable-card-test-CX6MWiti.js +426 -0
  234. package/bundled-test-harness/assets/icon-button-C1zH38Nc.js +67 -0
  235. package/bundled-test-harness/assets/image-metadata-extractor-test-CakSBPZ_.js +1109 -0
  236. package/bundled-test-harness/assets/index-changes-test-D8RtgfyG.js +367 -0
  237. package/bundled-test-harness/assets/index-query-engine-test-BETfoYOK.js +2593 -0
  238. package/bundled-test-harness/assets/index-writer-test-B_bR2fjw.js +3040 -0
  239. package/bundled-test-harness/assets/inspector-test-BwPXJj1S.js +2058 -0
  240. package/bundled-test-harness/assets/instance-filter-matcher-test-BSVCg59b.js +788 -0
  241. package/bundled-test-harness/assets/instantiate-card-test-BVQhZjpq.js +164 -0
  242. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DzQLG41H.js +475 -0
  243. package/bundled-test-harness/assets/interact-submode-setup-C5bKXq73.js +566 -0
  244. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-Cd3dpjhB.js +99 -0
  245. package/bundled-test-harness/assets/invite-user-to-room-test-Brabz1tt.js +142 -0
  246. package/bundled-test-harness/assets/invoke-card-operation-test-C1Q1FUf4.js +333 -0
  247. package/bundled-test-harness/assets/isolated-render-test-BLJfS7BU.js +51 -0
  248. package/bundled-test-harness/assets/job-scoped-doc-cache-test-Bgv5woaB.js +181 -0
  249. package/bundled-test-harness/assets/job-scoped-instance-residency-test-C_bB6KpR.js +103 -0
  250. package/bundled-test-harness/assets/jpg-image-def-test-gdLIKocD.js +697 -0
  251. package/bundled-test-harness/assets/json-file-def-test-CPYMRBY-.js +95 -0
  252. package/bundled-test-harness/assets/key-notices-badge-test-DemslfLw.js +155 -0
  253. package/bundled-test-harness/assets/key-readiness-test-5tq5JycL.js +190 -0
  254. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-BbhDZ2PH.js +398 -0
  255. package/bundled-test-harness/assets/linksto-error-sentinel-test-C2t7fFPi.js +238 -0
  256. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test--U_UvUty.js +354 -0
  257. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-Dj3Xy0ZF.js +303 -0
  258. package/bundled-test-harness/assets/linksto-sentinel-reload-test-D0dK4Jjs.js +197 -0
  259. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test---IYiXok.js +260 -0
  260. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-CT04MhES.js +196 -0
  261. package/bundled-test-harness/assets/lint-and-fix-test-aadgx7rX.js +51 -0
  262. package/bundled-test-harness/assets/live-test-BGij_vuc.js +100 -0
  263. package/bundled-test-harness/assets/live-test-CppvValf.js +2 -0
  264. package/bundled-test-harness/assets/load-default-skills-test-Cp2m_ebp.js +74 -0
  265. package/bundled-test-harness/assets/loader-parallel-prefetch-test-vU_26Jqu.js +257 -0
  266. package/bundled-test-harness/assets/loader-test-CTaw8K_B.js +482 -0
  267. package/bundled-test-harness/assets/loading-test-DGGt4qZZ.js +63 -0
  268. package/bundled-test-harness/assets/m4a-audio-def-test-DAiReOXH.js +190 -0
  269. package/bundled-test-harness/assets/main-bXHwJ0CN.js +5 -0
  270. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-CIXq9FqR.js +470 -0
  271. package/bundled-test-harness/assets/markdown-embed-chooser-test-zFGh9WfP.js +334 -0
  272. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-Byn_WFwY.js +447 -0
  273. package/bundled-test-harness/assets/markdown-embed-preview-test-Y3iFMttg.js +368 -0
  274. package/bundled-test-harness/assets/markdown-fallback-test-Br1TPkLZ.js +316 -0
  275. package/bundled-test-harness/assets/markdown-file-def-test-Crm2MAnq.js +380 -0
  276. package/bundled-test-harness/assets/markdown-helpers-test-CZ9Vvywc.js +188 -0
  277. package/bundled-test-harness/assets/markdown-highlighting-test-CFMkoVDl.js +244 -0
  278. package/bundled-test-harness/assets/markdown-preview-lOh-MyqF.js +72 -0
  279. package/bundled-test-harness/assets/markdown-preview-test-B8w0fFIy.js +238 -0
  280. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-aH6HQly1.js +146 -0
  281. package/bundled-test-harness/assets/markdown-skill-search-test-CiNLQs-5.js +80 -0
  282. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-DaA8w1Jj.js +63 -0
  283. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-21GIlf55.js +300 -0
  284. package/bundled-test-harness/assets/matrix-service-personal-realm-test-jn9DUENm.js +125 -0
  285. package/bundled-test-harness/assets/matrix-service-realm-servers-test-eNZVJakl.js +55 -0
  286. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-Cabm8_dY.js +132 -0
  287. package/bundled-test-harness/assets/matrix-service-relogin-test-C77EFgjc.js +59 -0
  288. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-BgM0fPiO.js +35 -0
  289. package/bundled-test-harness/assets/menu-Cl50TSFe.js +3561 -0
  290. package/bundled-test-harness/assets/message-service-subscription-test-CfEqH2jP.js +110 -0
  291. package/bundled-test-harness/assets/message-service-test-DsTzH1In.js +144 -0
  292. package/bundled-test-harness/assets/message-tool-test-C5xVfTtj.js +33 -0
  293. package/bundled-test-harness/assets/midi-audio-def-test-goLRCNCZ.js +182 -0
  294. package/bundled-test-harness/assets/migrate-skill-test-yPCbVfxG.js +161 -0
  295. package/bundled-test-harness/assets/mini-YXjrY_tH.js +1404 -0
  296. package/bundled-test-harness/assets/mini-card-chooser-test-DrllikHB.js +272 -0
  297. package/bundled-test-harness/assets/mini-file-chooser-test-BfqayhmI.js +201 -0
  298. package/bundled-test-harness/assets/mock-matrix-C7BrPS6S.js +2 -0
  299. package/bundled-test-harness/assets/mock-matrix-FjsXmU7-.js +15107 -0
  300. package/bundled-test-harness/assets/modal-BgaZavcs.js +322 -0
  301. package/bundled-test-harness/assets/model-cost-tier-test-BGg-sJML.js +174 -0
  302. package/bundled-test-harness/assets/model-file-extract-test-CjEBupY5.js +206 -0
  303. package/bundled-test-harness/assets/module-transpile-cache-test-XW6DDsmz.js +67 -0
  304. package/bundled-test-harness/assets/monaco-test-DkoRuFiQ.js +100 -0
  305. package/bundled-test-harness/assets/mp3-audio-def-test-v369NNsQ.js +133 -0
  306. package/bundled-test-harness/assets/multiple-stacks-test-CJpYPWdM.js +208 -0
  307. package/bundled-test-harness/assets/nested-query-field-render-test-CfDrBcUN.js +249 -0
  308. package/bundled-test-harness/assets/no-stacks-test-MmsJeLpz.js +48 -0
  309. package/bundled-test-harness/assets/number-field-test-A7B2r0M5.js +184 -0
  310. package/bundled-test-harness/assets/office-file-def-test-BNRvFmCB.js +263 -0
  311. package/bundled-test-harness/assets/office-metadata-extractor-test-zlDoEIEp.js +218 -0
  312. package/bundled-test-harness/assets/office-poster-capture-test-DdFEaOxR.js +203 -0
  313. package/bundled-test-harness/assets/ogg-audio-def-test-kk91BzQY.js +196 -0
  314. package/bundled-test-harness/assets/open-create-listing-modal-test-D1Dl1pov.js +131 -0
  315. package/bundled-test-harness/assets/open-image-in-new-tab-test-DyCmdMyO.js +52 -0
  316. package/bundled-test-harness/assets/open-secure-window-test-dz1vPudF.js +253 -0
  317. package/bundled-test-harness/assets/open-workspace-test-BvTcskzP.js +46 -0
  318. package/bundled-test-harness/assets/operation-lowering-test-omU66bkJ.js +2957 -0
  319. package/bundled-test-harness/assets/operations-invocation-test-BMj42rQe.js +523 -0
  320. package/bundled-test-harness/assets/operations-optimistic-test-KJLyzT8v.js +203 -0
  321. package/bundled-test-harness/assets/operations-query-test-J3HcnaoK.js +459 -0
  322. package/bundled-test-harness/assets/operations-store-reconciliation-test-CkbGBMBQ.js +406 -0
  323. package/bundled-test-harness/assets/operations-test-C7zXXpRW.js +2518 -0
  324. package/bundled-test-harness/assets/operator-mode-acceptance-test-BPolI_RD.js +1195 -0
  325. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DjTQgizt.js +1036 -0
  326. package/bundled-test-harness/assets/operator-mode-links-test-DSEqy5Db.js +797 -0
  327. package/bundled-test-harness/assets/operator-mode-test-CB7BNDNE.js +696 -0
  328. package/bundled-test-harness/assets/operator-mode-ui-test-C1OhF1il.js +1045 -0
  329. package/bundled-test-harness/assets/overlay-D2rQi8lJ.js +427 -0
  330. package/bundled-test-harness/assets/overlay-menu-items-test-CPN31yBJ.js +331 -0
  331. package/bundled-test-harness/assets/overlays-B-qMEPhY.js +2 -0
  332. package/bundled-test-harness/assets/overlays-DSf2je0c.js +75 -0
  333. package/bundled-test-harness/assets/overlays-detached-element-test-C73nMXes.js +56 -0
  334. package/bundled-test-harness/assets/panel-DjrC7DxA.js +15124 -0
  335. package/bundled-test-harness/assets/past-sessions-test-BSIS2Hlq.js +321 -0
  336. package/bundled-test-harness/assets/patch-fields-test-Bp2IE0Jw.js +1014 -0
  337. package/bundled-test-harness/assets/patch-instance-test-DssuRGKP.js +348 -0
  338. package/bundled-test-harness/assets/pdf-file-def-test-Barj9ffD.js +111 -0
  339. package/bundled-test-harness/assets/pdf-metadata-extractor-test-B7KnXcIm.js +130 -0
  340. package/bundled-test-harness/assets/permission-checking-realm-test-BD4O0nen.js +306 -0
  341. package/bundled-test-harness/assets/persist-module-inspector-view-test-BIdbkdPr.js +60 -0
  342. package/bundled-test-harness/assets/persist-scroll-position-test-Bhb7wJiy.js +254 -0
  343. package/bundled-test-harness/assets/phone-number-field-test-C2yuCrXY.js +73 -0
  344. package/bundled-test-harness/assets/pill-menu-test-BIp91YXi.js +60 -0
  345. package/bundled-test-harness/assets/plate-CJq1veVA.js +41 -0
  346. package/bundled-test-harness/assets/plate-CwAvOUfL.js +2 -0
  347. package/bundled-test-harness/assets/player-Digk7omr.js +2 -0
  348. package/bundled-test-harness/assets/player-vsjosoN_.js +82 -0
  349. package/bundled-test-harness/assets/playground-B02e8uqB.js +58 -0
  350. package/bundled-test-harness/assets/plural-field-components-test-C1acuN-A.js +198 -0
  351. package/bundled-test-harness/assets/png-image-def-test-B9QeVo1f.js +266 -0
  352. package/bundled-test-harness/assets/policy-audit-confirmation-test-CeVquvc_.js +155 -0
  353. package/bundled-test-harness/assets/policy-scoped-search-test-SFPiIqR3.js +339 -0
  354. package/bundled-test-harness/assets/prerender-file-extract-test-HSJKAHyO.js +346 -0
  355. package/bundled-test-harness/assets/prerender-html-test-BTAcFCme.js +670 -0
  356. package/bundled-test-harness/assets/prerender-meta-test-Csyz2b21.js +614 -0
  357. package/bundled-test-harness/assets/prerender-module-test-DpTYAbmI.js +409 -0
  358. package/bundled-test-harness/assets/prerender-persistence-block-test-BhIt-7kK.js +124 -0
  359. package/bundled-test-harness/assets/prerender-pre-model-error-test-DxKPQKqx.js +61 -0
  360. package/bundled-test-harness/assets/prerender-serialize-cycle-test-C8V5YWQO.js +134 -0
  361. package/bundled-test-harness/assets/prerendered-html-read-test-Cq7JVGwg.js +191 -0
  362. package/bundled-test-harness/assets/pretui-components-test-Ducr9fLT.css +743 -0
  363. package/bundled-test-harness/assets/pretui-components-test-Hs0uyIUQ.js +992 -0
  364. package/bundled-test-harness/assets/pretui-primitives-CRs8NRm0.js +69 -0
  365. package/bundled-test-harness/assets/preview-format-test-cCqLrfdY.js +103 -0
  366. package/bundled-test-harness/assets/preview-test-BMqJSoR1.js +474 -0
  367. package/bundled-test-harness/assets/process-card-test-578tfDvr.js +94 -0
  368. package/bundled-test-harness/assets/profile-settings-modal-CVnNl7Yu.js +990 -0
  369. package/bundled-test-harness/assets/publish-realm-COoeWexp.js +82 -0
  370. package/bundled-test-harness/assets/publish-realm-test-a5nkx0Ov.js +210 -0
  371. package/bundled-test-harness/assets/query-field-barrier-test-qX3xVPfk.js +113 -0
  372. package/bundled-test-harness/assets/query-field-error-sentinel-test-V6JDPFLX.js +201 -0
  373. package/bundled-test-harness/assets/query-field-membership-status-test-CK7eDf-K.js +323 -0
  374. package/bundled-test-harness/assets/query-field-page-optin-test-B5YBHUvU.js +126 -0
  375. package/bundled-test-harness/assets/query-field-schema-test-D4SjOGlK.js +231 -0
  376. package/bundled-test-harness/assets/query-field-search-throttle-test-BVkm1-D8.js +154 -0
  377. package/bundled-test-harness/assets/query-field-stale-prerender-test-9g7hcD91.js +152 -0
  378. package/bundled-test-harness/assets/query-fields-test-CQYqhzpN.js +535 -0
  379. package/bundled-test-harness/assets/quick-look-test-CE0o6lJ4.js +139 -0
  380. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-D0mJorwH.js +91 -0
  381. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-B_F_2GEB.js +45 -0
  382. package/bundled-test-harness/assets/read-source-test-BgJV4B4F.js +67 -0
  383. package/bundled-test-harness/assets/read-text-file-test-DaeLzg4u.js +124 -0
  384. package/bundled-test-harness/assets/realm-C_a9su1j.js +2858 -0
  385. package/bundled-test-harness/assets/realm-api-keys-D5USFOoS.js +2 -0
  386. package/bundled-test-harness/assets/realm-api-keys-m_VOcixC.js +578 -0
  387. package/bundled-test-harness/assets/realm-api-keys-test-BVs7f5Dz.js +109 -0
  388. package/bundled-test-harness/assets/realm-api-keys-test-C_uZnTmq.js +588 -0
  389. package/bundled-test-harness/assets/realm-config-m5eccPW8.js +833 -0
  390. package/bundled-test-harness/assets/realm-config-policy-standing-test-Ber-IXpc.js +290 -0
  391. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-3Xqt5VlM.js +274 -0
  392. package/bundled-test-harness/assets/realm-config-settings-test-CkalhbDF.js +187 -0
  393. package/bundled-test-harness/assets/realm-field-test-B_PUoqnk.js +100 -0
  394. package/bundled-test-harness/assets/realm-indexing-test-8iLjeV_e.js +4380 -0
  395. package/bundled-test-harness/assets/realm-policy-fitted-test-Bptvra0U.js +206 -0
  396. package/bundled-test-harness/assets/realm-policy-test-DwG0qqXE.js +1141 -0
  397. package/bundled-test-harness/assets/realm-querying-test-Dvw26A6Q.js +1067 -0
  398. package/bundled-test-harness/assets/realm-server-form-agnostic-test-DrXQH0UP.js +96 -0
  399. package/bundled-test-harness/assets/realm-server-subscriber-test-Dkj23vQK.js +46 -0
  400. package/bundled-test-harness/assets/realm-service-info-test-CdRlDhj-.js +67 -0
  401. package/bundled-test-harness/assets/realm-test-DGYN48Qx.js +2364 -0
  402. package/bundled-test-harness/assets/realm-token-refresh-test-CEWATL9h.js +153 -0
  403. package/bundled-test-harness/assets/realm-url-tooltip-test-8ZjTNPuy.js +78 -0
  404. package/bundled-test-harness/assets/reasoning-test-BV49AYg2.js +221 -0
  405. package/bundled-test-harness/assets/recent-files-test-Dc6L6Dm4.js +450 -0
  406. package/bundled-test-harness/assets/reindex-realm-test-CFRSt39u.js +117 -0
  407. package/bundled-test-harness/assets/relationship-loading-state-test-FKbtOFUr.js +290 -0
  408. package/bundled-test-harness/assets/remix-card-test-CKGC_Sgq.js +58 -0
  409. package/bundled-test-harness/assets/rendered-markdown-DXiDN91F.js +292 -0
  410. package/bundled-test-harness/assets/rendered-markdown-test-n3MlXmmu.js +587 -0
  411. package/bundled-test-harness/assets/resident-instance-reuse-test-BjdhE6CM.js +82 -0
  412. package/bundled-test-harness/assets/result-tile-o6dtjgX4.js +144 -0
  413. package/bundled-test-harness/assets/rich-markdown-field-test-VXr6l20h.js +1647 -0
  414. package/bundled-test-harness/assets/room-message-test-BrjJ2wMs.js +484 -0
  415. package/bundled-test-harness/assets/run-P_7TsreC.js +4017 -0
  416. package/bundled-test-harness/assets/run-realm-code-DsBUf1si.js +2964 -0
  417. package/bundled-test-harness/assets/run-realm-code-test-cS0DzaKo.js +3844 -0
  418. package/bundled-test-harness/assets/sanitize-module-list-test-CvuOOiUY.js +85 -0
  419. package/bundled-test-harness/assets/save-card-skip-index-wait-test-fpJ1eq32.js +89 -0
  420. package/bundled-test-harness/assets/schema-editor-test-NkKjCgyf.js +785 -0
  421. package/bundled-test-harness/assets/schema-generation-test-Dmg3lWl7.js +28 -0
  422. package/bundled-test-harness/assets/scrolling-test-B0GNYGYc.js +412 -0
  423. package/bundled-test-harness/assets/search-adorn-test-CZebk7_y.js +136 -0
  424. package/bundled-test-harness/assets/search-and-choose-test-Bd4NZUup.js +154 -0
  425. package/bundled-test-harness/assets/search-correlation-id-test-DXKlEO55.js +139 -0
  426. package/bundled-test-harness/assets/search-entries-result-test-QQawA8Fm.js +234 -0
  427. package/bundled-test-harness/assets/search-entries-test-3DlqGPQq.js +1486 -0
  428. package/bundled-test-harness/assets/search-entries-tool-test-D1TvDE9D.js +504 -0
  429. package/bundled-test-harness/assets/search-google-images-test-DqsoQGr1.js +166 -0
  430. package/bundled-test-harness/assets/search-results-DGrNaPxh.js +266 -0
  431. package/bundled-test-harness/assets/search-results-test-CqVHYNRt.js +578 -0
  432. package/bundled-test-harness/assets/search-selection-menu-test-D6bIjKiH.js +108 -0
  433. package/bundled-test-harness/assets/search-sheet-files-test-Bf37TQXo.js +126 -0
  434. package/bundled-test-harness/assets/search-sheet-persistence-test-CV4_XdxR.js +131 -0
  435. package/bundled-test-harness/assets/search-test-Dlb-wg3a.js +2249 -0
  436. package/bundled-test-harness/assets/search-tool-test-BJLgVMoL.js +156 -0
  437. package/bundled-test-harness/assets/searchable-option-test-CcbfMqIL.js +322 -0
  438. package/bundled-test-harness/assets/searchable-search-doc-test-yH9fLGNS.js +1271 -0
  439. package/bundled-test-harness/assets/section-rail-CNFCebtT.js +113 -0
  440. package/bundled-test-harness/assets/section-rail-test-KNJAWWl6.js +256 -0
  441. package/bundled-test-harness/assets/secure-sign-in-Dyljp0Th.js +174 -0
  442. package/bundled-test-harness/assets/secure-sign-in-test-QnqNuTP3.js +373 -0
  443. package/bundled-test-harness/assets/segmented-control-DxJdoJ4Z.js +173 -0
  444. package/bundled-test-harness/assets/select-BiQTg2ts.js +175 -0
  445. package/bundled-test-harness/assets/send-ai-assistant-message-test-CAn7M2dZ.js +52 -0
  446. package/bundled-test-harness/assets/send-bot-trigger-event-test-qBu5E_jy.js +56 -0
  447. package/bundled-test-harness/assets/send-request-via-proxy-test-CLuwLBq_.js +380 -0
  448. package/bundled-test-harness/assets/sending-test-H0AaBSgi.js +659 -0
  449. package/bundled-test-harness/assets/serialization-rri-form-audit-test-hMJukiKt.js +136 -0
  450. package/bundled-test-harness/assets/serialization-test-W5e3wKbz.js +8758 -0
  451. package/bundled-test-harness/assets/set-user-system-card-test-CjgWLkNV.js +59 -0
  452. package/bundled-test-harness/assets/setup-CssMNvui.js +772 -0
  453. package/bundled-test-harness/assets/setup-D8YXvK-p.js +2 -0
  454. package/bundled-test-harness/assets/shared-link-target-reuse-test-D42UO8DC.js +207 -0
  455. package/bundled-test-harness/assets/show-card-test-CHEaS514.js +365 -0
  456. package/bundled-test-harness/assets/signed-capture-link-test-BgEu0F-S.js +132 -0
  457. package/bundled-test-harness/assets/single-stack-test-DYcu_v7Z.js +652 -0
  458. package/bundled-test-harness/assets/skills-test-ChmKhADX.js +648 -0
  459. package/bundled-test-harness/assets/skip-boot-index-guard-test-BzRIncDN.js +46 -0
  460. package/bundled-test-harness/assets/spec-test-BYvFR6Xb.js +1077 -0
  461. package/bundled-test-harness/assets/spinner-Bx9x55NA.js +49 -0
  462. package/bundled-test-harness/assets/src-C1hYFgVl.js +216 -0
  463. package/bundled-test-harness/assets/src-CIlLx7Lu.js +5 -0
  464. package/bundled-test-harness/assets/stick-to-bottom-resize-test-DMHsAG0v.js +56 -0
  465. package/bundled-test-harness/assets/store-add-test-D_9IHQjZ.js +50 -0
  466. package/bundled-test-harness/assets/store-module-rebuild-test-BRGZoLRV.js +454 -0
  467. package/bundled-test-harness/assets/store-search-test-3G8JHuj2.js +175 -0
  468. package/bundled-test-harness/assets/store-test-BiKKDqqW.js +3672 -0
  469. package/bundled-test-harness/assets/structured-theme-test-11TNsgUW.js +377 -0
  470. package/bundled-test-harness/assets/summarize-session-test-CwzD_ZbD.js +172 -0
  471. package/bundled-test-harness/assets/svg-image-def-test-zV6aMK9q.js +167 -0
  472. package/bundled-test-harness/assets/switch-submode-test-DQU2cP5_.js +168 -0
  473. package/bundled-test-harness/assets/sync-openrouter-models-test-xrXVaC2H.js +97 -0
  474. package/bundled-test-harness/assets/test-support-BGl3rthw.js +3 -0
  475. package/bundled-test-harness/assets/test-support-BcBv__98.js +99 -0
  476. package/bundled-test-harness/assets/tests-CmM9imwB.js +3598 -0
  477. package/bundled-test-harness/assets/text-file-def-test-Cyq78UFY.js +94 -0
  478. package/bundled-test-harness/assets/text-input-validator-test-DBj7TaM_.js +156 -0
  479. package/bundled-test-harness/assets/text-suggestion-test-C4XAqWqY.js +340 -0
  480. package/bundled-test-harness/assets/theme-card-test-dVNz4tgU.js +621 -0
  481. package/bundled-test-harness/assets/theme-dashboard-nav-test-DYSn5pqo.js +196 -0
  482. package/bundled-test-harness/assets/theme-scheme-island-test-C1WpkfEP.js +264 -0
  483. package/bundled-test-harness/assets/theme-scoped-css-parity-test-BVluppsE.js +176 -0
  484. package/bundled-test-harness/assets/titles-DCvAhECF.js +52 -0
  485. package/bundled-test-harness/assets/titles-ZPeArtS1.js +2 -0
  486. package/bundled-test-harness/assets/to-device-streaming-test-BJ4J1cXe.js +163 -0
  487. package/bundled-test-harness/assets/token-usage-test-WUf4r4fQ.js +160 -0
  488. package/bundled-test-harness/assets/tools-J_Knr_W6.js +774 -0
  489. package/bundled-test-harness/assets/tools-calling-test-CfqZX0Ed.js +200 -0
  490. package/bundled-test-harness/assets/tools-test-B4x58ZmI.js +1624 -0
  491. package/bundled-test-harness/assets/tools-test-Cvau5219.js +3204 -0
  492. package/bundled-test-harness/assets/tooltip-B0rEgyMW.css +66 -0
  493. package/bundled-test-harness/assets/tooltip-DvUMUgVX.js +195 -0
  494. package/bundled-test-harness/assets/transform-cards-test-CYQbZeD9.js +341 -0
  495. package/bundled-test-harness/assets/ts-file-def-preview-test-m39f8Zio.js +95 -0
  496. package/bundled-test-harness/assets/ts-file-def-test-xIcL5xWe.js +92 -0
  497. package/bundled-test-harness/assets/ttf-font-def-test-ClQ2SzFF.js +206 -0
  498. package/bundled-test-harness/assets/turn-settling-test-DZoL2mRT.js +160 -0
  499. package/bundled-test-harness/assets/turn-summary-Bmt7ZxTS.js +1039 -0
  500. package/bundled-test-harness/assets/unpublish-realm-test-0ToTJczx.js +102 -0
  501. package/bundled-test-harness/assets/update-room-skills-test-o_j8NOUV.js +240 -0
  502. package/bundled-test-harness/assets/use-ai-assistant-test-D7HFpxKJ.js +384 -0
  503. package/bundled-test-harness/assets/user-message-BAOt1hS3.js +262 -0
  504. package/bundled-test-harness/assets/validate-realm-test-e3xIbNLB.js +67 -0
  505. package/bundled-test-harness/assets/video-metadata-extractor-test-D8naLSlg.js +520 -0
  506. package/bundled-test-harness/assets/view-visually-test-BuhGau5E.js +335 -0
  507. package/bundled-test-harness/assets/virtual-network-reset-test-CgaFNGPi.js +96 -0
  508. package/bundled-test-harness/assets/wav-audio-def-test-CWG_UdCh.js +160 -0
  509. package/bundled-test-harness/assets/webp-image-def-test-sN4yw8Zu.js +226 -0
  510. package/bundled-test-harness/assets/workspace-0LfPqbYB.js +445 -0
  511. package/bundled-test-harness/assets/workspace-a11y-test-DQxYDRAP.js +197 -0
  512. package/bundled-test-harness/assets/workspace-actions-jGJSfl8M.js +588 -0
  513. package/bundled-test-harness/assets/workspace-behavior-test-BnF-bmBN.js +338 -0
  514. package/bundled-test-harness/assets/workspace-delete-multiple-test-D-rxPDuT.js +212 -0
  515. package/bundled-test-harness/assets/workspace-delete-summary-test-C2-Mve5R.js +63 -0
  516. package/bundled-test-harness/assets/workspace-hosting-test-BvDKdlOb.js +138 -0
  517. package/bundled-test-harness/assets/workspace-indexing-test-B34T3kqD.js +71 -0
  518. package/bundled-test-harness/assets/workspace-test-CJivgv-m.js +51 -0
  519. package/bundled-test-harness/assets/workspace-test-CuSRpPnQ.js +385 -0
  520. package/bundled-test-harness/assets/workspace-timestamp-labels-test-aWgjdbCp.js +68 -0
  521. package/bundled-test-harness/assets/workspace-unit-test-DHMUf2KT.js +122 -0
  522. package/bundled-test-harness/assets/write-binary-file-test-P-hVQuin.js +124 -0
  523. package/bundled-test-harness/assets/write-text-file-test-fXvJueDd.js +191 -0
  524. package/bundled-test-harness/assets/zip-archive-test-C2P5CUSR.js +285 -0
  525. package/bundled-test-harness/assets/zip-file-def-test-BfJZAmGt.js +164 -0
  526. package/bundled-test-harness/boxel-ui-checksum.txt +1 -1
  527. package/bundled-test-harness/index.html +48 -48
  528. package/bundled-test-harness/tests/index.html +50 -50
  529. package/bundled-types/boxel-ui/helpers/theme-scoped-css.ts +4 -0
  530. package/bundled-types/choreo/choreo.gts +58 -2
  531. package/bundled-types/choreo/compile.ts +5 -0
  532. package/bundled-types/choreo/layout-probe.ts +100 -0
  533. package/bundled-types/choreo/run.ts +99 -4
  534. package/bundled-types/host-app/components/operator-mode/dashboard/get-started.gts +152 -7
  535. package/bundled-types/host-app/components/operator-mode/dashboard/index.gts +2 -0
  536. package/bundled-types/host-app/components/operator-mode/dashboard/workspace.gts +5 -3
  537. package/bundled-types/host-app/components/operator-mode/dashboard-modals/workspace-modals.gts +5 -22
  538. package/bundled-types/host-app/components/operator-mode/host-submode/publishing-realm-popover.gts +1 -1
  539. package/bundled-types/host-app/components/operator-mode/host-submode.gts +111 -37
  540. package/bundled-types/host-app/components/operator-mode/motion/stack-motion.gts +92 -33
  541. package/bundled-types/host-app/components/operator-mode/publish-realm-modal.gts +1 -0
  542. package/bundled-types/host-app/components/operator-mode/stack-item.gts +2 -2
  543. package/bundled-types/host-app/components/operator-mode/stack.gts +36 -25
  544. package/bundled-types/host-app/components/operator-mode/submode-layout.gts +2 -2
  545. package/bundled-types/host-app/lib/modal-focus-trap.ts +33 -0
  546. package/bundled-types/host-app/lib/workspace-actions.ts +21 -0
  547. package/bundled-types/host-app/services/host-mode-service.ts +39 -0
  548. package/bundled-types/host-app/services/realm.ts +14 -0
  549. package/bundled-types/host-tests/helpers/dashboard.ts +67 -0
  550. package/package.json +1 -1
  551. package/bundled-test-harness/assets/account-switch-failed-test-FytUFiPO.js +0 -45
  552. package/bundled-test-harness/assets/adapter-DvmPwSZv.js +0 -2
  553. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-DN525jiY.js +0 -112
  554. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-q3tKqVJQ.js +0 -130
  555. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DgeXcCyi.js +0 -46
  556. package/bundled-test-harness/assets/ai-assistant-test-lDIGPKFP.js +0 -2223
  557. package/bundled-test-harness/assets/ai-function-generation-test-D5GbLyvL.js +0 -1176
  558. package/bundled-test-harness/assets/ai-module-creation-test-I3-j2beD.js +0 -151
  559. package/bundled-test-harness/assets/aibot-message-Dmsjifs6.js +0 -1312
  560. package/bundled-test-harness/assets/app-BS9_-DhN.js +0 -14146
  561. package/bundled-test-harness/assets/apply-markdown-edit-test-4zlwt0Db.js +0 -230
  562. package/bundled-test-harness/assets/ask-user-picker-Dr-0qpNr.js +0 -370
  563. package/bundled-test-harness/assets/ask-user-picker-test-633AFdmS.js +0 -39
  564. package/bundled-test-harness/assets/assistant-transcript-test-BgRnLvMg.js +0 -57
  565. package/bundled-test-harness/assets/audio-metadata-extractor-test-4xsQqL-0.js +0 -1176
  566. package/bundled-test-harness/assets/authed-fetch-test-663mT5_N.js +0 -73
  567. package/bundled-test-harness/assets/avif-image-def-test-h01BPIJy.js +0 -187
  568. package/bundled-test-harness/assets/basic-test-DiD6T-8Q.js +0 -139
  569. package/bundled-test-harness/assets/binary-upload-dedupe-test-CkjMPO_e.js +0 -308
  570. package/bundled-test-harness/assets/bot-registration-test-CFZHpwdj.js +0 -97
  571. package/bundled-test-harness/assets/box-test-C3pSy5ED.js +0 -50
  572. package/bundled-test-harness/assets/brand-guide-attachments-test-EoC_u7Vc.js +0 -84
  573. package/bundled-test-harness/assets/brand-guide-custom-css-test-Dn3fvblr.js +0 -196
  574. package/bundled-test-harness/assets/brand-guide-edit-test-NeiT3MyK.js +0 -140
  575. package/bundled-test-harness/assets/brand-logo-mark-field-test-C2A1EnBB.js +0 -86
  576. package/bundled-test-harness/assets/broken-link-template-test-CWn6V5zZ.js +0 -192
  577. package/bundled-test-harness/assets/bundled-base-modules-test-D7mLzpsw.js +0 -54
  578. package/bundled-test-harness/assets/bundled-base-oracle-test-I7xCId_k.js +0 -37
  579. package/bundled-test-harness/assets/buried-stack-item-scroll-test-DFBev0h-.js +0 -236
  580. package/bundled-test-harness/assets/button-BeSuhveJ.js +0 -207
  581. package/bundled-test-harness/assets/bxl-cyclic-graph-test-DPykwvvx.js +0 -47
  582. package/bundled-test-harness/assets/bxl-expression-test-LBWJiFb9.js +0 -250
  583. package/bundled-test-harness/assets/bxl-indexing-test-BuZmLk7y.js +0 -212
  584. package/bundled-test-harness/assets/bxl-platform-module-test-BNIvlkCM.js +0 -71
  585. package/bundled-test-harness/assets/can-invoke-test-t-bFIIeX.js +0 -455
  586. package/bundled-test-harness/assets/can-read-realm-test-2Q_MzRT9.js +0 -56
  587. package/bundled-test-harness/assets/cancel-indexing-job-test-QeYxEukn.js +0 -69
  588. package/bundled-test-harness/assets/capture-test-CJmJG8YR.js +0 -360
  589. package/bundled-test-harness/assets/card-api-test-B43I510H.js +0 -198
  590. package/bundled-test-harness/assets/card-basics-test-CBClzP2y.js +0 -5364
  591. package/bundled-test-harness/assets/card-chooser-paging-test-HEVzf6pR.js +0 -235
  592. package/bundled-test-harness/assets/card-chooser-test-GfjBRPFI.js +0 -393
  593. package/bundled-test-harness/assets/card-context-search-results-CoSr4EdS.js +0 -30
  594. package/bundled-test-harness/assets/card-context-search-results-test-BLMlZu9t.js +0 -184
  595. package/bundled-test-harness/assets/card-def-field-def-relationships-test-DEBOzKan.js +0 -562
  596. package/bundled-test-harness/assets/card-def-menu-items-test-88_h8o0D.js +0 -228
  597. package/bundled-test-harness/assets/card-delete-test-DKom1phy.js +0 -466
  598. package/bundled-test-harness/assets/card-error-awaiting-index-test-DEwgFZMP.js +0 -53
  599. package/bundled-test-harness/assets/card-error-r6_cXst9.js +0 -72
  600. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-B7LiY15e.js +0 -219
  601. package/bundled-test-harness/assets/card-playground-test-CgyIJHui.js +0 -1491
  602. package/bundled-test-harness/assets/card-prerender-rPfzpIOU.js +0 -12939
  603. package/bundled-test-harness/assets/card-thunk-error-test-L0pvg4Ce.js +0 -48
  604. package/bundled-test-harness/assets/card-type-service-test-B2dhqxSD.js +0 -161
  605. package/bundled-test-harness/assets/check-correctness-test-DgqaLlCW.js +0 -1093
  606. package/bundled-test-harness/assets/check-domain-availability-test-B0hJHY5l.js +0 -98
  607. package/bundled-test-harness/assets/chip-D01NW3WH.js +0 -44
  608. package/bundled-test-harness/assets/choreo-D2Jl79RU.js +0 -1019
  609. package/bundled-test-harness/assets/choreo-_E8SOEe-.js +0 -2
  610. package/bundled-test-harness/assets/choreo-feature-reel-test-WLjsZDmS.js +0 -155
  611. package/bundled-test-harness/assets/choreo-gallery-build-order-test-6jnS8PsS.js +0 -436
  612. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CbUZsVB6.js +0 -399
  613. package/bundled-test-harness/assets/choreo-gallery-cover-test-CbvAStgk.js +0 -214
  614. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-tdjvUSa6.js +0 -133
  615. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-CsnM3hQK.js +0 -42
  616. package/bundled-test-harness/assets/choreo-gallery-drift-test-DG2LQTa7.js +0 -620
  617. package/bundled-test-harness/assets/choreo-gallery-escort-test-mn3-qXP1.js +0 -187
  618. package/bundled-test-harness/assets/choreo-gallery-films-test-BuktaC0D.js +0 -140
  619. package/bundled-test-harness/assets/choreo-gallery-filter-test-Dd-zpps0.js +0 -46
  620. package/bundled-test-harness/assets/choreo-gallery-fold-test-CWc1ijGc.js +0 -180
  621. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-tk2QmYPU.js +0 -114
  622. package/bundled-test-harness/assets/choreo-gallery-guides-test-DVbf1zM4.js +0 -321
  623. package/bundled-test-harness/assets/choreo-gallery-hang-test-B7EFp2dx.js +0 -426
  624. package/bundled-test-harness/assets/choreo-gallery-highlight-test-BFgbdesP.js +0 -60
  625. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-DJb8FC5R.js +0 -370
  626. package/bundled-test-harness/assets/choreo-gallery-interruption-test-DWyMXo5D.js +0 -176
  627. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-D3b8LsJ6.js +0 -104
  628. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CjjU6Rvn.js +0 -193
  629. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-Le_h3QWU.js +0 -111
  630. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-Cp-DlWj4.js +0 -127
  631. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-DayS4GCJ.js +0 -100
  632. package/bundled-test-harness/assets/choreo-gallery-presentation-test-DeAfuFS7.js +0 -157
  633. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-BgPWpggq.js +0 -145
  634. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-PzyoMNYv.js +0 -89
  635. package/bundled-test-harness/assets/choreo-gallery-sheet-test-CxaiNBkL.js +0 -48
  636. package/bundled-test-harness/assets/choreo-gallery-site-test-6xtSntS5.js +0 -237
  637. package/bundled-test-harness/assets/choreo-gallery-stage-E6Q5r-zU.js +0 -256
  638. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-C7aWMr9a.js +0 -102
  639. package/bundled-test-harness/assets/choreo-gallery-stages-test-CDWWgC61.js +0 -35
  640. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-Bkp15XJv.js +0 -138
  641. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CcGRi_3O.js +0 -144
  642. package/bundled-test-harness/assets/choreo-gallery-theater-test-Qph5pLT_.js +0 -252
  643. package/bundled-test-harness/assets/choreo-gallery-tuning-test-C4DhFLVA.js +0 -95
  644. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-LK493r1M.js +0 -88
  645. package/bundled-test-harness/assets/choreo-gallery-wires-test-B7SeUCc8.js +0 -148
  646. package/bundled-test-harness/assets/client-telemetry-test-DGmHzAFx.js +0 -340
  647. package/bundled-test-harness/assets/clip-BpYQPVz_.js +0 -2
  648. package/bundled-test-harness/assets/clip-CNaYbIwL.js +0 -92
  649. package/bundled-test-harness/assets/code-block-Cp2CJo5-.js +0 -502
  650. package/bundled-test-harness/assets/code-ref-test-C8JBHDb-.js +0 -163
  651. package/bundled-test-harness/assets/code-submode-availability-test-CzG1Tv6L.js +0 -198
  652. package/bundled-test-harness/assets/code-submode-test-BclVWjm5.js +0 -1839
  653. package/bundled-test-harness/assets/codeblocks-test-CmQlyxN7.js +0 -418
  654. package/bundled-test-harness/assets/codemirror-editor-test-B74H_yn8.js +0 -1512
  655. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bz6VEysU.js +0 -366
  656. package/bundled-test-harness/assets/color-field-test-DMCPQKIP.js +0 -212
  657. package/bundled-test-harness/assets/compaction-test-saQCLBrQ.js +0 -150
  658. package/bundled-test-harness/assets/computed-test-C05HliJC.js +0 -1320
  659. package/bundled-test-harness/assets/container-Cqcwrd-m.js +0 -10857
  660. package/bundled-test-harness/assets/container-h3Wc26qn.css +0 -5097
  661. package/bundled-test-harness/assets/content-preview-components-test-DZPj4_CU.js +0 -462
  662. package/bundled-test-harness/assets/copy-and-edit-test-DiXTQNTF.js +0 -292
  663. package/bundled-test-harness/assets/copy-card-test-ys7GquUY.js +0 -218
  664. package/bundled-test-harness/assets/copy-file-to-realm-test-Gn0Wn4vT.js +0 -148
  665. package/bundled-test-harness/assets/copy-source-test-BTLrOmPm.js +0 -56
  666. package/bundled-test-harness/assets/create-file-test-BCeIW-Rt.js +0 -464
  667. package/bundled-test-harness/assets/create-file-test-DbHQ5JsS.js +0 -1086
  668. package/bundled-test-harness/assets/create-listing-modal-test-CeHc4ter.js +0 -273
  669. package/bundled-test-harness/assets/create-listing-pr-request-test-DXbJNfMh.js +0 -117
  670. package/bundled-test-harness/assets/create-spec-test-BDIZoyHT.js +0 -256
  671. package/bundled-test-harness/assets/create-submission-workflow-test-Bix5J-3A.js +0 -132
  672. package/bundled-test-harness/assets/create-workspace-test-BmNnLHwC.js +0 -104
  673. package/bundled-test-harness/assets/credential-fields-test-NK1F4QWn.js +0 -200
  674. package/bundled-test-harness/assets/csv-file-def-test-BSfs4TTP.js +0 -102
  675. package/bundled-test-harness/assets/dashboard-C4T7ffKY.js +0 -3576
  676. package/bundled-test-harness/assets/dashboard-CFeHuP5-.js +0 -81
  677. package/bundled-test-harness/assets/dashboard-DQlpW-ux.css +0 -2392
  678. package/bundled-test-harness/assets/dashboard-add-workspace-test--rr6objf.js +0 -50
  679. package/bundled-test-harness/assets/dashboard-agents-test-D1y8H4xH.js +0 -334
  680. package/bundled-test-harness/assets/dashboard-archive-test-bN4EQaXv.js +0 -128
  681. package/bundled-test-harness/assets/dashboard-delete-test-BvsASb8B.js +0 -163
  682. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-DEsd5ZzZ.js +0 -71
  683. package/bundled-test-harness/assets/dashboard-duplicate-test-BnR0sTgB.js +0 -222
  684. package/bundled-test-harness/assets/dashboard-get-started-test-DG4uUXLv.js +0 -246
  685. package/bundled-test-harness/assets/dashboard-pinned-cards-test-AoGGVRAS.js +0 -220
  686. package/bundled-test-harness/assets/dashboard-reindex-test-BN9a96Xp.js +0 -115
  687. package/bundled-test-harness/assets/dashboard-section-rail-test-B3OT9V2T.js +0 -169
  688. package/bundled-test-harness/assets/dashboard-state-test-BY0Zqrmj.js +0 -162
  689. package/bundled-test-harness/assets/dashboard-test-C13oNpWt.js +0 -545
  690. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DZIV4x5j.js +0 -62
  691. package/bundled-test-harness/assets/dashboard-workspace-test-CBnOQViI.js +0 -537
  692. package/bundled-test-harness/assets/dashboard-workspaces-section-test-KU8ZVOYp.js +0 -396
  693. package/bundled-test-harness/assets/data-file-def-preview-test-CI5gcdtK.js +0 -155
  694. package/bundled-test-harness/assets/date-time-fields-test-D2CpR_Pb.js +0 -359
  695. package/bundled-test-harness/assets/debug-message-test-Df1kHesw.js +0 -117
  696. package/bundled-test-harness/assets/declared-captures-test-hQ43zuox.js +0 -879
  697. package/bundled-test-harness/assets/delete-workspace-test-BhfMKsix.js +0 -102
  698. package/bundled-test-harness/assets/diffing-test-CHRh55mC.js +0 -210
  699. package/bundled-test-harness/assets/download-file-to-realm-test-CC1HURCi.js +0 -119
  700. package/bundled-test-harness/assets/editor-test-DkeCv28f.js +0 -688
  701. package/bundled-test-harness/assets/edits-BSJqtUXM.js +0 -651
  702. package/bundled-test-harness/assets/email-field-test-DihK0suO.js +0 -75
  703. package/bundled-test-harness/assets/enum-field-test-Gja3bzt5.js +0 -935
  704. package/bundled-test-harness/assets/error-display-test-GhYZu7cp.js +0 -343
  705. package/bundled-test-harness/assets/evaluate-module-test-D_t4CiUq.js +0 -91
  706. package/bundled-test-harness/assets/execute-atomic-operations-test-xtou8Zeg.js +0 -113
  707. package/bundled-test-harness/assets/externals-B02-sD_L.js +0 -4393
  708. package/bundled-test-harness/assets/fallback-banner-live-delete-test-DtxzNXdE.js +0 -207
  709. package/bundled-test-harness/assets/fallback-banner-test-BfmiQ_68.js +0 -53
  710. package/bundled-test-harness/assets/fallback-banner-test-DLtTdmvn.js +0 -225
  711. package/bundled-test-harness/assets/fallback-models-test-BxNJxhfd.js +0 -161
  712. package/bundled-test-harness/assets/fetch-card-json-test-DofKbzvC.js +0 -61
  713. package/bundled-test-harness/assets/field-configuration-test-SUoPaXWy.js +0 -551
  714. package/bundled-test-harness/assets/field-markdown-domain-test-BwtR0dPP.js +0 -616
  715. package/bundled-test-harness/assets/field-markdown-oversize-test-D8UJcBc3.js +0 -88
  716. package/bundled-test-harness/assets/field-markdown-primitives-test-D5_ZdoDO.js +0 -365
  717. package/bundled-test-harness/assets/field-markdown-specialized-test-Dpd5hs04.js +0 -534
  718. package/bundled-test-harness/assets/field-playground-test-CzhYzKGv.js +0 -894
  719. package/bundled-test-harness/assets/field-support-predicates-test-BSvVOFth.js +0 -167
  720. package/bundled-test-harness/assets/file-attachment-test-fM-yFedm.js +0 -796
  721. package/bundled-test-harness/assets/file-chooser-panel-test-CKj8YTdY.js +0 -153
  722. package/bundled-test-harness/assets/file-chooser-test-Bs8jFXqa.js +0 -504
  723. package/bundled-test-harness/assets/file-def-format-templates-test-CxrRoWoD.js +0 -380
  724. package/bundled-test-harness/assets/file-def-live-reload-test-X_8YEkve.js +0 -124
  725. package/bundled-test-harness/assets/file-def-menu-items-test-Dx879o_o.js +0 -138
  726. package/bundled-test-harness/assets/file-def-navigation-test-MMI_EEO1.js +0 -109
  727. package/bundled-test-harness/assets/file-def-serialization-test-B5lguBQD.js +0 -89
  728. package/bundled-test-harness/assets/file-def-test-Di9QWcrj.js +0 -216
  729. package/bundled-test-harness/assets/file-preview-live-reload-test-aqx93A7c.js +0 -310
  730. package/bundled-test-harness/assets/file-resource-primitives-test-a5abpcSB.js +0 -255
  731. package/bundled-test-harness/assets/file-tree-from-index-test-CnruGxJ8.js +0 -96
  732. package/bundled-test-harness/assets/file-tree-test-BCyWDdSE.js +0 -851
  733. package/bundled-test-harness/assets/file-view-model-test-BfpLa01Y.js +0 -346
  734. package/bundled-test-harness/assets/filedef-export-shape-test-CQ9XbrzS.js +0 -61
  735. package/bundled-test-harness/assets/film-CL1zj_bJ.js +0 -2
  736. package/bundled-test-harness/assets/film-Dq_quZ31.js +0 -13
  737. package/bundled-test-harness/assets/film-xbkQa060.js +0 -4074
  738. package/bundled-test-harness/assets/flac-audio-def-test-BmVp9dMx.js +0 -143
  739. package/bundled-test-harness/assets/focus-Dm4wkM72.js +0 -306
  740. package/bundled-test-harness/assets/font-metadata-extractor-test-OWEh9_MS.js +0 -415
  741. package/bundled-test-harness/assets/formatted-aibot-message-test-BpHsWpuV.js +0 -109
  742. package/bundled-test-harness/assets/formatted-user-message-test-DZW5TAr0.js +0 -43
  743. package/bundled-test-harness/assets/freestyle-test-D_uaPU_3.js +0 -17
  744. package/bundled-test-harness/assets/full-reindex-realm-test-C6vHL5kC.js +0 -101
  745. package/bundled-test-harness/assets/garbage-collection-test-D-Ao4t2n.js +0 -403
  746. package/bundled-test-harness/assets/general-test-PSGI8W0z.js +0 -923
  747. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-J-m-0E6W.js +0 -65
  748. package/bundled-test-harness/assets/generic-file-def-preview-test-BAsOhTYU.js +0 -71
  749. package/bundled-test-harness/assets/get-available-realm-identifiers-test-D5PBOr97.js +0 -47
  750. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test-NM9UURHE.js +0 -47
  751. package/bundled-test-harness/assets/get-default-writable-realm-test-BxXc9a3J.js +0 -54
  752. package/bundled-test-harness/assets/get-published-realms-test-C8TJEc4-.js +0 -71
  753. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-Dt8CB6lS.js +0 -54
  754. package/bundled-test-harness/assets/get-relationship-membership-state-test-9_8x3myJ.js +0 -1308
  755. package/bundled-test-harness/assets/get-user-system-card-test-k0UO-uba.js +0 -67
  756. package/bundled-test-harness/assets/gif-image-def-test-BWrqPGDX.js +0 -188
  757. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BgG8QI9E.js +0 -160
  758. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-BKOvNyCN.js +0 -74
  759. package/bundled-test-harness/assets/gts-file-def-test-BCRHwDeZ.js +0 -100
  760. package/bundled-test-harness/assets/head-format-preview-test-DnfUhniI.js +0 -158
  761. package/bundled-test-harness/assets/helpers-DklkegO_.js +0 -5
  762. package/bundled-test-harness/assets/host-mode-service-vOfN0smp.js +0 -232
  763. package/bundled-test-harness/assets/host-mode-test-CCCJFz6_.js +0 -831
  764. package/bundled-test-harness/assets/host-submode-test-CtCfbuPA.js +0 -1342
  765. package/bundled-test-harness/assets/html-component-test-CWyhb5ZX.js +0 -65
  766. package/bundled-test-harness/assets/html-def-test-Cb8C2lUx.js +0 -160
  767. package/bundled-test-harness/assets/html-meta-extractor-test-BHT9Rtir.js +0 -60
  768. package/bundled-test-harness/assets/hydratable-card-test-DpgpdesD.js +0 -426
  769. package/bundled-test-harness/assets/icon-button-ABCGVF3C.js +0 -67
  770. package/bundled-test-harness/assets/image-metadata-extractor-test-ClhPTouq.js +0 -1109
  771. package/bundled-test-harness/assets/index-changes-test-CgnVr3LH.js +0 -367
  772. package/bundled-test-harness/assets/index-query-engine-test-CQTwju5_.js +0 -2593
  773. package/bundled-test-harness/assets/index-writer-test-IoVOoZT2.js +0 -3040
  774. package/bundled-test-harness/assets/inspector-test-BN2Ieb77.js +0 -2058
  775. package/bundled-test-harness/assets/instance-filter-matcher-test-Bq-_Sy89.js +0 -788
  776. package/bundled-test-harness/assets/instantiate-card-test-DEeDTzFV.js +0 -164
  777. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DP6kOyJS.js +0 -475
  778. package/bundled-test-harness/assets/interact-submode-setup-B0_cHqH-.js +0 -566
  779. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-9uUD91Pw.js +0 -99
  780. package/bundled-test-harness/assets/invite-user-to-room-test-CcDA45Ac.js +0 -142
  781. package/bundled-test-harness/assets/invoke-card-operation-test-DmUtgueM.js +0 -333
  782. package/bundled-test-harness/assets/isolated-render-test-B2eXNHu6.js +0 -51
  783. package/bundled-test-harness/assets/job-scoped-doc-cache-test-DF9D7cOc.js +0 -181
  784. package/bundled-test-harness/assets/job-scoped-instance-residency-test-CSS8xUU5.js +0 -103
  785. package/bundled-test-harness/assets/jpg-image-def-test-voECMTht.js +0 -697
  786. package/bundled-test-harness/assets/json-file-def-test-8Y4KLjUC.js +0 -95
  787. package/bundled-test-harness/assets/key-notices-badge-test-d1mYqx0e.js +0 -155
  788. package/bundled-test-harness/assets/key-readiness-test-BtCg7PCk.js +0 -190
  789. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-CyCMbJnN.js +0 -398
  790. package/bundled-test-harness/assets/linksto-error-sentinel-test-BDW572-v.js +0 -238
  791. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test-B4wM97hD.js +0 -354
  792. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-BhJmtJ0_.js +0 -303
  793. package/bundled-test-harness/assets/linksto-sentinel-reload-test-BpBQ5V_i.js +0 -197
  794. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test-pkBBl4e9.js +0 -260
  795. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-Bb6wjUdD.js +0 -196
  796. package/bundled-test-harness/assets/lint-and-fix-test-CcMLn-co.js +0 -51
  797. package/bundled-test-harness/assets/live-test-AyBnq7BX.js +0 -2
  798. package/bundled-test-harness/assets/live-test-CgnAcIDw.js +0 -100
  799. package/bundled-test-harness/assets/load-default-skills-test-BIOwtx0Y.js +0 -74
  800. package/bundled-test-harness/assets/loader-parallel-prefetch-test-D5_oRSER.js +0 -257
  801. package/bundled-test-harness/assets/loader-test-DSc_jR1c.js +0 -482
  802. package/bundled-test-harness/assets/loading-test-8pldx7S-.js +0 -63
  803. package/bundled-test-harness/assets/m4a-audio-def-test-BDI5apzM.js +0 -190
  804. package/bundled-test-harness/assets/main-5kHyCkdm.js +0 -5
  805. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-Wud0s7WZ.js +0 -470
  806. package/bundled-test-harness/assets/markdown-embed-chooser-test-DVzzS-0C.js +0 -334
  807. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-B5W_iqsi.js +0 -447
  808. package/bundled-test-harness/assets/markdown-embed-preview-test-CZF_s0fB.js +0 -368
  809. package/bundled-test-harness/assets/markdown-fallback-test-fT6BS4W7.js +0 -316
  810. package/bundled-test-harness/assets/markdown-file-def-test-B1aTzazR.js +0 -380
  811. package/bundled-test-harness/assets/markdown-helpers-test-gNKZf7Mw.js +0 -188
  812. package/bundled-test-harness/assets/markdown-highlighting-test-Du5_CQmD.js +0 -244
  813. package/bundled-test-harness/assets/markdown-preview-h-_aJhRc.js +0 -72
  814. package/bundled-test-harness/assets/markdown-preview-test-DJvoVsXw.js +0 -238
  815. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-VwJi3Paj.js +0 -146
  816. package/bundled-test-harness/assets/markdown-skill-search-test-ysCdf0xM.js +0 -80
  817. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-K2JuMy36.js +0 -63
  818. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-CkdL_-os.js +0 -300
  819. package/bundled-test-harness/assets/matrix-service-personal-realm-test-Dy1DultK.js +0 -125
  820. package/bundled-test-harness/assets/matrix-service-realm-servers-test-DHDDKuEg.js +0 -55
  821. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-DcTbZpMl.js +0 -132
  822. package/bundled-test-harness/assets/matrix-service-relogin-test-D3NQktoa.js +0 -59
  823. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-6CAflWOA.js +0 -35
  824. package/bundled-test-harness/assets/menu-kUSaJIPq.js +0 -3562
  825. package/bundled-test-harness/assets/message-service-subscription-test-DaQdgDWi.js +0 -110
  826. package/bundled-test-harness/assets/message-service-test-BsGEgM_m.js +0 -144
  827. package/bundled-test-harness/assets/message-tool-test-BB_4kw1V.js +0 -33
  828. package/bundled-test-harness/assets/midi-audio-def-test-BbbkFjqf.js +0 -182
  829. package/bundled-test-harness/assets/migrate-skill-test-X9xImDuq.js +0 -161
  830. package/bundled-test-harness/assets/mini-AwF31elJ.js +0 -1404
  831. package/bundled-test-harness/assets/mini-card-chooser-test-BZtrEiWu.js +0 -272
  832. package/bundled-test-harness/assets/mini-file-chooser-test-MIHW3kCI.js +0 -201
  833. package/bundled-test-harness/assets/mock-matrix-Dd8k0DNa.js +0 -15107
  834. package/bundled-test-harness/assets/mock-matrix-DhPN_34j.js +0 -2
  835. package/bundled-test-harness/assets/modal-LTh3_oHK.js +0 -322
  836. package/bundled-test-harness/assets/model-cost-tier-test-h1IkU9mp.js +0 -174
  837. package/bundled-test-harness/assets/model-file-extract-test-ntSo0wZF.js +0 -206
  838. package/bundled-test-harness/assets/module-transpile-cache-test-CDeRaaeP.js +0 -67
  839. package/bundled-test-harness/assets/monaco-test-C0Fa744D.js +0 -100
  840. package/bundled-test-harness/assets/mp3-audio-def-test-B4j4qR9H.js +0 -133
  841. package/bundled-test-harness/assets/multiple-stacks-test-BhA25ywL.js +0 -208
  842. package/bundled-test-harness/assets/nested-query-field-render-test-S9Y8YNKB.js +0 -249
  843. package/bundled-test-harness/assets/no-stacks-test-B7VciWyg.js +0 -48
  844. package/bundled-test-harness/assets/number-field-test-CS74lDPN.js +0 -184
  845. package/bundled-test-harness/assets/office-file-def-test-2cKc1pmd.js +0 -263
  846. package/bundled-test-harness/assets/office-metadata-extractor-test-DC8Fo-OW.js +0 -218
  847. package/bundled-test-harness/assets/office-poster-capture-test-Ba0_5UrT.js +0 -203
  848. package/bundled-test-harness/assets/ogg-audio-def-test-CIPQ1d4w.js +0 -196
  849. package/bundled-test-harness/assets/open-create-listing-modal-test-bmQkY5Zl.js +0 -131
  850. package/bundled-test-harness/assets/open-image-in-new-tab-test-DBD7_vMH.js +0 -52
  851. package/bundled-test-harness/assets/open-secure-window-test-BgeuYAqz.js +0 -253
  852. package/bundled-test-harness/assets/open-workspace-test-DRHGljV0.js +0 -46
  853. package/bundled-test-harness/assets/operation-lowering-test-CH1c0pSH.js +0 -2957
  854. package/bundled-test-harness/assets/operations-invocation-test-B1YkCLrv.js +0 -523
  855. package/bundled-test-harness/assets/operations-optimistic-test-DAbtOwsC.js +0 -203
  856. package/bundled-test-harness/assets/operations-query-test-9p1ZIDe-.js +0 -459
  857. package/bundled-test-harness/assets/operations-store-reconciliation-test-D0EQh3w2.js +0 -406
  858. package/bundled-test-harness/assets/operations-test-BQhlrfe3.js +0 -2518
  859. package/bundled-test-harness/assets/operator-mode-acceptance-test-DtHnonEb.js +0 -1195
  860. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DQUxZxaq.js +0 -1036
  861. package/bundled-test-harness/assets/operator-mode-links-test-BJ26HllS.js +0 -797
  862. package/bundled-test-harness/assets/operator-mode-test-DIPDI0qt.js +0 -696
  863. package/bundled-test-harness/assets/operator-mode-ui-test-CfA-fAh4.js +0 -1045
  864. package/bundled-test-harness/assets/overlay-DecPh3nt.js +0 -123
  865. package/bundled-test-harness/assets/overlay-menu-items-test-C6XqjLtu.js +0 -331
  866. package/bundled-test-harness/assets/overlays-Ctp8ePzZ.js +0 -75
  867. package/bundled-test-harness/assets/overlays-CzWpSg5T.js +0 -2
  868. package/bundled-test-harness/assets/overlays-detached-element-test-DvL_8Bb5.js +0 -56
  869. package/bundled-test-harness/assets/panel-CImumikB.js +0 -15124
  870. package/bundled-test-harness/assets/past-sessions-test-N6riGN_I.js +0 -321
  871. package/bundled-test-harness/assets/patch-fields-test-D30_-KwQ.js +0 -1014
  872. package/bundled-test-harness/assets/patch-instance-test-C5rGscZq.js +0 -348
  873. package/bundled-test-harness/assets/pdf-file-def-test-DtiqGRvZ.js +0 -111
  874. package/bundled-test-harness/assets/pdf-metadata-extractor-test-FU02KmdV.js +0 -130
  875. package/bundled-test-harness/assets/permission-checking-realm-test-DqdNJDwU.js +0 -306
  876. package/bundled-test-harness/assets/persist-module-inspector-view-test-BHOAgPVy.js +0 -60
  877. package/bundled-test-harness/assets/persist-scroll-position-test-qtmS518r.js +0 -254
  878. package/bundled-test-harness/assets/phone-number-field-test-DhdaM7uL.js +0 -73
  879. package/bundled-test-harness/assets/pill-menu-test-C9Mrrepl.js +0 -60
  880. package/bundled-test-harness/assets/plate-9n-sXyCw.js +0 -41
  881. package/bundled-test-harness/assets/plate-BnZcAk-_.js +0 -2
  882. package/bundled-test-harness/assets/player-Cu5b4LEJ.js +0 -82
  883. package/bundled-test-harness/assets/player-unk2mkxV.js +0 -2
  884. package/bundled-test-harness/assets/playground-BwA8wFGK.js +0 -58
  885. package/bundled-test-harness/assets/plural-field-components-test-CFNQKETg.js +0 -198
  886. package/bundled-test-harness/assets/png-image-def-test-DG5Vhlqb.js +0 -266
  887. package/bundled-test-harness/assets/policy-audit-confirmation-test-yfKU47LR.js +0 -155
  888. package/bundled-test-harness/assets/policy-scoped-search-test-BjQRDYqR.js +0 -339
  889. package/bundled-test-harness/assets/prerender-file-extract-test-CEU4SaAZ.js +0 -346
  890. package/bundled-test-harness/assets/prerender-html-test-CGB3ClCS.js +0 -670
  891. package/bundled-test-harness/assets/prerender-meta-test-xqc4fW_0.js +0 -614
  892. package/bundled-test-harness/assets/prerender-module-test-CI1TmZw-.js +0 -409
  893. package/bundled-test-harness/assets/prerender-persistence-block-test-Da0dJO_N.js +0 -124
  894. package/bundled-test-harness/assets/prerender-pre-model-error-test-BVLyhk8R.js +0 -61
  895. package/bundled-test-harness/assets/prerender-serialize-cycle-test-glJFfxHU.js +0 -134
  896. package/bundled-test-harness/assets/prerendered-html-read-test-Mp4L0VHQ.js +0 -191
  897. package/bundled-test-harness/assets/pretui-components-test-BBpA9UnA.js +0 -991
  898. package/bundled-test-harness/assets/pretui-components-test-BqFq7rw_.css +0 -730
  899. package/bundled-test-harness/assets/preview-format-test-C55Bwcur.js +0 -103
  900. package/bundled-test-harness/assets/preview-test-CTAhRGU8.js +0 -474
  901. package/bundled-test-harness/assets/process-card-test-UjqpuxB7.js +0 -94
  902. package/bundled-test-harness/assets/profile-settings-modal-C8bCgTMK.js +0 -989
  903. package/bundled-test-harness/assets/publish-realm-ixUB4FPK.js +0 -82
  904. package/bundled-test-harness/assets/publish-realm-test-CrrsdL4W.js +0 -210
  905. package/bundled-test-harness/assets/query-field-barrier-test-DjivFE93.js +0 -113
  906. package/bundled-test-harness/assets/query-field-error-sentinel-test-0HwnV4Mw.js +0 -201
  907. package/bundled-test-harness/assets/query-field-membership-status-test-C8yTTBkc.js +0 -323
  908. package/bundled-test-harness/assets/query-field-page-optin-test-D4l_GcII.js +0 -126
  909. package/bundled-test-harness/assets/query-field-schema-test-DDbcNNm5.js +0 -231
  910. package/bundled-test-harness/assets/query-field-search-throttle-test-CXp50Ax0.js +0 -154
  911. package/bundled-test-harness/assets/query-field-stale-prerender-test-DErzt-Cv.js +0 -152
  912. package/bundled-test-harness/assets/query-fields-test-Dz67fdSl.js +0 -535
  913. package/bundled-test-harness/assets/quick-look-test-B1ijDsh_.js +0 -139
  914. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-DJxZ16H_.js +0 -91
  915. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-BoRQkZ8c.js +0 -45
  916. package/bundled-test-harness/assets/read-source-test-Bl-NjchO.js +0 -67
  917. package/bundled-test-harness/assets/read-text-file-test-CP37CZoo.js +0 -124
  918. package/bundled-test-harness/assets/realm-CaK5mkT-.js +0 -2852
  919. package/bundled-test-harness/assets/realm-api-keys-BNUFWbGR.js +0 -579
  920. package/bundled-test-harness/assets/realm-api-keys-CkshxhXC.js +0 -2
  921. package/bundled-test-harness/assets/realm-api-keys-test-BP8xifjn.js +0 -109
  922. package/bundled-test-harness/assets/realm-api-keys-test-CwdK9YXp.js +0 -588
  923. package/bundled-test-harness/assets/realm-config-iKwE3Htp.js +0 -833
  924. package/bundled-test-harness/assets/realm-config-policy-standing-test-BgVEIDnB.js +0 -290
  925. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-BoJoKzmX.js +0 -274
  926. package/bundled-test-harness/assets/realm-config-settings-test-Kxw-GHye.js +0 -187
  927. package/bundled-test-harness/assets/realm-field-test-CdGOxrFb.js +0 -100
  928. package/bundled-test-harness/assets/realm-indexing-test-CHtsBV2b.js +0 -4380
  929. package/bundled-test-harness/assets/realm-policy-fitted-test--DhNZSdC.js +0 -206
  930. package/bundled-test-harness/assets/realm-policy-test-D7714iVa.js +0 -1141
  931. package/bundled-test-harness/assets/realm-querying-test-Cj1ekZ0H.js +0 -1067
  932. package/bundled-test-harness/assets/realm-server-form-agnostic-test-CZFPNJfD.js +0 -96
  933. package/bundled-test-harness/assets/realm-server-subscriber-test-C86WmBp0.js +0 -46
  934. package/bundled-test-harness/assets/realm-service-info-test-CdgcwKDR.js +0 -67
  935. package/bundled-test-harness/assets/realm-test-DPoLsvKz.js +0 -2364
  936. package/bundled-test-harness/assets/realm-token-refresh-test-Ch35Siwi.js +0 -153
  937. package/bundled-test-harness/assets/realm-url-tooltip-test-x8xWOENK.js +0 -78
  938. package/bundled-test-harness/assets/reasoning-test-BxpE8Jvf.js +0 -221
  939. package/bundled-test-harness/assets/recent-files-test-DTmEzPLq.js +0 -450
  940. package/bundled-test-harness/assets/reindex-realm-test-BQ8KULn4.js +0 -117
  941. package/bundled-test-harness/assets/relationship-loading-state-test-BJoArPWf.js +0 -290
  942. package/bundled-test-harness/assets/remix-card-test-DsTA1KoG.js +0 -58
  943. package/bundled-test-harness/assets/rendered-markdown-DvukulDO.js +0 -292
  944. package/bundled-test-harness/assets/rendered-markdown-test-DxGptXSV.js +0 -587
  945. package/bundled-test-harness/assets/resident-instance-reuse-test-ZWnVu8uj.js +0 -82
  946. package/bundled-test-harness/assets/result-tile-CPyI6Vmv.js +0 -144
  947. package/bundled-test-harness/assets/rich-markdown-field-test-CdygoXIO.js +0 -1647
  948. package/bundled-test-harness/assets/room-message-test-D3NfMqH0.js +0 -484
  949. package/bundled-test-harness/assets/run-D_Px28eF.js +0 -3956
  950. package/bundled-test-harness/assets/run-realm-code-qWCZxmJ7.js +0 -2964
  951. package/bundled-test-harness/assets/run-realm-code-test-UzyeEJq6.js +0 -3844
  952. package/bundled-test-harness/assets/sanitize-module-list-test-Babq44bP.js +0 -85
  953. package/bundled-test-harness/assets/save-card-skip-index-wait-test-BcELXlQ_.js +0 -89
  954. package/bundled-test-harness/assets/schema-editor-test-CEvruZbt.js +0 -785
  955. package/bundled-test-harness/assets/schema-generation-test-hYAMdCrn.js +0 -28
  956. package/bundled-test-harness/assets/scrolling-test-DVIsh-_1.js +0 -412
  957. package/bundled-test-harness/assets/search-adorn-test-CkVhqFd0.js +0 -136
  958. package/bundled-test-harness/assets/search-and-choose-test-DUhOB3FV.js +0 -154
  959. package/bundled-test-harness/assets/search-correlation-id-test-Drn4r26N.js +0 -139
  960. package/bundled-test-harness/assets/search-entries-result-test-DTCRJ_wc.js +0 -234
  961. package/bundled-test-harness/assets/search-entries-test-CE0B47pw.js +0 -1486
  962. package/bundled-test-harness/assets/search-entries-tool-test-C4aG0ckM.js +0 -504
  963. package/bundled-test-harness/assets/search-google-images-test-LyhcB2f3.js +0 -166
  964. package/bundled-test-harness/assets/search-results-D4pSne0x.js +0 -266
  965. package/bundled-test-harness/assets/search-results-test-CRZHhqhn.js +0 -578
  966. package/bundled-test-harness/assets/search-selection-menu-test-B7Y3E_nj.js +0 -108
  967. package/bundled-test-harness/assets/search-sheet-files-test-C2y534g8.js +0 -126
  968. package/bundled-test-harness/assets/search-sheet-persistence-test-DePC59Bk.js +0 -131
  969. package/bundled-test-harness/assets/search-test-Dy8NxFkU.js +0 -2249
  970. package/bundled-test-harness/assets/search-tool-test-lctDaMH3.js +0 -156
  971. package/bundled-test-harness/assets/searchable-option-test-CE64M8oM.js +0 -322
  972. package/bundled-test-harness/assets/searchable-search-doc-test-C6u3mVvT.js +0 -1271
  973. package/bundled-test-harness/assets/section-rail-B_UQX00B.js +0 -113
  974. package/bundled-test-harness/assets/section-rail-test-DIda7MIw.js +0 -256
  975. package/bundled-test-harness/assets/secure-sign-in-CqqqfQG8.js +0 -174
  976. package/bundled-test-harness/assets/secure-sign-in-test-DimbVr_W.js +0 -373
  977. package/bundled-test-harness/assets/segmented-control-iePxSdTS.js +0 -173
  978. package/bundled-test-harness/assets/select-tNs6_xwW.js +0 -175
  979. package/bundled-test-harness/assets/send-ai-assistant-message-test-2GVrMF9Z.js +0 -52
  980. package/bundled-test-harness/assets/send-bot-trigger-event-test-B_3dKfGN.js +0 -56
  981. package/bundled-test-harness/assets/send-request-via-proxy-test-_clNWyYc.js +0 -380
  982. package/bundled-test-harness/assets/sending-test-DCPFXUVg.js +0 -659
  983. package/bundled-test-harness/assets/serialization-rri-form-audit-test-BI0zCs8Y.js +0 -136
  984. package/bundled-test-harness/assets/serialization-test-bjdtVlZL.js +0 -8758
  985. package/bundled-test-harness/assets/set-user-system-card-test-BUv1vL08.js +0 -59
  986. package/bundled-test-harness/assets/setup-BW1mmC7C.js +0 -772
  987. package/bundled-test-harness/assets/setup-DsIcFT-T.js +0 -2
  988. package/bundled-test-harness/assets/shared-link-target-reuse-test-9NeJEjkb.js +0 -207
  989. package/bundled-test-harness/assets/show-card-test-mfyLwusD.js +0 -365
  990. package/bundled-test-harness/assets/signed-capture-link-test-BOtKNCAM.js +0 -132
  991. package/bundled-test-harness/assets/single-stack-test-B4MGjaLk.js +0 -652
  992. package/bundled-test-harness/assets/skills-test-BuP-Yzk1.js +0 -648
  993. package/bundled-test-harness/assets/skip-boot-index-guard-test-Cmrx2-K7.js +0 -46
  994. package/bundled-test-harness/assets/spec-test-BhZDdhVQ.js +0 -1077
  995. package/bundled-test-harness/assets/spinner-CpIBUG9m.js +0 -49
  996. package/bundled-test-harness/assets/src-DGHttmW-.js +0 -216
  997. package/bundled-test-harness/assets/src-DaNDSbp7.js +0 -5
  998. package/bundled-test-harness/assets/stick-to-bottom-resize-test-Dpy3OVum.js +0 -56
  999. package/bundled-test-harness/assets/store-add-test-_IYS8o74.js +0 -50
  1000. package/bundled-test-harness/assets/store-module-rebuild-test-B5VMaICy.js +0 -454
  1001. package/bundled-test-harness/assets/store-search-test-C2VZabrH.js +0 -175
  1002. package/bundled-test-harness/assets/store-test-D6PObxoD.js +0 -3672
  1003. package/bundled-test-harness/assets/structured-theme-test-BHjVeMf-.js +0 -377
  1004. package/bundled-test-harness/assets/summarize-session-test-BFtTuhe0.js +0 -172
  1005. package/bundled-test-harness/assets/svg-image-def-test-BL6lkWUX.js +0 -167
  1006. package/bundled-test-harness/assets/switch-submode-test-6Uv3bZMl.js +0 -168
  1007. package/bundled-test-harness/assets/sync-openrouter-models-test-Dp9E05tL.js +0 -97
  1008. package/bundled-test-harness/assets/test-support-DYm8XZ0E.js +0 -3
  1009. package/bundled-test-harness/assets/test-support-DfnhiIMV.js +0 -99
  1010. package/bundled-test-harness/assets/tests-CZk0Iag2.js +0 -3596
  1011. package/bundled-test-harness/assets/text-file-def-test-CHdC0yIU.js +0 -94
  1012. package/bundled-test-harness/assets/text-input-validator-test-B9ZR8XPU.js +0 -156
  1013. package/bundled-test-harness/assets/text-suggestion-test-CGLspKFQ.js +0 -340
  1014. package/bundled-test-harness/assets/theme-card-test-CXZvSEvG.js +0 -621
  1015. package/bundled-test-harness/assets/theme-dashboard-nav-test-CkEE0ILk.js +0 -196
  1016. package/bundled-test-harness/assets/theme-scheme-island-test-URXTjipF.js +0 -264
  1017. package/bundled-test-harness/assets/titles-C6enAdIv.js +0 -2
  1018. package/bundled-test-harness/assets/titles-Dft1HoUT.js +0 -52
  1019. package/bundled-test-harness/assets/to-device-streaming-test-D33ZOc9o.js +0 -163
  1020. package/bundled-test-harness/assets/token-usage-test-BHQlU4J4.js +0 -160
  1021. package/bundled-test-harness/assets/tools-CrudqfS3.js +0 -774
  1022. package/bundled-test-harness/assets/tools-calling-test-jo7IREau.js +0 -200
  1023. package/bundled-test-harness/assets/tools-test-D1wMfUa0.js +0 -1624
  1024. package/bundled-test-harness/assets/tools-test-Dn1LYsXp.js +0 -3204
  1025. package/bundled-test-harness/assets/tooltip-8Wyz4IIn.css +0 -68
  1026. package/bundled-test-harness/assets/tooltip-CqwLzRz5.js +0 -134
  1027. package/bundled-test-harness/assets/transform-cards-test-BPhwPFtp.js +0 -341
  1028. package/bundled-test-harness/assets/ts-file-def-preview-test-Bq3zTgw8.js +0 -95
  1029. package/bundled-test-harness/assets/ts-file-def-test-GLswMl7O.js +0 -92
  1030. package/bundled-test-harness/assets/ttf-font-def-test-DQulvUWs.js +0 -206
  1031. package/bundled-test-harness/assets/turn-settling-test-BspmOUQP.js +0 -160
  1032. package/bundled-test-harness/assets/turn-summary-9A8nvC0-.js +0 -1039
  1033. package/bundled-test-harness/assets/unpublish-realm-test-SkYPEhDz.js +0 -102
  1034. package/bundled-test-harness/assets/update-room-skills-test-cTxb-WU6.js +0 -240
  1035. package/bundled-test-harness/assets/use-ai-assistant-test-uaqW1T_A.js +0 -384
  1036. package/bundled-test-harness/assets/user-message-BudkIP-3.js +0 -262
  1037. package/bundled-test-harness/assets/validate-realm-test-DxrGgH9n.js +0 -67
  1038. package/bundled-test-harness/assets/video-metadata-extractor-test-B2pe-Iqa.js +0 -520
  1039. package/bundled-test-harness/assets/view-visually-test-PNon6fUo.js +0 -335
  1040. package/bundled-test-harness/assets/virtual-network-reset-test-uYJLaQHf.js +0 -96
  1041. package/bundled-test-harness/assets/wav-audio-def-test-F4OrFFR4.js +0 -160
  1042. package/bundled-test-harness/assets/webp-image-def-test-B0a_-Vya.js +0 -226
  1043. package/bundled-test-harness/assets/workspace-Cyftysy9.js +0 -440
  1044. package/bundled-test-harness/assets/workspace-a11y-test-sKiPDcbl.js +0 -197
  1045. package/bundled-test-harness/assets/workspace-actions-BuawjFmZ.js +0 -561
  1046. package/bundled-test-harness/assets/workspace-behavior-test-CKa-pb3T.js +0 -338
  1047. package/bundled-test-harness/assets/workspace-delete-multiple-test-Dt2weG5R.js +0 -212
  1048. package/bundled-test-harness/assets/workspace-delete-summary-test-CkqgFqZ8.js +0 -63
  1049. package/bundled-test-harness/assets/workspace-hosting-test-Ci7EEtHP.js +0 -138
  1050. package/bundled-test-harness/assets/workspace-indexing-test-BPVxxY6W.js +0 -71
  1051. package/bundled-test-harness/assets/workspace-test-CWr7vFbg.js +0 -385
  1052. package/bundled-test-harness/assets/workspace-test-INNpQovc.js +0 -51
  1053. package/bundled-test-harness/assets/workspace-timestamp-labels-test-CigQb5wr.js +0 -68
  1054. package/bundled-test-harness/assets/workspace-unit-test-BwVKpuXT.js +0 -122
  1055. package/bundled-test-harness/assets/write-binary-file-test-BKP3gv1k.js +0 -124
  1056. package/bundled-test-harness/assets/write-text-file-test-B6ijTKTa.js +0 -191
  1057. package/bundled-test-harness/assets/zip-archive-test-C-PBzkTn.js +0 -285
  1058. package/bundled-test-harness/assets/zip-file-def-test-FyCzJT-9.js +0 -164
@@ -1,2249 +0,0 @@
1
- import { s as __toESM } from "./chunk-Rp0pCe6z.js";
2
- import { r as initializeDeferredDecorator, t as decorateFieldV2 } from "./runtime--fcdnjmJ-BoCBNIsz.js";
3
- import { Br as testRealmURL, Lr as testRRI, Qo as isFileDefInstance, Rc as Deferred, bt as buildQuerySearchURL, gi as SearchBoundError, hi as SEARCH_CONCURRENCY_CAP, mi as QUERY_FIELD_SEARCH_CONCURRENCY_CAP } from "./runtime-common-BTaLJEw-.js";
4
- import { T as rri } from "./paths-C9-NYXnM.js";
5
- import { D as baseRRI, O as baseRealm } from "./constants-Icc0nFW-.js";
6
- import { t as config } from "./environment-DIUJgBKt.js";
7
- import { r as setOwner } from "./owner-CP0__uFm.js";
8
- import { t as getOwner } from "./owner-BT6cj890.js";
9
- import { Tn as destroy } from "./cache-DtDz7X5V-Wn8jRDfL.js";
10
- import { ht as run } from "./service-LFpJ8EEP.js";
11
- import "./destroyable-mdLYRn_o.js";
12
- import { t as SearchResource } from "./search-C8UKYVZ8.js";
13
- import { n as RealmService } from "./realm-CaK5mkT-.js";
14
- import { M as waitUntil, T as settled } from "./dist-BOAdzfkP.js";
15
- import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
16
- import { F as setupLocalIndexing, L as setupRealmCacheTeardown, P as setupIntegrationTestRealm, Z as withCachedRealmSetup, lt as setupRenderingTest, t as setupMockMatrix } from "./mock-matrix-Dd8k0DNa.js";
17
- import { r as getService } from "./dist-CPfIHBla.js";
18
- //#region tests/integration/resources/search-test.ts
19
- var import_qunit = /* @__PURE__ */ __toESM(require_qunit());
20
- var StubRealmService = class extends RealmService {
21
- realmOf(_input) {
22
- return testRealmURL;
23
- }
24
- };
25
- function getSearchResourceForTest(owner, args) {
26
- return SearchResource.from(owner, args);
27
- }
28
- async function waitForLiveRefresh(search, isRefreshed, expectation) {
29
- let waitStart = performance.now();
30
- try {
31
- await waitUntil(isRefreshed, { timeout: 1e4 });
32
- } catch (e) {
33
- throw new Error(`live search did not reach ${expectation} ${Math.round(performance.now() - waitStart)} ms after the write; it holds ${JSON.stringify(search.instances.map((i) => i.id))}, isLoading=${search.isLoading}: ${e}`);
34
- }
35
- }
36
- (0, import_qunit.module)(`Integration | search resource`, function(hooks) {
37
- let loader;
38
- let loaderService;
39
- let storeService;
40
- let realm;
41
- let cardApi;
42
- let string;
43
- setupRenderingTest(hooks);
44
- hooks.beforeEach(function() {
45
- getOwner(this).register("service:realm", StubRealmService);
46
- loaderService = getService("loader-service");
47
- loader = loaderService.loader;
48
- storeService = getService("store");
49
- });
50
- setupLocalIndexing(hooks);
51
- setupRealmCacheTeardown(hooks);
52
- let mockMatrixUtils = setupMockMatrix(hooks, {
53
- loggedInAs: "@testuser:localhost",
54
- activeRealms: [baseRealm.url, testRealmURL],
55
- autostart: true
56
- });
57
- hooks.beforeEach(async function() {
58
- cardApi = await loader.import("@cardstack/base/card-api");
59
- string = await loader.import("@cardstack/base/string");
60
- let { contains, field, CardDef, FieldDef, linksTo } = cardApi;
61
- let { default: StringField } = string;
62
- class PersonField extends FieldDef {
63
- static {
64
- decorateFieldV2(this.prototype, "firstName", [field], function() {
65
- return contains(StringField);
66
- });
67
- }
68
- #firstName = (initializeDeferredDecorator(this, "firstName"), void 0);
69
- static {
70
- decorateFieldV2(this.prototype, "lastName", [field], function() {
71
- return contains(StringField);
72
- });
73
- }
74
- #lastName = (initializeDeferredDecorator(this, "lastName"), void 0);
75
- }
76
- class Article extends CardDef {
77
- static displayName = "Article";
78
- static {
79
- decorateFieldV2(this.prototype, "author", [field], function() {
80
- return contains(PersonField);
81
- });
82
- }
83
- #author = (initializeDeferredDecorator(this, "author"), void 0);
84
- }
85
- class Post extends CardDef {
86
- static displayName = "Post";
87
- static {
88
- decorateFieldV2(this.prototype, "article", [field], function() {
89
- return linksTo(Article);
90
- });
91
- }
92
- #article = (initializeDeferredDecorator(this, "article"), void 0);
93
- static {
94
- decorateFieldV2(this.prototype, "cardTitle", [field], function() {
95
- return contains(StringField);
96
- });
97
- }
98
- #cardTitle = (initializeDeferredDecorator(this, "cardTitle"), void 0);
99
- }
100
- class BlogPost extends Post {
101
- static displayName = "BlogPost";
102
- static {
103
- decorateFieldV2(this.prototype, "article", [field], function() {
104
- return linksTo(Article);
105
- });
106
- }
107
- #article = (initializeDeferredDecorator(this, "article"), void 0);
108
- }
109
- class Book extends CardDef {
110
- static displayName = "Book";
111
- static {
112
- decorateFieldV2(this.prototype, "author", [field], function() {
113
- return contains(PersonField);
114
- });
115
- }
116
- #author = (initializeDeferredDecorator(this, "author"), void 0);
117
- }
118
- const sampleCards = {
119
- "card-1.json": { data: {
120
- type: "card",
121
- attributes: {
122
- cardTitle: "Card 1",
123
- cardDescription: "Sample post",
124
- author: {
125
- firstName: "Cardy",
126
- lastName: "Stackington Jr. III"
127
- },
128
- views: 0
129
- },
130
- meta: { adoptsFrom: {
131
- module: testRRI("article"),
132
- name: "Article"
133
- } }
134
- } },
135
- "card-2.json": { data: {
136
- type: "card",
137
- attributes: {
138
- author: {
139
- firstName: "Cardy",
140
- lastName: "Jones"
141
- },
142
- editions: 1,
143
- pubDate: "2023-09-01"
144
- },
145
- meta: { adoptsFrom: {
146
- module: testRRI("book"),
147
- name: "Book"
148
- } }
149
- } },
150
- "cards/1.json": { data: {
151
- type: "card",
152
- attributes: {
153
- cardTitle: "Card 1",
154
- cardDescription: "Sample post",
155
- author: {
156
- firstName: "Carl",
157
- lastName: "Stack",
158
- posts: 1
159
- },
160
- createdAt: new Date(2022, 7, 1),
161
- views: 10
162
- },
163
- meta: { adoptsFrom: {
164
- module: testRRI("post"),
165
- name: "Post"
166
- } }
167
- } },
168
- "cards/2.json": { data: {
169
- type: "card",
170
- attributes: {
171
- cardTitle: "Card 2",
172
- cardDescription: "Sample post",
173
- author: {
174
- firstName: "Carl",
175
- lastName: "Deck",
176
- posts: 3
177
- },
178
- createdAt: new Date(2022, 7, 22),
179
- views: 5
180
- },
181
- meta: { adoptsFrom: {
182
- module: testRRI("article"),
183
- name: "Article"
184
- } }
185
- } },
186
- "books/1.json": { data: {
187
- type: "card",
188
- attributes: {
189
- author: {
190
- firstName: "Mango",
191
- lastName: "Abdel-Rahman"
192
- },
193
- editions: 1,
194
- pubDate: "2022-07-01"
195
- },
196
- meta: { adoptsFrom: {
197
- module: testRRI("book"),
198
- name: "Book"
199
- } }
200
- } },
201
- "books/2.json": { data: {
202
- type: "card",
203
- attributes: {
204
- author: {
205
- firstName: "Van Gogh",
206
- lastName: "Abdel-Rahman"
207
- },
208
- editions: 0,
209
- pubDate: "2023-08-01"
210
- },
211
- meta: { adoptsFrom: {
212
- module: testRRI("book"),
213
- name: "Book"
214
- } }
215
- } },
216
- "books/3.json": { data: {
217
- type: "card",
218
- attributes: {
219
- author: {
220
- firstName: "Jackie",
221
- lastName: "Aguilar"
222
- },
223
- editions: 2,
224
- pubDate: "2022-08-01"
225
- },
226
- meta: { adoptsFrom: {
227
- module: testRRI("book"),
228
- name: "Book"
229
- } }
230
- } },
231
- "spec-1.json": { data: {
232
- type: "card",
233
- attributes: {
234
- cardTitle: "Post",
235
- cardDescription: "A card that represents a blog post",
236
- specType: "card",
237
- ref: {
238
- module: testRRI("post"),
239
- name: "Post"
240
- }
241
- },
242
- meta: { adoptsFrom: {
243
- module: baseRRI("spec"),
244
- name: "Spec"
245
- } }
246
- } },
247
- "spec-2.json": { data: {
248
- type: "card",
249
- attributes: {
250
- cardTitle: "Article",
251
- cardDescription: "A card that represents an online article ",
252
- specType: "card",
253
- ref: {
254
- module: testRRI("article"),
255
- name: "Article"
256
- }
257
- },
258
- meta: { adoptsFrom: {
259
- module: baseRRI("spec"),
260
- name: "Spec"
261
- } }
262
- } }
263
- };
264
- await withCachedRealmSetup(async () => {
265
- ({realm} = await setupIntegrationTestRealm({
266
- mockMatrixUtils,
267
- contents: {
268
- "person-field.gts": { PersonField },
269
- "article.gts": { Article },
270
- "blog-post.gts": { BlogPost },
271
- "book.gts": { Book },
272
- "post.gts": { Post },
273
- ...sampleCards,
274
- "files/hello.txt": "Hello world",
275
- "files/notes.txt": "Some notes"
276
- }
277
- }));
278
- });
279
- });
280
- (0, import_qunit.test)(`can search for card instances by using the 'eq' filter`, async function(assert) {
281
- let query = { filter: {
282
- on: {
283
- module: testRRI("book"),
284
- name: "Book"
285
- },
286
- eq: { "author.lastName": "Jones" }
287
- } };
288
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
289
- query,
290
- realms: [testRealmURL],
291
- isLive: false,
292
- isAutoSaved: false,
293
- storeService,
294
- owner: this.owner
295
- } }));
296
- await search.loaded;
297
- assert.strictEqual(search.instances[0].id, `${testRealmURL}card-2`);
298
- assert.strictEqual(search.instances[0].constructor.name, "Book");
299
- });
300
- (0, import_qunit.test)(`search is not re-run when query and realms are unchanged`, async function(assert) {
301
- let realmServer = getService("realm-server");
302
- let fetchCalls = 0;
303
- let originalMaybeAuthedFetchForRealms = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
304
- realmServer.maybeAuthedFetchForRealms = async (...args) => {
305
- fetchCalls++;
306
- return await originalMaybeAuthedFetchForRealms(...args);
307
- };
308
- try {
309
- let args = {
310
- query: { filter: {
311
- on: {
312
- module: testRRI("book"),
313
- name: "Book"
314
- },
315
- eq: { "author.lastName": "Jones" }
316
- } },
317
- realms: [testRealmURL],
318
- isLive: false,
319
- isAutoSaved: false,
320
- storeService,
321
- owner: this.owner
322
- };
323
- let search = getSearchResourceForTest(loaderService, () => ({ named: args }));
324
- await search.loaded;
325
- assert.strictEqual(fetchCalls, 1, "initial search performed once");
326
- search.modify([], args);
327
- await settled();
328
- assert.strictEqual(fetchCalls, 1, "search is not invoked again when query/realms are unchanged");
329
- } finally {
330
- realmServer.maybeAuthedFetchForRealms = originalMaybeAuthedFetchForRealms;
331
- }
332
- });
333
- (0, import_qunit.test)(`a search the realm server sheds with 429 is retried after Retry-After`, async function(assert) {
334
- let realmServer = getService("realm-server");
335
- let fetchCalls = 0;
336
- let originalMaybeAuthedFetchForRealms = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
337
- realmServer.maybeAuthedFetchForRealms = async (...args) => {
338
- fetchCalls++;
339
- if (fetchCalls === 1) return new Response(JSON.stringify({ errors: [{
340
- status: "429",
341
- title: "Too Many Requests",
342
- message: "shed"
343
- }] }), {
344
- status: 429,
345
- headers: {
346
- "content-type": "application/vnd.card+json",
347
- "retry-after": "0"
348
- }
349
- });
350
- return await originalMaybeAuthedFetchForRealms(...args);
351
- };
352
- try {
353
- let query = { filter: {
354
- on: {
355
- module: testRRI("book"),
356
- name: "Book"
357
- },
358
- eq: { "author.lastName": "Jones" }
359
- } };
360
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
361
- query,
362
- realms: [testRealmURL],
363
- isLive: false,
364
- isAutoSaved: false,
365
- storeService,
366
- owner: this.owner
367
- } }));
368
- await search.loaded;
369
- assert.strictEqual(fetchCalls, 2, "the shed search was sent again");
370
- assert.strictEqual(search.instances[0].id, `${testRealmURL}card-2`, "and the retry produced the result");
371
- } finally {
372
- realmServer.maybeAuthedFetchForRealms = originalMaybeAuthedFetchForRealms;
373
- }
374
- });
375
- (0, import_qunit.test)(`a search the realm server answers with 401 is reauthenticated and replayed once`, async function(assert) {
376
- let realmServer = getService("realm-server");
377
- let network = getService("network");
378
- await realmServer.login();
379
- let rejectedToken = realmServer.token;
380
- assert.ok(rejectedToken, "the search starts with a realm-server session");
381
- let attempts = [];
382
- let gate = async (request) => {
383
- if (!new URL(request.url).pathname.endsWith("/_federated-search")) return null;
384
- attempts.push(request.headers.get("Authorization"));
385
- if (attempts.length === 1) return new Response(JSON.stringify({ errors: ["Unauthorized Request"] }), {
386
- status: 401,
387
- headers: { "content-type": "application/vnd.card+json" }
388
- });
389
- return null;
390
- };
391
- network.virtualNetwork.mount(gate, { prepend: true });
392
- let reauthCalls = 0;
393
- let reauthedFor = [];
394
- let sessionDuringMint = [];
395
- let originalReauthenticate = realmServer.reauthenticateRealmServer.bind(realmServer);
396
- realmServer.reauthenticateRealmServer = async (rejectedToken) => {
397
- reauthCalls++;
398
- reauthedFor.push(rejectedToken);
399
- let pending = originalReauthenticate(rejectedToken);
400
- sessionDuringMint.push(realmServer.token);
401
- return await pending;
402
- };
403
- try {
404
- let query = { filter: {
405
- on: {
406
- module: testRRI("book"),
407
- name: "Book"
408
- },
409
- eq: { "author.lastName": "Jones" }
410
- } };
411
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
412
- query,
413
- realms: [testRealmURL],
414
- isLive: false,
415
- isAutoSaved: false,
416
- storeService,
417
- owner: this.owner
418
- } }));
419
- await search.loaded;
420
- assert.strictEqual(attempts.length, 2, "the rejected search was sent again");
421
- assert.strictEqual(reauthCalls, 1, "and exactly one session was minted to send it with");
422
- assert.strictEqual(attempts[0], `Bearer ${rejectedToken}`, "the first attempt carried the token the server rejected");
423
- assert.strictEqual(attempts[1], `Bearer ${realmServer.token}`, "and the replay carried the session the service now holds");
424
- assert.deepEqual(reauthedFor, [rejectedToken], "the mint was told which session the server refused");
425
- assert.deepEqual(sessionDuringMint, [rejectedToken], "and the service stayed logged in for the length of the mint, so a concurrent caller never sees an anonymous session");
426
- assert.strictEqual(search.instances[0].id, `${testRealmURL}card-2`, "and the replay produced the result");
427
- } finally {
428
- realmServer.reauthenticateRealmServer = originalReauthenticate;
429
- network.virtualNetwork.unmount(gate);
430
- }
431
- });
432
- (0, import_qunit.test)(`a 401 the realm server repeats is surfaced rather than replayed forever`, async function(assert) {
433
- let realmServer = getService("realm-server");
434
- let network = getService("network");
435
- await realmServer.login();
436
- let attempts = 0;
437
- let gate = async (request) => {
438
- if (!new URL(request.url).pathname.endsWith("/_federated-search")) return null;
439
- attempts++;
440
- return new Response(JSON.stringify({ errors: ["Unauthorized Request"] }), {
441
- status: 401,
442
- headers: { "content-type": "application/vnd.card+json" }
443
- });
444
- };
445
- network.virtualNetwork.mount(gate, { prepend: true });
446
- try {
447
- let query = { filter: {
448
- on: {
449
- module: testRRI("book"),
450
- name: "Book"
451
- },
452
- eq: { "author.lastName": "Jones" }
453
- } };
454
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
455
- query,
456
- realms: [testRealmURL],
457
- isLive: false,
458
- isAutoSaved: false,
459
- storeService,
460
- owner: this.owner
461
- } }));
462
- await search.loaded;
463
- assert.strictEqual(attempts, 2, "the search was replayed once and then left alone");
464
- assert.strictEqual(search.instances.length, 0, "and the still-refused search yields no results");
465
- } finally {
466
- network.virtualNetwork.unmount(gate);
467
- }
468
- });
469
- (0, import_qunit.test)(`can perform a live search for cards`, async function(assert) {
470
- let query = { filter: {
471
- on: {
472
- module: testRRI("book"),
473
- name: "Book"
474
- },
475
- eq: { "author.lastName": "Abdel-Rahman" }
476
- } };
477
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
478
- query,
479
- realms: [testRealmURL],
480
- isLive: true,
481
- isAutoSaved: false,
482
- storeService,
483
- owner: this.owner
484
- } }));
485
- await search.loaded;
486
- assert.strictEqual(search.instances.length, 2);
487
- assert.strictEqual(search.instances[0].id, `${testRealmURL}books/1`);
488
- assert.strictEqual(search.instances[1].id, `${testRealmURL}books/2`);
489
- await realm.write("books/3.json", JSON.stringify({ data: {
490
- type: "card",
491
- attributes: {
492
- author: {
493
- firstName: "Paper",
494
- lastName: "Abdel-Rahman"
495
- },
496
- editions: 0,
497
- pubDate: "2023-08-01"
498
- },
499
- meta: { adoptsFrom: {
500
- module: testRRI("book"),
501
- name: "Book"
502
- } }
503
- } }));
504
- await waitForLiveRefresh(search, () => search.instances.length === 3, "3 instances");
505
- assert.strictEqual(search.instances.length, 3);
506
- assert.strictEqual(search.instances[0].id, `${testRealmURL}books/1`);
507
- assert.strictEqual(search.instances[1].id, `${testRealmURL}books/2`);
508
- assert.strictEqual(search.instances[2].id, `${testRealmURL}books/3`);
509
- });
510
- (0, import_qunit.test)(`a live search of a realm named by a registered prefix re-runs on that realm's events`, async function(assert) {
511
- let { virtualNetwork } = getService("network");
512
- virtualNetwork.addRealmMapping("@test/mapped/", testRealmURL);
513
- let messageService = getService("message-service");
514
- let originalSubscribe = messageService.subscribe.bind(messageService);
515
- let subscribedTo = [];
516
- messageService.subscribe = (realmURL, cb) => {
517
- subscribedTo.push(realmURL);
518
- return originalSubscribe(realmURL, cb);
519
- };
520
- let originalSearchWithMeta = storeService.searchWithMeta.bind(storeService);
521
- let searchedRealms = [];
522
- storeService.searchWithMeta = async (query, realms, opts) => {
523
- searchedRealms.push([...realms ?? []]);
524
- return await originalSearchWithMeta(query, realms, opts);
525
- };
526
- try {
527
- await getSearchResourceForTest(loaderService, () => ({ named: {
528
- query: {},
529
- realms: ["@test/mapped/"],
530
- isLive: true,
531
- isAutoSaved: false,
532
- storeService,
533
- owner: this.owner
534
- } })).loaded;
535
- assert.true(subscribedTo.includes("@test/mapped/"), "the search subscribes by the spelling the caller used");
536
- let runsBefore = searchedRealms.length;
537
- assert.deepEqual(searchedRealms[runsBefore - 1], ["@test/mapped/"], "the search itself keeps the caller spelling");
538
- await realm.write("books/3.json", JSON.stringify({ data: {
539
- type: "card",
540
- attributes: { author: {
541
- firstName: "Paper",
542
- lastName: "Abdel-Rahman"
543
- } },
544
- meta: { adoptsFrom: {
545
- module: testRRI("book"),
546
- name: "Book"
547
- } }
548
- } }));
549
- await waitUntil(() => searchedRealms.length > runsBefore, { timeout: 1e4 });
550
- assert.ok(true, "the realm's event re-ran the search");
551
- } finally {
552
- messageService.subscribe = originalSubscribe;
553
- storeService.searchWithMeta = originalSearchWithMeta;
554
- virtualNetwork.removeRealmMapping("@test/mapped/");
555
- }
556
- });
557
- (0, import_qunit.test)(`a base realm card is merged and grouped whichever spelling names the base realm`, async function(assert) {
558
- let spellings = [
559
- baseRealm.url,
560
- new URL(config.resolvedBaseRealmURL).href,
561
- "@cardstack/base/"
562
- ];
563
- for (let [index, spelling] of spellings.entries()) {
564
- let title = `local-base-${index}-${Date.now()}`;
565
- let query = { filter: {
566
- on: {
567
- module: baseRRI("card-api"),
568
- name: "CardDef"
569
- },
570
- eq: { "cardInfo.name": title }
571
- } };
572
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
573
- query,
574
- realms: [spelling],
575
- isLive: true,
576
- isAutoSaved: false,
577
- storeService,
578
- owner: this.owner
579
- } }));
580
- await search.loaded;
581
- await settled();
582
- assert.deepEqual(search.instances, [], `${spelling}: the server returns nothing for the title`);
583
- let local = await storeService.addWithoutPersisting({ data: {
584
- type: "card",
585
- id: `${baseRealm.url}cards/${title}`,
586
- attributes: { cardInfo: { name: title } },
587
- meta: { adoptsFrom: {
588
- module: baseRRI("card-api"),
589
- name: "CardDef"
590
- } }
591
- } });
592
- await settled();
593
- assert.strictEqual(String(local.id), `@cardstack/base/cards/${title}`, `${spelling}: the store names the card by prefix`);
594
- assert.deepEqual(search.instances.map((instance) => instance.id), [local.id], `${spelling}: the local base card is merged`);
595
- assert.deepEqual(search.instancesByRealm.map((group) => [group.realm, group.cards.map((card) => card.id)]), [[spelling, [local.id]]], `${spelling}: it is grouped under the realm as the caller named it`);
596
- }
597
- });
598
- (0, import_qunit.test)(`a seed older than an event's generation is declined for a realm named by a registered prefix`, async function(assert) {
599
- let { virtualNetwork } = getService("network");
600
- virtualNetwork.addRealmMapping("@test/mapped/", testRealmURL);
601
- let originalSearchWithMeta = storeService.searchWithMeta.bind(storeService);
602
- let runs = 0;
603
- storeService.searchWithMeta = async (query, realms, opts) => {
604
- let result = await originalSearchWithMeta(query, realms, opts);
605
- runs++;
606
- return result;
607
- };
608
- try {
609
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
610
- query: {},
611
- realms: ["@test/mapped/"],
612
- isLive: true,
613
- isAutoSaved: false,
614
- storeService,
615
- owner: this.owner
616
- } }));
617
- await search.loaded;
618
- let runsBefore = runs;
619
- getService("message-service").relayRealmEvent({
620
- eventName: "index",
621
- indexType: "incremental",
622
- invalidations: [`${testRealmURL}books/1.json`],
623
- generation: 10,
624
- realmURL: testRealmURL
625
- });
626
- await waitUntil(() => runs > runsBefore, { timeout: 1e4 });
627
- await settled();
628
- let held = search.instances.map((instance) => instance.id);
629
- let stale = await storeService.addWithoutPersisting(new cardApi.CardDef({ cardTitle: "Stale" }));
630
- search.reseed({
631
- cards: [stale],
632
- identity: "stale-seed",
633
- generation: 5,
634
- realm: testRealmURL
635
- });
636
- await settled();
637
- assert.deepEqual(search.instances.map((instance) => instance.id), held, "the stale seed does not replace the set the event refreshed");
638
- } finally {
639
- storeService.searchWithMeta = originalSearchWithMeta;
640
- virtualNetwork.removeRealmMapping("@test/mapped/");
641
- }
642
- });
643
- (0, import_qunit.test)(`a burst of realm events coalesces into a single live re-run`, async function(assert) {
644
- let realmServer = getService("realm-server");
645
- let fetchCalls = 0;
646
- let originalMaybeAuthedFetchForRealms = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
647
- realmServer.maybeAuthedFetchForRealms = async (...args) => {
648
- fetchCalls++;
649
- return await originalMaybeAuthedFetchForRealms(...args);
650
- };
651
- try {
652
- let query = { filter: {
653
- on: {
654
- module: testRRI("book"),
655
- name: "Book"
656
- },
657
- eq: { "author.lastName": "Abdel-Rahman" }
658
- } };
659
- await getSearchResourceForTest(loaderService, () => ({ named: {
660
- query,
661
- realms: [testRealmURL],
662
- isLive: true,
663
- isAutoSaved: false,
664
- storeService,
665
- owner: this.owner
666
- } })).loaded;
667
- let baseline = fetchCalls;
668
- let messageService = getService("message-service");
669
- for (let generation = 1; generation <= 5; generation++) messageService.relayRealmEvent({
670
- eventName: "index",
671
- indexType: "incremental",
672
- invalidations: [`${testRealmURL}books/1.json`],
673
- generation,
674
- realmURL: testRealmURL
675
- });
676
- await settled();
677
- assert.strictEqual(fetchCalls, baseline + 1, "five index events inside one window produce one search fetch");
678
- messageService.relayRealmEvent({
679
- eventName: "index",
680
- indexType: "incremental",
681
- invalidations: [`${testRealmURL}books/1.json`],
682
- generation: 6,
683
- realmURL: testRealmURL
684
- });
685
- await settled();
686
- assert.strictEqual(fetchCalls, baseline + 2, "an event after the flush schedules its own re-run");
687
- } finally {
688
- realmServer.maybeAuthedFetchForRealms = originalMaybeAuthedFetchForRealms;
689
- }
690
- });
691
- (0, import_qunit.test)(`a query change inside the window folds the pending re-run into it`, async function(assert) {
692
- let realmServer = getService("realm-server");
693
- let fetchCalls = 0;
694
- let originalMaybeAuthedFetchForRealms = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
695
- realmServer.maybeAuthedFetchForRealms = async (...args) => {
696
- fetchCalls++;
697
- return await originalMaybeAuthedFetchForRealms(...args);
698
- };
699
- try {
700
- let args = {
701
- query: { filter: {
702
- on: {
703
- module: testRRI("book"),
704
- name: "Book"
705
- },
706
- eq: { "author.lastName": "Abdel-Rahman" }
707
- } },
708
- realms: [testRealmURL],
709
- isLive: true,
710
- isAutoSaved: false,
711
- storeService,
712
- owner: this.owner
713
- };
714
- let search = getSearchResourceForTest(loaderService, () => ({ named: args }));
715
- await search.loaded;
716
- let baseline = fetchCalls;
717
- getService("message-service").relayRealmEvent({
718
- eventName: "index",
719
- indexType: "incremental",
720
- invalidations: [`${testRealmURL}books/1.json`],
721
- generation: 1,
722
- realmURL: testRealmURL
723
- });
724
- search.modify([], {
725
- ...args,
726
- query: { filter: {
727
- on: {
728
- module: testRRI("book"),
729
- name: "Book"
730
- },
731
- eq: { "author.lastName": "Jones" }
732
- } }
733
- });
734
- await settled();
735
- assert.strictEqual(fetchCalls, baseline + 1, "the query change folds the armed flush into its own run; no redundant second search fires");
736
- } finally {
737
- realmServer.maybeAuthedFetchForRealms = originalMaybeAuthedFetchForRealms;
738
- }
739
- });
740
- (0, import_qunit.module)("realm event type gating", function() {
741
- const unrelatedType = `${testRealmURL}observation/Observation`;
742
- const unrelatedURL = `${testRealmURL}observations/1`;
743
- const unrelatedFileURL = `${unrelatedURL}.json`;
744
- const bookType = `${testRealmURL}book/Book`;
745
- const postType = `${testRealmURL}post/Post`;
746
- const blogPostType = `${testRealmURL}blog-post/BlogPost`;
747
- function relayIndexEvent(invalidatedTypes, invalidations = [unrelatedURL]) {
748
- getService("message-service").relayRealmEvent({
749
- eventName: "index",
750
- indexType: "incremental",
751
- invalidations,
752
- ...invalidatedTypes !== void 0 ? { invalidatedTypes } : {},
753
- realmURL: testRealmURL
754
- });
755
- }
756
- function relayPrerenderHtmlEvent(invalidations = [unrelatedFileURL], generation = 1) {
757
- getService("message-service").relayRealmEvent({
758
- eventName: "prerender_html",
759
- invalidations,
760
- generation,
761
- realmURL: testRealmURL
762
- });
763
- }
764
- function countingFetch() {
765
- let realmServer = getService("realm-server");
766
- let fetchCalls = 0;
767
- let original = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
768
- realmServer.maybeAuthedFetchForRealms = async (...args) => {
769
- fetchCalls++;
770
- return await original(...args);
771
- };
772
- return {
773
- count: () => fetchCalls,
774
- restore: () => {
775
- realmServer.maybeAuthedFetchForRealms = original;
776
- }
777
- };
778
- }
779
- function liveSearch(owner, query) {
780
- return getSearchResourceForTest(loaderService, () => ({ named: {
781
- query,
782
- realms: [testRealmURL],
783
- isLive: true,
784
- isAutoSaved: false,
785
- storeService,
786
- owner
787
- } }));
788
- }
789
- (0, import_qunit.test)("an index event that touched no anchored type does not re-run the query", async function(assert) {
790
- let fetch = countingFetch();
791
- try {
792
- await liveSearch(this.owner, { filter: {
793
- on: {
794
- module: testRRI("book"),
795
- name: "Book"
796
- },
797
- eq: {}
798
- } }).loaded;
799
- let baseline = fetch.count();
800
- relayIndexEvent([unrelatedType]);
801
- await settled();
802
- assert.strictEqual(fetch.count(), baseline + 1, "the first typed event re-runs while the anchors resolve");
803
- relayIndexEvent([unrelatedType]);
804
- await settled();
805
- assert.strictEqual(fetch.count(), baseline + 1, "a write to a type the query is not anchored on is skipped");
806
- relayIndexEvent([unrelatedType, bookType]);
807
- await settled();
808
- assert.strictEqual(fetch.count(), baseline + 2, "an event naming the anchored type re-runs the query");
809
- relayIndexEvent(void 0);
810
- await settled();
811
- assert.strictEqual(fetch.count(), baseline + 3, "an event carrying no type information re-runs the query");
812
- } finally {
813
- fetch.restore();
814
- }
815
- });
816
- (0, import_qunit.test)("a write to a subtype wakes a query anchored on its ancestor", async function(assert) {
817
- let fetch = countingFetch();
818
- try {
819
- await liveSearch(this.owner, { filter: {
820
- on: {
821
- module: testRRI("post"),
822
- name: "Post"
823
- },
824
- eq: {}
825
- } }).loaded;
826
- let baseline = fetch.count();
827
- relayIndexEvent([unrelatedType]);
828
- await settled();
829
- relayIndexEvent([unrelatedType]);
830
- await settled();
831
- assert.strictEqual(fetch.count(), baseline + 1, "the anchors resolve and the second unrelated event is skipped");
832
- relayIndexEvent([blogPostType, postType]);
833
- await settled();
834
- assert.strictEqual(fetch.count(), baseline + 2, "a subtype write names the ancestor in its chain, so the query re-runs");
835
- } finally {
836
- fetch.restore();
837
- }
838
- });
839
- (0, import_qunit.test)("a prerender_html event over rows an index event judged unrelated is skipped", async function(assert) {
840
- let fetch = countingFetch();
841
- try {
842
- await liveSearch(this.owner, { filter: {
843
- on: {
844
- module: testRRI("book"),
845
- name: "Book"
846
- },
847
- eq: {}
848
- } }).loaded;
849
- let baseline = fetch.count();
850
- relayIndexEvent([unrelatedType]);
851
- await settled();
852
- relayIndexEvent([unrelatedType]);
853
- await settled();
854
- assert.strictEqual(fetch.count(), baseline + 1, "the index channel is gated once the anchors resolve");
855
- relayPrerenderHtmlEvent([unrelatedFileURL]);
856
- await settled();
857
- assert.strictEqual(fetch.count(), baseline + 1, "the render of a row no index event tied to this query is skipped");
858
- relayPrerenderHtmlEvent([`${testRealmURL}books/1.json`]);
859
- await settled();
860
- assert.strictEqual(fetch.count(), baseline + 2, "a render this query holds no verdict for re-runs it");
861
- } finally {
862
- fetch.restore();
863
- }
864
- });
865
- (0, import_qunit.test)("an index event that could move a member withdraws its rows from the render gate", async function(assert) {
866
- let fetch = countingFetch();
867
- try {
868
- await liveSearch(this.owner, { filter: {
869
- on: {
870
- module: testRRI("book"),
871
- name: "Book"
872
- },
873
- eq: {}
874
- } }).loaded;
875
- let baseline = fetch.count();
876
- relayIndexEvent([unrelatedType]);
877
- await settled();
878
- relayIndexEvent([unrelatedType]);
879
- await settled();
880
- relayPrerenderHtmlEvent([unrelatedFileURL]);
881
- await settled();
882
- assert.strictEqual(fetch.count(), baseline + 1, "both channels are gated for a row judged unrelated");
883
- relayIndexEvent([bookType], [unrelatedURL]);
884
- await settled();
885
- assert.strictEqual(fetch.count(), baseline + 2, "the re-typed row re-runs the query on the index channel");
886
- relayPrerenderHtmlEvent([unrelatedFileURL]);
887
- await settled();
888
- assert.strictEqual(fetch.count(), baseline + 3, "and its render is no longer skipped");
889
- } finally {
890
- fetch.restore();
891
- }
892
- });
893
- (0, import_qunit.test)("a query that admits a card of any type re-runs on every event", async function(assert) {
894
- let fetch = countingFetch();
895
- try {
896
- await liveSearch(this.owner, { filter: { eq: { "author.lastName": "Abdel-Rahman" } } }).loaded;
897
- let baseline = fetch.count();
898
- relayIndexEvent([unrelatedType]);
899
- await settled();
900
- relayIndexEvent([unrelatedType]);
901
- await settled();
902
- assert.strictEqual(fetch.count(), baseline + 2, "an unanchored filter can gain a member of any type, so nothing is skipped");
903
- relayPrerenderHtmlEvent([unrelatedFileURL]);
904
- await settled();
905
- assert.strictEqual(fetch.count(), baseline + 3, "and its renders are not skipped either");
906
- } finally {
907
- fetch.restore();
908
- }
909
- });
910
- (0, import_qunit.test)("a query change re-resolves the anchors before they gate again", async function(assert) {
911
- let fetch = countingFetch();
912
- try {
913
- let args = {
914
- query: { filter: {
915
- on: {
916
- module: testRRI("book"),
917
- name: "Book"
918
- },
919
- eq: {}
920
- } },
921
- realms: [testRealmURL],
922
- isLive: true,
923
- isAutoSaved: false,
924
- storeService,
925
- owner: this.owner
926
- };
927
- let search = getSearchResourceForTest(loaderService, () => ({ named: args }));
928
- await search.loaded;
929
- let baseline = fetch.count();
930
- relayIndexEvent([unrelatedType]);
931
- await settled();
932
- relayIndexEvent([unrelatedType]);
933
- await settled();
934
- assert.strictEqual(fetch.count(), baseline + 1, "the anchors resolve and the second event is skipped");
935
- search.modify([], {
936
- ...args,
937
- query: { filter: {
938
- on: {
939
- module: testRRI("post"),
940
- name: "Post"
941
- },
942
- eq: {}
943
- } }
944
- });
945
- await settled();
946
- let afterChange = fetch.count();
947
- relayIndexEvent([unrelatedType]);
948
- await settled();
949
- assert.strictEqual(fetch.count(), afterChange + 1, "the first event after the change re-runs while the anchors re-resolve");
950
- relayIndexEvent([unrelatedType]);
951
- await settled();
952
- assert.strictEqual(fetch.count(), afterChange + 1, "the re-resolved anchors gate again");
953
- relayIndexEvent([postType]);
954
- await settled();
955
- assert.strictEqual(fetch.count(), afterChange + 2, "and they gate against the new query, not the old one");
956
- } finally {
957
- fetch.restore();
958
- }
959
- });
960
- });
961
- (0, import_qunit.test)(`cards in search results live update`, async function(assert) {
962
- let query = { filter: {
963
- on: {
964
- module: testRRI("book"),
965
- name: "Book"
966
- },
967
- eq: { "author.lastName": "Abdel-Rahman" }
968
- } };
969
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
970
- query,
971
- realms: [testRealmURL],
972
- isLive: true,
973
- isAutoSaved: false,
974
- storeService,
975
- owner: this.owner
976
- } }));
977
- await search.loaded;
978
- assert.strictEqual(search.instances.length, 2);
979
- assert.strictEqual(search.instances[0].author.firstName, `Mango`);
980
- await realm.write("books/1.json", JSON.stringify({ data: {
981
- type: "card",
982
- attributes: {
983
- author: {
984
- firstName: "Mang Mang",
985
- lastName: "Abdel-Rahman"
986
- },
987
- editions: 0,
988
- pubDate: "2023-08-01"
989
- },
990
- meta: { adoptsFrom: {
991
- module: testRRI("book"),
992
- name: "Book"
993
- } }
994
- } }));
995
- await search.loaded;
996
- await settled();
997
- assert.strictEqual(search.instances.length, 2);
998
- assert.strictEqual(search.instances[0].author.firstName, `Mang Mang`);
999
- });
1000
- (0, import_qunit.test)(`can paginate search results and returns correct meta.page.total`, async function(assert) {
1001
- let query = {
1002
- filter: { type: {
1003
- module: testRRI("book"),
1004
- name: "Book"
1005
- } },
1006
- page: {
1007
- number: 0,
1008
- size: 2
1009
- },
1010
- sort: [{
1011
- by: "author.firstName",
1012
- on: {
1013
- module: testRRI("book"),
1014
- name: "Book"
1015
- },
1016
- direction: "asc"
1017
- }]
1018
- };
1019
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1020
- query,
1021
- realms: [testRealmURL],
1022
- isLive: false,
1023
- isAutoSaved: false,
1024
- storeService,
1025
- owner: this.owner
1026
- } }));
1027
- await search.loaded;
1028
- assert.strictEqual(search.instances.length, 2);
1029
- assert.strictEqual(search.meta.page?.total, 4, "meta.page.total shows total count across all pages");
1030
- query.page = {
1031
- number: 1,
1032
- size: 2
1033
- };
1034
- search = getSearchResourceForTest(loaderService, () => ({ named: {
1035
- query,
1036
- realms: [testRealmURL],
1037
- isLive: false,
1038
- isAutoSaved: false,
1039
- storeService,
1040
- owner: this.owner
1041
- } }));
1042
- await search.loaded;
1043
- assert.strictEqual(search.instances.length, 2);
1044
- assert.strictEqual(search.meta.page?.total, 4, "meta.page.total consistent across pages");
1045
- query.page = {
1046
- number: 2,
1047
- size: 2
1048
- };
1049
- search = getSearchResourceForTest(loaderService, () => ({ named: {
1050
- query,
1051
- realms: [testRealmURL],
1052
- isLive: false,
1053
- isAutoSaved: false,
1054
- storeService,
1055
- owner: this.owner
1056
- } }));
1057
- await search.loaded;
1058
- assert.strictEqual(search.instances.length, 0);
1059
- assert.strictEqual(search.meta.page?.total, 4, "meta.page.total remains correct on empty page");
1060
- });
1061
- (0, import_qunit.test)(`can search for file-meta instances using SearchResource`, async function(assert) {
1062
- let query = { filter: { type: {
1063
- module: baseRRI("card-api"),
1064
- name: "FileDef"
1065
- } } };
1066
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1067
- query,
1068
- realms: [testRealmURL],
1069
- isLive: false,
1070
- isAutoSaved: false,
1071
- storeService,
1072
- owner: this.owner
1073
- } }));
1074
- await search.loaded;
1075
- assert.ok(search.instances.length >= 2, "returns file-meta instances");
1076
- let ids = search.instances.map((i) => i.id);
1077
- assert.ok(ids.includes(rri(`${testRealmURL}files/hello.txt`)), "hello.txt is in results");
1078
- assert.ok(ids.includes(rri(`${testRealmURL}files/notes.txt`)), "notes.txt is in results");
1079
- for (let instance of search.instances) assert.ok(isFileDefInstance(instance), `${instance.id} is a FileDef instance`);
1080
- });
1081
- (0, import_qunit.test)(`can perform a live search for file-meta instances`, async function(assert) {
1082
- let query = { filter: { type: {
1083
- module: baseRRI("card-api"),
1084
- name: "FileDef"
1085
- } } };
1086
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1087
- query,
1088
- realms: [testRealmURL],
1089
- isLive: true,
1090
- isAutoSaved: false,
1091
- storeService,
1092
- owner: this.owner
1093
- } }));
1094
- await search.loaded;
1095
- let initialCount = search.instances.length;
1096
- assert.ok(initialCount >= 2, "initial results include file-meta instances");
1097
- await realm.write("files/new-file.txt", "New content");
1098
- await waitForLiveRefresh(search, () => search.instances.length > initialCount, `more than ${initialCount} instances`);
1099
- let ids = search.instances.map((i) => i.id);
1100
- assert.ok(ids.includes(rri(`${testRealmURL}files/new-file.txt`)), "new file appears in live search results");
1101
- assert.ok(isFileDefInstance(search.instances.find((i) => i.id === `${testRealmURL}files/new-file.txt`)), "new file is a FileDef instance");
1102
- });
1103
- (0, import_qunit.module)(`in-flight search dedup`, function(innerHooks) {
1104
- let releaseFetch;
1105
- let fetchCalls;
1106
- let restoreFetch;
1107
- innerHooks.beforeEach(function() {
1108
- releaseFetch = new Deferred();
1109
- fetchCalls = 0;
1110
- let realmServer = getService("realm-server");
1111
- let original = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
1112
- realmServer.maybeAuthedFetchForRealms = async (url, ...args) => {
1113
- if (typeof url === "string" && url.includes("_federated-search")) {
1114
- fetchCalls++;
1115
- await releaseFetch.promise;
1116
- }
1117
- return await original(url, ...args);
1118
- };
1119
- restoreFetch = () => {
1120
- realmServer.maybeAuthedFetchForRealms = original;
1121
- };
1122
- });
1123
- innerHooks.afterEach(function() {
1124
- try {
1125
- releaseFetch.fulfill();
1126
- } catch {}
1127
- restoreFetch?.();
1128
- restoreFetch = void 0;
1129
- globalThis.__boxelRenderContext = void 0;
1130
- storeService.clearInFlightSearch();
1131
- });
1132
- let bookQuery = { filter: {
1133
- on: {
1134
- module: testRRI("book"),
1135
- name: "Book"
1136
- },
1137
- eq: { "author.lastName": "Jones" }
1138
- } };
1139
- (0, import_qunit.test)(`concurrent same-key store.search calls share a single fetch when inside a prerender`, async function(assert) {
1140
- globalThis.__boxelRenderContext = true;
1141
- let p1 = storeService.search(bookQuery, [testRealmURL]);
1142
- let p2 = storeService.search(bookQuery, [testRealmURL]);
1143
- assert.strictEqual(fetchCalls, 1, "second caller coalesces onto first in-flight fetch");
1144
- releaseFetch.fulfill();
1145
- let [r1, r2] = await Promise.all([p1, p2]);
1146
- assert.deepEqual(r1.map((i) => i.id ?? null), r2.map((i) => i.id ?? null), "both callers receive the same resolved instances");
1147
- });
1148
- (0, import_qunit.test)(`a realm named by a registered prefix coalesces with the same realm named by URL`, async function(assert) {
1149
- globalThis.__boxelRenderContext = true;
1150
- let { virtualNetwork } = getService("network");
1151
- virtualNetwork.addRealmMapping("@test/mapped/", testRealmURL);
1152
- try {
1153
- let p1 = storeService.search(bookQuery, ["@test/mapped/"]);
1154
- let p2 = storeService.search(bookQuery, [testRealmURL, "@test/mapped/"]);
1155
- assert.strictEqual(fetchCalls, 1, "both spellings key one in-flight fetch");
1156
- releaseFetch.fulfill();
1157
- await Promise.all([p1, p2]);
1158
- } finally {
1159
- virtualNetwork.removeRealmMapping("@test/mapped/");
1160
- }
1161
- });
1162
- (0, import_qunit.test)(`concurrent same-key store.search calls do NOT coalesce outside a prerender`, async function(assert) {
1163
- let p1 = storeService.search(bookQuery, [testRealmURL]);
1164
- let p2 = storeService.search(bookQuery, [testRealmURL]);
1165
- assert.strictEqual(fetchCalls, 2, "both callers fire their own fetch outside the prerender gate");
1166
- releaseFetch.fulfill();
1167
- await Promise.all([p1, p2]);
1168
- });
1169
- (0, import_qunit.test)(`different queries produce different keys and run independently inside a prerender`, async function(assert) {
1170
- globalThis.__boxelRenderContext = true;
1171
- let otherQuery = { filter: {
1172
- on: {
1173
- module: testRRI("book"),
1174
- name: "Book"
1175
- },
1176
- eq: { "author.lastName": "Abdel-Rahman" }
1177
- } };
1178
- let p1 = storeService.search(bookQuery, [testRealmURL]);
1179
- let p2 = storeService.search(otherQuery, [testRealmURL]);
1180
- assert.strictEqual(fetchCalls, 2, "different filters do not coalesce even inside a prerender");
1181
- releaseFetch.fulfill();
1182
- await Promise.all([p1, p2]);
1183
- });
1184
- (0, import_qunit.test)(`sequential same-key calls fall through after the first resolves (in-flight only, no resolved-doc cache)`, async function(assert) {
1185
- globalThis.__boxelRenderContext = true;
1186
- releaseFetch.fulfill();
1187
- await storeService.search(bookQuery, [testRealmURL]);
1188
- assert.strictEqual(fetchCalls, 1, "first call fetches once");
1189
- await storeService.search(bookQuery, [testRealmURL]);
1190
- assert.strictEqual(fetchCalls, 2, "sequential same-key call re-fetches after the first resolves");
1191
- });
1192
- (0, import_qunit.test)(`clearInFlightSearch drops pending entries so new same-key callers re-fetch`, async function(assert) {
1193
- globalThis.__boxelRenderContext = true;
1194
- let p1 = storeService.search(bookQuery, [testRealmURL]);
1195
- assert.strictEqual(fetchCalls, 1, "first fetch in-flight");
1196
- storeService.clearInFlightSearch();
1197
- let p2 = storeService.search(bookQuery, [testRealmURL]);
1198
- assert.strictEqual(fetchCalls, 2, "post-clear same-key caller fires a fresh fetch");
1199
- releaseFetch.fulfill();
1200
- await Promise.all([p1, p2]);
1201
- });
1202
- });
1203
- (0, import_qunit.module)(`job-scoped resolved-doc search cache`, function(innerHooks) {
1204
- let releaseFetch;
1205
- let fetchCalls;
1206
- let restoreFetch;
1207
- innerHooks.beforeEach(function() {
1208
- releaseFetch = new Deferred();
1209
- fetchCalls = 0;
1210
- let realmServer = getService("realm-server");
1211
- let original = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
1212
- realmServer.maybeAuthedFetchForRealms = async (url, ...args) => {
1213
- if (typeof url === "string" && url.includes("_federated-search")) {
1214
- fetchCalls++;
1215
- await releaseFetch.promise;
1216
- }
1217
- return await original(url, ...args);
1218
- };
1219
- restoreFetch = () => {
1220
- realmServer.maybeAuthedFetchForRealms = original;
1221
- };
1222
- });
1223
- innerHooks.afterEach(function() {
1224
- try {
1225
- releaseFetch.fulfill();
1226
- } catch {}
1227
- restoreFetch?.();
1228
- restoreFetch = void 0;
1229
- let g = globalThis;
1230
- g.__boxelRenderContext = void 0;
1231
- g.__boxelJobId = void 0;
1232
- g.__boxelRenderScope = void 0;
1233
- g.__boxelConsumingRealm = void 0;
1234
- storeService.clearInFlightSearch();
1235
- storeService.clearSearchCache();
1236
- });
1237
- let bookQuery = { filter: {
1238
- on: {
1239
- module: testRRI("book"),
1240
- name: "Book"
1241
- },
1242
- eq: { "author.lastName": "Jones" }
1243
- } };
1244
- function enterPrerender(jobId, consumingRealm) {
1245
- let g = globalThis;
1246
- g.__boxelRenderContext = true;
1247
- g.__boxelJobId = jobId;
1248
- g.__boxelConsumingRealm = consumingRealm;
1249
- }
1250
- (0, import_qunit.test)(`sequential same-key store.search calls hit the resolved-doc cache (one fetch total)`, async function(assert) {
1251
- enterPrerender("job-1", testRealmURL);
1252
- releaseFetch.fulfill();
1253
- let r1 = await storeService.search(bookQuery, [testRealmURL]);
1254
- assert.strictEqual(fetchCalls, 1, "first call populates cache");
1255
- let r2 = await storeService.search(bookQuery, [testRealmURL]);
1256
- assert.strictEqual(fetchCalls, 1, "second sequential same-key call serves from cache, no network");
1257
- assert.deepEqual(r1.map((i) => i.id ?? null), r2.map((i) => i.id ?? null), "cached doc returns the same instance set");
1258
- });
1259
- (0, import_qunit.test)(`a realm named by a registered prefix hits the same-realm cache of its URL`, async function(assert) {
1260
- enterPrerender("job-1", testRealmURL);
1261
- releaseFetch.fulfill();
1262
- let { virtualNetwork } = getService("network");
1263
- virtualNetwork.addRealmMapping("@test/mapped/", testRealmURL);
1264
- try {
1265
- await storeService.search(bookQuery, ["@test/mapped/"]);
1266
- await storeService.search(bookQuery, [testRealmURL]);
1267
- assert.strictEqual(fetchCalls, 1, "the second spelling is served from the first one's cache entry");
1268
- } finally {
1269
- virtualNetwork.removeRealmMapping("@test/mapped/");
1270
- }
1271
- });
1272
- (0, import_qunit.test)(`base named by its prefix hits the same-realm cache when the consuming realm is its alias`, async function(assert) {
1273
- enterPrerender("job-1", baseRealm.url);
1274
- releaseFetch.fulfill();
1275
- await storeService.search(bookQuery, ["@cardstack/base/"]);
1276
- await storeService.search(bookQuery, ["@cardstack/base/"]);
1277
- assert.strictEqual(fetchCalls, 1, "the second search is served from the first one's cache entry");
1278
- });
1279
- (0, import_qunit.test)(`cache bypasses outside a prerender (live SPA path)`, async function(assert) {
1280
- releaseFetch.fulfill();
1281
- await storeService.search(bookQuery, [testRealmURL]);
1282
- await storeService.search(bookQuery, [testRealmURL]);
1283
- assert.strictEqual(fetchCalls, 2, "two sequential calls each fetch — no cache outside prerender");
1284
- });
1285
- (0, import_qunit.test)(`cache bypasses when __boxelJobId is unset (prerender with no job)`, async function(assert) {
1286
- let g = globalThis;
1287
- g.__boxelRenderContext = true;
1288
- g.__boxelConsumingRealm = testRealmURL;
1289
- releaseFetch.fulfill();
1290
- await storeService.search(bookQuery, [testRealmURL]);
1291
- await storeService.search(bookQuery, [testRealmURL]);
1292
- assert.strictEqual(fetchCalls, 2, "sequential calls re-fetch when no jobId is on the page");
1293
- });
1294
- (0, import_qunit.test)(`cache bypasses cross-realm reads even inside a prerender`, async function(assert) {
1295
- enterPrerender("job-1", testRealmURL);
1296
- releaseFetch.fulfill();
1297
- await storeService.search(bookQuery, [testRealmURL, "http://other-realm/data/"]);
1298
- await storeService.search(bookQuery, [testRealmURL, "http://other-realm/data/"]);
1299
- assert.strictEqual(fetchCalls, 2, "cross-realm reads bypass the same-realm cache");
1300
- });
1301
- (0, import_qunit.test)(`jobId change drops the cache (defensive clear at fetch-entry)`, async function(assert) {
1302
- enterPrerender("job-1", testRealmURL);
1303
- releaseFetch.fulfill();
1304
- await storeService.search(bookQuery, [testRealmURL]);
1305
- assert.strictEqual(fetchCalls, 1, "populates cache under job-1");
1306
- globalThis.__boxelJobId = "job-2";
1307
- await storeService.search(bookQuery, [testRealmURL]);
1308
- assert.strictEqual(fetchCalls, 2, "cache entry from prior job is not served under new jobId");
1309
- });
1310
- (0, import_qunit.test)(`a render-scope change drops the cache while the job stays the same`, async function(assert) {
1311
- enterPrerender("job-1", testRealmURL);
1312
- let g = globalThis;
1313
- g.__boxelRenderScope = `${testRealmURL}@1`;
1314
- releaseFetch.fulfill();
1315
- await storeService.search(bookQuery, [testRealmURL]);
1316
- await storeService.search(bookQuery, [testRealmURL]);
1317
- assert.strictEqual(fetchCalls, 1, "one scope serves repeats from cache");
1318
- g.__boxelRenderScope = `${testRealmURL}@1~1`;
1319
- await storeService.search(bookQuery, [testRealmURL]);
1320
- assert.strictEqual(fetchCalls, 2, "an answer cached under the previous scope is not served under the new one");
1321
- });
1322
- (0, import_qunit.test)(`clearSearchCache drops cached entries so subsequent same-key calls re-fetch`, async function(assert) {
1323
- enterPrerender("job-1", testRealmURL);
1324
- releaseFetch.fulfill();
1325
- await storeService.search(bookQuery, [testRealmURL]);
1326
- assert.strictEqual(fetchCalls, 1, "first call populates cache");
1327
- storeService.clearSearchCache();
1328
- await storeService.search(bookQuery, [testRealmURL]);
1329
- assert.strictEqual(fetchCalls, 2, "post-clear same-key caller re-fetches");
1330
- });
1331
- (0, import_qunit.test)(`cache hit short-circuits before the in-flight Map is consulted`, async function(assert) {
1332
- enterPrerender("job-1", testRealmURL);
1333
- releaseFetch.fulfill();
1334
- await storeService.search(bookQuery, [testRealmURL]);
1335
- assert.strictEqual(fetchCalls, 1, "first call populates cache");
1336
- let p1 = storeService.search(bookQuery, [testRealmURL]);
1337
- let p2 = storeService.search(bookQuery, [testRealmURL]);
1338
- assert.strictEqual(fetchCalls, 1, "cache short-circuits both callers");
1339
- await Promise.all([p1, p2]);
1340
- });
1341
- (0, import_qunit.test)(`cache survives across renders within the same indexing job`, async function(assert) {
1342
- enterPrerender("job-1", testRealmURL);
1343
- releaseFetch.fulfill();
1344
- await storeService.search(bookQuery, [testRealmURL]);
1345
- assert.strictEqual(fetchCalls, 1, "first render populates cache");
1346
- storeService.clearInFlightSearch();
1347
- await storeService.search(bookQuery, [testRealmURL]);
1348
- assert.strictEqual(fetchCalls, 1, "second render in the same job reuses the cached doc");
1349
- });
1350
- (0, import_qunit.test)(`clearSearchCache during an in-flight fetch suppresses the post-resolve populate`, async function(assert) {
1351
- enterPrerender("job-1", testRealmURL);
1352
- let p1 = storeService.search(bookQuery, [testRealmURL]);
1353
- assert.strictEqual(fetchCalls, 1, "first call entered the fetch");
1354
- storeService.clearSearchCache();
1355
- releaseFetch.fulfill();
1356
- await p1;
1357
- await storeService.search(bookQuery, [testRealmURL]);
1358
- assert.strictEqual(fetchCalls, 2, "post-clear repopulate was suppressed; next call re-fetches");
1359
- });
1360
- (0, import_qunit.test)(`consumingRealm mismatch on a single-realm search bypasses the cache`, async function(assert) {
1361
- enterPrerender("job-1", "http://other-realm/data/");
1362
- releaseFetch.fulfill();
1363
- await storeService.search(bookQuery, [testRealmURL]);
1364
- await storeService.search(bookQuery, [testRealmURL]);
1365
- assert.strictEqual(fetchCalls, 2, "single-realm search against a non-consumingRealm is not cached");
1366
- });
1367
- });
1368
- (0, import_qunit.module)(`non-live SearchResource with seed (prerender query-field path)`, function(innerHooks) {
1369
- let releaseFetch;
1370
- let fetchCalls;
1371
- let restoreFetch;
1372
- innerHooks.beforeEach(function() {
1373
- releaseFetch = new Deferred();
1374
- fetchCalls = 0;
1375
- let realmServer = getService("realm-server");
1376
- let original = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
1377
- realmServer.maybeAuthedFetchForRealms = async (url, ...args) => {
1378
- if (typeof url === "string" && url.includes("_federated-search")) {
1379
- fetchCalls++;
1380
- await releaseFetch.promise;
1381
- }
1382
- return await original(url, ...args);
1383
- };
1384
- restoreFetch = () => {
1385
- realmServer.maybeAuthedFetchForRealms = original;
1386
- };
1387
- });
1388
- innerHooks.afterEach(function() {
1389
- try {
1390
- releaseFetch.fulfill();
1391
- } catch {}
1392
- restoreFetch?.();
1393
- restoreFetch = void 0;
1394
- globalThis.__boxelRenderContext = void 0;
1395
- storeService.clearInFlightSearch();
1396
- });
1397
- let bookQuery = { filter: {
1398
- on: {
1399
- module: testRRI("book"),
1400
- name: "Book"
1401
- },
1402
- eq: { "author.lastName": "Abdel-Rahman" }
1403
- } };
1404
- async function buildSeed() {
1405
- releaseFetch.fulfill();
1406
- return {
1407
- cards: await storeService.search(bookQuery, [testRealmURL]),
1408
- searchURL: buildQuerySearchURL([testRealmURL], bookQuery)
1409
- };
1410
- }
1411
- (0, import_qunit.test)(`a seed that reports its count unknowable does not have one inferred from its rows`, async function(assert) {
1412
- let { cards, searchURL } = await buildSeed();
1413
- fetchCalls = 0;
1414
- globalThis.__boxelRenderContext = true;
1415
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1416
- query: bookQuery,
1417
- realms: [testRealmURL],
1418
- isLive: false,
1419
- isAutoSaved: false,
1420
- storeService,
1421
- seed: {
1422
- cards,
1423
- searchURL,
1424
- realms: [testRealmURL],
1425
- totalUnknown: true
1426
- },
1427
- owner: this.owner
1428
- } }));
1429
- await search.loaded;
1430
- await settled();
1431
- assert.strictEqual(search.instances.length, cards.length, "the seeded rows are still held");
1432
- assert.strictEqual(search.totalMatchCount, void 0, "but no match count is reported");
1433
- assert.false(search.isPartial, "and no shortfall is claimed against a count nobody reported");
1434
- });
1435
- (0, import_qunit.test)(`a seed carrying a count larger than its rows reports the shortfall`, async function(assert) {
1436
- let { cards, searchURL } = await buildSeed();
1437
- fetchCalls = 0;
1438
- globalThis.__boxelRenderContext = true;
1439
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1440
- query: bookQuery,
1441
- realms: [testRealmURL],
1442
- isLive: false,
1443
- isAutoSaved: false,
1444
- storeService,
1445
- seed: {
1446
- cards,
1447
- searchURL,
1448
- realms: [testRealmURL],
1449
- meta: { page: { total: cards.length + 3 } }
1450
- },
1451
- owner: this.owner
1452
- } }));
1453
- await search.loaded;
1454
- await settled();
1455
- assert.strictEqual(search.totalMatchCount, cards.length + 3, "the seeded match count is reported as given");
1456
- assert.true(search.isPartial, "and the rows falling short of it is a shortfall");
1457
- });
1458
- (0, import_qunit.test)(`seed-only resolve: no fetch fires when isLive=false and a seed is present (prerender path)`, async function(assert) {
1459
- let { cards, searchURL } = await buildSeed();
1460
- fetchCalls = 0;
1461
- globalThis.__boxelRenderContext = true;
1462
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1463
- query: bookQuery,
1464
- realms: [testRealmURL],
1465
- isLive: false,
1466
- isAutoSaved: false,
1467
- storeService,
1468
- seed: {
1469
- cards,
1470
- searchURL,
1471
- realms: [testRealmURL]
1472
- },
1473
- owner: this.owner
1474
- } }));
1475
- await search.loaded;
1476
- await settled();
1477
- assert.strictEqual(fetchCalls, 0, "seed-only resolve: no _federated-search fetch fires");
1478
- assert.strictEqual(search.instances.length, cards.length, "resource exposes seed cards");
1479
- assert.deepEqual(search.instances.map((i) => i.id), cards.map((c) => c.id), "seed cards are returned in order");
1480
- });
1481
- (0, import_qunit.test)(`a seed carrying no meta infers the total from its rows`, async function(assert) {
1482
- let { cards, searchURL } = await buildSeed();
1483
- fetchCalls = 0;
1484
- globalThis.__boxelRenderContext = true;
1485
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1486
- query: bookQuery,
1487
- realms: [testRealmURL],
1488
- isLive: false,
1489
- isAutoSaved: false,
1490
- storeService,
1491
- seed: {
1492
- cards,
1493
- searchURL,
1494
- realms: [testRealmURL]
1495
- },
1496
- owner: this.owner
1497
- } }));
1498
- await search.loaded;
1499
- await settled();
1500
- assert.strictEqual(search.meta?.page?.total, cards.length, "nothing was withheld, so the rows in hand are the match count");
1501
- assert.notOk(search.meta?.incomplete, "and the result set is not labelled short");
1502
- });
1503
- (0, import_qunit.test)(`a seed labelled incomplete keeps the label, so its count reads as a floor`, async function(assert) {
1504
- let { cards, searchURL } = await buildSeed();
1505
- fetchCalls = 0;
1506
- globalThis.__boxelRenderContext = true;
1507
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1508
- query: bookQuery,
1509
- realms: [testRealmURL],
1510
- isLive: false,
1511
- isAutoSaved: false,
1512
- storeService,
1513
- seed: {
1514
- cards,
1515
- searchURL,
1516
- realms: [testRealmURL],
1517
- meta: {
1518
- page: { total: cards.length },
1519
- incomplete: true
1520
- },
1521
- queryErrors: [{
1522
- realm: "https://example.invalid/offline/",
1523
- type: "network",
1524
- message: "realm did not answer"
1525
- }]
1526
- },
1527
- owner: this.owner
1528
- } }));
1529
- await search.loaded;
1530
- await settled();
1531
- assert.true(search.meta?.incomplete, "the label survives seeding, so a consumer can tell the count is a floor");
1532
- assert.strictEqual(search.instances.length, cards.length, "the realms that answered still contribute their rows");
1533
- });
1534
- (0, import_qunit.test)(`a search that fails as a unit refuses to call its empty result a count`, async function(assert) {
1535
- releaseFetch.fulfill();
1536
- let realmServer = getService("realm-server");
1537
- realmServer.maybeAuthedFetchForRealms = async () => {
1538
- throw new Error("realm did not answer");
1539
- };
1540
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1541
- query: bookQuery,
1542
- realms: [testRealmURL],
1543
- isLive: true,
1544
- isAutoSaved: false,
1545
- storeService,
1546
- owner: this.owner
1547
- } }));
1548
- await search.loaded;
1549
- await settled();
1550
- assert.strictEqual(search.instances.length, 0, "the failed search holds no rows");
1551
- assert.true(search.meta?.incomplete, "and labels the empty result set, so its zero is not read as a count");
1552
- });
1553
- (0, import_qunit.test)(`a live resource seeded with its document's answer subscribes without searching`, async function(assert) {
1554
- let { cards, searchURL } = await buildSeed();
1555
- fetchCalls = 0;
1556
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1557
- query: bookQuery,
1558
- realms: [testRealmURL],
1559
- isLive: true,
1560
- isAutoSaved: false,
1561
- storeService,
1562
- seed: {
1563
- cards,
1564
- searchURL,
1565
- realms: [testRealmURL]
1566
- },
1567
- owner: this.owner
1568
- } }));
1569
- await search.loaded;
1570
- await settled();
1571
- assert.strictEqual(search.instances.length, cards.length, "the seed resolves the field to the set the document named");
1572
- assert.strictEqual(fetchCalls, 0, "and no search is issued to re-derive it");
1573
- });
1574
- (0, import_qunit.test)(`non-live with no seed still fetches (other non-live callers are unaffected)`, async function(assert) {
1575
- releaseFetch.fulfill();
1576
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1577
- query: bookQuery,
1578
- realms: [testRealmURL],
1579
- isLive: false,
1580
- isAutoSaved: false,
1581
- storeService,
1582
- owner: this.owner
1583
- } }));
1584
- await search.loaded;
1585
- assert.ok(fetchCalls >= 1, "non-live + no-seed callers still hit the network");
1586
- assert.strictEqual(search.instances.length, 2, "returns the books matching the query");
1587
- });
1588
- (0, import_qunit.test)(`empty unresolved seed still falls back to a fetch in prerender (cards=[], no searchURL)`, async function(assert) {
1589
- releaseFetch.fulfill();
1590
- globalThis.__boxelRenderContext = true;
1591
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1592
- query: bookQuery,
1593
- realms: [testRealmURL],
1594
- isLive: false,
1595
- isAutoSaved: false,
1596
- storeService,
1597
- seed: {
1598
- cards: [],
1599
- realms: [testRealmURL]
1600
- },
1601
- owner: this.owner
1602
- } }));
1603
- await search.loaded;
1604
- assert.ok(fetchCalls >= 1, "empty unresolved seed in prerender falls back to fetch");
1605
- assert.strictEqual(search.instances.length, 2, "fallback fetch returns the books matching the query");
1606
- });
1607
- });
1608
- (0, import_qunit.module)(`client-side Store filtering step`, function(innerHooks) {
1609
- let fetchCalls;
1610
- let restoreFetch;
1611
- innerHooks.beforeEach(function() {
1612
- fetchCalls = 0;
1613
- let realmServer = getService("realm-server");
1614
- let original = realmServer.maybeAuthedFetchForRealms.bind(realmServer);
1615
- realmServer.maybeAuthedFetchForRealms = async (url, ...args) => {
1616
- if (typeof url === "string" && url.includes("_federated-search")) fetchCalls++;
1617
- return await original(url, ...args);
1618
- };
1619
- restoreFetch = () => {
1620
- realmServer.maybeAuthedFetchForRealms = original;
1621
- };
1622
- });
1623
- innerHooks.afterEach(function() {
1624
- restoreFetch?.();
1625
- restoreFetch = void 0;
1626
- });
1627
- const bookRef = {
1628
- module: testRRI("book"),
1629
- name: "Book"
1630
- };
1631
- let abdelRahmanQuery = { filter: {
1632
- on: bookRef,
1633
- eq: { "author.lastName": "Abdel-Rahman" }
1634
- } };
1635
- let aguilarQuery = { filter: {
1636
- on: bookRef,
1637
- eq: { "author.lastName": "Aguilar" }
1638
- } };
1639
- async function addBookCandidate(idPath, firstName, lastName) {
1640
- return await storeService.addWithoutPersisting({ data: {
1641
- type: "card",
1642
- id: `${testRealmURL}${idPath}`,
1643
- attributes: {
1644
- author: {
1645
- firstName,
1646
- lastName
1647
- },
1648
- editions: 0,
1649
- pubDate: "2024-01-01"
1650
- },
1651
- meta: { adoptsFrom: bookRef }
1652
- } });
1653
- }
1654
- (0, import_qunit.test)(`a locally added matching card appears in an eligible live search without a server round-trip`, async function(assert) {
1655
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1656
- query: abdelRahmanQuery,
1657
- realms: [testRealmURL],
1658
- isLive: true,
1659
- isAutoSaved: false,
1660
- storeService,
1661
- owner: this.owner
1662
- } }));
1663
- await search.loaded;
1664
- await settled();
1665
- assert.strictEqual(search.instances.length, 2, "server returns the two matching books");
1666
- let fetchesBefore = fetchCalls;
1667
- await addBookCandidate("books/local-new", "Apple", "Abdel-Rahman");
1668
- await settled();
1669
- let ids = search.instances.map((i) => i.id);
1670
- assert.strictEqual(search.instances.length, 3, "the locally added matching card is merged into the result set");
1671
- assert.ok(ids.includes(rri(`${testRealmURL}books/local-new`)), "the new card appears in results");
1672
- assert.strictEqual(fetchCalls, fetchesBefore, "no _federated-search fetch fired for the client-side recompute");
1673
- });
1674
- (0, import_qunit.test)(`a surfaced candidate is not duplicated even though it is keyed by both local and remote id`, async function(assert) {
1675
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1676
- query: abdelRahmanQuery,
1677
- realms: [testRealmURL],
1678
- isLive: true,
1679
- isAutoSaved: false,
1680
- storeService,
1681
- owner: this.owner
1682
- } }));
1683
- await search.loaded;
1684
- await settled();
1685
- let candidate = await addBookCandidate("books/dupe-check", "Apple", "Abdel-Rahman");
1686
- await settled();
1687
- let poolOccurrences = storeService.allCardInstances().filter((c) => c === candidate).length;
1688
- assert.strictEqual(poolOccurrences, 1, "the candidate appears exactly once in allCardInstances despite dual keying");
1689
- let ids = search.instances.map((i) => i.id);
1690
- assert.strictEqual(ids.length, new Set(ids).size, "the displayed result set has no duplicate ids");
1691
- assert.strictEqual(ids.filter((id) => id === rri(`${testRealmURL}books/dupe-check`)).length, 1, "the surfaced candidate is rendered exactly once");
1692
- assert.strictEqual(search.instances.length, 3, "two server books plus the single surfaced candidate");
1693
- });
1694
- (0, import_qunit.test)(`a server-returned card that no longer matches local state is removed`, async function(assert) {
1695
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1696
- query: abdelRahmanQuery,
1697
- realms: [testRealmURL],
1698
- isLive: true,
1699
- isAutoSaved: false,
1700
- storeService,
1701
- owner: this.owner
1702
- } }));
1703
- await search.loaded;
1704
- await settled();
1705
- assert.strictEqual(search.instances.length, 2);
1706
- let book1 = storeService.peek(`${testRealmURL}books/1`);
1707
- book1.author.lastName = "Changed";
1708
- let ids = search.instances.map((i) => i.id);
1709
- assert.strictEqual(search.instances.length, 1, "the now-non-matching server card is removed");
1710
- assert.notOk(ids.includes(rri(`${testRealmURL}books/1`)), "books/1 dropped from results");
1711
- });
1712
- (0, import_qunit.test)(`editing a candidate toggles its membership reactively (recompute on Store mutation)`, async function(assert) {
1713
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1714
- query: abdelRahmanQuery,
1715
- realms: [testRealmURL],
1716
- isLive: true,
1717
- isAutoSaved: false,
1718
- storeService,
1719
- owner: this.owner
1720
- } }));
1721
- await search.loaded;
1722
- await settled();
1723
- assert.strictEqual(search.instances.length, 2);
1724
- let candidate = await addBookCandidate("books/edit-me", "Switch", "Other");
1725
- await settled();
1726
- assert.strictEqual(search.instances.length, 2, "a candidate that does not match is not shown");
1727
- candidate.author.lastName = "Abdel-Rahman";
1728
- assert.strictEqual(search.instances.length, 3, "after editing to match, the candidate appears");
1729
- assert.ok(search.instances.map((i) => i.id).includes(rri(`${testRealmURL}books/edit-me`)));
1730
- candidate.author.lastName = "Other again";
1731
- assert.strictEqual(search.instances.length, 2, "after editing away from match, the candidate disappears");
1732
- });
1733
- (0, import_qunit.test)(`a merged candidate is reference-retained while displayed and released when it leaves`, async function(assert) {
1734
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1735
- query: abdelRahmanQuery,
1736
- realms: [testRealmURL],
1737
- isLive: true,
1738
- isAutoSaved: false,
1739
- storeService,
1740
- owner: this.owner
1741
- } }));
1742
- await search.loaded;
1743
- await settled();
1744
- let candidate = await addBookCandidate("books/retained", "Apple", "Abdel-Rahman");
1745
- let candidateId = `${testRealmURL}books/retained`;
1746
- await settled();
1747
- assert.strictEqual(storeService.getReferenceCount(candidateId), 0, "a freshly hydrated candidate carries no reference before it is displayed");
1748
- assert.ok(search.instances.map((i) => i.id).includes(rri(candidateId)), "the candidate is displayed");
1749
- await settled();
1750
- assert.ok(storeService.getReferenceCount(candidateId) > 0, "a Store reference is retained while the candidate is displayed");
1751
- candidate.author.lastName = "Other";
1752
- assert.notOk(search.instances.map((i) => i.id).includes(rri(candidateId)), "the candidate leaves the result set");
1753
- await settled();
1754
- assert.strictEqual(storeService.getReferenceCount(candidateId), 0, "the reference is released once the candidate is no longer displayed");
1755
- });
1756
- (0, import_qunit.test)(`the merged set is ordered per the query sort`, async function(assert) {
1757
- let sortedQuery = {
1758
- filter: {
1759
- on: bookRef,
1760
- eq: { "author.lastName": "Abdel-Rahman" }
1761
- },
1762
- sort: [{
1763
- by: "author.firstName",
1764
- on: bookRef,
1765
- direction: "asc"
1766
- }]
1767
- };
1768
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1769
- query: sortedQuery,
1770
- realms: [testRealmURL],
1771
- isLive: true,
1772
- isAutoSaved: false,
1773
- storeService,
1774
- owner: this.owner
1775
- } }));
1776
- await search.loaded;
1777
- await settled();
1778
- assert.deepEqual(search.instances.map((i) => i.id), [`${testRealmURL}books/1`, `${testRealmURL}books/2`]);
1779
- await addBookCandidate("books/apple", "Apple", "Abdel-Rahman");
1780
- await settled();
1781
- assert.deepEqual(search.instances.map((i) => i.id), [
1782
- `${testRealmURL}books/apple`,
1783
- `${testRealmURL}books/1`,
1784
- `${testRealmURL}books/2`
1785
- ], "the candidate sorts into position by author.firstName");
1786
- });
1787
- (0, import_qunit.test)(`one-shot store.search never runs the client step (server-only)`, async function(assert) {
1788
- await addBookCandidate("books/local-only", "Local", "Abdel-Rahman");
1789
- let result = await storeService.search(abdelRahmanQuery, [testRealmURL]);
1790
- assert.notOk(result.map((c) => c.id).includes(`${testRealmURL}books/local-only`), "one-shot store.search ignores the local-only candidate");
1791
- });
1792
- (0, import_qunit.test)(`a non-live search is a server-only passthrough`, async function(assert) {
1793
- await addBookCandidate("books/passthrough", "Zoe", "Abdel-Rahman");
1794
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1795
- query: abdelRahmanQuery,
1796
- realms: [testRealmURL],
1797
- isLive: false,
1798
- isAutoSaved: false,
1799
- storeService,
1800
- owner: this.owner
1801
- } }));
1802
- await search.loaded;
1803
- await settled();
1804
- assert.strictEqual(search.instances.length, 2, "a non-live search ignores the local candidate");
1805
- assert.notOk(search.instances.map((i) => i.id).includes(rri(`${testRealmURL}books/passthrough`)));
1806
- });
1807
- (0, import_qunit.test)(`an incompletely-loaded (paginated) result set skips the client step`, async function(assert) {
1808
- let pagedQuery = {
1809
- filter: { type: bookRef },
1810
- page: {
1811
- number: 0,
1812
- size: 2
1813
- },
1814
- sort: [{
1815
- by: "author.firstName",
1816
- on: bookRef,
1817
- direction: "asc"
1818
- }]
1819
- };
1820
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1821
- query: pagedQuery,
1822
- realms: [testRealmURL],
1823
- isLive: true,
1824
- isAutoSaved: false,
1825
- storeService,
1826
- owner: this.owner
1827
- } }));
1828
- await search.loaded;
1829
- await settled();
1830
- assert.strictEqual(search.instances.length, 2, "first page holds 2");
1831
- assert.strictEqual(search.meta.page?.total, 4, "total is 4 across all pages — the loaded set is incomplete");
1832
- await addBookCandidate("books/paged-extra", "Aaa", "Zzz");
1833
- await settled();
1834
- assert.strictEqual(search.instances.length, 2, "an incomplete result set is not reconciled against the Store");
1835
- assert.notOk(search.instances.map((i) => i.id).includes(rri(`${testRealmURL}books/paged-extra`)));
1836
- });
1837
- (0, import_qunit.test)(`a non-client-evaluable filter (matches) forces server-only`, async function(assert) {
1838
- let matchesQuery = { filter: { matches: "Abdel-Rahman" } };
1839
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1840
- query: matchesQuery,
1841
- realms: [testRealmURL],
1842
- isLive: true,
1843
- isAutoSaved: false,
1844
- storeService,
1845
- owner: this.owner
1846
- } }));
1847
- await search.loaded;
1848
- await settled();
1849
- let serverIds = search.instances.map((i) => i.id);
1850
- await addBookCandidate("books/matches-extra", "Nope", "Abdel-Rahman");
1851
- await settled();
1852
- assert.ok(storeService.peek(`${testRealmURL}books/matches-extra`), "the candidate is hydrated in the Store");
1853
- assert.deepEqual(search.instances.map((i) => i.id), serverIds, "the displayed set stays equal to the server result — no candidate merged");
1854
- assert.notOk(search.instances.map((i) => i.id).includes(rri(`${testRealmURL}books/matches-extra`)), "the locally added candidate is not pulled into a matches search");
1855
- });
1856
- (0, import_qunit.test)(`a candidate evicted from the Store drops out of the displayed set on the next reactive pass`, async function(assert) {
1857
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1858
- query: abdelRahmanQuery,
1859
- realms: [testRealmURL],
1860
- isLive: true,
1861
- isAutoSaved: false,
1862
- storeService,
1863
- owner: this.owner
1864
- } }));
1865
- await search.loaded;
1866
- await settled();
1867
- await addBookCandidate("books/will-evict", "Plum", "Abdel-Rahman");
1868
- await settled();
1869
- let candidateId = `${testRealmURL}books/will-evict`;
1870
- assert.ok(search.instances.map((i) => i.id).includes(rri(candidateId)), "the candidate is displayed before eviction");
1871
- let fetchesBefore = fetchCalls;
1872
- storeService.store.delete(candidateId);
1873
- await settled();
1874
- assert.notOk(search.instances.map((i) => i.id).includes(rri(candidateId)), "the candidate drops out after a Store eviction");
1875
- assert.strictEqual(fetchCalls, fetchesBefore, "no _federated-search fetch fired for the recompute");
1876
- });
1877
- (0, import_qunit.test)(`a candidate with an unresolvable predicate (unloaded linksTo) is not added`, async function(assert) {
1878
- let postRef = {
1879
- module: testRRI("post"),
1880
- name: "Post"
1881
- };
1882
- let query = { filter: {
1883
- on: postRef,
1884
- eq: { "article.cardTitle": "Any Title" }
1885
- } };
1886
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1887
- query,
1888
- realms: [testRealmURL],
1889
- isLive: true,
1890
- isAutoSaved: false,
1891
- storeService,
1892
- owner: this.owner
1893
- } }));
1894
- await search.loaded;
1895
- await settled();
1896
- let serverIds = search.instances.map((i) => i.id);
1897
- await storeService.addWithoutPersisting({ data: {
1898
- type: "card",
1899
- id: `${testRealmURL}posts/unresolved`,
1900
- attributes: { cardTitle: "Lonely Post" },
1901
- relationships: { article: { links: { self: `${testRealmURL}does/not/exist` } } },
1902
- meta: { adoptsFrom: postRef }
1903
- } });
1904
- await settled();
1905
- assert.deepEqual(search.instances.map((i) => i.id), serverIds, "an unresolvable candidate does not enter the displayed set");
1906
- assert.notOk(search.instances.map((i) => i.id).includes(rri(`${testRealmURL}posts/unresolved`)), "the unresolvable candidate is absent");
1907
- });
1908
- (0, import_qunit.test)(`a Store candidate outside the query's target realm is not added`, async function(assert) {
1909
- let otherRealmURL = "https://other-realm.example/";
1910
- await storeService.addWithoutPersisting({ data: {
1911
- type: "card",
1912
- id: `${otherRealmURL}books/foreign`,
1913
- attributes: {
1914
- author: {
1915
- firstName: "Foreign",
1916
- lastName: "Abdel-Rahman"
1917
- },
1918
- editions: 0,
1919
- pubDate: "2024-01-01"
1920
- },
1921
- meta: { adoptsFrom: bookRef }
1922
- } });
1923
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1924
- query: abdelRahmanQuery,
1925
- realms: [testRealmURL],
1926
- isLive: true,
1927
- isAutoSaved: false,
1928
- storeService,
1929
- owner: this.owner
1930
- } }));
1931
- await search.loaded;
1932
- await settled();
1933
- let ids = search.instances.map((i) => i.id).map(String);
1934
- assert.strictEqual(search.instances.length, 2, "only the two in-realm matches are displayed");
1935
- assert.notOk(ids.some((id) => id.startsWith(otherRealmURL)), "the candidate outside [testRealmURL] is excluded");
1936
- });
1937
- (0, import_qunit.test)(`override authority: a server-card removal and a candidate add both reach the displayed set`, async function(assert) {
1938
- let search = getSearchResourceForTest(loaderService, () => ({ named: {
1939
- query: abdelRahmanQuery,
1940
- realms: [testRealmURL],
1941
- isLive: true,
1942
- isAutoSaved: false,
1943
- storeService,
1944
- owner: this.owner
1945
- } }));
1946
- await search.loaded;
1947
- await settled();
1948
- assert.strictEqual(search.instances.length, 2);
1949
- let book1 = storeService.peek(`${testRealmURL}books/1`);
1950
- book1.author.lastName = "Changed";
1951
- await addBookCandidate("books/local-add", "Local", "Abdel-Rahman");
1952
- await settled();
1953
- let ids = search.instances.map((i) => i.id);
1954
- assert.strictEqual(search.instances.length, 2, "one server card dropped, one local candidate surfaced — same count, different members");
1955
- assert.notOk(ids.includes(rri(`${testRealmURL}books/1`)), "the now-non-matching server card is gone");
1956
- assert.ok(ids.includes(rri(`${testRealmURL}books/local-add`)), "the local-only matching candidate is present");
1957
- });
1958
- (0, import_qunit.test)("performThrottledSearch caps concurrent card searches at the configured limit", async function(assert) {
1959
- let inFlight = 0;
1960
- let maxInFlight = 0;
1961
- let started = 0;
1962
- let gates = [];
1963
- let count = SEARCH_CONCURRENCY_CAP + 2;
1964
- let makeRun = () => {
1965
- let gate = new Deferred();
1966
- gates.push(gate);
1967
- return async () => {
1968
- started++;
1969
- inFlight++;
1970
- maxInFlight = Math.max(maxInFlight, inFlight);
1971
- await gate.promise;
1972
- inFlight--;
1973
- };
1974
- };
1975
- let results = Array.from({ length: count }, () => storeService.performThrottledSearch(makeRun(), "card"));
1976
- try {
1977
- await waitUntil(() => started >= SEARCH_CONCURRENCY_CAP);
1978
- assert.strictEqual(maxInFlight, SEARCH_CONCURRENCY_CAP, "no more than the cap run at once");
1979
- assert.strictEqual(started, SEARCH_CONCURRENCY_CAP, "excess searches are queued, not started");
1980
- } finally {
1981
- for (let gate of gates) {
1982
- gate.fulfill();
1983
- await settled();
1984
- }
1985
- await Promise.all(results);
1986
- }
1987
- assert.strictEqual(maxInFlight, SEARCH_CONCURRENCY_CAP, "the cap held across the whole drain");
1988
- assert.strictEqual(started, count, "every queued search eventually ran (enqueue, not drop)");
1989
- });
1990
- (0, import_qunit.test)("a throttled search waits for a slot before it reaches the network; a host search does not", async function(assert) {
1991
- let cap = fillTheLane("query-field");
1992
- await waitUntil(cap.started, { timeout: 5e3 });
1993
- fetchCalls = 0;
1994
- let throttledDone = false;
1995
- let throttled = storeService.search(abdelRahmanQuery, [testRealmURL], { throttled: true }).then(() => {
1996
- throttledDone = true;
1997
- });
1998
- let hostDone = false;
1999
- let host = storeService.search(abdelRahmanQuery, [testRealmURL]).then(() => {
2000
- hostDone = true;
2001
- });
2002
- try {
2003
- await waitUntil(() => hostDone, { timeout: 5e3 });
2004
- assert.strictEqual(fetchCalls, 1, "the host search reached the network while every slot was taken");
2005
- assert.false(throttledDone, "the throttled search is still queued behind the full cap");
2006
- } finally {
2007
- await cap.release();
2008
- }
2009
- await throttled;
2010
- await host;
2011
- assert.true(throttledDone, "the throttled search ran once a slot freed");
2012
- assert.strictEqual(fetchCalls, 2, "it reached the network only after it had a slot");
2013
- });
2014
- (0, import_qunit.test)("a card search reaches the network while the query-field lane is full", async function(assert) {
2015
- let cap = fillTheLane("query-field");
2016
- await waitUntil(cap.started, { timeout: 5e3 });
2017
- fetchCalls = 0;
2018
- let queryFieldDone = false;
2019
- let queryField = storeService.search(abdelRahmanQuery, [testRealmURL], { throttled: true }).then(() => {
2020
- queryFieldDone = true;
2021
- });
2022
- let cardDone = false;
2023
- let card = storeService.search(abdelRahmanQuery, [testRealmURL], { cardInitiated: true }).then(() => {
2024
- cardDone = true;
2025
- });
2026
- try {
2027
- await waitUntil(() => cardDone, { timeout: 5e3 });
2028
- assert.strictEqual(fetchCalls, 1, "the card search reached the network past the queued fan-out");
2029
- assert.false(queryFieldDone, "the query-field search is still queued behind its own full lane");
2030
- } finally {
2031
- await cap.release();
2032
- }
2033
- await queryField;
2034
- await card;
2035
- assert.strictEqual(fetchCalls, 2, "the query-field search ran once its lane freed");
2036
- });
2037
- (0, import_qunit.test)("a query-field search reaches the network while the card lane is full", async function(assert) {
2038
- let cap = fillTheLane("card");
2039
- await waitUntil(cap.started, { timeout: 5e3 });
2040
- fetchCalls = 0;
2041
- let cardDone = false;
2042
- let card = storeService.search(abdelRahmanQuery, [testRealmURL], { cardInitiated: true }).then(() => {
2043
- cardDone = true;
2044
- });
2045
- let queryFieldDone = false;
2046
- let queryField = storeService.search(abdelRahmanQuery, [testRealmURL], { throttled: true }).then(() => {
2047
- queryFieldDone = true;
2048
- });
2049
- try {
2050
- await waitUntil(() => queryFieldDone, { timeout: 5e3 });
2051
- assert.strictEqual(fetchCalls, 1, "the query-field search reached the network past the queued card search");
2052
- assert.false(cardDone, "the card search is still queued behind its own full lane");
2053
- } finally {
2054
- await cap.release();
2055
- }
2056
- await card;
2057
- await queryField;
2058
- assert.strictEqual(fetchCalls, 2, "the card search ran once its lane freed");
2059
- });
2060
- (0, import_qunit.test)("a queued search whose consumer has gone away gives back its slot instead of fetching", async function(assert) {
2061
- let cap = fillTheLane("query-field");
2062
- await waitUntil(cap.started, { timeout: 5e3 });
2063
- fetchCalls = 0;
2064
- let obsolete = false;
2065
- let queued = storeService.searchWithMeta(abdelRahmanQuery, [testRealmURL], {
2066
- throttled: true,
2067
- isObsolete: () => obsolete
2068
- });
2069
- obsolete = true;
2070
- await cap.release();
2071
- let result = await queued;
2072
- assert.strictEqual(fetchCalls, 0, "the abandoned search never reached the network");
2073
- assert.deepEqual(result.instances, [], "it resolves empty for the caller that is no longer listening");
2074
- assert.strictEqual(result.meta.page?.total, 0, "and reports no count rather than a stale one");
2075
- });
2076
- function fillTheLane(lane) {
2077
- let laneCap = lane === "card" ? SEARCH_CONCURRENCY_CAP : QUERY_FIELD_SEARCH_CONCURRENCY_CAP;
2078
- let gates = [];
2079
- let occupied = 0;
2080
- let occupying = Array.from({ length: laneCap }, () => {
2081
- let gate = new Deferred();
2082
- gates.push(gate);
2083
- return storeService.performThrottledSearch(async () => {
2084
- occupied++;
2085
- await gate.promise;
2086
- }, lane);
2087
- });
2088
- return {
2089
- started: () => occupied >= laneCap,
2090
- release: async () => {
2091
- for (let gate of gates) try {
2092
- gate.fulfill();
2093
- } catch {}
2094
- await Promise.all(occupying);
2095
- }
2096
- };
2097
- }
2098
- function countThrottledRuns() {
2099
- let enqueued = 0;
2100
- let perform = storeService.performThrottledSearch.bind(storeService);
2101
- storeService.performThrottledSearch = (run, lane) => {
2102
- enqueued++;
2103
- return perform(run, lane);
2104
- };
2105
- return {
2106
- enqueued: () => enqueued,
2107
- restore: () => delete storeService.performThrottledSearch
2108
- };
2109
- }
2110
- (0, import_qunit.test)("a queued search superseded by a query change never sends the superseded query", async function(assert) {
2111
- let cap = fillTheLane("query-field");
2112
- await waitUntil(cap.started, { timeout: 5e3 });
2113
- let counter = countThrottledRuns();
2114
- fetchCalls = 0;
2115
- let args = {
2116
- query: abdelRahmanQuery,
2117
- realms: [testRealmURL],
2118
- isLive: true,
2119
- isAutoSaved: false,
2120
- throttled: true,
2121
- storeService,
2122
- owner: this.owner
2123
- };
2124
- let search = getSearchResourceForTest(loaderService, () => ({ named: args }));
2125
- try {
2126
- search.isLoading;
2127
- await waitUntil(() => counter.enqueued() > 0, { timeout: 5e3 });
2128
- search.modify([], {
2129
- ...args,
2130
- query: aguilarQuery
2131
- });
2132
- await waitUntil(() => counter.enqueued() > 1, { timeout: 5e3 });
2133
- await cap.release();
2134
- await settled();
2135
- assert.strictEqual(fetchCalls, 1, "only the surviving query reached the network");
2136
- assert.strictEqual(search.instances.length, 1, "the resource holds the surviving query's one match, not the superseded query's two");
2137
- } finally {
2138
- counter.restore();
2139
- await cap.release();
2140
- }
2141
- });
2142
- (0, import_qunit.test)("a queued search whose resource is destroyed never reaches the network", async function(assert) {
2143
- let cap = fillTheLane("query-field");
2144
- await waitUntil(cap.started, { timeout: 5e3 });
2145
- let counter = countThrottledRuns();
2146
- fetchCalls = 0;
2147
- let parent = {};
2148
- setOwner(parent, this.owner);
2149
- let search = getSearchResourceForTest(parent, () => ({ named: {
2150
- query: abdelRahmanQuery,
2151
- realms: [testRealmURL],
2152
- isLive: true,
2153
- isAutoSaved: false,
2154
- throttled: true,
2155
- storeService,
2156
- owner: this.owner
2157
- } }));
2158
- try {
2159
- search.isLoading;
2160
- await waitUntil(() => counter.enqueued() > 0, { timeout: 5e3 });
2161
- run(() => destroy(parent));
2162
- await cap.release();
2163
- await settled();
2164
- assert.strictEqual(fetchCalls, 0, "the destroyed resource never sent the search it had queued");
2165
- } finally {
2166
- counter.restore();
2167
- await cap.release();
2168
- }
2169
- });
2170
- (0, import_qunit.test)("a card-initiated search over the realms cap is rejected; the host is not", async function(assert) {
2171
- let query = { filter: { eq: {} } };
2172
- let realms = [
2173
- "http://r1/",
2174
- "http://r2/",
2175
- "http://r3/"
2176
- ];
2177
- await assert.rejects(storeService.search(query, realms, { cardInitiated: true }), (e) => e instanceof SearchBoundError, "a card search over the realms cap throws a SearchBoundError");
2178
- let hostErr;
2179
- try {
2180
- await storeService.search(query, realms);
2181
- } catch (e) {
2182
- hostErr = e;
2183
- }
2184
- assert.false(hostErr instanceof SearchBoundError, "the host search is not subject to the realms cap");
2185
- });
2186
- (0, import_qunit.test)("a card-initiated search over the page cap is rejected", async function(assert) {
2187
- await assert.rejects(storeService.search({ page: { size: 1e3 } }, ["http://r1/"], { cardInitiated: true }), (e) => e instanceof SearchBoundError, "a card search over the page cap throws a SearchBoundError");
2188
- });
2189
- (0, import_qunit.test)("the card-facing store defaults a no-realm search to the current realm", async function(assert) {
2190
- let results = await storeService.cardFacingStore(() => void 0).search({ filter: { eq: {} } });
2191
- assert.deepEqual(results, [], "a no-realm search with no current realm is empty");
2192
- let bound = storeService.cardFacingStore(() => "http://current/");
2193
- await assert.rejects(bound.search({ filter: { eq: {} } }, [
2194
- "http://r1/",
2195
- "http://r2/",
2196
- "http://r3/"
2197
- ]), (e) => e instanceof SearchBoundError, "the facade enforces the realms cap on an explicit list");
2198
- });
2199
- (0, import_qunit.test)("the card-facing store withholds the search methods that skip the caps", async function(assert) {
2200
- let cardStore = storeService.cardFacingStore(() => "http://current/");
2201
- for (let name of [
2202
- "searchWithMeta",
2203
- "searchEntries",
2204
- "getWithoutCache"
2205
- ]) {
2206
- assert.strictEqual(typeof storeService[name], "function", `${name} is a real method on the store service`);
2207
- assert.strictEqual(cardStore[name], void 0, `${name} is not reachable through the card-facing store`);
2208
- }
2209
- for (let name of [
2210
- "save",
2211
- "create",
2212
- "add",
2213
- "addWithoutPersisting",
2214
- "addWithoutWaiting",
2215
- "peek",
2216
- "peekError",
2217
- "get",
2218
- "delete",
2219
- "patch",
2220
- "search",
2221
- "getSaveState"
2222
- ]) assert.strictEqual(typeof cardStore[name], "function", `${name} is reachable through the card-facing store`);
2223
- });
2224
- (0, import_qunit.test)("the card-facing store gives no way back to the service and refuses writes", async function(assert) {
2225
- let cardStore = storeService.cardFacingStore(() => "http://current/");
2226
- let realGet = storeService.get;
2227
- let realSearch = storeService.search;
2228
- assert.strictEqual(cardStore.valueOf(), cardStore, "valueOf answers the facade, not the service");
2229
- assert.strictEqual(cardStore.valueOf().searchWithMeta, void 0, "so an uncapped sibling stays out of reach through it");
2230
- assert.strictEqual(String(cardStore), "[object Object]", "the facade still converts to a string");
2231
- assert.throws(() => {
2232
- cardStore.get = () => "replaced";
2233
- }, TypeError, "assigning a method through the facade is refused");
2234
- assert.throws(() => cardStore.__defineGetter__("search", () => "replaced"), TypeError, "defining a getter through the facade is refused");
2235
- assert.throws(() => Object.defineProperty(cardStore, "patch", { value: "replaced" }), TypeError, "defining a property on the facade is refused");
2236
- assert.throws(() => {
2237
- delete cardStore.search;
2238
- }, TypeError, "deleting a method through the facade is refused");
2239
- assert.strictEqual(storeService.get, realGet, "the service's get is untouched");
2240
- assert.strictEqual(storeService.search, realSearch, "the service's search is untouched");
2241
- for (let name of [
2242
- "get",
2243
- "search",
2244
- "patch"
2245
- ]) assert.false(Object.prototype.hasOwnProperty.call(storeService, name), `nothing was installed as an own ${name} on the service`);
2246
- });
2247
- });
2248
- });
2249
- //#endregion