@cratis/scene.components 4.2.0 → 4.2.1

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 (222) hide show
  1. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +17 -16
  3. package/bindings/for_bindingRegistry/when_a_command_is_registered.ts +0 -30
  4. package/bindings/for_bindingRegistry/when_a_query_is_not_registered.ts +0 -17
  5. package/bindings/for_bindingRegistry/when_a_query_is_registered.ts +0 -30
  6. package/bindings/for_bindingRegistry/when_bindings_are_cleared.ts +0 -29
  7. package/bindings/for_bindingRegistry/when_registering_query_identities.ts +0 -81
  8. package/bindings/for_requireArcProxy/NativeProxies.ts +0 -28
  9. package/bindings/for_requireArcProxy/when_mounting_bound_adapters.tsx +0 -73
  10. package/bindings/for_requireArcProxy/when_previewing_without_arc.tsx +0 -37
  11. package/bindings/for_requireArcProxy/when_validating_a_proxy.ts +0 -44
  12. package/bindings/for_resolveElementBinding/when_resolving_a_command_binding.ts +0 -34
  13. package/bindings/for_resolveElementBinding/when_resolving_a_query_binding.ts +0 -45
  14. package/data/for_SceneDataTable/when_forwarding_query_arguments.tsx +0 -123
  15. package/data/for_SceneDataTable/when_the_query_binding_is_missing.tsx +0 -48
  16. package/data/for_SceneSingleResult/when_executing_a_native_query.tsx +0 -290
  17. package/data/for_SceneSingleResult/when_gating_the_lazy_runtime.tsx +0 -60
  18. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.d.ts +0 -2
  19. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.d.ts.map +0 -1
  20. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.js +0 -25
  21. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.js.map +0 -1
  22. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.d.ts +0 -2
  23. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.d.ts.map +0 -1
  24. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.js +0 -12
  25. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.js.map +0 -1
  26. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.d.ts +0 -2
  27. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.d.ts.map +0 -1
  28. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.js +0 -23
  29. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.js.map +0 -1
  30. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.d.ts +0 -2
  31. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.d.ts.map +0 -1
  32. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.js +0 -18
  33. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.js.map +0 -1
  34. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.d.ts +0 -2
  35. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.d.ts.map +0 -1
  36. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.js +0 -73
  37. package/dist/esm/bindings/for_bindingRegistry/when_registering_query_identities.js.map +0 -1
  38. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts +0 -25
  39. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts.map +0 -1
  40. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js +0 -23
  41. package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js.map +0 -1
  42. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts +0 -2
  43. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts.map +0 -1
  44. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js +0 -56
  45. package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js.map +0 -1
  46. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts +0 -2
  47. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts.map +0 -1
  48. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js +0 -32
  49. package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js.map +0 -1
  50. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts +0 -2
  51. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts.map +0 -1
  52. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js +0 -45
  53. package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js.map +0 -1
  54. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.d.ts +0 -2
  55. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.d.ts.map +0 -1
  56. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.js +0 -25
  57. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.js.map +0 -1
  58. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.d.ts +0 -2
  59. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.d.ts.map +0 -1
  60. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.js +0 -33
  61. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.js.map +0 -1
  62. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.d.ts +0 -2
  63. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.d.ts.map +0 -1
  64. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js +0 -107
  65. package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js.map +0 -1
  66. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.d.ts +0 -2
  67. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.d.ts.map +0 -1
  68. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.js +0 -36
  69. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.js.map +0 -1
  70. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts +0 -2
  71. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts.map +0 -1
  72. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js +0 -255
  73. package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js.map +0 -1
  74. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts +0 -2
  75. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts.map +0 -1
  76. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js +0 -54
  77. package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js.map +0 -1
  78. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.d.ts +0 -2
  79. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.d.ts.map +0 -1
  80. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.js +0 -15
  81. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.js.map +0 -1
  82. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.d.ts +0 -2
  83. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.d.ts.map +0 -1
  84. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.js +0 -39
  85. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.js.map +0 -1
  86. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.d.ts +0 -2
  87. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.d.ts.map +0 -1
  88. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.js +0 -32
  89. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.js.map +0 -1
  90. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.d.ts +0 -2
  91. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.d.ts.map +0 -1
  92. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.js +0 -25
  93. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.js.map +0 -1
  94. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.d.ts +0 -2
  95. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.d.ts.map +0 -1
  96. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.js +0 -34
  97. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.js.map +0 -1
  98. package/dist/esm/for_cratisComponentsPackage/when_declaring_command_form_peers.d.ts +0 -2
  99. package/dist/esm/for_cratisComponentsPackage/when_declaring_command_form_peers.d.ts.map +0 -1
  100. package/dist/esm/for_cratisComponentsPackage/when_declaring_command_form_peers.js +0 -16
  101. package/dist/esm/for_cratisComponentsPackage/when_declaring_command_form_peers.js.map +0 -1
  102. package/dist/esm/for_cratisComponentsPackage/when_describing_query_arguments.d.ts +0 -2
  103. package/dist/esm/for_cratisComponentsPackage/when_describing_query_arguments.d.ts.map +0 -1
  104. package/dist/esm/for_cratisComponentsPackage/when_describing_query_arguments.js +0 -11
  105. package/dist/esm/for_cratisComponentsPackage/when_describing_query_arguments.js.map +0 -1
  106. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.d.ts +0 -2
  107. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.d.ts.map +0 -1
  108. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.js +0 -14
  109. package/dist/esm/for_cratisComponentsPackage/when_describing_query_input_form.js.map +0 -1
  110. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts +0 -2
  111. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts.map +0 -1
  112. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js +0 -16
  113. package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js.map +0 -1
  114. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.d.ts +0 -2
  115. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.d.ts.map +0 -1
  116. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.js +0 -49
  117. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.js.map +0 -1
  118. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.d.ts +0 -2
  119. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.d.ts.map +0 -1
  120. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.js +0 -27
  121. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.js.map +0 -1
  122. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.d.ts +0 -2
  123. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.d.ts.map +0 -1
  124. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.js +0 -24
  125. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.js.map +0 -1
  126. package/dist/esm/for_properties/when_a_property_is_missing.d.ts +0 -2
  127. package/dist/esm/for_properties/when_a_property_is_missing.d.ts.map +0 -1
  128. package/dist/esm/for_properties/when_a_property_is_missing.js +0 -13
  129. package/dist/esm/for_properties/when_a_property_is_missing.js.map +0 -1
  130. package/dist/esm/for_properties/when_a_property_is_present.d.ts +0 -2
  131. package/dist/esm/for_properties/when_a_property_is_present.d.ts.map +0 -1
  132. package/dist/esm/for_properties/when_a_property_is_present.js +0 -21
  133. package/dist/esm/for_properties/when_a_property_is_present.js.map +0 -1
  134. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.d.ts +0 -2
  135. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.d.ts.map +0 -1
  136. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.js +0 -12
  137. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.js.map +0 -1
  138. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts +0 -2
  139. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts.map +0 -1
  140. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js +0 -38
  141. package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js.map +0 -1
  142. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.d.ts +0 -2
  143. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.d.ts.map +0 -1
  144. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js +0 -28
  145. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js.map +0 -1
  146. package/dist/esm/forms/for_SceneCommandForm/given/RecordNote.d.ts +0 -22
  147. package/dist/esm/forms/for_SceneCommandForm/given/RecordNote.d.ts.map +0 -1
  148. package/dist/esm/forms/for_SceneCommandForm/given/RecordNote.js +0 -30
  149. package/dist/esm/forms/for_SceneCommandForm/given/RecordNote.js.map +0 -1
  150. package/dist/esm/forms/for_SceneCommandForm/given/StartProject.d.ts +0 -32
  151. package/dist/esm/forms/for_SceneCommandForm/given/StartProject.d.ts.map +0 -1
  152. package/dist/esm/forms/for_SceneCommandForm/given/StartProject.js +0 -32
  153. package/dist/esm/forms/for_SceneCommandForm/given/StartProject.js.map +0 -1
  154. package/dist/esm/forms/for_SceneCommandForm/when_forwarding_to_the_lazy_runtime.d.ts +0 -2
  155. package/dist/esm/forms/for_SceneCommandForm/when_forwarding_to_the_lazy_runtime.d.ts.map +0 -1
  156. package/dist/esm/forms/for_SceneCommandForm/when_forwarding_to_the_lazy_runtime.js +0 -66
  157. package/dist/esm/forms/for_SceneCommandForm/when_forwarding_to_the_lazy_runtime.js.map +0 -1
  158. package/dist/esm/forms/for_SceneCommandForm/when_native_custom_field_errors_block_submission.d.ts +0 -2
  159. package/dist/esm/forms/for_SceneCommandForm/when_native_custom_field_errors_block_submission.d.ts.map +0 -1
  160. package/dist/esm/forms/for_SceneCommandForm/when_native_custom_field_errors_block_submission.js +0 -26
  161. package/dist/esm/forms/for_SceneCommandForm/when_native_custom_field_errors_block_submission.js.map +0 -1
  162. package/dist/esm/forms/for_SceneCommandForm/when_preserving_guid_error_ownership.d.ts +0 -2
  163. package/dist/esm/forms/for_SceneCommandForm/when_preserving_guid_error_ownership.d.ts.map +0 -1
  164. package/dist/esm/forms/for_SceneCommandForm/when_preserving_guid_error_ownership.js +0 -44
  165. package/dist/esm/forms/for_SceneCommandForm/when_preserving_guid_error_ownership.js.map +0 -1
  166. package/dist/esm/forms/for_SceneCommandForm/when_rendering_submit_in_native_context.d.ts +0 -2
  167. package/dist/esm/forms/for_SceneCommandForm/when_rendering_submit_in_native_context.d.ts.map +0 -1
  168. package/dist/esm/forms/for_SceneCommandForm/when_rendering_submit_in_native_context.js +0 -49
  169. package/dist/esm/forms/for_SceneCommandForm/when_rendering_submit_in_native_context.js.map +0 -1
  170. package/dist/esm/forms/for_SceneCommandForm/when_submitting_explicit_inputs.d.ts +0 -2
  171. package/dist/esm/forms/for_SceneCommandForm/when_submitting_explicit_inputs.d.ts.map +0 -1
  172. package/dist/esm/forms/for_SceneCommandForm/when_submitting_explicit_inputs.js +0 -176
  173. package/dist/esm/forms/for_SceneCommandForm/when_submitting_explicit_inputs.js.map +0 -1
  174. package/dist/esm/forms/for_SceneCommandForm/when_submitting_the_native_form.d.ts +0 -2
  175. package/dist/esm/forms/for_SceneCommandForm/when_submitting_the_native_form.d.ts.map +0 -1
  176. package/dist/esm/forms/for_SceneCommandForm/when_submitting_the_native_form.js +0 -110
  177. package/dist/esm/forms/for_SceneCommandForm/when_submitting_the_native_form.js.map +0 -1
  178. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.d.ts +0 -26
  179. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.d.ts.map +0 -1
  180. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.js +0 -44
  181. package/dist/esm/forms/for_SceneQueryInputForm/ProjectLookup.js.map +0 -1
  182. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.d.ts +0 -2
  183. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.d.ts.map +0 -1
  184. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.js +0 -175
  185. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.js.map +0 -1
  186. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.d.ts +0 -2
  187. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.d.ts.map +0 -1
  188. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.js +0 -413
  189. package/dist/esm/forms/for_SceneQueryInputForm/when_submitting_native_queries.js.map +0 -1
  190. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.d.ts +0 -2
  191. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.d.ts.map +0 -1
  192. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.js +0 -31
  193. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.js.map +0 -1
  194. package/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.tsx +0 -24
  195. package/editors/for_filterDefinitions/when_reading_filter_definitions.ts +0 -49
  196. package/editors/for_timeMachineVersions/when_reading_versions.ts +0 -39
  197. package/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.tsx +0 -37
  198. package/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.ts +0 -49
  199. package/for_cratisComponentsPackage/when_declaring_command_form_peers.ts +0 -26
  200. package/for_cratisComponentsPackage/when_describing_query_arguments.ts +0 -15
  201. package/for_cratisComponentsPackage/when_describing_query_input_form.ts +0 -17
  202. package/for_cratisComponentsPackage/when_describing_single_result.ts +0 -20
  203. package/for_cratisComponentsPackage/when_resolving_its_dependencies.ts +0 -78
  204. package/for_cratisComponentsPackage/when_validating_the_bundle.ts +0 -39
  205. package/for_properties/when_a_property_has_the_wrong_type.ts +0 -41
  206. package/for_properties/when_a_property_is_missing.ts +0 -26
  207. package/for_properties/when_a_property_is_present.ts +0 -36
  208. package/forms/fields/for_CommandFormField/when_the_field_names_no_property.tsx +0 -16
  209. package/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.tsx +0 -45
  210. package/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts +0 -40
  211. package/forms/for_SceneCommandForm/given/RecordNote.ts +0 -37
  212. package/forms/for_SceneCommandForm/given/StartProject.ts +0 -41
  213. package/forms/for_SceneCommandForm/when_forwarding_to_the_lazy_runtime.tsx +0 -69
  214. package/forms/for_SceneCommandForm/when_native_custom_field_errors_block_submission.tsx +0 -33
  215. package/forms/for_SceneCommandForm/when_preserving_guid_error_ownership.tsx +0 -50
  216. package/forms/for_SceneCommandForm/when_rendering_submit_in_native_context.tsx +0 -56
  217. package/forms/for_SceneCommandForm/when_submitting_explicit_inputs.tsx +0 -189
  218. package/forms/for_SceneCommandForm/when_submitting_the_native_form.tsx +0 -120
  219. package/forms/for_SceneQueryInputForm/ProjectLookup.ts +0 -54
  220. package/forms/for_SceneQueryInputForm/when_submitting_generated_guid_parameters.tsx +0 -188
  221. package/forms/for_SceneQueryInputForm/when_submitting_native_queries.tsx +0 -423
  222. package/pages/for_ScenePage/when_rendering_a_page.tsx +0 -39
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/scene.components",
3
- "version": "4.2.0",
3
+ "version": "4.2.1",
4
4
  "description": "The Cratis Components package: exposes @cratis/components' Arc-bound data, form and dialog composites as Scene components. Built on PrimeReact and Tailwind, and declares both as dependencies.",
