@cardstack/boxel-cli 0.9.0 → 0.10.0-unstable.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (995) hide show
  1. package/README.md +12 -0
  2. package/bundled-test-harness/assets/account-switch-failed-GCSVbJML.js +23 -0
  3. package/bundled-test-harness/assets/account-switch-failed-GsWni_Gk.css +18 -0
  4. package/bundled-test-harness/assets/account-switch-failed-test-CdZWNths.js +45 -0
  5. package/bundled-test-harness/assets/add-workspace-c7L50Gx8.js +141 -0
  6. package/bundled-test-harness/assets/add-workspace-test-BZxHa6Pe.js +72 -0
  7. package/bundled-test-harness/assets/advanced-color-picker-0pGF-3WG.js +504 -0
  8. package/bundled-test-harness/assets/advanced-color-picker-pbO4HWc_.js +2 -0
  9. package/bundled-test-harness/assets/ai-assistant-test-Dnm4o9vK.js +2211 -0
  10. package/bundled-test-harness/assets/ai-module-creation-test-C6253CMt.js +151 -0
  11. package/bundled-test-harness/assets/aibot-message-miKyGeKk.js +278 -0
  12. package/bundled-test-harness/assets/app-i8pGdQkw.js +22855 -0
  13. package/bundled-test-harness/assets/app-zC7o6PyQ.css +2718 -0
  14. package/bundled-test-harness/assets/audio-file-def-DHnydP0t.js +133 -0
  15. package/bundled-test-harness/assets/auth-container-BP2gSoo4.css +51 -0
  16. package/bundled-test-harness/assets/auth-container-DN94iVfX.js +24 -0
  17. package/bundled-test-harness/assets/avif-meta-extractor-Bo5zRX1V.js +162 -0
  18. package/bundled-test-harness/assets/base64-image-B0RYxzHT.js +2 -0
  19. package/bundled-test-harness/assets/base64-image-Bxjqdwew.js +262 -0
  20. package/bundled-test-harness/assets/big-integer-7RLj5_7H.js +89 -0
  21. package/bundled-test-harness/assets/big-integer-C9sJxKVy.js +2 -0
  22. package/bundled-test-harness/assets/binary-upload-dedupe-test-DZo3EaV0.js +308 -0
  23. package/bundled-test-harness/assets/boolean-CcKPYUph.js +94 -0
  24. package/bundled-test-harness/assets/boolean-DvsSmtM7.js +2 -0
  25. package/bundled-test-harness/assets/brand-functional-palette-KpVSY2Sa.js +137 -0
  26. package/bundled-test-harness/assets/brand-logo-DDiOec0t.js +295 -0
  27. package/bundled-test-harness/assets/broken-link-template-test-DAngUbFJ.js +192 -0
  28. package/bundled-test-harness/assets/bundled-base-C_lumba6.js +254 -0
  29. package/bundled-test-harness/assets/bundled-base-modules-test-CSF7Rl4Z.js +54 -0
  30. package/bundled-test-harness/assets/buried-stack-item-scroll-test-B0J_EP88.js +236 -0
  31. package/bundled-test-harness/assets/bxl-expression-test-Dej7WgI6.js +250 -0
  32. package/bundled-test-harness/assets/can-invoke-test-elyUcOKT.js +401 -0
  33. package/bundled-test-harness/assets/card-api-CjWXCkqh.js +8 -0
  34. package/bundled-test-harness/assets/card-api-Dzje0smT.js +4393 -0
  35. package/bundled-test-harness/assets/card-api-test-DA8d4Ooc.js +198 -0
  36. package/bundled-test-harness/assets/card-basics-test-mp1Odo-l.js +5364 -0
  37. package/bundled-test-harness/assets/card-chooser-paging-test-y8OfboYd.js +235 -0
  38. package/bundled-test-harness/assets/card-chooser-test-nmg2zkDj.js +393 -0
  39. package/bundled-test-harness/assets/card-collection-BXiO3i7R.js +118 -0
  40. package/bundled-test-harness/assets/card-context-search-results-Dbhn7lvW.js +30 -0
  41. package/bundled-test-harness/assets/card-context-search-results-test-DVXT-YC5.js +184 -0
  42. package/bundled-test-harness/assets/card-def-field-def-relationships-test-mX4rxrtO.js +562 -0
  43. package/bundled-test-harness/assets/card-delete-test-BxFsqFnX.js +466 -0
  44. package/bundled-test-harness/assets/card-error-C-7hjxu9.js +72 -0
  45. package/bundled-test-harness/assets/card-error-awaiting-index-test-BvfY2eaW.js +53 -0
  46. package/bundled-test-harness/assets/card-error-detail-nMwopDir.js +271 -0
  47. package/bundled-test-harness/assets/card-info-CTFxdohf.js +2 -0
  48. package/bundled-test-harness/assets/card-list-B9QrkJ97.js +2 -0
  49. package/bundled-test-harness/assets/card-list-XbwLCXZS.js +202 -0
  50. package/bundled-test-harness/assets/card-resource-JGLjQUy6.js +86 -0
  51. package/bundled-test-harness/assets/cards-grid-CWG41hZE.js +344 -0
  52. package/bundled-test-harness/assets/cards-grid-DSpX99p6.js +2 -0
  53. package/bundled-test-harness/assets/cards-grid-layout-Bht0LwZy.js +2 -0
  54. package/bundled-test-harness/assets/cards-grid-layout-CdpKlHUb.js +111 -0
  55. package/bundled-test-harness/assets/check-correctness-test-C4BrUeKA.js +554 -0
  56. package/bundled-test-harness/assets/clip-BEVvLrXx.js +2 -0
  57. package/bundled-test-harness/assets/clip-CoB714qX.js +92 -0
  58. package/bundled-test-harness/assets/code-ref-C2uguisI.js +2 -0
  59. package/bundled-test-harness/assets/code-ref-Cy7sV5a4.js +138 -0
  60. package/bundled-test-harness/assets/code-submode-availability-test-BsA_Ul01.js +198 -0
  61. package/bundled-test-harness/assets/code-submode-test-DkBhpEPB.js +1839 -0
  62. package/bundled-test-harness/assets/codeblocks-test-B1eZ2_JF.js +418 -0
  63. package/bundled-test-harness/assets/codemirror-editor-C6pxSm5y.js +2 -0
  64. package/bundled-test-harness/assets/codemirror-editor-DzM46Cd8.js +701 -0
  65. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-BemP-ZdG.js +366 -0
  66. package/bundled-test-harness/assets/color-C-jGNFWZ.js +2 -0
  67. package/bundled-test-harness/assets/color-field-test-DPIRaBec.js +212 -0
  68. package/bundled-test-harness/assets/color-picker-field-Bv4IjS-d.js +139 -0
  69. package/bundled-test-harness/assets/color-picker-field-D1bYCQIg.js +2 -0
  70. package/bundled-test-harness/assets/color-wheel-picker-IIaCQplL.js +283 -0
  71. package/bundled-test-harness/assets/color-wheel-picker-Kw-UN3kV.js +2 -0
  72. package/bundled-test-harness/assets/color-zzCBneih.js +65 -0
  73. package/bundled-test-harness/assets/command-data-BMBtjT1E.js +95 -0
  74. package/bundled-test-harness/assets/command-data-BXC5Z0oA.js +2 -0
  75. package/bundled-test-harness/assets/compaction-test-CxUKnxlQ.js +150 -0
  76. package/bundled-test-harness/assets/components-Ct_agx0G.js +14294 -0
  77. package/bundled-test-harness/assets/computed-test-C-lpGQQ3.js +1320 -0
  78. package/bundled-test-harness/assets/container-BdPu8rvc.css +5565 -0
  79. package/bundled-test-harness/assets/container-Dj-5prh9.js +11288 -0
  80. package/bundled-test-harness/assets/contains-many-component-CAWqzX8W.js +2 -0
  81. package/bundled-test-harness/assets/contrast-checker-addon-BTLD7oMx.js +2 -0
  82. package/bundled-test-harness/assets/contrast-checker-addon-DBzizR04.js +71 -0
  83. package/bundled-test-harness/assets/convert-to-class-name-test-zZuKxYvF.js +17 -0
  84. package/bundled-test-harness/assets/coordinate-Bw8va6tO.js +48 -0
  85. package/bundled-test-harness/assets/copy-file-to-realm-test-DtCKPzqj.js +148 -0
  86. package/bundled-test-harness/assets/country-B_tWpLlO.js +199 -0
  87. package/bundled-test-harness/assets/create-file-modal-D-VPyEYp.js +570 -0
  88. package/bundled-test-harness/assets/create-listing-modal-test-hyLkQY0u.js +273 -0
  89. package/bundled-test-harness/assets/create-listing-pr-request-test-rjWFA_5S.js +117 -0
  90. package/bundled-test-harness/assets/create-spec-test-HKIxZGxK.js +256 -0
  91. package/bundled-test-harness/assets/create-specs-9-ELVyJP.js +215 -0
  92. package/bundled-test-harness/assets/create-submission-workflow-test-DNZrbRX8.js +132 -0
  93. package/bundled-test-harness/assets/credential-fields-test-xPEdA911.js +157 -0
  94. package/bundled-test-harness/assets/css-value-Du3HL39X.js +48 -0
  95. package/bundled-test-harness/assets/csv-file-def-EHRmilrp.js +277 -0
  96. package/bundled-test-harness/assets/currency-y6ZCHIqG.js +134 -0
  97. package/bundled-test-harness/assets/date-B27PrSFT.js +183 -0
  98. package/bundled-test-harness/assets/date-CiP5Eb9i.js +2 -0
  99. package/bundled-test-harness/assets/date-time-fields-test-Clf5vxRW.js +359 -0
  100. package/bundled-test-harness/assets/datetime-BEbR9YgU.js +201 -0
  101. package/bundled-test-harness/assets/datetime-DPnrt1wl.js +2 -0
  102. package/bundled-test-harness/assets/datetime-stamp-AuT7F7qn.js +2 -0
  103. package/bundled-test-harness/assets/datetime-stamp-CGwP2P3f.js +81 -0
  104. package/bundled-test-harness/assets/day-BFLxZ9bQ.js +2 -0
  105. package/bundled-test-harness/assets/day-CQoEkqgE.js +113 -0
  106. package/bundled-test-harness/assets/debug-message-test-CzgOpfcI.js +117 -0
  107. package/bundled-test-harness/assets/dist-B-fYvxfL.js +389 -0
  108. package/bundled-test-harness/assets/dist-C2IXvIKX.js +323 -0
  109. package/bundled-test-harness/assets/dist-CdNZu43l.js +1710 -0
  110. package/bundled-test-harness/assets/docx-file-def-BQMw460_.js +60 -0
  111. package/bundled-test-harness/assets/docx-meta-extractor-DBlmH_kV.js +60 -0
  112. package/bundled-test-harness/assets/docx-meta-extractor-Dw4gZ0ae.js +2 -0
  113. package/bundled-test-harness/assets/duration-B0SnEiw1.js +184 -0
  114. package/bundled-test-harness/assets/duration-DbjJTFeA.js +2 -0
  115. package/bundled-test-harness/assets/email-C-8cyWiQ.js +80 -0
  116. package/bundled-test-harness/assets/email-field-test-BOBmvQqx.js +75 -0
  117. package/bundled-test-harness/assets/email-xUgCst-p.js +2 -0
  118. package/bundled-test-harness/assets/enum-BWiCyJlu.js +167 -0
  119. package/bundled-test-harness/assets/enum-CzYjivhO.js +2 -0
  120. package/bundled-test-harness/assets/enum-field-test-Bea9EsQR.js +953 -0
  121. package/bundled-test-harness/assets/error-display-test-Cbl2D_0c.js +343 -0
  122. package/bundled-test-harness/assets/ethereum-address-Bw_J05bD.js +78 -0
  123. package/bundled-test-harness/assets/ethereum-address-C9wHMBt3.js +2 -0
  124. package/bundled-test-harness/assets/expiration-warning-BHcJEjZt.js +90 -0
  125. package/bundled-test-harness/assets/expiration-warning-_G8SKZd0.js +2 -0
  126. package/bundled-test-harness/assets/externals-CKblKBo1.js +4393 -0
  127. package/bundled-test-harness/assets/fallback-banner-BqCrvTDt.js +24 -0
  128. package/bundled-test-harness/assets/fallback-banner-live-delete-test-D_AYMvf6.js +207 -0
  129. package/bundled-test-harness/assets/fallback-banner-test-B8Ne9a5g.js +225 -0
  130. package/bundled-test-harness/assets/fallback-banner-test-C7oaSxd1.js +53 -0
  131. package/bundled-test-harness/assets/fallback-models-test-DY-PvU9k.js +161 -0
  132. package/bundled-test-harness/assets/field-component-Bj8YthPE.js +2 -0
  133. package/bundled-test-harness/assets/field-configuration-test-B5LztQ47.js +548 -0
  134. package/bundled-test-harness/assets/field-edit-Cx_haspD.js +36 -0
  135. package/bundled-test-harness/assets/field-edit-DQZWUz3F.js +2 -0
  136. package/bundled-test-harness/assets/field-markdown-domain-test-DnqK3CrE.js +616 -0
  137. package/bundled-test-harness/assets/field-markdown-oversize-test-BEpbXIvl.js +88 -0
  138. package/bundled-test-harness/assets/field-markdown-primitives-test-BDORWoOk.js +365 -0
  139. package/bundled-test-harness/assets/field-markdown-specialized-test-BmIzadYq.js +534 -0
  140. package/bundled-test-harness/assets/field-test-helpers-CRF9-jFw.js +45 -0
  141. package/bundled-test-harness/assets/file-api-DPMJghBY.js +7 -0
  142. package/bundled-test-harness/assets/file-attachment-test-DFLXg3xV.js +796 -0
  143. package/bundled-test-harness/assets/file-chooser-panel-test-B4DzCWkt.js +153 -0
  144. package/bundled-test-harness/assets/file-chooser-test-DpjOWgpB.js +504 -0
  145. package/bundled-test-harness/assets/file-def-edit-Bstl7Kkl.js +2 -0
  146. package/bundled-test-harness/assets/file-def-edit-C1dzJxmQ.js +26 -0
  147. package/bundled-test-harness/assets/file-def-embedded-CUy4G7Vc.js +2 -0
  148. package/bundled-test-harness/assets/file-def-embedded-DJs6P5t0.js +38 -0
  149. package/bundled-test-harness/assets/file-def-fitted-BlrBFfLh.js +38 -0
  150. package/bundled-test-harness/assets/file-def-fitted-Bo5Qfkyf.js +2 -0
  151. package/bundled-test-harness/assets/file-def-isolated-BsHydanv.js +38 -0
  152. package/bundled-test-harness/assets/file-def-isolated-Dp-Lc99-.js +2 -0
  153. package/bundled-test-harness/assets/file-def-serialization-test-CISKpt_o.js +89 -0
  154. package/bundled-test-harness/assets/file-menu-items-7_ltrFZq.js +117 -0
  155. package/bundled-test-harness/assets/file-menu-items-BnRG9ydE.js +2 -0
  156. package/bundled-test-harness/assets/file-preview-stage-CV3qZpiK.js +72 -0
  157. package/bundled-test-harness/assets/file-preview-stage-DTA5X8rX.js +2 -0
  158. package/bundled-test-harness/assets/file-shell-embedded-BpmiVzIG.js +2 -0
  159. package/bundled-test-harness/assets/file-shell-embedded-CEv0-6OE.js +68 -0
  160. package/bundled-test-harness/assets/file-shell-fitted-C6k3GnMc.js +2 -0
  161. package/bundled-test-harness/assets/file-shell-fitted-iSTg3PJa.js +98 -0
  162. package/bundled-test-harness/assets/file-shell-isolated-C-pEod2J.js +195 -0
  163. package/bundled-test-harness/assets/file-shell-isolated-DI9oU7ix.js +2 -0
  164. package/bundled-test-harness/assets/file-tree-from-index-BtOOMqnb.js +151 -0
  165. package/bundled-test-harness/assets/file-tree-from-index-test-T8w3hPw_.js +96 -0
  166. package/bundled-test-harness/assets/film-5n9_gRqZ.js +4074 -0
  167. package/bundled-test-harness/assets/film-Ca2Vzlfu.js +13 -0
  168. package/bundled-test-harness/assets/film-DEvhBbBu.js +2 -0
  169. package/bundled-test-harness/assets/fitted-6OGuHgoU.js +2 -0
  170. package/bundled-test-harness/assets/fitted-B2l1jlSp.js +34 -0
  171. package/bundled-test-harness/assets/flac-meta-extractor-BoJqvmDC.js +99 -0
  172. package/bundled-test-harness/assets/font-file-def-Czzt5paT.js +64 -0
  173. package/bundled-test-harness/assets/font-meta-extractor-DQYT_e5b.js +2 -0
  174. package/bundled-test-harness/assets/font-meta-extractor-IHD-pG8V.js +303 -0
  175. package/bundled-test-harness/assets/formatted-aibot-message-test-Djsl8RzE.js +109 -0
  176. package/bundled-test-harness/assets/from-elsewhere-BXcLYxxu.js +131 -0
  177. package/bundled-test-harness/assets/frontmatter-field-CciolgL3.js +41 -0
  178. package/bundled-test-harness/assets/garbage-collection-test-BTOLAfB6.js +403 -0
  179. package/bundled-test-harness/assets/gauge-C1loqGq3.js +2 -0
  180. package/bundled-test-harness/assets/gauge-u8dxl90d.js +106 -0
  181. package/bundled-test-harness/assets/general-test-Cd5WtVvd.js +926 -0
  182. package/bundled-test-harness/assets/get-relationship-membership-state-test-DJAuhOVM.js +1308 -0
  183. package/bundled-test-harness/assets/gif-meta-extractor-tSaPtuYW.js +114 -0
  184. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-DNSy5l59.js +160 -0
  185. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-B6BbQxYq.js +74 -0
  186. package/bundled-test-harness/assets/helper-m6jA5HmU.js +478 -0
  187. package/bundled-test-harness/assets/host-submode-test-CsgdksBi.js +1243 -0
  188. package/bundled-test-harness/assets/html-file-def-yKtdMSa-.js +82 -0
  189. package/bundled-test-harness/assets/hydratable-card-CxNfbqly.js +147 -0
  190. package/bundled-test-harness/assets/hydratable-card-test-NJ4CI4ey.js +426 -0
  191. package/bundled-test-harness/assets/icons-B3SAtRoj.js +894 -0
  192. package/bundled-test-harness/assets/image-file-def-B0rpS3Yy.js +3 -0
  193. package/bundled-test-harness/assets/image-file-def-DUFmjNL8.js +65 -0
  194. package/bundled-test-harness/assets/image-olOUqgMQ.js +47 -0
  195. package/bundled-test-harness/assets/index-changes-test-D7OE-99k.js +367 -0
  196. package/bundled-test-harness/assets/index-query-engine-test-BBKqgSmg.js +2593 -0
  197. package/bundled-test-harness/assets/inspector-test-DV6Ms2uz.js +1930 -0
  198. package/bundled-test-harness/assets/instance-filter-matcher-test-Bs4kf7E8.js +788 -0
  199. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DIfgRhIN.js +475 -0
  200. package/bundled-test-harness/assets/interact-submode-setup-D4M_e580.js +566 -0
  201. package/bundled-test-harness/assets/is-component-declaration-test-jPGRTVh1.js +50 -0
  202. package/bundled-test-harness/assets/iso-bmff-DHtkSbQM.js +205 -0
  203. package/bundled-test-harness/assets/iso-bmff-zmOHoSVg.js +2 -0
  204. package/bundled-test-harness/assets/isolated-and-edit-BAnwcK1T.js +2 -0
  205. package/bundled-test-harness/assets/job-priority-header-test-7j2f3Dtl.js +81 -0
  206. package/bundled-test-harness/assets/job-scoped-instance-residency-test-DPzVQUL3.js +103 -0
  207. package/bundled-test-harness/assets/join-the-community-Ft5fjeIA.js +86 -0
  208. package/bundled-test-harness/assets/jpg-meta-extractor-Dsq6rZ8F.js +88 -0
  209. package/bundled-test-harness/assets/json-field-CxOZvp3k.js +19 -0
  210. package/bundled-test-harness/assets/json-field-ojdwGD6T.js +2 -0
  211. package/bundled-test-harness/assets/json-file-def-Da_5-zSM.js +298 -0
  212. package/bundled-test-harness/assets/last-modified-date-BnyJsc04.js +43 -0
  213. package/bundled-test-harness/assets/last-modified-date-test-DFl2mo1B.js +28 -0
  214. package/bundled-test-harness/assets/links-to-editor-DO24-71w.js +2 -0
  215. package/bundled-test-harness/assets/links-to-many-component-C7DabwAY.js +2 -0
  216. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-D4lDhvnQ.js +398 -0
  217. package/bundled-test-harness/assets/linksto-error-sentinel-test-oWgDz00K.js +238 -0
  218. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test-CpSl7zJ7.js +354 -0
  219. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-DJY3J8Xl.js +303 -0
  220. package/bundled-test-harness/assets/linksto-sentinel-reload-test-BxzfoONe.js +197 -0
  221. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test-DyE99km_.js +260 -0
  222. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-dcWAAgxt.js +196 -0
  223. package/bundled-test-harness/assets/llm-model-DrswiczZ.js +64 -0
  224. package/bundled-test-harness/assets/login-C-EIG0-Q.css +543 -0
  225. package/bundled-test-harness/assets/login-CNeL-9IC.js +408 -0
  226. package/bundled-test-harness/assets/login-error-text-test-CEH2tjNP.js +51 -0
  227. package/bundled-test-harness/assets/login-test-BpMx7qwV.js +246 -0
  228. package/bundled-test-harness/assets/m4a-meta-extractor-BJkMHUIK.js +204 -0
  229. package/bundled-test-harness/assets/main-BaUgfpPE.js +5 -0
  230. package/bundled-test-harness/assets/markdown-ByEGbwov.js +7 -0
  231. package/bundled-test-harness/assets/markdown-KJzgTg-A.js +2 -0
  232. package/bundled-test-harness/assets/markdown-editor-mode-select-BUGPXaSE.js +2 -0
  233. package/bundled-test-harness/assets/markdown-editor-mode-select-DBk8dG0O.js +54 -0
  234. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-BIlEmna9.js +470 -0
  235. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-B6rscKpk.js +447 -0
  236. package/bundled-test-harness/assets/markdown-embed-preview-test-CTQw1wq-.js +368 -0
  237. package/bundled-test-harness/assets/markdown-fallback-BVsco6gJ.js +2 -0
  238. package/bundled-test-harness/assets/markdown-fallback-test-C_CIFEzH.js +316 -0
  239. package/bundled-test-harness/assets/markdown-highlighting-test-D6YvywF5.js +244 -0
  240. package/bundled-test-harness/assets/markdown-preview-1TSMSUv0.js +64 -0
  241. package/bundled-test-harness/assets/markdown-preview-jbuUjLoD.js +72 -0
  242. package/bundled-test-harness/assets/markdown-preview-test-zuU5uoA_.js +238 -0
  243. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-CoicGRkb.js +146 -0
  244. package/bundled-test-harness/assets/menu-items-DZ_uOoYu.js +2 -0
  245. package/bundled-test-harness/assets/message-tool-test-K6LgTq5d.js +33 -0
  246. package/bundled-test-harness/assets/metadata-fields-WiOuUCDl.js +1415 -0
  247. package/bundled-test-harness/assets/metadata-fields-iu5AfQp3.js +2 -0
  248. package/bundled-test-harness/assets/midi-audio-def-CD2-4Wjx.js +52 -0
  249. package/bundled-test-harness/assets/midi-meta-extractor-CE3sLiEV.js +284 -0
  250. package/bundled-test-harness/assets/midi-meta-extractor-O7c8LHYV.js +2 -0
  251. package/bundled-test-harness/assets/migrate-skill-test-Beh-AeSN.js +161 -0
  252. package/bundled-test-harness/assets/mini-BNXINKKF.js +85 -0
  253. package/bundled-test-harness/assets/mini-C43Q4BWp.js +1519 -0
  254. package/bundled-test-harness/assets/mini-card-chooser-test-B1GMp-31.js +272 -0
  255. package/bundled-test-harness/assets/mini-file-chooser-test-CbI1vrQn.js +201 -0
  256. package/bundled-test-harness/assets/missing-template-BPhJRbDs.js +48 -0
  257. package/bundled-test-harness/assets/missing-template-DP-Pi-HQ.js +2 -0
  258. package/bundled-test-harness/assets/modal-KpPz2f8x.js +322 -0
  259. package/bundled-test-harness/assets/modal-container-0Efz_h2z.js +40 -0
  260. package/bundled-test-harness/assets/model-cost-tier-test-D-5VSjh6.js +173 -0
  261. package/bundled-test-harness/assets/module-contents-service-BRkTETb6.js +256 -0
  262. package/bundled-test-harness/assets/moment-Cln59YUK.js +3474 -0
  263. package/bundled-test-harness/assets/monaco-AbHCoDJY.js +143 -0
  264. package/bundled-test-harness/assets/monaco-test-DCPi18sy.js +100 -0
  265. package/bundled-test-harness/assets/monaco-test-waiter-lvFEYpFj.js +190 -0
  266. package/bundled-test-harness/assets/month-1eUIsvWN.js +2 -0
  267. package/bundled-test-harness/assets/month-BeUdWMWQ.js +123 -0
  268. package/bundled-test-harness/assets/month-day-Bbsd8YbR.js +192 -0
  269. package/bundled-test-harness/assets/month-day-Dks5STJu.js +2 -0
  270. package/bundled-test-harness/assets/month-year-pL_rpUhX.js +2 -0
  271. package/bundled-test-harness/assets/month-year-wH_YnYgL.js +93 -0
  272. package/bundled-test-harness/assets/mp3-meta-extractor-C3u34UHM.js +476 -0
  273. package/bundled-test-harness/assets/mp4-meta-extractor-Bj3F7dxs.js +188 -0
  274. package/bundled-test-harness/assets/multiple-stacks-test-mkNdTUMI.js +208 -0
  275. package/bundled-test-harness/assets/nested-query-field-render-test-BQLn3wg9.js +249 -0
  276. package/bundled-test-harness/assets/no-stacks-test-DpwZQAJ-.js +48 -0
  277. package/bundled-test-harness/assets/number-DZa-fHpu.js +151 -0
  278. package/bundled-test-harness/assets/number-Dvua76YP.js +3 -0
  279. package/bundled-test-harness/assets/number-field-test-BiaH2eaB.js +184 -0
  280. package/bundled-test-harness/assets/number-input-D5nDYDkK.js +82 -0
  281. package/bundled-test-harness/assets/office-extract-JzYva33g.js +27 -0
  282. package/bundled-test-harness/assets/office-extract-XMpsyYRh.js +2 -0
  283. package/bundled-test-harness/assets/ogg-meta-extractor-DJosZ9LA.js +225 -0
  284. package/bundled-test-harness/assets/on-key-BBVkS8Bi.js +472 -0
  285. package/bundled-test-harness/assets/ooxml-BlAE2w4d.js +172 -0
  286. package/bundled-test-harness/assets/ooxml-D-p8OmuM.js +2 -0
  287. package/bundled-test-harness/assets/open-image-in-new-tab-test-DWBU5pw9.js +52 -0
  288. package/bundled-test-harness/assets/operation-lowering-test-nzqprueU.js +2812 -0
  289. package/bundled-test-harness/assets/operations-CPvfTuY3.js +766 -0
  290. package/bundled-test-harness/assets/operations-invocation-test-C75T6zn3.js +523 -0
  291. package/bundled-test-harness/assets/operations-query-test-BoCszQEW.js +459 -0
  292. package/bundled-test-harness/assets/operations-test-79ipSnpM.js +2518 -0
  293. package/bundled-test-harness/assets/operations-x3Aw2Nky.js +3 -0
  294. package/bundled-test-harness/assets/operator-mode-acceptance-test-jjsYtt96.js +1188 -0
  295. package/bundled-test-harness/assets/operator-mode-card-chooser-test-hZP9gEQK.js +1036 -0
  296. package/bundled-test-harness/assets/operator-mode-links-test-DN16SuIx.js +793 -0
  297. package/bundled-test-harness/assets/operator-mode-state-service-gwiTSiWX.js +1275 -0
  298. package/bundled-test-harness/assets/operator-mode-state-service-test-Dt2qnKKP.js +206 -0
  299. package/bundled-test-harness/assets/operator-mode-test-BZnnxO9q.js +683 -0
  300. package/bundled-test-harness/assets/operator-mode-ui-test-O--qEo-y.js +1027 -0
  301. package/bundled-test-harness/assets/overlay-menu-items-test-Bl2k0aAa.js +317 -0
  302. package/bundled-test-harness/assets/overlays-CdN_JokA.js +270 -0
  303. package/bundled-test-harness/assets/overlays-clip-test-DpbR1ZTz.js +91 -0
  304. package/bundled-test-harness/assets/overlays-detached-element-test-cLgEGvMs.js +56 -0
  305. package/bundled-test-harness/assets/pane-PYdezM7g.js +330 -0
  306. package/bundled-test-harness/assets/panel-7FDqkxrr.js +474 -0
  307. package/bundled-test-harness/assets/panel-C3E0s49q.js +3540 -0
  308. package/bundled-test-harness/assets/past-sessions-test-BsjEeoze.js +321 -0
  309. package/bundled-test-harness/assets/patch-fields-test-CsixJmSr.js +1014 -0
  310. package/bundled-test-harness/assets/patch-instance-test-CBDgTi0L.js +348 -0
  311. package/bundled-test-harness/assets/pdf-file-def-9VNjnqDa.js +76 -0
  312. package/bundled-test-harness/assets/pdf-meta-extractor-BF4e5kMR.js +156 -0
  313. package/bundled-test-harness/assets/pdf-meta-extractor-D8Bxh2cc.js +2 -0
  314. package/bundled-test-harness/assets/pdf-viewer-Bu413sN8.js +112 -0
  315. package/bundled-test-harness/assets/pdf-viewer-GKDi_xmf.js +2 -0
  316. package/bundled-test-harness/assets/percentage-TOr6qK2T.js +84 -0
  317. package/bundled-test-harness/assets/permission-checking-realm-test-BRNVYszm.js +306 -0
  318. package/bundled-test-harness/assets/phone-number-D5SR8nWu.js +236 -0
  319. package/bundled-test-harness/assets/phone-number-field-test-DffwtqGd.js +73 -0
  320. package/bundled-test-harness/assets/phone-number-hf_xIVGQ.js +2 -0
  321. package/bundled-test-harness/assets/plate-Vojc88hM.js +41 -0
  322. package/bundled-test-harness/assets/plate-dTUzEMj5.js +2 -0
  323. package/bundled-test-harness/assets/player-CmRw0uM5.js +82 -0
  324. package/bundled-test-harness/assets/player-Dt85lPZl.js +2 -0
  325. package/bundled-test-harness/assets/plural-field-components-test-DNpGuH1D.js +198 -0
  326. package/bundled-test-harness/assets/png-image-def-GY7gjqya.js +48 -0
  327. package/bundled-test-harness/assets/png-meta-extractor-4pI611re.js +2 -0
  328. package/bundled-test-harness/assets/png-meta-extractor-CHp_rpAi.js +111 -0
  329. package/bundled-test-harness/assets/policy-scoped-search-test-CipPu7tY.js +339 -0
  330. package/bundled-test-harness/assets/pptx-file-def-lBBiebvn.js +60 -0
  331. package/bundled-test-harness/assets/pptx-meta-extractor-BjJYWiOJ.js +77 -0
  332. package/bundled-test-harness/assets/pptx-meta-extractor-DbT-dPRg.js +2 -0
  333. package/bundled-test-harness/assets/prerender-persistence-block-test-ClHMVvJt.js +124 -0
  334. package/bundled-test-harness/assets/prerender-serialize-cycle-test-LdqaMTK8.js +134 -0
  335. package/bundled-test-harness/assets/preview-CYlam_aW.js +74 -0
  336. package/bundled-test-harness/assets/preview-format-CiSo4kEa.js +41 -0
  337. package/bundled-test-harness/assets/preview-format-test-MsB1TOLB.js +103 -0
  338. package/bundled-test-harness/assets/process-card-B3xBGkv1.js +2 -0
  339. package/bundled-test-harness/assets/process-card-DumVcx9E.js +114 -0
  340. package/bundled-test-harness/assets/process-card-test-C44H8yVy.js +94 -0
  341. package/bundled-test-harness/assets/profile-settings-modal-ipYzrVTz.js +708 -0
  342. package/bundled-test-harness/assets/progress-circle-DJ6WSO2E.js +95 -0
  343. package/bundled-test-harness/assets/progress-circle-q358_9Sn.js +2 -0
  344. package/bundled-test-harness/assets/quarter-BjO5DlU2.js +2 -0
  345. package/bundled-test-harness/assets/quarter-_D72FwfS.js +168 -0
  346. package/bundled-test-harness/assets/query-field-membership-status-test-CzDyfK49.js +323 -0
  347. package/bundled-test-harness/assets/query-field-page-optin-test-B-x3vsmC.js +126 -0
  348. package/bundled-test-harness/assets/query-field-schema-test-DFw6KuYv.js +231 -0
  349. package/bundled-test-harness/assets/query-field-stale-prerender-test-DSQ-cv_O.js +152 -0
  350. package/bundled-test-harness/assets/query-fields-test-DQiMFRCe.js +535 -0
  351. package/bundled-test-harness/assets/rail-CNspDFyn.js +44 -0
  352. package/bundled-test-harness/assets/rail-D2YcQ0VP.js +2 -0
  353. package/bundled-test-harness/assets/realm-82Z5RUM_.js +95 -0
  354. package/bundled-test-harness/assets/realm-config-SgrwqjRu.js +844 -0
  355. package/bundled-test-harness/assets/realm-config-policy-standing-test-C6sQNk2u.js +290 -0
  356. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-DcYXBlvi.js +274 -0
  357. package/bundled-test-harness/assets/realm-config-settings-test-DblJv06X.js +187 -0
  358. package/bundled-test-harness/assets/realm-dropdown-CDvL8k3B.js +560 -0
  359. package/bundled-test-harness/assets/realm-et890flh.js +2 -0
  360. package/bundled-test-harness/assets/realm-field-test-pBK_x-Xw.js +100 -0
  361. package/bundled-test-harness/assets/realm-indexing-test-DSFn2F8F.js +4380 -0
  362. package/bundled-test-harness/assets/realm-policy-test-DYnLqzTS.js +1141 -0
  363. package/bundled-test-harness/assets/realm-test-DOZT2EG5.js +2363 -0
  364. package/bundled-test-harness/assets/realm-url-tooltip-qaXTjRb-.js +56 -0
  365. package/bundled-test-harness/assets/realm-url-tooltip-test-DGTEeLH9.js +78 -0
  366. package/bundled-test-harness/assets/reasoning-test-BRkhvYjr.js +234 -0
  367. package/bundled-test-harness/assets/recent-colors-addon-BreXcpg8.js +2 -0
  368. package/bundled-test-harness/assets/recent-colors-addon-CmCkbJ2_.js +61 -0
  369. package/bundled-test-harness/assets/relationship-loading-state-test-B6UGYKzG.js +290 -0
  370. package/bundled-test-harness/assets/relative-time-BjHvL023.js +2 -0
  371. package/bundled-test-harness/assets/relative-time-ChYKOMIM.js +129 -0
  372. package/bundled-test-harness/assets/remix-card-test-CpV0kKfq.js +58 -0
  373. package/bundled-test-harness/assets/rendered-markdown-CJa7IzCC.js +263 -0
  374. package/bundled-test-harness/assets/rendered-markdown-test-CVKsHS4P.js +587 -0
  375. package/bundled-test-harness/assets/resident-instance-reuse-test-jQfW1NMn.js +82 -0
  376. package/bundled-test-harness/assets/response-field-B2-daCl2.js +38 -0
  377. package/bundled-test-harness/assets/result-tile-BSg4mzbc.js +140 -0
  378. package/bundled-test-harness/assets/rich-markdown-BtP1yamM.js +2 -0
  379. package/bundled-test-harness/assets/rich-markdown-C6rQUngb.js +218 -0
  380. package/bundled-test-harness/assets/rich-markdown-field-test-9yB6ykCe.js +1647 -0
  381. package/bundled-test-harness/assets/room-C7tKd02X.js +1008 -0
  382. package/bundled-test-harness/assets/room-message-test-DsMmRYpV.js +445 -0
  383. package/bundled-test-harness/assets/room-test-golI1H61.js +95 -0
  384. package/bundled-test-harness/assets/run-realm-code-CbXk6bnK.js +1600 -0
  385. package/bundled-test-harness/assets/run-realm-code-test-B9JeesaW.js +2468 -0
  386. package/bundled-test-harness/assets/schema-generation-test-uLLGm5Vh.js +28 -0
  387. package/bundled-test-harness/assets/score-BQhCQdUP.js +2 -0
  388. package/bundled-test-harness/assets/score-CoWEzENH.js +100 -0
  389. package/bundled-test-harness/assets/scrolling-test-WHWEkKeZ.js +384 -0
  390. package/bundled-test-harness/assets/search-BkQYpQDY.js +605 -0
  391. package/bundled-test-harness/assets/search-adorn-test-CW92JPOk.js +136 -0
  392. package/bundled-test-harness/assets/search-entries-BU4w6Ymc.js +472 -0
  393. package/bundled-test-harness/assets/search-entries-result-test-9eydsDtD.js +234 -0
  394. package/bundled-test-harness/assets/search-entries-test-ByUREx0G.js +1486 -0
  395. package/bundled-test-harness/assets/search-result-header-UFkdo0Bx.js +128 -0
  396. package/bundled-test-harness/assets/search-results-DrHTuVRZ.js +266 -0
  397. package/bundled-test-harness/assets/search-results-test-krtQQM57.js +578 -0
  398. package/bundled-test-harness/assets/search-selection-menu-test-DoqSbez7.js +108 -0
  399. package/bundled-test-harness/assets/search-sheet-persistence-test-4ZPaEY-y.js +131 -0
  400. package/bundled-test-harness/assets/search-test-BYpq32RM.js +2241 -0
  401. package/bundled-test-harness/assets/searchable-BXw4T11q.js +192 -0
  402. package/bundled-test-harness/assets/searchable-CVvPDA3Q.js +2 -0
  403. package/bundled-test-harness/assets/searchable-option-test-BhLFI4ei.js +322 -0
  404. package/bundled-test-harness/assets/searchable-search-doc-test-DrNLCF73.js +1271 -0
  405. package/bundled-test-harness/assets/secure-sign-in-VNQhe0ae.js +130 -0
  406. package/bundled-test-harness/assets/secure-sign-in-Za8PX9cD.css +24 -0
  407. package/bundled-test-harness/assets/secure-sign-in-aunWHCrB.js +73 -0
  408. package/bundled-test-harness/assets/secure-sign-in-test-BcY1TcNd.js +32 -0
  409. package/bundled-test-harness/assets/secure-sign-in-test-DRdz89BT.js +245 -0
  410. package/bundled-test-harness/assets/sending-test-mbHpGZUu.js +576 -0
  411. package/bundled-test-harness/assets/serialization-rri-form-audit-test-nypV9J82.js +136 -0
  412. package/bundled-test-harness/assets/serialization-test-aLwrFv4d.js +8758 -0
  413. package/bundled-test-harness/assets/setup-Dgn0s6Zk.js +772 -0
  414. package/bundled-test-harness/assets/shared-link-target-reuse-test-D9MR2UNc.js +207 -0
  415. package/bundled-test-harness/assets/show-card-Dwfk332M.js +67 -0
  416. package/bundled-test-harness/assets/show-card-test-CRPwwJvc.js +365 -0
  417. package/bundled-test-harness/assets/show-file-DLdFPHMR.js +34 -0
  418. package/bundled-test-harness/assets/signed-capture-DUR9PohQ.js +204 -0
  419. package/bundled-test-harness/assets/signed-capture-link-test-DfTAB6OT.js +132 -0
  420. package/bundled-test-harness/assets/single-stack-test-Crr_8nti.js +652 -0
  421. package/bundled-test-harness/assets/skill-DQ00VonZ.js +3 -0
  422. package/bundled-test-harness/assets/skill-reference-LEitQV9i.js +112 -0
  423. package/bundled-test-harness/assets/skill-yZXS1VHQ.js +76 -0
  424. package/bundled-test-harness/assets/skills-test-D3-C-Dbm.js +648 -0
  425. package/bundled-test-harness/assets/slider-picker-B6AxKL2j.js +245 -0
  426. package/bundled-test-harness/assets/slider-picker-C4Tc5o-s.js +2 -0
  427. package/bundled-test-harness/assets/spec-Cl_LB6nC.js +602 -0
  428. package/bundled-test-harness/assets/spinner-BHFM7zcR.js +39 -0
  429. package/bundled-test-harness/assets/spinner-DvAvsyDT.css +21 -0
  430. package/bundled-test-harness/assets/store-BV6WX8oV.js +2205 -0
  431. package/bundled-test-harness/assets/store-module-rebuild-test-HyphFJiF.js +454 -0
  432. package/bundled-test-harness/assets/store-search-test-nUeJ5opb.js +175 -0
  433. package/bundled-test-harness/assets/store-test-BebUIJAg.js +3460 -0
  434. package/bundled-test-harness/assets/string-BHZZwNlZ.js +9 -0
  435. package/bundled-test-harness/assets/submode-switcher-D-U9cXo0.js +169 -0
  436. package/bundled-test-harness/assets/svg-meta-extractor-BsG4w2nX.js +42 -0
  437. package/bundled-test-harness/assets/swatches-picker-4vFztxHo.js +33 -0
  438. package/bundled-test-harness/assets/swatches-picker-C7RE7uJ8.js +2 -0
  439. package/bundled-test-harness/assets/switch-submode-CuA0Zfjn.js +79 -0
  440. package/bundled-test-harness/assets/switch-submode-test-i1Qic_Cp.js +168 -0
  441. package/bundled-test-harness/assets/tag-CZNs3DPN.js +105 -0
  442. package/bundled-test-harness/assets/tests-BneuP252.js +3523 -0
  443. package/bundled-test-harness/assets/text-area-DAShQQBe.js +9 -0
  444. package/bundled-test-harness/assets/text-file-def-D2Rs6nS1.js +151 -0
  445. package/bundled-test-harness/assets/text-input-validator-test-C9IG-1GZ.js +156 -0
  446. package/bundled-test-harness/assets/theme-Dm8LWaRK.js +9 -0
  447. package/bundled-test-harness/assets/theme-card-test-Cbb6tAap.js +621 -0
  448. package/bundled-test-harness/assets/theme-scheme-island-test-DOVLakx3.js +264 -0
  449. package/bundled-test-harness/assets/three-d-model-def-DWSPQGgD.js +70 -0
  450. package/bundled-test-harness/assets/time--_Txqya1.js +126 -0
  451. package/bundled-test-harness/assets/time-DKD7Bdjd.js +2 -0
  452. package/bundled-test-harness/assets/time-slots-BZaugjq_.js +2 -0
  453. package/bundled-test-harness/assets/time-slots-C85M0rWl.js +85 -0
  454. package/bundled-test-harness/assets/timeline-B3KGDm3M.js +2 -0
  455. package/bundled-test-harness/assets/timeline-BMwgaZZu.js +59 -0
  456. package/bundled-test-harness/assets/to-device-streaming-test-CMp5bFiz.js +163 -0
  457. package/bundled-test-harness/assets/token-usage-test-CXA0b8Ep.js +166 -0
  458. package/bundled-test-harness/assets/tool-field-BGLelnsr.js +94 -0
  459. package/bundled-test-harness/assets/tool-field-BOFuDDt3.js +2 -0
  460. package/bundled-test-harness/assets/tools-CTjy7Aub.js +725 -0
  461. package/bundled-test-harness/assets/tools-calling-test--JR-7AK7.js +200 -0
  462. package/bundled-test-harness/assets/tools-test-6yAW3W5I.js +2820 -0
  463. package/bundled-test-harness/assets/tools-test-DhpMUQkz.js +1624 -0
  464. package/bundled-test-harness/assets/ts-file-def-CDbf8aw2.js +159 -0
  465. package/bundled-test-harness/assets/update-room-skills-test-DoKsS_1C.js +240 -0
  466. package/bundled-test-harness/assets/url-D0ooeJxC.js +2 -0
  467. package/bundled-test-harness/assets/url-mFskVPSX.js +96 -0
  468. package/bundled-test-harness/assets/video-file-def-AcmWqzev.js +76 -0
  469. package/bundled-test-harness/assets/wav-meta-extractor-CbTLruQf.js +368 -0
  470. package/bundled-test-harness/assets/webm-meta-extractor-C9JH-CMX.js +178 -0
  471. package/bundled-test-harness/assets/webp-meta-extractor-C6sHm4J7.js +98 -0
  472. package/bundled-test-harness/assets/website-Bxuk_OmR.js +92 -0
  473. package/bundled-test-harness/assets/week-Bxssxce7.js +2 -0
  474. package/bundled-test-harness/assets/week-DQLj9974.js +111 -0
  475. package/bundled-test-harness/assets/welcome-to-boxel-BH82RsW5.js +172 -0
  476. package/bundled-test-harness/assets/workspace-DJ_s2x4g.js +614 -0
  477. package/bundled-test-harness/assets/workspace-a11y-test-BJbZNgoP.js +197 -0
  478. package/bundled-test-harness/assets/workspace-behavior-test-BLBARTfb.js +200 -0
  479. package/bundled-test-harness/assets/workspace-chooser-BpmlVrVn.js +2219 -0
  480. package/bundled-test-harness/assets/workspace-chooser-CqLR2Dzh.css +1296 -0
  481. package/bundled-test-harness/assets/workspace-chooser-catalog-order-test-CmAVNAWC.js +36 -0
  482. package/bundled-test-harness/assets/workspace-chooser-unreachable-notice-test-DEfG7Uh9.js +60 -0
  483. package/bundled-test-harness/assets/workspace-delete-multiple-test-DE7Z8ooj.js +212 -0
  484. package/bundled-test-harness/assets/workspace-delete-summary-test-CwtG_zLH.js +63 -0
  485. package/bundled-test-harness/assets/workspace-timestamp-labels-test-DFAaRmJW.js +58 -0
  486. package/bundled-test-harness/assets/xlsx-file-def-DcvaRYnZ.js +60 -0
  487. package/bundled-test-harness/assets/xlsx-meta-extractor-0RlViVaf.js +101 -0
  488. package/bundled-test-harness/assets/xlsx-meta-extractor-BH30Vuem.js +2 -0
  489. package/bundled-test-harness/assets/year-B_MBk_hE.js +78 -0
  490. package/bundled-test-harness/assets/year-hSpccI9L.js +2 -0
  491. package/bundled-test-harness/assets/zip-file-def-c84iddi9.js +288 -0
  492. package/bundled-test-harness/index.html +78 -68
  493. package/bundled-test-harness/tests/index.html +78 -68
  494. package/bundled-types/host-app/components/matrix/account-switch-failed.gts +2 -2
  495. package/bundled-types/host-app/components/matrix/auth.gts +2 -2
  496. package/bundled-types/host-app/components/matrix/cli-auth.gts +7 -6
  497. package/bundled-types/host-app/components/matrix/forgot-password.gts +43 -129
  498. package/bundled-types/host-app/components/matrix/login.gts +15 -118
  499. package/bundled-types/host-app/components/matrix/register-user.gts +45 -226
  500. package/bundled-types/host-app/components/matrix/secure-sign-in.gts +235 -0
  501. package/bundled-types/host-app/components/operator-mode/container.gts +13 -1
  502. package/bundled-types/host-app/components/operator-mode/profile-info-popover.gts +1 -1
  503. package/bundled-types/host-app/config/environment.ts +1 -1
  504. package/bundled-types/host-app/lib/secure-sign-in.ts +130 -0
  505. package/bundled-types/host-app/services/matrix-service.ts +46 -0
  506. package/bundled-types/host-app/services/monaco-service.ts +0 -5
  507. package/bundled-types/host-app/utils/login-token.ts +23 -10
  508. package/dist/api.js +1 -1
  509. package/dist/index.js +289 -285
  510. package/package.json +1 -1
  511. package/src/build-program.ts +6 -2
  512. package/src/commands/profile.ts +72 -3
  513. package/src/lib/profile-manager.ts +5 -1
  514. package/src/lib/secure-session.ts +29 -0
  515. package/src/lib/sso-login.ts +94 -15
  516. package/bundled-test-harness/assets/account-switch-failed-B3pr_iC3.js +0 -32
  517. package/bundled-test-harness/assets/account-switch-failed-DTGZZo-G.css +0 -61
  518. package/bundled-test-harness/assets/account-switch-failed-test-9ENVgvlx.js +0 -45
  519. package/bundled-test-harness/assets/add-workspace-BAbk0250.js +0 -141
  520. package/bundled-test-harness/assets/add-workspace-test-ChAja_t-.js +0 -72
  521. package/bundled-test-harness/assets/advanced-color-picker-C-xBFJ2S.js +0 -504
  522. package/bundled-test-harness/assets/advanced-color-picker-bWAmCT-8.js +0 -2
  523. package/bundled-test-harness/assets/ai-assistant-test-BJ9yetuC.js +0 -2211
  524. package/bundled-test-harness/assets/ai-module-creation-test-Bw3TKS9d.js +0 -151
  525. package/bundled-test-harness/assets/aibot-message-DkgHT6eJ.js +0 -465
  526. package/bundled-test-harness/assets/app-DW5QjtRp.js +0 -22816
  527. package/bundled-test-harness/assets/app-yCDjO4mk.css +0 -2718
  528. package/bundled-test-harness/assets/audio-file-def-bJ3cXVmC.js +0 -133
  529. package/bundled-test-harness/assets/avif-meta-extractor-CrSDfYEt.js +0 -162
  530. package/bundled-test-harness/assets/base64-image-C7UBjK5W.js +0 -262
  531. package/bundled-test-harness/assets/base64-image-CjWpxROT.js +0 -2
  532. package/bundled-test-harness/assets/big-integer-BBql7oGZ.js +0 -89
  533. package/bundled-test-harness/assets/big-integer-B_TrzRy_.js +0 -2
  534. package/bundled-test-harness/assets/binary-upload-dedupe-test-BiX8kS7D.js +0 -308
  535. package/bundled-test-harness/assets/boolean-9LNUUTfw.js +0 -2
  536. package/bundled-test-harness/assets/boolean-BAmK01TF.js +0 -94
  537. package/bundled-test-harness/assets/brand-functional-palette-CFuoS-LS.js +0 -137
  538. package/bundled-test-harness/assets/brand-logo-By89eknI.js +0 -295
  539. package/bundled-test-harness/assets/broken-link-template-test-odBriDSP.js +0 -192
  540. package/bundled-test-harness/assets/bundled-base-CLQkkmN4.js +0 -254
  541. package/bundled-test-harness/assets/bundled-base-modules-test-BYrTaTwa.js +0 -54
  542. package/bundled-test-harness/assets/buried-stack-item-scroll-test-DU4bM5nd.js +0 -236
  543. package/bundled-test-harness/assets/bxl-expression-test-Cs9JaZbC.js +0 -250
  544. package/bundled-test-harness/assets/can-invoke-test-ccMc06BU.js +0 -401
  545. package/bundled-test-harness/assets/card-api-Bn65NUT0.js +0 -8
  546. package/bundled-test-harness/assets/card-api-test-COrFXu2i.js +0 -198
  547. package/bundled-test-harness/assets/card-api-u1pOrwS6.js +0 -4393
  548. package/bundled-test-harness/assets/card-basics-test-D4rn3iN-.js +0 -5364
  549. package/bundled-test-harness/assets/card-chooser-paging-test-bZhdrUXt.js +0 -235
  550. package/bundled-test-harness/assets/card-chooser-test-D9w1duob.js +0 -393
  551. package/bundled-test-harness/assets/card-collection-ClCV-__1.js +0 -118
  552. package/bundled-test-harness/assets/card-context-search-results-H_rN3Upz.js +0 -30
  553. package/bundled-test-harness/assets/card-context-search-results-test-jciyaouV.js +0 -184
  554. package/bundled-test-harness/assets/card-def-field-def-relationships-test-BVZoQzM8.js +0 -562
  555. package/bundled-test-harness/assets/card-delete-test-CuLcZFnY.js +0 -466
  556. package/bundled-test-harness/assets/card-error-DIOivSkD.js +0 -72
  557. package/bundled-test-harness/assets/card-error-awaiting-index-test-JMwcRONq.js +0 -53
  558. package/bundled-test-harness/assets/card-error-detail-96jWBx6B.js +0 -271
  559. package/bundled-test-harness/assets/card-info-BxPtwG1h.js +0 -2
  560. package/bundled-test-harness/assets/card-list-B34qY3io.js +0 -2
  561. package/bundled-test-harness/assets/card-list-BpCaKkZJ.js +0 -202
  562. package/bundled-test-harness/assets/card-resource-DcPbIwH9.js +0 -86
  563. package/bundled-test-harness/assets/cards-grid-CTN8nBT_.js +0 -344
  564. package/bundled-test-harness/assets/cards-grid-Cx44vL-M.js +0 -2
  565. package/bundled-test-harness/assets/cards-grid-layout-BdL0Uzxl.js +0 -111
  566. package/bundled-test-harness/assets/cards-grid-layout-Dn8Yb4ma.js +0 -2
  567. package/bundled-test-harness/assets/check-correctness-test-BfMV-MC0.js +0 -554
  568. package/bundled-test-harness/assets/clip-CK6mVuyN.js +0 -92
  569. package/bundled-test-harness/assets/clip-CfXD1JTr.js +0 -2
  570. package/bundled-test-harness/assets/code-ref-85Bih6Zl.js +0 -138
  571. package/bundled-test-harness/assets/code-ref-DATHaoyt.js +0 -2
  572. package/bundled-test-harness/assets/code-submode-availability-test-DLYlx0wo.js +0 -198
  573. package/bundled-test-harness/assets/code-submode-test-CDIi7MjD.js +0 -1824
  574. package/bundled-test-harness/assets/codeblocks-test-CNPyTvuv.js +0 -418
  575. package/bundled-test-harness/assets/codemirror-editor-BPOPTR-f.js +0 -2
  576. package/bundled-test-harness/assets/codemirror-editor-DPhG0pec.js +0 -701
  577. package/bundled-test-harness/assets/codemirror-embed-toolbar-test-Dk5lFOUq.js +0 -366
  578. package/bundled-test-harness/assets/color-BxN5gRSg.js +0 -65
  579. package/bundled-test-harness/assets/color-CrunRcis.js +0 -2
  580. package/bundled-test-harness/assets/color-field-test-COjFIpXV.js +0 -212
  581. package/bundled-test-harness/assets/color-picker-field-C-GS1CIw.js +0 -139
  582. package/bundled-test-harness/assets/color-picker-field-D3RXhbCK.js +0 -2
  583. package/bundled-test-harness/assets/color-wheel-picker-Bz8cBmf4.js +0 -283
  584. package/bundled-test-harness/assets/color-wheel-picker-DrwPrB8B.js +0 -2
  585. package/bundled-test-harness/assets/command-data-BxXgtNBf.js +0 -2
  586. package/bundled-test-harness/assets/command-data-ZdkcpEgG.js +0 -95
  587. package/bundled-test-harness/assets/compaction-test-DS7DTGT_.js +0 -150
  588. package/bundled-test-harness/assets/components-CbCTWAON.js +0 -17777
  589. package/bundled-test-harness/assets/computed-test-D_OrXDtR.js +0 -1320
  590. package/bundled-test-harness/assets/container-DDolu1gk.js +0 -11109
  591. package/bundled-test-harness/assets/container-DndcCIMv.css +0 -5169
  592. package/bundled-test-harness/assets/contains-many-component-BtgnAXih.js +0 -2
  593. package/bundled-test-harness/assets/contrast-checker-addon-kwtLKWdL.js +0 -2
  594. package/bundled-test-harness/assets/contrast-checker-addon-zFY5cen1.js +0 -71
  595. package/bundled-test-harness/assets/convert-to-class-name-test-BcGWl2K1.js +0 -17
  596. package/bundled-test-harness/assets/coordinate-D72EF1Pl.js +0 -48
  597. package/bundled-test-harness/assets/copy-file-to-realm-test-CYoDX4YV.js +0 -148
  598. package/bundled-test-harness/assets/country-B-iIe5v8.js +0 -199
  599. package/bundled-test-harness/assets/create-file-modal-PpvMksjR.js +0 -570
  600. package/bundled-test-harness/assets/create-listing-modal-test-CQtEf_UD.js +0 -273
  601. package/bundled-test-harness/assets/create-listing-pr-request-test-CDtKWyfk.js +0 -117
  602. package/bundled-test-harness/assets/create-spec-test-Cbqk8I9T.js +0 -256
  603. package/bundled-test-harness/assets/create-specs-CZg2cpnh.js +0 -215
  604. package/bundled-test-harness/assets/create-submission-workflow-test-CYrxF7bg.js +0 -132
  605. package/bundled-test-harness/assets/credential-fields-test-Di4jCJgU.js +0 -157
  606. package/bundled-test-harness/assets/css-value-CceJyI5o.js +0 -48
  607. package/bundled-test-harness/assets/csv-file-def-DJL2aZI9.js +0 -277
  608. package/bundled-test-harness/assets/currency-Bn5WIqzF.js +0 -134
  609. package/bundled-test-harness/assets/date-XI2CVYA2.js +0 -2
  610. package/bundled-test-harness/assets/date-h83UJcFR.js +0 -183
  611. package/bundled-test-harness/assets/date-time-fields-test-Cterr2mj.js +0 -359
  612. package/bundled-test-harness/assets/datetime-DadI80tC.js +0 -201
  613. package/bundled-test-harness/assets/datetime-Dpb_Sejj.js +0 -2
  614. package/bundled-test-harness/assets/datetime-stamp-C4vv397u.js +0 -81
  615. package/bundled-test-harness/assets/datetime-stamp-DIsJdQux.js +0 -2
  616. package/bundled-test-harness/assets/day-C4pZoGNM.js +0 -113
  617. package/bundled-test-harness/assets/day-D0goBhKb.js +0 -2
  618. package/bundled-test-harness/assets/debug-message-test-CV0sj-fl.js +0 -117
  619. package/bundled-test-harness/assets/dist-CAIttNZm.js +0 -1710
  620. package/bundled-test-harness/assets/dist-CLbqnmnm.js +0 -389
  621. package/bundled-test-harness/assets/dist-qkBOmIQy.js +0 -323
  622. package/bundled-test-harness/assets/docx-file-def-hz2tVQKf.js +0 -60
  623. package/bundled-test-harness/assets/docx-meta-extractor-CeRshlxL.js +0 -60
  624. package/bundled-test-harness/assets/docx-meta-extractor-muK5CKF3.js +0 -2
  625. package/bundled-test-harness/assets/duration-BYx1dLfm.js +0 -2
  626. package/bundled-test-harness/assets/duration-FAmTFeUa.js +0 -184
  627. package/bundled-test-harness/assets/email-D-bFy_C1.js +0 -80
  628. package/bundled-test-harness/assets/email-field-test-CY9K2zur.js +0 -75
  629. package/bundled-test-harness/assets/email-j4DZNH2-.js +0 -2
  630. package/bundled-test-harness/assets/enum-B7_baAn_.js +0 -167
  631. package/bundled-test-harness/assets/enum-BQqNzVQS.js +0 -2
  632. package/bundled-test-harness/assets/enum-field-test-BJ9Epz15.js +0 -953
  633. package/bundled-test-harness/assets/error-display-test-CbDWjJ2F.js +0 -343
  634. package/bundled-test-harness/assets/ethereum-address-BOLEnKsm.js +0 -78
  635. package/bundled-test-harness/assets/ethereum-address-s3Kvb2wG.js +0 -2
  636. package/bundled-test-harness/assets/expiration-warning-BaIP1MOZ.js +0 -2
  637. package/bundled-test-harness/assets/expiration-warning-gjEtxPk0.js +0 -90
  638. package/bundled-test-harness/assets/externals-Bih8ejPS.js +0 -4393
  639. package/bundled-test-harness/assets/fallback-banner-MlImHjSD.js +0 -24
  640. package/bundled-test-harness/assets/fallback-banner-live-delete-test-Bm7IKXPf.js +0 -207
  641. package/bundled-test-harness/assets/fallback-banner-test-C7TGA0Ob.js +0 -53
  642. package/bundled-test-harness/assets/fallback-banner-test-lvuaVRXu.js +0 -225
  643. package/bundled-test-harness/assets/fallback-models-test-Dy7iIKUS.js +0 -161
  644. package/bundled-test-harness/assets/field-component-DBoOxTke.js +0 -2
  645. package/bundled-test-harness/assets/field-configuration-test-DnAnzyC-.js +0 -548
  646. package/bundled-test-harness/assets/field-edit-DdJ8Akso.js +0 -2
  647. package/bundled-test-harness/assets/field-edit-XAop92l8.js +0 -36
  648. package/bundled-test-harness/assets/field-markdown-domain-test-cZCqbcjj.js +0 -616
  649. package/bundled-test-harness/assets/field-markdown-oversize-test-BuATetVz.js +0 -88
  650. package/bundled-test-harness/assets/field-markdown-primitives-test-BsubQfhv.js +0 -365
  651. package/bundled-test-harness/assets/field-markdown-specialized-test-4eNLiYpF.js +0 -534
  652. package/bundled-test-harness/assets/field-test-helpers-9I7cHnaU.js +0 -45
  653. package/bundled-test-harness/assets/file-api-CC86I7Er.js +0 -7
  654. package/bundled-test-harness/assets/file-attachment-test-o9191GMb.js +0 -796
  655. package/bundled-test-harness/assets/file-chooser-panel-test-C8aZuJlk.js +0 -153
  656. package/bundled-test-harness/assets/file-chooser-test-B0Tn8CCR.js +0 -504
  657. package/bundled-test-harness/assets/file-def-edit-BSiF2Lje.js +0 -2
  658. package/bundled-test-harness/assets/file-def-edit-C5TYBp_q.js +0 -26
  659. package/bundled-test-harness/assets/file-def-embedded-BLVTCiVB.js +0 -2
  660. package/bundled-test-harness/assets/file-def-embedded-Bep4iD6s.js +0 -38
  661. package/bundled-test-harness/assets/file-def-fitted-BTs-AS78.js +0 -2
  662. package/bundled-test-harness/assets/file-def-fitted-DcPitdYu.js +0 -38
  663. package/bundled-test-harness/assets/file-def-isolated-Kg1YVhm-.js +0 -38
  664. package/bundled-test-harness/assets/file-def-isolated-tK5JWCam.js +0 -2
  665. package/bundled-test-harness/assets/file-def-serialization-test-D4wnd5XK.js +0 -89
  666. package/bundled-test-harness/assets/file-menu-items-CH4-naSK.js +0 -117
  667. package/bundled-test-harness/assets/file-menu-items-emUxx3ZI.js +0 -2
  668. package/bundled-test-harness/assets/file-preview-stage-B1McIWwu.js +0 -2
  669. package/bundled-test-harness/assets/file-preview-stage-BgZLNMN4.js +0 -72
  670. package/bundled-test-harness/assets/file-shell-embedded-BmfuwWfU.js +0 -2
  671. package/bundled-test-harness/assets/file-shell-embedded-zh8CJanA.js +0 -68
  672. package/bundled-test-harness/assets/file-shell-fitted-DSFUNRGJ.js +0 -2
  673. package/bundled-test-harness/assets/file-shell-fitted-DXKDH0fn.js +0 -98
  674. package/bundled-test-harness/assets/file-shell-isolated-0F1MFv4q.js +0 -2
  675. package/bundled-test-harness/assets/file-shell-isolated-DduZZzmi.js +0 -195
  676. package/bundled-test-harness/assets/file-tree-from-index-BzDvvUHy.js +0 -151
  677. package/bundled-test-harness/assets/file-tree-from-index-test-D0hfI4a1.js +0 -96
  678. package/bundled-test-harness/assets/film-BN_HVXBU.js +0 -13
  679. package/bundled-test-harness/assets/film-CKkbUi0L.js +0 -2
  680. package/bundled-test-harness/assets/film-CMNJITZ-.js +0 -4074
  681. package/bundled-test-harness/assets/fitted-CAvdcKpu.js +0 -34
  682. package/bundled-test-harness/assets/fitted-CbKOwd1u.js +0 -2
  683. package/bundled-test-harness/assets/flac-meta-extractor-e8qajPSl.js +0 -99
  684. package/bundled-test-harness/assets/font-file-def-9atde5W8.js +0 -64
  685. package/bundled-test-harness/assets/font-meta-extractor-IralDC8M.js +0 -303
  686. package/bundled-test-harness/assets/font-meta-extractor-zPBVOfoR.js +0 -2
  687. package/bundled-test-harness/assets/formatted-aibot-message-test-CWOiZUng.js +0 -109
  688. package/bundled-test-harness/assets/from-elsewhere-ChxbtsBa.js +0 -131
  689. package/bundled-test-harness/assets/frontmatter-field-cdig7KR9.js +0 -41
  690. package/bundled-test-harness/assets/garbage-collection-test-Dg-ww_Sb.js +0 -403
  691. package/bundled-test-harness/assets/gauge-B45nLOGe.js +0 -106
  692. package/bundled-test-harness/assets/gauge-BK-768BM.js +0 -2
  693. package/bundled-test-harness/assets/general-test-D7cn7PUr.js +0 -926
  694. package/bundled-test-harness/assets/get-relationship-membership-state-test-Skmj9V6y.js +0 -1308
  695. package/bundled-test-harness/assets/gif-meta-extractor-BychhK9q.js +0 -114
  696. package/bundled-test-harness/assets/glimmer-motion-and-choreo-in-cards-test-C09YUmk4.js +0 -160
  697. package/bundled-test-harness/assets/glimmer-motion-and-choreo-test-DYskx_Kk.js +0 -74
  698. package/bundled-test-harness/assets/helper-BHX0HLF2.js +0 -478
  699. package/bundled-test-harness/assets/host-submode-test-Clw_QnvF.js +0 -1243
  700. package/bundled-test-harness/assets/html-file-def-C0P9giwU.js +0 -82
  701. package/bundled-test-harness/assets/hydratable-card-DnjrxKsT.js +0 -147
  702. package/bundled-test-harness/assets/hydratable-card-test-BAmWHfv1.js +0 -426
  703. package/bundled-test-harness/assets/icons-DBXBZgLe.js +0 -894
  704. package/bundled-test-harness/assets/image-Cip6ojDd.js +0 -47
  705. package/bundled-test-harness/assets/image-file-def-BdQxjZcN.js +0 -65
  706. package/bundled-test-harness/assets/image-file-def-DP4aqWcS.js +0 -3
  707. package/bundled-test-harness/assets/index-changes-test-D8b_56Ke.js +0 -367
  708. package/bundled-test-harness/assets/index-query-engine-test-CCyaUwMX.js +0 -2593
  709. package/bundled-test-harness/assets/inspector-test-BJTVGdOO.js +0 -1930
  710. package/bundled-test-harness/assets/instance-filter-matcher-test-DjsPrXL7.js +0 -788
  711. package/bundled-test-harness/assets/interact-submode-creation-and-permissions-test-DSqM0vxh.js +0 -475
  712. package/bundled-test-harness/assets/interact-submode-setup-DF31UMX-.js +0 -566
  713. package/bundled-test-harness/assets/is-component-declaration-test-Did47eG9.js +0 -50
  714. package/bundled-test-harness/assets/iso-bmff-LuWkGL__.js +0 -205
  715. package/bundled-test-harness/assets/iso-bmff-_flO6c20.js +0 -2
  716. package/bundled-test-harness/assets/isolated-and-edit-frocLHin.js +0 -2
  717. package/bundled-test-harness/assets/job-priority-header-test-DHLAXfp7.js +0 -81
  718. package/bundled-test-harness/assets/job-scoped-instance-residency-test-C1Bt5j98.js +0 -103
  719. package/bundled-test-harness/assets/join-the-community-BBUSO2cs.js +0 -86
  720. package/bundled-test-harness/assets/jpg-meta-extractor-CoybO4Hq.js +0 -88
  721. package/bundled-test-harness/assets/json-field-8sdH5RQb.js +0 -2
  722. package/bundled-test-harness/assets/json-field-BDD3iTUh.js +0 -19
  723. package/bundled-test-harness/assets/json-file-def-BKibsfc6.js +0 -298
  724. package/bundled-test-harness/assets/last-modified-date-CR5jru2m.js +0 -43
  725. package/bundled-test-harness/assets/last-modified-date-test-jJ00YdTm.js +0 -28
  726. package/bundled-test-harness/assets/links-to-editor-rDoCYaN-.js +0 -2
  727. package/bundled-test-harness/assets/links-to-many-component-BqZT88Fb.js +0 -2
  728. package/bundled-test-harness/assets/linksto-broken-link-placeholder-test-Cp1Eb_4U.js +0 -398
  729. package/bundled-test-harness/assets/linksto-error-sentinel-test-Bddavnh_.js +0 -238
  730. package/bundled-test-harness/assets/linksto-many-broken-link-placeholder-test-c5WegXnR.js +0 -354
  731. package/bundled-test-harness/assets/linksto-many-per-slot-access-test-CWskzfGW.js +0 -303
  732. package/bundled-test-harness/assets/linksto-sentinel-reload-test-ByeVNhr8.js +0 -197
  733. package/bundled-test-harness/assets/linksto-sentinel-roundtrip-test-DP26i6Gb.js +0 -260
  734. package/bundled-test-harness/assets/linksto-singular-js-access-contract-test-fDUXx8tO.js +0 -196
  735. package/bundled-test-harness/assets/llm-model-BcLEkTV7.js +0 -64
  736. package/bundled-test-harness/assets/login-CeuuNVvU.css +0 -139
  737. package/bundled-test-harness/assets/login-DV0WlJv-.js +0 -348
  738. package/bundled-test-harness/assets/login-error-text-test-BMGY_9gW.js +0 -51
  739. package/bundled-test-harness/assets/login-test-CL9YpMH5.js +0 -246
  740. package/bundled-test-harness/assets/m4a-meta-extractor-CHO1JQtb.js +0 -204
  741. package/bundled-test-harness/assets/main-CPLT8JNu.js +0 -5
  742. package/bundled-test-harness/assets/markdown-BvBALLGh.js +0 -7
  743. package/bundled-test-harness/assets/markdown-DFezmrFD.js +0 -2
  744. package/bundled-test-harness/assets/markdown-editor-mode-select-Au64bcIO.js +0 -2
  745. package/bundled-test-harness/assets/markdown-editor-mode-select-rK9PP8rv.js +0 -54
  746. package/bundled-test-harness/assets/markdown-embed-chooser-modal-test-CIxizf5k.js +0 -470
  747. package/bundled-test-harness/assets/markdown-embed-preview-pane-test-C7GoNN7l.js +0 -447
  748. package/bundled-test-harness/assets/markdown-embed-preview-test-CDnj4uhd.js +0 -368
  749. package/bundled-test-harness/assets/markdown-fallback-n7PsLNmO.js +0 -2
  750. package/bundled-test-harness/assets/markdown-fallback-test-DTHT6OwQ.js +0 -316
  751. package/bundled-test-harness/assets/markdown-highlighting-test-DJ-4WSE_.js +0 -244
  752. package/bundled-test-harness/assets/markdown-preview-Ccelx5W-.js +0 -64
  753. package/bundled-test-harness/assets/markdown-preview-JXuMC_ve.js +0 -72
  754. package/bundled-test-harness/assets/markdown-preview-test-ByZqrpPk.js +0 -238
  755. package/bundled-test-harness/assets/markdown-skill-frontmatter-test-DAHGeL4K.js +0 -146
  756. package/bundled-test-harness/assets/menu-items-DzJm9H_H.js +0 -2
  757. package/bundled-test-harness/assets/message-tool-test-lmdrIEdY.js +0 -33
  758. package/bundled-test-harness/assets/metadata-fields-BZZr4Qe5.js +0 -2
  759. package/bundled-test-harness/assets/metadata-fields-BtdjGsKE.js +0 -1415
  760. package/bundled-test-harness/assets/midi-audio-def-uYbYFmFi.js +0 -52
  761. package/bundled-test-harness/assets/midi-meta-extractor-DNI5gc1q.js +0 -284
  762. package/bundled-test-harness/assets/midi-meta-extractor-DbKZ4fMG.js +0 -2
  763. package/bundled-test-harness/assets/migrate-skill-test-DI1xceiL.js +0 -161
  764. package/bundled-test-harness/assets/mini-CNoDyHqG.js +0 -1519
  765. package/bundled-test-harness/assets/mini-DexlIeKK.js +0 -85
  766. package/bundled-test-harness/assets/mini-card-chooser-test-DT5eIf1_.js +0 -272
  767. package/bundled-test-harness/assets/mini-file-chooser-test-DTQnKTZJ.js +0 -201
  768. package/bundled-test-harness/assets/missing-template-DL2mwddM.js +0 -2
  769. package/bundled-test-harness/assets/missing-template-ltqlJ4JC.js +0 -48
  770. package/bundled-test-harness/assets/modal-container-DRnt95-S.js +0 -40
  771. package/bundled-test-harness/assets/modal-zE95eEFp.js +0 -322
  772. package/bundled-test-harness/assets/model-cost-tier-test-CcFz7hcv.js +0 -173
  773. package/bundled-test-harness/assets/module-contents-service-Dk_zWt-V.js +0 -256
  774. package/bundled-test-harness/assets/month-BqReBYWo.js +0 -2
  775. package/bundled-test-harness/assets/month-RhvmIp40.js +0 -123
  776. package/bundled-test-harness/assets/month-day-XFAQA72z.js +0 -2
  777. package/bundled-test-harness/assets/month-day-XzKpk6nz.js +0 -192
  778. package/bundled-test-harness/assets/month-year-BeuNr2Cl.js +0 -2
  779. package/bundled-test-harness/assets/month-year-DhU7hATV.js +0 -93
  780. package/bundled-test-harness/assets/mp3-meta-extractor-Dx2RnJc5.js +0 -476
  781. package/bundled-test-harness/assets/mp4-meta-extractor--k0m8KsT.js +0 -188
  782. package/bundled-test-harness/assets/multiple-stacks-test-bC24IWcJ.js +0 -208
  783. package/bundled-test-harness/assets/nested-query-field-render-test-qxElXx1e.js +0 -249
  784. package/bundled-test-harness/assets/no-stacks-test-Br7IGAgV.js +0 -48
  785. package/bundled-test-harness/assets/number-73SsCMEF.js +0 -3
  786. package/bundled-test-harness/assets/number-CicTBWQd.js +0 -151
  787. package/bundled-test-harness/assets/number-field-test-kV5zXo1J.js +0 -184
  788. package/bundled-test-harness/assets/number-input-CQy4xUeA.js +0 -82
  789. package/bundled-test-harness/assets/office-extract-Bo8sbNkK.js +0 -27
  790. package/bundled-test-harness/assets/office-extract-CfBaoRMD.js +0 -2
  791. package/bundled-test-harness/assets/ogg-meta-extractor-aIf5q_Rq.js +0 -225
  792. package/bundled-test-harness/assets/on-key-C8acaldQ.js +0 -472
  793. package/bundled-test-harness/assets/ooxml-Bu3iZezv.js +0 -172
  794. package/bundled-test-harness/assets/ooxml-jQPBQK25.js +0 -2
  795. package/bundled-test-harness/assets/open-image-in-new-tab-test-CP7q3kMm.js +0 -52
  796. package/bundled-test-harness/assets/operation-lowering-test-9Mdr0hRT.js +0 -2812
  797. package/bundled-test-harness/assets/operations-R9b661Qn.js +0 -3
  798. package/bundled-test-harness/assets/operations-Zv_V3Api.js +0 -766
  799. package/bundled-test-harness/assets/operations-invocation-test-BJPpWb2H.js +0 -523
  800. package/bundled-test-harness/assets/operations-query-test-DufdmPQF.js +0 -459
  801. package/bundled-test-harness/assets/operations-test-CzT051YH.js +0 -2518
  802. package/bundled-test-harness/assets/operator-mode-acceptance-test-ByOIOcD0.js +0 -1188
  803. package/bundled-test-harness/assets/operator-mode-card-chooser-test-CNhR9mvv.js +0 -1036
  804. package/bundled-test-harness/assets/operator-mode-links-test-CuxSVTPR.js +0 -793
  805. package/bundled-test-harness/assets/operator-mode-state-service-CCeHt5SH.js +0 -1275
  806. package/bundled-test-harness/assets/operator-mode-state-service-test-C8TI9WWg.js +0 -206
  807. package/bundled-test-harness/assets/operator-mode-test-DG-mG8Tn.js +0 -683
  808. package/bundled-test-harness/assets/operator-mode-ui-test-DB7xhjS0.js +0 -1027
  809. package/bundled-test-harness/assets/overlay-menu-items-test-C6rcdF_S.js +0 -317
  810. package/bundled-test-harness/assets/overlays-D2zmPxzK.js +0 -270
  811. package/bundled-test-harness/assets/overlays-clip-test-Clpq3JzQ.js +0 -91
  812. package/bundled-test-harness/assets/overlays-detached-element-test-BtsTeJch.js +0 -56
  813. package/bundled-test-harness/assets/pane-f-IYhcWT.js +0 -330
  814. package/bundled-test-harness/assets/panel-B3PCSBbf.js +0 -3540
  815. package/bundled-test-harness/assets/panel-Ban7zCBP.js +0 -474
  816. package/bundled-test-harness/assets/past-sessions-test-uM2m-oKV.js +0 -321
  817. package/bundled-test-harness/assets/patch-fields-test-COPjDhnt.js +0 -1014
  818. package/bundled-test-harness/assets/patch-instance-test-CRb3dfby.js +0 -348
  819. package/bundled-test-harness/assets/pdf-file-def-J_yOUU8_.js +0 -76
  820. package/bundled-test-harness/assets/pdf-meta-extractor-83T5Bdo7.js +0 -156
  821. package/bundled-test-harness/assets/pdf-meta-extractor-INFIklMy.js +0 -2
  822. package/bundled-test-harness/assets/pdf-viewer-B4rRluWA.js +0 -2
  823. package/bundled-test-harness/assets/pdf-viewer-vYem8ozk.js +0 -112
  824. package/bundled-test-harness/assets/percentage-ChagfNRG.js +0 -84
  825. package/bundled-test-harness/assets/permission-checking-realm-test-Dmb2a428.js +0 -306
  826. package/bundled-test-harness/assets/phone-number-BiD2eaSd.js +0 -236
  827. package/bundled-test-harness/assets/phone-number-C-wt4_UK.js +0 -2
  828. package/bundled-test-harness/assets/phone-number-field-test-BHzAmuBP.js +0 -73
  829. package/bundled-test-harness/assets/plate-CqN2nM6P.js +0 -41
  830. package/bundled-test-harness/assets/plate-DaIfpORN.js +0 -2
  831. package/bundled-test-harness/assets/player-CGt5fTd5.js +0 -2
  832. package/bundled-test-harness/assets/player-CN0l44LK.js +0 -82
  833. package/bundled-test-harness/assets/plural-field-components-test-CO2g2opW.js +0 -198
  834. package/bundled-test-harness/assets/png-image-def-B_oou2wS.js +0 -48
  835. package/bundled-test-harness/assets/png-meta-extractor-BfPz1qP_.js +0 -2
  836. package/bundled-test-harness/assets/png-meta-extractor-C8ai8sPw.js +0 -111
  837. package/bundled-test-harness/assets/policy-scoped-search-test-BRRp2a1A.js +0 -339
  838. package/bundled-test-harness/assets/pptx-file-def-C3qYEHDM.js +0 -60
  839. package/bundled-test-harness/assets/pptx-meta-extractor-8IuoBq4I.js +0 -77
  840. package/bundled-test-harness/assets/pptx-meta-extractor-BPhy9RMM.js +0 -2
  841. package/bundled-test-harness/assets/prerender-persistence-block-test-Cteb_Rs_.js +0 -124
  842. package/bundled-test-harness/assets/prerender-serialize-cycle-test-CH7b6Ra9.js +0 -134
  843. package/bundled-test-harness/assets/preview-CmERZpI6.js +0 -74
  844. package/bundled-test-harness/assets/preview-format-BPMlCSbb.js +0 -41
  845. package/bundled-test-harness/assets/preview-format-test-B7sA8fbZ.js +0 -103
  846. package/bundled-test-harness/assets/process-card-CtDzDB-_.js +0 -2
  847. package/bundled-test-harness/assets/process-card-erbWKY5h.js +0 -114
  848. package/bundled-test-harness/assets/process-card-test-DXOt1jDW.js +0 -94
  849. package/bundled-test-harness/assets/profile-settings-modal-11BrR058.js +0 -708
  850. package/bundled-test-harness/assets/progress-circle-Cd79Zqh2.js +0 -2
  851. package/bundled-test-harness/assets/progress-circle-sc-W5aUl.js +0 -95
  852. package/bundled-test-harness/assets/quarter-B61kCpcD.js +0 -168
  853. package/bundled-test-harness/assets/quarter-d5jkTzcz.js +0 -2
  854. package/bundled-test-harness/assets/query-field-membership-status-test-BmpVfohw.js +0 -323
  855. package/bundled-test-harness/assets/query-field-page-optin-test-9_Cce-OJ.js +0 -126
  856. package/bundled-test-harness/assets/query-field-schema-test-CwV7xanX.js +0 -231
  857. package/bundled-test-harness/assets/query-field-stale-prerender-test-RkdnZ-VV.js +0 -152
  858. package/bundled-test-harness/assets/query-fields-test-BLxYkTAM.js +0 -535
  859. package/bundled-test-harness/assets/rail-CFPU0tFe.js +0 -2
  860. package/bundled-test-harness/assets/rail-CQ53Dakr.js +0 -44
  861. package/bundled-test-harness/assets/realm-DdVH9lSZ.js +0 -95
  862. package/bundled-test-harness/assets/realm-DdsFw3b-.js +0 -2
  863. package/bundled-test-harness/assets/realm-config-DIslxoB7.js +0 -844
  864. package/bundled-test-harness/assets/realm-config-policy-standing-test-b4WxNDor.js +0 -290
  865. package/bundled-test-harness/assets/realm-config-routing-rule-edit-test-C-rcvkkD.js +0 -274
  866. package/bundled-test-harness/assets/realm-config-settings-test-DDUkM3zw.js +0 -187
  867. package/bundled-test-harness/assets/realm-dropdown-1j55Dy-1.js +0 -560
  868. package/bundled-test-harness/assets/realm-field-test-D-uEtFKO.js +0 -100
  869. package/bundled-test-harness/assets/realm-indexing-test-U9m0epR-.js +0 -4380
  870. package/bundled-test-harness/assets/realm-policy-test-DhKabhlk.js +0 -1141
  871. package/bundled-test-harness/assets/realm-test-BX6C9SS5.js +0 -2363
  872. package/bundled-test-harness/assets/realm-url-tooltip-BjjcKqBx.js +0 -56
  873. package/bundled-test-harness/assets/realm-url-tooltip-test-DW0ZwEEE.js +0 -78
  874. package/bundled-test-harness/assets/reasoning-test-BWT94KXG.js +0 -234
  875. package/bundled-test-harness/assets/recent-colors-addon-CfgmgilF.js +0 -61
  876. package/bundled-test-harness/assets/recent-colors-addon-D--Ry3Pf.js +0 -2
  877. package/bundled-test-harness/assets/relationship-loading-state-test-C5R6jao_.js +0 -290
  878. package/bundled-test-harness/assets/relative-time-Bq7pqums.js +0 -2
  879. package/bundled-test-harness/assets/relative-time-D0QyW4ig.js +0 -129
  880. package/bundled-test-harness/assets/remix-card-test-Cy0h3Xdf.js +0 -58
  881. package/bundled-test-harness/assets/rendered-markdown-Hw_EF8SO.js +0 -263
  882. package/bundled-test-harness/assets/rendered-markdown-test-CqeF-UZd.js +0 -587
  883. package/bundled-test-harness/assets/resident-instance-reuse-test-BiI6L40n.js +0 -82
  884. package/bundled-test-harness/assets/response-field-BCxG5phG.js +0 -38
  885. package/bundled-test-harness/assets/result-tile-DMzRnTP8.js +0 -140
  886. package/bundled-test-harness/assets/rich-markdown-C4RUl7L0.js +0 -2
  887. package/bundled-test-harness/assets/rich-markdown-DxQSCg-o.js +0 -218
  888. package/bundled-test-harness/assets/rich-markdown-field-test-B7wpedKs.js +0 -1647
  889. package/bundled-test-harness/assets/room-D0M0Zwrs.js +0 -1008
  890. package/bundled-test-harness/assets/room-message-test-BWWd4xC8.js +0 -445
  891. package/bundled-test-harness/assets/room-test-DFH-nOwi.js +0 -95
  892. package/bundled-test-harness/assets/run-realm-code-DyVyEDBl.js +0 -1600
  893. package/bundled-test-harness/assets/run-realm-code-test-BpxF-tOz.js +0 -2468
  894. package/bundled-test-harness/assets/schema-generation-test-DjaJqpYP.js +0 -28
  895. package/bundled-test-harness/assets/score-Cfp34BE7.js +0 -2
  896. package/bundled-test-harness/assets/score-DIWWpeyf.js +0 -100
  897. package/bundled-test-harness/assets/scrolling-test-hA_uBwBg.js +0 -384
  898. package/bundled-test-harness/assets/search-C0-b7dJI.js +0 -605
  899. package/bundled-test-harness/assets/search-adorn-test-C6KP3AwA.js +0 -136
  900. package/bundled-test-harness/assets/search-entries-BfPq5sPS.js +0 -472
  901. package/bundled-test-harness/assets/search-entries-result-test-Bl9u_BOD.js +0 -234
  902. package/bundled-test-harness/assets/search-entries-test-BDC_lS43.js +0 -1486
  903. package/bundled-test-harness/assets/search-result-header-DCAze_cg.js +0 -128
  904. package/bundled-test-harness/assets/search-results-Dd0enVun.js +0 -266
  905. package/bundled-test-harness/assets/search-results-test-T5KEEII4.js +0 -578
  906. package/bundled-test-harness/assets/search-selection-menu-test-CCssnBq1.js +0 -108
  907. package/bundled-test-harness/assets/search-sheet-persistence-test-BzQiO-FK.js +0 -131
  908. package/bundled-test-harness/assets/search-test-fyCWb24m.js +0 -2241
  909. package/bundled-test-harness/assets/searchable-BkgeKQMl.js +0 -2
  910. package/bundled-test-harness/assets/searchable-D_6p6fyb.js +0 -192
  911. package/bundled-test-harness/assets/searchable-option-test-CnCUYGaq.js +0 -322
  912. package/bundled-test-harness/assets/searchable-search-doc-test-B8Q0D98v.js +0 -1271
  913. package/bundled-test-harness/assets/sending-test-D5PGBDys.js +0 -576
  914. package/bundled-test-harness/assets/serialization-rri-form-audit-test-BRJ1cJ31.js +0 -136
  915. package/bundled-test-harness/assets/serialization-test-DM6hK258.js +0 -8758
  916. package/bundled-test-harness/assets/setup-C_GgVgzM.js +0 -772
  917. package/bundled-test-harness/assets/shared-link-target-reuse-test-Be-lSKib.js +0 -207
  918. package/bundled-test-harness/assets/show-card-BFG6KR1m.js +0 -67
  919. package/bundled-test-harness/assets/show-card-test-l0wMrfZq.js +0 -365
  920. package/bundled-test-harness/assets/show-file-B8-FRVHj.js +0 -34
  921. package/bundled-test-harness/assets/signed-capture-D_Q44TQ7.js +0 -204
  922. package/bundled-test-harness/assets/signed-capture-link-test-DOS5xpYv.js +0 -132
  923. package/bundled-test-harness/assets/single-stack-test-BIEtzHVS.js +0 -652
  924. package/bundled-test-harness/assets/skill-BUTGmSsm.js +0 -76
  925. package/bundled-test-harness/assets/skill-Bo7R_2Ud.js +0 -3
  926. package/bundled-test-harness/assets/skill-reference-Cs64py3k.js +0 -112
  927. package/bundled-test-harness/assets/skills-test-CXxSIkYa.js +0 -648
  928. package/bundled-test-harness/assets/slider-picker-C81errGI.js +0 -245
  929. package/bundled-test-harness/assets/slider-picker-mvKsy6cR.js +0 -2
  930. package/bundled-test-harness/assets/spec-B55lJurX.js +0 -602
  931. package/bundled-test-harness/assets/store-DyQ0KiyI.js +0 -2205
  932. package/bundled-test-harness/assets/store-module-rebuild-test-C7532_bS.js +0 -454
  933. package/bundled-test-harness/assets/store-search-test-80NMJuoW.js +0 -175
  934. package/bundled-test-harness/assets/store-test-dHiWXXMs.js +0 -3460
  935. package/bundled-test-harness/assets/string-DHlQEHYm.js +0 -9
  936. package/bundled-test-harness/assets/submode-switcher-DQv-CD6G.js +0 -169
  937. package/bundled-test-harness/assets/svg-meta-extractor-Uw_EJytF.js +0 -42
  938. package/bundled-test-harness/assets/swatches-picker-CaEoibN1.js +0 -33
  939. package/bundled-test-harness/assets/swatches-picker-gPl50JbP.js +0 -2
  940. package/bundled-test-harness/assets/switch-submode-BKDnJd4m.js +0 -79
  941. package/bundled-test-harness/assets/switch-submode-test-_E2mVk4z.js +0 -168
  942. package/bundled-test-harness/assets/tag-B60lDr-j.js +0 -105
  943. package/bundled-test-harness/assets/tests-BBBgPBB6.js +0 -3520
  944. package/bundled-test-harness/assets/text-area-CJjWmwpi.js +0 -9
  945. package/bundled-test-harness/assets/text-file-def-u_dl0i2z.js +0 -151
  946. package/bundled-test-harness/assets/text-input-validator-test-BTwnkSS2.js +0 -156
  947. package/bundled-test-harness/assets/theme-BK-fAHVn.js +0 -9
  948. package/bundled-test-harness/assets/theme-card-test-BQmT7rqr.js +0 -621
  949. package/bundled-test-harness/assets/theme-scheme-island-test-Oi3aeyp1.js +0 -264
  950. package/bundled-test-harness/assets/three-d-model-def-B4KckPVC.js +0 -70
  951. package/bundled-test-harness/assets/time-BcuaSkHg.js +0 -126
  952. package/bundled-test-harness/assets/time-f7Irg7Z7.js +0 -2
  953. package/bundled-test-harness/assets/time-slots-ClYIZN53.js +0 -2
  954. package/bundled-test-harness/assets/time-slots-TI1aaqRN.js +0 -85
  955. package/bundled-test-harness/assets/timeline-Cof9eyq0.js +0 -59
  956. package/bundled-test-harness/assets/timeline-DFWQtCWE.js +0 -2
  957. package/bundled-test-harness/assets/to-device-streaming-test-BDrUUlOt.js +0 -163
  958. package/bundled-test-harness/assets/token-usage-test-CiZo03fY.js +0 -166
  959. package/bundled-test-harness/assets/tool-field-BXHr9r0w.js +0 -94
  960. package/bundled-test-harness/assets/tool-field-CoRO5C4R.js +0 -2
  961. package/bundled-test-harness/assets/tools-CmVaYDIS.js +0 -725
  962. package/bundled-test-harness/assets/tools-calling-test-B454__XF.js +0 -200
  963. package/bundled-test-harness/assets/tools-test-CLu51dJO.js +0 -1624
  964. package/bundled-test-harness/assets/tools-test-XGRAvVug.js +0 -2820
  965. package/bundled-test-harness/assets/ts-file-def-C05BDwdg.js +0 -159
  966. package/bundled-test-harness/assets/update-room-skills-test-jOvP14JX.js +0 -240
  967. package/bundled-test-harness/assets/url-BFf2CNo-.js +0 -2
  968. package/bundled-test-harness/assets/url-CYm-CeXp.js +0 -96
  969. package/bundled-test-harness/assets/video-file-def-B2UIrOFS.js +0 -76
  970. package/bundled-test-harness/assets/wav-meta-extractor-BNkv7e2f.js +0 -368
  971. package/bundled-test-harness/assets/webm-meta-extractor-C933kYyc.js +0 -178
  972. package/bundled-test-harness/assets/webp-meta-extractor-BLz0z1pZ.js +0 -98
  973. package/bundled-test-harness/assets/website-BuOMUW1v.js +0 -92
  974. package/bundled-test-harness/assets/week-Bo0666ji.js +0 -111
  975. package/bundled-test-harness/assets/week-CaVFA8Vc.js +0 -2
  976. package/bundled-test-harness/assets/welcome-to-boxel-PWard7GF.js +0 -172
  977. package/bundled-test-harness/assets/workspace-KXfFTQNV.js +0 -614
  978. package/bundled-test-harness/assets/workspace-a11y-test-Buwb-rfO.js +0 -197
  979. package/bundled-test-harness/assets/workspace-behavior-test-CbgFUOOo.js +0 -200
  980. package/bundled-test-harness/assets/workspace-chooser-BmQvhhrl.js +0 -2248
  981. package/bundled-test-harness/assets/workspace-chooser-Cu84Gd_E.css +0 -1317
  982. package/bundled-test-harness/assets/workspace-chooser-catalog-order-test-rcRw6sni.js +0 -36
  983. package/bundled-test-harness/assets/workspace-chooser-unreachable-notice-test-DUXnBIdY.js +0 -60
  984. package/bundled-test-harness/assets/workspace-delete-multiple-test-DjRKhZ2g.js +0 -212
  985. package/bundled-test-harness/assets/workspace-delete-summary-test-CvkLVYyN.js +0 -63
  986. package/bundled-test-harness/assets/workspace-timestamp-labels-test-AYJT4inv.js +0 -58
  987. package/bundled-test-harness/assets/xlsx-file-def-DuKdbGrJ.js +0 -60
  988. package/bundled-test-harness/assets/xlsx-meta-extractor-Bz-C2JWP.js +0 -101
  989. package/bundled-test-harness/assets/xlsx-meta-extractor-ClwwgABg.js +0 -2
  990. package/bundled-test-harness/assets/year-B6ctHikl.js +0 -2
  991. package/bundled-test-harness/assets/year-C11uAQE6.js +0 -78
  992. package/bundled-test-harness/assets/zip-file-def-B8XN-OS_.js +0 -288
  993. package/bundled-types/host-app/components/matrix/auth-button.gts +0 -39
  994. package/bundled-types/host-app/components/matrix/auth-container.gts +0 -69
  995. package/bundled-types/host-app/components/matrix/auth-form-field.gts +0 -43
