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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1058) hide show
  1. package/bundled-realms/pretui/components/doc-report.gts +2 -2
  2. package/bundled-realms/pretui/components/doc-report.usage.gts +3 -3
  3. package/bundled-realms/pretui/components/form-field.md +1 -1
  4. package/bundled-realms/pretui/components/icon-button.md +1 -1
  5. package/bundled-realms/pretui/components/popup.md +1 -1
  6. package/bundled-realms/pretui/components/switch.gts +13 -0
  7. package/bundled-realms/pretui/components/switch.md +5 -3
  8. package/bundled-realms/pretui/components/theme-frame.gts +49 -22
  9. package/bundled-realms/pretui/components/tooltip.gts +141 -42
  10. package/bundled-realms/pretui/components/tooltip.md +10 -12
  11. package/bundled-realms/pretui/components/tooltip.usage.gts +3 -5
  12. package/bundled-realms/pretui/docs/structure.md +1 -1
  13. package/bundled-realms/pretui/internal/overlay.gts +4 -2
  14. package/bundled-realms/pretui/pretui-css.gts +6 -2
  15. package/bundled-realms/pretui/theme-scoped-css.gts +262 -0
  16. package/bundled-test-harness/assets/account-switch-failed-test-DwAZq6Sc.js +45 -0
  17. package/bundled-test-harness/assets/adapter-C_6pnsx1.js +2 -0
  18. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-zMYtJWBv.js +112 -0
  19. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-CwhAV-Ow.js +130 -0
  20. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DNgclkGJ.js +46 -0
  21. package/bundled-test-harness/assets/ai-assistant-test-DGYFiRTb.js +2223 -0
  22. package/bundled-test-harness/assets/ai-function-generation-test-Dj6WzKkh.js +1176 -0
  23. package/bundled-test-harness/assets/ai-module-creation-test-C4zhhxaZ.js +151 -0
  24. package/bundled-test-harness/assets/aibot-message-BShcljQ9.js +1312 -0
  25. package/bundled-test-harness/assets/app-DiEYqT6T.js +14146 -0
  26. package/bundled-test-harness/assets/apply-markdown-edit-test-CPhfeg1i.js +230 -0
  27. package/bundled-test-harness/assets/ask-user-picker-NVRkhKwt.js +370 -0
  28. package/bundled-test-harness/assets/ask-user-picker-test-SsZqFm9W.js +39 -0
  29. package/bundled-test-harness/assets/assistant-transcript-test-DesuBCIB.js +57 -0
  30. package/bundled-test-harness/assets/audio-metadata-extractor-test-8JM6oZXG.js +1176 -0
  31. package/bundled-test-harness/assets/authed-fetch-test-yPTMe-9V.js +73 -0
  32. package/bundled-test-harness/assets/avif-image-def-test-Kyknj908.js +187 -0
  33. package/bundled-test-harness/assets/basic-test-D9OrrMaq.js +139 -0
  34. package/bundled-test-harness/assets/binary-upload-dedupe-test-C0RFmHma.js +308 -0
  35. package/bundled-test-harness/assets/bot-registration-test-Bk2lTaCW.js +97 -0
  36. package/bundled-test-harness/assets/box-test-BbV9sMyU.js +50 -0
  37. package/bundled-test-harness/assets/brand-guide-attachments-test-z4wTsKbI.js +84 -0
  38. package/bundled-test-harness/assets/brand-guide-custom-css-test-BlSJE8xo.js +196 -0
  39. package/bundled-test-harness/assets/brand-guide-edit-test-DJ1OQ6IB.js +140 -0
  40. package/bundled-test-harness/assets/brand-logo-mark-field-test-ux7eetkO.js +86 -0
  41. package/bundled-test-harness/assets/broken-link-template-test-CqB3MWyw.js +192 -0
  42. package/bundled-test-harness/assets/bundled-base-modules-test-B2oNLZSJ.js +54 -0
  43. package/bundled-test-harness/assets/bundled-base-oracle-test-DelPfFjn.js +37 -0
  44. package/bundled-test-harness/assets/buried-stack-item-scroll-test-Ixsl1tS0.js +236 -0
  45. package/bundled-test-harness/assets/button-BvYQm_A1.js +141 -0
  46. package/bundled-test-harness/assets/bxl-cyclic-graph-test-p23WCLRW.js +47 -0
  47. package/bundled-test-harness/assets/bxl-expression-test-CVTQYT_C.js +250 -0
  48. package/bundled-test-harness/assets/bxl-indexing-test-D_A7X2sr.js +212 -0
  49. package/bundled-test-harness/assets/bxl-platform-module-test-Cltfyybp.js +71 -0
  50. package/bundled-test-harness/assets/can-invoke-test-CVfE1l1V.js +455 -0
  51. package/bundled-test-harness/assets/can-read-realm-test-CIz6WX_K.js +56 -0
  52. package/bundled-test-harness/assets/cancel-indexing-job-test-0LlrOgYK.js +69 -0
  53. package/bundled-test-harness/assets/capture-test-diHIWmh0.js +360 -0
  54. package/bundled-test-harness/assets/card-api-test-Ci9b0ghP.js +198 -0
  55. package/bundled-test-harness/assets/card-basics-test-RKQoQWZD.js +5364 -0
  56. package/bundled-test-harness/assets/card-chooser-paging-test-BN21sDpP.js +235 -0
  57. package/bundled-test-harness/assets/card-chooser-test-C9jDiIgM.js +393 -0
  58. package/bundled-test-harness/assets/card-context-search-results-KmkXJbmC.js +30 -0
  59. package/bundled-test-harness/assets/card-context-search-results-test-CpMr8OlX.js +184 -0
  60. package/bundled-test-harness/assets/card-def-field-def-relationships-test-D_30xak6.js +562 -0
  61. package/bundled-test-harness/assets/card-def-menu-items-test-ohuHc0b4.js +228 -0
  62. package/bundled-test-harness/assets/card-delete-test-BlsD9Xw4.js +466 -0
  63. package/bundled-test-harness/assets/card-error-3q1o3i0e.js +72 -0
  64. package/bundled-test-harness/assets/card-error-awaiting-index-test-DPgYKfbF.js +53 -0
  65. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-CVfeJyjt.js +219 -0
  66. package/bundled-test-harness/assets/card-playground-test-D-7bi4PQ.js +1491 -0
  67. package/bundled-test-harness/assets/card-prerender-DemTfK_a.js +12939 -0
  68. package/bundled-test-harness/assets/card-thunk-error-test-DCBh1vRT.js +48 -0
  69. package/bundled-test-harness/assets/card-type-service-test-DXPrfVYk.js +161 -0
  70. package/bundled-test-harness/assets/check-correctness-test-DjE7r1X2.js +1093 -0
  71. package/bundled-test-harness/assets/check-domain-availability-test-U10xSKbY.js +98 -0
  72. package/bundled-test-harness/assets/chip-0r_r9SC8.js +44 -0
  73. package/bundled-test-harness/assets/choreo-CZUXQKjf.js +1110 -0
  74. package/bundled-test-harness/assets/choreo-D8RcLuoq.js +2 -0
  75. package/bundled-test-harness/assets/choreo-feature-reel-test-DRGloCAJ.js +155 -0
  76. package/bundled-test-harness/assets/choreo-gallery-build-order-test-BR-r7gaw.js +436 -0
  77. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CWRLfcNT.js +399 -0
  78. package/bundled-test-harness/assets/choreo-gallery-cover-test-BT05gNKC.js +214 -0
  79. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-WJ7FmjYi.js +133 -0
  80. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-C-yxdVT_.js +42 -0
  81. package/bundled-test-harness/assets/choreo-gallery-drift-test-HX1mK3od.js +620 -0
  82. package/bundled-test-harness/assets/choreo-gallery-escort-test-jZEVk_V4.js +187 -0
  83. package/bundled-test-harness/assets/choreo-gallery-films-test-DLDQzsxb.js +140 -0
  84. package/bundled-test-harness/assets/choreo-gallery-filter-test-BJv8KEeP.js +46 -0
  85. package/bundled-test-harness/assets/choreo-gallery-fold-test-BssKC8A8.js +180 -0
  86. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-DS41eNNV.js +114 -0
  87. package/bundled-test-harness/assets/choreo-gallery-guides-test-DTj7yEKp.js +321 -0
  88. package/bundled-test-harness/assets/choreo-gallery-hang-test-BqJLmeFF.js +426 -0
  89. package/bundled-test-harness/assets/choreo-gallery-highlight-test-B1Q7-ICm.js +60 -0
  90. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-7My9lVam.js +370 -0
  91. package/bundled-test-harness/assets/choreo-gallery-interruption-test-BlIAaGrw.js +176 -0
  92. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-C9NnYIP8.js +104 -0
  93. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CWzXkvbW.js +193 -0
  94. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-CwdiZWeI.js +111 -0
  95. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-D55fxwTn.js +127 -0
  96. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-D8Wxv0lb.js +100 -0
  97. package/bundled-test-harness/assets/choreo-gallery-presentation-test-BLoWfp6G.js +157 -0
  98. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-D5XxTBDS.js +145 -0
  99. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-DrHTTvss.js +89 -0
  100. package/bundled-test-harness/assets/choreo-gallery-sheet-test-BFVdnM_b.js +48 -0
  101. package/bundled-test-harness/assets/choreo-gallery-site-test-BhEBHdvI.js +237 -0
  102. package/bundled-test-harness/assets/choreo-gallery-stage-DcKKsdcu.js +256 -0
  103. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-Fcc6SC3F.js +102 -0
  104. package/bundled-test-harness/assets/choreo-gallery-stages-test-Cb-ADpxK.js +35 -0
  105. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-DMJ6C9FW.js +138 -0
  106. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CAjSUdLJ.js +144 -0
  107. package/bundled-test-harness/assets/choreo-gallery-theater-test-B-3IZMj9.js +252 -0
  108. package/bundled-test-harness/assets/choreo-gallery-tuning-test-BVxK5Ry_.js +95 -0
  109. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-uWBH1EKE.js +88 -0
  110. package/bundled-test-harness/assets/choreo-gallery-wires-test-Bo4Sd1Vn.js +148 -0
  111. package/bundled-test-harness/assets/client-telemetry-test-DFM4mML2.js +340 -0
  112. package/bundled-test-harness/assets/clip-DY6N6K67.js +92 -0
  113. package/bundled-test-harness/assets/clip-DzXoPdp-.js +2 -0
  114. package/bundled-test-harness/assets/code-block-DRE8KQZQ.js +502 -0
  115. package/bundled-test-harness/assets/code-ref-test-CDcqE8_C.js +163 -0
  116. package/bundled-test-harness/assets/code-submode-availability-test-DPTqZYYm.js +198 -0
  117. package/bundled-test-harness/assets/code-submode-test-AHV4mzJ4.js +1839 -0
  118. package/bundled-test-harness/assets/codeblocks-test-D6ijVvEL.js +418 -0
  119. package/bundled-test-harness/assets/codemirror-editor-test-BeAMVivu.js +1512 -0
  120. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bnb7_KUT.js +366 -0
  121. package/bundled-test-harness/assets/color-field-test-CR6gGEqE.js +212 -0
  122. package/bundled-test-harness/assets/compaction-test-CjEsY0uG.js +150 -0
  123. package/bundled-test-harness/assets/computed-test-DtyZGgdc.js +1320 -0
  124. package/bundled-test-harness/assets/container-BYGZImLU.css +5101 -0
  125. package/bundled-test-harness/assets/container-CBZZ8uFw.js +10925 -0
  126. package/bundled-test-harness/assets/content-preview-components-test-BztI4fz-.js +462 -0
  127. package/bundled-test-harness/assets/copy-and-edit-test-Cqw7kcur.js +292 -0
  128. package/bundled-test-harness/assets/copy-card-test-D5m3eVEH.js +218 -0
  129. package/bundled-test-harness/assets/copy-file-to-realm-test-FPY-6Ddm.js +148 -0
  130. package/bundled-test-harness/assets/copy-source-test-9pJD-qey.js +56 -0
  131. package/bundled-test-harness/assets/create-file-test-DjMf88u_.js +1086 -0
  132. package/bundled-test-harness/assets/create-file-test-XbgOqg38.js +464 -0
  133. package/bundled-test-harness/assets/create-listing-modal-test-De7b4vu3.js +273 -0
  134. package/bundled-test-harness/assets/create-listing-pr-request-test-CBtIV0Z8.js +117 -0
  135. package/bundled-test-harness/assets/create-spec-test-4xR0gM7E.js +256 -0
  136. package/bundled-test-harness/assets/create-submission-workflow-test-DQpWrpGT.js +132 -0
  137. package/bundled-test-harness/assets/create-workspace-test-BQAudgpS.js +104 -0
  138. package/bundled-test-harness/assets/credential-fields-test-DXKBdbZD.js +200 -0
  139. package/bundled-test-harness/assets/csv-file-def-test-Cnp4y834.js +102 -0
  140. package/bundled-test-harness/assets/dashboard-CmuOhIYC.js +3628 -0
  141. package/bundled-test-harness/assets/dashboard-CzN49x74.css +2400 -0
  142. package/bundled-test-harness/assets/dashboard-add-workspace-test-T32hWB-g.js +50 -0
  143. package/bundled-test-harness/assets/dashboard-agents-test-BN5maCgQ.js +334 -0
  144. package/bundled-test-harness/assets/dashboard-archive-test-BzwUte_Z.js +128 -0
  145. package/bundled-test-harness/assets/dashboard-delete-test-D2Gcp81V.js +163 -0
  146. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-BgKNIr35.js +71 -0
  147. package/bundled-test-harness/assets/dashboard-duplicate-test-D7JEWylc.js +222 -0
  148. package/bundled-test-harness/assets/dashboard-get-started-test-DOGPzGoA.js +374 -0
  149. package/bundled-test-harness/assets/dashboard-ir2bakJS.js +142 -0
  150. package/bundled-test-harness/assets/dashboard-pinned-cards-test-Bn_P9xJU.js +220 -0
  151. package/bundled-test-harness/assets/dashboard-publish-test-64sGQ0nG.js +70 -0
  152. package/bundled-test-harness/assets/dashboard-reindex-test-DJjYq1ct.js +115 -0
  153. package/bundled-test-harness/assets/dashboard-section-rail-test-ZkAhWu5V.js +169 -0
  154. package/bundled-test-harness/assets/dashboard-state-test-BbkpPB5L.js +162 -0
  155. package/bundled-test-harness/assets/dashboard-test-CBLdPrSt.js +545 -0
  156. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DFT3R1Zx.js +62 -0
  157. package/bundled-test-harness/assets/dashboard-workspace-test-DqBdCFo2.js +537 -0
  158. package/bundled-test-harness/assets/dashboard-workspaces-section-test-CH1HDfxR.js +410 -0
  159. package/bundled-test-harness/assets/data-file-def-preview-test-CNsZwQEJ.js +155 -0
  160. package/bundled-test-harness/assets/date-time-fields-test-CEFaZTnF.js +359 -0
  161. package/bundled-test-harness/assets/debug-message-test-Ck3BfFv3.js +117 -0
  162. package/bundled-test-harness/assets/declared-captures-test-C-0yPRU7.js +879 -0
  163. package/bundled-test-harness/assets/delete-workspace-test-CZOwGy78.js +102 -0
  164. package/bundled-test-harness/assets/diffing-test-BEKI905O.js +210 -0
  165. package/bundled-test-harness/assets/download-file-to-realm-test-C1kAGDll.js +119 -0
  166. package/bundled-test-harness/assets/editor-test-C9x5ZY6g.js +688 -0
  167. package/bundled-test-harness/assets/edits-D76-aanh.js +651 -0
  168. package/bundled-test-harness/assets/email-field-test-LGkrB_2B.js +75 -0
  169. package/bundled-test-harness/assets/enum-field-test-CPyV1J-m.js +935 -0
  170. package/bundled-test-harness/assets/error-display-test-bWuUtfIG.js +343 -0
  171. package/bundled-test-harness/assets/evaluate-module-test-CbS5h8t3.js +91 -0
  172. package/bundled-test-harness/assets/execute-atomic-operations-test-B4Kfco0k.js +113 -0
  173. package/bundled-test-harness/assets/externals-k-2ZBepK.js +4393 -0
  174. package/bundled-test-harness/assets/fallback-banner-live-delete-test-CuFiH1D8.js +207 -0
  175. package/bundled-test-harness/assets/fallback-banner-test-CqSRN7D8.js +225 -0
  176. package/bundled-test-harness/assets/fallback-banner-test-DQkrFE4-.js +53 -0
  177. package/bundled-test-harness/assets/fallback-models-test-BWekNxC0.js +161 -0
  178. package/bundled-test-harness/assets/fetch-card-json-test-DULUqUEu.js +61 -0
  179. package/bundled-test-harness/assets/field-configuration-test-BXZq28xa.js +551 -0
  180. package/bundled-test-harness/assets/field-markdown-domain-test-DdXCifs6.js +616 -0
  181. package/bundled-test-harness/assets/field-markdown-oversize-test-DouPPTHX.js +88 -0
  182. package/bundled-test-harness/assets/field-markdown-primitives-test-DSRGJeyl.js +365 -0
  183. package/bundled-test-harness/assets/field-markdown-specialized-test-DlTYLl_s.js +534 -0
  184. package/bundled-test-harness/assets/field-playground-test-NhS4VvoN.js +894 -0
  185. package/bundled-test-harness/assets/field-support-predicates-test-DWpyT1Qf.js +167 -0
  186. package/bundled-test-harness/assets/file-attachment-test-LwZf-BSY.js +796 -0
  187. package/bundled-test-harness/assets/file-chooser-panel-test-DuAqD9bn.js +153 -0
  188. package/bundled-test-harness/assets/file-chooser-test-CjaXXwpT.js +504 -0
  189. package/bundled-test-harness/assets/file-def-format-templates-test-BDs4OmHq.js +380 -0
  190. package/bundled-test-harness/assets/file-def-live-reload-test-BqTdnq-W.js +124 -0
  191. package/bundled-test-harness/assets/file-def-menu-items-test-DqdINXsD.js +138 -0
  192. package/bundled-test-harness/assets/file-def-navigation-test-BPGr0SQy.js +109 -0
  193. package/bundled-test-harness/assets/file-def-serialization-test-CvjW-FlC.js +89 -0
  194. package/bundled-test-harness/assets/file-def-test-C-Yv_NjS.js +216 -0
  195. package/bundled-test-harness/assets/file-preview-live-reload-test-MzwGwasU.js +310 -0
  196. package/bundled-test-harness/assets/file-resource-primitives-test-D3GmfqNs.js +255 -0
  197. package/bundled-test-harness/assets/file-tree-from-index-test-CfldnUgm.js +96 -0
  198. package/bundled-test-harness/assets/file-tree-test--0ZCPRe9.js +851 -0
  199. package/bundled-test-harness/assets/file-view-model-test-BDIAeBV8.js +346 -0
  200. package/bundled-test-harness/assets/filedef-export-shape-test-B2tgU404.js +61 -0
  201. package/bundled-test-harness/assets/film-Bf73ypzi.js +4074 -0
  202. package/bundled-test-harness/assets/film-C54lhaiU.js +2 -0
  203. package/bundled-test-harness/assets/film-DPcMEHYu.js +13 -0
  204. package/bundled-test-harness/assets/flac-audio-def-test-ByoXMoQ1.js +143 -0
  205. package/bundled-test-harness/assets/font-metadata-extractor-test-hawLTDTG.js +415 -0
  206. package/bundled-test-harness/assets/formatted-aibot-message-test-BahBj3x8.js +109 -0
  207. package/bundled-test-harness/assets/formatted-user-message-test-CodbrU3t.js +43 -0
  208. package/bundled-test-harness/assets/freestyle-test-faQhSciz.js +17 -0
  209. package/bundled-test-harness/assets/full-reindex-realm-test-CE5RJTIC.js +101 -0
  210. package/bundled-test-harness/assets/garbage-collection-test-v-3sev77.js +403 -0
  211. package/bundled-test-harness/assets/general-test-DKZPBtSb.js +923 -0
  212. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-CucWyrkH.js +65 -0
  213. package/bundled-test-harness/assets/generic-file-def-preview-test-_EDRsebi.js +71 -0
  214. package/bundled-test-harness/assets/get-available-realm-identifiers-test-CV023yek.js +47 -0
  215. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test--DOu3DyV.js +47 -0
  216. package/bundled-test-harness/assets/get-default-writable-realm-test-Bic8jl6R.js +54 -0
  217. package/bundled-test-harness/assets/get-published-realms-test-DrA5YcFN.js +71 -0
  218. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-jfU6SIWn.js +54 -0
  219. package/bundled-test-harness/assets/get-relationship-membership-state-test-Ccy2Z7MN.js +1308 -0
  220. package/bundled-test-harness/assets/get-user-system-card-test-Bmq2lmWv.js +67 -0
  221. package/bundled-test-harness/assets/gif-image-def-test-N1mMQC-X.js +188 -0
  222. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BkUDjiTs.js +160 -0
  223. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-DsFWCzTs.js +74 -0
  224. package/bundled-test-harness/assets/gts-file-def-test-BL1jpQ9J.js +100 -0
  225. package/bundled-test-harness/assets/head-format-preview-test-BVCaPQqc.js +158 -0
  226. package/bundled-test-harness/assets/helpers-Ds68JxHe.js +5 -0
  227. package/bundled-test-harness/assets/host-mode-service-B4bisRdR.js +262 -0
  228. package/bundled-test-harness/assets/host-mode-test-BmkN2PCJ.js +831 -0
  229. package/bundled-test-harness/assets/host-submode-test-C6SxQ796.js +1392 -0
  230. package/bundled-test-harness/assets/html-component-test-CNQ9wF0Q.js +65 -0
  231. package/bundled-test-harness/assets/html-def-test-BcaCVVQq.js +160 -0
  232. package/bundled-test-harness/assets/html-meta-extractor-test-BU1hjkTp.js +60 -0
  233. package/bundled-test-harness/assets/hydratable-card-test-CX6MWiti.js +426 -0
  234. package/bundled-test-harness/assets/icon-button-C1zH38Nc.js +67 -0
  235. package/bundled-test-harness/assets/image-metadata-extractor-test-CakSBPZ_.js +1109 -0
  236. package/bundled-test-harness/assets/index-changes-test-D8RtgfyG.js +367 -0
  237. package/bundled-test-harness/assets/index-query-engine-test-BETfoYOK.js +2593 -0
  238. package/bundled-test-harness/assets/index-writer-test-B_bR2fjw.js +3040 -0
  239. package/bundled-test-harness/assets/inspector-test-BwPXJj1S.js +2058 -0
  240. package/bundled-test-harness/assets/instance-filter-matcher-test-BSVCg59b.js +788 -0
  241. package/bundled-test-harness/assets/instantiate-card-test-BVQhZjpq.js +164 -0
  242. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DzQLG41H.js +475 -0
  243. package/bundled-test-harness/assets/interact-submode-setup-C5bKXq73.js +566 -0
  244. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-Cd3dpjhB.js +99 -0
  245. package/bundled-test-harness/assets/invite-user-to-room-test-Brabz1tt.js +142 -0
  246. package/bundled-test-harness/assets/invoke-card-operation-test-C1Q1FUf4.js +333 -0
  247. package/bundled-test-harness/assets/isolated-render-test-BLJfS7BU.js +51 -0
  248. package/bundled-test-harness/assets/job-scoped-doc-cache-test-Bgv5woaB.js +181 -0
  249. package/bundled-test-harness/assets/job-scoped-instance-residency-test-C_bB6KpR.js +103 -0
  250. package/bundled-test-harness/assets/jpg-image-def-test-gdLIKocD.js +697 -0
  251. package/bundled-test-harness/assets/json-file-def-test-CPYMRBY-.js +95 -0
  252. package/bundled-test-harness/assets/key-notices-badge-test-DemslfLw.js +155 -0
  253. package/bundled-test-harness/assets/key-readiness-test-5tq5JycL.js +190 -0
  254. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-BbhDZ2PH.js +398 -0
  255. package/bundled-test-harness/assets/linksto-error-sentinel-test-C2t7fFPi.js +238 -0
  256. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test--U_UvUty.js +354 -0
  257. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-Dj3Xy0ZF.js +303 -0
  258. package/bundled-test-harness/assets/linksto-sentinel-reload-test-D0dK4Jjs.js +197 -0
  259. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test---IYiXok.js +260 -0
  260. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-CT04MhES.js +196 -0
  261. package/bundled-test-harness/assets/lint-and-fix-test-aadgx7rX.js +51 -0
  262. package/bundled-test-harness/assets/live-test-BGij_vuc.js +100 -0
  263. package/bundled-test-harness/assets/live-test-CppvValf.js +2 -0
  264. package/bundled-test-harness/assets/load-default-skills-test-Cp2m_ebp.js +74 -0
  265. package/bundled-test-harness/assets/loader-parallel-prefetch-test-vU_26Jqu.js +257 -0
  266. package/bundled-test-harness/assets/loader-test-CTaw8K_B.js +482 -0
  267. package/bundled-test-harness/assets/loading-test-DGGt4qZZ.js +63 -0
  268. package/bundled-test-harness/assets/m4a-audio-def-test-DAiReOXH.js +190 -0
  269. package/bundled-test-harness/assets/main-bXHwJ0CN.js +5 -0
  270. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-CIXq9FqR.js +470 -0
  271. package/bundled-test-harness/assets/markdown-embed-chooser-test-zFGh9WfP.js +334 -0
  272. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-Byn_WFwY.js +447 -0
  273. package/bundled-test-harness/assets/markdown-embed-preview-test-Y3iFMttg.js +368 -0
  274. package/bundled-test-harness/assets/markdown-fallback-test-Br1TPkLZ.js +316 -0
  275. package/bundled-test-harness/assets/markdown-file-def-test-Crm2MAnq.js +380 -0
  276. package/bundled-test-harness/assets/markdown-helpers-test-CZ9Vvywc.js +188 -0
  277. package/bundled-test-harness/assets/markdown-highlighting-test-CFMkoVDl.js +244 -0
  278. package/bundled-test-harness/assets/markdown-preview-lOh-MyqF.js +72 -0
  279. package/bundled-test-harness/assets/markdown-preview-test-B8w0fFIy.js +238 -0
  280. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-aH6HQly1.js +146 -0
  281. package/bundled-test-harness/assets/markdown-skill-search-test-CiNLQs-5.js +80 -0
  282. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-DaA8w1Jj.js +63 -0
  283. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-21GIlf55.js +300 -0
  284. package/bundled-test-harness/assets/matrix-service-personal-realm-test-jn9DUENm.js +125 -0
  285. package/bundled-test-harness/assets/matrix-service-realm-servers-test-eNZVJakl.js +55 -0
  286. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-Cabm8_dY.js +132 -0
  287. package/bundled-test-harness/assets/matrix-service-relogin-test-C77EFgjc.js +59 -0
  288. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-BgM0fPiO.js +35 -0
  289. package/bundled-test-harness/assets/menu-Cl50TSFe.js +3561 -0
  290. package/bundled-test-harness/assets/message-service-subscription-test-CfEqH2jP.js +110 -0
  291. package/bundled-test-harness/assets/message-service-test-DsTzH1In.js +144 -0
  292. package/bundled-test-harness/assets/message-tool-test-C5xVfTtj.js +33 -0
  293. package/bundled-test-harness/assets/midi-audio-def-test-goLRCNCZ.js +182 -0
  294. package/bundled-test-harness/assets/migrate-skill-test-yPCbVfxG.js +161 -0
  295. package/bundled-test-harness/assets/mini-YXjrY_tH.js +1404 -0
  296. package/bundled-test-harness/assets/mini-card-chooser-test-DrllikHB.js +272 -0
  297. package/bundled-test-harness/assets/mini-file-chooser-test-BfqayhmI.js +201 -0
  298. package/bundled-test-harness/assets/mock-matrix-C7BrPS6S.js +2 -0
  299. package/bundled-test-harness/assets/mock-matrix-FjsXmU7-.js +15107 -0
  300. package/bundled-test-harness/assets/modal-BgaZavcs.js +322 -0
  301. package/bundled-test-harness/assets/model-cost-tier-test-BGg-sJML.js +174 -0
  302. package/bundled-test-harness/assets/model-file-extract-test-CjEBupY5.js +206 -0
  303. package/bundled-test-harness/assets/module-transpile-cache-test-XW6DDsmz.js +67 -0
  304. package/bundled-test-harness/assets/monaco-test-DkoRuFiQ.js +100 -0
  305. package/bundled-test-harness/assets/mp3-audio-def-test-v369NNsQ.js +133 -0
  306. package/bundled-test-harness/assets/multiple-stacks-test-CJpYPWdM.js +208 -0
  307. package/bundled-test-harness/assets/nested-query-field-render-test-CfDrBcUN.js +249 -0
  308. package/bundled-test-harness/assets/no-stacks-test-MmsJeLpz.js +48 -0
  309. package/bundled-test-harness/assets/number-field-test-A7B2r0M5.js +184 -0
  310. package/bundled-test-harness/assets/office-file-def-test-BNRvFmCB.js +263 -0
  311. package/bundled-test-harness/assets/office-metadata-extractor-test-zlDoEIEp.js +218 -0
  312. package/bundled-test-harness/assets/office-poster-capture-test-DdFEaOxR.js +203 -0
  313. package/bundled-test-harness/assets/ogg-audio-def-test-kk91BzQY.js +196 -0
  314. package/bundled-test-harness/assets/open-create-listing-modal-test-D1Dl1pov.js +131 -0
  315. package/bundled-test-harness/assets/open-image-in-new-tab-test-DyCmdMyO.js +52 -0
  316. package/bundled-test-harness/assets/open-secure-window-test-dz1vPudF.js +253 -0
  317. package/bundled-test-harness/assets/open-workspace-test-BvTcskzP.js +46 -0
  318. package/bundled-test-harness/assets/operation-lowering-test-omU66bkJ.js +2957 -0
  319. package/bundled-test-harness/assets/operations-invocation-test-BMj42rQe.js +523 -0
  320. package/bundled-test-harness/assets/operations-optimistic-test-KJLyzT8v.js +203 -0
  321. package/bundled-test-harness/assets/operations-query-test-J3HcnaoK.js +459 -0
  322. package/bundled-test-harness/assets/operations-store-reconciliation-test-CkbGBMBQ.js +406 -0
  323. package/bundled-test-harness/assets/operations-test-C7zXXpRW.js +2518 -0
  324. package/bundled-test-harness/assets/operator-mode-acceptance-test-BPolI_RD.js +1195 -0
  325. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DjTQgizt.js +1036 -0
  326. package/bundled-test-harness/assets/operator-mode-links-test-DSEqy5Db.js +797 -0
  327. package/bundled-test-harness/assets/operator-mode-test-CB7BNDNE.js +696 -0
  328. package/bundled-test-harness/assets/operator-mode-ui-test-C1OhF1il.js +1045 -0
  329. package/bundled-test-harness/assets/overlay-D2rQi8lJ.js +427 -0
  330. package/bundled-test-harness/assets/overlay-menu-items-test-CPN31yBJ.js +331 -0
  331. package/bundled-test-harness/assets/overlays-B-qMEPhY.js +2 -0
  332. package/bundled-test-harness/assets/overlays-DSf2je0c.js +75 -0
  333. package/bundled-test-harness/assets/overlays-detached-element-test-C73nMXes.js +56 -0
  334. package/bundled-test-harness/assets/panel-DjrC7DxA.js +15124 -0
  335. package/bundled-test-harness/assets/past-sessions-test-BSIS2Hlq.js +321 -0
  336. package/bundled-test-harness/assets/patch-fields-test-Bp2IE0Jw.js +1014 -0
  337. package/bundled-test-harness/assets/patch-instance-test-DssuRGKP.js +348 -0
  338. package/bundled-test-harness/assets/pdf-file-def-test-Barj9ffD.js +111 -0
  339. package/bundled-test-harness/assets/pdf-metadata-extractor-test-B7KnXcIm.js +130 -0
  340. package/bundled-test-harness/assets/permission-checking-realm-test-BD4O0nen.js +306 -0
  341. package/bundled-test-harness/assets/persist-module-inspector-view-test-BIdbkdPr.js +60 -0
  342. package/bundled-test-harness/assets/persist-scroll-position-test-Bhb7wJiy.js +254 -0
  343. package/bundled-test-harness/assets/phone-number-field-test-C2yuCrXY.js +73 -0
  344. package/bundled-test-harness/assets/pill-menu-test-BIp91YXi.js +60 -0
  345. package/bundled-test-harness/assets/plate-CJq1veVA.js +41 -0
  346. package/bundled-test-harness/assets/plate-CwAvOUfL.js +2 -0
  347. package/bundled-test-harness/assets/player-Digk7omr.js +2 -0
  348. package/bundled-test-harness/assets/player-vsjosoN_.js +82 -0
  349. package/bundled-test-harness/assets/playground-B02e8uqB.js +58 -0
  350. package/bundled-test-harness/assets/plural-field-components-test-C1acuN-A.js +198 -0
  351. package/bundled-test-harness/assets/png-image-def-test-B9QeVo1f.js +266 -0
  352. package/bundled-test-harness/assets/policy-audit-confirmation-test-CeVquvc_.js +155 -0
  353. package/bundled-test-harness/assets/policy-scoped-search-test-SFPiIqR3.js +339 -0
  354. package/bundled-test-harness/assets/prerender-file-extract-test-HSJKAHyO.js +346 -0
  355. package/bundled-test-harness/assets/prerender-html-test-BTAcFCme.js +670 -0
  356. package/bundled-test-harness/assets/prerender-meta-test-Csyz2b21.js +614 -0
  357. package/bundled-test-harness/assets/prerender-module-test-DpTYAbmI.js +409 -0
  358. package/bundled-test-harness/assets/prerender-persistence-block-test-BhIt-7kK.js +124 -0
  359. package/bundled-test-harness/assets/prerender-pre-model-error-test-DxKPQKqx.js +61 -0
  360. package/bundled-test-harness/assets/prerender-serialize-cycle-test-C8V5YWQO.js +134 -0
  361. package/bundled-test-harness/assets/prerendered-html-read-test-Cq7JVGwg.js +191 -0
  362. package/bundled-test-harness/assets/pretui-components-test-Ducr9fLT.css +743 -0
  363. package/bundled-test-harness/assets/pretui-components-test-Hs0uyIUQ.js +992 -0
  364. package/bundled-test-harness/assets/pretui-primitives-CRs8NRm0.js +69 -0
  365. package/bundled-test-harness/assets/preview-format-test-cCqLrfdY.js +103 -0
  366. package/bundled-test-harness/assets/preview-test-BMqJSoR1.js +474 -0
  367. package/bundled-test-harness/assets/process-card-test-578tfDvr.js +94 -0
  368. package/bundled-test-harness/assets/profile-settings-modal-CVnNl7Yu.js +990 -0
  369. package/bundled-test-harness/assets/publish-realm-COoeWexp.js +82 -0
  370. package/bundled-test-harness/assets/publish-realm-test-a5nkx0Ov.js +210 -0
  371. package/bundled-test-harness/assets/query-field-barrier-test-qX3xVPfk.js +113 -0
  372. package/bundled-test-harness/assets/query-field-error-sentinel-test-V6JDPFLX.js +201 -0
  373. package/bundled-test-harness/assets/query-field-membership-status-test-CK7eDf-K.js +323 -0
  374. package/bundled-test-harness/assets/query-field-page-optin-test-B5YBHUvU.js +126 -0
  375. package/bundled-test-harness/assets/query-field-schema-test-D4SjOGlK.js +231 -0
  376. package/bundled-test-harness/assets/query-field-search-throttle-test-BVkm1-D8.js +154 -0
  377. package/bundled-test-harness/assets/query-field-stale-prerender-test-9g7hcD91.js +152 -0
  378. package/bundled-test-harness/assets/query-fields-test-CQYqhzpN.js +535 -0
  379. package/bundled-test-harness/assets/quick-look-test-CE0o6lJ4.js +139 -0
  380. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-D0mJorwH.js +91 -0
  381. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-B_F_2GEB.js +45 -0
  382. package/bundled-test-harness/assets/read-source-test-BgJV4B4F.js +67 -0
  383. package/bundled-test-harness/assets/read-text-file-test-DaeLzg4u.js +124 -0
  384. package/bundled-test-harness/assets/realm-C_a9su1j.js +2858 -0
  385. package/bundled-test-harness/assets/realm-api-keys-D5USFOoS.js +2 -0
  386. package/bundled-test-harness/assets/realm-api-keys-m_VOcixC.js +578 -0
  387. package/bundled-test-harness/assets/realm-api-keys-test-BVs7f5Dz.js +109 -0
  388. package/bundled-test-harness/assets/realm-api-keys-test-C_uZnTmq.js +588 -0
  389. package/bundled-test-harness/assets/realm-config-m5eccPW8.js +833 -0
  390. package/bundled-test-harness/assets/realm-config-policy-standing-test-Ber-IXpc.js +290 -0
  391. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-3Xqt5VlM.js +274 -0
  392. package/bundled-test-harness/assets/realm-config-settings-test-CkalhbDF.js +187 -0
  393. package/bundled-test-harness/assets/realm-field-test-B_PUoqnk.js +100 -0
  394. package/bundled-test-harness/assets/realm-indexing-test-8iLjeV_e.js +4380 -0
  395. package/bundled-test-harness/assets/realm-policy-fitted-test-Bptvra0U.js +206 -0
  396. package/bundled-test-harness/assets/realm-policy-test-DwG0qqXE.js +1141 -0
  397. package/bundled-test-harness/assets/realm-querying-test-Dvw26A6Q.js +1067 -0
  398. package/bundled-test-harness/assets/realm-server-form-agnostic-test-DrXQH0UP.js +96 -0
  399. package/bundled-test-harness/assets/realm-server-subscriber-test-Dkj23vQK.js +46 -0
  400. package/bundled-test-harness/assets/realm-service-info-test-CdRlDhj-.js +67 -0
  401. package/bundled-test-harness/assets/realm-test-DGYN48Qx.js +2364 -0
  402. package/bundled-test-harness/assets/realm-token-refresh-test-CEWATL9h.js +153 -0
  403. package/bundled-test-harness/assets/realm-url-tooltip-test-8ZjTNPuy.js +78 -0
  404. package/bundled-test-harness/assets/reasoning-test-BV49AYg2.js +221 -0
  405. package/bundled-test-harness/assets/recent-files-test-Dc6L6Dm4.js +450 -0
  406. package/bundled-test-harness/assets/reindex-realm-test-CFRSt39u.js +117 -0
  407. package/bundled-test-harness/assets/relationship-loading-state-test-FKbtOFUr.js +290 -0
  408. package/bundled-test-harness/assets/remix-card-test-CKGC_Sgq.js +58 -0
  409. package/bundled-test-harness/assets/rendered-markdown-DXiDN91F.js +292 -0
  410. package/bundled-test-harness/assets/rendered-markdown-test-n3MlXmmu.js +587 -0
  411. package/bundled-test-harness/assets/resident-instance-reuse-test-BjdhE6CM.js +82 -0
  412. package/bundled-test-harness/assets/result-tile-o6dtjgX4.js +144 -0
  413. package/bundled-test-harness/assets/rich-markdown-field-test-VXr6l20h.js +1647 -0
  414. package/bundled-test-harness/assets/room-message-test-BrjJ2wMs.js +484 -0
  415. package/bundled-test-harness/assets/run-P_7TsreC.js +4017 -0
  416. package/bundled-test-harness/assets/run-realm-code-DsBUf1si.js +2964 -0
  417. package/bundled-test-harness/assets/run-realm-code-test-cS0DzaKo.js +3844 -0
  418. package/bundled-test-harness/assets/sanitize-module-list-test-CvuOOiUY.js +85 -0
  419. package/bundled-test-harness/assets/save-card-skip-index-wait-test-fpJ1eq32.js +89 -0
  420. package/bundled-test-harness/assets/schema-editor-test-NkKjCgyf.js +785 -0
  421. package/bundled-test-harness/assets/schema-generation-test-Dmg3lWl7.js +28 -0
  422. package/bundled-test-harness/assets/scrolling-test-B0GNYGYc.js +412 -0
  423. package/bundled-test-harness/assets/search-adorn-test-CZebk7_y.js +136 -0
  424. package/bundled-test-harness/assets/search-and-choose-test-Bd4NZUup.js +154 -0
  425. package/bundled-test-harness/assets/search-correlation-id-test-DXKlEO55.js +139 -0
  426. package/bundled-test-harness/assets/search-entries-result-test-QQawA8Fm.js +234 -0
  427. package/bundled-test-harness/assets/search-entries-test-3DlqGPQq.js +1486 -0
  428. package/bundled-test-harness/assets/search-entries-tool-test-D1TvDE9D.js +504 -0
  429. package/bundled-test-harness/assets/search-google-images-test-DqsoQGr1.js +166 -0
  430. package/bundled-test-harness/assets/search-results-DGrNaPxh.js +266 -0
  431. package/bundled-test-harness/assets/search-results-test-CqVHYNRt.js +578 -0
  432. package/bundled-test-harness/assets/search-selection-menu-test-D6bIjKiH.js +108 -0
  433. package/bundled-test-harness/assets/search-sheet-files-test-Bf37TQXo.js +126 -0
  434. package/bundled-test-harness/assets/search-sheet-persistence-test-CV4_XdxR.js +131 -0
  435. package/bundled-test-harness/assets/search-test-Dlb-wg3a.js +2249 -0
  436. package/bundled-test-harness/assets/search-tool-test-BJLgVMoL.js +156 -0
  437. package/bundled-test-harness/assets/searchable-option-test-CcbfMqIL.js +322 -0
  438. package/bundled-test-harness/assets/searchable-search-doc-test-yH9fLGNS.js +1271 -0
  439. package/bundled-test-harness/assets/section-rail-CNFCebtT.js +113 -0
  440. package/bundled-test-harness/assets/section-rail-test-KNJAWWl6.js +256 -0
  441. package/bundled-test-harness/assets/secure-sign-in-Dyljp0Th.js +174 -0
  442. package/bundled-test-harness/assets/secure-sign-in-test-QnqNuTP3.js +373 -0
  443. package/bundled-test-harness/assets/segmented-control-DxJdoJ4Z.js +173 -0
  444. package/bundled-test-harness/assets/select-BiQTg2ts.js +175 -0
  445. package/bundled-test-harness/assets/send-ai-assistant-message-test-CAn7M2dZ.js +52 -0
  446. package/bundled-test-harness/assets/send-bot-trigger-event-test-qBu5E_jy.js +56 -0
  447. package/bundled-test-harness/assets/send-request-via-proxy-test-CLuwLBq_.js +380 -0
  448. package/bundled-test-harness/assets/sending-test-H0AaBSgi.js +659 -0
  449. package/bundled-test-harness/assets/serialization-rri-form-audit-test-hMJukiKt.js +136 -0
  450. package/bundled-test-harness/assets/serialization-test-W5e3wKbz.js +8758 -0
  451. package/bundled-test-harness/assets/set-user-system-card-test-CjgWLkNV.js +59 -0
  452. package/bundled-test-harness/assets/setup-CssMNvui.js +772 -0
  453. package/bundled-test-harness/assets/setup-D8YXvK-p.js +2 -0
  454. package/bundled-test-harness/assets/shared-link-target-reuse-test-D42UO8DC.js +207 -0
  455. package/bundled-test-harness/assets/show-card-test-CHEaS514.js +365 -0
  456. package/bundled-test-harness/assets/signed-capture-link-test-BgEu0F-S.js +132 -0
  457. package/bundled-test-harness/assets/single-stack-test-DYcu_v7Z.js +652 -0
  458. package/bundled-test-harness/assets/skills-test-ChmKhADX.js +648 -0
  459. package/bundled-test-harness/assets/skip-boot-index-guard-test-BzRIncDN.js +46 -0
  460. package/bundled-test-harness/assets/spec-test-BYvFR6Xb.js +1077 -0
  461. package/bundled-test-harness/assets/spinner-Bx9x55NA.js +49 -0
  462. package/bundled-test-harness/assets/src-C1hYFgVl.js +216 -0
  463. package/bundled-test-harness/assets/src-CIlLx7Lu.js +5 -0
  464. package/bundled-test-harness/assets/stick-to-bottom-resize-test-DMHsAG0v.js +56 -0
  465. package/bundled-test-harness/assets/store-add-test-D_9IHQjZ.js +50 -0
  466. package/bundled-test-harness/assets/store-module-rebuild-test-BRGZoLRV.js +454 -0
  467. package/bundled-test-harness/assets/store-search-test-3G8JHuj2.js +175 -0
  468. package/bundled-test-harness/assets/store-test-BiKKDqqW.js +3672 -0
  469. package/bundled-test-harness/assets/structured-theme-test-11TNsgUW.js +377 -0
  470. package/bundled-test-harness/assets/summarize-session-test-CwzD_ZbD.js +172 -0
  471. package/bundled-test-harness/assets/svg-image-def-test-zV6aMK9q.js +167 -0
  472. package/bundled-test-harness/assets/switch-submode-test-DQU2cP5_.js +168 -0
  473. package/bundled-test-harness/assets/sync-openrouter-models-test-xrXVaC2H.js +97 -0
  474. package/bundled-test-harness/assets/test-support-BGl3rthw.js +3 -0
  475. package/bundled-test-harness/assets/test-support-BcBv__98.js +99 -0
  476. package/bundled-test-harness/assets/tests-CmM9imwB.js +3598 -0
  477. package/bundled-test-harness/assets/text-file-def-test-Cyq78UFY.js +94 -0
  478. package/bundled-test-harness/assets/text-input-validator-test-DBj7TaM_.js +156 -0
  479. package/bundled-test-harness/assets/text-suggestion-test-C4XAqWqY.js +340 -0
  480. package/bundled-test-harness/assets/theme-card-test-dVNz4tgU.js +621 -0
  481. package/bundled-test-harness/assets/theme-dashboard-nav-test-DYSn5pqo.js +196 -0
  482. package/bundled-test-harness/assets/theme-scheme-island-test-C1WpkfEP.js +264 -0
  483. package/bundled-test-harness/assets/theme-scoped-css-parity-test-BVluppsE.js +176 -0
  484. package/bundled-test-harness/assets/titles-DCvAhECF.js +52 -0
  485. package/bundled-test-harness/assets/titles-ZPeArtS1.js +2 -0
  486. package/bundled-test-harness/assets/to-device-streaming-test-BJ4J1cXe.js +163 -0
  487. package/bundled-test-harness/assets/token-usage-test-WUf4r4fQ.js +160 -0
  488. package/bundled-test-harness/assets/tools-J_Knr_W6.js +774 -0
  489. package/bundled-test-harness/assets/tools-calling-test-CfqZX0Ed.js +200 -0
  490. package/bundled-test-harness/assets/tools-test-B4x58ZmI.js +1624 -0
  491. package/bundled-test-harness/assets/tools-test-Cvau5219.js +3204 -0
  492. package/bundled-test-harness/assets/tooltip-B0rEgyMW.css +66 -0
  493. package/bundled-test-harness/assets/tooltip-DvUMUgVX.js +195 -0
  494. package/bundled-test-harness/assets/transform-cards-test-CYQbZeD9.js +341 -0
  495. package/bundled-test-harness/assets/ts-file-def-preview-test-m39f8Zio.js +95 -0
  496. package/bundled-test-harness/assets/ts-file-def-test-xIcL5xWe.js +92 -0
  497. package/bundled-test-harness/assets/ttf-font-def-test-ClQ2SzFF.js +206 -0
  498. package/bundled-test-harness/assets/turn-settling-test-DZoL2mRT.js +160 -0
  499. package/bundled-test-harness/assets/turn-summary-Bmt7ZxTS.js +1039 -0
  500. package/bundled-test-harness/assets/unpublish-realm-test-0ToTJczx.js +102 -0
  501. package/bundled-test-harness/assets/update-room-skills-test-o_j8NOUV.js +240 -0
  502. package/bundled-test-harness/assets/use-ai-assistant-test-D7HFpxKJ.js +384 -0
  503. package/bundled-test-harness/assets/user-message-BAOt1hS3.js +262 -0
  504. package/bundled-test-harness/assets/validate-realm-test-e3xIbNLB.js +67 -0
  505. package/bundled-test-harness/assets/video-metadata-extractor-test-D8naLSlg.js +520 -0
  506. package/bundled-test-harness/assets/view-visually-test-BuhGau5E.js +335 -0
  507. package/bundled-test-harness/assets/virtual-network-reset-test-CgaFNGPi.js +96 -0
  508. package/bundled-test-harness/assets/wav-audio-def-test-CWG_UdCh.js +160 -0
  509. package/bundled-test-harness/assets/webp-image-def-test-sN4yw8Zu.js +226 -0
  510. package/bundled-test-harness/assets/workspace-0LfPqbYB.js +445 -0
  511. package/bundled-test-harness/assets/workspace-a11y-test-DQxYDRAP.js +197 -0
  512. package/bundled-test-harness/assets/workspace-actions-jGJSfl8M.js +588 -0
  513. package/bundled-test-harness/assets/workspace-behavior-test-BnF-bmBN.js +338 -0
  514. package/bundled-test-harness/assets/workspace-delete-multiple-test-D-rxPDuT.js +212 -0
  515. package/bundled-test-harness/assets/workspace-delete-summary-test-C2-Mve5R.js +63 -0
  516. package/bundled-test-harness/assets/workspace-hosting-test-BvDKdlOb.js +138 -0
  517. package/bundled-test-harness/assets/workspace-indexing-test-B34T3kqD.js +71 -0
  518. package/bundled-test-harness/assets/workspace-test-CJivgv-m.js +51 -0
  519. package/bundled-test-harness/assets/workspace-test-CuSRpPnQ.js +385 -0
  520. package/bundled-test-harness/assets/workspace-timestamp-labels-test-aWgjdbCp.js +68 -0
  521. package/bundled-test-harness/assets/workspace-unit-test-DHMUf2KT.js +122 -0
  522. package/bundled-test-harness/assets/write-binary-file-test-P-hVQuin.js +124 -0
  523. package/bundled-test-harness/assets/write-text-file-test-fXvJueDd.js +191 -0
  524. package/bundled-test-harness/assets/zip-archive-test-C2P5CUSR.js +285 -0
  525. package/bundled-test-harness/assets/zip-file-def-test-BfJZAmGt.js +164 -0
  526. package/bundled-test-harness/boxel-ui-checksum.txt +1 -1
  527. package/bundled-test-harness/index.html +48 -48
  528. package/bundled-test-harness/tests/index.html +50 -50
  529. package/bundled-types/boxel-ui/helpers/theme-scoped-css.ts +4 -0
  530. package/bundled-types/choreo/choreo.gts +58 -2
  531. package/bundled-types/choreo/compile.ts +5 -0
  532. package/bundled-types/choreo/layout-probe.ts +100 -0
  533. package/bundled-types/choreo/run.ts +99 -4
  534. package/bundled-types/host-app/components/operator-mode/dashboard/get-started.gts +152 -7
  535. package/bundled-types/host-app/components/operator-mode/dashboard/index.gts +2 -0
  536. package/bundled-types/host-app/components/operator-mode/dashboard/workspace.gts +5 -3
  537. package/bundled-types/host-app/components/operator-mode/dashboard-modals/workspace-modals.gts +5 -22
  538. package/bundled-types/host-app/components/operator-mode/host-submode/publishing-realm-popover.gts +1 -1
  539. package/bundled-types/host-app/components/operator-mode/host-submode.gts +111 -37
  540. package/bundled-types/host-app/components/operator-mode/motion/stack-motion.gts +92 -33
  541. package/bundled-types/host-app/components/operator-mode/publish-realm-modal.gts +1 -0
  542. package/bundled-types/host-app/components/operator-mode/stack-item.gts +2 -2
  543. package/bundled-types/host-app/components/operator-mode/stack.gts +36 -25
  544. package/bundled-types/host-app/components/operator-mode/submode-layout.gts +2 -2
  545. package/bundled-types/host-app/lib/modal-focus-trap.ts +33 -0
  546. package/bundled-types/host-app/lib/workspace-actions.ts +21 -0
  547. package/bundled-types/host-app/services/host-mode-service.ts +39 -0
  548. package/bundled-types/host-app/services/realm.ts +14 -0
  549. package/bundled-types/host-tests/helpers/dashboard.ts +67 -0
  550. package/package.json +1 -1
  551. package/bundled-test-harness/assets/account-switch-failed-test-FytUFiPO.js +0 -45
  552. package/bundled-test-harness/assets/adapter-DvmPwSZv.js +0 -2
  553. package/bundled-test-harness/assets/add-field-to-card-definition-tool-test-DN525jiY.js +0 -112
  554. package/bundled-test-harness/assets/ai-assistant-create-workspace-test-q3tKqVJQ.js +0 -130
  555. package/bundled-test-harness/assets/ai-assistant-panel-relogin-test-DgeXcCyi.js +0 -46
  556. package/bundled-test-harness/assets/ai-assistant-test-lDIGPKFP.js +0 -2223
  557. package/bundled-test-harness/assets/ai-function-generation-test-D5GbLyvL.js +0 -1176
  558. package/bundled-test-harness/assets/ai-module-creation-test-I3-j2beD.js +0 -151
  559. package/bundled-test-harness/assets/aibot-message-Dmsjifs6.js +0 -1312
  560. package/bundled-test-harness/assets/app-BS9_-DhN.js +0 -14146
  561. package/bundled-test-harness/assets/apply-markdown-edit-test-4zlwt0Db.js +0 -230
  562. package/bundled-test-harness/assets/ask-user-picker-Dr-0qpNr.js +0 -370
  563. package/bundled-test-harness/assets/ask-user-picker-test-633AFdmS.js +0 -39
  564. package/bundled-test-harness/assets/assistant-transcript-test-BgRnLvMg.js +0 -57
  565. package/bundled-test-harness/assets/audio-metadata-extractor-test-4xsQqL-0.js +0 -1176
  566. package/bundled-test-harness/assets/authed-fetch-test-663mT5_N.js +0 -73
  567. package/bundled-test-harness/assets/avif-image-def-test-h01BPIJy.js +0 -187
  568. package/bundled-test-harness/assets/basic-test-DiD6T-8Q.js +0 -139
  569. package/bundled-test-harness/assets/binary-upload-dedupe-test-CkjMPO_e.js +0 -308
  570. package/bundled-test-harness/assets/bot-registration-test-CFZHpwdj.js +0 -97
  571. package/bundled-test-harness/assets/box-test-C3pSy5ED.js +0 -50
  572. package/bundled-test-harness/assets/brand-guide-attachments-test-EoC_u7Vc.js +0 -84
  573. package/bundled-test-harness/assets/brand-guide-custom-css-test-Dn3fvblr.js +0 -196
  574. package/bundled-test-harness/assets/brand-guide-edit-test-NeiT3MyK.js +0 -140
  575. package/bundled-test-harness/assets/brand-logo-mark-field-test-C2A1EnBB.js +0 -86
  576. package/bundled-test-harness/assets/broken-link-template-test-CWn6V5zZ.js +0 -192
  577. package/bundled-test-harness/assets/bundled-base-modules-test-D7mLzpsw.js +0 -54
  578. package/bundled-test-harness/assets/bundled-base-oracle-test-I7xCId_k.js +0 -37
  579. package/bundled-test-harness/assets/buried-stack-item-scroll-test-DFBev0h-.js +0 -236
  580. package/bundled-test-harness/assets/button-BeSuhveJ.js +0 -207
  581. package/bundled-test-harness/assets/bxl-cyclic-graph-test-DPykwvvx.js +0 -47
  582. package/bundled-test-harness/assets/bxl-expression-test-LBWJiFb9.js +0 -250
  583. package/bundled-test-harness/assets/bxl-indexing-test-BuZmLk7y.js +0 -212
  584. package/bundled-test-harness/assets/bxl-platform-module-test-BNIvlkCM.js +0 -71
  585. package/bundled-test-harness/assets/can-invoke-test-t-bFIIeX.js +0 -455
  586. package/bundled-test-harness/assets/can-read-realm-test-2Q_MzRT9.js +0 -56
  587. package/bundled-test-harness/assets/cancel-indexing-job-test-QeYxEukn.js +0 -69
  588. package/bundled-test-harness/assets/capture-test-CJmJG8YR.js +0 -360
  589. package/bundled-test-harness/assets/card-api-test-B43I510H.js +0 -198
  590. package/bundled-test-harness/assets/card-basics-test-CBClzP2y.js +0 -5364
  591. package/bundled-test-harness/assets/card-chooser-paging-test-HEVzf6pR.js +0 -235
  592. package/bundled-test-harness/assets/card-chooser-test-GfjBRPFI.js +0 -393
  593. package/bundled-test-harness/assets/card-context-search-results-CoSr4EdS.js +0 -30
  594. package/bundled-test-harness/assets/card-context-search-results-test-BLMlZu9t.js +0 -184
  595. package/bundled-test-harness/assets/card-def-field-def-relationships-test-DEBOzKan.js +0 -562
  596. package/bundled-test-harness/assets/card-def-menu-items-test-88_h8o0D.js +0 -228
  597. package/bundled-test-harness/assets/card-delete-test-DKom1phy.js +0 -466
  598. package/bundled-test-harness/assets/card-error-awaiting-index-test-DEwgFZMP.js +0 -53
  599. package/bundled-test-harness/assets/card-error-r6_cXst9.js +0 -72
  600. package/bundled-test-harness/assets/card-info-thumbnail-picker-test-B7LiY15e.js +0 -219
  601. package/bundled-test-harness/assets/card-playground-test-CgyIJHui.js +0 -1491
  602. package/bundled-test-harness/assets/card-prerender-rPfzpIOU.js +0 -12939
  603. package/bundled-test-harness/assets/card-thunk-error-test-L0pvg4Ce.js +0 -48
  604. package/bundled-test-harness/assets/card-type-service-test-B2dhqxSD.js +0 -161
  605. package/bundled-test-harness/assets/check-correctness-test-DgqaLlCW.js +0 -1093
  606. package/bundled-test-harness/assets/check-domain-availability-test-B0hJHY5l.js +0 -98
  607. package/bundled-test-harness/assets/chip-D01NW3WH.js +0 -44
  608. package/bundled-test-harness/assets/choreo-D2Jl79RU.js +0 -1019
  609. package/bundled-test-harness/assets/choreo-_E8SOEe-.js +0 -2
  610. package/bundled-test-harness/assets/choreo-feature-reel-test-WLjsZDmS.js +0 -155
  611. package/bundled-test-harness/assets/choreo-gallery-build-order-test-6jnS8PsS.js +0 -436
  612. package/bundled-test-harness/assets/choreo-gallery-compositor-test-CbUZsVB6.js +0 -399
  613. package/bundled-test-harness/assets/choreo-gallery-cover-test-CbvAStgk.js +0 -214
  614. package/bundled-test-harness/assets/choreo-gallery-crossing-stage-test-tdjvUSa6.js +0 -133
  615. package/bundled-test-harness/assets/choreo-gallery-demos-alive-test-CsnM3hQK.js +0 -42
  616. package/bundled-test-harness/assets/choreo-gallery-drift-test-DG2LQTa7.js +0 -620
  617. package/bundled-test-harness/assets/choreo-gallery-escort-test-mn3-qXP1.js +0 -187
  618. package/bundled-test-harness/assets/choreo-gallery-films-test-BuktaC0D.js +0 -140
  619. package/bundled-test-harness/assets/choreo-gallery-filter-test-Dd-zpps0.js +0 -46
  620. package/bundled-test-harness/assets/choreo-gallery-fold-test-CWc1ijGc.js +0 -180
  621. package/bundled-test-harness/assets/choreo-gallery-guide-pages-test-tk2QmYPU.js +0 -114
  622. package/bundled-test-harness/assets/choreo-gallery-guides-test-DVbf1zM4.js +0 -321
  623. package/bundled-test-harness/assets/choreo-gallery-hang-test-B7EFp2dx.js +0 -426
  624. package/bundled-test-harness/assets/choreo-gallery-highlight-test-BFgbdesP.js +0 -60
  625. package/bundled-test-harness/assets/choreo-gallery-inline-edit-test-DJb8FC5R.js +0 -370
  626. package/bundled-test-harness/assets/choreo-gallery-interruption-test-DWyMXo5D.js +0 -176
  627. package/bundled-test-harness/assets/choreo-gallery-lone-stack-test-D3b8LsJ6.js +0 -104
  628. package/bundled-test-harness/assets/choreo-gallery-navigation-test-CjjU6Rvn.js +0 -193
  629. package/bundled-test-harness/assets/choreo-gallery-playhead-transport-test-Le_h3QWU.js +0 -111
  630. package/bundled-test-harness/assets/choreo-gallery-poplayout-subtree-test-Cp-DlWj4.js +0 -127
  631. package/bundled-test-harness/assets/choreo-gallery-presence-modes-test-DayS4GCJ.js +0 -100
  632. package/bundled-test-harness/assets/choreo-gallery-presentation-test-DeAfuFS7.js +0 -157
  633. package/bundled-test-harness/assets/choreo-gallery-reduced-motion-test-BgPWpggq.js +0 -145
  634. package/bundled-test-harness/assets/choreo-gallery-sheet-standalone-test-PzyoMNYv.js +0 -89
  635. package/bundled-test-harness/assets/choreo-gallery-sheet-test-CxaiNBkL.js +0 -48
  636. package/bundled-test-harness/assets/choreo-gallery-site-test-6xtSntS5.js +0 -237
  637. package/bundled-test-harness/assets/choreo-gallery-stage-E6Q5r-zU.js +0 -256
  638. package/bundled-test-harness/assets/choreo-gallery-stage-keyboard-test-C7aWMr9a.js +0 -102
  639. package/bundled-test-harness/assets/choreo-gallery-stages-test-CDWWgC61.js +0 -35
  640. package/bundled-test-harness/assets/choreo-gallery-subdivision-test-Bkp15XJv.js +0 -138
  641. package/bundled-test-harness/assets/choreo-gallery-table-plan-test-CcGRi_3O.js +0 -144
  642. package/bundled-test-harness/assets/choreo-gallery-theater-test-Qph5pLT_.js +0 -252
  643. package/bundled-test-harness/assets/choreo-gallery-tuning-test-C4DhFLVA.js +0 -95
  644. package/bundled-test-harness/assets/choreo-gallery-widget-room-test-LK493r1M.js +0 -88
  645. package/bundled-test-harness/assets/choreo-gallery-wires-test-B7SeUCc8.js +0 -148
  646. package/bundled-test-harness/assets/client-telemetry-test-DGmHzAFx.js +0 -340
  647. package/bundled-test-harness/assets/clip-BpYQPVz_.js +0 -2
  648. package/bundled-test-harness/assets/clip-CNaYbIwL.js +0 -92
  649. package/bundled-test-harness/assets/code-block-Cp2CJo5-.js +0 -502
  650. package/bundled-test-harness/assets/code-ref-test-C8JBHDb-.js +0 -163
  651. package/bundled-test-harness/assets/code-submode-availability-test-CzG1Tv6L.js +0 -198
  652. package/bundled-test-harness/assets/code-submode-test-BclVWjm5.js +0 -1839
  653. package/bundled-test-harness/assets/codeblocks-test-CmQlyxN7.js +0 -418
  654. package/bundled-test-harness/assets/codemirror-editor-test-B74H_yn8.js +0 -1512
  655. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Bz6VEysU.js +0 -366
  656. package/bundled-test-harness/assets/color-field-test-DMCPQKIP.js +0 -212
  657. package/bundled-test-harness/assets/compaction-test-saQCLBrQ.js +0 -150
  658. package/bundled-test-harness/assets/computed-test-C05HliJC.js +0 -1320
  659. package/bundled-test-harness/assets/container-Cqcwrd-m.js +0 -10857
  660. package/bundled-test-harness/assets/container-h3Wc26qn.css +0 -5097
  661. package/bundled-test-harness/assets/content-preview-components-test-DZPj4_CU.js +0 -462
  662. package/bundled-test-harness/assets/copy-and-edit-test-DiXTQNTF.js +0 -292
  663. package/bundled-test-harness/assets/copy-card-test-ys7GquUY.js +0 -218
  664. package/bundled-test-harness/assets/copy-file-to-realm-test-Gn0Wn4vT.js +0 -148
  665. package/bundled-test-harness/assets/copy-source-test-BTLrOmPm.js +0 -56
  666. package/bundled-test-harness/assets/create-file-test-BCeIW-Rt.js +0 -464
  667. package/bundled-test-harness/assets/create-file-test-DbHQ5JsS.js +0 -1086
  668. package/bundled-test-harness/assets/create-listing-modal-test-CeHc4ter.js +0 -273
  669. package/bundled-test-harness/assets/create-listing-pr-request-test-DXbJNfMh.js +0 -117
  670. package/bundled-test-harness/assets/create-spec-test-BDIZoyHT.js +0 -256
  671. package/bundled-test-harness/assets/create-submission-workflow-test-Bix5J-3A.js +0 -132
  672. package/bundled-test-harness/assets/create-workspace-test-BmNnLHwC.js +0 -104
  673. package/bundled-test-harness/assets/credential-fields-test-NK1F4QWn.js +0 -200
  674. package/bundled-test-harness/assets/csv-file-def-test-BSfs4TTP.js +0 -102
  675. package/bundled-test-harness/assets/dashboard-C4T7ffKY.js +0 -3576
  676. package/bundled-test-harness/assets/dashboard-CFeHuP5-.js +0 -81
  677. package/bundled-test-harness/assets/dashboard-DQlpW-ux.css +0 -2392
  678. package/bundled-test-harness/assets/dashboard-add-workspace-test--rr6objf.js +0 -50
  679. package/bundled-test-harness/assets/dashboard-agents-test-D1y8H4xH.js +0 -334
  680. package/bundled-test-harness/assets/dashboard-archive-test-bN4EQaXv.js +0 -128
  681. package/bundled-test-harness/assets/dashboard-delete-test-BvsASb8B.js +0 -163
  682. package/bundled-test-harness/assets/dashboard-duplicate-offer-test-DEsd5ZzZ.js +0 -71
  683. package/bundled-test-harness/assets/dashboard-duplicate-test-BnR0sTgB.js +0 -222
  684. package/bundled-test-harness/assets/dashboard-get-started-test-DG4uUXLv.js +0 -246
  685. package/bundled-test-harness/assets/dashboard-pinned-cards-test-AoGGVRAS.js +0 -220
  686. package/bundled-test-harness/assets/dashboard-reindex-test-BN9a96Xp.js +0 -115
  687. package/bundled-test-harness/assets/dashboard-section-rail-test-B3OT9V2T.js +0 -169
  688. package/bundled-test-harness/assets/dashboard-state-test-BY0Zqrmj.js +0 -162
  689. package/bundled-test-harness/assets/dashboard-test-C13oNpWt.js +0 -545
  690. package/bundled-test-harness/assets/dashboard-unreachable-notice-test-DZIV4x5j.js +0 -62
  691. package/bundled-test-harness/assets/dashboard-workspace-test-CBnOQViI.js +0 -537
  692. package/bundled-test-harness/assets/dashboard-workspaces-section-test-KU8ZVOYp.js +0 -396
  693. package/bundled-test-harness/assets/data-file-def-preview-test-CI5gcdtK.js +0 -155
  694. package/bundled-test-harness/assets/date-time-fields-test-D2CpR_Pb.js +0 -359
  695. package/bundled-test-harness/assets/debug-message-test-Df1kHesw.js +0 -117
  696. package/bundled-test-harness/assets/declared-captures-test-hQ43zuox.js +0 -879
  697. package/bundled-test-harness/assets/delete-workspace-test-BhfMKsix.js +0 -102
  698. package/bundled-test-harness/assets/diffing-test-CHRh55mC.js +0 -210
  699. package/bundled-test-harness/assets/download-file-to-realm-test-CC1HURCi.js +0 -119
  700. package/bundled-test-harness/assets/editor-test-DkeCv28f.js +0 -688
  701. package/bundled-test-harness/assets/edits-BSJqtUXM.js +0 -651
  702. package/bundled-test-harness/assets/email-field-test-DihK0suO.js +0 -75
  703. package/bundled-test-harness/assets/enum-field-test-Gja3bzt5.js +0 -935
  704. package/bundled-test-harness/assets/error-display-test-GhYZu7cp.js +0 -343
  705. package/bundled-test-harness/assets/evaluate-module-test-D_t4CiUq.js +0 -91
  706. package/bundled-test-harness/assets/execute-atomic-operations-test-xtou8Zeg.js +0 -113
  707. package/bundled-test-harness/assets/externals-B02-sD_L.js +0 -4393
  708. package/bundled-test-harness/assets/fallback-banner-live-delete-test-DtxzNXdE.js +0 -207
  709. package/bundled-test-harness/assets/fallback-banner-test-BfmiQ_68.js +0 -53
  710. package/bundled-test-harness/assets/fallback-banner-test-DLtTdmvn.js +0 -225
  711. package/bundled-test-harness/assets/fallback-models-test-BxNJxhfd.js +0 -161
  712. package/bundled-test-harness/assets/fetch-card-json-test-DofKbzvC.js +0 -61
  713. package/bundled-test-harness/assets/field-configuration-test-SUoPaXWy.js +0 -551
  714. package/bundled-test-harness/assets/field-markdown-domain-test-BwtR0dPP.js +0 -616
  715. package/bundled-test-harness/assets/field-markdown-oversize-test-D8UJcBc3.js +0 -88
  716. package/bundled-test-harness/assets/field-markdown-primitives-test-D5_ZdoDO.js +0 -365
  717. package/bundled-test-harness/assets/field-markdown-specialized-test-Dpd5hs04.js +0 -534
  718. package/bundled-test-harness/assets/field-playground-test-CzhYzKGv.js +0 -894
  719. package/bundled-test-harness/assets/field-support-predicates-test-BSvVOFth.js +0 -167
  720. package/bundled-test-harness/assets/file-attachment-test-fM-yFedm.js +0 -796
  721. package/bundled-test-harness/assets/file-chooser-panel-test-CKj8YTdY.js +0 -153
  722. package/bundled-test-harness/assets/file-chooser-test-Bs8jFXqa.js +0 -504
  723. package/bundled-test-harness/assets/file-def-format-templates-test-CxrRoWoD.js +0 -380
  724. package/bundled-test-harness/assets/file-def-live-reload-test-X_8YEkve.js +0 -124
  725. package/bundled-test-harness/assets/file-def-menu-items-test-Dx879o_o.js +0 -138
  726. package/bundled-test-harness/assets/file-def-navigation-test-MMI_EEO1.js +0 -109
  727. package/bundled-test-harness/assets/file-def-serialization-test-B5lguBQD.js +0 -89
  728. package/bundled-test-harness/assets/file-def-test-Di9QWcrj.js +0 -216
  729. package/bundled-test-harness/assets/file-preview-live-reload-test-aqx93A7c.js +0 -310
  730. package/bundled-test-harness/assets/file-resource-primitives-test-a5abpcSB.js +0 -255
  731. package/bundled-test-harness/assets/file-tree-from-index-test-CnruGxJ8.js +0 -96
  732. package/bundled-test-harness/assets/file-tree-test-BCyWDdSE.js +0 -851
  733. package/bundled-test-harness/assets/file-view-model-test-BfpLa01Y.js +0 -346
  734. package/bundled-test-harness/assets/filedef-export-shape-test-CQ9XbrzS.js +0 -61
  735. package/bundled-test-harness/assets/film-CL1zj_bJ.js +0 -2
  736. package/bundled-test-harness/assets/film-Dq_quZ31.js +0 -13
  737. package/bundled-test-harness/assets/film-xbkQa060.js +0 -4074
  738. package/bundled-test-harness/assets/flac-audio-def-test-BmVp9dMx.js +0 -143
  739. package/bundled-test-harness/assets/focus-Dm4wkM72.js +0 -306
  740. package/bundled-test-harness/assets/font-metadata-extractor-test-OWEh9_MS.js +0 -415
  741. package/bundled-test-harness/assets/formatted-aibot-message-test-BpHsWpuV.js +0 -109
  742. package/bundled-test-harness/assets/formatted-user-message-test-DZW5TAr0.js +0 -43
  743. package/bundled-test-harness/assets/freestyle-test-D_uaPU_3.js +0 -17
  744. package/bundled-test-harness/assets/full-reindex-realm-test-C6vHL5kC.js +0 -101
  745. package/bundled-test-harness/assets/garbage-collection-test-D-Ao4t2n.js +0 -403
  746. package/bundled-test-harness/assets/general-test-PSGI8W0z.js +0 -923
  747. package/bundled-test-harness/assets/generate-example-cards-one-shot-test-J-m-0E6W.js +0 -65
  748. package/bundled-test-harness/assets/generic-file-def-preview-test-BAsOhTYU.js +0 -71
  749. package/bundled-test-harness/assets/get-available-realm-identifiers-test-D5PBOr97.js +0 -47
  750. package/bundled-test-harness/assets/get-catalog-realm-identifiers-test-NM9UURHE.js +0 -47
  751. package/bundled-test-harness/assets/get-default-writable-realm-test-BxXc9a3J.js +0 -54
  752. package/bundled-test-harness/assets/get-published-realms-test-C8TJEc4-.js +0 -71
  753. package/bundled-test-harness/assets/get-realm-of-resource-identifier-test-Dt8CB6lS.js +0 -54
  754. package/bundled-test-harness/assets/get-relationship-membership-state-test-9_8x3myJ.js +0 -1308
  755. package/bundled-test-harness/assets/get-user-system-card-test-k0UO-uba.js +0 -67
  756. package/bundled-test-harness/assets/gif-image-def-test-BWrqPGDX.js +0 -188
  757. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-BgG8QI9E.js +0 -160
  758. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-BKOvNyCN.js +0 -74
  759. package/bundled-test-harness/assets/gts-file-def-test-BCRHwDeZ.js +0 -100
  760. package/bundled-test-harness/assets/head-format-preview-test-DnfUhniI.js +0 -158
  761. package/bundled-test-harness/assets/helpers-DklkegO_.js +0 -5
  762. package/bundled-test-harness/assets/host-mode-service-vOfN0smp.js +0 -232
  763. package/bundled-test-harness/assets/host-mode-test-CCCJFz6_.js +0 -831
  764. package/bundled-test-harness/assets/host-submode-test-CtCfbuPA.js +0 -1342
  765. package/bundled-test-harness/assets/html-component-test-CWyhb5ZX.js +0 -65
  766. package/bundled-test-harness/assets/html-def-test-Cb8C2lUx.js +0 -160
  767. package/bundled-test-harness/assets/html-meta-extractor-test-BHT9Rtir.js +0 -60
  768. package/bundled-test-harness/assets/hydratable-card-test-DpgpdesD.js +0 -426
  769. package/bundled-test-harness/assets/icon-button-ABCGVF3C.js +0 -67
  770. package/bundled-test-harness/assets/image-metadata-extractor-test-ClhPTouq.js +0 -1109
  771. package/bundled-test-harness/assets/index-changes-test-CgnVr3LH.js +0 -367
  772. package/bundled-test-harness/assets/index-query-engine-test-CQTwju5_.js +0 -2593
  773. package/bundled-test-harness/assets/index-writer-test-IoVOoZT2.js +0 -3040
  774. package/bundled-test-harness/assets/inspector-test-BN2Ieb77.js +0 -2058
  775. package/bundled-test-harness/assets/instance-filter-matcher-test-Bq-_Sy89.js +0 -788
  776. package/bundled-test-harness/assets/instantiate-card-test-DEeDTzFV.js +0 -164
  777. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DP6kOyJS.js +0 -475
  778. package/bundled-test-harness/assets/interact-submode-setup-B0_cHqH-.js +0 -566
  779. package/bundled-test-harness/assets/invalidate-realm-identifiers-test-9uUD91Pw.js +0 -99
  780. package/bundled-test-harness/assets/invite-user-to-room-test-CcDA45Ac.js +0 -142
  781. package/bundled-test-harness/assets/invoke-card-operation-test-DmUtgueM.js +0 -333
  782. package/bundled-test-harness/assets/isolated-render-test-B2eXNHu6.js +0 -51
  783. package/bundled-test-harness/assets/job-scoped-doc-cache-test-DF9D7cOc.js +0 -181
  784. package/bundled-test-harness/assets/job-scoped-instance-residency-test-CSS8xUU5.js +0 -103
  785. package/bundled-test-harness/assets/jpg-image-def-test-voECMTht.js +0 -697
  786. package/bundled-test-harness/assets/json-file-def-test-8Y4KLjUC.js +0 -95
  787. package/bundled-test-harness/assets/key-notices-badge-test-d1mYqx0e.js +0 -155
  788. package/bundled-test-harness/assets/key-readiness-test-BtCg7PCk.js +0 -190
  789. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-CyCMbJnN.js +0 -398
  790. package/bundled-test-harness/assets/linksto-error-sentinel-test-BDW572-v.js +0 -238
  791. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test-B4wM97hD.js +0 -354
  792. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-BhJmtJ0_.js +0 -303
  793. package/bundled-test-harness/assets/linksto-sentinel-reload-test-BpBQ5V_i.js +0 -197
  794. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test-pkBBl4e9.js +0 -260
  795. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-Bb6wjUdD.js +0 -196
  796. package/bundled-test-harness/assets/lint-and-fix-test-CcMLn-co.js +0 -51
  797. package/bundled-test-harness/assets/live-test-AyBnq7BX.js +0 -2
  798. package/bundled-test-harness/assets/live-test-CgnAcIDw.js +0 -100
  799. package/bundled-test-harness/assets/load-default-skills-test-BIOwtx0Y.js +0 -74
  800. package/bundled-test-harness/assets/loader-parallel-prefetch-test-D5_oRSER.js +0 -257
  801. package/bundled-test-harness/assets/loader-test-DSc_jR1c.js +0 -482
  802. package/bundled-test-harness/assets/loading-test-8pldx7S-.js +0 -63
  803. package/bundled-test-harness/assets/m4a-audio-def-test-BDI5apzM.js +0 -190
  804. package/bundled-test-harness/assets/main-5kHyCkdm.js +0 -5
  805. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-Wud0s7WZ.js +0 -470
  806. package/bundled-test-harness/assets/markdown-embed-chooser-test-DVzzS-0C.js +0 -334
  807. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-B5W_iqsi.js +0 -447
  808. package/bundled-test-harness/assets/markdown-embed-preview-test-CZF_s0fB.js +0 -368
  809. package/bundled-test-harness/assets/markdown-fallback-test-fT6BS4W7.js +0 -316
  810. package/bundled-test-harness/assets/markdown-file-def-test-B1aTzazR.js +0 -380
  811. package/bundled-test-harness/assets/markdown-helpers-test-gNKZf7Mw.js +0 -188
  812. package/bundled-test-harness/assets/markdown-highlighting-test-Du5_CQmD.js +0 -244
  813. package/bundled-test-harness/assets/markdown-preview-h-_aJhRc.js +0 -72
  814. package/bundled-test-harness/assets/markdown-preview-test-DJvoVsXw.js +0 -238
  815. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-VwJi3Paj.js +0 -146
  816. package/bundled-test-harness/assets/markdown-skill-search-test-ysCdf0xM.js +0 -80
  817. package/bundled-test-harness/assets/matrix-service-account-switch-sessions-test-K2JuMy36.js +0 -63
  818. package/bundled-test-harness/assets/matrix-service-boot-assembly-test-CkdL_-os.js +0 -300
  819. package/bundled-test-harness/assets/matrix-service-personal-realm-test-Dy1DultK.js +0 -125
  820. package/bundled-test-harness/assets/matrix-service-realm-servers-test-DHDDKuEg.js +0 -55
  821. package/bundled-test-harness/assets/matrix-service-realms-list-updated-test-DcTbZpMl.js +0 -132
  822. package/bundled-test-harness/assets/matrix-service-relogin-test-D3NQktoa.js +0 -59
  823. package/bundled-test-harness/assets/matrix-service-sliding-sync-test-6CAflWOA.js +0 -35
  824. package/bundled-test-harness/assets/menu-kUSaJIPq.js +0 -3562
  825. package/bundled-test-harness/assets/message-service-subscription-test-DaQdgDWi.js +0 -110
  826. package/bundled-test-harness/assets/message-service-test-BsGEgM_m.js +0 -144
  827. package/bundled-test-harness/assets/message-tool-test-BB_4kw1V.js +0 -33
  828. package/bundled-test-harness/assets/midi-audio-def-test-BbbkFjqf.js +0 -182
  829. package/bundled-test-harness/assets/migrate-skill-test-X9xImDuq.js +0 -161
  830. package/bundled-test-harness/assets/mini-AwF31elJ.js +0 -1404
  831. package/bundled-test-harness/assets/mini-card-chooser-test-BZtrEiWu.js +0 -272
  832. package/bundled-test-harness/assets/mini-file-chooser-test-MIHW3kCI.js +0 -201
  833. package/bundled-test-harness/assets/mock-matrix-Dd8k0DNa.js +0 -15107
  834. package/bundled-test-harness/assets/mock-matrix-DhPN_34j.js +0 -2
  835. package/bundled-test-harness/assets/modal-LTh3_oHK.js +0 -322
  836. package/bundled-test-harness/assets/model-cost-tier-test-h1IkU9mp.js +0 -174
  837. package/bundled-test-harness/assets/model-file-extract-test-ntSo0wZF.js +0 -206
  838. package/bundled-test-harness/assets/module-transpile-cache-test-CDeRaaeP.js +0 -67
  839. package/bundled-test-harness/assets/monaco-test-C0Fa744D.js +0 -100
  840. package/bundled-test-harness/assets/mp3-audio-def-test-B4j4qR9H.js +0 -133
  841. package/bundled-test-harness/assets/multiple-stacks-test-BhA25ywL.js +0 -208
  842. package/bundled-test-harness/assets/nested-query-field-render-test-S9Y8YNKB.js +0 -249
  843. package/bundled-test-harness/assets/no-stacks-test-B7VciWyg.js +0 -48
  844. package/bundled-test-harness/assets/number-field-test-CS74lDPN.js +0 -184
  845. package/bundled-test-harness/assets/office-file-def-test-2cKc1pmd.js +0 -263
  846. package/bundled-test-harness/assets/office-metadata-extractor-test-DC8Fo-OW.js +0 -218
  847. package/bundled-test-harness/assets/office-poster-capture-test-Ba0_5UrT.js +0 -203
  848. package/bundled-test-harness/assets/ogg-audio-def-test-CIPQ1d4w.js +0 -196
  849. package/bundled-test-harness/assets/open-create-listing-modal-test-bmQkY5Zl.js +0 -131
  850. package/bundled-test-harness/assets/open-image-in-new-tab-test-DBD7_vMH.js +0 -52
  851. package/bundled-test-harness/assets/open-secure-window-test-BgeuYAqz.js +0 -253
  852. package/bundled-test-harness/assets/open-workspace-test-DRHGljV0.js +0 -46
  853. package/bundled-test-harness/assets/operation-lowering-test-CH1c0pSH.js +0 -2957
  854. package/bundled-test-harness/assets/operations-invocation-test-B1YkCLrv.js +0 -523
  855. package/bundled-test-harness/assets/operations-optimistic-test-DAbtOwsC.js +0 -203
  856. package/bundled-test-harness/assets/operations-query-test-9p1ZIDe-.js +0 -459
  857. package/bundled-test-harness/assets/operations-store-reconciliation-test-D0EQh3w2.js +0 -406
  858. package/bundled-test-harness/assets/operations-test-BQhlrfe3.js +0 -2518
  859. package/bundled-test-harness/assets/operator-mode-acceptance-test-DtHnonEb.js +0 -1195
  860. package/bundled-test-harness/assets/operator-mode-card-chooser-test-DQUxZxaq.js +0 -1036
  861. package/bundled-test-harness/assets/operator-mode-links-test-BJ26HllS.js +0 -797
  862. package/bundled-test-harness/assets/operator-mode-test-DIPDI0qt.js +0 -696
  863. package/bundled-test-harness/assets/operator-mode-ui-test-CfA-fAh4.js +0 -1045
  864. package/bundled-test-harness/assets/overlay-DecPh3nt.js +0 -123
  865. package/bundled-test-harness/assets/overlay-menu-items-test-C6XqjLtu.js +0 -331
  866. package/bundled-test-harness/assets/overlays-Ctp8ePzZ.js +0 -75
  867. package/bundled-test-harness/assets/overlays-CzWpSg5T.js +0 -2
  868. package/bundled-test-harness/assets/overlays-detached-element-test-DvL_8Bb5.js +0 -56
  869. package/bundled-test-harness/assets/panel-CImumikB.js +0 -15124
  870. package/bundled-test-harness/assets/past-sessions-test-N6riGN_I.js +0 -321
  871. package/bundled-test-harness/assets/patch-fields-test-D30_-KwQ.js +0 -1014
  872. package/bundled-test-harness/assets/patch-instance-test-C5rGscZq.js +0 -348
  873. package/bundled-test-harness/assets/pdf-file-def-test-DtiqGRvZ.js +0 -111
  874. package/bundled-test-harness/assets/pdf-metadata-extractor-test-FU02KmdV.js +0 -130
  875. package/bundled-test-harness/assets/permission-checking-realm-test-DqdNJDwU.js +0 -306
  876. package/bundled-test-harness/assets/persist-module-inspector-view-test-BHOAgPVy.js +0 -60
  877. package/bundled-test-harness/assets/persist-scroll-position-test-qtmS518r.js +0 -254
  878. package/bundled-test-harness/assets/phone-number-field-test-DhdaM7uL.js +0 -73
  879. package/bundled-test-harness/assets/pill-menu-test-C9Mrrepl.js +0 -60
  880. package/bundled-test-harness/assets/plate-9n-sXyCw.js +0 -41
  881. package/bundled-test-harness/assets/plate-BnZcAk-_.js +0 -2
  882. package/bundled-test-harness/assets/player-Cu5b4LEJ.js +0 -82
  883. package/bundled-test-harness/assets/player-unk2mkxV.js +0 -2
  884. package/bundled-test-harness/assets/playground-BwA8wFGK.js +0 -58
  885. package/bundled-test-harness/assets/plural-field-components-test-CFNQKETg.js +0 -198
  886. package/bundled-test-harness/assets/png-image-def-test-DG5Vhlqb.js +0 -266
  887. package/bundled-test-harness/assets/policy-audit-confirmation-test-yfKU47LR.js +0 -155
  888. package/bundled-test-harness/assets/policy-scoped-search-test-BjQRDYqR.js +0 -339
  889. package/bundled-test-harness/assets/prerender-file-extract-test-CEU4SaAZ.js +0 -346
  890. package/bundled-test-harness/assets/prerender-html-test-CGB3ClCS.js +0 -670
  891. package/bundled-test-harness/assets/prerender-meta-test-xqc4fW_0.js +0 -614
  892. package/bundled-test-harness/assets/prerender-module-test-CI1TmZw-.js +0 -409
  893. package/bundled-test-harness/assets/prerender-persistence-block-test-Da0dJO_N.js +0 -124
  894. package/bundled-test-harness/assets/prerender-pre-model-error-test-BVLyhk8R.js +0 -61
  895. package/bundled-test-harness/assets/prerender-serialize-cycle-test-glJFfxHU.js +0 -134
  896. package/bundled-test-harness/assets/prerendered-html-read-test-Mp4L0VHQ.js +0 -191
  897. package/bundled-test-harness/assets/pretui-components-test-BBpA9UnA.js +0 -991
  898. package/bundled-test-harness/assets/pretui-components-test-BqFq7rw_.css +0 -730
  899. package/bundled-test-harness/assets/preview-format-test-C55Bwcur.js +0 -103
  900. package/bundled-test-harness/assets/preview-test-CTAhRGU8.js +0 -474
  901. package/bundled-test-harness/assets/process-card-test-UjqpuxB7.js +0 -94
  902. package/bundled-test-harness/assets/profile-settings-modal-C8bCgTMK.js +0 -989
  903. package/bundled-test-harness/assets/publish-realm-ixUB4FPK.js +0 -82
  904. package/bundled-test-harness/assets/publish-realm-test-CrrsdL4W.js +0 -210
  905. package/bundled-test-harness/assets/query-field-barrier-test-DjivFE93.js +0 -113
  906. package/bundled-test-harness/assets/query-field-error-sentinel-test-0HwnV4Mw.js +0 -201
  907. package/bundled-test-harness/assets/query-field-membership-status-test-C8yTTBkc.js +0 -323
  908. package/bundled-test-harness/assets/query-field-page-optin-test-D4l_GcII.js +0 -126
  909. package/bundled-test-harness/assets/query-field-schema-test-DDbcNNm5.js +0 -231
  910. package/bundled-test-harness/assets/query-field-search-throttle-test-CXp50Ax0.js +0 -154
  911. package/bundled-test-harness/assets/query-field-stale-prerender-test-DErzt-Cv.js +0 -152
  912. package/bundled-test-harness/assets/query-fields-test-Dz67fdSl.js +0 -535
  913. package/bundled-test-harness/assets/quick-look-test-B1ijDsh_.js +0 -139
  914. package/bundled-test-harness/assets/read-card-for-ai-assistant-test-DJxZ16H_.js +0 -91
  915. package/bundled-test-harness/assets/read-file-for-ai-assistant-test-BoRQkZ8c.js +0 -45
  916. package/bundled-test-harness/assets/read-source-test-Bl-NjchO.js +0 -67
  917. package/bundled-test-harness/assets/read-text-file-test-CP37CZoo.js +0 -124
  918. package/bundled-test-harness/assets/realm-CaK5mkT-.js +0 -2852
  919. package/bundled-test-harness/assets/realm-api-keys-BNUFWbGR.js +0 -579
  920. package/bundled-test-harness/assets/realm-api-keys-CkshxhXC.js +0 -2
  921. package/bundled-test-harness/assets/realm-api-keys-test-BP8xifjn.js +0 -109
  922. package/bundled-test-harness/assets/realm-api-keys-test-CwdK9YXp.js +0 -588
  923. package/bundled-test-harness/assets/realm-config-iKwE3Htp.js +0 -833
  924. package/bundled-test-harness/assets/realm-config-policy-standing-test-BgVEIDnB.js +0 -290
  925. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-BoJoKzmX.js +0 -274
  926. package/bundled-test-harness/assets/realm-config-settings-test-Kxw-GHye.js +0 -187
  927. package/bundled-test-harness/assets/realm-field-test-CdGOxrFb.js +0 -100
  928. package/bundled-test-harness/assets/realm-indexing-test-CHtsBV2b.js +0 -4380
  929. package/bundled-test-harness/assets/realm-policy-fitted-test--DhNZSdC.js +0 -206
  930. package/bundled-test-harness/assets/realm-policy-test-D7714iVa.js +0 -1141
  931. package/bundled-test-harness/assets/realm-querying-test-Cj1ekZ0H.js +0 -1067
  932. package/bundled-test-harness/assets/realm-server-form-agnostic-test-CZFPNJfD.js +0 -96
  933. package/bundled-test-harness/assets/realm-server-subscriber-test-C86WmBp0.js +0 -46
  934. package/bundled-test-harness/assets/realm-service-info-test-CdgcwKDR.js +0 -67
  935. package/bundled-test-harness/assets/realm-test-DPoLsvKz.js +0 -2364
  936. package/bundled-test-harness/assets/realm-token-refresh-test-Ch35Siwi.js +0 -153
  937. package/bundled-test-harness/assets/realm-url-tooltip-test-x8xWOENK.js +0 -78
  938. package/bundled-test-harness/assets/reasoning-test-BxpE8Jvf.js +0 -221
  939. package/bundled-test-harness/assets/recent-files-test-DTmEzPLq.js +0 -450
  940. package/bundled-test-harness/assets/reindex-realm-test-BQ8KULn4.js +0 -117
  941. package/bundled-test-harness/assets/relationship-loading-state-test-BJoArPWf.js +0 -290
  942. package/bundled-test-harness/assets/remix-card-test-DsTA1KoG.js +0 -58
  943. package/bundled-test-harness/assets/rendered-markdown-DvukulDO.js +0 -292
  944. package/bundled-test-harness/assets/rendered-markdown-test-DxGptXSV.js +0 -587
  945. package/bundled-test-harness/assets/resident-instance-reuse-test-ZWnVu8uj.js +0 -82
  946. package/bundled-test-harness/assets/result-tile-CPyI6Vmv.js +0 -144
  947. package/bundled-test-harness/assets/rich-markdown-field-test-CdygoXIO.js +0 -1647
  948. package/bundled-test-harness/assets/room-message-test-D3NfMqH0.js +0 -484
  949. package/bundled-test-harness/assets/run-D_Px28eF.js +0 -3956
  950. package/bundled-test-harness/assets/run-realm-code-qWCZxmJ7.js +0 -2964
  951. package/bundled-test-harness/assets/run-realm-code-test-UzyeEJq6.js +0 -3844
  952. package/bundled-test-harness/assets/sanitize-module-list-test-Babq44bP.js +0 -85
  953. package/bundled-test-harness/assets/save-card-skip-index-wait-test-BcELXlQ_.js +0 -89
  954. package/bundled-test-harness/assets/schema-editor-test-CEvruZbt.js +0 -785
  955. package/bundled-test-harness/assets/schema-generation-test-hYAMdCrn.js +0 -28
  956. package/bundled-test-harness/assets/scrolling-test-DVIsh-_1.js +0 -412
  957. package/bundled-test-harness/assets/search-adorn-test-CkVhqFd0.js +0 -136
  958. package/bundled-test-harness/assets/search-and-choose-test-DUhOB3FV.js +0 -154
  959. package/bundled-test-harness/assets/search-correlation-id-test-Drn4r26N.js +0 -139
  960. package/bundled-test-harness/assets/search-entries-result-test-DTCRJ_wc.js +0 -234
  961. package/bundled-test-harness/assets/search-entries-test-CE0B47pw.js +0 -1486
  962. package/bundled-test-harness/assets/search-entries-tool-test-C4aG0ckM.js +0 -504
  963. package/bundled-test-harness/assets/search-google-images-test-LyhcB2f3.js +0 -166
  964. package/bundled-test-harness/assets/search-results-D4pSne0x.js +0 -266
  965. package/bundled-test-harness/assets/search-results-test-CRZHhqhn.js +0 -578
  966. package/bundled-test-harness/assets/search-selection-menu-test-B7Y3E_nj.js +0 -108
  967. package/bundled-test-harness/assets/search-sheet-files-test-C2y534g8.js +0 -126
  968. package/bundled-test-harness/assets/search-sheet-persistence-test-DePC59Bk.js +0 -131
  969. package/bundled-test-harness/assets/search-test-Dy8NxFkU.js +0 -2249
  970. package/bundled-test-harness/assets/search-tool-test-lctDaMH3.js +0 -156
  971. package/bundled-test-harness/assets/searchable-option-test-CE64M8oM.js +0 -322
  972. package/bundled-test-harness/assets/searchable-search-doc-test-C6u3mVvT.js +0 -1271
  973. package/bundled-test-harness/assets/section-rail-B_UQX00B.js +0 -113
  974. package/bundled-test-harness/assets/section-rail-test-DIda7MIw.js +0 -256
  975. package/bundled-test-harness/assets/secure-sign-in-CqqqfQG8.js +0 -174
  976. package/bundled-test-harness/assets/secure-sign-in-test-DimbVr_W.js +0 -373
  977. package/bundled-test-harness/assets/segmented-control-iePxSdTS.js +0 -173
  978. package/bundled-test-harness/assets/select-tNs6_xwW.js +0 -175
  979. package/bundled-test-harness/assets/send-ai-assistant-message-test-2GVrMF9Z.js +0 -52
  980. package/bundled-test-harness/assets/send-bot-trigger-event-test-B_3dKfGN.js +0 -56
  981. package/bundled-test-harness/assets/send-request-via-proxy-test-_clNWyYc.js +0 -380
  982. package/bundled-test-harness/assets/sending-test-DCPFXUVg.js +0 -659
  983. package/bundled-test-harness/assets/serialization-rri-form-audit-test-BI0zCs8Y.js +0 -136
  984. package/bundled-test-harness/assets/serialization-test-bjdtVlZL.js +0 -8758
  985. package/bundled-test-harness/assets/set-user-system-card-test-BUv1vL08.js +0 -59
  986. package/bundled-test-harness/assets/setup-BW1mmC7C.js +0 -772
  987. package/bundled-test-harness/assets/setup-DsIcFT-T.js +0 -2
  988. package/bundled-test-harness/assets/shared-link-target-reuse-test-9NeJEjkb.js +0 -207
  989. package/bundled-test-harness/assets/show-card-test-mfyLwusD.js +0 -365
  990. package/bundled-test-harness/assets/signed-capture-link-test-BOtKNCAM.js +0 -132
  991. package/bundled-test-harness/assets/single-stack-test-B4MGjaLk.js +0 -652
  992. package/bundled-test-harness/assets/skills-test-BuP-Yzk1.js +0 -648
  993. package/bundled-test-harness/assets/skip-boot-index-guard-test-Cmrx2-K7.js +0 -46
  994. package/bundled-test-harness/assets/spec-test-BhZDdhVQ.js +0 -1077
  995. package/bundled-test-harness/assets/spinner-CpIBUG9m.js +0 -49
  996. package/bundled-test-harness/assets/src-DGHttmW-.js +0 -216
  997. package/bundled-test-harness/assets/src-DaNDSbp7.js +0 -5
  998. package/bundled-test-harness/assets/stick-to-bottom-resize-test-Dpy3OVum.js +0 -56
  999. package/bundled-test-harness/assets/store-add-test-_IYS8o74.js +0 -50
  1000. package/bundled-test-harness/assets/store-module-rebuild-test-B5VMaICy.js +0 -454
  1001. package/bundled-test-harness/assets/store-search-test-C2VZabrH.js +0 -175
  1002. package/bundled-test-harness/assets/store-test-D6PObxoD.js +0 -3672
  1003. package/bundled-test-harness/assets/structured-theme-test-BHjVeMf-.js +0 -377
  1004. package/bundled-test-harness/assets/summarize-session-test-BFtTuhe0.js +0 -172
  1005. package/bundled-test-harness/assets/svg-image-def-test-BL6lkWUX.js +0 -167
  1006. package/bundled-test-harness/assets/switch-submode-test-6Uv3bZMl.js +0 -168
  1007. package/bundled-test-harness/assets/sync-openrouter-models-test-Dp9E05tL.js +0 -97
  1008. package/bundled-test-harness/assets/test-support-DYm8XZ0E.js +0 -3
  1009. package/bundled-test-harness/assets/test-support-DfnhiIMV.js +0 -99
  1010. package/bundled-test-harness/assets/tests-CZk0Iag2.js +0 -3596
  1011. package/bundled-test-harness/assets/text-file-def-test-CHdC0yIU.js +0 -94
  1012. package/bundled-test-harness/assets/text-input-validator-test-B9ZR8XPU.js +0 -156
  1013. package/bundled-test-harness/assets/text-suggestion-test-CGLspKFQ.js +0 -340
  1014. package/bundled-test-harness/assets/theme-card-test-CXZvSEvG.js +0 -621
  1015. package/bundled-test-harness/assets/theme-dashboard-nav-test-CkEE0ILk.js +0 -196
  1016. package/bundled-test-harness/assets/theme-scheme-island-test-URXTjipF.js +0 -264
  1017. package/bundled-test-harness/assets/titles-C6enAdIv.js +0 -2
  1018. package/bundled-test-harness/assets/titles-Dft1HoUT.js +0 -52
  1019. package/bundled-test-harness/assets/to-device-streaming-test-D33ZOc9o.js +0 -163
  1020. package/bundled-test-harness/assets/token-usage-test-BHQlU4J4.js +0 -160
  1021. package/bundled-test-harness/assets/tools-CrudqfS3.js +0 -774
  1022. package/bundled-test-harness/assets/tools-calling-test-jo7IREau.js +0 -200
  1023. package/bundled-test-harness/assets/tools-test-D1wMfUa0.js +0 -1624
  1024. package/bundled-test-harness/assets/tools-test-Dn1LYsXp.js +0 -3204
  1025. package/bundled-test-harness/assets/tooltip-8Wyz4IIn.css +0 -68
  1026. package/bundled-test-harness/assets/tooltip-CqwLzRz5.js +0 -134
  1027. package/bundled-test-harness/assets/transform-cards-test-BPhwPFtp.js +0 -341
  1028. package/bundled-test-harness/assets/ts-file-def-preview-test-Bq3zTgw8.js +0 -95
  1029. package/bundled-test-harness/assets/ts-file-def-test-GLswMl7O.js +0 -92
  1030. package/bundled-test-harness/assets/ttf-font-def-test-DQulvUWs.js +0 -206
  1031. package/bundled-test-harness/assets/turn-settling-test-BspmOUQP.js +0 -160
  1032. package/bundled-test-harness/assets/turn-summary-9A8nvC0-.js +0 -1039
  1033. package/bundled-test-harness/assets/unpublish-realm-test-SkYPEhDz.js +0 -102
  1034. package/bundled-test-harness/assets/update-room-skills-test-cTxb-WU6.js +0 -240
  1035. package/bundled-test-harness/assets/use-ai-assistant-test-uaqW1T_A.js +0 -384
  1036. package/bundled-test-harness/assets/user-message-BudkIP-3.js +0 -262
  1037. package/bundled-test-harness/assets/validate-realm-test-DxrGgH9n.js +0 -67
  1038. package/bundled-test-harness/assets/video-metadata-extractor-test-B2pe-Iqa.js +0 -520
  1039. package/bundled-test-harness/assets/view-visually-test-PNon6fUo.js +0 -335
  1040. package/bundled-test-harness/assets/virtual-network-reset-test-uYJLaQHf.js +0 -96
  1041. package/bundled-test-harness/assets/wav-audio-def-test-F4OrFFR4.js +0 -160
  1042. package/bundled-test-harness/assets/webp-image-def-test-B0a_-Vya.js +0 -226
  1043. package/bundled-test-harness/assets/workspace-Cyftysy9.js +0 -440
  1044. package/bundled-test-harness/assets/workspace-a11y-test-sKiPDcbl.js +0 -197
  1045. package/bundled-test-harness/assets/workspace-actions-BuawjFmZ.js +0 -561
  1046. package/bundled-test-harness/assets/workspace-behavior-test-CKa-pb3T.js +0 -338
  1047. package/bundled-test-harness/assets/workspace-delete-multiple-test-Dt2weG5R.js +0 -212
  1048. package/bundled-test-harness/assets/workspace-delete-summary-test-CkqgFqZ8.js +0 -63
  1049. package/bundled-test-harness/assets/workspace-hosting-test-Ci7EEtHP.js +0 -138
  1050. package/bundled-test-harness/assets/workspace-indexing-test-BPVxxY6W.js +0 -71
  1051. package/bundled-test-harness/assets/workspace-test-CWr7vFbg.js +0 -385
  1052. package/bundled-test-harness/assets/workspace-test-INNpQovc.js +0 -51
  1053. package/bundled-test-harness/assets/workspace-timestamp-labels-test-CigQb5wr.js +0 -68
  1054. package/bundled-test-harness/assets/workspace-unit-test-BwVKpuXT.js +0 -122
  1055. package/bundled-test-harness/assets/write-binary-file-test-BKP3gv1k.js +0 -124
  1056. package/bundled-test-harness/assets/write-text-file-test-B6ijTKTa.js +0 -191
  1057. package/bundled-test-harness/assets/zip-archive-test-C-PBzkTn.js +0 -285
  1058. package/bundled-test-harness/assets/zip-file-def-test-FyCzJT-9.js +0 -164
