@pisell/private-materials 6.12.167 → 6.12.169

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 (231) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/meta.js +1 -1
  5. package/build/lowcode/render/default/view.css +1 -1
  6. package/build/lowcode/render/default/view.js +10 -10
  7. package/build/lowcode/view.css +1 -1
  8. package/build/lowcode/view.js +10 -10
  9. package/es/components/HDLKiosk/{contracts → app/contracts}/config.js +1 -1
  10. package/es/components/HDLKiosk/app/manifest.js +11 -11
  11. package/es/components/HDLKiosk/app/operations.js +92 -0
  12. package/es/components/HDLKiosk/app/workflow/barcode.js +11 -13
  13. package/es/components/HDLKiosk/app/workflow/index.js +16 -0
  14. package/es/components/HDLKiosk/app/workflow/predicates.js +1 -1
  15. package/es/components/HDLKiosk/app/workflow/quick.js +1 -1
  16. package/es/components/HDLKiosk/app/workflow/registry.js +4 -4
  17. package/es/components/HDLKiosk/app/workflow/scale.js +5 -1
  18. package/es/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +104 -167
  19. package/es/components/HDLKiosk/docs/01-/346/240/270/345/277/203/350/277/220/350/241/214/346/234/272/345/210/266.md +105 -101
  20. package/es/components/HDLKiosk/docs/03-/344/270/232/345/212/241/346/265/201/347/250/213/344/270/216/344/272/244/344/272/222/350/247/204/345/210/231.md +2 -2
  21. package/es/components/HDLKiosk/docs/04-/350/256/276/345/244/207/344/270/216/347/247/260/351/207/215.md +43 -26
  22. package/es/components/HDLKiosk/docs/05-/344/272/244/346/230/223/345/256/211/345/205/250.md +2 -0
  23. package/es/components/HDLKiosk/docs/07-/345/220/216/347/273/255/345/267/245/344/275/234.md +1 -1
  24. package/es/components/HDLKiosk/docs/08-/346/227/240/345/244/264Application/350/277/220/350/241/214/346/227/266/351/207/215/346/236/204/350/256/276/350/256/241.md +719 -0
  25. package/es/components/HDLKiosk/docs/09-Entry/350/256/276/345/244/207/344/272/213/344/273/266/351/207/215/346/236/204/344/277/256/345/244/215/346/212/245/345/221/212.md +187 -0
  26. package/es/components/HDLKiosk/docs/README.md +6 -2
  27. package/es/components/HDLKiosk/docs//345/256/236/346/226/275/350/277/233/345/272/246.md +8 -7
  28. package/es/components/HDLKiosk/docs//346/236/266/346/236/204/350/256/276/350/256/241.md +16 -18
  29. package/es/components/HDLKiosk/index.js +22 -28
  30. package/es/components/HDLKiosk/index.less +1 -1
  31. package/es/components/HDLKiosk/kernel/README.md +14 -13
  32. package/es/components/HDLKiosk/kernel/application/defineApplication.js +63 -24
  33. package/es/components/HDLKiosk/kernel/application/defineSlice.js +6 -6
  34. package/es/components/HDLKiosk/kernel/application/runtime.js +237 -0
  35. package/es/components/HDLKiosk/kernel/operations/coordinator.js +1 -1
  36. package/es/components/HDLKiosk/kernel/operations/registry.js +3 -3
  37. package/es/components/HDLKiosk/kernel/operations/sessionEpoch.js +1 -1
  38. package/es/components/HDLKiosk/kernel/operations/types.js +7 -3
  39. package/es/components/HDLKiosk/kernel/workflow/actor.js +51 -22
  40. package/es/components/HDLKiosk/kernel/workflow/compiler.js +23 -30
  41. package/es/components/HDLKiosk/runtime/createRuntime.js +238 -0
  42. package/es/components/HDLKiosk/{devices → runtime/devices}/dedupeStore.js +1 -1
  43. package/es/components/HDLKiosk/{devices → runtime/devices}/scaleIngress.js +1 -1
  44. package/es/components/HDLKiosk/{devices/scale/runtime.js → runtime/devices/scaleStore.js} +18 -24
  45. package/es/components/HDLKiosk/{devices → runtime/devices}/scannerIngress.js +1 -1
  46. package/es/components/HDLKiosk/runtime/devices/scannerSessionPort.js +60 -0
  47. package/es/components/HDLKiosk/runtime/devices/scannerSessionRouter.js +212 -0
  48. package/es/components/HDLKiosk/runtime/operations/barcode.js +18 -0
  49. package/es/components/HDLKiosk/runtime/operations/cart.js +44 -0
  50. package/es/components/HDLKiosk/{app → runtime}/operations/cartConsistency.js +1 -1
  51. package/es/components/HDLKiosk/{app → runtime}/operations/checkout.js +95 -110
  52. package/es/components/HDLKiosk/{app → runtime}/operations/checkoutRequirements.js +1 -1
  53. package/es/components/HDLKiosk/{app → runtime}/operations/checkoutSafety.js +1 -1
  54. package/es/components/HDLKiosk/{app → runtime}/operations/coordinator.js +2 -2
  55. package/es/components/HDLKiosk/runtime/operations/customization.js +70 -0
  56. package/es/components/HDLKiosk/{app → runtime}/operations/errors.js +1 -1
  57. package/es/components/HDLKiosk/runtime/operations/fulfillment.js +6 -0
  58. package/es/components/HDLKiosk/runtime/operations/identity.js +55 -0
  59. package/es/components/HDLKiosk/runtime/operations/registry.js +34 -0
  60. package/es/components/HDLKiosk/runtime/operations/session.js +29 -0
  61. package/es/components/HDLKiosk/runtime/operations/types.js +13 -0
  62. package/es/components/HDLKiosk/runtime/session/blockPolicy.js +14 -0
  63. package/es/components/HDLKiosk/runtime/{createWorkflowSession.js → session/createSession.js} +67 -17
  64. package/es/components/HDLKiosk/runtime/{domainTransitionRunner.js → session/transitionRunner.js} +10 -5
  65. package/es/components/HDLKiosk/runtime/{workflowContext.js → session/workflowContext.js} +2 -2
  66. package/es/components/HDLKiosk/runtime/{workflowLifecycle.js → session/workflowLifecycle.js} +2 -2
  67. package/es/components/HDLKiosk/runtime/triggers.js +28 -0
  68. package/es/components/HDLKiosk/slices/catalog/Screen/index.js +15 -8
  69. package/es/components/HDLKiosk/slices/catalog/Screen/index.less +74 -13
  70. package/es/components/HDLKiosk/slices/catalog/slice.js +2 -2
  71. package/es/components/HDLKiosk/slices/customization/Screen/index.js +37 -38
  72. package/es/components/HDLKiosk/slices/customization/Screen/index.less +5 -0
  73. package/es/components/HDLKiosk/slices/customization/slice.js +3 -4
  74. package/es/components/HDLKiosk/slices/fulfillment/slice.js +2 -2
  75. package/es/components/HDLKiosk/slices/fulfillment/view.js +1 -1
  76. package/es/components/HDLKiosk/slices/identity/Screen/index.js +2 -2
  77. package/es/components/HDLKiosk/slices/identity/slice.js +3 -3
  78. package/es/components/HDLKiosk/slices/identity/view.js +1 -1
  79. package/es/components/HDLKiosk/slices/payment/slice.js +3 -3
  80. package/es/components/HDLKiosk/slices/primaryProductPrompt/slice.js +2 -2
  81. package/es/components/HDLKiosk/slices/primaryProductPrompt/view.js +2 -2
  82. package/es/components/HDLKiosk/{runtime → ui}/HDLKioskWorkflowView.js +45 -131
  83. package/es/components/HDLKiosk/ui/ScaleSimulatorConsole/index.js +387 -0
  84. package/es/components/HDLKiosk/ui/ScaleSimulatorConsole/index.less +621 -0
  85. package/es/components/HDLKiosk/{app → ui}/ScreenRenderer.js +7 -7
  86. package/es/components/HDLKiosk/ui/controllers/useHDLKioskActionDispatcher.js +66 -0
  87. package/es/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskCustomerController.js +1 -1
  88. package/es/components/HDLKiosk/ui/controllers/useHDLKioskDeviceController.js +25 -0
  89. package/es/components/HDLKiosk/ui/controllers/useHDLKioskExitController.js +53 -0
  90. package/es/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskScreenData.js +1 -1
  91. package/es/components/HDLKiosk/ui/controllers/useHDLKioskSessionController.js +39 -0
  92. package/es/components/HDLKiosk/{app → ui}/entry/Screen/index.js +8 -6
  93. package/es/components/HDLKiosk/{app → ui}/entry/model.js +2 -2
  94. package/es/components/HDLKiosk/ui/scale.js +20 -0
  95. package/es/components/HDLKiosk/{runtime/useHostSnapshot.js → ui/snapshots.js} +6 -8
  96. package/es/components/HDLKiosk/{app → ui}/views.js +1 -1
  97. package/es/components/HDLKiosk/{runtime → ui}/workflowEvent.js +1 -1
  98. package/es/components/HDLKiosk/utils.js +4 -4
  99. package/es/components/bigSale/templates/HDLKiosk/adapter/HDLKioskPaymentRuntime.js +2 -1
  100. package/es/components/bigSale/templates/HDLKiosk/adapter/capabilities.js +1 -1
  101. package/es/components/bigSale/templates/HDLKiosk/adapter/projection.js +21 -11
  102. package/es/components/bigSale/templates/HDLKiosk/adapter/sales.js +21 -3
  103. package/es/components/bigSale/templates/HDLKiosk/adapter/scaleTrigger.js +20 -5
  104. package/es/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskHost.js +3 -0
  105. package/es/components/bigSale/templates/HDLKiosk/index.js +3 -3
  106. package/lib/components/HDLKiosk/{contracts → app/contracts}/config.js +1 -1
  107. package/lib/components/HDLKiosk/app/manifest.js +18 -19
  108. package/lib/components/HDLKiosk/app/operations.js +105 -0
  109. package/lib/components/HDLKiosk/app/workflow/barcode.js +11 -13
  110. package/lib/components/HDLKiosk/app/workflow/index.js +16 -0
  111. package/lib/components/HDLKiosk/app/workflow/predicates.js +1 -0
  112. package/lib/components/HDLKiosk/app/workflow/quick.js +1 -1
  113. package/lib/components/HDLKiosk/app/workflow/registry.js +3 -3
  114. package/lib/components/HDLKiosk/app/workflow/scale.js +5 -1
  115. package/lib/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +104 -167
  116. package/lib/components/HDLKiosk/docs/01-/346/240/270/345/277/203/350/277/220/350/241/214/346/234/272/345/210/266.md +105 -101
  117. package/lib/components/HDLKiosk/docs/03-/344/270/232/345/212/241/346/265/201/347/250/213/344/270/216/344/272/244/344/272/222/350/247/204/345/210/231.md +2 -2
  118. package/lib/components/HDLKiosk/docs/04-/350/256/276/345/244/207/344/270/216/347/247/260/351/207/215.md +43 -26
  119. package/lib/components/HDLKiosk/docs/05-/344/272/244/346/230/223/345/256/211/345/205/250.md +2 -0
  120. package/lib/components/HDLKiosk/docs/07-/345/220/216/347/273/255/345/267/245/344/275/234.md +1 -1
  121. package/lib/components/HDLKiosk/docs/08-/346/227/240/345/244/264Application/350/277/220/350/241/214/346/227/266/351/207/215/346/236/204/350/256/276/350/256/241.md +719 -0
  122. package/lib/components/HDLKiosk/docs/09-Entry/350/256/276/345/244/207/344/272/213/344/273/266/351/207/215/346/236/204/344/277/256/345/244/215/346/212/245/345/221/212.md +187 -0
  123. package/lib/components/HDLKiosk/docs/README.md +6 -2
  124. package/lib/components/HDLKiosk/docs//345/256/236/346/226/275/350/277/233/345/272/246.md +8 -7
  125. package/lib/components/HDLKiosk/docs//346/236/266/346/236/204/350/256/276/350/256/241.md +16 -18
  126. package/lib/components/HDLKiosk/index.js +25 -31
  127. package/lib/components/HDLKiosk/index.less +1 -1
  128. package/lib/components/HDLKiosk/kernel/README.md +14 -13
  129. package/lib/components/HDLKiosk/kernel/application/defineApplication.js +65 -25
  130. package/lib/components/HDLKiosk/kernel/application/defineSlice.js +6 -6
  131. package/lib/components/HDLKiosk/kernel/application/runtime.js +237 -0
  132. package/lib/components/HDLKiosk/kernel/operations/coordinator.js +1 -1
  133. package/lib/components/HDLKiosk/kernel/operations/registry.js +3 -3
  134. package/lib/components/HDLKiosk/kernel/operations/sessionEpoch.js +1 -1
  135. package/lib/components/HDLKiosk/kernel/operations/types.js +8 -3
  136. package/lib/components/HDLKiosk/kernel/workflow/actor.js +51 -22
  137. package/lib/components/HDLKiosk/kernel/workflow/compiler.js +23 -30
  138. package/lib/components/HDLKiosk/runtime/createRuntime.js +239 -0
  139. package/lib/components/HDLKiosk/{devices → runtime/devices}/dedupeStore.js +1 -1
  140. package/lib/components/HDLKiosk/{devices → runtime/devices}/scaleIngress.js +1 -1
  141. package/lib/components/HDLKiosk/{devices/scale/runtime.js → runtime/devices/scaleStore.js} +17 -27
  142. package/lib/components/HDLKiosk/{devices → runtime/devices}/scannerIngress.js +1 -1
  143. package/lib/components/HDLKiosk/runtime/devices/scannerSessionPort.js +60 -0
  144. package/lib/components/HDLKiosk/runtime/devices/scannerSessionRouter.js +212 -0
  145. package/lib/components/HDLKiosk/runtime/operations/barcode.js +17 -0
  146. package/lib/components/HDLKiosk/runtime/operations/cart.js +46 -0
  147. package/lib/components/HDLKiosk/{app → runtime}/operations/cartConsistency.js +1 -1
  148. package/lib/components/HDLKiosk/{app → runtime}/operations/checkout.js +97 -112
  149. package/lib/components/HDLKiosk/{app → runtime}/operations/checkoutRequirements.js +1 -1
  150. package/lib/components/HDLKiosk/{app → runtime}/operations/checkoutSafety.js +1 -1
  151. package/lib/components/HDLKiosk/{app → runtime}/operations/coordinator.js +2 -2
  152. package/lib/components/HDLKiosk/runtime/operations/customization.js +73 -0
  153. package/lib/components/HDLKiosk/{app → runtime}/operations/errors.js +1 -1
  154. package/lib/components/HDLKiosk/runtime/operations/fulfillment.js +5 -0
  155. package/lib/components/HDLKiosk/runtime/operations/identity.js +55 -0
  156. package/lib/components/HDLKiosk/runtime/operations/registry.js +34 -0
  157. package/lib/components/HDLKiosk/runtime/operations/session.js +30 -0
  158. package/lib/components/HDLKiosk/runtime/operations/types.js +14 -0
  159. package/lib/components/HDLKiosk/runtime/session/blockPolicy.js +14 -0
  160. package/lib/components/HDLKiosk/runtime/{createWorkflowSession.js → session/createSession.js} +71 -21
  161. package/lib/components/HDLKiosk/runtime/{domainTransitionRunner.js → session/transitionRunner.js} +10 -5
  162. package/lib/components/HDLKiosk/runtime/{workflowContext.js → session/workflowContext.js} +2 -2
  163. package/lib/components/HDLKiosk/runtime/{workflowLifecycle.js → session/workflowLifecycle.js} +2 -2
  164. package/lib/components/HDLKiosk/runtime/triggers.js +28 -0
  165. package/lib/components/HDLKiosk/slices/catalog/Screen/index.js +15 -8
  166. package/lib/components/HDLKiosk/slices/catalog/Screen/index.less +74 -13
  167. package/lib/components/HDLKiosk/slices/catalog/slice.js +3 -3
  168. package/lib/components/HDLKiosk/slices/customization/Screen/index.js +38 -39
  169. package/lib/components/HDLKiosk/slices/customization/Screen/index.less +5 -0
  170. package/lib/components/HDLKiosk/slices/customization/slice.js +5 -6
  171. package/lib/components/HDLKiosk/slices/fulfillment/slice.js +3 -3
  172. package/lib/components/HDLKiosk/slices/fulfillment/view.js +1 -1
  173. package/lib/components/HDLKiosk/slices/identity/Screen/index.js +2 -2
  174. package/lib/components/HDLKiosk/slices/identity/slice.js +4 -4
  175. package/lib/components/HDLKiosk/slices/identity/view.js +1 -1
  176. package/lib/components/HDLKiosk/slices/payment/slice.js +5 -5
  177. package/lib/components/HDLKiosk/slices/primaryProductPrompt/slice.js +2 -2
  178. package/lib/components/HDLKiosk/slices/primaryProductPrompt/view.js +2 -2
  179. package/lib/components/HDLKiosk/{runtime → ui}/HDLKioskWorkflowView.js +46 -132
  180. package/lib/components/HDLKiosk/ui/ScaleSimulatorConsole/index.js +390 -0
  181. package/lib/components/HDLKiosk/ui/ScaleSimulatorConsole/index.less +621 -0
  182. package/lib/components/HDLKiosk/{app → ui}/ScreenRenderer.js +7 -7
  183. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskActionDispatcher.js +67 -0
  184. package/lib/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskCustomerController.js +1 -1
  185. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskDeviceController.js +26 -0
  186. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskExitController.js +54 -0
  187. package/lib/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskScreenData.js +1 -1
  188. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskSessionController.js +40 -0
  189. package/lib/components/HDLKiosk/{app → ui}/entry/Screen/index.js +8 -6
  190. package/lib/components/HDLKiosk/{app → ui}/entry/model.js +2 -2
  191. package/lib/components/HDLKiosk/ui/scale.js +24 -0
  192. package/lib/components/HDLKiosk/{runtime/useHostSnapshot.js → ui/snapshots.js} +6 -7
  193. package/lib/components/HDLKiosk/{app → ui}/views.js +1 -1
  194. package/lib/components/HDLKiosk/{runtime → ui}/workflowEvent.js +1 -1
  195. package/lib/components/HDLKiosk/utils.js +4 -4
  196. package/lib/components/bigSale/templates/HDLKiosk/adapter/HDLKioskPaymentRuntime.js +2 -1
  197. package/lib/components/bigSale/templates/HDLKiosk/adapter/capabilities.js +1 -1
  198. package/lib/components/bigSale/templates/HDLKiosk/adapter/projection.js +21 -10
  199. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales.js +20 -2
  200. package/lib/components/bigSale/templates/HDLKiosk/adapter/scaleTrigger.js +19 -4
  201. package/lib/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskHost.js +3 -0
  202. package/lib/components/bigSale/templates/HDLKiosk/index.js +4 -4
  203. package/package.json +2 -2
  204. package/es/components/HDLKiosk/app/constants.js +0 -9
  205. package/es/components/HDLKiosk/app/operations/barcode.js +0 -22
  206. package/es/components/HDLKiosk/app/operations/cart.js +0 -60
  207. package/es/components/HDLKiosk/app/operations/fulfillment.js +0 -11
  208. package/es/components/HDLKiosk/app/operations/session.js +0 -41
  209. package/es/components/HDLKiosk/app/operations/types.js +0 -11
  210. package/es/components/HDLKiosk/devices/entryArbiter.js +0 -33
  211. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.js +0 -75
  212. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.js +0 -160
  213. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.js +0 -185
  214. package/es/components/HDLKiosk/runtime/useWorkflowSnapshot.js +0 -12
  215. package/es/components/HDLKiosk/slices/customization/operation.js +0 -80
  216. package/es/components/HDLKiosk/slices/identity/operation.js +0 -60
  217. package/lib/components/HDLKiosk/app/constants.js +0 -9
  218. package/lib/components/HDLKiosk/app/operations/barcode.js +0 -21
  219. package/lib/components/HDLKiosk/app/operations/cart.js +0 -62
  220. package/lib/components/HDLKiosk/app/operations/fulfillment.js +0 -10
  221. package/lib/components/HDLKiosk/app/operations/session.js +0 -42
  222. package/lib/components/HDLKiosk/app/operations/types.js +0 -12
  223. package/lib/components/HDLKiosk/devices/entryArbiter.js +0 -33
  224. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.js +0 -76
  225. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.js +0 -161
  226. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.js +0 -186
  227. package/lib/components/HDLKiosk/runtime/useWorkflowSnapshot.js +0 -13
  228. package/lib/components/HDLKiosk/slices/customization/operation.js +0 -83
  229. package/lib/components/HDLKiosk/slices/identity/operation.js +0 -60
  230. /package/es/components/HDLKiosk/{app → ui}/entry/Screen/index.less +0 -0
  231. /package/lib/components/HDLKiosk/{app → ui}/entry/Screen/index.less +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/private-materials",