@@ -0,0 +1,2518 @@
1
+ import { s as __toESM } from "./chunk-Rp0pCe6z.js";
2
+ import { r as initializeDeferredDecorator, t as decorateFieldV2 } from "./runtime--fcdnjmJ-BoCBNIsz.js";
3
+ import { Ui as DEFINITION_FREE_BASE_OPERATIONS } from "./runtime-common-ClpqhbwG.js";
4
+ import "./card-operations-EgX45pFB.js";
5
+ import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
6
+ import { F as setupLocalIndexing, M as setupCardLogs, lt as setupRenderingTest, t as setupMockMatrix } from "./mock-matrix-DPQ0j2MD.js";
7
+ import { r as getService } from "./dist-CPfIHBla.js";
8
+ import { a as CardDef, d as FileDef, l as FieldDef, n as BaseDef } from "./card-api-Dzje0smT.js";
9
+ import "./file-api-DPMJghBY.js";
10
+ import { t as string_default } from "./string-BHZZwNlZ.js";
11
+ import { t as DateField } from "./date-B27PrSFT.js";
12
+ //#region tests/integration/operations-test.ts
13
+ var import_qunit = /* @__PURE__ */ __toESM(require_qunit());
14
+ var loader;
15
+ var operation;
16
+ var getOperations;
17
+ var getDeclaredOperations;
18
+ var params;
19
+ var actor;
20
+ var instance;
21
+ var realmConfig;
22
+ var card;
23
+ var bxl;
24
+ var linkTo;
25
+ function implied(base) {
26
+ return { base };
27
+ }
28
+ (0, import_qunit.module)("Integration | operations", function(hooks) {
29
+ setupRenderingTest(hooks);
30
+ setupCardLogs(hooks, async () => await loader.import("@cardstack/base/card-api"));
31
+ setupLocalIndexing(hooks);
32
+ setupMockMatrix(hooks);
33
+ hooks.beforeEach(async function() {
34
+ loader = getService("loader-service").loader;
35
+ ({operation, getOperations, getDeclaredOperations, params, actor, instance, realmConfig, card, bxl, linkTo} = await loader.import("@cardstack/base/operations"));
36
+ });
37
+ (0, import_qunit.test)("getOperations merges declarations up the prototype chain, subclass winning per name", function(assert) {
38
+ class Report extends CardDef {
39
+ static {
40
+ decorateFieldV2(this, "addComment", [operation], function() {
41
+ return {
42
+ base: "transform",
43
+ params: { body: string_default },
44
+ append: {
45
+ to: "comments",
46
+ value: {
47
+ body: params("body"),
48
+ postedBy: actor()
49
+ }
50
+ }
51
+ };
52
+ });
53
+ }
54
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
55
+ static {
56
+ decorateFieldV2(this, "escalate", [operation], function() {
57
+ return {
58
+ base: "transform",
59
+ transformations: bxl`.status = "escalated";`
60
+ };
61
+ });
62
+ }
63
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
64
+ }
65
+ class ExternalReport extends Report {
66
+ static {
67
+ decorateFieldV2(this, "escalate", [operation], function() {
68
+ return {
69
+ base: "transform",
70
+ params: { reason: string_default },
71
+ set: {
72
+ status: "escalated",
73
+ escalationReason: params("reason")
74
+ }
75
+ };
76
+ });
77
+ }
78
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
79
+ static {
80
+ decorateFieldV2(this, "listMine", [operation], function() {
81
+ return {
82
+ base: "query",
83
+ query: { filter: {
84
+ on: () => ExternalReport,
85
+ eq: { author: actor() }
86
+ } }
87
+ };
88
+ });
89
+ }
90
+ #listMine = (initializeDeferredDecorator(this, "listMine"), void 0);
91
+ }
92
+ assert.deepEqual(Object.keys(getDeclaredOperations(Report)).sort(), ["addComment", "escalate"], "a class sees the operations it declares");
93
+ assert.deepEqual(Object.keys(getDeclaredOperations(ExternalReport)).sort(), [
94
+ "addComment",
95
+ "escalate",
96
+ "listMine"
97
+ ], "a subclass sees its own operations and the ones it inherits");
98
+ assert.deepEqual(Object.keys(getOperations(ExternalReport)).sort(), [
99
+ "addComment",
100
+ "appendContainsMany",
101
+ "create",
102
+ "delete",
103
+ "escalate",
104
+ "listMine",
105
+ "query",
106
+ "read",
107
+ "readSource",
108
+ "transform",
109
+ "update"
110
+ ], "and reads them alongside the base operations its def type carries");
111
+ assert.deepEqual(getDeclaredOperations(Report).escalate, {
112
+ base: "transform",
113
+ transformations: { $bxl: ".status = \"escalated\";" }
114
+ }, "the ancestor keeps its own declaration");
115
+ let overridden = getOperations(ExternalReport).escalate;
116
+ assert.deepEqual(Object.keys(overridden.params ?? {}), ["reason"], "the subclass declaration replaces the inherited one of the same name");
117
+ assert.deepEqual(JSON.parse(JSON.stringify(overridden.set)), {
118
+ status: "escalated",
119
+ escalationReason: {
120
+ $ref: "params",
121
+ key: "reason"
122
+ }
123
+ }, "the overriding declaration is the one that comes back");
124
+ assert.deepEqual(Object.keys(getOperations(new ExternalReport())).sort(), Object.keys(getOperations(ExternalReport)).sort(), "an instance reads the same operations as its class");
125
+ assert.strictEqual(getOperations(new ExternalReport()).escalate, getOperations(ExternalReport).escalate, "and reads the very declarations the class holds");
126
+ });
127
+ (0, import_qunit.test)("the base operations a def type carries come back without being declared", function(assert) {
128
+ assert.deepEqual(getOperations(CardDef), {
129
+ read: implied("read"),
130
+ readSource: implied("readSource"),
131
+ create: implied("create"),
132
+ update: implied("update"),
133
+ delete: implied("delete"),
134
+ query: implied("query"),
135
+ transform: implied("transform"),
136
+ appendContainsMany: implied("appendContainsMany")
137
+ }, "a card def carries every base operation, implied by the def type");
138
+ assert.deepEqual(Object.keys(getDeclaredOperations(CardDef)), [], "none of which is written in author code");
139
+ assert.deepEqual(getOperations(FileDef), {
140
+ read: implied("read"),
141
+ readSource: implied("readSource"),
142
+ update: implied("update"),
143
+ appendLine: implied("appendLine")
144
+ }, "a file's metadata is read-only, so what a file def carries beyond its two reads are the two writes that work on its bytes");
145
+ assert.deepEqual(getOperations(FieldDef), {}, "a field has no URL, so nothing is invocable on one");
146
+ class Report extends CardDef {
147
+ static {
148
+ decorateFieldV2(this, "read", [operation], function() {
149
+ return {
150
+ base: "read",
151
+ output: {
152
+ title: true,
153
+ comments: true
154
+ }
155
+ };
156
+ });
157
+ }
158
+ #read = (initializeDeferredDecorator(this, "read"), void 0);
159
+ }
160
+ assert.deepEqual(JSON.parse(JSON.stringify(getOperations(Report).read)), {
161
+ base: "read",
162
+ output: {
163
+ title: true,
164
+ comments: true
165
+ }
166
+ }, "the declaration takes the place of the base operation it names");
167
+ assert.deepEqual(Object.keys(getOperations(Report)).sort(), [
168
+ "appendContainsMany",
169
+ "create",
170
+ "delete",
171
+ "query",
172
+ "read",
173
+ "readSource",
174
+ "transform",
175
+ "update"
176
+ ], "and adds no name, because it is that base operation");
177
+ class Archivable extends CardDef {
178
+ static {
179
+ decorateFieldV2(this, "delete", [operation], function() {
180
+ return {
181
+ base: "transform",
182
+ set: { archived: true }
183
+ };
184
+ });
185
+ }
186
+ #delete = (initializeDeferredDecorator(this, "delete"), void 0);
187
+ }
188
+ assert.deepEqual(JSON.parse(JSON.stringify(getOperations(Archivable).delete)), {
189
+ base: "transform",
190
+ set: { archived: true }
191
+ }, "a delete declared on transform is a soft delete");
192
+ assert.deepEqual(Object.keys(getOperations(Archivable)).sort(), [
193
+ "appendContainsMany",
194
+ "create",
195
+ "delete",
196
+ "query",
197
+ "read",
198
+ "readSource",
199
+ "transform",
200
+ "update"
201
+ ], "which stands in for the removal rather than beside it");
202
+ });
203
+ (0, import_qunit.test)("typed references are JSON-serializable markers", function(assert) {
204
+ class ClassroomActivity extends CardDef {}
205
+ class Classroom extends CardDef {
206
+ static {
207
+ decorateFieldV2(this, "createActivity", [operation], function() {
208
+ return {
209
+ base: "create",
210
+ of: ClassroomActivity,
211
+ params: {
212
+ title: string_default,
213
+ dueOn: DateField
214
+ },
215
+ fill: {
216
+ title: params("title"),
217
+ dueOn: params("dueOn"),
218
+ postedBy: actor(),
219
+ classroom: instance("id"),
220
+ room: realmConfig("defaultRoom"),
221
+ settings: realmConfig()
222
+ }
223
+ };
224
+ });
225
+ }
226
+ #createActivity = (initializeDeferredDecorator(this, "createActivity"), void 0);
227
+ static {
228
+ decorateFieldV2(this, "addActivity", [operation], function() {
229
+ return {
230
+ base: "transform",
231
+ params: { activity: linkTo(ClassroomActivity) },
232
+ append: {
233
+ to: "activities",
234
+ value: card(params("activity"))
235
+ }
236
+ };
237
+ });
238
+ }
239
+ #addActivity = (initializeDeferredDecorator(this, "addActivity"), void 0);
240
+ static {
241
+ decorateFieldV2(this, "addOwner", [operation], function() {
242
+ return {
243
+ base: "transform",
244
+ assert: {
245
+ unique: "owners",
246
+ by: instance("id"),
247
+ message: "This classroom already owns itself"
248
+ },
249
+ append: {
250
+ to: "owners",
251
+ value: card("https://example.test/people/1")
252
+ }
253
+ };
254
+ });
255
+ }
256
+ #addOwner = (initializeDeferredDecorator(this, "addOwner"), void 0);
257
+ }
258
+ let declarations = getOperations(Classroom);
259
+ let createActivity = declarations.createActivity;
260
+ let addActivity = declarations.addActivity;
261
+ let addOwner = declarations.addOwner;
262
+ assert.deepEqual(JSON.parse(JSON.stringify(createActivity.fill)), {
263
+ title: {
264
+ $ref: "params",
265
+ key: "title"
266
+ },
267
+ dueOn: {
268
+ $ref: "params",
269
+ key: "dueOn"
270
+ },
271
+ postedBy: { $ref: "actor" },
272
+ classroom: {
273
+ $ref: "instance",
274
+ key: "id"
275
+ },
276
+ room: {
277
+ $ref: "realmConfig",
278
+ key: "defaultRoom"
279
+ },
280
+ settings: { $ref: "realmConfig" }
281
+ }, "every accessor reference survives JSON round-tripping, with and without a key");
282
+ assert.strictEqual(createActivity.of, ClassroomActivity, "a create carries the class it creates");
283
+ assert.deepEqual(JSON.parse(JSON.stringify(addActivity.append)), {
284
+ to: "activities",
285
+ value: {
286
+ $ref: "card",
287
+ value: {
288
+ $ref: "params",
289
+ key: "activity"
290
+ }
291
+ }
292
+ }, "a card reference carries the reference that resolves to the card");
293
+ assert.deepEqual(JSON.parse(JSON.stringify(addOwner.assert)), {
294
+ unique: "owners",
295
+ by: {
296
+ $ref: "instance",
297
+ key: "id"
298
+ },
299
+ message: "This classroom already owns itself"
300
+ }, "an assertion keys its uniqueness check on a reference");
301
+ assert.deepEqual(JSON.parse(JSON.stringify(bxl`assert(.status == "open"; "not open");`)), { $bxl: "assert(.status == \"open\"; \"not open\");" }, "a raw program is a marker carrying its source");
302
+ });
303
+ (0, import_qunit.test)("the bxl tag rejects interpolation", function(assert) {
304
+ let fieldName = "status";
305
+ assert.throws(() => bxl`.${fieldName} = "escalated";`, /does not interpolate values/, "a program reads the operation context through builtins, not spliced text");
306
+ });
307
+ (0, import_qunit.test)("the decorator rejects a target that is not a card definition", function(assert) {
308
+ assert.throws(() => {
309
+ class NotADef {
310
+ static {
311
+ decorateFieldV2(this, "addComment", [operation], function() {
312
+ return { base: "read" };
313
+ });
314
+ }
315
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
316
+ }
317
+ return NotADef;
318
+ }, /can only be used on static properties of classes that extend BaseDef/, "a plain class cannot carry operations");
319
+ });
320
+ (0, import_qunit.test)("the decorator rejects a symbol operation name", function(assert) {
321
+ assert.throws(() => {
322
+ class Report extends CardDef {
323
+ static {
324
+ decorateFieldV2(this, Symbol.for("cardstack-test-operation"), [operation], function() {
325
+ return { base: "read" };
326
+ });
327
+ }
328
+ #_ = (initializeDeferredDecorator(this, Symbol.for("cardstack-test-operation")), void 0);
329
+ }
330
+ return Report;
331
+ }, /only supports string operation names, not symbols/, "an operation is addressed by name on the wire, so it needs a string");
332
+ });
333
+ (0, import_qunit.test)("the decorator rejects a declaration that is not an object", function(assert) {
334
+ assert.throws(() => {
335
+ class Report extends CardDef {
336
+ static {
337
+ decorateFieldV2(this, "addComment", [operation], function() {
338
+ return "transform";
339
+ });
340
+ }
341
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
342
+ }
343
+ return Report;
344
+ }, /must be a declaration object/, "a declaration is plain data, not a value of some other kind");
345
+ assert.throws(() => {
346
+ class Report extends CardDef {
347
+ static {
348
+ decorateFieldV2(this, "addComment", [operation]);
349
+ }
350
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
351
+ }
352
+ return Report;
353
+ }, /must be assigned a declaration object/, "an operation with no declaration names no behavior at all");
354
+ });
355
+ (0, import_qunit.test)("a field cannot declare operations", function(assert) {
356
+ assert.throws(() => {
357
+ class Comment extends FieldDef {
358
+ static {
359
+ decorateFieldV2(this, "addReply", [operation], function() {
360
+ return { base: "read" };
361
+ });
362
+ }
363
+ #addReply = (initializeDeferredDecorator(this, "addReply"), void 0);
364
+ }
365
+ return Comment;
366
+ }, /a field has no URL of its own/, "field data is reached through the operations of the card that contains it");
367
+ });
368
+ (0, import_qunit.test)("a file definition declares reads and the writes that work on its bytes", function(assert) {
369
+ class LogFile extends FileDef {
370
+ static {
371
+ decorateFieldV2(this, "readRedacted", [operation], function() {
372
+ return {
373
+ base: "read",
374
+ output: { name: true }
375
+ };
376
+ });
377
+ }
378
+ #readRedacted = (initializeDeferredDecorator(this, "readRedacted"), void 0);
379
+ static {
380
+ decorateFieldV2(this, "record", [operation], function() {
381
+ return {
382
+ base: "appendLine",
383
+ params: { line: string_default }
384
+ };
385
+ });
386
+ }
387
+ #record = (initializeDeferredDecorator(this, "record"), void 0);
388
+ static {
389
+ decorateFieldV2(this, "replace", [operation], function() {
390
+ return { base: "update" };
391
+ });
392
+ }
393
+ #replace = (initializeDeferredDecorator(this, "replace"), void 0);
394
+ }
395
+ assert.deepEqual(Object.keys(getDeclaredOperations(LogFile)).sort(), [
396
+ "readRedacted",
397
+ "record",
398
+ "replace"
399
+ ], "each is declarable on a file definition");
400
+ assert.strictEqual(getOperations(LogFile).record, LogFile.record, "and an author-declared one comes back from the read every consumer dispatches from, as the declaration itself");
401
+ assert.deepEqual(Object.keys(getOperations(LogFile)).sort(), [
402
+ "appendLine",
403
+ "read",
404
+ "readRedacted",
405
+ "readSource",
406
+ "record",
407
+ "replace",
408
+ "update"
409
+ ], "beside every base operation the def type carries — a declaration under a name of its own adds to them rather than standing in for one");
410
+ assert.throws(() => {
411
+ class Mutable extends FileDef {
412
+ static {
413
+ decorateFieldV2(this, "rename", [operation], function() {
414
+ return {
415
+ base: "transform",
416
+ set: { name: "renamed" }
417
+ };
418
+ });
419
+ }
420
+ #rename = (initializeDeferredDecorator(this, "rename"), void 0);
421
+ }
422
+ return Mutable;
423
+ }, /carries only "read", "readSource", "update", "appendLine"/, "file metadata is content-derived, so there is no JSON:API document to transform");
424
+ assert.throws(() => {
425
+ class Bare extends FileDef {
426
+ static {
427
+ decorateFieldV2(this, "record", [operation], function() {
428
+ return { base: "appendLine" };
429
+ });
430
+ }
431
+ #record = (initializeDeferredDecorator(this, "record"), void 0);
432
+ }
433
+ return Bare;
434
+ }, /declares a `line` param — or an `input` program that produces one/, "an append with no line to append would be refused at every invocation");
435
+ assert.throws(() => {
436
+ class Linked extends FileDef {
437
+ static {
438
+ decorateFieldV2(this, "record", [operation], function() {
439
+ return {
440
+ base: "appendLine",
441
+ params: { line: linkTo(CardDef) }
442
+ };
443
+ });
444
+ }
445
+ #record = (initializeDeferredDecorator(this, "record"), void 0);
446
+ }
447
+ return Linked;
448
+ }, /`params.line` is the text a line holds/, "a link is a card identity, and what goes into a text file is text");
449
+ });
450
+ (0, import_qunit.test)("a card definition carries every behavior but the one that appends a line", function(assert) {
451
+ assert.throws(() => {
452
+ class Ledger extends CardDef {
453
+ static {
454
+ decorateFieldV2(this, "record", [operation], function() {
455
+ return {
456
+ base: "appendLine",
457
+ params: { line: string_default }
458
+ };
459
+ });
460
+ }
461
+ #record = (initializeDeferredDecorator(this, "record"), void 0);
462
+ }
463
+ return Ledger;
464
+ }, /carries only "read", "readSource", "create", "update", "delete", "query", "transform", "appendContainsMany"/, "a card's stored bytes are a JSON:API document, and a line appended to one is no longer a card");
465
+ });
466
+ (0, import_qunit.test)("an appendContainsMany names the fields it appends to and the item for each", function(assert) {
467
+ class EventLog extends CardDef {
468
+ static {
469
+ decorateFieldV2(this, "log", [operation], function() {
470
+ return {
471
+ base: "appendContainsMany",
472
+ params: { body: string_default },
473
+ field: "events",
474
+ item: {
475
+ body: params("body"),
476
+ at: actor()
477
+ }
478
+ };
479
+ });
480
+ }
481
+ #log = (initializeDeferredDecorator(this, "log"), void 0);
482
+ static {
483
+ decorateFieldV2(this, "logBoth", [operation], function() {
484
+ return {
485
+ base: "appendContainsMany",
486
+ params: {
487
+ body: string_default,
488
+ label: string_default
489
+ },
490
+ fields: {
491
+ events: { body: params("body") },
492
+ labels: params("label")
493
+ }
494
+ };
495
+ });
496
+ }
497
+ #logBoth = (initializeDeferredDecorator(this, "logBoth"), void 0);
498
+ }
499
+ assert.deepEqual(Object.keys(getDeclaredOperations(EventLog)).sort(), ["log", "logBoth"], "both spellings are declarations");
500
+ let rejected = [
501
+ [
502
+ "both spellings at once",
503
+ () => {
504
+ class Both extends CardDef {
505
+ static {
506
+ decorateFieldV2(this, "log", [operation], function() {
507
+ return {
508
+ base: "appendContainsMany",
509
+ field: "events",
510
+ item: { body: "x" },
511
+ fields: { events: { body: "y" } }
512
+ };
513
+ });
514
+ }
515
+ #log = (initializeDeferredDecorator(this, "log"), void 0);
516
+ }
517
+ return Both;
518
+ },
519
+ /names one field with its `item`, or several under `fields` — not both/
520
+ ],
521
+ [
522
+ "neither spelling",
523
+ () => {
524
+ class Neither extends CardDef {
525
+ static {
526
+ decorateFieldV2(this, "log", [operation], function() {
527
+ return { base: "appendContainsMany" };
528
+ });
529
+ }
530
+ #log = (initializeDeferredDecorator(this, "log"), void 0);
531
+ }
532
+ return Neither;
533
+ },
534
+ /needs `field` and `item`, or `fields`/
535
+ ],
536
+ [
537
+ "a field with no item",
538
+ () => {
539
+ class NoItem extends CardDef {
540
+ static {
541
+ decorateFieldV2(this, "log", [operation], function() {
542
+ return {
543
+ base: "appendContainsMany",
544
+ field: "events"
545
+ };
546
+ });
547
+ }
548
+ #log = (initializeDeferredDecorator(this, "log"), void 0);
549
+ }
550
+ return NoItem;
551
+ },
552
+ /needs an `item` to append to "events"/
553
+ ],
554
+ [
555
+ "an empty fields map",
556
+ () => {
557
+ class Empty extends CardDef {
558
+ static {
559
+ decorateFieldV2(this, "log", [operation], function() {
560
+ return {
561
+ base: "appendContainsMany",
562
+ fields: {}
563
+ };
564
+ });
565
+ }
566
+ #log = (initializeDeferredDecorator(this, "log"), void 0);
567
+ }
568
+ return Empty;
569
+ },
570
+ /`fields` must be an object mapping each `containsMany` field/
571
+ ]
572
+ ];
573
+ for (let [name, build, pattern] of rejected) assert.throws(build, pattern, `${name} is refused`);
574
+ });
575
+ (0, import_qunit.test)("an appendContainsMany under its own name may name nothing, and is then the built-in", function(assert) {
576
+ class Journal extends CardDef {
577
+ static {
578
+ decorateFieldV2(this, "appendContainsMany", [operation], function() {
579
+ return {
580
+ base: "appendContainsMany",
581
+ nonGrantable: true
582
+ };
583
+ });
584
+ }
585
+ #appendContainsMany = (initializeDeferredDecorator(this, "appendContainsMany"), void 0);
586
+ }
587
+ assert.deepEqual(JSON.parse(JSON.stringify(getDeclaredOperations(Journal).appendContainsMany)), {
588
+ base: "appendContainsMany",
589
+ nonGrantable: true
590
+ }, "a def can mark the built-in append without changing what it appends");
591
+ assert.throws(() => {
592
+ class Named extends CardDef {
593
+ static {
594
+ decorateFieldV2(this, "log", [operation], function() {
595
+ return {
596
+ base: "appendContainsMany",
597
+ nonGrantable: true
598
+ };
599
+ });
600
+ }
601
+ #log = (initializeDeferredDecorator(this, "log"), void 0);
602
+ }
603
+ return Named;
604
+ }, /needs `field` and `item`, or `fields`/, "under any other name an append that names nothing is refused");
605
+ });
606
+ (0, import_qunit.test)("nonGrantable is a boolean any declaration may carry", function(assert) {
607
+ class Ledger extends CardDef {
608
+ static {
609
+ decorateFieldV2(this, "seal", [operation], function() {
610
+ return {
611
+ base: "transform",
612
+ set: { status: "sealed" },
613
+ nonGrantable: true
614
+ };
615
+ });
616
+ }
617
+ #seal = (initializeDeferredDecorator(this, "seal"), void 0);
618
+ static {
619
+ decorateFieldV2(this, "update", [operation], function() {
620
+ return {
621
+ base: "update",
622
+ nonGrantable: true
623
+ };
624
+ });
625
+ }
626
+ #update = (initializeDeferredDecorator(this, "update"), void 0);
627
+ }
628
+ assert.deepEqual(Object.keys(getDeclaredOperations(Ledger)).sort(), ["seal", "update"], "a named operation and a built-in both carry it");
629
+ assert.throws(() => {
630
+ class Loose extends CardDef {
631
+ static {
632
+ decorateFieldV2(this, "seal", [operation], function() {
633
+ return {
634
+ base: "transform",
635
+ set: { status: "sealed" },
636
+ nonGrantable: "yes"
637
+ };
638
+ });
639
+ }
640
+ #seal = (initializeDeferredDecorator(this, "seal"), void 0);
641
+ }
642
+ return Loose;
643
+ }, /`nonGrantable` must be a boolean/);
644
+ });
645
+ (0, import_qunit.test)("label is a short line of plain text any declaration may carry", function(assert) {
646
+ class Inbox extends CardDef {
647
+ static {
648
+ decorateFieldV2(this, "archive", [operation], function() {
649
+ return {
650
+ base: "transform",
651
+ label: "Archive this inbox",
652
+ set: { status: "archived" }
653
+ };
654
+ });
655
+ }
656
+ #archive = (initializeDeferredDecorator(this, "archive"), void 0);
657
+ static {
658
+ decorateFieldV2(this, "listOpen", [operation], function() {
659
+ return {
660
+ base: "query",
661
+ label: "List open inboxes",
662
+ query: { filter: {
663
+ on: () => Inbox,
664
+ eq: { status: "open" }
665
+ } }
666
+ };
667
+ });
668
+ }
669
+ #listOpen = (initializeDeferredDecorator(this, "listOpen"), void 0);
670
+ static {
671
+ decorateFieldV2(this, "update", [operation], function() {
672
+ return {
673
+ base: "update",
674
+ label: "Edit this inbox"
675
+ };
676
+ });
677
+ }
678
+ #update = (initializeDeferredDecorator(this, "update"), void 0);
679
+ }
680
+ class LogFile extends FileDef {
681
+ static {
682
+ decorateFieldV2(this, "record", [operation], function() {
683
+ return {
684
+ base: "appendLine",
685
+ label: "Add a line to the log",
686
+ params: { line: string_default }
687
+ };
688
+ });
689
+ }
690
+ #record = (initializeDeferredDecorator(this, "record"), void 0);
691
+ }
692
+ assert.deepEqual(Object.fromEntries(Object.entries({
693
+ ...getDeclaredOperations(Inbox),
694
+ ...getDeclaredOperations(LogFile)
695
+ }).map(([name, declaration]) => [name, declaration.label])), {
696
+ archive: "Archive this inbox",
697
+ listOpen: "List open inboxes",
698
+ update: "Edit this inbox",
699
+ record: "Add a line to the log"
700
+ }, "a named operation, a saved search, a built-in and a file operation all carry one");
701
+ let refused = [
702
+ [
703
+ "an empty label",
704
+ "",
705
+ /a label must not be empty/
706
+ ],
707
+ [
708
+ "a blank label",
709
+ " ",
710
+ /a label must not be empty/
711
+ ],
712
+ [
713
+ "a label over 80 characters",
714
+ "x".repeat(81),
715
+ /a label must be at most 80 characters, and this one is 81/
716
+ ],
717
+ [
718
+ "a label with markup",
719
+ "Archive <b>now</b>",
720
+ /without markup/
721
+ ],
722
+ [
723
+ "a label with a line break",
724
+ "Archive\nthis inbox",
725
+ /without line breaks/
726
+ ],
727
+ [
728
+ "a label with a tab",
729
+ "Archive this inbox",
730
+ /without line breaks/
731
+ ],
732
+ [
733
+ "a label that is not a string",
734
+ 42,
735
+ /a label must be a string/
736
+ ]
737
+ ];
738
+ for (let [what, label, pattern] of refused) assert.throws(() => {
739
+ class Loose extends CardDef {
740
+ static {
741
+ decorateFieldV2(this, "update", [operation], function() {
742
+ return {
743
+ base: "update",
744
+ label
745
+ };
746
+ });
747
+ }
748
+ #update = (initializeDeferredDecorator(this, "update"), void 0);
749
+ }
750
+ return Loose;
751
+ }, pattern, `${what} is refused`);
752
+ class AtTheLimit extends CardDef {
753
+ static {
754
+ decorateFieldV2(this, "update", [operation], function() {
755
+ return {
756
+ base: "update",
757
+ label: "x".repeat(80)
758
+ };
759
+ });
760
+ }
761
+ #update = (initializeDeferredDecorator(this, "update"), void 0);
762
+ }
763
+ assert.strictEqual(getDeclaredOperations(AtTheLimit).update.label, "x".repeat(80), "a label of exactly 80 characters is accepted");
764
+ });
765
+ (0, import_qunit.test)("an explain is carried only where a card declares one, and is never grantable", function(assert) {
766
+ class Plain extends CardDef {}
767
+ assert.false("explain" in getOperations(Plain), "no card carries an explain it did not declare");
768
+ class Policy extends CardDef {
769
+ static {
770
+ decorateFieldV2(this, "explain", [operation], function() {
771
+ return {
772
+ base: "explain",
773
+ params: {
774
+ actor: string_default,
775
+ target: string_default,
776
+ operation: string_default
777
+ },
778
+ nonGrantable: true
779
+ };
780
+ });
781
+ }
782
+ #explain = (initializeDeferredDecorator(this, "explain"), void 0);
783
+ }
784
+ assert.strictEqual(getOperations(Policy).explain?.base, "explain", "a card that declares one carries it under the name it declared");
785
+ let rejected = [
786
+ [
787
+ "an explain that leaves the flag off",
788
+ () => {
789
+ class Open extends CardDef {
790
+ static {
791
+ decorateFieldV2(this, "explain", [operation], function() {
792
+ return { base: "explain" };
793
+ });
794
+ }
795
+ #explain = (initializeDeferredDecorator(this, "explain"), void 0);
796
+ }
797
+ return Open;
798
+ },
799
+ /declare it with `nonGrantable: true`/
800
+ ],
801
+ [
802
+ "an explain that carries a program",
803
+ () => {
804
+ class Scripted extends CardDef {
805
+ static {
806
+ decorateFieldV2(this, "explain", [operation], function() {
807
+ return {
808
+ base: "explain",
809
+ nonGrantable: true,
810
+ transformations: bxl`.status = "x";`
811
+ };
812
+ });
813
+ }
814
+ #explain = (initializeDeferredDecorator(this, "explain"), void 0);
815
+ }
816
+ return Scripted;
817
+ },
818
+ /so it carries no `transformations`/
819
+ ],
820
+ [
821
+ "an explain that reshapes its answer",
822
+ () => {
823
+ class Projected extends CardDef {
824
+ static {
825
+ decorateFieldV2(this, "explain", [operation], function() {
826
+ return {
827
+ base: "explain",
828
+ nonGrantable: true,
829
+ output: { decision: bxl`.decision` }
830
+ };
831
+ });
832
+ }
833
+ #explain = (initializeDeferredDecorator(this, "explain"), void 0);
834
+ }
835
+ return Projected;
836
+ },
837
+ /carries no `output` to reshape it/
838
+ ],
839
+ [
840
+ "an explain that rewrites its question",
841
+ () => {
842
+ class Rewritten extends CardDef {
843
+ static {
844
+ decorateFieldV2(this, "explain", [operation], function() {
845
+ return {
846
+ base: "explain",
847
+ nonGrantable: true,
848
+ input: bxl`.`
849
+ };
850
+ });
851
+ }
852
+ #explain = (initializeDeferredDecorator(this, "explain"), void 0);
853
+ }
854
+ return Rewritten;
855
+ },
856
+ /carries no `input` to rewrite it/
857
+ ],
858
+ [
859
+ "an explain on a file def",
860
+ () => {
861
+ class LogFile extends FileDef {
862
+ static {
863
+ decorateFieldV2(this, "explain", [operation], function() {
864
+ return {
865
+ base: "explain",
866
+ nonGrantable: true
867
+ };
868
+ });
869
+ }
870
+ #explain = (initializeDeferredDecorator(this, "explain"), void 0);
871
+ }
872
+ return LogFile;
873
+ },
874
+ /cannot declare a "explain" operation/
875
+ ]
876
+ ];
877
+ for (let [name, build, pattern] of rejected) assert.throws(build, pattern, `${name} is refused`);
878
+ });
879
+ (0, import_qunit.test)("a validate is carried only where a card declares one, and is never grantable", function(assert) {
880
+ class Plain extends CardDef {}
881
+ assert.false("validate" in getOperations(Plain), "no card carries a validate it did not declare");
882
+ class Policy extends CardDef {
883
+ static {
884
+ decorateFieldV2(this, "validate", [operation], function() {
885
+ return {
886
+ base: "validate",
887
+ nonGrantable: true
888
+ };
889
+ });
890
+ }
891
+ #validate = (initializeDeferredDecorator(this, "validate"), void 0);
892
+ }
893
+ assert.strictEqual(getOperations(Policy).validate?.base, "validate", "a card that declares one carries it under the name it declared");
894
+ let rejected = [
895
+ [
896
+ "a validate that leaves the flag off",
897
+ () => {
898
+ class Open extends CardDef {
899
+ static {
900
+ decorateFieldV2(this, "validate", [operation], function() {
901
+ return { base: "validate" };
902
+ });
903
+ }
904
+ #validate = (initializeDeferredDecorator(this, "validate"), void 0);
905
+ }
906
+ return Open;
907
+ },
908
+ /declare it with `nonGrantable: true`/
909
+ ],
910
+ [
911
+ "a validate that carries a program",
912
+ () => {
913
+ class Scripted extends CardDef {
914
+ static {
915
+ decorateFieldV2(this, "validate", [operation], function() {
916
+ return {
917
+ base: "validate",
918
+ nonGrantable: true,
919
+ transformations: bxl`.status = "x";`
920
+ };
921
+ });
922
+ }
923
+ #validate = (initializeDeferredDecorator(this, "validate"), void 0);
924
+ }
925
+ return Scripted;
926
+ },
927
+ /so it carries no `transformations`/
928
+ ],
929
+ [
930
+ "a validate that reshapes its answer",
931
+ () => {
932
+ class Projected extends CardDef {
933
+ static {
934
+ decorateFieldV2(this, "validate", [operation], function() {
935
+ return {
936
+ base: "validate",
937
+ nonGrantable: true,
938
+ output: { issues: bxl`.issues` }
939
+ };
940
+ });
941
+ }
942
+ #validate = (initializeDeferredDecorator(this, "validate"), void 0);
943
+ }
944
+ return Projected;
945
+ },
946
+ /carries no `output` to reshape it/
947
+ ],
948
+ [
949
+ "a validate that takes params",
950
+ () => {
951
+ class WithParams extends CardDef {
952
+ static {
953
+ decorateFieldV2(this, "validate", [operation], function() {
954
+ return {
955
+ base: "validate",
956
+ nonGrantable: true,
957
+ params: { realm: string_default }
958
+ };
959
+ });
960
+ }
961
+ #validate = (initializeDeferredDecorator(this, "validate"), void 0);
962
+ }
963
+ return WithParams;
964
+ },
965
+ /takes no payload.*so it carries no `params`/
966
+ ],
967
+ [
968
+ "a validate that takes an input",
969
+ () => {
970
+ class WithInput extends CardDef {
971
+ static {
972
+ decorateFieldV2(this, "validate", [operation], function() {
973
+ return {
974
+ base: "validate",
975
+ nonGrantable: true,
976
+ input: bxl`{ strict: true }`
977
+ };
978
+ });
979
+ }
980
+ #validate = (initializeDeferredDecorator(this, "validate"), void 0);
981
+ }
982
+ return WithInput;
983
+ },
984
+ /takes no payload.*so it carries no `input`/
985
+ ],
986
+ [
987
+ "a validate on a file def",
988
+ () => {
989
+ class LogFile extends FileDef {
990
+ static {
991
+ decorateFieldV2(this, "validate", [operation], function() {
992
+ return {
993
+ base: "validate",
994
+ nonGrantable: true
995
+ };
996
+ });
997
+ }
998
+ #validate = (initializeDeferredDecorator(this, "validate"), void 0);
999
+ }
1000
+ return LogFile;
1001
+ },
1002
+ /cannot declare a "validate" operation/
1003
+ ]
1004
+ ];
1005
+ for (let [name, build, pattern] of rejected) assert.throws(build, pattern, `${name} is refused`);
1006
+ });
1007
+ (0, import_qunit.test)("a declaration that runs no program carries no raw one", function(assert) {
1008
+ let rejected = [
1009
+ ["appendContainsMany", () => {
1010
+ class Ledger extends CardDef {
1011
+ static {
1012
+ decorateFieldV2(this, "log", [operation], function() {
1013
+ return {
1014
+ base: "appendContainsMany",
1015
+ transformations: bxl`.status = "logged";`
1016
+ };
1017
+ });
1018
+ }
1019
+ #log = (initializeDeferredDecorator(this, "log"), void 0);
1020
+ }
1021
+ return Ledger;
1022
+ }],
1023
+ ["appendLine", () => {
1024
+ class LogFile extends FileDef {
1025
+ static {
1026
+ decorateFieldV2(this, "record", [operation], function() {
1027
+ return {
1028
+ base: "appendLine",
1029
+ params: { line: string_default },
1030
+ transformations: bxl`.name = "x";`
1031
+ };
1032
+ });
1033
+ }
1034
+ #record = (initializeDeferredDecorator(this, "record"), void 0);
1035
+ }
1036
+ return LogFile;
1037
+ }],
1038
+ ["update on a file def", () => {
1039
+ class Replaceable extends FileDef {
1040
+ static {
1041
+ decorateFieldV2(this, "replace", [operation], function() {
1042
+ return {
1043
+ base: "update",
1044
+ transformations: bxl`.name = "x";`
1045
+ };
1046
+ });
1047
+ }
1048
+ #replace = (initializeDeferredDecorator(this, "replace"), void 0);
1049
+ }
1050
+ return Replaceable;
1051
+ }]
1052
+ ];
1053
+ for (let [name, build] of rejected) assert.throws(build, /so it carries no `transformations`/, `${name} runs no program over a document`);
1054
+ });
1055
+ (0, import_qunit.test)("a stored-bytes read takes no declaration at all", function(assert) {
1056
+ for (let Def of [CardDef, FileDef]) assert.throws(() => {
1057
+ class Exported extends Def {
1058
+ static {
1059
+ decorateFieldV2(this, "exportBytes", [operation], function() {
1060
+ return { base: "readSource" };
1061
+ });
1062
+ }
1063
+ #exportBytes = (initializeDeferredDecorator(this, "exportBytes"), void 0);
1064
+ }
1065
+ return Exported;
1066
+ }, /serves the bytes stored at the def's URL/, `a ${Def.name} cannot build an operation on a stored-bytes read`);
1067
+ assert.throws(() => {
1068
+ class Redacted extends CardDef {
1069
+ static {
1070
+ decorateFieldV2(this, "readSource", [operation], function() {
1071
+ return {
1072
+ base: "readSource",
1073
+ output: { redacted: true }
1074
+ };
1075
+ });
1076
+ }
1077
+ #readSource = (initializeDeferredDecorator(this, "readSource"), void 0);
1078
+ }
1079
+ return Redacted;
1080
+ }, /reserved operation name/, "and it cannot be specialized under its own name either");
1081
+ assert.throws(() => {
1082
+ class Sneaky extends CardDef {
1083
+ static {
1084
+ decorateFieldV2(this, "readSource", [operation], function() {
1085
+ return {
1086
+ base: "read",
1087
+ output: { redacted: true }
1088
+ };
1089
+ });
1090
+ }
1091
+ #readSource = (initializeDeferredDecorator(this, "readSource"), void 0);
1092
+ }
1093
+ return Sneaky;
1094
+ }, /reserved operation name/, "a declaration cannot take the name by building on another base");
1095
+ });
1096
+ (0, import_qunit.test)("a saved search may not be named `query`", function(assert) {
1097
+ assert.throws(() => {
1098
+ class Listing extends CardDef {
1099
+ static {
1100
+ decorateFieldV2(this, "query", [operation], function() {
1101
+ return {
1102
+ base: "query",
1103
+ query: { filter: { type: () => Listing } }
1104
+ };
1105
+ });
1106
+ }
1107
+ #query = (initializeDeferredDecorator(this, "query"), void 0);
1108
+ }
1109
+ return Listing;
1110
+ }, /"query" is a reserved operation name/);
1111
+ });
1112
+ (0, import_qunit.test)("the decorator refuses every name the realm answers definition-free", function(assert) {
1113
+ assert.ok(DEFINITION_FREE_BASE_OPERATIONS.length > 0, "the list is non-empty, so the loop below asserts something");
1114
+ let applyOperation = operation;
1115
+ for (let name of DEFINITION_FREE_BASE_OPERATIONS) assert.throws(() => {
1116
+ class Shadow extends CardDef {}
1117
+ applyOperation(Shadow, name, { initializer: () => ({ base: "read" }) });
1118
+ return Shadow;
1119
+ }, /reserved operation name/, `${name} is refused as a declaration name`);
1120
+ });
1121
+ (0, import_qunit.test)("the decorator rejects an operation name that is already a static", function(assert) {
1122
+ assert.throws(() => {
1123
+ class Report extends CardDef {
1124
+ static {
1125
+ decorateFieldV2(this, "displayName", [operation], function() {
1126
+ return { base: "read" };
1127
+ });
1128
+ }
1129
+ #displayName = (initializeDeferredDecorator(this, "displayName"), void 0);
1130
+ }
1131
+ return Report;
1132
+ }, /already resolves on this class/, "an operation name that shadows a system static is refused");
1133
+ assert.throws(() => {
1134
+ class Report extends CardDef {
1135
+ static {
1136
+ decorateFieldV2(this, "toString", [operation], function() {
1137
+ return { base: "read" };
1138
+ });
1139
+ }
1140
+ #toString = (initializeDeferredDecorator(this, "toString"), void 0);
1141
+ }
1142
+ return Report;
1143
+ }, /already resolves on this class/, "nor one that shadows something every class inherits");
1144
+ assert.throws(() => {
1145
+ class Report extends CardDef {
1146
+ static {
1147
+ decorateFieldV2(this, "__proto__", [operation], function() {
1148
+ return { base: "read" };
1149
+ });
1150
+ }
1151
+ #__proto__ = (initializeDeferredDecorator(this, "__proto__"), void 0);
1152
+ }
1153
+ return Report;
1154
+ }, /already resolves on this class/, "and least of all a name that would reset a prototype instead of keying a map");
1155
+ class Report extends CardDef {
1156
+ static {
1157
+ decorateFieldV2(this, "addComment", [operation], function() {
1158
+ return {
1159
+ base: "transform",
1160
+ params: { body: string_default },
1161
+ append: {
1162
+ to: "comments",
1163
+ value: { body: params("body") }
1164
+ }
1165
+ };
1166
+ });
1167
+ }
1168
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1169
+ }
1170
+ assert.deepEqual(Object.keys(getDeclaredOperations(Report)), ["addComment"], "a rejected name leaves the store working");
1171
+ for (let inherited of [
1172
+ "toString",
1173
+ "constructor",
1174
+ "__proto__",
1175
+ "valueOf",
1176
+ "hasOwnProperty"
1177
+ ]) {
1178
+ assert.false(inherited in getOperations(Report), `a name-keyed record does not answer for ${inherited}`);
1179
+ assert.false(inherited in getDeclaredOperations(Report), `nor does the declared-only record answer for ${inherited}`);
1180
+ }
1181
+ assert.true("addComment" in getOperations(Report), "while still answering for the operations it holds");
1182
+ assert.true("read" in getOperations(Report), "and for the base operations its def type carries");
1183
+ });
1184
+ (0, import_qunit.test)("the decorator installs the declaration on the class", function(assert) {
1185
+ class Report extends CardDef {
1186
+ static {
1187
+ decorateFieldV2(this, "addComment", [operation], function() {
1188
+ return {
1189
+ base: "transform",
1190
+ params: { body: string_default },
1191
+ append: {
1192
+ to: "comments",
1193
+ value: { body: params("body") }
1194
+ }
1195
+ };
1196
+ });
1197
+ }
1198
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1199
+ }
1200
+ assert.strictEqual(Report.addComment, getDeclaredOperations(Report).addComment, "the class carries the very declaration the reader returns");
1201
+ });
1202
+ (0, import_qunit.test)("the decorator validates the declaration against its base operation", function(assert) {
1203
+ assert.throws(() => {
1204
+ class Report extends CardDef {
1205
+ static {
1206
+ decorateFieldV2(this, "addComment", [operation], function() {
1207
+ return { base: "append" };
1208
+ });
1209
+ }
1210
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1211
+ }
1212
+ return Report;
1213
+ }, /must name the built-in behavior/, "a declaration builds on one of the built-in behaviors");
1214
+ assert.throws(() => {
1215
+ class Report extends CardDef {
1216
+ static {
1217
+ decorateFieldV2(this, "addComment", [operation], function() {
1218
+ return {
1219
+ base: "read",
1220
+ append: {
1221
+ to: "comments",
1222
+ value: "hello"
1223
+ }
1224
+ };
1225
+ });
1226
+ }
1227
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1228
+ }
1229
+ return Report;
1230
+ }, /"append" is not a valid key for a "read" operation/, "a clause is only legal on the base that can express it");
1231
+ assert.throws(() => {
1232
+ class Report extends CardDef {
1233
+ static {
1234
+ decorateFieldV2(this, "createComment", [operation], function() {
1235
+ return {
1236
+ base: "create",
1237
+ fill: { body: "x" }
1238
+ };
1239
+ });
1240
+ }
1241
+ #createComment = (initializeDeferredDecorator(this, "createComment"), void 0);
1242
+ }
1243
+ return Report;
1244
+ }, /a "create" operation needs/, "a create names the type it creates");
1245
+ assert.throws(() => {
1246
+ class Report extends CardDef {
1247
+ static {
1248
+ decorateFieldV2(this, "createComment", [operation], function() {
1249
+ return {
1250
+ base: "create",
1251
+ of: () => Report,
1252
+ links: "none"
1253
+ };
1254
+ });
1255
+ }
1256
+ #createComment = (initializeDeferredDecorator(this, "createComment"), void 0);
1257
+ }
1258
+ return Report;
1259
+ }, /"links" is not a valid key for a "create" operation/, "only a read or a query carries a link graph to narrow");
1260
+ assert.throws(() => {
1261
+ class Report extends CardDef {
1262
+ static {
1263
+ decorateFieldV2(this, "summary", [operation], function() {
1264
+ return {
1265
+ base: "read",
1266
+ links: "some"
1267
+ };
1268
+ });
1269
+ }
1270
+ #summary = (initializeDeferredDecorator(this, "summary"), void 0);
1271
+ }
1272
+ return Report;
1273
+ }, /`links` must name how much of the card's link graph this read carries/, "and it names one of the strategies a read applies");
1274
+ assert.throws(() => {
1275
+ class Report extends CardDef {
1276
+ static {
1277
+ decorateFieldV2(this, "read", [operation], function() {
1278
+ return {
1279
+ base: "read",
1280
+ links: "none"
1281
+ };
1282
+ });
1283
+ }
1284
+ #read = (initializeDeferredDecorator(this, "read"), void 0);
1285
+ }
1286
+ return Report;
1287
+ }, /this read carries — one of "full", "ids"\. .*"ids" narrows a read/, "a read may not withhold its links from the host that edits the card");
1288
+ class Gradebook extends CardDef {
1289
+ static {
1290
+ decorateFieldV2(this, "listAll", [operation], function() {
1291
+ return {
1292
+ base: "query",
1293
+ query: { filter: { type: () => Gradebook } },
1294
+ links: "none"
1295
+ };
1296
+ });
1297
+ }
1298
+ #listAll = (initializeDeferredDecorator(this, "listAll"), void 0);
1299
+ }
1300
+ assert.strictEqual(getDeclaredOperations(Gradebook).listAll.links, "none", "while a query may");
1301
+ assert.throws(() => {
1302
+ class Report extends CardDef {
1303
+ static {
1304
+ decorateFieldV2(this, "listAll", [operation], function() {
1305
+ return {
1306
+ base: "query",
1307
+ query: { filter: { type: () => Report } },
1308
+ links: "some"
1309
+ };
1310
+ });
1311
+ }
1312
+ #listAll = (initializeDeferredDecorator(this, "listAll"), void 0);
1313
+ }
1314
+ return Report;
1315
+ }, /`links` must name how much of the card's link graph each of this query's results carries/, "a query names one of the same three");
1316
+ class Roster extends CardDef {
1317
+ static {
1318
+ decorateFieldV2(this, "listAll", [operation], function() {
1319
+ return {
1320
+ base: "query",
1321
+ query: { filter: { type: () => Roster } },
1322
+ links: "ids"
1323
+ };
1324
+ });
1325
+ }
1326
+ #listAll = (initializeDeferredDecorator(this, "listAll"), void 0);
1327
+ }
1328
+ assert.strictEqual(getDeclaredOperations(Roster).listAll.links, "ids", "and a query that names one is declared with it");
1329
+ assert.throws(() => {
1330
+ class Report extends CardDef {
1331
+ static {
1332
+ decorateFieldV2(this, "rename", [operation], function() {
1333
+ return {
1334
+ base: "transform",
1335
+ set: { title: "Renamed" },
1336
+ html: { embedded: "unshareable" }
1337
+ };
1338
+ });
1339
+ }
1340
+ #rename = (initializeDeferredDecorator(this, "rename"), void 0);
1341
+ }
1342
+ return Report;
1343
+ }, /"html" is not a valid key for a "transform" operation/, "only a read or a query serves prerendered HTML to withhold");
1344
+ assert.throws(() => {
1345
+ class Report extends CardDef {
1346
+ static {
1347
+ decorateFieldV2(this, "summary", [operation], function() {
1348
+ return {
1349
+ base: "read",
1350
+ html: { edit: "unshareable" }
1351
+ };
1352
+ });
1353
+ }
1354
+ #summary = (initializeDeferredDecorator(this, "summary"), void 0);
1355
+ }
1356
+ return Report;
1357
+ }, /`html` names "edit", which is not a prerendered format/, "it names prerendered formats");
1358
+ assert.throws(() => {
1359
+ class Report extends CardDef {
1360
+ static {
1361
+ decorateFieldV2(this, "summary", [operation], function() {
1362
+ return {
1363
+ base: "read",
1364
+ html: { embedded: "hidden" }
1365
+ };
1366
+ });
1367
+ }
1368
+ #summary = (initializeDeferredDecorator(this, "summary"), void 0);
1369
+ }
1370
+ return Report;
1371
+ }, /`html.embedded` must say whether the format's prerendered HTML is served/, "each shareable or unshareable");
1372
+ assert.throws(() => {
1373
+ class Report extends CardDef {
1374
+ static {
1375
+ decorateFieldV2(this, "listAll", [operation], function() {
1376
+ return {
1377
+ base: "query",
1378
+ query: { filter: { type: () => Report } },
1379
+ html: ["embedded"]
1380
+ };
1381
+ });
1382
+ }
1383
+ #listAll = (initializeDeferredDecorator(this, "listAll"), void 0);
1384
+ }
1385
+ return Report;
1386
+ }, /`html` must be an object naming which prerendered formats this query's results are served data-only for/, "by format");
1387
+ class Classroom extends CardDef {
1388
+ static {
1389
+ decorateFieldV2(this, "read", [operation], function() {
1390
+ return {
1391
+ base: "read",
1392
+ html: { embedded: "unshareable" }
1393
+ };
1394
+ });
1395
+ }
1396
+ #read = (initializeDeferredDecorator(this, "read"), void 0);
1397
+ static {
1398
+ decorateFieldV2(this, "listAll", [operation], function() {
1399
+ return {
1400
+ base: "query",
1401
+ query: { filter: { type: () => Classroom } },
1402
+ html: {
1403
+ fitted: "unshareable",
1404
+ isolated: "shareable"
1405
+ }
1406
+ };
1407
+ });
1408
+ }
1409
+ #listAll = (initializeDeferredDecorator(this, "listAll"), void 0);
1410
+ }
1411
+ assert.deepEqual(getDeclaredOperations(Classroom).read.html, { embedded: "unshareable" }, "a read that names formats is declared with them");
1412
+ assert.deepEqual(getDeclaredOperations(Classroom).listAll.html, {
1413
+ fitted: "unshareable",
1414
+ isolated: "shareable"
1415
+ }, "and so is a query");
1416
+ assert.throws(() => {
1417
+ class Report extends CardDef {
1418
+ static {
1419
+ decorateFieldV2(this, "escalate", [operation], function() {
1420
+ return {
1421
+ base: "transform",
1422
+ set: { status: "escalated" },
1423
+ transformations: bxl`.status = "escalated";`
1424
+ };
1425
+ });
1426
+ }
1427
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
1428
+ }
1429
+ return Report;
1430
+ }, /either with clauses .* or with a raw/, "the declarative clauses and a raw program are alternatives");
1431
+ assert.throws(() => {
1432
+ class Report extends CardDef {
1433
+ static {
1434
+ decorateFieldV2(this, "escalate", [operation], function() {
1435
+ return {
1436
+ base: "transform",
1437
+ transformations: ".status = \"escalated\";"
1438
+ };
1439
+ });
1440
+ }
1441
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
1442
+ }
1443
+ return Report;
1444
+ }, /must be a program written with the bxl tag/, "a raw program comes from the bxl tag, not a bare string");
1445
+ assert.throws(() => {
1446
+ class Report extends CardDef {
1447
+ static {
1448
+ decorateFieldV2(this, "listMine", [operation], function() {
1449
+ return { base: "query" };
1450
+ });
1451
+ }
1452
+ #listMine = (initializeDeferredDecorator(this, "listMine"), void 0);
1453
+ }
1454
+ return Report;
1455
+ }, /a "query" operation needs/, "a named query is the query it saves");
1456
+ assert.throws(() => {
1457
+ class Report extends CardDef {
1458
+ static {
1459
+ decorateFieldV2(this, "addComment", [operation], function() {
1460
+ return {
1461
+ base: "transform",
1462
+ append: {
1463
+ to: "comments",
1464
+ value: "hello",
1465
+ into: "comments"
1466
+ }
1467
+ };
1468
+ });
1469
+ }
1470
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1471
+ }
1472
+ return Report;
1473
+ }, /"into" is not a valid key/, "a clause accepts only the keys it is made of");
1474
+ assert.throws(() => {
1475
+ class Report extends CardDef {
1476
+ static {
1477
+ decorateFieldV2(this, "addComment", [operation], function() {
1478
+ return {
1479
+ base: "transform",
1480
+ append: {
1481
+ to: "comments",
1482
+ value: { body: { $ref: "payload" } }
1483
+ }
1484
+ };
1485
+ });
1486
+ }
1487
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1488
+ }
1489
+ return Report;
1490
+ }, /is not a typed reference/, "a reference comes from one of the reference constructors");
1491
+ });
1492
+ (0, import_qunit.test)("a param is typed by a field class, and nothing else", function(assert) {
1493
+ assert.throws(() => {
1494
+ class Report extends CardDef {
1495
+ static {
1496
+ decorateFieldV2(this, "addComment", [operation], function() {
1497
+ return {
1498
+ base: "transform",
1499
+ params: { author: CardDef },
1500
+ append: {
1501
+ to: "comments",
1502
+ value: { author: params("author") }
1503
+ }
1504
+ };
1505
+ });
1506
+ }
1507
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1508
+ }
1509
+ return Report;
1510
+ }, /a card or file identity is a linkTo/, "a card class types a link param, which is what linkTo declares");
1511
+ assert.throws(() => {
1512
+ class Report extends CardDef {
1513
+ static {
1514
+ decorateFieldV2(this, "addComment", [operation], function() {
1515
+ return {
1516
+ base: "transform",
1517
+ params: { body: () => string_default },
1518
+ append: {
1519
+ to: "comments",
1520
+ value: { body: params("body") }
1521
+ }
1522
+ };
1523
+ });
1524
+ }
1525
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
1526
+ }
1527
+ return Report;
1528
+ }, /param "body" must be a field class or linkTo/, "a scalar param takes the field class itself, not a thunk");
1529
+ });
1530
+ (0, import_qunit.test)("a declaration carries only what survives as data", function(assert) {
1531
+ for (let [value, pattern, message] of [
1532
+ [
1533
+ () => "escalated",
1534
+ /is a function; a declaration is data/,
1535
+ "a function would never reach the realm"
1536
+ ],
1537
+ [
1538
+ /* @__PURE__ */ new Date(),
1539
+ /is a Date instance/,
1540
+ "a date would flatten to a string"
1541
+ ],
1542
+ [
1543
+ /* @__PURE__ */ new Map(),
1544
+ /is a Map instance/,
1545
+ "a map would flatten to an empty object"
1546
+ ],
1547
+ [
1548
+ void 0,
1549
+ /omit an optional key rather than declaring it as undefined/,
1550
+ "an undefined value would be dropped"
1551
+ ],
1552
+ [
1553
+ 1n,
1554
+ /is a bigint/,
1555
+ "a bigint cannot be serialized at all"
1556
+ ]
1557
+ ]) assert.throws(() => {
1558
+ class Report extends CardDef {
1559
+ static {
1560
+ decorateFieldV2(this, "escalate", [operation], function() {
1561
+ return {
1562
+ base: "transform",
1563
+ set: { status: value }
1564
+ };
1565
+ });
1566
+ }
1567
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
1568
+ }
1569
+ return Report;
1570
+ }, pattern, message);
1571
+ class Activity extends CardDef {}
1572
+ class Classroom extends CardDef {
1573
+ static {
1574
+ decorateFieldV2(this, "createActivity", [operation], function() {
1575
+ return {
1576
+ base: "create",
1577
+ of: Activity,
1578
+ params: { title: string_default },
1579
+ fill: { title: params("title") }
1580
+ };
1581
+ });
1582
+ }
1583
+ #createActivity = (initializeDeferredDecorator(this, "createActivity"), void 0);
1584
+ static {
1585
+ decorateFieldV2(this, "listActivities", [operation], function() {
1586
+ return {
1587
+ base: "query",
1588
+ query: { filter: {
1589
+ on: Activity,
1590
+ eq: { classroom: instance("id") }
1591
+ } }
1592
+ };
1593
+ });
1594
+ }
1595
+ #listActivities = (initializeDeferredDecorator(this, "listActivities"), void 0);
1596
+ }
1597
+ let declarations = getOperations(Classroom);
1598
+ assert.strictEqual(declarations.createActivity.of, Activity, "a create names the class it creates");
1599
+ assert.strictEqual(declarations.listActivities.query.filter.on, Activity, "and a query names the class it filters on");
1600
+ });
1601
+ (0, import_qunit.test)("a def class is legal only where a slot names a type", function(assert) {
1602
+ class Activity extends CardDef {}
1603
+ class Classroom extends CardDef {
1604
+ static {
1605
+ decorateFieldV2(this, "listActivities", [operation], function() {
1606
+ return {
1607
+ base: "query",
1608
+ query: { filter: { any: [{
1609
+ on: () => Activity,
1610
+ eq: { status: "open" }
1611
+ }] } }
1612
+ };
1613
+ });
1614
+ }
1615
+ #listActivities = (initializeDeferredDecorator(this, "listActivities"), void 0);
1616
+ static {
1617
+ decorateFieldV2(this, "makeActivity", [operation], function() {
1618
+ return {
1619
+ base: "create",
1620
+ of: Activity,
1621
+ params: { title: string_default },
1622
+ transformations: bxl`.title = params("title");`
1623
+ };
1624
+ });
1625
+ }
1626
+ #makeActivity = (initializeDeferredDecorator(this, "makeActivity"), void 0);
1627
+ }
1628
+ let declarations = getDeclaredOperations(Classroom);
1629
+ assert.strictEqual(declarations.makeActivity.of, Activity, "a program-driven create still names what it creates");
1630
+ assert.strictEqual(typeof declarations.listActivities.query.filter.any[0].on, "function", "and a nested filter still names its type");
1631
+ assert.throws(() => {
1632
+ class Report extends CardDef {
1633
+ static {
1634
+ decorateFieldV2(this, "listSome", [operation], function() {
1635
+ return {
1636
+ base: "query",
1637
+ query: { filter: {
1638
+ on: Activity,
1639
+ eq: { owner: () => 1 }
1640
+ } }
1641
+ };
1642
+ });
1643
+ }
1644
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1645
+ }
1646
+ return Report;
1647
+ }, /is a function; a declaration is data/, "but a function anywhere else in a query would lower to nothing");
1648
+ assert.throws(() => {
1649
+ class Report extends CardDef {
1650
+ static {
1651
+ decorateFieldV2(this, "makeOne", [operation], function() {
1652
+ return {
1653
+ base: "create",
1654
+ of: string_default
1655
+ };
1656
+ });
1657
+ }
1658
+ #makeOne = (initializeDeferredDecorator(this, "makeOne"), void 0);
1659
+ }
1660
+ return Report;
1661
+ }, /must be a card class/, "and only a card can be created");
1662
+ assert.throws(() => linkTo(string_default), /card or file class/, "while a link points at something that has a URL");
1663
+ });
1664
+ (0, import_qunit.test)("a shared value is checked in every slot it appears", function(assert) {
1665
+ assert.throws(() => {
1666
+ let shared = { on: CardDef };
1667
+ class Report extends CardDef {
1668
+ static {
1669
+ decorateFieldV2(this, "listSome", [operation], function() {
1670
+ return {
1671
+ base: "query",
1672
+ query: { filter: shared },
1673
+ output: { leak: shared }
1674
+ };
1675
+ });
1676
+ }
1677
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1678
+ }
1679
+ return Report;
1680
+ }, /is a function; a declaration is data/, "validation does not memoize, so it cannot depend on key order");
1681
+ });
1682
+ (0, import_qunit.test)("a declaration must be a tree of finite values", function(assert) {
1683
+ assert.throws(() => {
1684
+ let value = { body: "x" };
1685
+ value.self = value;
1686
+ class Report extends CardDef {
1687
+ static {
1688
+ decorateFieldV2(this, "escalate", [operation], function() {
1689
+ return {
1690
+ base: "transform",
1691
+ set: value
1692
+ };
1693
+ });
1694
+ }
1695
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
1696
+ }
1697
+ return Report;
1698
+ }, /refers back to a value that contains it/, "a cycle would throw when the declaration is serialized, far from here");
1699
+ assert.throws(() => {
1700
+ class Report extends CardDef {
1701
+ static {
1702
+ decorateFieldV2(this, "escalate", [operation], function() {
1703
+ return {
1704
+ base: "transform",
1705
+ set: { score: NaN }
1706
+ };
1707
+ });
1708
+ }
1709
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
1710
+ }
1711
+ return Report;
1712
+ }, /serializes as null/, "and a non-finite number would quietly become null");
1713
+ });
1714
+ (0, import_qunit.test)("a marker carries only its own key", function(assert) {
1715
+ assert.throws(() => {
1716
+ class Report extends CardDef {
1717
+ static {
1718
+ decorateFieldV2(this, "escalate", [operation], function() {
1719
+ return {
1720
+ base: "transform",
1721
+ transformations: {
1722
+ $bxl: ".a = 1;",
1723
+ hook: () => 1
1724
+ }
1725
+ };
1726
+ });
1727
+ }
1728
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
1729
+ }
1730
+ return Report;
1731
+ }, /is not a valid key/, "a program marker is not a place to smuggle a value past the walk");
1732
+ assert.throws(() => {
1733
+ class Report extends CardDef {
1734
+ static {
1735
+ decorateFieldV2(this, "addActivity", [operation], function() {
1736
+ return {
1737
+ base: "transform",
1738
+ params: { activity: {
1739
+ $linkTo: CardDef,
1740
+ junk: 1
1741
+ } },
1742
+ append: {
1743
+ to: "activities",
1744
+ value: card(params("activity"))
1745
+ }
1746
+ };
1747
+ });
1748
+ }
1749
+ #addActivity = (initializeDeferredDecorator(this, "addActivity"), void 0);
1750
+ }
1751
+ return Report;
1752
+ }, /is not a valid key/, "nor is a link param, which the reference walk skips");
1753
+ });
1754
+ (0, import_qunit.test)("a named query is checked for the shape a search needs", function(assert) {
1755
+ assert.throws(() => {
1756
+ class Report extends CardDef {
1757
+ static {
1758
+ decorateFieldV2(this, "listSome", [operation], function() {
1759
+ return {
1760
+ base: "query",
1761
+ query: {}
1762
+ };
1763
+ });
1764
+ }
1765
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1766
+ }
1767
+ return Report;
1768
+ }, /at least one of/, "a query with no query names no search");
1769
+ assert.throws(() => {
1770
+ class Report extends CardDef {
1771
+ static {
1772
+ decorateFieldV2(this, "listSome", [operation], function() {
1773
+ return {
1774
+ base: "query",
1775
+ query: {
1776
+ filter: { type: CardDef },
1777
+ page: { size: 0 }
1778
+ }
1779
+ };
1780
+ });
1781
+ }
1782
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1783
+ }
1784
+ return Report;
1785
+ }, /must be a positive integer/, "a page size is a count");
1786
+ assert.throws(() => {
1787
+ class Report extends CardDef {
1788
+ static {
1789
+ decorateFieldV2(this, "listSome", [operation], function() {
1790
+ return {
1791
+ base: "query",
1792
+ query: {
1793
+ filter: { type: CardDef },
1794
+ realms: "https://x/"
1795
+ }
1796
+ };
1797
+ });
1798
+ }
1799
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1800
+ }
1801
+ return Report;
1802
+ }, /non-empty array of realm URLs/, "and realms is the fan-out list, not one realm");
1803
+ });
1804
+ (0, import_qunit.test)("a query names a type only where the filter grammar has one", function(assert) {
1805
+ class Activity extends CardDef {}
1806
+ class Classroom extends CardDef {
1807
+ static {
1808
+ decorateFieldV2(this, "listAll", [operation], function() {
1809
+ return {
1810
+ base: "query",
1811
+ query: {
1812
+ filter: { any: [{ type: Activity }, { not: { type: Activity } }] },
1813
+ sort: [{
1814
+ by: "title",
1815
+ on: Activity
1816
+ }]
1817
+ }
1818
+ };
1819
+ });
1820
+ }
1821
+ #listAll = (initializeDeferredDecorator(this, "listAll"), void 0);
1822
+ static {
1823
+ decorateFieldV2(this, "listOpen", [operation], function() {
1824
+ return {
1825
+ base: "query",
1826
+ query: { filter: {
1827
+ on: Activity,
1828
+ eq: { status: "open" }
1829
+ } }
1830
+ };
1831
+ });
1832
+ }
1833
+ #listOpen = (initializeDeferredDecorator(this, "listOpen"), void 0);
1834
+ static {
1835
+ decorateFieldV2(this, "listEvery", [operation], function() {
1836
+ return {
1837
+ base: "query",
1838
+ query: { filter: { every: [{
1839
+ on: Activity,
1840
+ eq: { status: "open" }
1841
+ }, {
1842
+ on: Activity,
1843
+ range: { views: { gt: 10 } }
1844
+ }] } }
1845
+ };
1846
+ });
1847
+ }
1848
+ #listEvery = (initializeDeferredDecorator(this, "listEvery"), void 0);
1849
+ static {
1850
+ decorateFieldV2(this, "listRecent", [operation], function() {
1851
+ return {
1852
+ base: "query",
1853
+ query: { filter: {
1854
+ on: Activity,
1855
+ range: { on: { gt: 1 } }
1856
+ } }
1857
+ };
1858
+ });
1859
+ }
1860
+ #listRecent = (initializeDeferredDecorator(this, "listRecent"), void 0);
1861
+ }
1862
+ let declarations = getDeclaredOperations(Classroom);
1863
+ let queryOf = (name) => declarations[name].query;
1864
+ assert.strictEqual(queryOf("listAll").filter.any[0].type, Activity, "a pure card-type filter names the class itself");
1865
+ assert.strictEqual(queryOf("listEvery").filter.every[0].on, Activity, "and `every` holds filter nodes the same way `any` does");
1866
+ assert.strictEqual(queryOf("listAll").sort[0].on, Activity, "and so does a sort entry");
1867
+ assert.deepEqual(JSON.parse(JSON.stringify(queryOf("listRecent").filter.range)), { on: { gt: 1 } }, "a field named `on` under a predicate is data, not a type slot");
1868
+ assert.throws(() => {
1869
+ class Report extends CardDef {
1870
+ static {
1871
+ decorateFieldV2(this, "listSome", [operation], function() {
1872
+ return {
1873
+ base: "query",
1874
+ query: { filter: { eq: {
1875
+ on: Activity,
1876
+ status: "open"
1877
+ } } }
1878
+ };
1879
+ });
1880
+ }
1881
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1882
+ }
1883
+ return Report;
1884
+ }, /`query.filter.eq.on` is a function/, "a class under a predicate would lower to nothing and match everything");
1885
+ assert.throws(() => {
1886
+ class Report extends CardDef {
1887
+ static {
1888
+ decorateFieldV2(this, "listSome", [operation], function() {
1889
+ return {
1890
+ base: "query",
1891
+ query: { filter: {
1892
+ on: string_default,
1893
+ eq: { a: 1 }
1894
+ } }
1895
+ };
1896
+ });
1897
+ }
1898
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1899
+ }
1900
+ return Report;
1901
+ }, /must be a card or file class/, "and a type slot names something that has a type of its own");
1902
+ });
1903
+ (0, import_qunit.test)("a declaration pins the page the realm implements", function(assert) {
1904
+ class Activity extends CardDef {}
1905
+ class Report extends CardDef {
1906
+ static {
1907
+ decorateFieldV2(this, "listRecent", [operation], function() {
1908
+ return {
1909
+ base: "query",
1910
+ query: {
1911
+ filter: { type: Activity },
1912
+ page: {
1913
+ size: 20,
1914
+ number: 1
1915
+ }
1916
+ }
1917
+ };
1918
+ });
1919
+ }
1920
+ #listRecent = (initializeDeferredDecorator(this, "listRecent"), void 0);
1921
+ }
1922
+ assert.deepEqual(JSON.parse(JSON.stringify(getDeclaredOperations(Report).listRecent.query?.page)), {
1923
+ size: 20,
1924
+ number: 1
1925
+ }, "a page is a length and a 0-based offset, which is how the realm pages");
1926
+ });
1927
+ (0, import_qunit.test)("a declared query is checked against the realm grammar itself", function(assert) {
1928
+ class Activity extends CardDef {}
1929
+ class Report extends CardDef {
1930
+ static {
1931
+ decorateFieldV2(this, "search", [operation], function() {
1932
+ return {
1933
+ base: "query",
1934
+ params: { term: string_default },
1935
+ query: {
1936
+ filter: { type: Activity },
1937
+ queryString: params("term")
1938
+ }
1939
+ };
1940
+ });
1941
+ }
1942
+ #search = (initializeDeferredDecorator(this, "search"), void 0);
1943
+ }
1944
+ assert.strictEqual(getDeclaredOperations(Report).search.query.queryString.$ref, "params", "a query carrying a reference is left to the placement rule");
1945
+ assert.throws(() => {
1946
+ class Listing extends CardDef {
1947
+ static {
1948
+ decorateFieldV2(this, "listSome", [operation], function() {
1949
+ return {
1950
+ base: "query",
1951
+ query: { filter: { any: [{ on: Activity }] } }
1952
+ };
1953
+ });
1954
+ }
1955
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1956
+ }
1957
+ return Listing;
1958
+ }, /is not a query the realm accepts/, "a filter node with no predicate is not a filter");
1959
+ assert.throws(() => {
1960
+ class Listing extends CardDef {
1961
+ static {
1962
+ decorateFieldV2(this, "listSome", [operation], function() {
1963
+ return {
1964
+ base: "query",
1965
+ query: {
1966
+ filter: { type: Activity },
1967
+ sort: [{ by: "title" }]
1968
+ }
1969
+ };
1970
+ });
1971
+ }
1972
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1973
+ }
1974
+ return Listing;
1975
+ }, /is not a query the realm accepts/, "and a sort by a card field names the type it is rooted in");
1976
+ assert.throws(() => {
1977
+ class Listing extends CardDef {
1978
+ static {
1979
+ decorateFieldV2(this, "listSome", [operation], function() {
1980
+ return {
1981
+ base: "query",
1982
+ query: {
1983
+ filter: { type: Activity },
1984
+ queryString: 42
1985
+ }
1986
+ };
1987
+ });
1988
+ }
1989
+ #listSome = (initializeDeferredDecorator(this, "listSome"), void 0);
1990
+ }
1991
+ return Listing;
1992
+ }, /`query.queryString` must be a search term/, "a full-text term is a string, or a reference to one");
1993
+ });
1994
+ (0, import_qunit.test)("a create names what it creates whichever form its work takes", function(assert) {
1995
+ assert.throws(() => {
1996
+ class Report extends CardDef {
1997
+ static {
1998
+ decorateFieldV2(this, "makeOne", [operation], function() {
1999
+ return {
2000
+ base: "create",
2001
+ transformations: bxl`.title = "x";`
2002
+ };
2003
+ });
2004
+ }
2005
+ #makeOne = (initializeDeferredDecorator(this, "makeOne"), void 0);
2006
+ }
2007
+ return Report;
2008
+ }, /needs `of` to name what it creates/, "a program computes fields without saying what kind of card to create");
2009
+ });
2010
+ (0, import_qunit.test)("a marker is identified by a key of its own", function(assert) {
2011
+ assert.throws(() => {
2012
+ class Report extends CardDef {
2013
+ static {
2014
+ decorateFieldV2(this, "escalate", [operation], function() {
2015
+ return {
2016
+ base: "transform",
2017
+ set: { author: Object.create({ $ref: "actor" }) }
2018
+ };
2019
+ });
2020
+ }
2021
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
2022
+ }
2023
+ return Report;
2024
+ }, /a declaration carries plain objects, arrays and primitives/, "a reference reached through a prototype is not a reference");
2025
+ assert.throws(() => {
2026
+ let reference = { $ref: "card" };
2027
+ reference.value = reference;
2028
+ class Report extends CardDef {
2029
+ static {
2030
+ decorateFieldV2(this, "escalate", [operation], function() {
2031
+ return {
2032
+ base: "transform",
2033
+ set: { owner: reference }
2034
+ };
2035
+ });
2036
+ }
2037
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
2038
+ }
2039
+ return Report;
2040
+ }, /refers back to a value that contains it/, "and a reference that contains itself is refused, not recursed into");
2041
+ assert.throws(() => {
2042
+ class Report extends CardDef {
2043
+ static {
2044
+ decorateFieldV2(this, "addComment", [operation], function() {
2045
+ return {
2046
+ base: "transform",
2047
+ params: { body: string_default },
2048
+ append: {
2049
+ to: "comments",
2050
+ value: { body: {
2051
+ $ref: "params",
2052
+ key: "body",
2053
+ extra: 1
2054
+ } }
2055
+ }
2056
+ };
2057
+ });
2058
+ }
2059
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
2060
+ }
2061
+ return Report;
2062
+ }, /"extra" is not a valid key/, "a reference marker carries only what its constructor puts there");
2063
+ assert.throws(() => {
2064
+ class Report extends CardDef {
2065
+ static {
2066
+ decorateFieldV2(this, "addActivity", [operation], function() {
2067
+ return {
2068
+ base: "transform",
2069
+ params: { activity: { $linkTo: string_default } },
2070
+ append: {
2071
+ to: "activities",
2072
+ value: card(params("activity"))
2073
+ }
2074
+ };
2075
+ });
2076
+ }
2077
+ #addActivity = (initializeDeferredDecorator(this, "addActivity"), void 0);
2078
+ }
2079
+ return Report;
2080
+ }, /links to a card or file class/, "a hand-written link marker is held to what linkTo requires");
2081
+ });
2082
+ (0, import_qunit.test)("the bxl tag reports being called as a function", function(assert) {
2083
+ assert.throws(() => bxl([".a = 1;"]), /template tag/, "every reference constructor says what it wanted");
2084
+ });
2085
+ (0, import_qunit.test)("every declaration guard reports what it wanted", function(assert) {
2086
+ let rejected = [
2087
+ [
2088
+ "optimistic",
2089
+ {
2090
+ base: "read",
2091
+ optimistic: "yes"
2092
+ },
2093
+ /`optimistic` must be a boolean/
2094
+ ],
2095
+ [
2096
+ "input",
2097
+ {
2098
+ base: "read",
2099
+ input: ".a = 1;"
2100
+ },
2101
+ /`input` must be a program written with the bxl tag/
2102
+ ],
2103
+ [
2104
+ "output",
2105
+ {
2106
+ base: "read",
2107
+ output: "title"
2108
+ },
2109
+ /`output` must be a projection object or a bxl program/
2110
+ ],
2111
+ [
2112
+ "append not an object",
2113
+ {
2114
+ base: "transform",
2115
+ append: "comments"
2116
+ },
2117
+ /`append` must be an object naming the field/
2118
+ ],
2119
+ [
2120
+ "append.to empty",
2121
+ {
2122
+ base: "transform",
2123
+ append: {
2124
+ to: "",
2125
+ value: 1
2126
+ }
2127
+ },
2128
+ /`append.to` must name the collection field/
2129
+ ],
2130
+ [
2131
+ "append with no value",
2132
+ {
2133
+ base: "transform",
2134
+ append: { to: "comments" }
2135
+ },
2136
+ /`append` must carry a `value` to append/
2137
+ ],
2138
+ [
2139
+ "assert not an object",
2140
+ {
2141
+ base: "transform",
2142
+ assert: "unique"
2143
+ },
2144
+ /`assert` must be an object naming the collection/
2145
+ ],
2146
+ [
2147
+ "assert.unique empty",
2148
+ {
2149
+ base: "transform",
2150
+ assert: {
2151
+ unique: "",
2152
+ by: 1
2153
+ }
2154
+ },
2155
+ /`assert.unique` must name the collection field/
2156
+ ],
2157
+ [
2158
+ "assert with no by",
2159
+ {
2160
+ base: "transform",
2161
+ assert: { unique: "owners" }
2162
+ },
2163
+ /`assert` must carry a `by` value/
2164
+ ],
2165
+ [
2166
+ "assert.message",
2167
+ {
2168
+ base: "transform",
2169
+ assert: {
2170
+ unique: "o",
2171
+ by: 1,
2172
+ message: 2
2173
+ }
2174
+ },
2175
+ /`assert.message` must be a string/
2176
+ ],
2177
+ [
2178
+ "set empty",
2179
+ {
2180
+ base: "transform",
2181
+ set: {}
2182
+ },
2183
+ /`set` must be an object mapping field names to values/
2184
+ ],
2185
+ [
2186
+ "fill empty",
2187
+ {
2188
+ base: "create",
2189
+ of: CardDef,
2190
+ fill: {}
2191
+ },
2192
+ /`fill` must be an object mapping field names to values/
2193
+ ],
2194
+ [
2195
+ "of not a function",
2196
+ {
2197
+ base: "create",
2198
+ of: "Activity"
2199
+ },
2200
+ /`of` must be the card class to create/
2201
+ ],
2202
+ [
2203
+ "query not an object",
2204
+ {
2205
+ base: "query",
2206
+ query: "everything"
2207
+ },
2208
+ /`query` must be an object with at least one of/
2209
+ ],
2210
+ [
2211
+ "query with an unknown key",
2212
+ {
2213
+ base: "query",
2214
+ query: {
2215
+ filter: { type: CardDef },
2216
+ junk: 1
2217
+ }
2218
+ },
2219
+ /"junk" is not a valid key for `query`/
2220
+ ],
2221
+ [
2222
+ "query.page not an object",
2223
+ {
2224
+ base: "query",
2225
+ query: {
2226
+ filter: { type: CardDef },
2227
+ page: 10
2228
+ }
2229
+ },
2230
+ /`query.page` must be an object/
2231
+ ],
2232
+ [
2233
+ "query.page with no size",
2234
+ {
2235
+ base: "query",
2236
+ query: {
2237
+ filter: { type: CardDef },
2238
+ page: { number: 1 }
2239
+ }
2240
+ },
2241
+ /`query.page.size` must be a positive integer/
2242
+ ],
2243
+ [
2244
+ "query.page.number below zero",
2245
+ {
2246
+ base: "query",
2247
+ query: {
2248
+ filter: { type: CardDef },
2249
+ page: {
2250
+ size: 10,
2251
+ number: -1
2252
+ }
2253
+ }
2254
+ },
2255
+ /`query.page.number` must be a whole number/
2256
+ ],
2257
+ [
2258
+ "cursor is not a page key",
2259
+ {
2260
+ base: "query",
2261
+ query: {
2262
+ filter: { type: CardDef },
2263
+ page: {
2264
+ size: 10,
2265
+ cursor: "x"
2266
+ }
2267
+ }
2268
+ },
2269
+ /"cursor" is not a valid key for `query.page`/
2270
+ ],
2271
+ [
2272
+ "a params reference with a non-string key",
2273
+ {
2274
+ base: "transform",
2275
+ params: { body: string_default },
2276
+ set: { x: {
2277
+ $ref: "params",
2278
+ key: 1
2279
+ } }
2280
+ },
2281
+ /must name a param/
2282
+ ],
2283
+ [
2284
+ "an actor reference carrying a key",
2285
+ {
2286
+ base: "transform",
2287
+ set: { x: {
2288
+ $ref: "actor",
2289
+ key: "id"
2290
+ } }
2291
+ },
2292
+ /carries a key; actor\(\) is the caller's user id and has no members to read/
2293
+ ],
2294
+ [
2295
+ "an instance reference with an empty key",
2296
+ {
2297
+ base: "transform",
2298
+ set: { x: {
2299
+ $ref: "instance",
2300
+ key: ""
2301
+ } }
2302
+ },
2303
+ /must name a member, or none at all/
2304
+ ],
2305
+ [
2306
+ "a card reference wrapping the caller",
2307
+ {
2308
+ base: "transform",
2309
+ set: { x: {
2310
+ $ref: "card",
2311
+ value: { $ref: "actor" }
2312
+ } }
2313
+ },
2314
+ /`actor\(\)` is the caller's user id rather than a card/
2315
+ ],
2316
+ [
2317
+ "a card reference with a non-reference value",
2318
+ {
2319
+ base: "transform",
2320
+ set: { x: {
2321
+ $ref: "card",
2322
+ value: 1
2323
+ } }
2324
+ },
2325
+ /must carry a card URL or a reference to one/
2326
+ ]
2327
+ ];
2328
+ for (let [name, declaration, pattern] of rejected) assert.throws(() => {
2329
+ class Report extends CardDef {
2330
+ static {
2331
+ decorateFieldV2(this, "candidate", [operation], function() {
2332
+ return declaration;
2333
+ });
2334
+ }
2335
+ #candidate = (initializeDeferredDecorator(this, "candidate"), void 0);
2336
+ }
2337
+ return Report;
2338
+ }, pattern, `a declaration is refused for ${name}`);
2339
+ });
2340
+ (0, import_qunit.test)("the caller is typed as a user id, not as a card", function(assert) {
2341
+ let keyed = () => actor("id");
2342
+ let wrapped = () => card(actor());
2343
+ assert.throws(keyed, /takes no argument/);
2344
+ assert.throws(wrapped, /rather than a card/);
2345
+ assert.deepEqual(actor(), { $ref: "actor" }, "the one form it does have carries nothing but its kind");
2346
+ });
2347
+ (0, import_qunit.test)("every reference constructor reports what it wanted", function(assert) {
2348
+ let rejected = [
2349
+ [
2350
+ "params with no name",
2351
+ () => params(""),
2352
+ /takes the name of a param declared/
2353
+ ],
2354
+ [
2355
+ "params with a non-string",
2356
+ () => params(1),
2357
+ /takes the name of a param declared/
2358
+ ],
2359
+ [
2360
+ "card with no URL",
2361
+ () => card(""),
2362
+ /takes a card URL or a typed reference to one/
2363
+ ],
2364
+ [
2365
+ "card with a non-reference",
2366
+ () => card(1),
2367
+ /takes a card URL or a typed reference to one/
2368
+ ],
2369
+ [
2370
+ "linkTo with a non-class",
2371
+ () => linkTo("Activity"),
2372
+ /takes a card class/
2373
+ ],
2374
+ [
2375
+ "actor with an argument",
2376
+ () => actor("id"),
2377
+ /actor\(\) takes no argument; it is the caller's user id/
2378
+ ],
2379
+ [
2380
+ "card wrapping the caller",
2381
+ () => card(actor()),
2382
+ /`actor\(\)` is the caller's user id rather than a card/
2383
+ ],
2384
+ [
2385
+ "instance with a non-string key",
2386
+ () => instance(1),
2387
+ /takes the name of a member to read, or no argument at all/
2388
+ ],
2389
+ [
2390
+ "realmConfig with an empty key",
2391
+ () => realmConfig(""),
2392
+ /takes the name of a member to read, or no argument at all/
2393
+ ]
2394
+ ];
2395
+ for (let [name, build, pattern] of rejected) assert.throws(build, pattern, `${name} is refused`);
2396
+ });
2397
+ (0, import_qunit.test)("a def with no mutation surface carries only its reads", function(assert) {
2398
+ class Bare extends BaseDef {}
2399
+ assert.deepEqual(getOperations(Bare), {
2400
+ read: implied("read"),
2401
+ readSource: implied("readSource")
2402
+ }, "the two reads are what every addressable def shares");
2403
+ assert.throws(() => {
2404
+ class Mutable extends BaseDef {
2405
+ static {
2406
+ decorateFieldV2(this, "escalate", [operation], function() {
2407
+ return {
2408
+ base: "transform",
2409
+ set: { status: "escalated" }
2410
+ };
2411
+ });
2412
+ }
2413
+ #escalate = (initializeDeferredDecorator(this, "escalate"), void 0);
2414
+ }
2415
+ return Mutable;
2416
+ }, /carries only "read", "readSource"/, "and a def that carries no mutation base cannot declare one");
2417
+ });
2418
+ (0, import_qunit.test)("getOperations rejects a target that is not a card definition", function(assert) {
2419
+ assert.throws(() => getDeclaredOperations({}), /getDeclaredOperations\(\) takes a class that extends BaseDef/, "each reader names itself in its own error");
2420
+ assert.throws(() => getOperations({}), /getOperations\(\) takes a class that extends BaseDef/, "operations hang off a definition, so a plain object reads none");
2421
+ });
2422
+ (0, import_qunit.test)("a params reference must name a declared param", function(assert) {
2423
+ assert.throws(() => {
2424
+ class Report extends CardDef {
2425
+ static {
2426
+ decorateFieldV2(this, "addComment", [operation], function() {
2427
+ return {
2428
+ base: "transform",
2429
+ params: { body: string_default },
2430
+ append: {
2431
+ to: "comments",
2432
+ value: { body: params("title") }
2433
+ }
2434
+ };
2435
+ });
2436
+ }
2437
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
2438
+ }
2439
+ return Report;
2440
+ }, /references the param "title"/, "the declared schema is the single source for what the payload carries");
2441
+ assert.throws(() => {
2442
+ class Report extends CardDef {
2443
+ static {
2444
+ decorateFieldV2(this, "addComment", [operation], function() {
2445
+ return {
2446
+ base: "transform",
2447
+ params: { body: "string" },
2448
+ append: {
2449
+ to: "comments",
2450
+ value: { body: params("body") }
2451
+ }
2452
+ };
2453
+ });
2454
+ }
2455
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
2456
+ }
2457
+ return Report;
2458
+ }, /param "body" must be a field class or linkTo/, "a param names the field class that types it");
2459
+ });
2460
+ (0, import_qunit.test)("the declared params schema types the operation payload", function(assert) {
2461
+ class ClassroomActivity extends CardDef {}
2462
+ let addActivity = {
2463
+ base: "transform",
2464
+ params: {
2465
+ note: string_default,
2466
+ activity: linkTo(ClassroomActivity)
2467
+ },
2468
+ append: {
2469
+ to: "activities",
2470
+ value: card(params("activity"))
2471
+ }
2472
+ };
2473
+ let bodyReference = params("body");
2474
+ class Report extends CardDef {
2475
+ static {
2476
+ decorateFieldV2(this, "addComment", [operation], function() {
2477
+ return {
2478
+ base: "transform",
2479
+ params: { body: string_default },
2480
+ append: {
2481
+ to: "comments",
2482
+ value: { body: params("body") }
2483
+ }
2484
+ };
2485
+ });
2486
+ }
2487
+ #addComment = (initializeDeferredDecorator(this, "addComment"), void 0);
2488
+ }
2489
+ class Themed extends CardDef {
2490
+ static theme = {
2491
+ base: "dark",
2492
+ accent: "#fff"
2493
+ };
2494
+ static {
2495
+ decorateFieldV2(this, "ping", [operation], function() {
2496
+ return { base: "read" };
2497
+ });
2498
+ }
2499
+ #ping = (initializeDeferredDecorator(this, "ping"), void 0);
2500
+ }
2501
+ assert.deepEqual(Object.keys(getDeclaredOperations(Themed)), ["ping"], "and the reader agrees with the type at run time");
2502
+ class Classroom extends CardDef {
2503
+ static {
2504
+ decorateFieldV2(this, "addActivity", [operation], function() {
2505
+ return addActivity;
2506
+ });
2507
+ }
2508
+ #addActivity = (initializeDeferredDecorator(this, "addActivity"), void 0);
2509
+ }
2510
+ assert.deepEqual(Object.keys(getDeclaredOperations(Classroom).addActivity.params ?? {}), ["note", "activity"], "a scalar param and a link param sit in the same schema");
2511
+ assert.deepEqual(bodyReference, {
2512
+ $ref: "params",
2513
+ key: "body"
2514
+ }, "the key a reference names is carried in the marker and in its type");
2515
+ assert.deepEqual(Object.keys(getDeclaredOperations(Report)), ["addComment"], "a declaration written against the exported types is recorded like any other");
2516
+ });
2517
+ });
2518
+ //#endregion