5
5
  "keywords": [
6
6
  "cratis",
@@ -26,7 +26,8 @@
26
26
  "dist",
27
27
  "**/*.ts",
28
28
  "**/*.tsx",
29
- "**/*.css"
29
+ "**/*.css",
30
+ "!**/for_*/**"
30
31
  ],
31
32
  "main": "dist/cjs/index.js",
32
33
  "module": "dist/esm/index.js",
@@ -53,24 +54,24 @@
53
54
  "build-storybook": "storybook build"
54
55
  },
55
56
  "dependencies": {
56
- "@cratis/scene.engine": "4.2.0",
57
- "@cratis/scene.model": "4.2.0",
58
- "@cratis/scene.react": "4.2.0"
57
+ "@cratis/scene.engine": "4.2.1",
58
+ "@cratis/scene.model": "4.2.1",
59
+ "@cratis/scene.react": "4.2.1"
59
60
  },
60
61
  "devDependencies": {
61
- "@cratis/arc": "22.19.1",
62
- "@cratis/arc.react": "22.19.1",
63
- "@cratis/components": "4.13.0",
64
- "@cratis/scene.engine": "4.2.0",
65
- "@cratis/scene.model": "4.2.0",
66
- "@cratis/scene.react": "4.2.0",
67
- "@storybook/addon-links": "^10.6.0",
68
- "@storybook/react": "^10.6.0",
69
- "@storybook/react-vite": "^10.6.0",
70
- "primeicons": "8.0.1",
62
+ "@cratis/arc": "22.39.0",
63
+ "@cratis/arc.react": "22.39.0",
64
+ "@cratis/components": "4.21.1",
65
+ "@cratis/scene.engine": "4.2.1",
66
+ "@cratis/scene.model": "4.2.1",
67
+ "@cratis/scene.react": "4.2.1",
68
+ "@storybook/addon-links": "^10.6.1",
69
+ "@storybook/react": "^10.6.1",
70
+ "@storybook/react-vite": "^10.6.1",
71
+ "primeicons": "8.0.2",
71
72
  "react": "^19.3.0",
72
73
  "react-dom": "^19.3.0",
73
- "storybook": "^10.6.0"
74
+ "storybook": "^10.6.1"
74
75
  },
