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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1050) 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-EsOoJpQ1.js +151 -0
  24. package/bundled-test-harness/assets/aibot-message-uGaCPn5o.js +1312 -0
  25. package/bundled-test-harness/assets/app-pIzBYfiZ.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-Dnxlbbu6.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-DJi7jMaU.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-BoUyFMEw.js +235 -0
  57. package/bundled-test-harness/assets/card-chooser-test-7ZwhxxkH.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-ByPl5n55.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-Be971b-V.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-Ci5dG5fv.js +2 -0
  74. package/bundled-test-harness/assets/choreo-D1K9RyjM.js +1031 -0
  75. package/bundled-test-harness/assets/choreo-feature-reel-test-vzmW-SFd.js +155 -0
  76. package/bundled-test-harness/assets/choreo-gallery-build-order-test-J6n0_PKm.js +436 -0
  77. package/bundled-test-harness/assets/choreo-gallery-compositor-test-DSi1N9bi.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-BIuLOZH6.js +133 -0
  80. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-ClGjpnj6.js +42 -0
  81. package/bundled-test-harness/assets/choreo-gallery-drift-test-OjxMXV0Y.js +620 -0
  82. package/bundled-test-harness/assets/choreo-gallery-escort-test-D6VL4FfT.js +187 -0
  83. package/bundled-test-harness/assets/choreo-gallery-films-test-DBcDHGx8.js +140 -0
  84. package/bundled-test-harness/assets/choreo-gallery-filter-test-BUghtJZe.js +46 -0
  85. package/bundled-test-harness/assets/choreo-gallery-fold-test-0D9-_h_I.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-CZnaxUNJ.js +321 -0
  88. package/bundled-test-harness/assets/choreo-gallery-hang-test-WFvsJ-MJ.js +426 -0
  89. package/bundled-test-harness/assets/choreo-gallery-highlight-test-Dn0hYPLC.js +60 -0
  90. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-C5WvS67s.js +370 -0
  91. package/bundled-test-harness/assets/choreo-gallery-interruption-test-CgT9RKTe.js +176 -0
  92. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-BZgqbTJd.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-Dt71t4CU.js +111 -0
  95. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-B_rDq4em.js +127 -0
  96. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-j_cZ9cAM.js +100 -0
  97. package/bundled-test-harness/assets/choreo-gallery-presentation-test-CIFKR65J.js +157 -0
  98. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-BvRCiCvB.js +145 -0
  99. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-DgO2MBzU.js +89 -0
  100. package/bundled-test-harness/assets/choreo-gallery-sheet-test-BntUKT_P.js +48 -0
  101. package/bundled-test-harness/assets/choreo-gallery-site-test-CvSE6Jyq.js +237 -0
  102. package/bundled-test-harness/assets/choreo-gallery-stage-Dj6tFzon.js +256 -0
  103. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-CkDrAPA8.js +102 -0
  104. package/bundled-test-harness/assets/choreo-gallery-stages-test-DHUmzoRW.js +35 -0
  105. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-BZ9-cDFh.js +138 -0
  106. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-7uP6mZpo.js +144 -0
  107. package/bundled-test-harness/assets/choreo-gallery-theater-test-DgEue9FD.js +252 -0
  108. package/bundled-test-harness/assets/choreo-gallery-tuning-test-CfPx5iCp.js +95 -0
  109. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-o9T2EFKq.js +88 -0
  110. package/bundled-test-harness/assets/choreo-gallery-wires-test-73JLkxn6.js +148 -0
  111. package/bundled-test-harness/assets/client-telemetry-test-DFM4mML2.js +340 -0
  112. package/bundled-test-harness/assets/clip-CsRtHZiN.js +92 -0
  113. package/bundled-test-harness/assets/clip-CycGr0Lf.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-D9pbJMK8.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-BSqAGv4g.js +150 -0
  123. package/bundled-test-harness/assets/computed-test-DtyZGgdc.js +1320 -0
  124. package/bundled-test-harness/assets/container-CEslVSTe.js +10884 -0
  125. package/bundled-test-harness/assets/content-preview-components-test-BztI4fz-.js +462 -0
  126. package/bundled-test-harness/assets/copy-and-edit-test-Cqw7kcur.js +292 -0
  127. package/bundled-test-harness/assets/copy-card-test-D5m3eVEH.js +218 -0
  128. package/bundled-test-harness/assets/copy-file-to-realm-test-FPY-6Ddm.js +148 -0
  129. package/bundled-test-harness/assets/copy-source-test-9pJD-qey.js +56 -0
  130. package/bundled-test-harness/assets/create-file-test-DjMf88u_.js +1086 -0
  131. package/bundled-test-harness/assets/create-file-test-XbgOqg38.js +464 -0
  132. package/bundled-test-harness/assets/create-listing-modal-test-DyGlGMWu.js +273 -0
  133. package/bundled-test-harness/assets/create-listing-pr-request-test-CBtIV0Z8.js +117 -0
  134. package/bundled-test-harness/assets/create-spec-test-4xR0gM7E.js +256 -0
  135. package/bundled-test-harness/assets/create-submission-workflow-test-DQpWrpGT.js +132 -0
  136. package/bundled-test-harness/assets/create-workspace-test-BQAudgpS.js +104 -0
  137. package/bundled-test-harness/assets/credential-fields-test-DXKBdbZD.js +200 -0
  138. package/bundled-test-harness/assets/csv-file-def-test-Cnp4y834.js +102 -0
  139. package/bundled-test-harness/assets/dashboard-CmuOhIYC.js +3628 -0
  140. package/bundled-test-harness/assets/dashboard-CzN49x74.css +2400 -0
  141. package/bundled-test-harness/assets/dashboard-add-workspace-test-T32hWB-g.js +50 -0
  142. package/bundled-test-harness/assets/dashboard-agents-test-BN5maCgQ.js +334 -0
  143. package/bundled-test-harness/assets/dashboard-archive-test-BzwUte_Z.js +128 -0
  144. package/bundled-test-harness/assets/dashboard-delete-test-D2Gcp81V.js +163 -0
  145. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-BgKNIr35.js +71 -0
  146. package/bundled-test-harness/assets/dashboard-duplicate-test-D7JEWylc.js +222 -0
  147. package/bundled-test-harness/assets/dashboard-get-started-test-DOGPzGoA.js +374 -0
  148. package/bundled-test-harness/assets/dashboard-ir2bakJS.js +142 -0
  149. package/bundled-test-harness/assets/dashboard-pinned-cards-test-Bn_P9xJU.js +220 -0
  150. package/bundled-test-harness/assets/dashboard-publish-test-64sGQ0nG.js +70 -0
  151. package/bundled-test-harness/assets/dashboard-reindex-test-DJjYq1ct.js +115 -0
  152. package/bundled-test-harness/assets/dashboard-section-rail-test-ZkAhWu5V.js +169 -0
  153. package/bundled-test-harness/assets/dashboard-state-test-BbkpPB5L.js +162 -0
  154. package/bundled-test-harness/assets/dashboard-test-CBLdPrSt.js +545 -0
  155. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DFT3R1Zx.js +62 -0
  156. package/bundled-test-harness/assets/dashboard-workspace-test-DqBdCFo2.js +537 -0
  157. package/bundled-test-harness/assets/dashboard-workspaces-section-test-CH1HDfxR.js +410 -0
  158. package/bundled-test-harness/assets/data-file-def-preview-test-CNsZwQEJ.js +155 -0
  159. package/bundled-test-harness/assets/date-time-fields-test-CEFaZTnF.js +359 -0
  160. package/bundled-test-harness/assets/debug-message-test-0hv0RwE_.js +117 -0
  161. package/bundled-test-harness/assets/declared-captures-test-C-0yPRU7.js +879 -0
  162. package/bundled-test-harness/assets/delete-workspace-test-CZOwGy78.js +102 -0
  163. package/bundled-test-harness/assets/diffing-test-BEKI905O.js +210 -0
  164. package/bundled-test-harness/assets/download-file-to-realm-test-C1kAGDll.js +119 -0
  165. package/bundled-test-harness/assets/editor-test-C9x5ZY6g.js +688 -0
  166. package/bundled-test-harness/assets/edits-D76-aanh.js +651 -0
  167. package/bundled-test-harness/assets/email-field-test-LGkrB_2B.js +75 -0
  168. package/bundled-test-harness/assets/enum-field-test-CPyV1J-m.js +935 -0
  169. package/bundled-test-harness/assets/error-display-test-bWuUtfIG.js +343 -0
  170. package/bundled-test-harness/assets/evaluate-module-test-CbS5h8t3.js +91 -0
  171. package/bundled-test-harness/assets/execute-atomic-operations-test-B4Kfco0k.js +113 -0
  172. package/bundled-test-harness/assets/externals-CDQm-Lm7.js +4393 -0
  173. package/bundled-test-harness/assets/fallback-banner-live-delete-test-DQSiTzvj.js +207 -0
  174. package/bundled-test-harness/assets/fallback-banner-test-CJFKLpOy.js +225 -0
  175. package/bundled-test-harness/assets/fallback-banner-test-DQkrFE4-.js +53 -0
  176. package/bundled-test-harness/assets/fallback-models-test-CiWfmxaB.js +161 -0
  177. package/bundled-test-harness/assets/fetch-card-json-test-DULUqUEu.js +61 -0
  178. package/bundled-test-harness/assets/field-configuration-test-BXZq28xa.js +551 -0
  179. package/bundled-test-harness/assets/field-markdown-domain-test-DdXCifs6.js +616 -0
  180. package/bundled-test-harness/assets/field-markdown-oversize-test-DouPPTHX.js +88 -0
  181. package/bundled-test-harness/assets/field-markdown-primitives-test-DSRGJeyl.js +365 -0
  182. package/bundled-test-harness/assets/field-markdown-specialized-test-DlTYLl_s.js +534 -0
  183. package/bundled-test-harness/assets/field-playground-test-NhS4VvoN.js +894 -0
  184. package/bundled-test-harness/assets/field-support-predicates-test-DWpyT1Qf.js +167 -0
  185. package/bundled-test-harness/assets/file-attachment-test-m72-VerW.js +796 -0
  186. package/bundled-test-harness/assets/file-chooser-panel-test-DuAqD9bn.js +153 -0
  187. package/bundled-test-harness/assets/file-chooser-test-CjaXXwpT.js +504 -0
  188. package/bundled-test-harness/assets/file-def-format-templates-test-BDs4OmHq.js +380 -0
  189. package/bundled-test-harness/assets/file-def-live-reload-test-BqTdnq-W.js +124 -0
  190. package/bundled-test-harness/assets/file-def-menu-items-test-DqdINXsD.js +138 -0
  191. package/bundled-test-harness/assets/file-def-navigation-test-BPGr0SQy.js +109 -0
  192. package/bundled-test-harness/assets/file-def-serialization-test-CvjW-FlC.js +89 -0
  193. package/bundled-test-harness/assets/file-def-test-C-Yv_NjS.js +216 -0
  194. package/bundled-test-harness/assets/file-preview-live-reload-test-MzwGwasU.js +310 -0
  195. package/bundled-test-harness/assets/file-resource-primitives-test-D3GmfqNs.js +255 -0
  196. package/bundled-test-harness/assets/file-tree-from-index-test-CfldnUgm.js +96 -0
  197. package/bundled-test-harness/assets/file-tree-test--0ZCPRe9.js +851 -0
  198. package/bundled-test-harness/assets/file-view-model-test-BDIAeBV8.js +346 -0
  199. package/bundled-test-harness/assets/filedef-export-shape-test-B2tgU404.js +61 -0
  200. package/bundled-test-harness/assets/film-D1E-odYG.js +13 -0
  201. package/bundled-test-harness/assets/film-D25Y0ED6.js +2 -0
  202. package/bundled-test-harness/assets/film-D97U-ydx.js +4074 -0
  203. package/bundled-test-harness/assets/flac-audio-def-test-ByoXMoQ1.js +143 -0
  204. package/bundled-test-harness/assets/font-metadata-extractor-test-hawLTDTG.js +415 -0
  205. package/bundled-test-harness/assets/formatted-aibot-message-test-Bdx_-Ktn.js +109 -0
  206. package/bundled-test-harness/assets/formatted-user-message-test-CodbrU3t.js +43 -0
  207. package/bundled-test-harness/assets/freestyle-test-faQhSciz.js +17 -0
  208. package/bundled-test-harness/assets/full-reindex-realm-test-CE5RJTIC.js +101 -0
  209. package/bundled-test-harness/assets/garbage-collection-test-v-3sev77.js +403 -0
  210. package/bundled-test-harness/assets/general-test-DQuxDvXK.js +923 -0
  211. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-CucWyrkH.js +65 -0
  212. package/bundled-test-harness/assets/generic-file-def-preview-test-_EDRsebi.js +71 -0
  213. package/bundled-test-harness/assets/get-available-realm-identifiers-test-CV023yek.js +47 -0
  214. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test--DOu3DyV.js +47 -0
  215. package/bundled-test-harness/assets/get-default-writable-realm-test-Bic8jl6R.js +54 -0
  216. package/bundled-test-harness/assets/get-published-realms-test-DrA5YcFN.js +71 -0
  217. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-jfU6SIWn.js +54 -0
  218. package/bundled-test-harness/assets/get-relationship-membership-state-test-Ccy2Z7MN.js +1308 -0
  219. package/bundled-test-harness/assets/get-user-system-card-test-Bmq2lmWv.js +67 -0
  220. package/bundled-test-harness/assets/gif-image-def-test-N1mMQC-X.js +188 -0
  221. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-DzPKH76g.js +160 -0
  222. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-D9mlcQuN.js +74 -0
  223. package/bundled-test-harness/assets/gts-file-def-test-BL1jpQ9J.js +100 -0
  224. package/bundled-test-harness/assets/head-format-preview-test-BVCaPQqc.js +158 -0
  225. package/bundled-test-harness/assets/helpers-Ds68JxHe.js +5 -0
  226. package/bundled-test-harness/assets/host-mode-service-B4bisRdR.js +262 -0
  227. package/bundled-test-harness/assets/host-mode-test-BmkN2PCJ.js +831 -0
  228. package/bundled-test-harness/assets/host-submode-test-C6SxQ796.js +1392 -0
  229. package/bundled-test-harness/assets/html-component-test-CNQ9wF0Q.js +65 -0
  230. package/bundled-test-harness/assets/html-def-test-BcaCVVQq.js +160 -0
  231. package/bundled-test-harness/assets/html-meta-extractor-test-BU1hjkTp.js +60 -0
  232. package/bundled-test-harness/assets/hydratable-card-test-CX6MWiti.js +426 -0
  233. package/bundled-test-harness/assets/icon-button-C1zH38Nc.js +67 -0
  234. package/bundled-test-harness/assets/image-metadata-extractor-test-CakSBPZ_.js +1109 -0
  235. package/bundled-test-harness/assets/index-changes-test-D8RtgfyG.js +367 -0
  236. package/bundled-test-harness/assets/index-query-engine-test-BOvxkx07.js +2593 -0
  237. package/bundled-test-harness/assets/index-writer-test-B_bR2fjw.js +3040 -0
  238. package/bundled-test-harness/assets/inspector-test-BwPXJj1S.js +2058 -0
  239. package/bundled-test-harness/assets/instance-filter-matcher-test-COAlkUed.js +788 -0
  240. package/bundled-test-harness/assets/instantiate-card-test-BVQhZjpq.js +164 -0
  241. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DzQLG41H.js +475 -0
  242. package/bundled-test-harness/assets/interact-submode-setup-C5bKXq73.js +566 -0
  243. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-Cd3dpjhB.js +99 -0
  244. package/bundled-test-harness/assets/invite-user-to-room-test-Brabz1tt.js +142 -0
  245. package/bundled-test-harness/assets/invoke-card-operation-test-C1Q1FUf4.js +333 -0
  246. package/bundled-test-harness/assets/isolated-render-test-BLJfS7BU.js +51 -0
  247. package/bundled-test-harness/assets/job-scoped-doc-cache-test-Bgv5woaB.js +181 -0
  248. package/bundled-test-harness/assets/job-scoped-instance-residency-test-C_bB6KpR.js +103 -0
  249. package/bundled-test-harness/assets/jpg-image-def-test-gdLIKocD.js +697 -0
  250. package/bundled-test-harness/assets/json-file-def-test-CPYMRBY-.js +95 -0
  251. package/bundled-test-harness/assets/key-notices-badge-test-DemslfLw.js +155 -0
  252. package/bundled-test-harness/assets/key-readiness-test-5tq5JycL.js +190 -0
  253. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-BbhDZ2PH.js +398 -0
  254. package/bundled-test-harness/assets/linksto-error-sentinel-test-C2t7fFPi.js +238 -0
  255. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test--U_UvUty.js +354 -0
  256. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-Dj3Xy0ZF.js +303 -0
  257. package/bundled-test-harness/assets/linksto-sentinel-reload-test-D0dK4Jjs.js +197 -0
  258. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test---IYiXok.js +260 -0
  259. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-CT04MhES.js +196 -0
  260. package/bundled-test-harness/assets/lint-and-fix-test-aadgx7rX.js +51 -0
  261. package/bundled-test-harness/assets/live-test-BGij_vuc.js +100 -0
  262. package/bundled-test-harness/assets/live-test-CppvValf.js +2 -0
  263. package/bundled-test-harness/assets/load-default-skills-test-Cp2m_ebp.js +74 -0
  264. package/bundled-test-harness/assets/loader-parallel-prefetch-test-vU_26Jqu.js +257 -0
  265. package/bundled-test-harness/assets/loader-test-CTaw8K_B.js +482 -0
  266. package/bundled-test-harness/assets/loading-test-DGGt4qZZ.js +63 -0
  267. package/bundled-test-harness/assets/m4a-audio-def-test-DAiReOXH.js +190 -0
  268. package/bundled-test-harness/assets/main-DUKPWRts.js +5 -0
  269. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-CIXq9FqR.js +470 -0
  270. package/bundled-test-harness/assets/markdown-embed-chooser-test-zFGh9WfP.js +334 -0
  271. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-Byn_WFwY.js +447 -0
  272. package/bundled-test-harness/assets/markdown-embed-preview-test-Y3iFMttg.js +368 -0
  273. package/bundled-test-harness/assets/markdown-fallback-test-Br1TPkLZ.js +316 -0
  274. package/bundled-test-harness/assets/markdown-file-def-test-Crm2MAnq.js +380 -0
  275. package/bundled-test-harness/assets/markdown-helpers-test-CZ9Vvywc.js +188 -0
  276. package/bundled-test-harness/assets/markdown-highlighting-test-CFMkoVDl.js +244 -0
  277. package/bundled-test-harness/assets/markdown-preview-Df5fp1SY.js +72 -0
  278. package/bundled-test-harness/assets/markdown-preview-test-DDaPzsVs.js +238 -0
  279. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-aH6HQly1.js +146 -0
  280. package/bundled-test-harness/assets/markdown-skill-search-test-CiNLQs-5.js +80 -0
  281. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-DaA8w1Jj.js +63 -0
  282. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-21GIlf55.js +300 -0
  283. package/bundled-test-harness/assets/matrix-service-personal-realm-test-jn9DUENm.js +125 -0
  284. package/bundled-test-harness/assets/matrix-service-realm-servers-test-eNZVJakl.js +55 -0
  285. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-Cabm8_dY.js +132 -0
  286. package/bundled-test-harness/assets/matrix-service-relogin-test-C77EFgjc.js +59 -0
  287. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-BgM0fPiO.js +35 -0
  288. package/bundled-test-harness/assets/menu-Cl50TSFe.js +3561 -0
  289. package/bundled-test-harness/assets/message-service-subscription-test-CfEqH2jP.js +110 -0
  290. package/bundled-test-harness/assets/message-service-test-DsTzH1In.js +144 -0
  291. package/bundled-test-harness/assets/message-tool-test-C5xVfTtj.js +33 -0
  292. package/bundled-test-harness/assets/midi-audio-def-test-goLRCNCZ.js +182 -0
  293. package/bundled-test-harness/assets/migrate-skill-test-yPCbVfxG.js +161 -0
  294. package/bundled-test-harness/assets/mini-YXjrY_tH.js +1404 -0
  295. package/bundled-test-harness/assets/mini-card-chooser-test-DrllikHB.js +272 -0
  296. package/bundled-test-harness/assets/mini-file-chooser-test-BfqayhmI.js +201 -0
  297. package/bundled-test-harness/assets/mock-matrix-C7BrPS6S.js +2 -0
  298. package/bundled-test-harness/assets/mock-matrix-FjsXmU7-.js +15107 -0
  299. package/bundled-test-harness/assets/modal-BgaZavcs.js +322 -0
  300. package/bundled-test-harness/assets/model-cost-tier-test-CZlu1zww.js +174 -0
  301. package/bundled-test-harness/assets/model-file-extract-test-CjEBupY5.js +206 -0
  302. package/bundled-test-harness/assets/module-transpile-cache-test-XW6DDsmz.js +67 -0
  303. package/bundled-test-harness/assets/monaco-test-DkoRuFiQ.js +100 -0
  304. package/bundled-test-harness/assets/mp3-audio-def-test-v369NNsQ.js +133 -0
  305. package/bundled-test-harness/assets/multiple-stacks-test-CJpYPWdM.js +208 -0
  306. package/bundled-test-harness/assets/nested-query-field-render-test-CfDrBcUN.js +249 -0
  307. package/bundled-test-harness/assets/no-stacks-test-MmsJeLpz.js +48 -0
  308. package/bundled-test-harness/assets/number-field-test-A7B2r0M5.js +184 -0
  309. package/bundled-test-harness/assets/office-file-def-test-BNRvFmCB.js +263 -0
  310. package/bundled-test-harness/assets/office-metadata-extractor-test-zlDoEIEp.js +218 -0
  311. package/bundled-test-harness/assets/office-poster-capture-test-DdFEaOxR.js +203 -0
  312. package/bundled-test-harness/assets/ogg-audio-def-test-kk91BzQY.js +196 -0
  313. package/bundled-test-harness/assets/open-create-listing-modal-test-D1Dl1pov.js +131 -0
  314. package/bundled-test-harness/assets/open-image-in-new-tab-test-DyCmdMyO.js +52 -0
  315. package/bundled-test-harness/assets/open-secure-window-test-dz1vPudF.js +253 -0
  316. package/bundled-test-harness/assets/open-workspace-test-BvTcskzP.js +46 -0
  317. package/bundled-test-harness/assets/operation-lowering-test-CKkamOQt.js +2957 -0
  318. package/bundled-test-harness/assets/operations-invocation-test-BMj42rQe.js +523 -0
  319. package/bundled-test-harness/assets/operations-optimistic-test-KJLyzT8v.js +203 -0
  320. package/bundled-test-harness/assets/operations-query-test-J3HcnaoK.js +459 -0
  321. package/bundled-test-harness/assets/operations-store-reconciliation-test-CkbGBMBQ.js +406 -0
  322. package/bundled-test-harness/assets/operations-test-C7zXXpRW.js +2518 -0
  323. package/bundled-test-harness/assets/operator-mode-acceptance-test-BPolI_RD.js +1195 -0
  324. package/bundled-test-harness/assets/operator-mode-card-chooser-test-CQ1v8med.js +1036 -0
  325. package/bundled-test-harness/assets/operator-mode-links-test-BMHEauS3.js +797 -0
  326. package/bundled-test-harness/assets/operator-mode-test-blL_JVF8.js +696 -0
  327. package/bundled-test-harness/assets/operator-mode-ui-test-BG6I7-Hc.js +1045 -0
  328. package/bundled-test-harness/assets/overlay-D2rQi8lJ.js +427 -0
  329. package/bundled-test-harness/assets/overlay-menu-items-test-D-zmRQQ0.js +331 -0
  330. package/bundled-test-harness/assets/overlays-COinwHCP.js +2 -0
  331. package/bundled-test-harness/assets/overlays-detached-element-test-C73nMXes.js +56 -0
  332. package/bundled-test-harness/assets/overlays-nTqcu69K.js +75 -0
  333. package/bundled-test-harness/assets/panel-D9SEMehG.js +15124 -0
  334. package/bundled-test-harness/assets/past-sessions-test-De9N4wVX.js +321 -0
  335. package/bundled-test-harness/assets/patch-fields-test-Bp2IE0Jw.js +1014 -0
  336. package/bundled-test-harness/assets/patch-instance-test-DssuRGKP.js +348 -0
  337. package/bundled-test-harness/assets/pdf-file-def-test-Barj9ffD.js +111 -0
  338. package/bundled-test-harness/assets/pdf-metadata-extractor-test-B7KnXcIm.js +130 -0
  339. package/bundled-test-harness/assets/permission-checking-realm-test-OBzvhDB_.js +306 -0
  340. package/bundled-test-harness/assets/persist-module-inspector-view-test-BIdbkdPr.js +60 -0
  341. package/bundled-test-harness/assets/persist-scroll-position-test-Bhb7wJiy.js +254 -0
  342. package/bundled-test-harness/assets/phone-number-field-test-C2yuCrXY.js +73 -0
  343. package/bundled-test-harness/assets/pill-menu-test-BIp91YXi.js +60 -0
  344. package/bundled-test-harness/assets/plate-DAr_pvwC.js +41 -0
  345. package/bundled-test-harness/assets/plate-DeoQd99m.js +2 -0
  346. package/bundled-test-harness/assets/player-BvXGBItd.js +2 -0
  347. package/bundled-test-harness/assets/player-CAVQUyKk.js +82 -0
  348. package/bundled-test-harness/assets/playground-B02e8uqB.js +58 -0
  349. package/bundled-test-harness/assets/plural-field-components-test-C1acuN-A.js +198 -0
  350. package/bundled-test-harness/assets/png-image-def-test-B9QeVo1f.js +266 -0
  351. package/bundled-test-harness/assets/policy-audit-confirmation-test-CeVquvc_.js +155 -0
  352. package/bundled-test-harness/assets/policy-scoped-search-test-SFPiIqR3.js +339 -0
  353. package/bundled-test-harness/assets/prerender-file-extract-test-HSJKAHyO.js +346 -0
  354. package/bundled-test-harness/assets/prerender-html-test-BTAcFCme.js +670 -0
  355. package/bundled-test-harness/assets/prerender-meta-test-Csyz2b21.js +614 -0
  356. package/bundled-test-harness/assets/prerender-module-test-DpTYAbmI.js +409 -0
  357. package/bundled-test-harness/assets/prerender-persistence-block-test-BhIt-7kK.js +124 -0
  358. package/bundled-test-harness/assets/prerender-pre-model-error-test-DxKPQKqx.js +61 -0
  359. package/bundled-test-harness/assets/prerender-serialize-cycle-test-C8V5YWQO.js +134 -0
  360. package/bundled-test-harness/assets/prerendered-html-read-test-Cq7JVGwg.js +191 -0
  361. package/bundled-test-harness/assets/pretui-components-test-Ducr9fLT.css +743 -0
  362. package/bundled-test-harness/assets/pretui-components-test-Hs0uyIUQ.js +992 -0
  363. package/bundled-test-harness/assets/pretui-primitives-CRs8NRm0.js +69 -0
  364. package/bundled-test-harness/assets/preview-format-test-cCqLrfdY.js +103 -0
  365. package/bundled-test-harness/assets/preview-test-BMqJSoR1.js +474 -0
  366. package/bundled-test-harness/assets/process-card-test-578tfDvr.js +94 -0
  367. package/bundled-test-harness/assets/profile-settings-modal-CVnNl7Yu.js +990 -0
  368. package/bundled-test-harness/assets/publish-realm-COoeWexp.js +82 -0
  369. package/bundled-test-harness/assets/publish-realm-test-a5nkx0Ov.js +210 -0
  370. package/bundled-test-harness/assets/query-field-barrier-test-qX3xVPfk.js +113 -0
  371. package/bundled-test-harness/assets/query-field-error-sentinel-test-V6JDPFLX.js +201 -0
  372. package/bundled-test-harness/assets/query-field-membership-status-test-CK7eDf-K.js +323 -0
  373. package/bundled-test-harness/assets/query-field-page-optin-test-B5YBHUvU.js +126 -0
  374. package/bundled-test-harness/assets/query-field-schema-test-D4SjOGlK.js +231 -0
  375. package/bundled-test-harness/assets/query-field-search-throttle-test-BVkm1-D8.js +154 -0
  376. package/bundled-test-harness/assets/query-field-stale-prerender-test-9g7hcD91.js +152 -0
  377. package/bundled-test-harness/assets/query-fields-test-CQYqhzpN.js +535 -0
  378. package/bundled-test-harness/assets/quick-look-test-icQwb1NJ.js +139 -0
  379. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-D0mJorwH.js +91 -0
  380. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-B_F_2GEB.js +45 -0
  381. package/bundled-test-harness/assets/read-source-test-BgJV4B4F.js +67 -0
  382. package/bundled-test-harness/assets/read-text-file-test-DaeLzg4u.js +124 -0
  383. package/bundled-test-harness/assets/realm-C_a9su1j.js +2858 -0
  384. package/bundled-test-harness/assets/realm-api-keys-D5USFOoS.js +2 -0
  385. package/bundled-test-harness/assets/realm-api-keys-m_VOcixC.js +578 -0
  386. package/bundled-test-harness/assets/realm-api-keys-test-C_uZnTmq.js +588 -0
  387. package/bundled-test-harness/assets/realm-api-keys-test-gtJ8XZCE.js +109 -0
  388. package/bundled-test-harness/assets/realm-config-m5eccPW8.js +833 -0
  389. package/bundled-test-harness/assets/realm-config-policy-standing-test-CXJ4ZMde.js +290 -0
  390. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-DoEunShH.js +274 -0
  391. package/bundled-test-harness/assets/realm-config-settings-test-BYi9i4O6.js +187 -0
  392. package/bundled-test-harness/assets/realm-field-test-B_PUoqnk.js +100 -0
  393. package/bundled-test-harness/assets/realm-indexing-test-8iLjeV_e.js +4380 -0
  394. package/bundled-test-harness/assets/realm-policy-fitted-test-Bptvra0U.js +206 -0
  395. package/bundled-test-harness/assets/realm-policy-test-DwG0qqXE.js +1141 -0
  396. package/bundled-test-harness/assets/realm-querying-test-Dvw26A6Q.js +1067 -0
  397. package/bundled-test-harness/assets/realm-server-form-agnostic-test-DrXQH0UP.js +96 -0
  398. package/bundled-test-harness/assets/realm-server-subscriber-test-Dkj23vQK.js +46 -0
  399. package/bundled-test-harness/assets/realm-service-info-test-CdRlDhj-.js +67 -0
  400. package/bundled-test-harness/assets/realm-test-DGYN48Qx.js +2364 -0
  401. package/bundled-test-harness/assets/realm-token-refresh-test-CEWATL9h.js +153 -0
  402. package/bundled-test-harness/assets/realm-url-tooltip-test-8ZjTNPuy.js +78 -0
  403. package/bundled-test-harness/assets/reasoning-test-WUx-4agu.js +221 -0
  404. package/bundled-test-harness/assets/recent-files-test-Dc6L6Dm4.js +450 -0
  405. package/bundled-test-harness/assets/reindex-realm-test-CFRSt39u.js +117 -0
  406. package/bundled-test-harness/assets/relationship-loading-state-test-FKbtOFUr.js +290 -0
  407. package/bundled-test-harness/assets/remix-card-test-CKGC_Sgq.js +58 -0
  408. package/bundled-test-harness/assets/rendered-markdown-B_jWmDrK.js +292 -0
  409. package/bundled-test-harness/assets/rendered-markdown-test-sdWhU0NA.js +587 -0
  410. package/bundled-test-harness/assets/resident-instance-reuse-test-BjdhE6CM.js +82 -0
  411. package/bundled-test-harness/assets/result-tile-o6dtjgX4.js +144 -0
  412. package/bundled-test-harness/assets/rich-markdown-field-test-VXr6l20h.js +1647 -0
  413. package/bundled-test-harness/assets/room-message-test-BYNhZ39n.js +484 -0
  414. package/bundled-test-harness/assets/run-FzaqmBEl.js +3959 -0
  415. package/bundled-test-harness/assets/run-realm-code-DsBUf1si.js +2964 -0
  416. package/bundled-test-harness/assets/run-realm-code-test-cS0DzaKo.js +3844 -0
  417. package/bundled-test-harness/assets/sanitize-module-list-test-CvuOOiUY.js +85 -0
  418. package/bundled-test-harness/assets/save-card-skip-index-wait-test-fpJ1eq32.js +89 -0
  419. package/bundled-test-harness/assets/schema-editor-test-NkKjCgyf.js +785 -0
  420. package/bundled-test-harness/assets/schema-generation-test-Dmg3lWl7.js +28 -0
  421. package/bundled-test-harness/assets/scrolling-test-Dd4gv_fj.js +412 -0
  422. package/bundled-test-harness/assets/search-adorn-test-CZebk7_y.js +136 -0
  423. package/bundled-test-harness/assets/search-and-choose-test-Bd4NZUup.js +154 -0
  424. package/bundled-test-harness/assets/search-correlation-id-test-DXKlEO55.js +139 -0
  425. package/bundled-test-harness/assets/search-entries-result-test-QQawA8Fm.js +234 -0
  426. package/bundled-test-harness/assets/search-entries-test-3DlqGPQq.js +1486 -0
  427. package/bundled-test-harness/assets/search-entries-tool-test-D1TvDE9D.js +504 -0
  428. package/bundled-test-harness/assets/search-google-images-test-DqsoQGr1.js +166 -0
  429. package/bundled-test-harness/assets/search-results-DGrNaPxh.js +266 -0
  430. package/bundled-test-harness/assets/search-results-test-CqVHYNRt.js +578 -0
  431. package/bundled-test-harness/assets/search-selection-menu-test-D6bIjKiH.js +108 -0
  432. package/bundled-test-harness/assets/search-sheet-files-test-Bf37TQXo.js +126 -0
  433. package/bundled-test-harness/assets/search-sheet-persistence-test-CV4_XdxR.js +131 -0
  434. package/bundled-test-harness/assets/search-test-Dlb-wg3a.js +2249 -0
  435. package/bundled-test-harness/assets/search-tool-test-BJLgVMoL.js +156 -0
  436. package/bundled-test-harness/assets/searchable-option-test-eJaIPH_L.js +322 -0
  437. package/bundled-test-harness/assets/searchable-search-doc-test-yH9fLGNS.js +1271 -0
  438. package/bundled-test-harness/assets/section-rail-CNFCebtT.js +113 -0
  439. package/bundled-test-harness/assets/section-rail-test-KNJAWWl6.js +256 -0
  440. package/bundled-test-harness/assets/secure-sign-in-Dyljp0Th.js +174 -0
  441. package/bundled-test-harness/assets/secure-sign-in-test-QnqNuTP3.js +373 -0
  442. package/bundled-test-harness/assets/segmented-control-DxJdoJ4Z.js +173 -0
  443. package/bundled-test-harness/assets/select-BiQTg2ts.js +175 -0
  444. package/bundled-test-harness/assets/send-ai-assistant-message-test-CAn7M2dZ.js +52 -0
  445. package/bundled-test-harness/assets/send-bot-trigger-event-test-qBu5E_jy.js +56 -0
  446. package/bundled-test-harness/assets/send-request-via-proxy-test-CLuwLBq_.js +380 -0
  447. package/bundled-test-harness/assets/sending-test-Dt9Dh2wW.js +659 -0
  448. package/bundled-test-harness/assets/serialization-rri-form-audit-test-hMJukiKt.js +136 -0
  449. package/bundled-test-harness/assets/serialization-test-W5e3wKbz.js +8758 -0
  450. package/bundled-test-harness/assets/set-user-system-card-test-CjgWLkNV.js +59 -0
  451. package/bundled-test-harness/assets/setup-CssMNvui.js +772 -0
  452. package/bundled-test-harness/assets/setup-D8YXvK-p.js +2 -0
  453. package/bundled-test-harness/assets/shared-link-target-reuse-test-D42UO8DC.js +207 -0
  454. package/bundled-test-harness/assets/show-card-test-CHEaS514.js +365 -0
  455. package/bundled-test-harness/assets/signed-capture-link-test-BgEu0F-S.js +132 -0
  456. package/bundled-test-harness/assets/single-stack-test-DYcu_v7Z.js +652 -0
  457. package/bundled-test-harness/assets/skills-test-BP8QNesE.js +648 -0
  458. package/bundled-test-harness/assets/skip-boot-index-guard-test-BzRIncDN.js +46 -0
  459. package/bundled-test-harness/assets/spec-test-BYvFR6Xb.js +1077 -0
  460. package/bundled-test-harness/assets/spinner-Bx9x55NA.js +49 -0
  461. package/bundled-test-harness/assets/src-LqENIikj.js +5 -0
  462. package/bundled-test-harness/assets/src-a4d10Hra.js +216 -0
  463. package/bundled-test-harness/assets/stick-to-bottom-resize-test-BBLiCR3X.js +56 -0
  464. package/bundled-test-harness/assets/store-add-test-D_9IHQjZ.js +50 -0
  465. package/bundled-test-harness/assets/store-module-rebuild-test-BRGZoLRV.js +454 -0
  466. package/bundled-test-harness/assets/store-search-test-3G8JHuj2.js +175 -0
  467. package/bundled-test-harness/assets/store-test-Dd4WQp7L.js +3672 -0
  468. package/bundled-test-harness/assets/structured-theme-test-11TNsgUW.js +377 -0
  469. package/bundled-test-harness/assets/summarize-session-test-CwzD_ZbD.js +172 -0
  470. package/bundled-test-harness/assets/svg-image-def-test-zV6aMK9q.js +167 -0
  471. package/bundled-test-harness/assets/switch-submode-test-DQU2cP5_.js +168 -0
  472. package/bundled-test-harness/assets/sync-openrouter-models-test-xrXVaC2H.js +97 -0
  473. package/bundled-test-harness/assets/test-support-QTh6wGxu.js +3 -0
  474. package/bundled-test-harness/assets/test-support-Tr-PYFgc.js +99 -0
  475. package/bundled-test-harness/assets/tests-zLlwPutr.js +3598 -0
  476. package/bundled-test-harness/assets/text-file-def-test-Cyq78UFY.js +94 -0
  477. package/bundled-test-harness/assets/text-input-validator-test-C1uDVZU7.js +156 -0
  478. package/bundled-test-harness/assets/text-suggestion-test-C4XAqWqY.js +340 -0
  479. package/bundled-test-harness/assets/theme-card-test-dVNz4tgU.js +621 -0
  480. package/bundled-test-harness/assets/theme-dashboard-nav-test-DYSn5pqo.js +196 -0
  481. package/bundled-test-harness/assets/theme-scheme-island-test-C1WpkfEP.js +264 -0
  482. package/bundled-test-harness/assets/theme-scoped-css-parity-test-BVluppsE.js +176 -0
  483. package/bundled-test-harness/assets/titles-0a1luoTq.js +52 -0
  484. package/bundled-test-harness/assets/titles-DKHNLVwC.js +2 -0
  485. package/bundled-test-harness/assets/to-device-streaming-test-3A6jI0_r.js +163 -0
  486. package/bundled-test-harness/assets/token-usage-test-33ovcqPk.js +160 -0
  487. package/bundled-test-harness/assets/tools-J_Knr_W6.js +774 -0
  488. package/bundled-test-harness/assets/tools-calling-test-CfqZX0Ed.js +200 -0
  489. package/bundled-test-harness/assets/tools-test-B4x58ZmI.js +1624 -0
  490. package/bundled-test-harness/assets/tools-test-DtUQp5ez.js +3204 -0
  491. package/bundled-test-harness/assets/tooltip-B0rEgyMW.css +66 -0
  492. package/bundled-test-harness/assets/tooltip-DvUMUgVX.js +195 -0
  493. package/bundled-test-harness/assets/transform-cards-test-CYQbZeD9.js +341 -0
  494. package/bundled-test-harness/assets/ts-file-def-preview-test-m39f8Zio.js +95 -0
  495. package/bundled-test-harness/assets/ts-file-def-test-xIcL5xWe.js +92 -0
  496. package/bundled-test-harness/assets/ttf-font-def-test-ClQ2SzFF.js +206 -0
  497. package/bundled-test-harness/assets/turn-settling-test-DqYk312r.js +160 -0
  498. package/bundled-test-harness/assets/turn-summary-Bmt7ZxTS.js +1039 -0
  499. package/bundled-test-harness/assets/unpublish-realm-test-0ToTJczx.js +102 -0
  500. package/bundled-test-harness/assets/update-room-skills-test-o_j8NOUV.js +240 -0
  501. package/bundled-test-harness/assets/use-ai-assistant-test-D7HFpxKJ.js +384 -0
  502. package/bundled-test-harness/assets/user-message-BAOt1hS3.js +262 -0
  503. package/bundled-test-harness/assets/validate-realm-test-e3xIbNLB.js +67 -0
  504. package/bundled-test-harness/assets/video-metadata-extractor-test-D8naLSlg.js +520 -0
  505. package/bundled-test-harness/assets/view-visually-test-BuhGau5E.js +335 -0
  506. package/bundled-test-harness/assets/virtual-network-reset-test-CgaFNGPi.js +96 -0
  507. package/bundled-test-harness/assets/wav-audio-def-test-CWG_UdCh.js +160 -0
  508. package/bundled-test-harness/assets/webp-image-def-test-sN4yw8Zu.js +226 -0
  509. package/bundled-test-harness/assets/workspace-0LfPqbYB.js +445 -0
  510. package/bundled-test-harness/assets/workspace-a11y-test-DQxYDRAP.js +197 -0
  511. package/bundled-test-harness/assets/workspace-actions-jGJSfl8M.js +588 -0
  512. package/bundled-test-harness/assets/workspace-behavior-test-BnF-bmBN.js +338 -0
  513. package/bundled-test-harness/assets/workspace-delete-multiple-test-D-rxPDuT.js +212 -0
  514. package/bundled-test-harness/assets/workspace-delete-summary-test-C2-Mve5R.js +63 -0
  515. package/bundled-test-harness/assets/workspace-hosting-test-BvDKdlOb.js +138 -0
  516. package/bundled-test-harness/assets/workspace-indexing-test-B34T3kqD.js +71 -0
  517. package/bundled-test-harness/assets/workspace-test-CJivgv-m.js +51 -0
  518. package/bundled-test-harness/assets/workspace-test-CuSRpPnQ.js +385 -0
  519. package/bundled-test-harness/assets/workspace-timestamp-labels-test-aWgjdbCp.js +68 -0
  520. package/bundled-test-harness/assets/workspace-unit-test-DHMUf2KT.js +122 -0
  521. package/bundled-test-harness/assets/write-binary-file-test-P-hVQuin.js +124 -0
  522. package/bundled-test-harness/assets/write-text-file-test-fXvJueDd.js +191 -0
  523. package/bundled-test-harness/assets/zip-archive-test-C2P5CUSR.js +285 -0
  524. package/bundled-test-harness/assets/zip-file-def-test-BfJZAmGt.js +164 -0
  525. package/bundled-test-harness/boxel-ui-checksum.txt +1 -1
  526. package/bundled-test-harness/index.html +47 -47
  527. package/bundled-test-harness/tests/index.html +49 -49
  528. package/bundled-types/boxel-ui/helpers/theme-scoped-css.ts +4 -0
  529. package/bundled-types/choreo/choreo.gts +13 -1
  530. package/bundled-types/choreo/run.ts +19 -0
  531. package/bundled-types/host-app/components/operator-mode/dashboard/get-started.gts +152 -7
  532. package/bundled-types/host-app/components/operator-mode/dashboard/index.gts +2 -0
  533. package/bundled-types/host-app/components/operator-mode/dashboard/workspace.gts +5 -3
  534. package/bundled-types/host-app/components/operator-mode/dashboard-modals/workspace-modals.gts +5 -22
  535. package/bundled-types/host-app/components/operator-mode/host-submode/publishing-realm-popover.gts +1 -1
  536. package/bundled-types/host-app/components/operator-mode/host-submode.gts +111 -37
  537. package/bundled-types/host-app/components/operator-mode/publish-realm-modal.gts +1 -0
  538. package/bundled-types/host-app/lib/modal-focus-trap.ts +33 -0
  539. package/bundled-types/host-app/lib/workspace-actions.ts +21 -0
  540. package/bundled-types/host-app/services/host-mode-service.ts +39 -0
  541. package/bundled-types/host-app/services/realm.ts +14 -0
  542. package/bundled-types/host-tests/helpers/dashboard.ts +67 -0
  543. package/package.json +1 -1
  544. package/bundled-test-harness/assets/account-switch-failed-test-FytUFiPO.js +0 -45
  545. package/bundled-test-harness/assets/adapter-DvmPwSZv.js +0 -2
  546. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-DN525jiY.js +0 -112
  547. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-q3tKqVJQ.js +0 -130
  548. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DgeXcCyi.js +0 -46
  549. package/bundled-test-harness/assets/ai-assistant-test-lDIGPKFP.js +0 -2223
  550. package/bundled-test-harness/assets/ai-function-generation-test-D5GbLyvL.js +0 -1176
  551. package/bundled-test-harness/assets/ai-module-creation-test-I3-j2beD.js +0 -151
  552. package/bundled-test-harness/assets/aibot-message-Dmsjifs6.js +0 -1312
  553. package/bundled-test-harness/assets/app-BS9_-DhN.js +0 -14146
  554. package/bundled-test-harness/assets/apply-markdown-edit-test-4zlwt0Db.js +0 -230
  555. package/bundled-test-harness/assets/ask-user-picker-Dr-0qpNr.js +0 -370
  556. package/bundled-test-harness/assets/ask-user-picker-test-633AFdmS.js +0 -39
  557. package/bundled-test-harness/assets/assistant-transcript-test-BgRnLvMg.js +0 -57
  558. package/bundled-test-harness/assets/audio-metadata-extractor-test-4xsQqL-0.js +0 -1176
  559. package/bundled-test-harness/assets/authed-fetch-test-663mT5_N.js +0 -73
  560. package/bundled-test-harness/assets/avif-image-def-test-h01BPIJy.js +0 -187
  561. package/bundled-test-harness/assets/basic-test-DiD6T-8Q.js +0 -139
  562. package/bundled-test-harness/assets/binary-upload-dedupe-test-CkjMPO_e.js +0 -308
  563. package/bundled-test-harness/assets/bot-registration-test-CFZHpwdj.js +0 -97
  564. package/bundled-test-harness/assets/box-test-C3pSy5ED.js +0 -50
  565. package/bundled-test-harness/assets/brand-guide-attachments-test-EoC_u7Vc.js +0 -84
  566. package/bundled-test-harness/assets/brand-guide-custom-css-test-Dn3fvblr.js +0 -196
  567. package/bundled-test-harness/assets/brand-guide-edit-test-NeiT3MyK.js +0 -140
  568. package/bundled-test-harness/assets/brand-logo-mark-field-test-C2A1EnBB.js +0 -86
  569. package/bundled-test-harness/assets/broken-link-template-test-CWn6V5zZ.js +0 -192
  570. package/bundled-test-harness/assets/bundled-base-modules-test-D7mLzpsw.js +0 -54
  571. package/bundled-test-harness/assets/bundled-base-oracle-test-I7xCId_k.js +0 -37
  572. package/bundled-test-harness/assets/buried-stack-item-scroll-test-DFBev0h-.js +0 -236
  573. package/bundled-test-harness/assets/button-BeSuhveJ.js +0 -207
  574. package/bundled-test-harness/assets/bxl-cyclic-graph-test-DPykwvvx.js +0 -47
  575. package/bundled-test-harness/assets/bxl-expression-test-LBWJiFb9.js +0 -250
  576. package/bundled-test-harness/assets/bxl-indexing-test-BuZmLk7y.js +0 -212
  577. package/bundled-test-harness/assets/bxl-platform-module-test-BNIvlkCM.js +0 -71
  578. package/bundled-test-harness/assets/can-invoke-test-t-bFIIeX.js +0 -455
  579. package/bundled-test-harness/assets/can-read-realm-test-2Q_MzRT9.js +0 -56
  580. package/bundled-test-harness/assets/cancel-indexing-job-test-QeYxEukn.js +0 -69
  581. package/bundled-test-harness/assets/capture-test-CJmJG8YR.js +0 -360
  582. package/bundled-test-harness/assets/card-api-test-B43I510H.js +0 -198
  583. package/bundled-test-harness/assets/card-basics-test-CBClzP2y.js +0 -5364
  584. package/bundled-test-harness/assets/card-chooser-paging-test-HEVzf6pR.js +0 -235
  585. package/bundled-test-harness/assets/card-chooser-test-GfjBRPFI.js +0 -393
  586. package/bundled-test-harness/assets/card-context-search-results-CoSr4EdS.js +0 -30
  587. package/bundled-test-harness/assets/card-context-search-results-test-BLMlZu9t.js +0 -184
  588. package/bundled-test-harness/assets/card-def-field-def-relationships-test-DEBOzKan.js +0 -562
  589. package/bundled-test-harness/assets/card-def-menu-items-test-88_h8o0D.js +0 -228
  590. package/bundled-test-harness/assets/card-delete-test-DKom1phy.js +0 -466
  591. package/bundled-test-harness/assets/card-error-awaiting-index-test-DEwgFZMP.js +0 -53
  592. package/bundled-test-harness/assets/card-error-r6_cXst9.js +0 -72
  593. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-B7LiY15e.js +0 -219
  594. package/bundled-test-harness/assets/card-playground-test-CgyIJHui.js +0 -1491
  595. package/bundled-test-harness/assets/card-prerender-rPfzpIOU.js +0 -12939
  596. package/bundled-test-harness/assets/card-thunk-error-test-L0pvg4Ce.js +0 -48
  597. package/bundled-test-harness/assets/card-type-service-test-B2dhqxSD.js +0 -161
  598. package/bundled-test-harness/assets/check-correctness-test-DgqaLlCW.js +0 -1093
  599. package/bundled-test-harness/assets/check-domain-availability-test-B0hJHY5l.js +0 -98
  600. package/bundled-test-harness/assets/chip-D01NW3WH.js +0 -44
  601. package/bundled-test-harness/assets/choreo-D2Jl79RU.js +0 -1019
  602. package/bundled-test-harness/assets/choreo-_E8SOEe-.js +0 -2
  603. package/bundled-test-harness/assets/choreo-feature-reel-test-WLjsZDmS.js +0 -155
  604. package/bundled-test-harness/assets/choreo-gallery-build-order-test-6jnS8PsS.js +0 -436
  605. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CbUZsVB6.js +0 -399
  606. package/bundled-test-harness/assets/choreo-gallery-cover-test-CbvAStgk.js +0 -214
  607. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-tdjvUSa6.js +0 -133
  608. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-CsnM3hQK.js +0 -42
  609. package/bundled-test-harness/assets/choreo-gallery-drift-test-DG2LQTa7.js +0 -620
  610. package/bundled-test-harness/assets/choreo-gallery-escort-test-mn3-qXP1.js +0 -187
  611. package/bundled-test-harness/assets/choreo-gallery-films-test-BuktaC0D.js +0 -140
  612. package/bundled-test-harness/assets/choreo-gallery-filter-test-Dd-zpps0.js +0 -46
  613. package/bundled-test-harness/assets/choreo-gallery-fold-test-CWc1ijGc.js +0 -180
  614. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-tk2QmYPU.js +0 -114
  615. package/bundled-test-harness/assets/choreo-gallery-guides-test-DVbf1zM4.js +0 -321
  616. package/bundled-test-harness/assets/choreo-gallery-hang-test-B7EFp2dx.js +0 -426
  617. package/bundled-test-harness/assets/choreo-gallery-highlight-test-BFgbdesP.js +0 -60
  618. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-DJb8FC5R.js +0 -370
  619. package/bundled-test-harness/assets/choreo-gallery-interruption-test-DWyMXo5D.js +0 -176
  620. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-D3b8LsJ6.js +0 -104
  621. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CjjU6Rvn.js +0 -193
  622. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-Le_h3QWU.js +0 -111
  623. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-Cp-DlWj4.js +0 -127
  624. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-DayS4GCJ.js +0 -100
  625. package/bundled-test-harness/assets/choreo-gallery-presentation-test-DeAfuFS7.js +0 -157
  626. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-BgPWpggq.js +0 -145
  627. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-PzyoMNYv.js +0 -89
  628. package/bundled-test-harness/assets/choreo-gallery-sheet-test-CxaiNBkL.js +0 -48
  629. package/bundled-test-harness/assets/choreo-gallery-site-test-6xtSntS5.js +0 -237
  630. package/bundled-test-harness/assets/choreo-gallery-stage-E6Q5r-zU.js +0 -256
  631. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-C7aWMr9a.js +0 -102
  632. package/bundled-test-harness/assets/choreo-gallery-stages-test-CDWWgC61.js +0 -35
  633. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-Bkp15XJv.js +0 -138
  634. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CcGRi_3O.js +0 -144
  635. package/bundled-test-harness/assets/choreo-gallery-theater-test-Qph5pLT_.js +0 -252
  636. package/bundled-test-harness/assets/choreo-gallery-tuning-test-C4DhFLVA.js +0 -95
  637. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-LK493r1M.js +0 -88
  638. package/bundled-test-harness/assets/choreo-gallery-wires-test-B7SeUCc8.js +0 -148
  639. package/bundled-test-harness/assets/client-telemetry-test-DGmHzAFx.js +0 -340
  640. package/bundled-test-harness/assets/clip-BpYQPVz_.js +0 -2
  641. package/bundled-test-harness/assets/clip-CNaYbIwL.js +0 -92
  642. package/bundled-test-harness/assets/code-block-Cp2CJo5-.js +0 -502
  643. package/bundled-test-harness/assets/code-ref-test-C8JBHDb-.js +0 -163
  644. package/bundled-test-harness/assets/code-submode-availability-test-CzG1Tv6L.js +0 -198
  645. package/bundled-test-harness/assets/code-submode-test-BclVWjm5.js +0 -1839
  646. package/bundled-test-harness/assets/codeblocks-test-CmQlyxN7.js +0 -418
  647. package/bundled-test-harness/assets/codemirror-editor-test-B74H_yn8.js +0 -1512
  648. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bz6VEysU.js +0 -366
  649. package/bundled-test-harness/assets/color-field-test-DMCPQKIP.js +0 -212
  650. package/bundled-test-harness/assets/compaction-test-saQCLBrQ.js +0 -150
  651. package/bundled-test-harness/assets/computed-test-C05HliJC.js +0 -1320
  652. package/bundled-test-harness/assets/container-Cqcwrd-m.js +0 -10857
  653. package/bundled-test-harness/assets/content-preview-components-test-DZPj4_CU.js +0 -462
  654. package/bundled-test-harness/assets/copy-and-edit-test-DiXTQNTF.js +0 -292
  655. package/bundled-test-harness/assets/copy-card-test-ys7GquUY.js +0 -218
  656. package/bundled-test-harness/assets/copy-file-to-realm-test-Gn0Wn4vT.js +0 -148
  657. package/bundled-test-harness/assets/copy-source-test-BTLrOmPm.js +0 -56
  658. package/bundled-test-harness/assets/create-file-test-BCeIW-Rt.js +0 -464
  659. package/bundled-test-harness/assets/create-file-test-DbHQ5JsS.js +0 -1086
  660. package/bundled-test-harness/assets/create-listing-modal-test-CeHc4ter.js +0 -273
  661. package/bundled-test-harness/assets/create-listing-pr-request-test-DXbJNfMh.js +0 -117
  662. package/bundled-test-harness/assets/create-spec-test-BDIZoyHT.js +0 -256
  663. package/bundled-test-harness/assets/create-submission-workflow-test-Bix5J-3A.js +0 -132
  664. package/bundled-test-harness/assets/create-workspace-test-BmNnLHwC.js +0 -104
  665. package/bundled-test-harness/assets/credential-fields-test-NK1F4QWn.js +0 -200
  666. package/bundled-test-harness/assets/csv-file-def-test-BSfs4TTP.js +0 -102
  667. package/bundled-test-harness/assets/dashboard-C4T7ffKY.js +0 -3576
  668. package/bundled-test-harness/assets/dashboard-CFeHuP5-.js +0 -81
  669. package/bundled-test-harness/assets/dashboard-DQlpW-ux.css +0 -2392
  670. package/bundled-test-harness/assets/dashboard-add-workspace-test--rr6objf.js +0 -50
  671. package/bundled-test-harness/assets/dashboard-agents-test-D1y8H4xH.js +0 -334
  672. package/bundled-test-harness/assets/dashboard-archive-test-bN4EQaXv.js +0 -128
  673. package/bundled-test-harness/assets/dashboard-delete-test-BvsASb8B.js +0 -163
  674. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-DEsd5ZzZ.js +0 -71
  675. package/bundled-test-harness/assets/dashboard-duplicate-test-BnR0sTgB.js +0 -222
  676. package/bundled-test-harness/assets/dashboard-get-started-test-DG4uUXLv.js +0 -246
  677. package/bundled-test-harness/assets/dashboard-pinned-cards-test-AoGGVRAS.js +0 -220
  678. package/bundled-test-harness/assets/dashboard-reindex-test-BN9a96Xp.js +0 -115
  679. package/bundled-test-harness/assets/dashboard-section-rail-test-B3OT9V2T.js +0 -169
  680. package/bundled-test-harness/assets/dashboard-state-test-BY0Zqrmj.js +0 -162
  681. package/bundled-test-harness/assets/dashboard-test-C13oNpWt.js +0 -545
  682. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DZIV4x5j.js +0 -62
  683. package/bundled-test-harness/assets/dashboard-workspace-test-CBnOQViI.js +0 -537
  684. package/bundled-test-harness/assets/dashboard-workspaces-section-test-KU8ZVOYp.js +0 -396
  685. package/bundled-test-harness/assets/data-file-def-preview-test-CI5gcdtK.js +0 -155
  686. package/bundled-test-harness/assets/date-time-fields-test-D2CpR_Pb.js +0 -359
  687. package/bundled-test-harness/assets/debug-message-test-Df1kHesw.js +0 -117
  688. package/bundled-test-harness/assets/declared-captures-test-hQ43zuox.js +0 -879
  689. package/bundled-test-harness/assets/delete-workspace-test-BhfMKsix.js +0 -102
  690. package/bundled-test-harness/assets/diffing-test-CHRh55mC.js +0 -210
  691. package/bundled-test-harness/assets/download-file-to-realm-test-CC1HURCi.js +0 -119
  692. package/bundled-test-harness/assets/editor-test-DkeCv28f.js +0 -688
  693. package/bundled-test-harness/assets/edits-BSJqtUXM.js +0 -651
  694. package/bundled-test-harness/assets/email-field-test-DihK0suO.js +0 -75
  695. package/bundled-test-harness/assets/enum-field-test-Gja3bzt5.js +0 -935
  696. package/bundled-test-harness/assets/error-display-test-GhYZu7cp.js +0 -343
  697. package/bundled-test-harness/assets/evaluate-module-test-D_t4CiUq.js +0 -91
  698. package/bundled-test-harness/assets/execute-atomic-operations-test-xtou8Zeg.js +0 -113
  699. package/bundled-test-harness/assets/externals-B02-sD_L.js +0 -4393
  700. package/bundled-test-harness/assets/fallback-banner-live-delete-test-DtxzNXdE.js +0 -207
  701. package/bundled-test-harness/assets/fallback-banner-test-BfmiQ_68.js +0 -53
  702. package/bundled-test-harness/assets/fallback-banner-test-DLtTdmvn.js +0 -225
  703. package/bundled-test-harness/assets/fallback-models-test-BxNJxhfd.js +0 -161
  704. package/bundled-test-harness/assets/fetch-card-json-test-DofKbzvC.js +0 -61
  705. package/bundled-test-harness/assets/field-configuration-test-SUoPaXWy.js +0 -551
  706. package/bundled-test-harness/assets/field-markdown-domain-test-BwtR0dPP.js +0 -616
  707. package/bundled-test-harness/assets/field-markdown-oversize-test-D8UJcBc3.js +0 -88
  708. package/bundled-test-harness/assets/field-markdown-primitives-test-D5_ZdoDO.js +0 -365
  709. package/bundled-test-harness/assets/field-markdown-specialized-test-Dpd5hs04.js +0 -534
  710. package/bundled-test-harness/assets/field-playground-test-CzhYzKGv.js +0 -894
  711. package/bundled-test-harness/assets/field-support-predicates-test-BSvVOFth.js +0 -167
  712. package/bundled-test-harness/assets/file-attachment-test-fM-yFedm.js +0 -796
  713. package/bundled-test-harness/assets/file-chooser-panel-test-CKj8YTdY.js +0 -153
  714. package/bundled-test-harness/assets/file-chooser-test-Bs8jFXqa.js +0 -504
  715. package/bundled-test-harness/assets/file-def-format-templates-test-CxrRoWoD.js +0 -380
  716. package/bundled-test-harness/assets/file-def-live-reload-test-X_8YEkve.js +0 -124
  717. package/bundled-test-harness/assets/file-def-menu-items-test-Dx879o_o.js +0 -138
  718. package/bundled-test-harness/assets/file-def-navigation-test-MMI_EEO1.js +0 -109
  719. package/bundled-test-harness/assets/file-def-serialization-test-B5lguBQD.js +0 -89
  720. package/bundled-test-harness/assets/file-def-test-Di9QWcrj.js +0 -216
  721. package/bundled-test-harness/assets/file-preview-live-reload-test-aqx93A7c.js +0 -310
  722. package/bundled-test-harness/assets/file-resource-primitives-test-a5abpcSB.js +0 -255
  723. package/bundled-test-harness/assets/file-tree-from-index-test-CnruGxJ8.js +0 -96
  724. package/bundled-test-harness/assets/file-tree-test-BCyWDdSE.js +0 -851
  725. package/bundled-test-harness/assets/file-view-model-test-BfpLa01Y.js +0 -346
  726. package/bundled-test-harness/assets/filedef-export-shape-test-CQ9XbrzS.js +0 -61
  727. package/bundled-test-harness/assets/film-CL1zj_bJ.js +0 -2
  728. package/bundled-test-harness/assets/film-Dq_quZ31.js +0 -13
  729. package/bundled-test-harness/assets/film-xbkQa060.js +0 -4074
  730. package/bundled-test-harness/assets/flac-audio-def-test-BmVp9dMx.js +0 -143
  731. package/bundled-test-harness/assets/focus-Dm4wkM72.js +0 -306
  732. package/bundled-test-harness/assets/font-metadata-extractor-test-OWEh9_MS.js +0 -415
  733. package/bundled-test-harness/assets/formatted-aibot-message-test-BpHsWpuV.js +0 -109
  734. package/bundled-test-harness/assets/formatted-user-message-test-DZW5TAr0.js +0 -43
  735. package/bundled-test-harness/assets/freestyle-test-D_uaPU_3.js +0 -17
  736. package/bundled-test-harness/assets/full-reindex-realm-test-C6vHL5kC.js +0 -101
  737. package/bundled-test-harness/assets/garbage-collection-test-D-Ao4t2n.js +0 -403
  738. package/bundled-test-harness/assets/general-test-PSGI8W0z.js +0 -923
  739. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-J-m-0E6W.js +0 -65
  740. package/bundled-test-harness/assets/generic-file-def-preview-test-BAsOhTYU.js +0 -71
  741. package/bundled-test-harness/assets/get-available-realm-identifiers-test-D5PBOr97.js +0 -47
  742. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test-NM9UURHE.js +0 -47
  743. package/bundled-test-harness/assets/get-default-writable-realm-test-BxXc9a3J.js +0 -54
  744. package/bundled-test-harness/assets/get-published-realms-test-C8TJEc4-.js +0 -71
  745. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-Dt8CB6lS.js +0 -54
  746. package/bundled-test-harness/assets/get-relationship-membership-state-test-9_8x3myJ.js +0 -1308
  747. package/bundled-test-harness/assets/get-user-system-card-test-k0UO-uba.js +0 -67
  748. package/bundled-test-harness/assets/gif-image-def-test-BWrqPGDX.js +0 -188
  749. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BgG8QI9E.js +0 -160
  750. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-BKOvNyCN.js +0 -74
  751. package/bundled-test-harness/assets/gts-file-def-test-BCRHwDeZ.js +0 -100
  752. package/bundled-test-harness/assets/head-format-preview-test-DnfUhniI.js +0 -158
  753. package/bundled-test-harness/assets/helpers-DklkegO_.js +0 -5
  754. package/bundled-test-harness/assets/host-mode-service-vOfN0smp.js +0 -232
  755. package/bundled-test-harness/assets/host-mode-test-CCCJFz6_.js +0 -831
  756. package/bundled-test-harness/assets/host-submode-test-CtCfbuPA.js +0 -1342
  757. package/bundled-test-harness/assets/html-component-test-CWyhb5ZX.js +0 -65
  758. package/bundled-test-harness/assets/html-def-test-Cb8C2lUx.js +0 -160
  759. package/bundled-test-harness/assets/html-meta-extractor-test-BHT9Rtir.js +0 -60
  760. package/bundled-test-harness/assets/hydratable-card-test-DpgpdesD.js +0 -426
  761. package/bundled-test-harness/assets/icon-button-ABCGVF3C.js +0 -67
  762. package/bundled-test-harness/assets/image-metadata-extractor-test-ClhPTouq.js +0 -1109
  763. package/bundled-test-harness/assets/index-changes-test-CgnVr3LH.js +0 -367
  764. package/bundled-test-harness/assets/index-query-engine-test-CQTwju5_.js +0 -2593
  765. package/bundled-test-harness/assets/index-writer-test-IoVOoZT2.js +0 -3040
  766. package/bundled-test-harness/assets/inspector-test-BN2Ieb77.js +0 -2058
  767. package/bundled-test-harness/assets/instance-filter-matcher-test-Bq-_Sy89.js +0 -788
  768. package/bundled-test-harness/assets/instantiate-card-test-DEeDTzFV.js +0 -164
  769. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DP6kOyJS.js +0 -475
  770. package/bundled-test-harness/assets/interact-submode-setup-B0_cHqH-.js +0 -566
  771. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-9uUD91Pw.js +0 -99
  772. package/bundled-test-harness/assets/invite-user-to-room-test-CcDA45Ac.js +0 -142
  773. package/bundled-test-harness/assets/invoke-card-operation-test-DmUtgueM.js +0 -333
  774. package/bundled-test-harness/assets/isolated-render-test-B2eXNHu6.js +0 -51
  775. package/bundled-test-harness/assets/job-scoped-doc-cache-test-DF9D7cOc.js +0 -181
  776. package/bundled-test-harness/assets/job-scoped-instance-residency-test-CSS8xUU5.js +0 -103
  777. package/bundled-test-harness/assets/jpg-image-def-test-voECMTht.js +0 -697
  778. package/bundled-test-harness/assets/json-file-def-test-8Y4KLjUC.js +0 -95
  779. package/bundled-test-harness/assets/key-notices-badge-test-d1mYqx0e.js +0 -155
  780. package/bundled-test-harness/assets/key-readiness-test-BtCg7PCk.js +0 -190
  781. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-CyCMbJnN.js +0 -398
  782. package/bundled-test-harness/assets/linksto-error-sentinel-test-BDW572-v.js +0 -238
  783. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test-B4wM97hD.js +0 -354
  784. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-BhJmtJ0_.js +0 -303
  785. package/bundled-test-harness/assets/linksto-sentinel-reload-test-BpBQ5V_i.js +0 -197
  786. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test-pkBBl4e9.js +0 -260
  787. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-Bb6wjUdD.js +0 -196
  788. package/bundled-test-harness/assets/lint-and-fix-test-CcMLn-co.js +0 -51
  789. package/bundled-test-harness/assets/live-test-AyBnq7BX.js +0 -2
  790. package/bundled-test-harness/assets/live-test-CgnAcIDw.js +0 -100
  791. package/bundled-test-harness/assets/load-default-skills-test-BIOwtx0Y.js +0 -74
  792. package/bundled-test-harness/assets/loader-parallel-prefetch-test-D5_oRSER.js +0 -257
  793. package/bundled-test-harness/assets/loader-test-DSc_jR1c.js +0 -482
  794. package/bundled-test-harness/assets/loading-test-8pldx7S-.js +0 -63
  795. package/bundled-test-harness/assets/m4a-audio-def-test-BDI5apzM.js +0 -190
  796. package/bundled-test-harness/assets/main-5kHyCkdm.js +0 -5
  797. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-Wud0s7WZ.js +0 -470
  798. package/bundled-test-harness/assets/markdown-embed-chooser-test-DVzzS-0C.js +0 -334
  799. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-B5W_iqsi.js +0 -447
  800. package/bundled-test-harness/assets/markdown-embed-preview-test-CZF_s0fB.js +0 -368
  801. package/bundled-test-harness/assets/markdown-fallback-test-fT6BS4W7.js +0 -316
  802. package/bundled-test-harness/assets/markdown-file-def-test-B1aTzazR.js +0 -380
  803. package/bundled-test-harness/assets/markdown-helpers-test-gNKZf7Mw.js +0 -188
  804. package/bundled-test-harness/assets/markdown-highlighting-test-Du5_CQmD.js +0 -244
  805. package/bundled-test-harness/assets/markdown-preview-h-_aJhRc.js +0 -72
  806. package/bundled-test-harness/assets/markdown-preview-test-DJvoVsXw.js +0 -238
  807. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-VwJi3Paj.js +0 -146
  808. package/bundled-test-harness/assets/markdown-skill-search-test-ysCdf0xM.js +0 -80
  809. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-K2JuMy36.js +0 -63
  810. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-CkdL_-os.js +0 -300
  811. package/bundled-test-harness/assets/matrix-service-personal-realm-test-Dy1DultK.js +0 -125
  812. package/bundled-test-harness/assets/matrix-service-realm-servers-test-DHDDKuEg.js +0 -55
  813. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-DcTbZpMl.js +0 -132
  814. package/bundled-test-harness/assets/matrix-service-relogin-test-D3NQktoa.js +0 -59
  815. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-6CAflWOA.js +0 -35
  816. package/bundled-test-harness/assets/menu-kUSaJIPq.js +0 -3562
  817. package/bundled-test-harness/assets/message-service-subscription-test-DaQdgDWi.js +0 -110
  818. package/bundled-test-harness/assets/message-service-test-BsGEgM_m.js +0 -144
  819. package/bundled-test-harness/assets/message-tool-test-BB_4kw1V.js +0 -33
  820. package/bundled-test-harness/assets/midi-audio-def-test-BbbkFjqf.js +0 -182
  821. package/bundled-test-harness/assets/migrate-skill-test-X9xImDuq.js +0 -161
  822. package/bundled-test-harness/assets/mini-AwF31elJ.js +0 -1404
  823. package/bundled-test-harness/assets/mini-card-chooser-test-BZtrEiWu.js +0 -272
  824. package/bundled-test-harness/assets/mini-file-chooser-test-MIHW3kCI.js +0 -201
  825. package/bundled-test-harness/assets/mock-matrix-Dd8k0DNa.js +0 -15107
  826. package/bundled-test-harness/assets/mock-matrix-DhPN_34j.js +0 -2
  827. package/bundled-test-harness/assets/modal-LTh3_oHK.js +0 -322
  828. package/bundled-test-harness/assets/model-cost-tier-test-h1IkU9mp.js +0 -174
  829. package/bundled-test-harness/assets/model-file-extract-test-ntSo0wZF.js +0 -206
  830. package/bundled-test-harness/assets/module-transpile-cache-test-CDeRaaeP.js +0 -67
  831. package/bundled-test-harness/assets/monaco-test-C0Fa744D.js +0 -100
  832. package/bundled-test-harness/assets/mp3-audio-def-test-B4j4qR9H.js +0 -133
  833. package/bundled-test-harness/assets/multiple-stacks-test-BhA25ywL.js +0 -208
  834. package/bundled-test-harness/assets/nested-query-field-render-test-S9Y8YNKB.js +0 -249
  835. package/bundled-test-harness/assets/no-stacks-test-B7VciWyg.js +0 -48
  836. package/bundled-test-harness/assets/number-field-test-CS74lDPN.js +0 -184
  837. package/bundled-test-harness/assets/office-file-def-test-2cKc1pmd.js +0 -263
  838. package/bundled-test-harness/assets/office-metadata-extractor-test-DC8Fo-OW.js +0 -218
  839. package/bundled-test-harness/assets/office-poster-capture-test-Ba0_5UrT.js +0 -203
  840. package/bundled-test-harness/assets/ogg-audio-def-test-CIPQ1d4w.js +0 -196
  841. package/bundled-test-harness/assets/open-create-listing-modal-test-bmQkY5Zl.js +0 -131
  842. package/bundled-test-harness/assets/open-image-in-new-tab-test-DBD7_vMH.js +0 -52
  843. package/bundled-test-harness/assets/open-secure-window-test-BgeuYAqz.js +0 -253
  844. package/bundled-test-harness/assets/open-workspace-test-DRHGljV0.js +0 -46
  845. package/bundled-test-harness/assets/operation-lowering-test-CH1c0pSH.js +0 -2957
  846. package/bundled-test-harness/assets/operations-invocation-test-B1YkCLrv.js +0 -523
  847. package/bundled-test-harness/assets/operations-optimistic-test-DAbtOwsC.js +0 -203
  848. package/bundled-test-harness/assets/operations-query-test-9p1ZIDe-.js +0 -459
  849. package/bundled-test-harness/assets/operations-store-reconciliation-test-D0EQh3w2.js +0 -406
  850. package/bundled-test-harness/assets/operations-test-BQhlrfe3.js +0 -2518
  851. package/bundled-test-harness/assets/operator-mode-acceptance-test-DtHnonEb.js +0 -1195
  852. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DQUxZxaq.js +0 -1036
  853. package/bundled-test-harness/assets/operator-mode-links-test-BJ26HllS.js +0 -797
  854. package/bundled-test-harness/assets/operator-mode-test-DIPDI0qt.js +0 -696
  855. package/bundled-test-harness/assets/operator-mode-ui-test-CfA-fAh4.js +0 -1045
  856. package/bundled-test-harness/assets/overlay-DecPh3nt.js +0 -123
  857. package/bundled-test-harness/assets/overlay-menu-items-test-C6XqjLtu.js +0 -331
  858. package/bundled-test-harness/assets/overlays-Ctp8ePzZ.js +0 -75
  859. package/bundled-test-harness/assets/overlays-CzWpSg5T.js +0 -2
  860. package/bundled-test-harness/assets/overlays-detached-element-test-DvL_8Bb5.js +0 -56
  861. package/bundled-test-harness/assets/panel-CImumikB.js +0 -15124
  862. package/bundled-test-harness/assets/past-sessions-test-N6riGN_I.js +0 -321
  863. package/bundled-test-harness/assets/patch-fields-test-D30_-KwQ.js +0 -1014
  864. package/bundled-test-harness/assets/patch-instance-test-C5rGscZq.js +0 -348
  865. package/bundled-test-harness/assets/pdf-file-def-test-DtiqGRvZ.js +0 -111
  866. package/bundled-test-harness/assets/pdf-metadata-extractor-test-FU02KmdV.js +0 -130
  867. package/bundled-test-harness/assets/permission-checking-realm-test-DqdNJDwU.js +0 -306
  868. package/bundled-test-harness/assets/persist-module-inspector-view-test-BHOAgPVy.js +0 -60
  869. package/bundled-test-harness/assets/persist-scroll-position-test-qtmS518r.js +0 -254
  870. package/bundled-test-harness/assets/phone-number-field-test-DhdaM7uL.js +0 -73
  871. package/bundled-test-harness/assets/pill-menu-test-C9Mrrepl.js +0 -60
  872. package/bundled-test-harness/assets/plate-9n-sXyCw.js +0 -41
  873. package/bundled-test-harness/assets/plate-BnZcAk-_.js +0 -2
  874. package/bundled-test-harness/assets/player-Cu5b4LEJ.js +0 -82
  875. package/bundled-test-harness/assets/player-unk2mkxV.js +0 -2
  876. package/bundled-test-harness/assets/playground-BwA8wFGK.js +0 -58
  877. package/bundled-test-harness/assets/plural-field-components-test-CFNQKETg.js +0 -198
  878. package/bundled-test-harness/assets/png-image-def-test-DG5Vhlqb.js +0 -266
  879. package/bundled-test-harness/assets/policy-audit-confirmation-test-yfKU47LR.js +0 -155
  880. package/bundled-test-harness/assets/policy-scoped-search-test-BjQRDYqR.js +0 -339
  881. package/bundled-test-harness/assets/prerender-file-extract-test-CEU4SaAZ.js +0 -346
  882. package/bundled-test-harness/assets/prerender-html-test-CGB3ClCS.js +0 -670
  883. package/bundled-test-harness/assets/prerender-meta-test-xqc4fW_0.js +0 -614
  884. package/bundled-test-harness/assets/prerender-module-test-CI1TmZw-.js +0 -409
  885. package/bundled-test-harness/assets/prerender-persistence-block-test-Da0dJO_N.js +0 -124
  886. package/bundled-test-harness/assets/prerender-pre-model-error-test-BVLyhk8R.js +0 -61
  887. package/bundled-test-harness/assets/prerender-serialize-cycle-test-glJFfxHU.js +0 -134
  888. package/bundled-test-harness/assets/prerendered-html-read-test-Mp4L0VHQ.js +0 -191
  889. package/bundled-test-harness/assets/pretui-components-test-BBpA9UnA.js +0 -991
  890. package/bundled-test-harness/assets/pretui-components-test-BqFq7rw_.css +0 -730
  891. package/bundled-test-harness/assets/preview-format-test-C55Bwcur.js +0 -103
  892. package/bundled-test-harness/assets/preview-test-CTAhRGU8.js +0 -474
  893. package/bundled-test-harness/assets/process-card-test-UjqpuxB7.js +0 -94
  894. package/bundled-test-harness/assets/profile-settings-modal-C8bCgTMK.js +0 -989
  895. package/bundled-test-harness/assets/publish-realm-ixUB4FPK.js +0 -82
  896. package/bundled-test-harness/assets/publish-realm-test-CrrsdL4W.js +0 -210
  897. package/bundled-test-harness/assets/query-field-barrier-test-DjivFE93.js +0 -113
  898. package/bundled-test-harness/assets/query-field-error-sentinel-test-0HwnV4Mw.js +0 -201
  899. package/bundled-test-harness/assets/query-field-membership-status-test-C8yTTBkc.js +0 -323
  900. package/bundled-test-harness/assets/query-field-page-optin-test-D4l_GcII.js +0 -126
  901. package/bundled-test-harness/assets/query-field-schema-test-DDbcNNm5.js +0 -231
  902. package/bundled-test-harness/assets/query-field-search-throttle-test-CXp50Ax0.js +0 -154
  903. package/bundled-test-harness/assets/query-field-stale-prerender-test-DErzt-Cv.js +0 -152
  904. package/bundled-test-harness/assets/query-fields-test-Dz67fdSl.js +0 -535
  905. package/bundled-test-harness/assets/quick-look-test-B1ijDsh_.js +0 -139
  906. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-DJxZ16H_.js +0 -91
  907. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-BoRQkZ8c.js +0 -45
  908. package/bundled-test-harness/assets/read-source-test-Bl-NjchO.js +0 -67
  909. package/bundled-test-harness/assets/read-text-file-test-CP37CZoo.js +0 -124
  910. package/bundled-test-harness/assets/realm-CaK5mkT-.js +0 -2852
  911. package/bundled-test-harness/assets/realm-api-keys-BNUFWbGR.js +0 -579
  912. package/bundled-test-harness/assets/realm-api-keys-CkshxhXC.js +0 -2
  913. package/bundled-test-harness/assets/realm-api-keys-test-BP8xifjn.js +0 -109
  914. package/bundled-test-harness/assets/realm-api-keys-test-CwdK9YXp.js +0 -588
  915. package/bundled-test-harness/assets/realm-config-iKwE3Htp.js +0 -833
  916. package/bundled-test-harness/assets/realm-config-policy-standing-test-BgVEIDnB.js +0 -290
  917. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-BoJoKzmX.js +0 -274
  918. package/bundled-test-harness/assets/realm-config-settings-test-Kxw-GHye.js +0 -187
  919. package/bundled-test-harness/assets/realm-field-test-CdGOxrFb.js +0 -100
  920. package/bundled-test-harness/assets/realm-indexing-test-CHtsBV2b.js +0 -4380
  921. package/bundled-test-harness/assets/realm-policy-fitted-test--DhNZSdC.js +0 -206
  922. package/bundled-test-harness/assets/realm-policy-test-D7714iVa.js +0 -1141
  923. package/bundled-test-harness/assets/realm-querying-test-Cj1ekZ0H.js +0 -1067
  924. package/bundled-test-harness/assets/realm-server-form-agnostic-test-CZFPNJfD.js +0 -96
  925. package/bundled-test-harness/assets/realm-server-subscriber-test-C86WmBp0.js +0 -46
  926. package/bundled-test-harness/assets/realm-service-info-test-CdgcwKDR.js +0 -67
  927. package/bundled-test-harness/assets/realm-test-DPoLsvKz.js +0 -2364
  928. package/bundled-test-harness/assets/realm-token-refresh-test-Ch35Siwi.js +0 -153
  929. package/bundled-test-harness/assets/realm-url-tooltip-test-x8xWOENK.js +0 -78
  930. package/bundled-test-harness/assets/reasoning-test-BxpE8Jvf.js +0 -221
  931. package/bundled-test-harness/assets/recent-files-test-DTmEzPLq.js +0 -450
  932. package/bundled-test-harness/assets/reindex-realm-test-BQ8KULn4.js +0 -117
  933. package/bundled-test-harness/assets/relationship-loading-state-test-BJoArPWf.js +0 -290
  934. package/bundled-test-harness/assets/remix-card-test-DsTA1KoG.js +0 -58
  935. package/bundled-test-harness/assets/rendered-markdown-DvukulDO.js +0 -292
  936. package/bundled-test-harness/assets/rendered-markdown-test-DxGptXSV.js +0 -587
  937. package/bundled-test-harness/assets/resident-instance-reuse-test-ZWnVu8uj.js +0 -82
  938. package/bundled-test-harness/assets/result-tile-CPyI6Vmv.js +0 -144
  939. package/bundled-test-harness/assets/rich-markdown-field-test-CdygoXIO.js +0 -1647
  940. package/bundled-test-harness/assets/room-message-test-D3NfMqH0.js +0 -484
  941. package/bundled-test-harness/assets/run-D_Px28eF.js +0 -3956
  942. package/bundled-test-harness/assets/run-realm-code-qWCZxmJ7.js +0 -2964
  943. package/bundled-test-harness/assets/run-realm-code-test-UzyeEJq6.js +0 -3844
  944. package/bundled-test-harness/assets/sanitize-module-list-test-Babq44bP.js +0 -85
  945. package/bundled-test-harness/assets/save-card-skip-index-wait-test-BcELXlQ_.js +0 -89
  946. package/bundled-test-harness/assets/schema-editor-test-CEvruZbt.js +0 -785
  947. package/bundled-test-harness/assets/schema-generation-test-hYAMdCrn.js +0 -28
  948. package/bundled-test-harness/assets/scrolling-test-DVIsh-_1.js +0 -412
  949. package/bundled-test-harness/assets/search-adorn-test-CkVhqFd0.js +0 -136
  950. package/bundled-test-harness/assets/search-and-choose-test-DUhOB3FV.js +0 -154
  951. package/bundled-test-harness/assets/search-correlation-id-test-Drn4r26N.js +0 -139
  952. package/bundled-test-harness/assets/search-entries-result-test-DTCRJ_wc.js +0 -234
  953. package/bundled-test-harness/assets/search-entries-test-CE0B47pw.js +0 -1486
  954. package/bundled-test-harness/assets/search-entries-tool-test-C4aG0ckM.js +0 -504
  955. package/bundled-test-harness/assets/search-google-images-test-LyhcB2f3.js +0 -166
  956. package/bundled-test-harness/assets/search-results-D4pSne0x.js +0 -266
  957. package/bundled-test-harness/assets/search-results-test-CRZHhqhn.js +0 -578
  958. package/bundled-test-harness/assets/search-selection-menu-test-B7Y3E_nj.js +0 -108
  959. package/bundled-test-harness/assets/search-sheet-files-test-C2y534g8.js +0 -126
  960. package/bundled-test-harness/assets/search-sheet-persistence-test-DePC59Bk.js +0 -131
  961. package/bundled-test-harness/assets/search-test-Dy8NxFkU.js +0 -2249
  962. package/bundled-test-harness/assets/search-tool-test-lctDaMH3.js +0 -156
  963. package/bundled-test-harness/assets/searchable-option-test-CE64M8oM.js +0 -322
  964. package/bundled-test-harness/assets/searchable-search-doc-test-C6u3mVvT.js +0 -1271
  965. package/bundled-test-harness/assets/section-rail-B_UQX00B.js +0 -113
  966. package/bundled-test-harness/assets/section-rail-test-DIda7MIw.js +0 -256
  967. package/bundled-test-harness/assets/secure-sign-in-CqqqfQG8.js +0 -174
  968. package/bundled-test-harness/assets/secure-sign-in-test-DimbVr_W.js +0 -373
  969. package/bundled-test-harness/assets/segmented-control-iePxSdTS.js +0 -173
  970. package/bundled-test-harness/assets/select-tNs6_xwW.js +0 -175
  971. package/bundled-test-harness/assets/send-ai-assistant-message-test-2GVrMF9Z.js +0 -52
  972. package/bundled-test-harness/assets/send-bot-trigger-event-test-B_3dKfGN.js +0 -56
  973. package/bundled-test-harness/assets/send-request-via-proxy-test-_clNWyYc.js +0 -380
  974. package/bundled-test-harness/assets/sending-test-DCPFXUVg.js +0 -659
  975. package/bundled-test-harness/assets/serialization-rri-form-audit-test-BI0zCs8Y.js +0 -136
  976. package/bundled-test-harness/assets/serialization-test-bjdtVlZL.js +0 -8758
  977. package/bundled-test-harness/assets/set-user-system-card-test-BUv1vL08.js +0 -59
  978. package/bundled-test-harness/assets/setup-BW1mmC7C.js +0 -772
  979. package/bundled-test-harness/assets/setup-DsIcFT-T.js +0 -2
  980. package/bundled-test-harness/assets/shared-link-target-reuse-test-9NeJEjkb.js +0 -207
  981. package/bundled-test-harness/assets/show-card-test-mfyLwusD.js +0 -365
  982. package/bundled-test-harness/assets/signed-capture-link-test-BOtKNCAM.js +0 -132
  983. package/bundled-test-harness/assets/single-stack-test-B4MGjaLk.js +0 -652
  984. package/bundled-test-harness/assets/skills-test-BuP-Yzk1.js +0 -648
  985. package/bundled-test-harness/assets/skip-boot-index-guard-test-Cmrx2-K7.js +0 -46
  986. package/bundled-test-harness/assets/spec-test-BhZDdhVQ.js +0 -1077
  987. package/bundled-test-harness/assets/spinner-CpIBUG9m.js +0 -49
  988. package/bundled-test-harness/assets/src-DGHttmW-.js +0 -216
  989. package/bundled-test-harness/assets/src-DaNDSbp7.js +0 -5
  990. package/bundled-test-harness/assets/stick-to-bottom-resize-test-Dpy3OVum.js +0 -56
  991. package/bundled-test-harness/assets/store-add-test-_IYS8o74.js +0 -50
  992. package/bundled-test-harness/assets/store-module-rebuild-test-B5VMaICy.js +0 -454
  993. package/bundled-test-harness/assets/store-search-test-C2VZabrH.js +0 -175
  994. package/bundled-test-harness/assets/store-test-D6PObxoD.js +0 -3672
  995. package/bundled-test-harness/assets/structured-theme-test-BHjVeMf-.js +0 -377
  996. package/bundled-test-harness/assets/summarize-session-test-BFtTuhe0.js +0 -172
  997. package/bundled-test-harness/assets/svg-image-def-test-BL6lkWUX.js +0 -167
  998. package/bundled-test-harness/assets/switch-submode-test-6Uv3bZMl.js +0 -168
  999. package/bundled-test-harness/assets/sync-openrouter-models-test-Dp9E05tL.js +0 -97
  1000. package/bundled-test-harness/assets/test-support-DYm8XZ0E.js +0 -3
  1001. package/bundled-test-harness/assets/test-support-DfnhiIMV.js +0 -99
  1002. package/bundled-test-harness/assets/tests-CZk0Iag2.js +0 -3596
  1003. package/bundled-test-harness/assets/text-file-def-test-CHdC0yIU.js +0 -94
  1004. package/bundled-test-harness/assets/text-input-validator-test-B9ZR8XPU.js +0 -156
  1005. package/bundled-test-harness/assets/text-suggestion-test-CGLspKFQ.js +0 -340
  1006. package/bundled-test-harness/assets/theme-card-test-CXZvSEvG.js +0 -621
  1007. package/bundled-test-harness/assets/theme-dashboard-nav-test-CkEE0ILk.js +0 -196
  1008. package/bundled-test-harness/assets/theme-scheme-island-test-URXTjipF.js +0 -264
  1009. package/bundled-test-harness/assets/titles-C6enAdIv.js +0 -2
  1010. package/bundled-test-harness/assets/titles-Dft1HoUT.js +0 -52
  1011. package/bundled-test-harness/assets/to-device-streaming-test-D33ZOc9o.js +0 -163
  1012. package/bundled-test-harness/assets/token-usage-test-BHQlU4J4.js +0 -160
  1013. package/bundled-test-harness/assets/tools-CrudqfS3.js +0 -774
  1014. package/bundled-test-harness/assets/tools-calling-test-jo7IREau.js +0 -200
  1015. package/bundled-test-harness/assets/tools-test-D1wMfUa0.js +0 -1624
  1016. package/bundled-test-harness/assets/tools-test-Dn1LYsXp.js +0 -3204
  1017. package/bundled-test-harness/assets/tooltip-8Wyz4IIn.css +0 -68
  1018. package/bundled-test-harness/assets/tooltip-CqwLzRz5.js +0 -134
  1019. package/bundled-test-harness/assets/transform-cards-test-BPhwPFtp.js +0 -341
  1020. package/bundled-test-harness/assets/ts-file-def-preview-test-Bq3zTgw8.js +0 -95
  1021. package/bundled-test-harness/assets/ts-file-def-test-GLswMl7O.js +0 -92
  1022. package/bundled-test-harness/assets/ttf-font-def-test-DQulvUWs.js +0 -206
  1023. package/bundled-test-harness/assets/turn-settling-test-BspmOUQP.js +0 -160
  1024. package/bundled-test-harness/assets/turn-summary-9A8nvC0-.js +0 -1039
  1025. package/bundled-test-harness/assets/unpublish-realm-test-SkYPEhDz.js +0 -102
  1026. package/bundled-test-harness/assets/update-room-skills-test-cTxb-WU6.js +0 -240
  1027. package/bundled-test-harness/assets/use-ai-assistant-test-uaqW1T_A.js +0 -384
  1028. package/bundled-test-harness/assets/user-message-BudkIP-3.js +0 -262
  1029. package/bundled-test-harness/assets/validate-realm-test-DxrGgH9n.js +0 -67
  1030. package/bundled-test-harness/assets/video-metadata-extractor-test-B2pe-Iqa.js +0 -520
  1031. package/bundled-test-harness/assets/view-visually-test-PNon6fUo.js +0 -335
  1032. package/bundled-test-harness/assets/virtual-network-reset-test-uYJLaQHf.js +0 -96
  1033. package/bundled-test-harness/assets/wav-audio-def-test-F4OrFFR4.js +0 -160
  1034. package/bundled-test-harness/assets/webp-image-def-test-B0a_-Vya.js +0 -226
  1035. package/bundled-test-harness/assets/workspace-Cyftysy9.js +0 -440
  1036. package/bundled-test-harness/assets/workspace-a11y-test-sKiPDcbl.js +0 -197
  1037. package/bundled-test-harness/assets/workspace-actions-BuawjFmZ.js +0 -561
  1038. package/bundled-test-harness/assets/workspace-behavior-test-CKa-pb3T.js +0 -338
  1039. package/bundled-test-harness/assets/workspace-delete-multiple-test-Dt2weG5R.js +0 -212
  1040. package/bundled-test-harness/assets/workspace-delete-summary-test-CkqgFqZ8.js +0 -63
  1041. package/bundled-test-harness/assets/workspace-hosting-test-Ci7EEtHP.js +0 -138
  1042. package/bundled-test-harness/assets/workspace-indexing-test-BPVxxY6W.js +0 -71
  1043. package/bundled-test-harness/assets/workspace-test-CWr7vFbg.js +0 -385
  1044. package/bundled-test-harness/assets/workspace-test-INNpQovc.js +0 -51
  1045. package/bundled-test-harness/assets/workspace-timestamp-labels-test-CigQb5wr.js +0 -68
  1046. package/bundled-test-harness/assets/workspace-unit-test-BwVKpuXT.js +0 -122
  1047. package/bundled-test-harness/assets/write-binary-file-test-BKP3gv1k.js +0 -124
  1048. package/bundled-test-harness/assets/write-text-file-test-B6ijTKTa.js +0 -191
  1049. package/bundled-test-harness/assets/zip-archive-test-C-PBzkTn.js +0 -285
  1050. 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