3
- "version": "6.12.167",
3
+ "version": "6.12.169",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -70,9 +70,9 @@
70
70
  "styled-components": "^6.0.0-rc.3",
71
71
  "use-sync-external-store": "^1.6.0",
72
72
  "@pisell/pi-payment-sdk": "0.0.3",
73
+ "@pisell/materials": "6.12.50",
73
74
  "@pisell/utils": "3.0.4",
74
75
  "@pisell/icon": "0.0.11",
75
- "@pisell/materials": "6.12.50",
76
76
  "@pisell/date-picker": "3.0.10"
77
77
  },
78
78
  "peerDependencies": {
@@ -1,9 +0,0 @@
1
- //#region src/components/HDLKiosk/app/constants.ts
2
- /** HDLKiosk 应用级稳定常量;不包含可由宿主或 Workflow 定义覆盖的业务行为。 */
3
- const HDL_WORKFLOW_IDS = Object.freeze([
4
- "hdl.quick",
5
- "hdl.barcode",
6
- "hdl.scale"
7
- ]);
8
- //#endregion
9
- export { HDL_WORKFLOW_IDS };
@@ -1,22 +0,0 @@
1
- import { _asyncToGenerator } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
2
- import { finalizeCartMutation } from "./cartConsistency.js";
3
- import { defineOperation } from "./types.js";
4
- //#region src/components/HDLKiosk/app/operations/barcode.ts
5
- const barcodeConsumeOperation = defineOperation({
6
- id: "barcode.consume",
7
- conflictScope: "cart",
8
- retry: "explicit-user",
9
- execute: function() {
10
- var _ref = _asyncToGenerator(function* (context, input, signal) {
11
- const beforeFingerprint = context.host.sales.getObservedSnapshot().fingerprint.value;
12
- const mutation = yield context.host.sales.consumeBarcode(input.code, signal);
13
- if (mutation.status === "succeeded" && mutation.data.code === "requiresSelection") return mutation;
14
- return finalizeCartMutation(context, mutation, signal, () => mutation.status === "succeeded" && mutation.data.code === "added" && mutation.data.cartChangeConfirmed === true || context.host.sales.getObservedSnapshot().fingerprint.value !== beforeFingerprint);
15
- });
16
- return function execute(_x, _x2, _x3) {
17
- return _ref.apply(this, arguments);
18
- };
19
- }()
20
- });
21
- //#endregion
22
- export { barcodeConsumeOperation };
@@ -1,60 +0,0 @@
1
- import { _asyncToGenerator } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
2
- import { finalizeCartMutation } from "./cartConsistency.js";
3
- import { defineOperation } from "./types.js";
4
- //#region src/components/HDLKiosk/app/operations/cart.ts
5
- const cartAddProductOperation = defineOperation({
6
- id: "cart.addProduct",
7
- conflictScope: "cart",
8
- retry: "explicit-user",
9
- execute: function() {
10
- var _ref = _asyncToGenerator(function* (context, input, signal) {
11
- return finalizeCartMutation(context, yield context.host.sales.addProduct(input, signal), signal);
12
- });
13
- return function execute(_x, _x2, _x3) {
14
- return _ref.apply(this, arguments);
15
- };
16
- }()
17
- });
18
- const cartUpdateQuantityOperation = defineOperation({
19
- id: "cart.updateQuantity",
20
- conflictScope: "cart",
21
- timeoutMs: 15e3,
22
- retry: "explicit-user",
23
- execute: function() {
24
- var _ref2 = _asyncToGenerator(function* (context, input, signal) {
25
- const mutation = yield context.host.sales.updateQuantity(input, signal);
26
- return finalizeCartMutation(context, mutation, signal, () => {
27
- var _mutation$data$confir;
28
- if (mutation.status === "succeeded" && mutation.data.affectedLineId === input.lineId && ((_mutation$data$confir = mutation.data.confirmedLine) === null || _mutation$data$confir === void 0 ? void 0 : _mutation$data$confir.lineId) === input.lineId && decimalValuesEqual(mutation.data.confirmedLine.quantity, input.quantity)) return true;
29
- const line = context.host.sales.getObservedSnapshot().cart.lines.find((item) => item.lineId === input.lineId);
30
- return decimalValuesEqual(line === null || line === void 0 ? void 0 : line.quantity, input.quantity);
31
- });
32
- });
33
- return function execute(_x4, _x5, _x6) {
34
- return _ref2.apply(this, arguments);
35
- };
36
- }()
37
- });
38
- function decimalValuesEqual(left, right) {
39
- if (left === void 0) return false;
40
- const leftNumber = Number(left);
41
- const rightNumber = Number(right);
42
- return Number.isFinite(leftNumber) && Number.isFinite(rightNumber) && leftNumber === rightNumber;
43
- }
44
- const cartRemoveLineOperation = defineOperation({
45
- id: "cart.removeLine",
46
- conflictScope: "cart",
47
- timeoutMs: 15e3,
48
- retry: "explicit-user",
49
- execute: function() {
50
- var _ref3 = _asyncToGenerator(function* (context, input, signal) {
51
- const mutation = yield context.host.sales.removeLine(input, signal);
52
- return finalizeCartMutation(context, mutation, signal, () => mutation.status === "succeeded" && mutation.data.removedLineId === input.lineId || !context.host.sales.getObservedSnapshot().cart.lines.some((item) => item.lineId === input.lineId));
53
- });
54
- return function execute(_x7, _x8, _x9) {
55
- return _ref3.apply(this, arguments);
56
- };
57
- }()
58
- });
59
- //#endregion
60
- export { cartAddProductOperation, cartRemoveLineOperation, cartUpdateQuantityOperation };
@@ -1,11 +0,0 @@
1
- import { defineOperation } from "./types.js";
2
- //#region src/components/HDLKiosk/app/operations/fulfillment.ts
3
- const setFulfillmentOperation = defineOperation({
4
- id: "fulfillment.set",
5
- conflictScope: "cart",
6
- timeoutMs: 2e4,
7
- retry: "explicit-user",
8
- execute: (context, input, signal) => context.host.sales.setFulfillment(input, signal)
9
- });
10
- //#endregion
11
- export { setFulfillmentOperation };
@@ -1,41 +0,0 @@
1
- import { _asyncToGenerator } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
2
- import { operationUnknown } from "./errors.js";
3
- import { defineOperation } from "./types.js";
4
- //#region src/components/HDLKiosk/app/operations/session.ts
5
- function forwardFailure(result) {
6
- return result;
7
- }
8
- const sessionEnsureOperation = defineOperation({
9
- id: "session.ensure",
10
- conflictScope: "session",
11
- timeoutMs: 15e3,
12
- retry: "explicit-user",
13
- execute: ({ host }, _input, signal) => host.sales.ensureSession(signal)
14
- });
15
- const sessionResetOperation = defineOperation({
16
- id: "session.reset",
17
- tags: ["session-reset"],
18
- conflictScope: "session",
19
- timeoutMs: 15e3,
20
- retry: "never",
21
- execute: function() {
22
- var _ref = _asyncToGenerator(function* ({ host }, _input, signal) {
23
- const before = host.sales.getObservedSnapshot();
24
- if (before.payment.status === "pending" || before.payment.status === "unknown") return operationUnknown("resetBlockedByPaymentState");
25
- const reset = yield host.sales.clearAndReset(signal);
26
- if (reset.status !== "succeeded") return forwardFailure(reset);
27
- if (!reset.data.cartEmpty) return operationUnknown("resetHostResultNotEmpty");
28
- const consistency = yield host.sales.waitForCartConsistency(signal);
29
- if (consistency.status !== "succeeded") return forwardFailure(consistency);
30
- return {
31
- status: "succeeded",
32
- data: void 0
33
- };
34
- });
35
- return function execute(_x, _x2, _x3) {
36
- return _ref.apply(this, arguments);
37
- };
38
- }()
39
- });
40
- //#endregion
41
- export { sessionEnsureOperation, sessionResetOperation };
@@ -1,11 +0,0 @@
1
- import { createKernelOperationRegistry } from "../../kernel/operations/registry.js";
2
- import { defineKernelOperation } from "../../kernel/operations/types.js";
3
- //#region src/components/HDLKiosk/app/operations/types.ts
4
- function defineOperation(operation) {
5
- return defineKernelOperation(operation);
6
- }
7
- function createOperationRegistry(operations) {
8
- return createKernelOperationRegistry(operations);
9
- }
10
- //#endregion
11
- export { createOperationRegistry, defineOperation };
@@ -1,33 +0,0 @@
1
- //#region src/components/HDLKiosk/devices/entryArbiter.ts
2
- /**
3
- * JS 同一执行上下文内同步锁定第一个入口。它不持有 Workflow,也不执行副作用。
4
- */
5
- function createEntryArbiter() {
6
- let active;
7
- return {
8
- claim: (entry) => {
9
- if (active === void 0) {
10
- active = entry;
11
- return {
12
- status: "accepted",
13
- entry
14
- };
15
- }
16
- if (active === entry) return {
17
- status: "accepted",
18
- entry
19
- };
20
- return {
21
- status: "rejected",
22
- reason: "workflowLocked",
23
- activeEntry: active
24
- };
25
- },
26
- activeEntry: () => active,
27
- reset: () => {
28
- active = void 0;
29
- }
30
- };
31
- }
32
- //#endregion
33
- export { createEntryArbiter };
@@ -1,75 +0,0 @@
1
- import { _asyncToGenerator } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
2
- import { useCallback, useEffect, useRef, useState } from "react";
3
- //#region src/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.ts
4
- /**
5
- * 文件角色:连接 Scale Port、入口 Ingress 与会话启动器。
6
- * 运行机制:Entry 可见时消费称重边沿并请求 Scale Session;持续读数由 Scale Runtime 管理。
7
- * 边界:Scanner 由独立的 Session 级 Scanner Controller 持有。
8
- */
9
- function useHDLKioskDeviceController({ host, config, isActive, starting, session, sessionRef, activeRef, scaleIngress, start }) {
10
- const [scaleConnectionState, setScaleConnectionState] = useState();
11
- const rejectionSequence = useRef(0);
12
- const scaleAvailable = host.capabilities.scale.available;
13
- const scaleWeightChangeTrigger = host.capabilities.scale.weightChangeTrigger;
14
- useEffect(() => {
15
- setScaleConnectionState(void 0);
16
- }, [host]);
17
- const rejectDeviceEvent = useCallback((event, reason) => {
18
- rejectionSequence.current += 1;
19
- try {
20
- host.telemetry.emit({
21
- name: "hdlKiosk.device.eventRejected",
22
- traceId: `hdl-device-rejected-${rejectionSequence.current}`,
23
- occurredAt: Date.now(),
24
- attributes: {
25
- eventType: event.type,
26
- reason
27
- }
28
- });
29
- } catch (_unused) {}
30
- }, [host]);
31
- useEffect(() => {
32
- const primaryWeightedProductId = config.primaryWeightedProductId;
33
- if (!isActive || starting || !primaryWeightedProductId) return;
34
- if (session) return void 0;
35
- return host.devices.subscribe((event) => {
36
- if (!activeRef.current) return;
37
- if (event.type === "connectionChanged" && event.device === "scale") {
38
- var _event$state;
39
- setScaleConnectionState((_event$state = event.state) !== null && _event$state !== void 0 ? _event$state : event.connected ? "connected" : "disconnected");
40
- return;
41
- }
42
- if (event.type !== "weightChanged") return;
43
- const activeSession = sessionRef.current;
44
- const result = scaleIngress.accept(event, {
45
- active: activeRef.current,
46
- supported: scaleAvailable && scaleWeightChangeTrigger && config.enabledEntries.includes("scale"),
47
- workflowLocked: Boolean(activeSession),
48
- nodeAcceptsEvent: !activeSession,
49
- paymentFrozen: false
50
- });
51
- if (result.status === "rejected") {
52
- rejectDeviceEvent(event, result.reason);
53
- return;
54
- }
55
- _asyncToGenerator(function* () {
56
- if (!(yield start({ entry: "scale" }))) rejectDeviceEvent(event, "sessionStartFailed");
57
- })();
58
- }, { sources: ["scale"] });
59
- }, [
60
- config.enabledEntries,
61
- config.primaryWeightedProductId,
62
- host,
63
- isActive,
64
- rejectDeviceEvent,
65
- scaleAvailable,
66
- scaleIngress,
67
- scaleWeightChangeTrigger,
68
- session,
69
- start,
70
- starting
71
- ]);
72
- return { scaleConnectionState };
73
- }
74
- //#endregion
75
- export { useHDLKioskDeviceController };
@@ -1,160 +0,0 @@
1
- import { _asyncToGenerator } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
2
- import { useCallback, useEffect, useRef } from "react";
3
- //#region src/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.ts
4
- /**
5
- * 文件角色:在 HDLKiosk active 生命周期内唯一拥有 Scanner,并把扫码任务归属到 Session。
6
- * 运行机制:Ingress 去重/背压后进入有限 FIFO;Session readyForCommands 后串行消费。
7
- * 边界:不依赖任何 Screen mount,不负责 Workflow 导航,也不记录原始条码。
8
- */
9
- const NON_WRITABLE_ACTIVITIES = new Set(["paymentCompleted"]);
10
- const PAYMENT_OPERATION_IDS = new Set([
11
- "checkout.open",
12
- "checkout.payEftpos",
13
- "checkout.requestStaffPaymentApproval",
14
- "session.reset"
15
- ]);
16
- function isPaymentFrozen(host) {
17
- const status = host.sales.getObservedSnapshot().payment.status;
18
- return status === "pending" || status === "unknown" || status === "succeeded";
19
- }
20
- function isHDLKioskSessionCartWritable(session) {
21
- var _session$definition$n;
22
- const snapshot = session.actor.getSnapshot();
23
- if (snapshot.status === "blocked" || snapshot.status === "finished") return false;
24
- const activity = (_session$definition$n = session.definition.nodes[snapshot.nodeId]) === null || _session$definition$n === void 0 ? void 0 : _session$definition$n.activity;
25
- if (!activity || NON_WRITABLE_ACTIVITIES.has(activity)) return false;
26
- return !(snapshot.activeOperation && PAYMENT_OPERATION_IDS.has(snapshot.activeOperation.definitionId));
27
- }
28
- function useHDLKioskScannerController({ host, config, isActive, starting, sessionRef, activeRef, scannerIngress, start, waitForReadySession }) {
29
- const queueRef = useRef([]);
30
- const startingRef = useRef(starting);
31
- const processingRef = useRef(false);
32
- const currentTaskRef = useRef();
33
- const generationRef = useRef(0);
34
- const rejectionSequence = useRef(0);
35
- const scannerAvailable = host.capabilities.scanner.available;
36
- startingRef.current = starting;
37
- const emitRejected = useCallback((event, reason) => {
38
- rejectionSequence.current += 1;
39
- try {
40
- host.telemetry.emit({
41
- name: "hdlKiosk.device.eventRejected",
42
- traceId: `hdl-scanner-rejected-${rejectionSequence.current}`,
43
- occurredAt: Date.now(),
44
- attributes: {
45
- eventType: event.type,
46
- reason
47
- }
48
- });
49
- } catch (_unused) {}
50
- }, [host]);
51
- const emitCompleted = useCallback((task, target, result) => {
52
- try {
53
- host.telemetry.emit({
54
- name: "hdlKiosk.scanner.taskFinished",
55
- traceId: `hdl-scan:${target.actor.getSnapshot().sessionEpoch}:${task.event.eventId}`,
56
- occurredAt: Date.now(),
57
- attributes: {
58
- eventId: task.event.eventId,
59
- sessionEpoch: target.actor.getSnapshot().sessionEpoch,
60
- status: result.status
61
- }
62
- });
63
- } catch (_unused2) {}
64
- }, [host]);
65
- const processQueue = useCallback(_asyncToGenerator(function* () {
66
- if (processingRef.current) return;
67
- processingRef.current = true;
68
- const generation = generationRef.current;
69
- try {
70
- while (activeRef.current && generation === generationRef.current && queueRef.current.length > 0) {
71
- var _sessionRef$current;
72
- const nextTask = queueRef.current[0];
73
- if (!nextTask) continue;
74
- let target = (_sessionRef$current = sessionRef.current) !== null && _sessionRef$current !== void 0 ? _sessionRef$current : yield waitForReadySession();
75
- if (!target && nextTask.binding === "startBarcodeSession") target = yield start({ entry: "barcode" });
76
- if (!target || nextTask.acceptedSessionEpoch !== void 0 && target.actor.getSnapshot().sessionEpoch !== nextTask.acceptedSessionEpoch || generation !== generationRef.current || !activeRef.current) {
77
- const rejected = queueRef.current.shift();
78
- if (rejected) emitRejected(rejected.event, "sessionStartFailed");
79
- continue;
80
- }
81
- if (isPaymentFrozen(host) || !isHDLKioskSessionCartWritable(target)) {
82
- const rejected = queueRef.current.shift();
83
- if (rejected) emitRejected(rejected.event, "sessionNotCartWritable");
84
- continue;
85
- }
86
- const pendingNavigation = target.actor.getSnapshot().pendingNavigation;
87
- if (pendingNavigation) target.actor.resolvePendingNavigation(pendingNavigation.navigationId, "cancel");
88
- const task = queueRef.current.shift();
89
- if (!task) continue;
90
- currentTaskRef.current = task;
91
- const sessionEpoch = target.actor.getSnapshot().sessionEpoch;
92
- const result = yield target.executeCommand("barcode.consume", { code: task.code }, `scan:${sessionEpoch}:${task.event.eventId}`);
93
- currentTaskRef.current = void 0;
94
- emitCompleted(task, target, result);
95
- if (result.status === "partialFailure" || result.status === "unknown") queueRef.current = [];
96
- }
97
- } finally {
98
- currentTaskRef.current = void 0;
99
- processingRef.current = false;
100
- }
101
- }), [
102
- activeRef,
103
- emitCompleted,
104
- emitRejected,
105
- waitForReadySession,
106
- host,
107
- sessionRef,
108
- start
109
- ]);
110
- useEffect(() => {
111
- if (!isActive || !scannerAvailable) return void 0;
112
- return host.devices.subscribe((event) => {
113
- if (!activeRef.current || event.type !== "barcode") return;
114
- const activeSession = sessionRef.current;
115
- const canStartBarcode = config.enabledEntries.includes("barcode");
116
- const supported = Boolean(activeSession || startingRef.current || canStartBarcode);
117
- const cartWritable = activeSession ? isHDLKioskSessionCartWritable(activeSession) : true;
118
- const result = scannerIngress.accept(event, {
119
- active: activeRef.current,
120
- supported,
121
- workflowLocked: false,
122
- nodeAcceptsEvent: cartWritable,
123
- paymentFrozen: isPaymentFrozen(host),
124
- pendingEventCount: queueRef.current.length + (currentTaskRef.current ? 1 : 0)
125
- });
126
- if (result.status === "rejected") {
127
- emitRejected(event, result.reason);
128
- return;
129
- }
130
- queueRef.current.push({
131
- event: result.event,
132
- code: result.code,
133
- binding: activeSession || startingRef.current ? "existingOrPendingSession" : "startBarcodeSession",
134
- acceptedSessionEpoch: activeSession === null || activeSession === void 0 ? void 0 : activeSession.actor.getSnapshot().sessionEpoch
135
- });
136
- processQueue();
137
- }, { sources: ["scanner"] });
138
- }, [
139
- activeRef,
140
- config.enabledEntries,
141
- emitRejected,
142
- host,
143
- isActive,
144
- processQueue,
145
- scannerAvailable,
146
- scannerIngress,
147
- sessionRef
148
- ]);
149
- useEffect(() => {
150
- if (isActive) return;
151
- generationRef.current += 1;
152
- queueRef.current = [];
153
- }, [isActive]);
154
- useEffect(() => () => {
155
- generationRef.current += 1;
156
- queueRef.current = [];
157
- }, [host]);
158
- }
159
- //#endregion
160
- export { useHDLKioskScannerController };
@@ -1,185 +0,0 @@
1
- import { _asyncToGenerator } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
2
- import { createEntryArbiter } from "../../devices/entryArbiter.js";
3
- import { createScaleIngress } from "../../devices/scaleIngress.js";
4
- import { createScannerIngress } from "../../devices/scannerIngress.js";
5
- import { builtInWorkflowHasActivity, isBuiltInWorkflowProductionReady } from "../../app/workflow/registry.js";
6
- import { createHDLKioskWorkflowSession } from "../createWorkflowSession.js";
7
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
8
- //#region src/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.ts
9
- /**
10
- * 文件角色:拥有 Entry、会话创建/销毁和回首页的顶层生命周期。
11
- * 运行机制:结合 Capabilities 和入口 claim 决定 start;reset 成功后 dispose Actor
12
- * 并推进 session epoch。当前应用不恢复跨刷新会话。
13
- * 边界:不会仅靠页面导航开始下一单,也不消费具体 Screen 的局部交互。
14
- */
15
- /**
16
- * Barcode 的首次扫码只需要建立可写 Session 并消费条码;秤和称重主商品
17
- * 是后续业务分支能力,不得阻断 Barcode Session 入口。
18
- */
19
- function resolveHDLKioskEntryCapabilityBlockReason({ entry, capabilities, primaryWeightedProductId }) {
20
- if (!capabilities.session.ensure) return "sessionEnsureUnavailable";
21
- if (entry === "barcode") return capabilities.scanner.available ? void 0 : "scannerUnavailable";
22
- if (!capabilities.products.primaryWeightedProductQuery || !primaryWeightedProductId) return "primaryProductUnavailable";
23
- if (builtInWorkflowHasActivity(entry, "customization") && (!capabilities.customization.weightedProduct || !capabilities.scale.available)) return "customizationUnavailable";
24
- if (entry === "scale" && (!capabilities.scale.available || !capabilities.scale.weightChangeTrigger)) return "scaleTriggerUnavailable";
25
- }
26
- function useHDLKioskSessionController({ host, config, isActive }) {
27
- const [session, setSession] = useState();
28
- const [starting, setStarting] = useState(false);
29
- const [startErrorReference, setStartErrorReference] = useState();
30
- const sessionRef = useRef(session);
31
- const startingSessionRef = useRef();
32
- const startPromiseRef = useRef();
33
- const startAttemptSequence = useRef(0);
34
- const returnAttemptSequence = useRef(0);
35
- const returnPromiseRef = useRef();
36
- const activeRef = useRef(isActive);
37
- const mountedHostRef = useRef(host);
38
- const entryArbiter = useMemo(() => createEntryArbiter(), [host]);
39
- const scannerIngress = useMemo(() => createScannerIngress({ maxPendingEvents: 5 }), [host]);
40
- const scaleIngress = useMemo(() => createScaleIngress(), [host]);
41
- sessionRef.current = session;
42
- activeRef.current = isActive;
43
- useEffect(() => () => {
44
- var _sessionRef$current, _startingSessionRef$c;
45
- (_sessionRef$current = sessionRef.current) === null || _sessionRef$current === void 0 || _sessionRef$current.actor.dispose();
46
- (_startingSessionRef$c = startingSessionRef.current) === null || _startingSessionRef$c === void 0 || _startingSessionRef$c.actor.dispose();
47
- }, []);
48
- useEffect(() => {
49
- var _sessionRef$current2, _startingSessionRef$c2;
50
- if (mountedHostRef.current === host) return;
51
- (_sessionRef$current2 = sessionRef.current) === null || _sessionRef$current2 === void 0 || _sessionRef$current2.actor.dispose();
52
- (_startingSessionRef$c2 = startingSessionRef.current) === null || _startingSessionRef$c2 === void 0 || _startingSessionRef$c2.actor.dispose();
53
- startingSessionRef.current = void 0;
54
- startPromiseRef.current = void 0;
55
- startAttemptSequence.current += 1;
56
- sessionRef.current = void 0;
57
- entryArbiter.reset();
58
- scannerIngress.reset();
59
- scaleIngress.reset();
60
- mountedHostRef.current = host;
61
- setSession(void 0);
62
- setStarting(false);
63
- setStartErrorReference(void 0);
64
- }, [
65
- entryArbiter,
66
- host,
67
- scaleIngress,
68
- scannerIngress
69
- ]);
70
- const start = useCallback((request) => {
71
- const { entry } = request;
72
- if (!activeRef.current || !config.enabledEntries.includes(entry)) return Promise.resolve(void 0);
73
- if (config.businessMode === "production" && !isBuiltInWorkflowProductionReady(entry)) {
74
- setStartErrorReference(`workflow-placeholder-blocked-${Date.now()}`);
75
- return Promise.resolve(void 0);
76
- }
77
- const capabilityBlockReason = resolveHDLKioskEntryCapabilityBlockReason({
78
- entry,
79
- capabilities: host.capabilities,
80
- primaryWeightedProductId: config.primaryWeightedProductId
81
- });
82
- if (capabilityBlockReason) {
83
- if (capabilityBlockReason === "sessionEnsureUnavailable") setStartErrorReference(`session-ensure-unavailable-${Date.now()}`);
84
- return Promise.resolve(void 0);
85
- }
86
- const current = sessionRef.current;
87
- if (current) return Promise.resolve(current.entry === entry ? current : void 0);
88
- const pending = startPromiseRef.current;
89
- if (pending) return pending.entry === entry ? pending.promise : Promise.resolve(void 0);
90
- if (entryArbiter.claim(entry).status !== "accepted") return Promise.resolve(void 0);
91
- const next = createHDLKioskWorkflowSession(entry, host, { primaryWeightedProductId: config.primaryWeightedProductId });
92
- startingSessionRef.current = next;
93
- startAttemptSequence.current += 1;
94
- const attempt = startAttemptSequence.current;
95
- setStarting(true);
96
- setStartErrorReference(void 0);
97
- const promise = next.ensure(`entry:${entry}:ensure:${attempt}`).then(function() {
98
- var _ref = _asyncToGenerator(function* (result) {
99
- if (attempt !== startAttemptSequence.current || mountedHostRef.current !== host || !activeRef.current) {
100
- next.actor.dispose();
101
- return;
102
- }
103
- if (result.status !== "succeeded") {
104
- next.actor.dispose();
105
- entryArbiter.reset();
106
- setStartErrorReference(result.status === "failed" || result.status === "partialFailure" || result.status === "unknown" ? result.error.traceId : `session-start-cancelled-${Date.now()}`);
107
- return;
108
- }
109
- sessionRef.current = next;
110
- setSession(next);
111
- return next;
112
- });
113
- return function(_x) {
114
- return _ref.apply(this, arguments);
115
- };
116
- }()).finally(() => {
117
- if (attempt !== startAttemptSequence.current) return;
118
- startingSessionRef.current = void 0;
119
- startPromiseRef.current = void 0;
120
- setStarting(false);
121
- });
122
- startPromiseRef.current = {
123
- entry,
124
- promise
125
- };
126
- return promise;
127
- }, [
128
- config.enabledEntries,
129
- config.primaryWeightedProductId,
130
- entryArbiter,
131
- host
132
- ]);
133
- const waitForReadySession = useCallback(() => {
134
- var _startPromiseRef$curr, _startPromiseRef$curr2;
135
- const current = sessionRef.current;
136
- if (current) return Promise.resolve(current);
137
- return (_startPromiseRef$curr = (_startPromiseRef$curr2 = startPromiseRef.current) === null || _startPromiseRef$curr2 === void 0 ? void 0 : _startPromiseRef$curr2.promise) !== null && _startPromiseRef$curr !== void 0 ? _startPromiseRef$curr : Promise.resolve(void 0);
138
- }, []);
139
- const completeReset = useCallback((completedSession) => {
140
- if (sessionRef.current !== completedSession) return;
141
- completedSession.actor.dispose();
142
- entryArbiter.reset();
143
- scannerIngress.reset();
144
- scaleIngress.reset();
145
- sessionRef.current = void 0;
146
- setSession(void 0);
147
- }, [
148
- entryArbiter,
149
- scaleIngress,
150
- scannerIngress
151
- ]);
152
- return {
153
- session,
154
- starting,
155
- startErrorReference,
156
- sessionRef,
157
- activeRef,
158
- entryArbiter,
159
- scannerIngress,
160
- scaleIngress,
161
- start,
162
- waitForReadySession,
163
- completeReset,
164
- returnToEntry: useCallback((reason = "application") => {
165
- if (returnPromiseRef.current) return returnPromiseRef.current;
166
- const current = sessionRef.current;
167
- if (!current) return Promise.resolve({
168
- status: "succeeded",
169
- data: void 0
170
- });
171
- returnAttemptSequence.current += 1;
172
- const attempt = returnAttemptSequence.current;
173
- const promise = current.reset(`return:${reason}:${attempt}`).then((result) => {
174
- if (result.status === "succeeded") completeReset(current);
175
- return result;
176
- }).finally(() => {
177
- if (returnPromiseRef.current === promise) returnPromiseRef.current = void 0;
178
- });
179
- returnPromiseRef.current = promise;
180
- return promise;
181
- }, [completeReset])
182
- };
183
- }
184
- //#endregion
185
- export { useHDLKioskSessionController };
@@ -1,12 +0,0 @@
1
- import { useSyncExternalStore } from "react";
2
- //#region src/components/HDLKiosk/runtime/useWorkflowSnapshot.ts
3
- /**
4
- * 文件角色:将纯 Workflow Actor 的 Snapshot 接入 React 渲染。
5
- * 运行机制:useSyncExternalStore 订阅 Actor,组件始终消费 Actor 发布的不可变快照。
6
- * 边界:不发送事件、不派生业务事实,也不维护第二份当前节点状态。
7
- */
8
- function useWorkflowSnapshot(actor) {
9
- return useSyncExternalStore(actor.subscribe, actor.getSnapshot, actor.getSnapshot);
10
- }
11
- //#endregion
12
- export { useWorkflowSnapshot };