75
76
  "peerDependencies": {
76
77
  "@cratis/arc": "^22.19.1",
@@ -1,30 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { clearBindings, registerCommand, registerCommands, registeredCommandNames, resolveCommand, resolveQuery } from '../bindingRegistry';
5
-
6
- class RegisterInvoice {}
7
- class ApproveInvoice {}
8
- class RegisterInvoiceV2 {}
9
-
10
- describe('when a command is registered', () => {
11
- beforeEach(() => {
12
- clearBindings();
13
- registerCommand('RegisterInvoice', RegisterInvoice);
14
- registerCommands({ ApproveInvoice });
15
- });
16
-
17
- afterEach(() => clearBindings());
18
-
19
- it('should resolve the class registered under the name', () => resolveCommand('RegisterInvoice')!.should.equal(RegisterInvoice));
20
- it('should resolve every class registered in bulk', () => resolveCommand('ApproveInvoice')!.should.equal(ApproveInvoice));
21
- it('should list every registered name in sorted order', () => registeredCommandNames().should.deep.equal(['ApproveInvoice', 'RegisterInvoice']));
22
- it('should not resolve the same name as a query', () => (resolveQuery('RegisterInvoice') === undefined).should.be.true);
23
-
24
- describe('and the same name is registered again', () => {
25
- beforeEach(() => registerCommand('RegisterInvoice', RegisterInvoiceV2));
26
-
27
- it('should resolve to the class registered last', () => resolveCommand('RegisterInvoice')!.should.equal(RegisterInvoiceV2));
28
- it('should not list the name twice', () => registeredCommandNames().should.deep.equal(['ApproveInvoice', 'RegisterInvoice']));
29
- });
30
- });
@@ -1,17 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { clearBindings, registerQuery, resolveQuery } from '../bindingRegistry';
5
-
6
- class AllInvoices {}
7
-
8
- describe('when a query is not registered', () => {
9
- beforeEach(() => {
10
- clearBindings();
11
- registerQuery('AllInvoices', AllInvoices);
12
- });
13
-
14
- afterEach(() => clearBindings());
15
-
16
- it('should resolve to undefined rather than throwing', () => (resolveQuery('AllCustomers') === undefined).should.be.true);
17
- });
@@ -1,30 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { clearBindings, registerQueries, registerQuery, registeredQueryNames, resolveCommand, resolveQuery } from '../bindingRegistry';
5
-
6
- class AllInvoices {}
7
- class InvoiceById {}
8
- class OverdueInvoices {}
9
-
10
- describe('when a query is registered', () => {
11
- beforeEach(() => {
12
- clearBindings();
13
- registerQuery('AllInvoices', AllInvoices);
14
- registerQueries({ InvoiceById, OverdueInvoices });
15
- });
16
-
17
- afterEach(() => clearBindings());
18
-
19
- it('should resolve the class registered under the name', () => resolveQuery('AllInvoices')!.should.equal(AllInvoices));
20
-
21
- it('should resolve every class registered in bulk', () => {
22
- resolveQuery('InvoiceById')!.should.equal(InvoiceById);
23
- resolveQuery('OverdueInvoices')!.should.equal(OverdueInvoices);
24
- });
25
-
26
- it('should list every registered name in sorted order', () =>
27
- registeredQueryNames().should.deep.equal(['AllInvoices', 'InvoiceById', 'OverdueInvoices']));
28
-
29
- it('should not resolve the same name as a command', () => (resolveCommand('AllInvoices') === undefined).should.be.true);
30
- });
@@ -1,29 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import {
5
- clearBindings,
6
- registerCommand,
7
- registerQuery,
8
- registeredCommandNames,
9
- registeredQueryNames,
10
- resolveCommand,
11
- resolveQuery,
12
- } from '../bindingRegistry';
13
-
14
- class AllInvoices {}
15
- class RegisterInvoice {}
16
-
17
- describe('when bindings are cleared', () => {
18
- beforeEach(() => {
19
- clearBindings();
20
- registerQuery('AllInvoices', AllInvoices);
21
- registerCommand('RegisterInvoice', RegisterInvoice);
22
- clearBindings();
23
- });
24
-
25
- it('should no longer resolve the query', () => (resolveQuery('AllInvoices') === undefined).should.be.true);
26
- it('should no longer resolve the command', () => (resolveCommand('RegisterInvoice') === undefined).should.be.true);
27
- it('should list no query names', () => registeredQueryNames().should.be.empty);
28
- it('should list no command names', () => registeredCommandNames().should.be.empty);
29
- });
@@ -1,81 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { expect } from 'vitest';
5
- import { clearBindings, registerQuery, registerQueryIdentity, registeredQueryNames, resolveExactQuery, resolveQuery, unregisterQueryIdentity } from '../bindingRegistry';
6
-
7
- class First {}
8
- class Replacement {}
9
-
10
- describe('when opting into collision-aware query identities', () => {
11
- beforeEach(() => clearBindings());
12
- afterEach(() => clearBindings());
13
-
14
- it('replaces the same source identity on hot reload', () => {
15
- registerQueryIdentity('Lookup', 'source/Lookup', First);
16
- registerQueryIdentity('Lookup', 'source/Lookup', Replacement);
17
- expect(resolveExactQuery('Lookup')).toBe(Replacement);
18
- expect(resolveQuery('Lookup')).toBe(Replacement);
19
- expect(registeredQueryNames()).toEqual(['Lookup']);
20
- });
21
-
22
- it('counts different source identities even for the same constructor', () => {
23
- registerQueryIdentity('Lookup', 'one/Lookup', First);
24
- registerQueryIdentity('Lookup', 'two/Lookup', First);
25
- expect(resolveExactQuery('Lookup')).toBe('ambiguous');
26
- expect(resolveQuery('Lookup')).toBeUndefined();
27
- expect(registeredQueryNames()).toEqual(['Lookup']);
28
- unregisterQueryIdentity('Lookup', 'one/Lookup');
29
- expect(resolveExactQuery('Lookup')).toBe(First);
30
- expect(resolveQuery('Lookup')).toBe(First);
31
- unregisterQueryIdentity('Lookup', 'two/Lookup');
32
- expect(resolveExactQuery('Lookup')).toBeUndefined();
33
- expect(resolveQuery('Lookup')).toBeUndefined();
34
- expect(registeredQueryNames()).toEqual([]);
35
- });
36
-
37
- it('keeps legacy replacement authoritative while exact resolution counts mixed candidates', () => {
38
- registerQuery('Lookup', First);
39
- registerQuery('Lookup', Replacement);
40
- expect(resolveQuery('Lookup')).toBe(Replacement);
41
- expect(resolveExactQuery('Lookup')).toBe(Replacement);
42
- registerQueryIdentity('Lookup', 'source/Lookup', First);
43
- expect(resolveQuery('Lookup')).toBe(Replacement);
44
- expect(resolveExactQuery('Lookup')).toBe('ambiguous');
45
- });
46
-
47
- it('bridges a unique identity to legacy consumers with exact case-sensitive names and clears both maps', () => {
48
- registerQueryIdentity('Lookup', 'source/Lookup', First);
49
- expect(resolveQuery('Lookup')).toBe(First);
50
- expect(resolveQuery('lookup')).toBeUndefined();
51
- expect(resolveExactQuery('lookup')).toBeUndefined();
52
- clearBindings();
53
- expect(resolveQuery('Lookup')).toBeUndefined();
54
- expect(resolveExactQuery('Lookup')).toBeUndefined();
55
- expect(registeredQueryNames()).toEqual([]);
56
- });
57
-
58
- it('lists the sorted union without duplicates, retaining legacy names after identity removal', () => {
59
- registerQueryIdentity('Zed', 'source/Zed', First);
60
- registerQueryIdentity('Lookup', 'source/Lookup', First);
61
- registerQuery('Lookup', Replacement);
62
- registerQuery('Alpha', First);
63
- expect(registeredQueryNames()).toEqual(['Alpha', 'Lookup', 'Zed']);
64
- unregisterQueryIdentity('Lookup', 'source/Lookup');
65
- unregisterQueryIdentity('Zed', 'source/Zed');
66
- unregisterQueryIdentity('Missing', 'source/Missing');
67
- expect(registeredQueryNames()).toEqual(['Alpha', 'Lookup']);
68
- expect(resolveQuery('Lookup')).toBe(Replacement);
69
- expect(resolveExactQuery('Lookup')).toBe(Replacement);
70
- });
71
-
72
- it('gives an existing legacy registration precedence even over multiple identities and later replacements', () => {
73
- registerQueryIdentity('Lookup', 'one/Lookup', First);
74
- registerQueryIdentity('Lookup', 'two/Lookup', First);
75
- registerQuery('Lookup', First);
76
- registerQuery('Lookup', Replacement);
77
- registerQueryIdentity('Lookup', 'one/Lookup', Replacement);
78
- expect(resolveQuery('Lookup')).toBe(Replacement);
79
- expect(resolveExactQuery('Lookup')).toBe('ambiguous');
80
- });
81
- });
@@ -1,28 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { QueryFor, ObservableQueryFor } from '@cratis/arc/queries';
5
- import { Command } from '@cratis/arc/commands';
6
-
7
- export class Snapshot extends QueryFor<object[], { projectId: string }> {
8
- readonly route = '/projects';
9
- readonly parameterDescriptors = [];
10
- readonly requiredRequestParameters = ['projectId'];
11
- defaultValue = [];
12
- constructor() { super(Object, true); throw new Error('Must not construct during binding'); }
13
- }
14
-
15
- export class Live extends ObservableQueryFor<object[], object> {
16
- readonly route = '/projects';
17
- readonly parameterDescriptors = [];
18
- readonly requiredRequestParameters = [];
19
- readonly defaultValue = [];
20
- constructor() { super(Object, true); throw new Error('Must not construct during binding'); }
21
- }
22
-
23
- export class Save extends Command {
24
- readonly route = '/save';
25
- readonly propertyDescriptors = [];
26
- readonly requestParameters = [];
27
- constructor() { super(Object, false); throw new Error('Must not construct during binding'); }
28
- }
@@ -1,73 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { act, cleanup, render, screen } from '@testing-library/react';
5
- import { expect, vi } from 'vitest';
6
- import { externalComponent } from '../../given';
7
-
8
- // Keep the real Arc base classes; replace only the final Components renderers.
9
- describe('when mounting bound adapters', () => {
10
- const received = vi.fn<(props: Record<string, unknown>) => void>();
11
- let bindings: typeof import('../bindingRegistry');
12
- let proxies: typeof import('./NativeProxies');
13
- let adapters: typeof import('../ArcBoundComponents');
14
- let Boundary: typeof import('../ArcRuntimeBoundary').ArcRuntimeBoundary;
15
-
16
- beforeEach(async () => {
17
- vi.resetModules();
18
- received.mockClear();
19
- const component = (props: Record<string, unknown>) => { received(props); return <span>Mounted native adapter</span>; };
20
- vi.doMock('@cratis/components/DataTables', () => ({ DataTableForQuery: component, DataTableForObservableQuery: component }));
21
- vi.doMock('@cratis/components/DataPage', () => ({ DataPage: component }));
22
- vi.doMock('@cratis/components/CommandDialog', () => ({ CommandDialog: component, StepperCommandDialog: component }));
23
- bindings = await import('../bindingRegistry');
24
- bindings.clearBindings();
25
- proxies = await import('./NativeProxies');
26
- adapters = await import('../ArcBoundComponents');
27
- ({ ArcRuntimeBoundary: Boundary } = await import('../ArcRuntimeBoundary'));
28
- vi.spyOn(console, 'error').mockImplementation(() => undefined);
29
- });
30
-
31
- afterEach(() => {
32
- cleanup();
33
- bindings.clearBindings();
34
- vi.restoreAllMocks();
35
- vi.doUnmock('@cratis/components/DataTables');
36
- vi.doUnmock('@cratis/components/DataPage');
37
- vi.doUnmock('@cratis/components/CommandDialog');
38
- vi.resetModules();
39
- });
40
-
41
- it('should pass both supported page kinds and both command dialog constructors unchanged', () => {
42
- const { BoundDataPage, BoundObservableDataTable, BoundCommandDialog, BoundStepperCommandDialog } = adapters;
43
- render(<><BoundDataPage query={proxies.Snapshot} title='' emptyMessage='' children={undefined} />
44
- <BoundDataPage query={proxies.Live} title='' emptyMessage='' children={undefined} />
45
- <BoundObservableDataTable query={proxies.Live} emptyMessage='' />
46
- <BoundCommandDialog command={proxies.Save} title='' visible />
47
- <BoundStepperCommandDialog command={proxies.Save} title='' visible /></>);
48
- expect(received.mock.calls.map(([props]) => props.query ?? props.command)).toEqual([proxies.Snapshot, proxies.Live, proxies.Live, proxies.Save, proxies.Save]);
49
- });
50
-
51
- it('should visibly reject a wrong-kind registered query without selecting another query', async () => {
52
- bindings.registerQuery('wrong', proxies.Save);
53
- bindings.registerQuery('valid', proxies.Snapshot);
54
- const { SceneDataTable } = await import('../../data/SceneDataTable');
55
- await act(async () => {
56
- render(<SceneDataTable element={externalComponent('Cratis.Components:dataTable', { query: 'wrong' })} slots={{}} />);
57
- });
58
- // The published Components boundary sanitizes exception text; assert visible failure, not
59
- // its former raw-error presentation. requireArcProxy's specs cover the precise diagnostic.
60
- expect(screen.getByRole('alert')).toBeTruthy();
61
- expect(received).not.toHaveBeenCalled();
62
- });
63
-
64
- it('should visibly reject snapshot bindings in observable tables and query bindings in dialogs', () => {
65
- const { BoundObservableDataTable, BoundCommandDialog, BoundStepperCommandDialog, BoundDataPage } = adapters;
66
- render(<><Boundary><BoundObservableDataTable query={proxies.Snapshot} emptyMessage='' /></Boundary>
67
- <Boundary><BoundCommandDialog command={proxies.Snapshot} title='' visible /></Boundary>
68
- <Boundary><BoundStepperCommandDialog command={proxies.Live} title='' visible /></Boundary>
69
- <Boundary><BoundDataPage query={proxies.Save} title='' emptyMessage='' children={undefined} /></Boundary></>);
70
- expect(screen.getAllByRole('alert')).toHaveLength(4);
71
- expect(received).not.toHaveBeenCalled();
72
- });
73
- });
@@ -1,37 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { act, cleanup, render, screen } from '@testing-library/react';
5
- import { expect, vi } from 'vitest';
6
- import { externalComponent } from '../../given';
7
-
8
- describe('when previewing bound adapters without Arc', () => {
9
- const loaded = vi.fn();
10
-
11
- afterEach(() => {
12
- cleanup();
13
- vi.doUnmock('../ArcBoundComponents');
14
- vi.resetModules();
15
- });
16
-
17
- it('should show missing bindings without importing the Arc runtime module', async () => {
18
- vi.resetModules();
19
- vi.doMock('../ArcBoundComponents', () => {
20
- loaded();
21
- throw new Error('Arc is unavailable in preview');
22
- });
23
- const { clearBindings } = await import('../bindingRegistry');
24
- clearBindings();
25
- const { SceneDataTable } = await import('../../data/SceneDataTable');
26
- const { SceneObservableDataTable } = await import('../../data/SceneObservableDataTable');
27
- const { SceneDataPage } = await import('../../pages/SceneDataPage');
28
- const { SceneCommandDialog } = await import('../../dialogs/SceneCommandDialog');
29
- const { SceneStepperCommandDialog } = await import('../../dialogs/SceneStepperCommandDialog');
30
- await act(async () => {
31
- render(<>{[SceneDataTable, SceneObservableDataTable, SceneDataPage, SceneCommandDialog, SceneStepperCommandDialog].map((Adapter, index) =>
32
- <Adapter key={index} element={externalComponent('Cratis.Components:preview', { query: 'missing', command: 'missing' })} slots={{}} />)}</>);
33
- });
34
- expect(screen.getAllByText(/Unresolved .* binding 'missing'/)).toHaveLength(5);
35
- expect(loaded).not.toHaveBeenCalled();
36
- });
37
- });
@@ -1,44 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { expect } from 'vitest';
5
- import { QueryFor, ObservableQueryFor } from '@cratis/arc/queries';
6
- import { Command } from '@cratis/arc/commands';
7
- import type { ComponentProps } from 'react';
8
- import type { DataTableForQuery, DataTableForObservableQuery } from '@cratis/components/DataTables';
9
- import type { CommandDialog } from '@cratis/components/CommandDialog';
10
- import { requireArcProxy } from '../requireArcProxy';
11
- import { registerQuery, resolveQuery, clearBindings } from '../bindingRegistry';
12
- import { Snapshot, Live, Save } from './NativeProxies';
13
-
14
- describe('when validating a proxy at the lazy Arc boundary', () => {
15
- afterEach(clearBindings);
16
-
17
- it('should preserve native constructors without constructing them and satisfy public component props', () => {
18
- const query: ComponentProps<typeof DataTableForQuery>['query'] = requireArcProxy(Snapshot, QueryFor<object, object>, 'query');
19
- const observable: ComponentProps<typeof DataTableForObservableQuery>['query'] = requireArcProxy(Live, ObservableQueryFor<object, object>, 'observable query');
20
- const command: ComponentProps<typeof CommandDialog>['command'] = requireArcProxy(Save, Command<object, object>, 'command');
21
- expect(query).toBe(Snapshot);
22
- expect(observable).toBe(Live);
23
- expect(command).toBe(Save);
24
- });
25
-
26
- it('should reject wrong kinds rather than perform an observable query as a snapshot', () => {
27
- expect(() => requireArcProxy(Live, QueryFor<object, object>, 'query')).toThrow('Invalid query binding');
28
- expect(() => requireArcProxy(Snapshot, ObservableQueryFor<object, object>, 'observable query')).toThrow('Invalid observable query binding');
29
- expect(() => requireArcProxy(Snapshot, Command<object, object>, 'command')).toThrow('Invalid command binding');
30
- expect(() => requireArcProxy(Save, QueryFor<object, object>, 'query')).toThrow('Invalid query binding');
31
- });
32
-
33
- it('should preserve arbitrary constructor registration but reject it at an Arc adapter', () => {
34
- class Arbitrary { constructor(readonly input: string) {} }
35
- registerQuery('arbitrary', Arbitrary);
36
- expect(resolveQuery('arbitrary')).toBe(Arbitrary);
37
- expect(() => requireArcProxy(Arbitrary, QueryFor<object, object>, 'query')).toThrow('Invalid query binding');
38
- });
39
-
40
- it('should reject a native subclass requiring constructor arguments without invoking it', () => {
41
- class NeedsArguments extends Snapshot { constructor(readonly input: string) { super(); } }
42
- expect(() => requireArcProxy(NeedsArguments, QueryFor<object, object>, 'query')).toThrow('zero-argument Arc');
43
- });
44
- });
@@ -1,34 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { externalComponent } from '../../given';
5
- import { BindingKind } from '../BindingKind';
6
- import { clearBindings, registerCommand, registerQuery } from '../bindingRegistry';
7
- import { resolveElementBinding } from '../resolveElementBinding';
8
-
9
- class RegisterInvoice {}
10
- class SameNameQuery {}
11
-
12
- describe('when resolving a command binding', () => {
13
- beforeEach(() => {
14
- clearBindings();
15
- registerCommand('RegisterInvoice', RegisterInvoice);
16
- registerQuery('ApproveInvoice', SameNameQuery);
17
- });
18
-
19
- afterEach(() => clearBindings());
20
-
21
- describe('and the element names a registered command', () => {
22
- const binding = () =>
23
- resolveElementBinding(externalComponent('Cratis.Components:commandForm', { command: 'RegisterInvoice' }), BindingKind.Command);
24
-
25
- it('should carry the registered class', () => binding().target!.should.equal(RegisterInvoice));
26
- });
27
-
28
- describe('and a query happens to be registered under the same name', () => {
29
- const binding = () =>
30
- resolveElementBinding(externalComponent('Cratis.Components:commandForm', { command: 'ApproveInvoice' }), BindingKind.Command);
31
-
32
- it('should not satisfy a command binding from the query registry', () => (binding().target === undefined).should.be.true);
33
- });
34
- });
@@ -1,45 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { externalComponent } from '../../given';
5
- import { BindingKind } from '../BindingKind';
6
- import { clearBindings, registerQuery } from '../bindingRegistry';
7
- import { resolveElementBinding } from '../resolveElementBinding';
8
-
9
- class AllInvoices {}
10
-
11
- describe('when resolving a query binding', () => {
12
- beforeEach(() => {
13
- clearBindings();
14
- registerQuery('AllInvoices', AllInvoices);
15
- });
16
-
17
- afterEach(() => clearBindings());
18
-
19
- describe('and the element names a registered query', () => {
20
- const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable', { query: 'AllInvoices' }), BindingKind.Query);
21
-
22
- it('should carry the name the element asked for', () => binding().name!.should.equal('AllInvoices'));
23
- it('should carry the registered class', () => binding().target!.should.equal(AllInvoices));
24
- });
25
-
26
- describe('and the element names a query nothing is registered under', () => {
27
- const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable', { query: 'AllCustomers' }), BindingKind.Query);
28
-
29
- it('should still carry the name, so the placeholder can report it', () => binding().name!.should.equal('AllCustomers'));
30
- it('should carry no class', () => (binding().target === undefined).should.be.true);
31
- });
32
-
33
- describe('and the element names no query at all', () => {
34
- const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable'), BindingKind.Query);
35
-
36
- it('should carry no name', () => (binding().name === undefined).should.be.true);
37
- it('should carry no class', () => (binding().target === undefined).should.be.true);
38
- });
39
-
40
- describe('and the element carries the name under the command property instead', () => {
41
- const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable', { command: 'AllInvoices' }), BindingKind.Query);
42
-
43
- it('should not read a command name as a query name', () => (binding().name === undefined).should.be.true);
44
- });
45
- });
@@ -1,123 +0,0 @@
1
- // Copyright (c) Cratis. All rights reserved.
2
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
-
4
- import { act, cleanup, render, screen } from '@testing-library/react';
5
- import { vi } from 'vitest';
6
- import { externalComponent } from '../../given';
7
-
8
- let InvoicesForProject: typeof import('../../bindings/for_requireArcProxy/NativeProxies').Snapshot;
9
- let AnotherQuery: typeof InvoicesForProject;
10
-
11
- // Load a fresh adapter so its lazy component cannot leak the peer double into other specs.
12
- describe('when forwarding query arguments', () => {
13
- const suppliedId = 'project-with-an-explicit-id';
14
- const received = vi.fn<(properties: Record<string, unknown>) => void>();
15
- let SceneDataTable: typeof import('../SceneDataTable').SceneDataTable;
16
- let bindings: typeof import('../../bindings');
17
-
18
- beforeEach(async () => {
19
- vi.resetModules();
20
- received.mockClear();
21
- vi.doMock('@cratis/components/DataTables', () => ({
22
- DataTableForQuery: (properties: Record<string, unknown>) => {
23
- received(properties);
24
- return <div data-testid='query-table' />;
25
- },
26
- }));
27
- ({ Snapshot: InvoicesForProject } = await import('../../bindings/for_requireArcProxy/NativeProxies'));
28
- AnotherQuery = InvoicesForProject;
29
- bindings = await import('../../bindings');
30
- bindings.clearBindings();
31
- bindings.registerQuery('InvoicesForProject', InvoicesForProject);
32
- bindings.registerQuery('AnotherQuery', AnotherQuery);
33
- ({ SceneDataTable } = await import('../SceneDataTable'));
34
- });
35
-
36
- afterEach(() => {
37
- cleanup();
38
- bindings.clearBindings();
39
- vi.doUnmock('@cratis/components/DataTables');
40
- vi.resetModules();
41
- });
42
-
43
- async function renderTable(properties: Record<string, unknown>) {
44
- const element = externalComponent('Cratis.Components:dataTable', properties);
45
- await act(async () => {
46
- render(<SceneDataTable element={element} slots={{}} />);
47
- });
48
- }
49
-
50
- it('should pass the exact registered constructor and explicit projectId object through the runtime boundary', async () => {
51
- const queryArguments = { projectId: suppliedId };
52
- await renderTable({ query: 'InvoicesForProject', queryArguments });
53
- await screen.findByTestId('query-table');
54
- const properties = received.mock.lastCall![0];
55
- (properties.query === InvoicesForProject).should.equal(true);
56
- (properties.queryArguments === queryArguments).should.equal(true);
57
- properties.should.have.property('queryArguments').that.deep.equals({ projectId: suppliedId });
58
- });
59
-
60
- it('should bridge an identity-only query to an existing table without a second legacy registration', async () => {
61
- bindings.clearBindings();
62
- bindings.registerQueryIdentity('InvoicesForProject', 'Invoices/ForProject', InvoicesForProject);
63
- const queryArguments = { projectId: suppliedId };
64
- await renderTable({ query: 'InvoicesForProject', queryArguments });
65
- await screen.findByTestId('query-table');
66
- (received.mock.lastCall![0].query === InvoicesForProject).should.equal(true);
67
- (received.mock.lastCall![0].queryArguments === queryArguments).should.equal(true);
68
- });
69
-
70
- it('should visibly reject ambiguous identity-only tables without selecting either native proxy', async () => {
71
- bindings.clearBindings();
72
- bindings.registerQueryIdentity('InvoicesForProject', 'One/ForProject', InvoicesForProject);
73
- bindings.registerQueryIdentity('InvoicesForProject', 'Two/ForProject', AnotherQuery);
74
- await renderTable({ query: 'InvoicesForProject' });
75
- (screen.getByText("Unresolved query binding 'InvoicesForProject' on Cratis.Components:dataTable") !== null).should.equal(true);
76
- received.mock.calls.should.have.lengthOf(0);
77
- });
78
-
79
- it('should preserve all supplied keys and values without normalization or defaults', async () => {
80
- const queryArguments = { projectId: suppliedId, ProjectID: 'distinct', limit: 0, enabled: false, optional: null, filter: { names: ['one'] } };
81
- await renderTable({ query: 'InvoicesForProject', queryArguments });
82
- await screen.findByTestId('query-table');
83
- (received.mock.lastCall![0].queryArguments === queryArguments).should.equal(true);
84
- });
85
-
86
- it('should leave omitted arguments absent from the underlying component props', async () => {
87
- await renderTable({ query: 'InvoicesForProject' });
88
- await screen.findByTestId('query-table');
89
- Object.prototype.hasOwnProperty.call(received.mock.lastCall![0], 'queryArguments').should.equal(false);
90
- (received.mock.lastCall![0].query === InvoicesForProject).should.equal(true);
91
- });
92
-
93
- it('should treat undefined arguments as omitted like the existing property readers', async () => {
94
- await renderTable({ query: 'InvoicesForProject', queryArguments: undefined });
95
- await screen.findByTestId('query-table');
96
- Object.prototype.hasOwnProperty.call(received.mock.lastCall![0], 'queryArguments').should.equal(false);
97
- });
98
-
99
- it('should pass an explicitly empty argument object unchanged', async () => {
100
- const queryArguments = {};
101
- await renderTable({ query: 'InvoicesForProject', queryArguments });
102
- await screen.findByTestId('query-table');
103
- (received.mock.lastCall![0].queryArguments === queryArguments).should.equal(true);
104
- });
105
-
106
- for (const queryArguments of [[], ['project'], 'project', '{"projectId":"project"}', 42, false, null]) {
107
- it(`should visibly reject ${JSON.stringify(queryArguments)} without mounting a query table`, async () => {
108
- await renderTable({ query: 'InvoicesForProject', queryArguments });
109
- (screen.getByText("Invalid queryArguments: expected an object on Cratis.Components:dataTable") !== null).should.equal(true);
110
- received.mock.calls.should.have.lengthOf(0);
111
- (screen.queryByTestId('query-table') === null).should.equal(true);
112
- });
113
- }
114
-
115
- for (const queryArguments of [{ projectId: suppliedId }, null, []]) {
116
- it(`should retain MissingBinding precedence and never choose another registered query with ${JSON.stringify(queryArguments)}`, async () => {
117
- await renderTable({ query: 'UnregisteredQuery', queryArguments });
118
- (screen.getByText("Unresolved query binding 'UnregisteredQuery' on Cratis.Components:dataTable") !== null).should.equal(true);
119
- received.mock.calls.should.have.lengthOf(0);
120
- (screen.queryByText(/Invalid queryArguments/) === null).should.equal(true);
121
- });
122
- }
123
- });