@@ -0,0 +1,2593 @@
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, Fa as maybeHandleScopedCSSRequest, Go as identifyCard, Ka as VirtualNetwork, Ls as wrapper_default, Os as FilterRefersToNonexistentTypeError, Ys as Loader, Za as fetcher, ba as isFilterRefersToNonsearchableFieldError, l as internalKeyFor, un as format, va as IndexQueryEngine, wa as jobStagingId, ws as getFieldDefinitions } from "./runtime-common-BTaLJEw-.js";
4
+ import { T as rri } from "./paths-C9-NYXnM.js";
5
+ import { O as baseRealm, it as baseRealmRRI } from "./constants-Icc0nFW-.js";
6
+ import { t as config } from "./environment-DIUJgBKt.js";
7
+ import { t as shimExternals } from "./externals-k-2ZBepK.js";
8
+ import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
9
+ import { Mt as tagTestModuleExports, at as setupIndex, b as getDbAdapter, it as serializeCard, rt as getTypes } from "./mock-matrix-FjsXmU7-.js";
10
+ import { t as p } from "./helpers-DhyRg69S.js";
11
+ //#region tests/unit/index-query-engine-test.ts
12
+ var import_qunit = /* @__PURE__ */ __toESM(require_qunit());
13
+ var cardApi;
14
+ var string;
15
+ var date;
16
+ var number;
17
+ var boolean;
18
+ var codeRef;
19
+ var { resolvedBaseRealmURL } = config;
20
+ (0, import_qunit.module)("Unit | query", function(hooks) {
21
+ let dbAdapter;
22
+ let indexQueryEngine;
23
+ let loader;
24
+ let testCards = {};
25
+ let virtualNetwork;
26
+ hooks.before(async function() {
27
+ dbAdapter = await getDbAdapter();
28
+ });
29
+ hooks.beforeEach(async function() {
30
+ virtualNetwork = new VirtualNetwork();
31
+ virtualNetwork.addURLMapping(new URL(baseRealm.url), new URL(resolvedBaseRealmURL));
32
+ virtualNetwork.addRealmMapping("@cardstack/base/", resolvedBaseRealmURL);
33
+ virtualNetwork.addImportMap("@cardstack/boxel-icons/", (rest) => {
34
+ return `${config.iconsURL}/@cardstack/boxel-icons/v1/icons/${rest}.js`;
35
+ });
36
+ shimExternals(virtualNetwork);
37
+ loader = new Loader(fetcher(virtualNetwork.fetch, [async (req, next) => {
38
+ return await maybeHandleScopedCSSRequest(req) || next(req);
39
+ }]), virtualNetwork.resolveImport, { virtualNetwork });
40
+ cardApi = await loader.import("@cardstack/base/card-api");
41
+ string = await loader.import("@cardstack/base/string");
42
+ date = await loader.import("@cardstack/base/date");
43
+ number = await loader.import("@cardstack/base/number");
44
+ boolean = await loader.import("@cardstack/base/boolean");
45
+ codeRef = await loader.import("@cardstack/base/code-ref");
46
+ let { field, contains, containsMany, linksToMany, linksTo, CardDef, FieldDef, setCardAsSavedForTest } = cardApi;
47
+ let { default: StringField } = string;
48
+ let { default: CodeRefField } = codeRef;
49
+ let { default: DateField } = date;
50
+ let { default: NumberField } = number;
51
+ let { default: BooleanField } = boolean;
52
+ class Address extends FieldDef {
53
+ static {
54
+ decorateFieldV2(this.prototype, "street", [field], function() {
55
+ return contains(StringField);
56
+ });
57
+ }
58
+ #street = (initializeDeferredDecorator(this, "street"), void 0);
59
+ static {
60
+ decorateFieldV2(this.prototype, "city", [field], function() {
61
+ return contains(StringField);
62
+ });
63
+ }
64
+ #city = (initializeDeferredDecorator(this, "city"), void 0);
65
+ static {
66
+ decorateFieldV2(this.prototype, "number", [field], function() {
67
+ return contains(NumberField);
68
+ });
69
+ }
70
+ #number = (initializeDeferredDecorator(this, "number"), void 0);
71
+ }
72
+ class Person extends CardDef {
73
+ static {
74
+ decorateFieldV2(this.prototype, "name", [field], function() {
75
+ return contains(StringField);
76
+ });
77
+ }
78
+ #name = (initializeDeferredDecorator(this, "name"), void 0);
79
+ static {
80
+ decorateFieldV2(this.prototype, "nickNames", [field], function() {
81
+ return containsMany(StringField);
82
+ });
83
+ }
84
+ #nickNames = (initializeDeferredDecorator(this, "nickNames"), void 0);
85
+ static {
86
+ decorateFieldV2(this.prototype, "address", [field], function() {
87
+ return contains(Address);
88
+ });
89
+ }
90
+ #address = (initializeDeferredDecorator(this, "address"), void 0);
91
+ static {
92
+ decorateFieldV2(this.prototype, "bestFriend", [field], function() {
93
+ return linksTo(() => Person, { searchable: "friends" });
94
+ });
95
+ }
96
+ #bestFriend = (initializeDeferredDecorator(this, "bestFriend"), void 0);
97
+ static {
98
+ decorateFieldV2(this.prototype, "friends", [field], function() {
99
+ return linksToMany(() => Person, { searchable: "bestFriend" });
100
+ });
101
+ }
102
+ #friends = (initializeDeferredDecorator(this, "friends"), void 0);
103
+ static {
104
+ decorateFieldV2(this.prototype, "age", [field], function() {
105
+ return contains(NumberField);
106
+ });
107
+ }
108
+ #age = (initializeDeferredDecorator(this, "age"), void 0);
109
+ static {
110
+ decorateFieldV2(this.prototype, "isHairy", [field], function() {
111
+ return contains(BooleanField);
112
+ });
113
+ }
114
+ #isHairy = (initializeDeferredDecorator(this, "isHairy"), void 0);
115
+ static {
116
+ decorateFieldV2(this.prototype, "lotteryNumbers", [field], function() {
117
+ return containsMany(NumberField);
118
+ });
119
+ }
120
+ #lotteryNumbers = (initializeDeferredDecorator(this, "lotteryNumbers"), void 0);
121
+ }
122
+ class FancyPerson extends Person {
123
+ static {
124
+ decorateFieldV2(this.prototype, "favoriteColor", [field], function() {
125
+ return contains(StringField);
126
+ });
127
+ }
128
+ #favoriteColor = (initializeDeferredDecorator(this, "favoriteColor"), void 0);
129
+ }
130
+ class Cat extends CardDef {
131
+ static {
132
+ decorateFieldV2(this.prototype, "name", [field], function() {
133
+ return contains(StringField);
134
+ });
135
+ }
136
+ #name = (initializeDeferredDecorator(this, "name"), void 0);
137
+ }
138
+ class SimpleSpec extends CardDef {
139
+ static {
140
+ decorateFieldV2(this.prototype, "cardTitle", [field], function() {
141
+ return contains(StringField);
142
+ });
143
+ }
144
+ #cardTitle = (initializeDeferredDecorator(this, "cardTitle"), void 0);
145
+ static {
146
+ decorateFieldV2(this.prototype, "ref", [field], function() {
147
+ return contains(CodeRefField);
148
+ });
149
+ }
150
+ #ref = (initializeDeferredDecorator(this, "ref"), void 0);
151
+ }
152
+ class Event extends CardDef {
153
+ static {
154
+ decorateFieldV2(this.prototype, "cardTitle", [field], function() {
155
+ return contains(StringField);
156
+ });
157
+ }
158
+ #cardTitle = (initializeDeferredDecorator(this, "cardTitle"), void 0);
159
+ static {
160
+ decorateFieldV2(this.prototype, "venue", [field], function() {
161
+ return contains(StringField);
162
+ });
163
+ }
164
+ #venue = (initializeDeferredDecorator(this, "venue"), void 0);
165
+ static {
166
+ decorateFieldV2(this.prototype, "date", [field], function() {
167
+ return contains(DateField);
168
+ });
169
+ }
170
+ #date = (initializeDeferredDecorator(this, "date"), void 0);
171
+ }
172
+ class Org extends CardDef {
173
+ static {
174
+ decorateFieldV2(this.prototype, "name", [field], function() {
175
+ return contains(StringField);
176
+ });
177
+ }
178
+ #name = (initializeDeferredDecorator(this, "name"), void 0);
179
+ static {
180
+ decorateFieldV2(this.prototype, "headquarters", [field], function() {
181
+ return linksTo(() => Person, { searchable: true });
182
+ });
183
+ }
184
+ #headquarters = (initializeDeferredDecorator(this, "headquarters"), void 0);
185
+ static {
186
+ decorateFieldV2(this.prototype, "ceo", [field], function() {
187
+ return linksTo(() => Person);
188
+ });
189
+ }
190
+ #ceo = (initializeDeferredDecorator(this, "ceo"), void 0);
191
+ static {
192
+ decorateFieldV2(this.prototype, "staff", [field], function() {
193
+ return linksToMany(() => Person);
194
+ });
195
+ }
196
+ #staff = (initializeDeferredDecorator(this, "staff"), void 0);
197
+ static {
198
+ decorateFieldV2(this.prototype, "matchingPeople", [field], function() {
199
+ return linksToMany(() => Person, { query: {
200
+ filter: { eq: { name: "match" } },
201
+ page: {
202
+ size: 10,
203
+ number: 0
204
+ }
205
+ } });
206
+ });
207
+ }
208
+ #matchingPeople = (initializeDeferredDecorator(this, "matchingPeople"), void 0);
209
+ }
210
+ tagTestModuleExports(`${testRealmURL}address`, { Address });
211
+ tagTestModuleExports(`${testRealmURL}person`, { Person });
212
+ tagTestModuleExports(`${testRealmURL}fancy-person`, { FancyPerson });
213
+ tagTestModuleExports(`${testRealmURL}cat`, { Cat });
214
+ tagTestModuleExports(`${testRealmURL}spec`, { SimpleSpec });
215
+ tagTestModuleExports(`${testRealmURL}event`, { Event });
216
+ tagTestModuleExports(`${testRealmURL}org`, { Org });
217
+ let stringFieldEntry = new SimpleSpec({
218
+ cardTitle: "String Field",
219
+ ref: {
220
+ module: `${baseRealmRRI}string`,
221
+ name: "default"
222
+ }
223
+ });
224
+ let numberFieldEntry = new SimpleSpec({
225
+ cardTitle: "Number Field",
226
+ ref: {
227
+ module: `${baseRealmRRI}number`,
228
+ name: "default"
229
+ }
230
+ });
231
+ let ringo = new Person({
232
+ name: "Ringo",
233
+ address: new Address({
234
+ street: "100 Treat Street",
235
+ city: "Waggington"
236
+ })
237
+ });
238
+ let vangogh = new Person({
239
+ name: "Van Gogh",
240
+ address: new Address({
241
+ street: "456 Grand Blvd",
242
+ city: "Barksville"
243
+ }),
244
+ bestFriend: ringo,
245
+ friends: [ringo]
246
+ });
247
+ testCards = {
248
+ mango: new FancyPerson({
249
+ name: "Mango",
250
+ address: new Address({
251
+ street: "123 Main Street",
252
+ city: "Barksville"
253
+ }),
254
+ bestFriend: vangogh,
255
+ friends: [vangogh, ringo]
256
+ }),
257
+ vangogh,
258
+ ringo,
259
+ paper: new Cat({ name: "Paper" }),
260
+ mangoBirthday: new Event({
261
+ cardTitle: "Mango's Birthday",
262
+ venue: "Dog Park",
263
+ date: p("2024-10-30")
264
+ }),
265
+ vangoghBirthday: new Event({
266
+ cardTitle: "Van Gogh's Birthday",
267
+ venue: "Backyard",
268
+ date: p("2024-11-19")
269
+ }),
270
+ stringFieldEntry,
271
+ numberFieldEntry
272
+ };
273
+ for (let [name, card] of Object.entries(testCards)) {
274
+ card.id = rri(`${testRealmURL}${name}`);
275
+ setCardAsSavedForTest(card);
276
+ }
277
+ let api = await loader.import("@cardstack/base/card-api");
278
+ async function buildDefinition(cardDef) {
279
+ let { fields, fieldDefs } = getFieldDefinitions(api, cardDef);
280
+ return {
281
+ codeRef: identifyCard(cardDef),
282
+ displayName: cardDef.displayName,
283
+ fields,
284
+ fieldDefs
285
+ };
286
+ }
287
+ await dbAdapter.reset();
288
+ indexQueryEngine = new IndexQueryEngine(dbAdapter, {
289
+ async lookupDefinition(codeRef) {
290
+ switch (internalKeyFor(codeRef, void 0, virtualNetwork)) {
291
+ case `${testRealmURL}address/Address`: return await buildDefinition(Address);
292
+ case `${testRealmURL}person/Person`: return await buildDefinition(Person);
293
+ case `${testRealmURL}fancy-person/FancyPerson`: return await buildDefinition(FancyPerson);
294
+ case `${testRealmURL}cat/Cat`: return await buildDefinition(Cat);
295
+ case `${testRealmURL}spec/SimpleSpec`: return await buildDefinition(SimpleSpec);
296
+ case `${testRealmURL}event/Event`: return await buildDefinition(Event);
297
+ case `${testRealmURL}org/Org`: return await buildDefinition(Org);
298
+ default: throw new FilterRefersToNonexistentTypeError(codeRef, { cause: `Definition for ${wrapper_default(codeRef)} not found` });
299
+ }
300
+ },
301
+ async lookupDefinitionEntry() {
302
+ throw new Error("lookupDefinitionEntry is not used by these tests");
303
+ },
304
+ async lookupCachedDefinition() {},
305
+ async invalidate(_realmURL) {
306
+ return [];
307
+ },
308
+ async clearRealmDefinitions(_realmURL) {},
309
+ async getCachedDefinitions() {},
310
+ async populateDefinitionCacheEntry() {},
311
+ async getCachedDefinitionsBatch() {
312
+ return {};
313
+ },
314
+ registerRealm() {},
315
+ async clearAllDefinitions() {},
316
+ forRealm() {
317
+ return this;
318
+ }
319
+ }, virtualNetwork);
320
+ });
321
+ (0, import_qunit.test)("can get all cards with empty filter", async function(assert) {
322
+ let { mango, vangogh, paper } = testCards;
323
+ await setupIndex(dbAdapter, [
324
+ mango,
325
+ vangogh,
326
+ paper
327
+ ]);
328
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {});
329
+ assert.strictEqual(meta.page.total, 3, "the total results meta is correct");
330
+ assert.deepEqual(results, [
331
+ await serializeCard(mango),
332
+ await serializeCard(paper),
333
+ await serializeCard(vangogh)
334
+ ], "results are correct");
335
+ });
336
+ (0, import_qunit.test)("deleted cards are not included in results", async function(assert) {
337
+ let { mango, vangogh, paper } = testCards;
338
+ await setupIndex(dbAdapter, [
339
+ {
340
+ card: mango,
341
+ data: { is_deleted: false }
342
+ },
343
+ {
344
+ card: vangogh,
345
+ data: { is_deleted: null }
346
+ },
347
+ {
348
+ card: paper,
349
+ data: { is_deleted: true }
350
+ }
351
+ ]);
352
+ let { meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {});
353
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
354
+ });
355
+ (0, import_qunit.test)("error docs are not included in results", async function(assert) {
356
+ let { mango, vangogh } = testCards;
357
+ await setupIndex(dbAdapter, [
358
+ {
359
+ url: `${testRealmURL}1.json`,
360
+ type: "instance",
361
+ has_error: true,
362
+ generation: 1,
363
+ realm_url: testRealmURL,
364
+ pristine_doc: void 0,
365
+ types: [],
366
+ error_doc: {
367
+ message: "test error",
368
+ status: 500,
369
+ additionalErrors: []
370
+ }
371
+ },
372
+ {
373
+ url: `${testRealmURL}mango.json`,
374
+ type: "instance",
375
+ generation: 1,
376
+ realm_url: testRealmURL,
377
+ pristine_doc: await serializeCard(mango),
378
+ types: await getTypes(mango),
379
+ error_doc: void 0
380
+ },
381
+ {
382
+ url: `${testRealmURL}vangogh.json`,
383
+ type: "instance",
384
+ generation: 1,
385
+ realm_url: testRealmURL,
386
+ pristine_doc: await serializeCard(vangogh),
387
+ types: await getTypes(vangogh),
388
+ error_doc: void 0
389
+ }
390
+ ]);
391
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {});
392
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
393
+ assert.deepEqual(getIds(results), [mango.id, vangogh.id], "results are correct");
394
+ });
395
+ (0, import_qunit.test)("can filter by type", async function(assert) {
396
+ let { mango, vangogh, paper } = testCards;
397
+ await setupIndex(dbAdapter, [
398
+ mango,
399
+ vangogh,
400
+ paper
401
+ ]);
402
+ let type = await personCardType(testCards);
403
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { type } });
404
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
405
+ assert.deepEqual(getIds(results), [mango.id, vangogh.id], "results are correct");
406
+ });
407
+ (0, import_qunit.test)("not: { type } genuinely excludes rows whose types chain contains the ref", async function(assert) {
408
+ let { paper } = testCards;
409
+ await setupIndex(dbAdapter, [
410
+ testCards.mango,
411
+ testCards.vangogh,
412
+ paper
413
+ ]);
414
+ let personType = await personCardType(testCards);
415
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { not: { type: personType } } });
416
+ assert.strictEqual(meta.page.total, 1, "only the non-Person card remains");
417
+ assert.deepEqual(getIds(results), [paper.id], "the Cat is kept; both Person-chain cards are excluded");
418
+ });
419
+ (0, import_qunit.test)("every: [{ type: A }, { type: B }] is an intersection, satisfiable within one chain", async function(assert) {
420
+ let { mango, ringo } = testCards;
421
+ await setupIndex(dbAdapter, [mango, ringo]);
422
+ let personType = await personCardType(testCards);
423
+ let fancyType = internalKeyToCodeRef([...await getTypes(mango)].shift());
424
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { every: [{ type: fancyType }, { type: personType }] } });
425
+ assert.strictEqual(meta.page.total, 1, "the intersection matches one card");
426
+ assert.deepEqual(getIds(results), [mango.id], "only the FancyPerson");
427
+ });
428
+ (0, import_qunit.test)("a type filter spelled with the base realm alias matches a canonically-keyed row", async function(assert) {
429
+ await setupIndex(dbAdapter, [{
430
+ url: `${testRealmURL}vangogh.json`,
431
+ file_alias: `${testRealmURL}vangogh`,
432
+ type: "instance",
433
+ generation: 1,
434
+ realm_url: testRealmURL,
435
+ deps: [],
436
+ types: [`${baseRealmRRI}card-api/CardDef`],
437
+ last_modified: "1",
438
+ resource_created_at: "1"
439
+ }]);
440
+ for (let [label, module] of [["prefix form", `${baseRealmRRI}card-api`], ["alias URL form", "https://cardstack.com/base/card-api"]]) {
441
+ let { meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { type: {
442
+ module,
443
+ name: "CardDef"
444
+ } } });
445
+ assert.strictEqual(meta.page.total, 1, `a filter in ${label} matches the canonically-keyed row`);
446
+ }
447
+ });
448
+ (0, import_qunit.test)("{ type: baseRef } matches every card instance (BaseDef terminates the chain)", async function(assert) {
449
+ let { mango, paper } = testCards;
450
+ await setupIndex(dbAdapter, [mango, paper]);
451
+ let baseType = internalKeyToCodeRef([...await getTypes(mango)].pop());
452
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { type: baseType } });
453
+ assert.strictEqual(meta.page.total, 2, "both cards match BaseDef");
454
+ assert.deepEqual(getIds(results), [mango.id, paper.id]);
455
+ });
456
+ (0, import_qunit.test)(`can filter using 'eq'`, async function(assert) {
457
+ let { mango, vangogh, paper } = testCards;
458
+ await setupIndex(dbAdapter, [
459
+ {
460
+ card: mango,
461
+ data: { search_doc: { name: "Mango" } }
462
+ },
463
+ {
464
+ card: vangogh,
465
+ data: { search_doc: { name: "Van Gogh" } }
466
+ },
467
+ {
468
+ card: paper,
469
+ data: { search_doc: { name: "Mango" } }
470
+ }
471
+ ]);
472
+ let type = await personCardType(testCards);
473
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
474
+ eq: { name: "Mango" },
475
+ on: type
476
+ } });
477
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
478
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
479
+ });
480
+ (0, import_qunit.test)(`can filter using 'eq' thru nested fields`, async function(assert) {
481
+ let { mango, vangogh, ringo } = testCards;
482
+ await setupIndex(dbAdapter, [
483
+ {
484
+ card: mango,
485
+ data: { search_doc: {
486
+ name: "Mango",
487
+ address: {
488
+ street: "123 Main Street",
489
+ city: "Barksville"
490
+ }
491
+ } }
492
+ },
493
+ {
494
+ card: vangogh,
495
+ data: { search_doc: {
496
+ name: "Van Gogh",
497
+ address: {
498
+ street: "456 Grand Blvd",
499
+ city: "Barksville"
500
+ }
501
+ } }
502
+ },
503
+ {
504
+ card: ringo,
505
+ data: { search_doc: {
506
+ name: "Ringo",
507
+ address: {
508
+ street: "100 Treat Street",
509
+ city: "Waggington"
510
+ }
511
+ } }
512
+ }
513
+ ]);
514
+ let type = await personCardType(testCards);
515
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
516
+ on: type,
517
+ eq: { "address.city": "Barksville" }
518
+ } });
519
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
520
+ assert.deepEqual(getIds(results), [mango.id, vangogh.id], "results are correct");
521
+ });
522
+ (0, import_qunit.test)(`can use 'eq' to match multiple fields`, async function(assert) {
523
+ let { mango, vangogh } = testCards;
524
+ await setupIndex(dbAdapter, [{
525
+ card: mango,
526
+ data: { search_doc: {
527
+ name: "Mango",
528
+ nickNames: ["Mang Mang", "Baby"]
529
+ } }
530
+ }, {
531
+ card: vangogh,
532
+ data: { search_doc: {
533
+ name: "Van Gogh",
534
+ nickNames: ["Big boy", "Farty"]
535
+ } }
536
+ }]);
537
+ let type = await personCardType(testCards);
538
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
539
+ on: type,
540
+ eq: {
541
+ name: "Van Gogh",
542
+ nickNames: "Farty"
543
+ }
544
+ } });
545
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
546
+ assert.deepEqual(getIds(results), [vangogh.id], "results are correct");
547
+ });
548
+ (0, import_qunit.test)(`can use 'eq' to find 'null' values`, async function(assert) {
549
+ let { mango, vangogh, ringo } = testCards;
550
+ await setupIndex(dbAdapter, [
551
+ {
552
+ card: mango,
553
+ data: { search_doc: { name: "Mango" } }
554
+ },
555
+ {
556
+ card: vangogh,
557
+ data: { search_doc: { name: "Van Gogh" } }
558
+ },
559
+ {
560
+ card: ringo,
561
+ data: { search_doc: { name: null } }
562
+ }
563
+ ]);
564
+ let type = await personCardType(testCards);
565
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
566
+ on: type,
567
+ eq: { name: null }
568
+ } });
569
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
570
+ assert.deepEqual(getIds(results), [ringo.id], "results are correct");
571
+ });
572
+ (0, import_qunit.test)(`can use 'eq' to match against number type`, async function(assert) {
573
+ let { mango, vangogh } = testCards;
574
+ await setupIndex(dbAdapter, [{
575
+ card: mango,
576
+ data: { search_doc: {
577
+ name: "Mango",
578
+ age: 4
579
+ } }
580
+ }, {
581
+ card: vangogh,
582
+ data: { search_doc: {
583
+ name: "Van Gogh",
584
+ age: 8
585
+ } }
586
+ }]);
587
+ let type = await personCardType(testCards);
588
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
589
+ on: type,
590
+ eq: { age: 4 }
591
+ } });
592
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
593
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
594
+ });
595
+ (0, import_qunit.test)(`can use 'eq' to match against boolean type`, async function(assert) {
596
+ let { mango, vangogh, ringo } = testCards;
597
+ await setupIndex(dbAdapter, [
598
+ {
599
+ card: mango,
600
+ data: { search_doc: {
601
+ name: "Mango",
602
+ isHairy: false
603
+ } }
604
+ },
605
+ {
606
+ card: vangogh,
607
+ data: { search_doc: {
608
+ name: "Van Gogh",
609
+ isHairy: true
610
+ } }
611
+ },
612
+ {
613
+ card: ringo,
614
+ data: { search_doc: {
615
+ name: "Van Gogh",
616
+ isHairy: null
617
+ } }
618
+ }
619
+ ]);
620
+ let type = await personCardType(testCards);
621
+ {
622
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
623
+ on: type,
624
+ eq: { isHairy: false }
625
+ } });
626
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
627
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
628
+ }
629
+ {
630
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
631
+ on: type,
632
+ eq: { isHairy: true }
633
+ } });
634
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
635
+ assert.deepEqual(getIds(results), [vangogh.id], "results are correct");
636
+ }
637
+ {
638
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
639
+ on: type,
640
+ eq: { isHairy: null }
641
+ } });
642
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
643
+ assert.deepEqual(getIds(results), [ringo.id], "results are correct");
644
+ }
645
+ });
646
+ (0, import_qunit.test)("can filter eq from a code ref query value", async function(assert) {
647
+ let { stringFieldEntry, numberFieldEntry } = testCards;
648
+ await setupIndex(dbAdapter, [{
649
+ card: stringFieldEntry,
650
+ data: { search_doc: {
651
+ cardTitle: stringFieldEntry.cardTitle,
652
+ ref: internalKeyFor(stringFieldEntry.ref, void 0, virtualNetwork)
653
+ } }
654
+ }, {
655
+ card: numberFieldEntry,
656
+ data: { search_doc: {
657
+ cardTitle: numberFieldEntry.cardTitle,
658
+ ref: internalKeyFor(numberFieldEntry.ref, void 0, virtualNetwork)
659
+ } }
660
+ }]);
661
+ let type = await SimpleSpecType(testCards);
662
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
663
+ on: type,
664
+ eq: { ref: {
665
+ module: `${baseRealmRRI}string`,
666
+ name: "default"
667
+ } }
668
+ } });
669
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
670
+ assert.deepEqual(getIds(results), [stringFieldEntry.id], "results are correct");
671
+ });
672
+ (0, import_qunit.test)("can filter eq from a date query value", async function(assert) {
673
+ let { mangoBirthday, vangoghBirthday } = testCards;
674
+ await setupIndex(dbAdapter, [{
675
+ card: mangoBirthday,
676
+ data: { search_doc: {
677
+ cardTitle: mangoBirthday.cardTitle,
678
+ venue: mangoBirthday.venue,
679
+ date: format(mangoBirthday.date, "yyyy-MM-dd")
680
+ } }
681
+ }, {
682
+ card: vangoghBirthday,
683
+ data: { search_doc: {
684
+ cardTitle: vangoghBirthday.cardTitle,
685
+ venue: vangoghBirthday.venue,
686
+ date: format(vangoghBirthday.date, "yyyy-MM-dd")
687
+ } }
688
+ }]);
689
+ let type = await eventType(testCards);
690
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
691
+ on: type,
692
+ eq: { date: "2024-10-30" }
693
+ } });
694
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
695
+ assert.deepEqual(getIds(results), [mangoBirthday.id], "results are correct");
696
+ });
697
+ (0, import_qunit.test)(`can filter using 'in'`, async function(assert) {
698
+ let { mango, vangogh, ringo } = testCards;
699
+ await setupIndex(dbAdapter, [
700
+ {
701
+ card: mango,
702
+ data: { search_doc: { name: "Mango" } }
703
+ },
704
+ {
705
+ card: vangogh,
706
+ data: { search_doc: { name: "Van Gogh" } }
707
+ },
708
+ {
709
+ card: ringo,
710
+ data: { search_doc: { name: "Ringo" } }
711
+ }
712
+ ]);
713
+ let type = await personCardType(testCards);
714
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
715
+ in: { name: ["Mango", "Ringo"] },
716
+ on: type
717
+ } });
718
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
719
+ assert.deepEqual(getIds(results), [mango.id, ringo.id], "results are correct");
720
+ });
721
+ (0, import_qunit.test)(`can filter using 'in' with a single value`, async function(assert) {
722
+ let { mango, vangogh } = testCards;
723
+ await setupIndex(dbAdapter, [{
724
+ card: mango,
725
+ data: { search_doc: { name: "Mango" } }
726
+ }, {
727
+ card: vangogh,
728
+ data: { search_doc: { name: "Van Gogh" } }
729
+ }]);
730
+ let type = await personCardType(testCards);
731
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
732
+ in: { name: ["Mango"] },
733
+ on: type
734
+ } });
735
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
736
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
737
+ });
738
+ (0, import_qunit.test)(`can filter using 'in' with an empty array`, async function(assert) {
739
+ let { mango, vangogh } = testCards;
740
+ await setupIndex(dbAdapter, [{
741
+ card: mango,
742
+ data: { search_doc: { name: "Mango" } }
743
+ }, {
744
+ card: vangogh,
745
+ data: { search_doc: { name: "Van Gogh" } }
746
+ }]);
747
+ let type = await personCardType(testCards);
748
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
749
+ in: { name: [] },
750
+ on: type
751
+ } });
752
+ assert.strictEqual(meta.page.total, 0, "the total results meta is correct");
753
+ assert.deepEqual(getIds(results), [], "results are correct");
754
+ });
755
+ (0, import_qunit.test)(`can filter using 'in' with null values`, async function(assert) {
756
+ let { mango, vangogh, ringo } = testCards;
757
+ await setupIndex(dbAdapter, [
758
+ {
759
+ card: mango,
760
+ data: { search_doc: { name: "Mango" } }
761
+ },
762
+ {
763
+ card: vangogh,
764
+ data: { search_doc: { name: null } }
765
+ },
766
+ {
767
+ card: ringo,
768
+ data: { search_doc: { name: "Ringo" } }
769
+ }
770
+ ]);
771
+ let type = await personCardType(testCards);
772
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
773
+ in: { name: ["Mango", null] },
774
+ on: type
775
+ } });
776
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
777
+ assert.deepEqual(getIds(results), [mango.id, vangogh.id], "results are correct");
778
+ });
779
+ (0, import_qunit.test)(`can filter using 'in' thru nested fields`, async function(assert) {
780
+ let { mango, vangogh, ringo } = testCards;
781
+ await setupIndex(dbAdapter, [
782
+ {
783
+ card: mango,
784
+ data: { search_doc: {
785
+ name: "Mango",
786
+ address: { city: "Barksville" }
787
+ } }
788
+ },
789
+ {
790
+ card: vangogh,
791
+ data: { search_doc: {
792
+ name: "Van Gogh",
793
+ address: { city: "Barksville" }
794
+ } }
795
+ },
796
+ {
797
+ card: ringo,
798
+ data: { search_doc: {
799
+ name: "Ringo",
800
+ address: { city: "Waggington" }
801
+ } }
802
+ }
803
+ ]);
804
+ let type = await personCardType(testCards);
805
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
806
+ on: type,
807
+ in: { "address.city": ["Waggington"] }
808
+ } });
809
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
810
+ assert.deepEqual(getIds(results), [ringo.id], "results are correct");
811
+ });
812
+ (0, import_qunit.test)(`can negate an 'in' filter with 'not'`, async function(assert) {
813
+ let { mango, vangogh, ringo } = testCards;
814
+ await setupIndex(dbAdapter, [
815
+ {
816
+ card: mango,
817
+ data: { search_doc: { name: "Mango" } }
818
+ },
819
+ {
820
+ card: vangogh,
821
+ data: { search_doc: { name: "Van Gogh" } }
822
+ },
823
+ {
824
+ card: ringo,
825
+ data: { search_doc: { name: "Ringo" } }
826
+ }
827
+ ]);
828
+ let type = await personCardType(testCards);
829
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
830
+ on: type,
831
+ not: { in: { name: ["Mango", "Ringo"] } }
832
+ } });
833
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
834
+ assert.deepEqual(getIds(results), [vangogh.id], "results are correct");
835
+ });
836
+ (0, import_qunit.test)(`can filter using 'in' with the id field`, async function(assert) {
837
+ let { mango, vangogh, ringo } = testCards;
838
+ await setupIndex(dbAdapter, [
839
+ {
840
+ card: mango,
841
+ data: { search_doc: {
842
+ id: mango.id,
843
+ name: "Mango"
844
+ } }
845
+ },
846
+ {
847
+ card: vangogh,
848
+ data: { search_doc: {
849
+ id: vangogh.id,
850
+ name: "Van Gogh"
851
+ } }
852
+ },
853
+ {
854
+ card: ringo,
855
+ data: { search_doc: {
856
+ id: ringo.id,
857
+ name: "Ringo"
858
+ } }
859
+ }
860
+ ]);
861
+ let type = await personCardType(testCards);
862
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
863
+ on: type,
864
+ in: { id: [mango.id, ringo.id] }
865
+ } });
866
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
867
+ assert.deepEqual(getIds(results), [mango.id, ringo.id], "results are correct");
868
+ });
869
+ (0, import_qunit.test)(`can search with a 'not' filter`, async function(assert) {
870
+ let { mango, vangogh, ringo } = testCards;
871
+ await setupIndex(dbAdapter, [
872
+ {
873
+ card: mango,
874
+ data: { search_doc: { name: "Mango" } }
875
+ },
876
+ {
877
+ card: vangogh,
878
+ data: { search_doc: { name: "Van Gogh" } }
879
+ },
880
+ {
881
+ card: ringo,
882
+ data: { search_doc: { name: "Ringo" } }
883
+ }
884
+ ]);
885
+ let type = await personCardType(testCards);
886
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
887
+ on: type,
888
+ not: { eq: { name: "Mango" } }
889
+ } });
890
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
891
+ assert.deepEqual(getIds(results), [ringo.id, vangogh.id], "results are correct");
892
+ });
893
+ (0, import_qunit.test)("can handle a filter with double negatives", async function(assert) {
894
+ let { mango, vangogh, ringo } = testCards;
895
+ await setupIndex(dbAdapter, [
896
+ {
897
+ card: mango,
898
+ data: { search_doc: { name: "Mango" } }
899
+ },
900
+ {
901
+ card: vangogh,
902
+ data: { search_doc: { name: "Van Gogh" } }
903
+ },
904
+ {
905
+ card: ringo,
906
+ data: { search_doc: { name: "Ringo" } }
907
+ }
908
+ ]);
909
+ let type = await personCardType(testCards);
910
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
911
+ on: type,
912
+ not: { not: { not: { eq: { name: "Mango" } } } }
913
+ } });
914
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
915
+ assert.deepEqual(getIds(results), [ringo.id, vangogh.id], "results are correct");
916
+ });
917
+ (0, import_qunit.test)(`can use a 'contains' filter`, async function(assert) {
918
+ let { mango, vangogh, ringo } = testCards;
919
+ await setupIndex(dbAdapter, [
920
+ {
921
+ card: mango,
922
+ data: { search_doc: { name: "Mango" } }
923
+ },
924
+ {
925
+ card: vangogh,
926
+ data: { search_doc: { name: "Van Gogh" } }
927
+ },
928
+ {
929
+ card: ringo,
930
+ data: { search_doc: { name: "Ringo" } }
931
+ }
932
+ ]);
933
+ let type = await personCardType(testCards);
934
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
935
+ on: type,
936
+ contains: { name: "ngo" }
937
+ } });
938
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
939
+ assert.deepEqual(getIds(results), [mango.id, ringo.id], "results are correct");
940
+ });
941
+ (0, import_qunit.test)(`contains filter is case insensitive`, async function(assert) {
942
+ let { mango, vangogh, ringo } = testCards;
943
+ await setupIndex(dbAdapter, [
944
+ {
945
+ card: mango,
946
+ data: { search_doc: { name: "Mango" } }
947
+ },
948
+ {
949
+ card: vangogh,
950
+ data: { search_doc: { name: "Van Gogh" } }
951
+ },
952
+ {
953
+ card: ringo,
954
+ data: { search_doc: { name: "Ringo" } }
955
+ }
956
+ ]);
957
+ let type = await personCardType(testCards);
958
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
959
+ on: type,
960
+ contains: { name: "mang" }
961
+ } });
962
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
963
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
964
+ });
965
+ (0, import_qunit.test)(`can use 'contains' to match multiple fields`, async function(assert) {
966
+ let { mango, vangogh } = testCards;
967
+ await setupIndex(dbAdapter, [{
968
+ card: mango,
969
+ data: { search_doc: {
970
+ name: "Mango",
971
+ nickNames: ["Mang Mang", "Pee Baby"]
972
+ } }
973
+ }, {
974
+ card: vangogh,
975
+ data: { search_doc: {
976
+ name: "Van Gogh",
977
+ nickNames: ["Big Baby", "Farty"]
978
+ } }
979
+ }]);
980
+ let type = await personCardType(testCards);
981
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
982
+ on: type,
983
+ contains: {
984
+ name: "ngo",
985
+ nickNames: "Baby"
986
+ }
987
+ } });
988
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
989
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
990
+ });
991
+ (0, import_qunit.test)(`can use a 'contains' filter to match 'null'`, async function(assert) {
992
+ let { mango, vangogh } = testCards;
993
+ await setupIndex(dbAdapter, [{
994
+ card: mango,
995
+ data: { search_doc: { name: "Mango" } }
996
+ }, {
997
+ card: vangogh,
998
+ data: { search_doc: { name: null } }
999
+ }]);
1000
+ let type = await personCardType(testCards);
1001
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1002
+ on: type,
1003
+ contains: { name: null }
1004
+ } });
1005
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1006
+ assert.deepEqual(getIds(results), [vangogh.id], "results are correct");
1007
+ });
1008
+ (0, import_qunit.test)(`can use 'every' to combine multiple filters`, async function(assert) {
1009
+ let { mango, vangogh, ringo } = testCards;
1010
+ await setupIndex(dbAdapter, [
1011
+ {
1012
+ card: mango,
1013
+ data: { search_doc: {
1014
+ name: "Mango",
1015
+ address: {
1016
+ street: "123 Main Street",
1017
+ city: "Barksville"
1018
+ }
1019
+ } }
1020
+ },
1021
+ {
1022
+ card: vangogh,
1023
+ data: { search_doc: {
1024
+ name: "Van Gogh",
1025
+ address: {
1026
+ street: "456 Grand Blvd",
1027
+ city: "Barksville"
1028
+ }
1029
+ } }
1030
+ },
1031
+ {
1032
+ card: ringo,
1033
+ data: { search_doc: {
1034
+ name: "Ringo",
1035
+ address: {
1036
+ street: "100 Treat Street",
1037
+ city: "Waggington"
1038
+ }
1039
+ } }
1040
+ }
1041
+ ]);
1042
+ let type = await personCardType(testCards);
1043
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1044
+ on: type,
1045
+ every: [{ eq: { "address.city": "Barksville" } }, { not: { eq: { "address.street": "456 Grand Blvd" } } }]
1046
+ } });
1047
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1048
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
1049
+ });
1050
+ (0, import_qunit.test)(`can use 'any' to combine multiple filters`, async function(assert) {
1051
+ let { mango, vangogh, ringo } = testCards;
1052
+ await setupIndex(dbAdapter, [
1053
+ {
1054
+ card: mango,
1055
+ data: { search_doc: { name: "Mango" } }
1056
+ },
1057
+ {
1058
+ card: vangogh,
1059
+ data: { search_doc: { name: "Van Gogh" } }
1060
+ },
1061
+ {
1062
+ card: ringo,
1063
+ data: { search_doc: { name: "Ringo" } }
1064
+ }
1065
+ ]);
1066
+ let type = await personCardType(testCards);
1067
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1068
+ on: type,
1069
+ any: [{ eq: { name: "Mango" } }, { eq: { name: "Van Gogh" } }]
1070
+ } });
1071
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1072
+ assert.deepEqual(getIds(results), [mango.id, vangogh.id], "results are correct");
1073
+ });
1074
+ (0, import_qunit.test)(`returns empty results when query refers to missing card`, async function(assert) {
1075
+ await setupIndex(dbAdapter, []);
1076
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1077
+ on: {
1078
+ module: `${testRealmURL}nonexistent`,
1079
+ name: "Nonexistent"
1080
+ },
1081
+ eq: { nonExistentField: "hello" }
1082
+ } });
1083
+ assert.strictEqual(cards.length, 0, "no cards are returned");
1084
+ assert.strictEqual(meta.page.total, 0, "total count is zero");
1085
+ });
1086
+ (0, import_qunit.test)(`gives a good error when query refers to missing field`, async function(assert) {
1087
+ await setupIndex(dbAdapter, []);
1088
+ let type = await personCardType(testCards);
1089
+ try {
1090
+ await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1091
+ on: type,
1092
+ eq: {
1093
+ name: "Cardy",
1094
+ nonExistentField: "hello"
1095
+ }
1096
+ } });
1097
+ throw new Error("failed to throw expected exception");
1098
+ } catch (err) {
1099
+ assert.strictEqual(err.message, `Your filter refers to a nonexistent field "nonExistentField" on type ${wrapper_default(type)}`);
1100
+ }
1101
+ });
1102
+ (0, import_qunit.test)(`errors when a filter crosses a non-searchable relationship`, async function(assert) {
1103
+ await setupIndex(dbAdapter, []);
1104
+ let orgType = {
1105
+ module: `${testRealmURL}org`,
1106
+ name: "Org"
1107
+ };
1108
+ try {
1109
+ await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1110
+ on: orgType,
1111
+ eq: { "ceo.name": "Robin" }
1112
+ } });
1113
+ throw new Error("failed to throw expected exception");
1114
+ } catch (err) {
1115
+ assert.true(isFilterRefersToNonsearchableFieldError(err), "throws the distinct non-searchable-field error");
1116
+ assert.strictEqual(err.reason, "not-searchable", "reason is not-searchable");
1117
+ assert.true(err.message.includes("\"ceo\""), `message names the relationship: ${err.message}`);
1118
+ assert.true(err.message.includes("not searchable"), `message explains it is not searchable: ${err.message}`);
1119
+ assert.true(err.message.includes("searchable: true"), `message names the annotation to add: ${err.message}`);
1120
+ }
1121
+ });
1122
+ (0, import_qunit.test)(`errors when a filter crosses a non-searchable relationship deeper in the path`, async function(assert) {
1123
+ await setupIndex(dbAdapter, []);
1124
+ let orgType = {
1125
+ module: `${testRealmURL}org`,
1126
+ name: "Org"
1127
+ };
1128
+ try {
1129
+ await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1130
+ on: orgType,
1131
+ eq: { "headquarters.bestFriend.name": "Robin" }
1132
+ } });
1133
+ throw new Error("failed to throw expected exception");
1134
+ } catch (err) {
1135
+ assert.true(isFilterRefersToNonsearchableFieldError(err), "throws the distinct non-searchable-field error");
1136
+ assert.strictEqual(err.reason, "not-searchable", "reason is not-searchable");
1137
+ assert.true(err.message.includes("\"headquarters.bestFriend\""), `message names the deeper hop: ${err.message}`);
1138
+ assert.true(err.message.includes(`searchable: 'bestFriend'`), `message names the route to add to the head field: ${err.message}`);
1139
+ }
1140
+ });
1141
+ (0, import_qunit.test)(`errors when a filter crosses a query-backed relationship`, async function(assert) {
1142
+ await setupIndex(dbAdapter, []);
1143
+ let orgType = {
1144
+ module: `${testRealmURL}org`,
1145
+ name: "Org"
1146
+ };
1147
+ try {
1148
+ await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1149
+ on: orgType,
1150
+ eq: { "matchingPeople.name": "Robin" }
1151
+ } });
1152
+ throw new Error("failed to throw expected exception");
1153
+ } catch (err) {
1154
+ assert.true(isFilterRefersToNonsearchableFieldError(err), "throws the distinct non-searchable-field error");
1155
+ assert.strictEqual(err.reason, "query-backed", "reason is query-backed");
1156
+ assert.true(err.message.includes("\"matchingPeople\""), `message names the relationship: ${err.message}`);
1157
+ assert.true(err.message.includes("query-backed"), `message explains it is query-backed: ${err.message}`);
1158
+ }
1159
+ });
1160
+ (0, import_qunit.test)(`a searchable relationship path compiles and runs`, async function(assert) {
1161
+ await setupIndex(dbAdapter, []);
1162
+ let orgType = {
1163
+ module: `${testRealmURL}org`,
1164
+ name: "Org"
1165
+ };
1166
+ let { meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1167
+ on: orgType,
1168
+ eq: { "headquarters.name": "Robin" }
1169
+ } });
1170
+ assert.strictEqual(meta.page.total, 0, "the searchable path ran without error");
1171
+ });
1172
+ (0, import_qunit.test)(`a filter on a relationship's id is allowed even when it is not searchable`, async function(assert) {
1173
+ await setupIndex(dbAdapter, []);
1174
+ let orgType = {
1175
+ module: `${testRealmURL}org`,
1176
+ name: "Org"
1177
+ };
1178
+ let { meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1179
+ on: orgType,
1180
+ eq: { "ceo.id": `${testRealmURL}mango` }
1181
+ } });
1182
+ assert.strictEqual(meta.page.total, 0, "the id reference filter ran without error");
1183
+ });
1184
+ (0, import_qunit.test)(`a nonexistent field beyond a searchable relationship still reports the nonexistent-field error`, async function(assert) {
1185
+ await setupIndex(dbAdapter, []);
1186
+ let orgType = {
1187
+ module: `${testRealmURL}org`,
1188
+ name: "Org"
1189
+ };
1190
+ try {
1191
+ await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1192
+ on: orgType,
1193
+ eq: { "headquarters.nope": "Robin" }
1194
+ } });
1195
+ throw new Error("failed to throw expected exception");
1196
+ } catch (err) {
1197
+ assert.false(isFilterRefersToNonsearchableFieldError(err), "does not throw the searchability error");
1198
+ assert.true(err.message.includes("nonexistent field \"headquarters.nope\""), `reports the nonexistent-field error: ${err.message}`);
1199
+ }
1200
+ });
1201
+ (0, import_qunit.test)(`it can filter on a plural primitive field using 'eq'`, async function(assert) {
1202
+ let { mango, vangogh } = testCards;
1203
+ await setupIndex(dbAdapter, [{
1204
+ card: mango,
1205
+ data: { search_doc: {
1206
+ name: "Mango",
1207
+ nickNames: ["Mang Mang", "Baby"]
1208
+ } }
1209
+ }, {
1210
+ card: vangogh,
1211
+ data: { search_doc: {
1212
+ name: "Van Gogh",
1213
+ nickNames: ["Big boy", "Farty"]
1214
+ } }
1215
+ }]);
1216
+ let type = await personCardType(testCards);
1217
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1218
+ on: type,
1219
+ eq: { nickNames: "Farty" }
1220
+ } });
1221
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1222
+ assert.deepEqual(getIds(results), [vangogh.id], "results are correct");
1223
+ });
1224
+ (0, import_qunit.test)(`it can filter on a nested field within a plural composite field using 'eq'`, async function(assert) {
1225
+ let { mango, vangogh } = testCards;
1226
+ await setupIndex(dbAdapter, [{
1227
+ card: mango,
1228
+ data: { search_doc: {
1229
+ name: "Mango",
1230
+ friends: [{ name: "Van Gogh" }, { name: "Ringo" }]
1231
+ } }
1232
+ }, {
1233
+ card: vangogh,
1234
+ data: { search_doc: {
1235
+ name: "Van Gogh",
1236
+ friends: [{ name: "Ringo" }]
1237
+ } }
1238
+ }]);
1239
+ let type = await personCardType(testCards);
1240
+ {
1241
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1242
+ on: type,
1243
+ eq: { "friends.name": "Van Gogh" }
1244
+ } });
1245
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1246
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
1247
+ }
1248
+ {
1249
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1250
+ on: type,
1251
+ eq: { "friends.name": "Ringo" }
1252
+ } });
1253
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1254
+ assert.deepEqual(getIds(results), [mango.id, vangogh.id], "results are correct");
1255
+ }
1256
+ });
1257
+ (0, import_qunit.test)("it can match a null in a plural field", async function(assert) {
1258
+ let { mango, vangogh } = testCards;
1259
+ await setupIndex(dbAdapter, [{
1260
+ card: mango,
1261
+ data: { search_doc: {
1262
+ name: "Mango",
1263
+ nickNames: ["Mang Mang", "Baby"]
1264
+ } }
1265
+ }, {
1266
+ card: vangogh,
1267
+ data: { search_doc: {
1268
+ name: "Van Gogh",
1269
+ nickNames: null
1270
+ } }
1271
+ }]);
1272
+ let type = await personCardType(testCards);
1273
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1274
+ on: type,
1275
+ eq: { nickNames: null }
1276
+ } });
1277
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1278
+ assert.deepEqual(getIds(results), [vangogh.id], "results are correct");
1279
+ });
1280
+ (0, import_qunit.test)("it can match a leaf plural field nested in a plural composite field", async function(assert) {
1281
+ let { mango, vangogh } = testCards;
1282
+ await setupIndex(dbAdapter, [{
1283
+ card: mango,
1284
+ data: { search_doc: {
1285
+ name: "Mango",
1286
+ friends: [{
1287
+ name: "Van Gogh",
1288
+ nickNames: ["Big Baby", "Farty"]
1289
+ }, {
1290
+ name: "Ringo",
1291
+ nickNames: ["Mang Mang", "Baby"]
1292
+ }]
1293
+ } }
1294
+ }, {
1295
+ card: vangogh,
1296
+ data: { search_doc: {
1297
+ name: "Van Gogh",
1298
+ friends: [{
1299
+ name: "Ringo",
1300
+ nickNames: ["Ring Ring"]
1301
+ }]
1302
+ } }
1303
+ }]);
1304
+ let type = await personCardType(testCards);
1305
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1306
+ on: type,
1307
+ eq: { "friends.nickNames": "Baby" }
1308
+ } });
1309
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1310
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
1311
+ });
1312
+ (0, import_qunit.test)("it can match thru a plural nested composite field that is field of a singular composite field", async function(assert) {
1313
+ let { mango, vangogh } = testCards;
1314
+ await setupIndex(dbAdapter, [{
1315
+ card: mango,
1316
+ data: { search_doc: {
1317
+ name: "Mango",
1318
+ bestFriend: {
1319
+ name: "Van Gogh",
1320
+ friends: [{ name: "Ringo" }, { name: "Van Gogh" }]
1321
+ }
1322
+ } }
1323
+ }, {
1324
+ card: vangogh,
1325
+ data: { search_doc: {
1326
+ name: "Van Gogh",
1327
+ bestFriend: {
1328
+ name: "Ringo",
1329
+ friends: [{ name: "Lucky" }]
1330
+ }
1331
+ } }
1332
+ }]);
1333
+ let type = await personCardType(testCards);
1334
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1335
+ on: type,
1336
+ eq: { "bestFriend.friends.name": "Lucky" }
1337
+ } });
1338
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1339
+ assert.deepEqual(getIds(results), [vangogh.id], "results are correct");
1340
+ });
1341
+ (0, import_qunit.test)(`can return a single result for a card when there are multiple matches within a result's search doc`, async function(assert) {
1342
+ let { mango } = testCards;
1343
+ await setupIndex(dbAdapter, [{
1344
+ card: mango,
1345
+ data: { search_doc: {
1346
+ name: "Mango",
1347
+ friends: [{
1348
+ name: "Ringo",
1349
+ bestFriend: { name: "Mango" }
1350
+ }, {
1351
+ name: "Van Gogh",
1352
+ bestFriend: { name: "Mango" }
1353
+ }]
1354
+ } }
1355
+ }]);
1356
+ let type = await personCardType(testCards);
1357
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1358
+ on: type,
1359
+ eq: { "friends.bestFriend.name": "Mango" }
1360
+ } });
1361
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1362
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
1363
+ });
1364
+ (0, import_qunit.test)("can perform query against a pass's staged rows", async function(assert) {
1365
+ let { mango, vangogh, ringo } = testCards;
1366
+ let stagingId = jobStagingId(1, 1);
1367
+ await setupIndex(dbAdapter, [{
1368
+ realm_url: testRealmURL,
1369
+ current_generation: 1
1370
+ }], {
1371
+ working: [
1372
+ {
1373
+ card: mango,
1374
+ data: {
1375
+ generation: 1,
1376
+ staging_id: stagingId,
1377
+ search_doc: { name: "Mango" }
1378
+ }
1379
+ },
1380
+ {
1381
+ card: vangogh,
1382
+ data: {
1383
+ generation: 2,
1384
+ staging_id: stagingId,
1385
+ search_doc: { name: "Mango" }
1386
+ }
1387
+ },
1388
+ {
1389
+ card: ringo,
1390
+ data: {
1391
+ generation: 2,
1392
+ staging_id: stagingId,
1393
+ search_doc: { name: "Ringo" }
1394
+ }
1395
+ }
1396
+ ],
1397
+ production: [
1398
+ {
1399
+ card: mango,
1400
+ data: {
1401
+ generation: 1,
1402
+ search_doc: { name: "Mango" }
1403
+ }
1404
+ },
1405
+ {
1406
+ card: vangogh,
1407
+ data: {
1408
+ generation: 1,
1409
+ search_doc: { name: "Van Gogh" }
1410
+ }
1411
+ },
1412
+ {
1413
+ card: ringo,
1414
+ data: {
1415
+ generation: 1,
1416
+ search_doc: { name: "Mango" }
1417
+ }
1418
+ }
1419
+ ]
1420
+ });
1421
+ let type = await personCardType(testCards);
1422
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1423
+ on: type,
1424
+ eq: { name: "Mango" }
1425
+ } }, { pendingStagingId: stagingId });
1426
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1427
+ assert.deepEqual(getIds(results), [mango.id, vangogh.id], "results are correct");
1428
+ });
1429
+ (0, import_qunit.test)("can perform query against \"production\" version of the index", async function(assert) {
1430
+ let { mango, vangogh, ringo } = testCards;
1431
+ let stagingId = jobStagingId(1, 1);
1432
+ await setupIndex(dbAdapter, [{
1433
+ realm_url: testRealmURL,
1434
+ current_generation: 1
1435
+ }], {
1436
+ working: [
1437
+ {
1438
+ card: mango,
1439
+ data: {
1440
+ generation: 1,
1441
+ staging_id: stagingId,
1442
+ search_doc: { name: "Mango" }
1443
+ }
1444
+ },
1445
+ {
1446
+ card: vangogh,
1447
+ data: {
1448
+ generation: 2,
1449
+ staging_id: stagingId,
1450
+ search_doc: { name: "Mango" }
1451
+ }
1452
+ },
1453
+ {
1454
+ card: ringo,
1455
+ data: {
1456
+ generation: 1,
1457
+ staging_id: stagingId,
1458
+ search_doc: { name: "Ringo" }
1459
+ }
1460
+ }
1461
+ ],
1462
+ production: [
1463
+ {
1464
+ card: mango,
1465
+ data: {
1466
+ generation: 1,
1467
+ search_doc: { name: "Mango" }
1468
+ }
1469
+ },
1470
+ {
1471
+ card: vangogh,
1472
+ data: {
1473
+ generation: 1,
1474
+ search_doc: { name: "Van Gogh" }
1475
+ }
1476
+ },
1477
+ {
1478
+ card: ringo,
1479
+ data: {
1480
+ generation: 1,
1481
+ search_doc: { name: "Ringo" }
1482
+ }
1483
+ }
1484
+ ]
1485
+ });
1486
+ let type = await personCardType(testCards);
1487
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1488
+ on: type,
1489
+ eq: { name: "Mango" }
1490
+ } });
1491
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1492
+ assert.deepEqual(getIds(results), [mango.id], "results are correct");
1493
+ });
1494
+ (0, import_qunit.test)("can sort search results", async function(assert) {
1495
+ let { mango, vangogh, ringo } = testCards;
1496
+ await setupIndex(dbAdapter, [
1497
+ {
1498
+ card: mango,
1499
+ data: { search_doc: { name: "Mango" } }
1500
+ },
1501
+ {
1502
+ card: vangogh,
1503
+ data: { search_doc: { name: "Van Gogh" } }
1504
+ },
1505
+ {
1506
+ card: ringo,
1507
+ data: { search_doc: { name: "Ringo" } }
1508
+ }
1509
+ ]);
1510
+ let type = await personCardType(testCards);
1511
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { sort: [{
1512
+ on: type,
1513
+ by: "name"
1514
+ }] });
1515
+ assert.strictEqual(meta.page.total, 3, "the total results meta is correct");
1516
+ assert.deepEqual(getIds(results), [
1517
+ mango.id,
1518
+ ringo.id,
1519
+ vangogh.id
1520
+ ], "results are correct");
1521
+ });
1522
+ (0, import_qunit.test)("can sort descending", async function(assert) {
1523
+ let { mango, vangogh, ringo } = testCards;
1524
+ await setupIndex(dbAdapter, [
1525
+ {
1526
+ card: mango,
1527
+ data: { search_doc: { name: "Mango" } }
1528
+ },
1529
+ {
1530
+ card: vangogh,
1531
+ data: { search_doc: { name: "Van Gogh" } }
1532
+ },
1533
+ {
1534
+ card: ringo,
1535
+ data: { search_doc: { name: "Ringo" } }
1536
+ }
1537
+ ]);
1538
+ let type = await personCardType(testCards);
1539
+ let { cards: results, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { sort: [{
1540
+ on: type,
1541
+ by: "name",
1542
+ direction: "desc"
1543
+ }] });
1544
+ assert.strictEqual(meta.page.total, 3, "the total results meta is correct");
1545
+ assert.deepEqual(getIds(results), [
1546
+ vangogh.id,
1547
+ ringo.id,
1548
+ mango.id
1549
+ ], "results are correct");
1550
+ });
1551
+ (0, import_qunit.test)("nulls are sorted to the end of search results", async function(assert) {
1552
+ let { mango, vangogh, ringo } = testCards;
1553
+ await setupIndex(dbAdapter, [
1554
+ {
1555
+ card: mango,
1556
+ data: { search_doc: { name: "Mango" } }
1557
+ },
1558
+ {
1559
+ card: vangogh,
1560
+ data: { search_doc: { name: null } }
1561
+ },
1562
+ {
1563
+ card: ringo,
1564
+ data: { search_doc: { name: "Ringo" } }
1565
+ }
1566
+ ]);
1567
+ let type = await personCardType(testCards);
1568
+ let { cards: results } = await indexQueryEngine.searchCards(new URL(testRealmURL), { sort: [{
1569
+ on: type,
1570
+ by: "name"
1571
+ }] });
1572
+ assert.deepEqual(getIds(results), [
1573
+ mango.id,
1574
+ ringo.id,
1575
+ vangogh.id
1576
+ ], "results are correct");
1577
+ });
1578
+ (0, import_qunit.test)(`can filter using 'gt'`, async function(assert) {
1579
+ let { mango, vangogh, ringo } = testCards;
1580
+ await setupIndex(dbAdapter, [
1581
+ {
1582
+ card: mango,
1583
+ data: { search_doc: {
1584
+ name: "Mango",
1585
+ address: {
1586
+ street: "123 Main Street",
1587
+ city: "Barksville"
1588
+ },
1589
+ age: 35
1590
+ } }
1591
+ },
1592
+ {
1593
+ card: vangogh,
1594
+ data: { search_doc: {
1595
+ name: "Van Gogh",
1596
+ address: {
1597
+ street: "456 Grand Blvd",
1598
+ city: "Barksville"
1599
+ },
1600
+ age: 30
1601
+ } }
1602
+ },
1603
+ {
1604
+ card: ringo,
1605
+ data: { search_doc: {
1606
+ name: "Ringo",
1607
+ address: {
1608
+ street: "100 Treat Street",
1609
+ city: "Waggington"
1610
+ },
1611
+ age: 25
1612
+ } }
1613
+ }
1614
+ ]);
1615
+ let type = await personCardType(testCards);
1616
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1617
+ on: type,
1618
+ range: { age: { gt: 25 } }
1619
+ } });
1620
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1621
+ assert.deepEqual(getIds(cards), [mango.id, vangogh.id], "results are correct");
1622
+ });
1623
+ (0, import_qunit.test)(`range filter works when both 'type' and 'on' are provided`, async function(assert) {
1624
+ let { mango, vangogh, ringo } = testCards;
1625
+ await setupIndex(dbAdapter, [
1626
+ {
1627
+ card: mango,
1628
+ data: { search_doc: {
1629
+ name: "Mango",
1630
+ address: {
1631
+ street: "123 Main Street",
1632
+ city: "Barksville"
1633
+ },
1634
+ age: 35
1635
+ } }
1636
+ },
1637
+ {
1638
+ card: vangogh,
1639
+ data: { search_doc: {
1640
+ name: "Van Gogh",
1641
+ address: {
1642
+ street: "456 Grand Blvd",
1643
+ city: "Barksville"
1644
+ },
1645
+ age: 30
1646
+ } }
1647
+ },
1648
+ {
1649
+ card: ringo,
1650
+ data: { search_doc: {
1651
+ name: "Ringo",
1652
+ address: {
1653
+ street: "100 Treat Street",
1654
+ city: "Waggington"
1655
+ },
1656
+ age: 25
1657
+ } }
1658
+ }
1659
+ ]);
1660
+ let type = await personCardType(testCards);
1661
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1662
+ on: type,
1663
+ type,
1664
+ range: { age: { gt: 25 } }
1665
+ } });
1666
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1667
+ assert.deepEqual(getIds(cards), [mango.id, vangogh.id], "results are correct");
1668
+ });
1669
+ (0, import_qunit.test)(`eq filter works when both 'type' and 'on' are provided`, async function(assert) {
1670
+ let { mango, vangogh, ringo } = testCards;
1671
+ await setupIndex(dbAdapter, [
1672
+ {
1673
+ card: mango,
1674
+ data: { search_doc: { name: "Mango" } }
1675
+ },
1676
+ {
1677
+ card: vangogh,
1678
+ data: { search_doc: { name: "Van Gogh" } }
1679
+ },
1680
+ {
1681
+ card: ringo,
1682
+ data: { search_doc: { name: "Ringo" } }
1683
+ }
1684
+ ]);
1685
+ let type = await personCardType(testCards);
1686
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1687
+ on: type,
1688
+ type,
1689
+ eq: { name: "Mango" }
1690
+ } });
1691
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
1692
+ assert.deepEqual(getIds(cards), [mango.id], "results are correct");
1693
+ });
1694
+ (0, import_qunit.test)(`contains filter works when both 'type' and 'on' are provided`, async function(assert) {
1695
+ let { mango, vangogh, ringo } = testCards;
1696
+ await setupIndex(dbAdapter, [
1697
+ {
1698
+ card: mango,
1699
+ data: { search_doc: {
1700
+ name: "Mango",
1701
+ address: { city: "Barksville" }
1702
+ } }
1703
+ },
1704
+ {
1705
+ card: vangogh,
1706
+ data: { search_doc: {
1707
+ name: "Van Gogh",
1708
+ address: { city: "Barksville" }
1709
+ } }
1710
+ },
1711
+ {
1712
+ card: ringo,
1713
+ data: { search_doc: {
1714
+ name: "Ringo",
1715
+ address: { city: "Waggington" }
1716
+ } }
1717
+ }
1718
+ ]);
1719
+ let type = await personCardType(testCards);
1720
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1721
+ on: type,
1722
+ type,
1723
+ contains: { "address.city": "Barks" }
1724
+ } });
1725
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1726
+ assert.deepEqual(getIds(cards), [mango.id, vangogh.id], "results are correct");
1727
+ });
1728
+ (0, import_qunit.test)(`not filter works when both 'type' and 'on' are provided`, async function(assert) {
1729
+ let { mango, vangogh, ringo } = testCards;
1730
+ await setupIndex(dbAdapter, [
1731
+ {
1732
+ card: mango,
1733
+ data: { search_doc: { name: "Mango" } }
1734
+ },
1735
+ {
1736
+ card: vangogh,
1737
+ data: { search_doc: { name: "Van Gogh" } }
1738
+ },
1739
+ {
1740
+ card: ringo,
1741
+ data: { search_doc: { name: "Ringo" } }
1742
+ }
1743
+ ]);
1744
+ let type = await personCardType(testCards);
1745
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {
1746
+ filter: {
1747
+ on: type,
1748
+ type,
1749
+ not: { eq: { name: "Mango" } }
1750
+ },
1751
+ sort: [{
1752
+ on: type,
1753
+ by: "name",
1754
+ direction: "asc"
1755
+ }]
1756
+ });
1757
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1758
+ assert.deepEqual(getIds(cards), [ringo.id, vangogh.id], "results are correct");
1759
+ });
1760
+ (0, import_qunit.test)(`'on' takes precedence over 'type' when they differ`, async function(assert) {
1761
+ let { mango, vangogh, ringo, paper } = testCards;
1762
+ await setupIndex(dbAdapter, [
1763
+ {
1764
+ card: mango,
1765
+ data: { search_doc: {
1766
+ name: "Mango",
1767
+ address: {
1768
+ street: "123 Main Street",
1769
+ city: "Barksville"
1770
+ },
1771
+ age: 35
1772
+ } }
1773
+ },
1774
+ {
1775
+ card: vangogh,
1776
+ data: { search_doc: {
1777
+ name: "Van Gogh",
1778
+ address: {
1779
+ street: "456 Grand Blvd",
1780
+ city: "Barksville"
1781
+ },
1782
+ age: 30
1783
+ } }
1784
+ },
1785
+ {
1786
+ card: ringo,
1787
+ data: { search_doc: {
1788
+ name: "Ringo",
1789
+ address: {
1790
+ street: "100 Treat Street",
1791
+ city: "Waggington"
1792
+ },
1793
+ age: 25
1794
+ } }
1795
+ },
1796
+ {
1797
+ card: paper,
1798
+ data: { search_doc: {
1799
+ name: "Paper",
1800
+ age: 99
1801
+ } }
1802
+ }
1803
+ ]);
1804
+ let personType = await personCardType(testCards);
1805
+ let catType = internalKeyToCodeRef([...await getTypes(paper)].shift());
1806
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1807
+ on: personType,
1808
+ type: catType,
1809
+ range: { age: { gt: 25 } }
1810
+ } });
1811
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1812
+ assert.deepEqual(getIds(cards), [mango.id, vangogh.id], "results are drawn from the on type and ignore conflicting type");
1813
+ });
1814
+ (0, import_qunit.test)(`can filter using 'gte'`, async function(assert) {
1815
+ let { mango, vangogh, ringo } = testCards;
1816
+ await setupIndex(dbAdapter, [
1817
+ {
1818
+ card: mango,
1819
+ data: { search_doc: {
1820
+ name: "Mango",
1821
+ address: {
1822
+ street: "123 Main Street",
1823
+ city: "Barksville"
1824
+ },
1825
+ age: 35
1826
+ } }
1827
+ },
1828
+ {
1829
+ card: vangogh,
1830
+ data: { search_doc: {
1831
+ name: "Van Gogh",
1832
+ address: {
1833
+ street: "456 Grand Blvd",
1834
+ city: "Barksville"
1835
+ },
1836
+ age: 30
1837
+ } }
1838
+ },
1839
+ {
1840
+ card: ringo,
1841
+ data: { search_doc: {
1842
+ name: "Ringo",
1843
+ address: {
1844
+ street: "100 Treat Street",
1845
+ city: "Waggington"
1846
+ },
1847
+ age: 25
1848
+ } }
1849
+ }
1850
+ ]);
1851
+ let type = await personCardType(testCards);
1852
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {
1853
+ filter: {
1854
+ on: type,
1855
+ range: { age: { gte: 25 } }
1856
+ },
1857
+ sort: [{
1858
+ on: type,
1859
+ by: "age",
1860
+ direction: "desc"
1861
+ }]
1862
+ });
1863
+ assert.strictEqual(meta.page.total, 3, "the total results meta is correct");
1864
+ assert.deepEqual(getIds(cards), [
1865
+ mango.id,
1866
+ vangogh.id,
1867
+ ringo.id
1868
+ ], "results are correct");
1869
+ });
1870
+ (0, import_qunit.test)(`can filter using 'gt' thru nested fields`, async function(assert) {
1871
+ let { mango, vangogh, ringo } = testCards;
1872
+ await setupIndex(dbAdapter, [
1873
+ {
1874
+ card: mango,
1875
+ data: { search_doc: {
1876
+ name: "Mango",
1877
+ address: {
1878
+ street: "123 Main Street",
1879
+ city: "Barksville",
1880
+ number: 123
1881
+ }
1882
+ } }
1883
+ },
1884
+ {
1885
+ card: vangogh,
1886
+ data: { search_doc: {
1887
+ name: "Van Gogh",
1888
+ address: {
1889
+ street: "456 Grand Blvd",
1890
+ city: "Barksville",
1891
+ number: 456
1892
+ }
1893
+ } }
1894
+ },
1895
+ {
1896
+ card: ringo,
1897
+ data: { search_doc: {
1898
+ name: "Ringo",
1899
+ address: {
1900
+ street: "100 Treat Street",
1901
+ city: "Waggington",
1902
+ number: 100
1903
+ }
1904
+ } }
1905
+ }
1906
+ ]);
1907
+ let type = await personCardType(testCards);
1908
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1909
+ on: type,
1910
+ range: { "address.number": { gt: 100 } }
1911
+ } });
1912
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1913
+ assert.deepEqual(getIds(cards), [mango.id, vangogh.id], "results are correct");
1914
+ });
1915
+ (0, import_qunit.test)(`can filter using 'gt' thru a plural primitive field`, async function(assert) {
1916
+ let { mango, vangogh, ringo } = testCards;
1917
+ await setupIndex(dbAdapter, [
1918
+ {
1919
+ card: mango,
1920
+ data: { search_doc: {
1921
+ name: "Mango",
1922
+ lotteryNumbers: [
1923
+ 20,
1924
+ 50,
1925
+ 70
1926
+ ]
1927
+ } }
1928
+ },
1929
+ {
1930
+ card: vangogh,
1931
+ data: { search_doc: {
1932
+ name: "Van Gogh",
1933
+ lotteryNumbers: [
1934
+ 40,
1935
+ 60,
1936
+ 80
1937
+ ]
1938
+ } }
1939
+ },
1940
+ {
1941
+ card: ringo,
1942
+ data: { search_doc: {
1943
+ name: "Ringo",
1944
+ lotteryNumbers: [
1945
+ 10,
1946
+ 20,
1947
+ 30
1948
+ ]
1949
+ } }
1950
+ }
1951
+ ]);
1952
+ let type = await personCardType(testCards);
1953
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1954
+ on: type,
1955
+ range: { lotteryNumbers: { gt: 50 } }
1956
+ } });
1957
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
1958
+ assert.deepEqual(getIds(cards), [mango.id, vangogh.id], "results are correct");
1959
+ });
1960
+ (0, import_qunit.test)(`can filter using 'gt' thru a plural composite field`, async function(assert) {
1961
+ let { mango, vangogh, ringo } = testCards;
1962
+ let mangoDoc = {
1963
+ name: "Mango",
1964
+ age: 35
1965
+ };
1966
+ let vanGoghDoc = {
1967
+ name: "Van Gogh",
1968
+ age: 30
1969
+ };
1970
+ let ringoDoc = {
1971
+ name: "Ringo",
1972
+ age: 25
1973
+ };
1974
+ await setupIndex(dbAdapter, [
1975
+ {
1976
+ card: mango,
1977
+ data: { search_doc: {
1978
+ ...mangoDoc,
1979
+ friends: [{ ...vanGoghDoc }]
1980
+ } }
1981
+ },
1982
+ {
1983
+ card: vangogh,
1984
+ data: { search_doc: {
1985
+ ...vanGoghDoc,
1986
+ friends: [{ ...ringoDoc }]
1987
+ } }
1988
+ },
1989
+ {
1990
+ card: ringo,
1991
+ data: { search_doc: {
1992
+ ...ringoDoc,
1993
+ friends: [{ ...mangoDoc }]
1994
+ } }
1995
+ }
1996
+ ]);
1997
+ let type = await personCardType(testCards);
1998
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
1999
+ on: type,
2000
+ range: { "friends.age": { gt: 25 } }
2001
+ } });
2002
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
2003
+ assert.deepEqual(getIds(cards), [mango.id, ringo.id], "results are correct");
2004
+ });
2005
+ (0, import_qunit.test)(`can filter using 'lt'`, async function(assert) {
2006
+ let { mango, vangogh, ringo } = testCards;
2007
+ await setupIndex(dbAdapter, [
2008
+ {
2009
+ card: mango,
2010
+ data: { search_doc: {
2011
+ name: "Mango",
2012
+ address: {
2013
+ street: "123 Main Street",
2014
+ city: "Barksville"
2015
+ },
2016
+ age: 35
2017
+ } }
2018
+ },
2019
+ {
2020
+ card: vangogh,
2021
+ data: { search_doc: {
2022
+ name: "Van Gogh",
2023
+ address: {
2024
+ street: "456 Grand Blvd",
2025
+ city: "Barksville"
2026
+ },
2027
+ age: 30
2028
+ } }
2029
+ },
2030
+ {
2031
+ card: ringo,
2032
+ data: { search_doc: {
2033
+ name: "Ringo",
2034
+ address: {
2035
+ street: "100 Treat Street",
2036
+ city: "Waggington"
2037
+ },
2038
+ age: 25
2039
+ } }
2040
+ }
2041
+ ]);
2042
+ let type = await personCardType(testCards);
2043
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {
2044
+ filter: {
2045
+ on: type,
2046
+ range: { age: { lt: 35 } }
2047
+ },
2048
+ sort: [{
2049
+ on: type,
2050
+ by: "age",
2051
+ direction: "desc"
2052
+ }]
2053
+ });
2054
+ assert.strictEqual(meta.page.total, 2, "the total results meta is correct");
2055
+ assert.deepEqual(getIds(cards), [vangogh.id, ringo.id], "results are correct");
2056
+ });
2057
+ (0, import_qunit.test)(`can filter using 'lte'`, async function(assert) {
2058
+ let { mango, vangogh, ringo } = testCards;
2059
+ await setupIndex(dbAdapter, [
2060
+ {
2061
+ card: mango,
2062
+ data: { search_doc: {
2063
+ name: "Mango",
2064
+ address: {
2065
+ street: "123 Main Street",
2066
+ city: "Barksville"
2067
+ },
2068
+ age: 35
2069
+ } }
2070
+ },
2071
+ {
2072
+ card: vangogh,
2073
+ data: { search_doc: {
2074
+ name: "Van Gogh",
2075
+ address: {
2076
+ street: "456 Grand Blvd",
2077
+ city: "Barksville"
2078
+ },
2079
+ age: 30
2080
+ } }
2081
+ },
2082
+ {
2083
+ card: ringo,
2084
+ data: { search_doc: {
2085
+ name: "Ringo",
2086
+ address: {
2087
+ street: "100 Treat Street",
2088
+ city: "Waggington"
2089
+ },
2090
+ age: 25
2091
+ } }
2092
+ }
2093
+ ]);
2094
+ let type = await personCardType(testCards);
2095
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {
2096
+ filter: {
2097
+ on: type,
2098
+ range: { age: { lte: 35 } }
2099
+ },
2100
+ sort: [{
2101
+ on: type,
2102
+ by: "age",
2103
+ direction: "desc"
2104
+ }]
2105
+ });
2106
+ assert.strictEqual(meta.page.total, 3, "the total results meta is correct");
2107
+ assert.deepEqual(getIds(cards), [
2108
+ mango.id,
2109
+ vangogh.id,
2110
+ ringo.id
2111
+ ], "results are correct");
2112
+ });
2113
+ (0, import_qunit.test)(`can combine 'range' filter`, async function(assert) {
2114
+ let { mango, vangogh, ringo } = testCards;
2115
+ await setupIndex(dbAdapter, [
2116
+ {
2117
+ card: mango,
2118
+ data: { search_doc: {
2119
+ name: "Mango",
2120
+ address: {
2121
+ street: "123 Main Street",
2122
+ city: "Barksville"
2123
+ },
2124
+ age: 35
2125
+ } }
2126
+ },
2127
+ {
2128
+ card: vangogh,
2129
+ data: { search_doc: {
2130
+ name: "Van Gogh",
2131
+ address: {
2132
+ street: "456 Grand Blvd",
2133
+ city: "Barksville"
2134
+ },
2135
+ age: 30
2136
+ } }
2137
+ },
2138
+ {
2139
+ card: ringo,
2140
+ data: { search_doc: {
2141
+ name: "Ringo",
2142
+ address: {
2143
+ street: "100 Treat Street",
2144
+ city: "Waggington"
2145
+ },
2146
+ age: 25
2147
+ } }
2148
+ }
2149
+ ]);
2150
+ let type = await personCardType(testCards);
2151
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), {
2152
+ filter: {
2153
+ on: type,
2154
+ range: { age: {
2155
+ gt: 25,
2156
+ lt: 35
2157
+ } }
2158
+ },
2159
+ sort: [{
2160
+ on: type,
2161
+ by: "age",
2162
+ direction: "desc"
2163
+ }]
2164
+ });
2165
+ assert.strictEqual(meta.page.total, 1, "the total results meta is correct");
2166
+ assert.deepEqual(getIds(cards), [vangogh.id], "results are correct");
2167
+ });
2168
+ (0, import_qunit.test)(`cannot filter 'null' value using 'range'`, async function(assert) {
2169
+ let { mango, vangogh, ringo } = testCards;
2170
+ await setupIndex(dbAdapter, [
2171
+ {
2172
+ card: mango,
2173
+ data: { search_doc: {
2174
+ name: "Mango",
2175
+ address: {
2176
+ street: "123 Main Street",
2177
+ city: "Barksville"
2178
+ },
2179
+ age: 35
2180
+ } }
2181
+ },
2182
+ {
2183
+ card: vangogh,
2184
+ data: { search_doc: {
2185
+ name: "Van Gogh",
2186
+ address: {
2187
+ street: "456 Grand Blvd",
2188
+ city: "Barksville"
2189
+ },
2190
+ age: 30
2191
+ } }
2192
+ },
2193
+ {
2194
+ card: ringo,
2195
+ data: { search_doc: {
2196
+ name: "Ringo",
2197
+ address: {
2198
+ street: "100 Treat Street",
2199
+ city: "Waggington"
2200
+ },
2201
+ age: 25
2202
+ } }
2203
+ }
2204
+ ]);
2205
+ let type = await personCardType(testCards);
2206
+ assert.rejects(indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
2207
+ on: type,
2208
+ range: { age: { gt: null } }
2209
+ } }), `'null' is not a permitted value in a 'range' filter`);
2210
+ });
2211
+ (0, import_qunit.test)(`'matches' filter returns rows whose markdown contains the query (case-insensitive)`, async function(assert) {
2212
+ let { mango, vangogh, ringo } = testCards;
2213
+ await setupIndex(dbAdapter, [
2214
+ {
2215
+ card: mango,
2216
+ data: { markdown: "Mango is a friendly puppy who loves to play fetch in the park." }
2217
+ },
2218
+ {
2219
+ card: vangogh,
2220
+ data: { markdown: "Van Gogh is a calm dog with a painterly coat." }
2221
+ },
2222
+ {
2223
+ card: ringo,
2224
+ data: { markdown: "Ringo plays the drums and enjoys long naps." }
2225
+ }
2226
+ ]);
2227
+ let lower = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "mango" } });
2228
+ assert.strictEqual(lower.meta.page.total, 1, "one row matches \"mango\"");
2229
+ assert.deepEqual(getIds(lower.cards), [mango.id]);
2230
+ let upper = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "MANGO" } });
2231
+ assert.strictEqual(upper.meta.page.total, 1, "upper-case query still matches");
2232
+ let none = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "xylophone" } });
2233
+ assert.strictEqual(none.meta.page.total, 0, "no rows match a missing term");
2234
+ });
2235
+ (0, import_qunit.test)(`'matches' escapes LIKE wildcards so user input matches literally`, async function(assert) {
2236
+ let { mango, vangogh } = testCards;
2237
+ await setupIndex(dbAdapter, [{
2238
+ card: mango,
2239
+ data: { markdown: "Summer sale: 50% off today only." }
2240
+ }, {
2241
+ card: vangogh,
2242
+ data: { markdown: "Fifty kittens lined up on the fence." }
2243
+ }]);
2244
+ let percent = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "50%" } });
2245
+ assert.strictEqual(percent.meta.page.total, 1, "\"50%\" matches the literal \"50%\" row only");
2246
+ assert.deepEqual(getIds(percent.cards), [mango.id]);
2247
+ let underscore = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "_nothing_" } });
2248
+ assert.strictEqual(underscore.meta.page.total, 0, "underscore is treated literally, not as a single-char wildcard");
2249
+ });
2250
+ (0, import_qunit.test)(`'matches' does not match rows whose markdown is null`, async function(assert) {
2251
+ let { mango, vangogh } = testCards;
2252
+ await setupIndex(dbAdapter, [{
2253
+ card: mango,
2254
+ data: { markdown: "Mango likes fetch." }
2255
+ }, {
2256
+ card: vangogh,
2257
+ data: { markdown: null }
2258
+ }]);
2259
+ let { meta, cards } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "mango" } });
2260
+ assert.strictEqual(meta.page.total, 1, "only the non-null row matching \"mango\" is returned");
2261
+ assert.deepEqual(getIds(cards), [mango.id]);
2262
+ });
2263
+ (0, import_qunit.test)(`'matches' empty query matches nothing`, async function(assert) {
2264
+ let { mango, ringo } = testCards;
2265
+ await setupIndex(dbAdapter, [{
2266
+ card: mango,
2267
+ data: { markdown: "Mango likes fetch." }
2268
+ }, {
2269
+ card: ringo,
2270
+ data: { markdown: "Ringo likes drums." }
2271
+ }]);
2272
+ let { meta: emptyMeta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "" } });
2273
+ assert.strictEqual(emptyMeta.page.total, 0, "empty query does not match every row");
2274
+ let { meta: wsMeta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: " " } });
2275
+ assert.strictEqual(wsMeta.page.total, 0, "whitespace-only query does not match every row");
2276
+ });
2277
+ (0, import_qunit.test)(`'matches' parameterizes the query safely (injection attempt)`, async function(assert) {
2278
+ let { mango, vangogh, ringo } = testCards;
2279
+ await setupIndex(dbAdapter, [
2280
+ {
2281
+ card: mango,
2282
+ data: { markdown: "Mango likes fetch." }
2283
+ },
2284
+ {
2285
+ card: vangogh,
2286
+ data: { markdown: "Van Gogh likes naps." }
2287
+ },
2288
+ {
2289
+ card: ringo,
2290
+ data: { markdown: "Ringo likes drums." }
2291
+ }
2292
+ ]);
2293
+ let { meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: `'; DROP TABLE boxel_index; --` } });
2294
+ assert.strictEqual(meta.page.total, 0, "malicious input is treated as literal LIKE text, not SQL");
2295
+ let sanity = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "mango" } });
2296
+ assert.strictEqual(sanity.meta.page.total, 1, "boxel_index table is intact after injection attempt");
2297
+ });
2298
+ (0, import_qunit.test)(`'matches' tolerates unicode and special characters in the query`, async function(assert) {
2299
+ let { mango } = testCards;
2300
+ await setupIndex(dbAdapter, [{
2301
+ card: mango,
2302
+ data: { markdown: "Mango likes fetch." }
2303
+ }]);
2304
+ let { meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: { matches: "café 🦮 \"$1 $2\"" } });
2305
+ assert.strictEqual(meta.page.total, 0, "special characters do not throw; no rows match");
2306
+ });
2307
+ (0, import_qunit.test)(`'matches' composes inside 'every' with eq/contains/range/cardType`, async function(assert) {
2308
+ let { mango, vangogh, ringo } = testCards;
2309
+ await setupIndex(dbAdapter, [
2310
+ {
2311
+ card: mango,
2312
+ data: {
2313
+ search_doc: {
2314
+ name: "Mango",
2315
+ age: 35
2316
+ },
2317
+ markdown: "Mango is the name here."
2318
+ }
2319
+ },
2320
+ {
2321
+ card: vangogh,
2322
+ data: {
2323
+ search_doc: {
2324
+ name: "Van Gogh",
2325
+ age: 30
2326
+ },
2327
+ markdown: "Van Gogh is here."
2328
+ }
2329
+ },
2330
+ {
2331
+ card: ringo,
2332
+ data: {
2333
+ search_doc: {
2334
+ name: "Ringo",
2335
+ age: 25
2336
+ },
2337
+ markdown: "Ringo is here."
2338
+ }
2339
+ }
2340
+ ]);
2341
+ let type = await personCardType(testCards);
2342
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
2343
+ on: type,
2344
+ every: [
2345
+ { type },
2346
+ { matches: "mango" },
2347
+ { eq: { name: "Mango" } },
2348
+ { contains: { name: "Mang" } },
2349
+ { range: { age: { gt: 10 } } }
2350
+ ]
2351
+ } });
2352
+ assert.strictEqual(meta.page.total, 1, `every-composition narrows to the one row matching all predicates`);
2353
+ assert.deepEqual(getIds(cards), [mango.id], "correct row returned");
2354
+ });
2355
+ (0, import_qunit.test)(`'matches' composes inside 'any' alongside other filters`, async function(assert) {
2356
+ let { mango, vangogh, ringo } = testCards;
2357
+ await setupIndex(dbAdapter, [
2358
+ {
2359
+ card: mango,
2360
+ data: {
2361
+ search_doc: { name: "Mango" },
2362
+ markdown: "Mango is here."
2363
+ }
2364
+ },
2365
+ {
2366
+ card: vangogh,
2367
+ data: {
2368
+ search_doc: { name: "Van Gogh" },
2369
+ markdown: "Van Gogh is here."
2370
+ }
2371
+ },
2372
+ {
2373
+ card: ringo,
2374
+ data: {
2375
+ search_doc: { name: "Ringo" },
2376
+ markdown: "Ringo is here."
2377
+ }
2378
+ }
2379
+ ]);
2380
+ let type = await personCardType(testCards);
2381
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
2382
+ on: type,
2383
+ any: [{ matches: "ringo" }, { eq: { name: "Mango" } }]
2384
+ } });
2385
+ assert.strictEqual(meta.page.total, 2, `union of the 'matches' branch and the 'eq' branch`);
2386
+ assert.deepEqual(getIds(cards), [mango.id, ringo.id], "results are correct");
2387
+ });
2388
+ (0, import_qunit.test)(`'matches' composes inside 'not'`, async function(assert) {
2389
+ let { mango, vangogh, ringo } = testCards;
2390
+ await setupIndex(dbAdapter, [
2391
+ {
2392
+ card: mango,
2393
+ data: {
2394
+ search_doc: { name: "Mango" },
2395
+ markdown: "Mango is here."
2396
+ }
2397
+ },
2398
+ {
2399
+ card: vangogh,
2400
+ data: {
2401
+ search_doc: { name: "Van Gogh" },
2402
+ markdown: "Van Gogh is here."
2403
+ }
2404
+ },
2405
+ {
2406
+ card: ringo,
2407
+ data: {
2408
+ search_doc: { name: "Ringo" },
2409
+ markdown: "Ringo is here."
2410
+ }
2411
+ }
2412
+ ]);
2413
+ let type = await personCardType(testCards);
2414
+ let { cards, meta } = await indexQueryEngine.searchCards(new URL(testRealmURL), { filter: {
2415
+ on: type,
2416
+ not: { matches: "mango" }
2417
+ } });
2418
+ assert.strictEqual(meta.page.total, 2, `'not' drops the one row that matched 'mango'`);
2419
+ assert.deepEqual(getIds(cards), [ringo.id, vangogh.id], "non-mango person rows returned");
2420
+ });
2421
+ (0, import_qunit.test)(`'_matchRelevance' sort orders matched rows ahead of non-matched (SQLite 1/0 fallback)`, async function(assert) {
2422
+ let { mango, vangogh, ringo } = testCards;
2423
+ await setupIndex(dbAdapter, [
2424
+ {
2425
+ card: mango,
2426
+ data: {
2427
+ search_doc: { name: "Mango" },
2428
+ markdown: "Mango is here."
2429
+ }
2430
+ },
2431
+ {
2432
+ card: vangogh,
2433
+ data: {
2434
+ search_doc: { name: "Van Gogh" },
2435
+ markdown: "Van Gogh is here."
2436
+ }
2437
+ },
2438
+ {
2439
+ card: ringo,
2440
+ data: {
2441
+ search_doc: { name: "Ringo" },
2442
+ markdown: "Ringo is here."
2443
+ }
2444
+ }
2445
+ ]);
2446
+ let query = { filter: {
2447
+ on: await personCardType(testCards),
2448
+ any: [{ matches: "ringo" }, { eq: { name: "Mango" } }]
2449
+ } };
2450
+ let desc = await indexQueryEngine.searchCards(new URL(testRealmURL), {
2451
+ ...query,
2452
+ sort: [{ by: "_matchRelevance" }]
2453
+ });
2454
+ assert.deepEqual(getIds(desc.cards), [ringo.id, mango.id], "best match (the matches-branch hit) sorts first by default (desc)");
2455
+ let asc = await indexQueryEngine.searchCards(new URL(testRealmURL), {
2456
+ ...query,
2457
+ sort: [{
2458
+ by: "_matchRelevance",
2459
+ direction: "asc"
2460
+ }]
2461
+ });
2462
+ assert.deepEqual(getIds(asc.cards), [mango.id, ringo.id], "asc reverses the relevance ordering");
2463
+ });
2464
+ (0, import_qunit.test)(`'_matchRelevance' sort with no positive 'matches' term throws`, async function(assert) {
2465
+ let { mango, vangogh, ringo } = testCards;
2466
+ await setupIndex(dbAdapter, [
2467
+ {
2468
+ card: mango,
2469
+ data: { search_doc: { name: "Mango" } }
2470
+ },
2471
+ {
2472
+ card: vangogh,
2473
+ data: { search_doc: { name: "Van Gogh" } }
2474
+ },
2475
+ {
2476
+ card: ringo,
2477
+ data: { search_doc: { name: "Ringo" } }
2478
+ }
2479
+ ]);
2480
+ let type = await personCardType(testCards);
2481
+ await assert.rejects(indexQueryEngine.searchCards(new URL(testRealmURL), {
2482
+ filter: {
2483
+ on: type,
2484
+ eq: { name: "Mango" }
2485
+ },
2486
+ sort: [{
2487
+ by: "_matchRelevance",
2488
+ direction: "desc"
2489
+ }]
2490
+ }), /requires at least one positive `matches` filter/, "a query with no matches term cannot sort by relevance");
2491
+ await assert.rejects(indexQueryEngine.searchCards(new URL(testRealmURL), {
2492
+ filter: {
2493
+ on: type,
2494
+ not: { matches: "mango" }
2495
+ },
2496
+ sort: [{
2497
+ by: "_matchRelevance",
2498
+ direction: "desc"
2499
+ }]
2500
+ }), /requires at least one positive `matches` filter/, "a negated matches term does not count as a positive term");
2501
+ });
2502
+ (0, import_qunit.test)("can sort using a general field that is not an attribute of a card", async function(assert) {
2503
+ await setupIndex(dbAdapter, [
2504
+ {
2505
+ url: `${testRealmURL}vangogh.json`,
2506
+ file_alias: `${testRealmURL}vangogh`,
2507
+ type: "instance",
2508
+ generation: 1,
2509
+ realm_url: testRealmURL,
2510
+ deps: [],
2511
+ types: [`${testRealmURL}person/Person`, "https://cardstack.com/base/card-api/CardDef"],
2512
+ last_modified: "1",
2513
+ resource_created_at: "1"
2514
+ },
2515
+ {
2516
+ url: `${testRealmURL}jimmy.json`,
2517
+ file_alias: `${testRealmURL}jimmy`,
2518
+ type: "instance",
2519
+ generation: 1,
2520
+ realm_url: testRealmURL,
2521
+ deps: [],
2522
+ types: [`${testRealmURL}person/Person`, "https://cardstack.com/base/card-api/CardDef"],
2523
+ last_modified: "3",
2524
+ resource_created_at: "3"
2525
+ },
2526
+ {
2527
+ url: `${testRealmURL}donald.json`,
2528
+ file_alias: `${testRealmURL}donald`,
2529
+ type: "instance",
2530
+ generation: 1,
2531
+ realm_url: testRealmURL,
2532
+ deps: [],
2533
+ types: [`${testRealmURL}person/Person`, "https://cardstack.com/base/card-api/CardDef"],
2534
+ last_modified: "2",
2535
+ resource_created_at: "2"
2536
+ }
2537
+ ]);
2538
+ let { results } = await indexQueryEngine.search(new URL(testRealmURL), { sort: [{
2539
+ by: "lastModified",
2540
+ direction: "desc"
2541
+ }] }, { includeErrors: true }, { kind: "dataOnly" });
2542
+ assert.deepEqual(results.map((r) => r.url), [
2543
+ `${testRealmURL}jimmy.json`,
2544
+ `${testRealmURL}donald.json`,
2545
+ `${testRealmURL}vangogh.json`
2546
+ ], "results are correct");
2547
+ let { results: results2 } = await indexQueryEngine.search(new URL(testRealmURL), { sort: [{
2548
+ by: "lastModified",
2549
+ direction: "asc"
2550
+ }] }, { includeErrors: true }, { kind: "dataOnly" });
2551
+ assert.deepEqual(results2.map((r) => r.url), [
2552
+ `${testRealmURL}vangogh.json`,
2553
+ `${testRealmURL}donald.json`,
2554
+ `${testRealmURL}jimmy.json`
2555
+ ], "results are correct");
2556
+ let { results: results3 } = await indexQueryEngine.search(new URL(testRealmURL), { sort: [{
2557
+ by: "createdAt",
2558
+ direction: "desc"
2559
+ }] }, { includeErrors: true }, { kind: "dataOnly" });
2560
+ assert.deepEqual(results3.map((r) => r.url), [
2561
+ `${testRealmURL}jimmy.json`,
2562
+ `${testRealmURL}donald.json`,
2563
+ `${testRealmURL}vangogh.json`
2564
+ ], "results are correct");
2565
+ });
2566
+ });
2567
+ function getIds(resources) {
2568
+ return resources.map((r) => r.id);
2569
+ }
2570
+ function internalKeyToCodeRef(key) {
2571
+ let parts = key.split("/");
2572
+ let name = parts.pop();
2573
+ return {
2574
+ module: parts.join("/"),
2575
+ name
2576
+ };
2577
+ }
2578
+ async function personCardType(testCards) {
2579
+ let { vangogh } = testCards;
2580
+ if (!vangogh) throw new Error(`missing the 'vangogh' test card in the--this is the card we use to derive the Person type`);
2581
+ return internalKeyToCodeRef([...await getTypes(vangogh)].shift());
2582
+ }
2583
+ async function SimpleSpecType(testCards) {
2584
+ let { stringFieldEntry } = testCards;
2585
+ if (!stringFieldEntry) throw new Error(`missing the 'stringFieldEntry' test card in the--this is the card we use to derive the SimpleSpec type`);
2586
+ return internalKeyToCodeRef([...await getTypes(stringFieldEntry)].shift());
2587
+ }
2588
+ async function eventType(testCards) {
2589
+ let { mangoBirthday } = testCards;
2590
+ if (!mangoBirthday) throw new Error(`missing the 'mangoBirthday' test card in the--this is the card we use to derive the Event type`);
2591
+ return internalKeyToCodeRef([...await getTypes(mangoBirthday)].shift());
2592
+ }
2593
+ //#endregion