hikoutei 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (535) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +135 -0
  3. package/README.ko.md +138 -0
  4. package/README.md +143 -0
  5. package/apps-script/gateway/Code.gs +412 -0
  6. package/dist/adapter/persistence/contracts/index.d.ts +3 -0
  7. package/dist/adapter/persistence/contracts/index.d.ts.map +1 -0
  8. package/dist/adapter/persistence/contracts/index.js +3 -0
  9. package/dist/adapter/persistence/contracts/index.js.map +1 -0
  10. package/dist/adapter/persistence/contracts/sql.d.ts +50 -0
  11. package/dist/adapter/persistence/contracts/sql.d.ts.map +1 -0
  12. package/dist/adapter/persistence/contracts/sql.js +9 -0
  13. package/dist/adapter/persistence/contracts/sql.js.map +1 -0
  14. package/dist/adapter/persistence/index.d.ts +2 -0
  15. package/dist/adapter/persistence/index.d.ts.map +1 -0
  16. package/dist/adapter/persistence/index.js +2 -0
  17. package/dist/adapter/persistence/index.js.map +1 -0
  18. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts +53 -0
  19. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts.map +1 -0
  20. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js +105 -0
  21. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js.map +1 -0
  22. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +39 -0
  23. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -0
  24. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +54 -0
  25. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js.map +1 -0
  26. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts +38 -0
  27. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts.map +1 -0
  28. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js +55 -0
  29. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js.map +1 -0
  30. package/dist/adapter/persistence/providers/mikro-orm/index.d.ts +16 -0
  31. package/dist/adapter/persistence/providers/mikro-orm/index.d.ts.map +1 -0
  32. package/dist/adapter/persistence/providers/mikro-orm/index.js +9 -0
  33. package/dist/adapter/persistence/providers/mikro-orm/index.js.map +1 -0
  34. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +27 -0
  35. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -0
  36. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +67 -0
  37. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -0
  38. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts +19 -0
  39. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts.map +1 -0
  40. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js +67 -0
  41. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js.map +1 -0
  42. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts +78 -0
  43. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts.map +1 -0
  44. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js +121 -0
  45. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js.map +1 -0
  46. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts +20 -0
  47. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts.map +1 -0
  48. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js +125 -0
  49. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js.map +1 -0
  50. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +42 -0
  51. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -0
  52. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +51 -0
  53. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -0
  54. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +22 -0
  55. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -0
  56. package/dist/adapter/sheets/providers/apps-script-gateway/index.js +12 -0
  57. package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -0
  58. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +42 -0
  59. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -0
  60. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +161 -0
  61. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -0
  62. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts +3 -0
  63. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -0
  64. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +692 -0
  65. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -0
  66. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +29 -0
  67. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -0
  68. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +538 -0
  69. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -0
  70. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts +12 -0
  71. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +1 -0
  72. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +190 -0
  73. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +1 -0
  74. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +23 -0
  75. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -0
  76. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +166 -0
  77. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -0
  78. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +50 -0
  79. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +1 -0
  80. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js +60 -0
  81. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +1 -0
  82. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts +44 -0
  83. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts.map +1 -0
  84. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js +40 -0
  85. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js.map +1 -0
  86. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +7 -0
  87. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -0
  88. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +47 -0
  89. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -0
  90. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts +5 -0
  91. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts.map +1 -0
  92. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +54 -0
  93. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +1 -0
  94. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +5 -0
  95. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +1 -0
  96. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js +2 -0
  97. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js.map +1 -0
  98. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +10 -0
  99. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +1 -0
  100. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +35 -0
  101. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +1 -0
  102. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +67 -0
  103. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -0
  104. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +204 -0
  105. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -0
  106. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +78 -0
  107. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -0
  108. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +343 -0
  109. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -0
  110. package/dist/application/index.d.ts +4 -0
  111. package/dist/application/index.d.ts.map +1 -0
  112. package/dist/application/index.js +4 -0
  113. package/dist/application/index.js.map +1 -0
  114. package/dist/application/orm/api/TypedSheetsOrm.d.ts +71 -0
  115. package/dist/application/orm/api/TypedSheetsOrm.d.ts.map +1 -0
  116. package/dist/application/orm/api/TypedSheetsOrm.js +116 -0
  117. package/dist/application/orm/api/TypedSheetsOrm.js.map +1 -0
  118. package/dist/application/orm/api/contracts.d.ts +118 -0
  119. package/dist/application/orm/api/contracts.d.ts.map +1 -0
  120. package/dist/application/orm/api/contracts.js +21 -0
  121. package/dist/application/orm/api/contracts.js.map +1 -0
  122. package/dist/application/orm/errors.d.ts +35 -0
  123. package/dist/application/orm/errors.d.ts.map +1 -0
  124. package/dist/application/orm/errors.js +35 -0
  125. package/dist/application/orm/errors.js.map +1 -0
  126. package/dist/application/orm/index.d.ts +13 -0
  127. package/dist/application/orm/index.d.ts.map +1 -0
  128. package/dist/application/orm/index.js +7 -0
  129. package/dist/application/orm/index.js.map +1 -0
  130. package/dist/application/orm/mapping/contracts.d.ts +113 -0
  131. package/dist/application/orm/mapping/contracts.d.ts.map +1 -0
  132. package/dist/application/orm/mapping/contracts.js +8 -0
  133. package/dist/application/orm/mapping/contracts.js.map +1 -0
  134. package/dist/application/orm/mapping/definition.d.ts +16 -0
  135. package/dist/application/orm/mapping/definition.d.ts.map +1 -0
  136. package/dist/application/orm/mapping/definition.js +145 -0
  137. package/dist/application/orm/mapping/definition.js.map +1 -0
  138. package/dist/application/orm/mapping/entityMapping.d.ts +13 -0
  139. package/dist/application/orm/mapping/entityMapping.d.ts.map +1 -0
  140. package/dist/application/orm/mapping/entityMapping.js +13 -0
  141. package/dist/application/orm/mapping/entityMapping.js.map +1 -0
  142. package/dist/application/orm/mapping/identity.d.ts +14 -0
  143. package/dist/application/orm/mapping/identity.d.ts.map +1 -0
  144. package/dist/application/orm/mapping/identity.js +37 -0
  145. package/dist/application/orm/mapping/identity.js.map +1 -0
  146. package/dist/application/orm/mapping/observationMapping.d.ts +42 -0
  147. package/dist/application/orm/mapping/observationMapping.d.ts.map +1 -0
  148. package/dist/application/orm/mapping/observationMapping.js +65 -0
  149. package/dist/application/orm/mapping/observationMapping.js.map +1 -0
  150. package/dist/application/orm/mapping/projection.d.ts +22 -0
  151. package/dist/application/orm/mapping/projection.d.ts.map +1 -0
  152. package/dist/application/orm/mapping/projection.js +74 -0
  153. package/dist/application/orm/mapping/projection.js.map +1 -0
  154. package/dist/application/orm/mapping/registry.d.ts +15 -0
  155. package/dist/application/orm/mapping/registry.d.ts.map +1 -0
  156. package/dist/application/orm/mapping/registry.js +38 -0
  157. package/dist/application/orm/mapping/registry.js.map +1 -0
  158. package/dist/application/orm/mapping/values.d.ts +17 -0
  159. package/dist/application/orm/mapping/values.d.ts.map +1 -0
  160. package/dist/application/orm/mapping/values.js +141 -0
  161. package/dist/application/orm/mapping/values.js.map +1 -0
  162. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +28 -0
  163. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -0
  164. package/dist/application/orm/persistence/flush/flushCoordinator.js +170 -0
  165. package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -0
  166. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts +9 -0
  167. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts.map +1 -0
  168. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js +8 -0
  169. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js.map +1 -0
  170. package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts +12 -0
  171. package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts.map +1 -0
  172. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +134 -0
  173. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -0
  174. package/dist/application/orm/persistence/projection/projectionEffects.d.ts +21 -0
  175. package/dist/application/orm/persistence/projection/projectionEffects.d.ts.map +1 -0
  176. package/dist/application/orm/persistence/projection/projectionEffects.js +203 -0
  177. package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -0
  178. package/dist/application/orm/persistence/support/businessKeys.d.ts +17 -0
  179. package/dist/application/orm/persistence/support/businessKeys.d.ts.map +1 -0
  180. package/dist/application/orm/persistence/support/businessKeys.js +72 -0
  181. package/dist/application/orm/persistence/support/businessKeys.js.map +1 -0
  182. package/dist/application/orm/persistence/support/canonicalState.d.ts +22 -0
  183. package/dist/application/orm/persistence/support/canonicalState.d.ts.map +1 -0
  184. package/dist/application/orm/persistence/support/canonicalState.js +88 -0
  185. package/dist/application/orm/persistence/support/canonicalState.js.map +1 -0
  186. package/dist/application/orm/persistence/support/contracts.d.ts +139 -0
  187. package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -0
  188. package/dist/application/orm/persistence/support/contracts.js +93 -0
  189. package/dist/application/orm/persistence/support/contracts.js.map +1 -0
  190. package/dist/application/orm/persistence/support/helpers.d.ts +32 -0
  191. package/dist/application/orm/persistence/support/helpers.d.ts.map +1 -0
  192. package/dist/application/orm/persistence/support/helpers.js +66 -0
  193. package/dist/application/orm/persistence/support/helpers.js.map +1 -0
  194. package/dist/application/orm/persistence/support/timing.d.ts +20 -0
  195. package/dist/application/orm/persistence/support/timing.d.ts.map +1 -0
  196. package/dist/application/orm/persistence/support/timing.js +55 -0
  197. package/dist/application/orm/persistence/support/timing.js.map +1 -0
  198. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +46 -0
  199. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -0
  200. package/dist/application/sync/gateway/SyncGatewayBootstrap.js +93 -0
  201. package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -0
  202. package/dist/application/sync/gateway/constants.d.ts +65 -0
  203. package/dist/application/sync/gateway/constants.d.ts.map +1 -0
  204. package/dist/application/sync/gateway/constants.js +57 -0
  205. package/dist/application/sync/gateway/constants.js.map +1 -0
  206. package/dist/application/sync/gateway/errors.d.ts +15 -0
  207. package/dist/application/sync/gateway/errors.d.ts.map +1 -0
  208. package/dist/application/sync/gateway/errors.js +16 -0
  209. package/dist/application/sync/gateway/errors.js.map +1 -0
  210. package/dist/application/sync/gateway/syncGateway.d.ts +313 -0
  211. package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -0
  212. package/dist/application/sync/gateway/syncGateway.js +202 -0
  213. package/dist/application/sync/gateway/syncGateway.js.map +1 -0
  214. package/dist/application/sync/gateway/validation.d.ts +17 -0
  215. package/dist/application/sync/gateway/validation.d.ts.map +1 -0
  216. package/dist/application/sync/gateway/validation.js +60 -0
  217. package/dist/application/sync/gateway/validation.js.map +1 -0
  218. package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts +72 -0
  219. package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -0
  220. package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +272 -0
  221. package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -0
  222. package/dist/application/sync/index.d.ts +16 -0
  223. package/dist/application/sync/index.d.ts.map +1 -0
  224. package/dist/application/sync/index.js +9 -0
  225. package/dist/application/sync/index.js.map +1 -0
  226. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +106 -0
  227. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -0
  228. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +297 -0
  229. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -0
  230. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +100 -0
  231. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -0
  232. package/dist/application/sync/outbound/effects/SyncEffectWorker.js +345 -0
  233. package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -0
  234. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +46 -0
  235. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -0
  236. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +63 -0
  237. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -0
  238. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +20 -0
  239. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -0
  240. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +102 -0
  241. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -0
  242. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts +19 -0
  243. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts.map +1 -0
  244. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +32 -0
  245. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -0
  246. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -0
  247. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -0
  248. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +202 -0
  249. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -0
  250. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts +17 -0
  251. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts.map +1 -0
  252. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js +80 -0
  253. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js.map +1 -0
  254. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +13 -0
  255. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -0
  256. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +205 -0
  257. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -0
  258. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts +81 -0
  259. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -0
  260. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +245 -0
  261. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -0
  262. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts +77 -0
  263. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -0
  264. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +518 -0
  265. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -0
  266. package/dist/application/sync/telemetry/syncTiming.d.ts +50 -0
  267. package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -0
  268. package/dist/application/sync/telemetry/syncTiming.js +22 -0
  269. package/dist/application/sync/telemetry/syncTiming.js.map +1 -0
  270. package/dist/domain/conflict/errors.d.ts +42 -0
  271. package/dist/domain/conflict/errors.d.ts.map +1 -0
  272. package/dist/domain/conflict/errors.js +36 -0
  273. package/dist/domain/conflict/errors.js.map +1 -0
  274. package/dist/domain/conflict/index.d.ts +5 -0
  275. package/dist/domain/conflict/index.d.ts.map +1 -0
  276. package/dist/domain/conflict/index.js +3 -0
  277. package/dist/domain/conflict/index.js.map +1 -0
  278. package/dist/domain/conflict/transitions.d.ts +52 -0
  279. package/dist/domain/conflict/transitions.d.ts.map +1 -0
  280. package/dist/domain/conflict/transitions.js +115 -0
  281. package/dist/domain/conflict/transitions.js.map +1 -0
  282. package/dist/domain/errors/evaluation.d.ts +13 -0
  283. package/dist/domain/errors/evaluation.d.ts.map +1 -0
  284. package/dist/domain/errors/evaluation.js +14 -0
  285. package/dist/domain/errors/evaluation.js.map +1 -0
  286. package/dist/domain/errors/identity.d.ts +12 -0
  287. package/dist/domain/errors/identity.d.ts.map +1 -0
  288. package/dist/domain/errors/identity.js +15 -0
  289. package/dist/domain/errors/identity.js.map +1 -0
  290. package/dist/domain/errors/index.d.ts +7 -0
  291. package/dist/domain/errors/index.d.ts.map +1 -0
  292. package/dist/domain/errors/index.js +5 -0
  293. package/dist/domain/errors/index.js.map +1 -0
  294. package/dist/domain/errors/stableEncoding.d.ts +7 -0
  295. package/dist/domain/errors/stableEncoding.d.ts.map +1 -0
  296. package/dist/domain/errors/stableEncoding.js +8 -0
  297. package/dist/domain/errors/stableEncoding.js.map +1 -0
  298. package/dist/domain/errors/types.d.ts +20 -0
  299. package/dist/domain/errors/types.d.ts.map +1 -0
  300. package/dist/domain/errors/types.js +18 -0
  301. package/dist/domain/errors/types.js.map +1 -0
  302. package/dist/domain/evaluate/constants.d.ts +55 -0
  303. package/dist/domain/evaluate/constants.d.ts.map +1 -0
  304. package/dist/domain/evaluate/constants.js +41 -0
  305. package/dist/domain/evaluate/constants.js.map +1 -0
  306. package/dist/domain/evaluate/contracts.d.ts +125 -0
  307. package/dist/domain/evaluate/contracts.d.ts.map +1 -0
  308. package/dist/domain/evaluate/contracts.js +8 -0
  309. package/dist/domain/evaluate/contracts.js.map +1 -0
  310. package/dist/domain/evaluate/evaluateBatch.d.ts +11 -0
  311. package/dist/domain/evaluate/evaluateBatch.d.ts.map +1 -0
  312. package/dist/domain/evaluate/evaluateBatch.js +91 -0
  313. package/dist/domain/evaluate/evaluateBatch.js.map +1 -0
  314. package/dist/domain/evaluate/fieldEvaluation.d.ts +14 -0
  315. package/dist/domain/evaluate/fieldEvaluation.d.ts.map +1 -0
  316. package/dist/domain/evaluate/fieldEvaluation.js +133 -0
  317. package/dist/domain/evaluate/fieldEvaluation.js.map +1 -0
  318. package/dist/domain/evaluate/identity.d.ts +21 -0
  319. package/dist/domain/evaluate/identity.d.ts.map +1 -0
  320. package/dist/domain/evaluate/identity.js +72 -0
  321. package/dist/domain/evaluate/identity.js.map +1 -0
  322. package/dist/domain/evaluate/index.d.ts +4 -0
  323. package/dist/domain/evaluate/index.d.ts.map +1 -0
  324. package/dist/domain/evaluate/index.js +3 -0
  325. package/dist/domain/evaluate/index.js.map +1 -0
  326. package/dist/domain/evaluate/preconditions.d.ts +30 -0
  327. package/dist/domain/evaluate/preconditions.d.ts.map +1 -0
  328. package/dist/domain/evaluate/preconditions.js +389 -0
  329. package/dist/domain/evaluate/preconditions.js.map +1 -0
  330. package/dist/domain/evaluate/quarantine.d.ts +15 -0
  331. package/dist/domain/evaluate/quarantine.d.ts.map +1 -0
  332. package/dist/domain/evaluate/quarantine.js +185 -0
  333. package/dist/domain/evaluate/quarantine.js.map +1 -0
  334. package/dist/domain/index.d.ts +7 -0
  335. package/dist/domain/index.d.ts.map +1 -0
  336. package/dist/domain/index.js +7 -0
  337. package/dist/domain/index.js.map +1 -0
  338. package/dist/domain/model/constants.d.ts +73 -0
  339. package/dist/domain/model/constants.d.ts.map +1 -0
  340. package/dist/domain/model/constants.js +59 -0
  341. package/dist/domain/model/constants.js.map +1 -0
  342. package/dist/domain/model/index.d.ts +3 -0
  343. package/dist/domain/model/index.d.ts.map +1 -0
  344. package/dist/domain/model/index.js +2 -0
  345. package/dist/domain/model/index.js.map +1 -0
  346. package/dist/domain/model/types.d.ts +330 -0
  347. package/dist/domain/model/types.d.ts.map +1 -0
  348. package/dist/domain/model/types.js +8 -0
  349. package/dist/domain/model/types.js.map +1 -0
  350. package/dist/index.d.ts +17 -0
  351. package/dist/index.d.ts.map +1 -0
  352. package/dist/index.js +11 -0
  353. package/dist/index.js.map +1 -0
  354. package/dist/infrastructure/index.d.ts +3 -0
  355. package/dist/infrastructure/index.d.ts.map +1 -0
  356. package/dist/infrastructure/index.js +3 -0
  357. package/dist/infrastructure/index.js.map +1 -0
  358. package/dist/infrastructure/storage/constants.d.ts +4 -0
  359. package/dist/infrastructure/storage/constants.d.ts.map +1 -0
  360. package/dist/infrastructure/storage/constants.js +4 -0
  361. package/dist/infrastructure/storage/constants.js.map +1 -0
  362. package/dist/infrastructure/storage/errors.d.ts +55 -0
  363. package/dist/infrastructure/storage/errors.d.ts.map +1 -0
  364. package/dist/infrastructure/storage/errors.js +58 -0
  365. package/dist/infrastructure/storage/errors.js.map +1 -0
  366. package/dist/infrastructure/storage/index.d.ts +23 -0
  367. package/dist/infrastructure/storage/index.d.ts.map +1 -0
  368. package/dist/infrastructure/storage/index.js +13 -0
  369. package/dist/infrastructure/storage/index.js.map +1 -0
  370. package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts +64 -0
  371. package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts.map +1 -0
  372. package/dist/infrastructure/storage/recovery/restoreRecovery.js +148 -0
  373. package/dist/infrastructure/storage/recovery/restoreRecovery.js.map +1 -0
  374. package/dist/infrastructure/storage/sqlite/schema.d.ts +49 -0
  375. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
  376. package/dist/infrastructure/storage/sqlite/schema.js +529 -0
  377. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
  378. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +5 -0
  379. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -0
  380. package/dist/infrastructure/storage/sqlite/schemaTypes.js +2 -0
  381. package/dist/infrastructure/storage/sqlite/schemaTypes.js.map +1 -0
  382. package/dist/infrastructure/storage/sqlite/sqlScript.d.ts +9 -0
  383. package/dist/infrastructure/storage/sqlite/sqlScript.d.ts.map +1 -0
  384. package/dist/infrastructure/storage/sqlite/sqlScript.js +122 -0
  385. package/dist/infrastructure/storage/sqlite/sqlScript.js.map +1 -0
  386. package/dist/infrastructure/storage/sqlite/sqlState.d.ts +6 -0
  387. package/dist/infrastructure/storage/sqlite/sqlState.d.ts.map +1 -0
  388. package/dist/infrastructure/storage/sqlite/sqlState.js +14 -0
  389. package/dist/infrastructure/storage/sqlite/sqlState.js.map +1 -0
  390. package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts +6 -0
  391. package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts.map +1 -0
  392. package/dist/infrastructure/storage/sqlite/sqlTransaction.js +24 -0
  393. package/dist/infrastructure/storage/sqlite/sqlTransaction.js.map +1 -0
  394. package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts +44 -0
  395. package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts.map +1 -0
  396. package/dist/infrastructure/storage/sqlite/sqliteBridge.js +66 -0
  397. package/dist/infrastructure/storage/sqlite/sqliteBridge.js.map +1 -0
  398. package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts +101 -0
  399. package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts.map +1 -0
  400. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +417 -0
  401. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -0
  402. package/dist/infrastructure/storage/state/observation/observationAudit.d.ts +16 -0
  403. package/dist/infrastructure/storage/state/observation/observationAudit.d.ts.map +1 -0
  404. package/dist/infrastructure/storage/state/observation/observationAudit.js +85 -0
  405. package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -0
  406. package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts +31 -0
  407. package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts.map +1 -0
  408. package/dist/infrastructure/storage/state/observation/observationCanonical.js +439 -0
  409. package/dist/infrastructure/storage/state/observation/observationCanonical.js.map +1 -0
  410. package/dist/infrastructure/storage/state/observation/observationConstants.d.ts +53 -0
  411. package/dist/infrastructure/storage/state/observation/observationConstants.d.ts.map +1 -0
  412. package/dist/infrastructure/storage/state/observation/observationConstants.js +41 -0
  413. package/dist/infrastructure/storage/state/observation/observationConstants.js.map +1 -0
  414. package/dist/infrastructure/storage/state/observation/observationLedger.d.ts +49 -0
  415. package/dist/infrastructure/storage/state/observation/observationLedger.d.ts.map +1 -0
  416. package/dist/infrastructure/storage/state/observation/observationLedger.js +537 -0
  417. package/dist/infrastructure/storage/state/observation/observationLedger.js.map +1 -0
  418. package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts +15 -0
  419. package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts.map +1 -0
  420. package/dist/infrastructure/storage/state/observation/observationQuarantine.js +100 -0
  421. package/dist/infrastructure/storage/state/observation/observationQuarantine.js.map +1 -0
  422. package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +124 -0
  423. package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -0
  424. package/dist/infrastructure/storage/state/observation/observationTypes.js +13 -0
  425. package/dist/infrastructure/storage/state/observation/observationTypes.js.map +1 -0
  426. package/dist/infrastructure/storage/state/observation/observationValidation.d.ts +28 -0
  427. package/dist/infrastructure/storage/state/observation/observationValidation.d.ts.map +1 -0
  428. package/dist/infrastructure/storage/state/observation/observationValidation.js +223 -0
  429. package/dist/infrastructure/storage/state/observation/observationValidation.js.map +1 -0
  430. package/dist/infrastructure/storage/state/observation/observationWriter.d.ts +28 -0
  431. package/dist/infrastructure/storage/state/observation/observationWriter.d.ts.map +1 -0
  432. package/dist/infrastructure/storage/state/observation/observationWriter.js +293 -0
  433. package/dist/infrastructure/storage/state/observation/observationWriter.js.map +1 -0
  434. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts +58 -0
  435. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts.map +1 -0
  436. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js +195 -0
  437. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js.map +1 -0
  438. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +31 -0
  439. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -0
  440. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +563 -0
  441. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -0
  442. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +118 -0
  443. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -0
  444. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +18 -0
  445. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -0
  446. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts +23 -0
  447. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts.map +1 -0
  448. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js +84 -0
  449. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js.map +1 -0
  450. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +16 -0
  451. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -0
  452. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +97 -0
  453. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -0
  454. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +137 -0
  455. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -0
  456. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +396 -0
  457. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -0
  458. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +101 -0
  459. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -0
  460. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +9 -0
  461. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -0
  462. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +21 -0
  463. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -0
  464. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +184 -0
  465. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -0
  466. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +25 -0
  467. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -0
  468. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +158 -0
  469. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -0
  470. package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +69 -0
  471. package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -0
  472. package/dist/infrastructure/storage/sync/shared/syncRegistry.js +272 -0
  473. package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -0
  474. package/dist/infrastructure/storage/sync/shared/writerLease.d.ts +90 -0
  475. package/dist/infrastructure/storage/sync/shared/writerLease.d.ts.map +1 -0
  476. package/dist/infrastructure/storage/sync/shared/writerLease.js +282 -0
  477. package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -0
  478. package/dist/shared/constants.d.ts +8 -0
  479. package/dist/shared/constants.d.ts.map +1 -0
  480. package/dist/shared/constants.js +8 -0
  481. package/dist/shared/constants.js.map +1 -0
  482. package/dist/shared/encoding/constants.d.ts +45 -0
  483. package/dist/shared/encoding/constants.d.ts.map +1 -0
  484. package/dist/shared/encoding/constants.js +37 -0
  485. package/dist/shared/encoding/constants.js.map +1 -0
  486. package/dist/shared/encoding/index.d.ts +6 -0
  487. package/dist/shared/encoding/index.d.ts.map +1 -0
  488. package/dist/shared/encoding/index.js +4 -0
  489. package/dist/shared/encoding/index.js.map +1 -0
  490. package/dist/shared/encoding/stableEncode.d.ts +34 -0
  491. package/dist/shared/encoding/stableEncode.d.ts.map +1 -0
  492. package/dist/shared/encoding/stableEncode.js +210 -0
  493. package/dist/shared/encoding/stableEncode.js.map +1 -0
  494. package/dist/shared/encoding/typeGuards.d.ts +15 -0
  495. package/dist/shared/encoding/typeGuards.d.ts.map +1 -0
  496. package/dist/shared/encoding/typeGuards.js +11 -0
  497. package/dist/shared/encoding/typeGuards.js.map +1 -0
  498. package/dist/shared/encoding/types.d.ts +52 -0
  499. package/dist/shared/encoding/types.d.ts.map +1 -0
  500. package/dist/shared/encoding/types.js +8 -0
  501. package/dist/shared/encoding/types.js.map +1 -0
  502. package/dist/shared/index.d.ts +6 -0
  503. package/dist/shared/index.d.ts.map +1 -0
  504. package/dist/shared/index.js +6 -0
  505. package/dist/shared/index.js.map +1 -0
  506. package/dist/shared/state/constants.d.ts +16 -0
  507. package/dist/shared/state/constants.d.ts.map +1 -0
  508. package/dist/shared/state/constants.js +16 -0
  509. package/dist/shared/state/constants.js.map +1 -0
  510. package/dist/shared/state/index.d.ts +3 -0
  511. package/dist/shared/state/index.d.ts.map +1 -0
  512. package/dist/shared/state/index.js +2 -0
  513. package/dist/shared/state/index.js.map +1 -0
  514. package/dist/shared/state/types.d.ts +23 -0
  515. package/dist/shared/state/types.d.ts.map +1 -0
  516. package/dist/shared/state/types.js +2 -0
  517. package/dist/shared/state/types.js.map +1 -0
  518. package/dist/shared/validation.d.ts +9 -0
  519. package/dist/shared/validation.d.ts.map +1 -0
  520. package/dist/shared/validation.js +25 -0
  521. package/dist/shared/validation.js.map +1 -0
  522. package/docs/architecture.md +72 -0
  523. package/docs/code-guidelines.md +256 -0
  524. package/docs/development.md +48 -0
  525. package/docs/git-workflow.md +224 -0
  526. package/docs/mikro-orm-adapter-spike.md +248 -0
  527. package/docs/quick-start.md +102 -0
  528. package/docs/sql-layer-plan.md +59 -0
  529. package/docs/sync-bulk-write-benchmark.md +1036 -0
  530. package/docs/sync-observability.md +71 -0
  531. package/docs/task-queue-write-model.md +640 -0
  532. package/docs/typed-sheets-mvp-scope-2026-06-29.md +490 -0
  533. package/docs/typed-sheets-plan.md +417 -0
  534. package/docs/write-and-synchronization-flow.md +71 -0
  535. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncEffectWorkerHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerHelpers.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAGL,cAAc,EACf,MAAM,uCAAuC,CAAC;AAM/C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,cAAc,CAAC,OAAO,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAErD;AAED,wBAAgB,WAAW,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAE5C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAEzE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAEvD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAIrE;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAIjF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAEvD"}
@@ -0,0 +1,32 @@
1
+ /** Small value and error helpers shared by effect-worker modules. */
2
+ import { APPLICABILITY_KINDS, LOOKUP_RESULT_KINDS, PRESENCE_KINDS, } from "../../../../shared/state/constants.js";
3
+ import { STORAGE_ERROR_CODES, StorageError, } from "../../../../infrastructure/storage/errors.js";
4
+ export function safeErrorMessage(error) {
5
+ return error instanceof Error ? error.message.slice(0, 500) : "unknown sync gateway failure";
6
+ }
7
+ export function presentValue(value) {
8
+ return { kind: PRESENCE_KINDS.PRESENT, value };
9
+ }
10
+ export function absentValue() {
11
+ return { kind: PRESENCE_KINDS.ABSENT };
12
+ }
13
+ export function isPresent(value) {
14
+ return value.kind === PRESENCE_KINDS.PRESENT;
15
+ }
16
+ export function isAbsent(value) {
17
+ return value.kind === PRESENCE_KINDS.ABSENT;
18
+ }
19
+ export function lookupResult(value) {
20
+ return value === undefined
21
+ ? { kind: LOOKUP_RESULT_KINDS.NOT_FOUND }
22
+ : { kind: LOOKUP_RESULT_KINDS.FOUND, value };
23
+ }
24
+ export function applicabilityFromSqlNullable(value) {
25
+ return value === null
26
+ ? { kind: APPLICABILITY_KINDS.NOT_APPLICABLE }
27
+ : { kind: APPLICABILITY_KINDS.APPLICABLE, value };
28
+ }
29
+ export function throwWorkerError(message) {
30
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_PENDING_EFFECT, message);
31
+ }
32
+ //# sourceMappingURL=SyncEffectWorkerHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncEffectWorkerHelpers.js","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerHelpers.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAGrE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,8CAA8C,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC;AAC/F,CAAC;AAWD,MAAM,UAAU,YAAY,CAAI,KAAQ;IACtC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,KAAkB;IAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,KAAkB;IAC5C,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,KAAoB;IAClD,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,SAAS,EAAE;QACzC,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAI,KAAe;IAC7D,OAAO,KAAK,KAAK,IAAI;QACnB,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,cAAc,EAAE;QAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,IAAI,YAAY,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,30 @@
1
+ /** Effect conversion, request grouping, and routing predicates. */
2
+ import type { EffectTargetKind } from "../../../../domain/index.js";
3
+ import type { PendingEffect, WriterLease, FencingContext } from "../../../../infrastructure/storage/index.js";
4
+ import type { ApplySyncEffectsRequest, FastAppendRowsRequest, ReadSyncEffectPostconditionsRequest, SyncGatewayEffect, SyncGatewayEffectResult, SyncProjection } from "../../gateway/syncGateway.js";
5
+ import type { ClaimedEffect } from "./SyncEffectWorker.js";
6
+ /** Accepts either inline read-back or a flushed-write acknowledgement. */
7
+ export declare function isSuccessfulGatewayPostcondition(status: SyncGatewayEffectResult["postcondition"]): boolean;
8
+ export declare function toGatewayEffect(effect: PendingEffect): SyncGatewayEffect;
9
+ export declare function groupByGatewayRequest(items: readonly ClaimedEffect[]): readonly {
10
+ readonly request: ApplySyncEffectsRequest;
11
+ readonly items: readonly ClaimedEffect[];
12
+ }[];
13
+ /** Groups append-only system effects into one fast gateway request per route. */
14
+ export declare function groupByFastAppendRequest(items: readonly ClaimedEffect[]): readonly {
15
+ readonly request: FastAppendRowsRequest;
16
+ readonly items: readonly ClaimedEffect[];
17
+ }[];
18
+ /** Groups postcondition reads so each group performs one remote Sheet scan. */
19
+ export declare function groupByGatewayPostconditionRequest(items: readonly ClaimedEffect[]): readonly {
20
+ readonly request: ReadSyncEffectPostconditionsRequest;
21
+ readonly items: readonly ClaimedEffect[];
22
+ }[];
23
+ export declare function isSyncEffectKind(value: string): value is SyncGatewayEffect["effectKind"];
24
+ export declare function isCandidateProtectingUserInputEffect(effect: SyncGatewayEffect): boolean;
25
+ /** Selects only new System_State entity rows for the append-only fast path. */
26
+ export declare function isFastAppendCandidate(item: ClaimedEffect): boolean;
27
+ export declare function isSyncProjection(value: string): value is SyncProjection;
28
+ export declare function isEffectTargetKind(value: string): value is EffectTargetKind;
29
+ export declare function fenceFromLease(lease: WriterLease, now: number): FencingContext;
30
+ //# sourceMappingURL=SyncEffectWorkerRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncEffectWorkerRouting.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerRouting.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAGnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,6CAA6C,CAAC;AAErD,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,mCAAmC,EAEnC,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAatC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,0EAA0E;AAC1E,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,uBAAuB,CAAC,eAAe,CAAC,GAC/C,OAAO,CAGT;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAyBxE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS;IAC/E,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C,EAAE,CAoCF;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS;IAClF,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C,EAAE,CAsCF;AAED,+EAA+E;AAC/E,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS;IAC5F,QAAQ,CAAC,OAAO,EAAE,mCAAmC,CAAC;IACtD,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C,EAAE,CAqCF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAOxF;AAED,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAGvF;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CASlE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAIvE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,gBAAgB,CAK3E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAO9E"}
@@ -0,0 +1,202 @@
1
+ /** Effect conversion, request grouping, and routing predicates. */
2
+ import { NON_NEGATIVE_SAFE_INTEGER_MINIMUM } from "../../../../domain/index.js";
3
+ import { fromSqlNullable } from "../../../../infrastructure/storage/sqlite/sqlState.js";
4
+ import { LOOKUP_RESULT_KINDS } from "../../../../shared/state/constants.js";
5
+ import { parseSyncProjectionEffectPayload } from "../../gateway/syncGateway.js";
6
+ import { SYNC_GATEWAY_POSTCONDITION_MODES, SYNC_GATEWAY_POSTCONDITION_STATUSES, SYNC_GATEWAY_PROJECTIONS, } from "../../gateway/constants.js";
7
+ import { EFFECT_TARGET_KINDS, SYNC_EFFECT_KINDS } from "./SyncEffectWorkerConstants.js";
8
+ import { isPresent, lookupResult, throwWorkerError, } from "./SyncEffectWorkerHelpers.js";
9
+ /** Accepts either inline read-back or a flushed-write acknowledgement. */
10
+ export function isSuccessfulGatewayPostcondition(status) {
11
+ return status === SYNC_GATEWAY_POSTCONDITION_STATUSES.VERIFIED ||
12
+ status === SYNC_GATEWAY_POSTCONDITION_STATUSES.ACKNOWLEDGED;
13
+ }
14
+ export function toGatewayEffect(effect) {
15
+ if (!isSyncEffectKind(effect.effect_kind)) {
16
+ throwWorkerError("unsupported sync effect kind: " + effect.effect_kind);
17
+ }
18
+ if (!isSyncProjection(effect.projection)) {
19
+ throwWorkerError("unsupported sync projection: " + effect.projection);
20
+ }
21
+ if (!isEffectTargetKind(effect.target_kind)) {
22
+ throwWorkerError("unsupported sync effect target kind: " + effect.target_kind);
23
+ }
24
+ return {
25
+ effectId: effect.effect_id,
26
+ payloadHash: effect.payload_hash,
27
+ effectKind: effect.effect_kind,
28
+ physicalSheetId: effect.physical_sheet_id,
29
+ projection: effect.projection,
30
+ targetKind: effect.target_kind,
31
+ targetId: effect.target_id,
32
+ rowBindingId: fromSqlNullable(effect.row_binding_id),
33
+ conflictId: fromSqlNullable(effect.conflict_id),
34
+ expectedVisibleRevision: effect.expected_visible_revision,
35
+ expectedVisibleHash: effect.expected_visible_hash,
36
+ repairGuardHash: fromSqlNullable(effect.repair_guard_hash),
37
+ payload: parseSyncProjectionEffectPayload(effect.payload_json),
38
+ };
39
+ }
40
+ export function groupByGatewayRequest(items) {
41
+ const groups = new Map();
42
+ for (const item of items) {
43
+ const effect = item.gatewayEffect;
44
+ if (!isPresent(effect))
45
+ continue;
46
+ const key = [
47
+ effect.value.physicalSheetId,
48
+ effect.value.payload.sheetName,
49
+ effect.value.payload.registeredRange,
50
+ effect.value.projection,
51
+ effect.value.payload.schemaVersion,
52
+ ].join("\u0000");
53
+ const existing = lookupResult(groups.get(key));
54
+ if (existing.kind === LOOKUP_RESULT_KINDS.NOT_FOUND) {
55
+ groups.set(key, {
56
+ request: {
57
+ physicalSheetId: effect.value.physicalSheetId,
58
+ sheetName: effect.value.payload.sheetName,
59
+ registeredRange: effect.value.payload.registeredRange,
60
+ projection: effect.value.projection,
61
+ schemaVersion: effect.value.payload.schemaVersion,
62
+ postconditionMode: SYNC_GATEWAY_POSTCONDITION_MODES.DEFERRED,
63
+ effects: [effect.value],
64
+ },
65
+ items: [item],
66
+ });
67
+ }
68
+ else {
69
+ existing.value.request = {
70
+ ...existing.value.request,
71
+ postconditionMode: SYNC_GATEWAY_POSTCONDITION_MODES.DEFERRED,
72
+ effects: [...existing.value.request.effects, effect.value],
73
+ };
74
+ existing.value.items.push(item);
75
+ }
76
+ }
77
+ return [...groups.values()];
78
+ }
79
+ /** Groups append-only system effects into one fast gateway request per route. */
80
+ export function groupByFastAppendRequest(items) {
81
+ const groups = new Map();
82
+ for (const item of items) {
83
+ const effect = item.gatewayEffect;
84
+ if (!isPresent(effect))
85
+ continue;
86
+ const key = [
87
+ effect.value.physicalSheetId,
88
+ effect.value.payload.sheetName,
89
+ effect.value.payload.registeredRange,
90
+ effect.value.projection,
91
+ effect.value.payload.schemaVersion,
92
+ ].join("\u0000");
93
+ const row = {
94
+ effectId: effect.value.effectId,
95
+ fields: effect.value.payload.fields,
96
+ };
97
+ const existing = lookupResult(groups.get(key));
98
+ if (existing.kind === LOOKUP_RESULT_KINDS.NOT_FOUND) {
99
+ groups.set(key, {
100
+ request: {
101
+ physicalSheetId: effect.value.physicalSheetId,
102
+ sheetName: effect.value.payload.sheetName,
103
+ registeredRange: effect.value.payload.registeredRange,
104
+ projection: effect.value.projection,
105
+ schemaVersion: effect.value.payload.schemaVersion,
106
+ rows: [row],
107
+ },
108
+ items: [item],
109
+ });
110
+ }
111
+ else {
112
+ existing.value.request = {
113
+ ...existing.value.request,
114
+ rows: [...existing.value.request.rows, row],
115
+ };
116
+ existing.value.items.push(item);
117
+ }
118
+ }
119
+ return [...groups.values()];
120
+ }
121
+ /** Groups postcondition reads so each group performs one remote Sheet scan. */
122
+ export function groupByGatewayPostconditionRequest(items) {
123
+ const groups = new Map();
124
+ for (const item of items) {
125
+ const effect = item.gatewayEffect;
126
+ if (!isPresent(effect))
127
+ continue;
128
+ const key = [
129
+ effect.value.physicalSheetId,
130
+ effect.value.payload.sheetName,
131
+ effect.value.payload.registeredRange,
132
+ effect.value.projection,
133
+ effect.value.payload.schemaVersion,
134
+ ].join("\u0000");
135
+ const existing = lookupResult(groups.get(key));
136
+ if (existing.kind === LOOKUP_RESULT_KINDS.NOT_FOUND) {
137
+ groups.set(key, {
138
+ request: {
139
+ physicalSheetId: effect.value.physicalSheetId,
140
+ sheetName: effect.value.payload.sheetName,
141
+ registeredRange: effect.value.payload.registeredRange,
142
+ projection: effect.value.projection,
143
+ schemaVersion: effect.value.payload.schemaVersion,
144
+ effects: [effect.value],
145
+ },
146
+ items: [item],
147
+ });
148
+ }
149
+ else {
150
+ existing.value.request = {
151
+ ...existing.value.request,
152
+ effects: [...existing.value.request.effects, effect.value],
153
+ };
154
+ existing.value.items.push(item);
155
+ }
156
+ }
157
+ return [...groups.values()];
158
+ }
159
+ export function isSyncEffectKind(value) {
160
+ return value === SYNC_EFFECT_KINDS.SYSTEM_PROJECTION ||
161
+ value === SYNC_EFFECT_KINDS.CANDIDATE_RECONCILE ||
162
+ value === SYNC_EFFECT_KINDS.SYSTEM_REPAIR ||
163
+ value === SYNC_EFFECT_KINDS.RESOLUTION_PROJECTION ||
164
+ value === SYNC_EFFECT_KINDS.RESOLUTION_DELETE ||
165
+ value === SYNC_EFFECT_KINDS.USER_INPUT_DELETE;
166
+ }
167
+ export function isCandidateProtectingUserInputEffect(effect) {
168
+ return effect.effectKind === SYNC_EFFECT_KINDS.CANDIDATE_RECONCILE ||
169
+ effect.effectKind === SYNC_EFFECT_KINDS.USER_INPUT_DELETE;
170
+ }
171
+ /** Selects only new System_State entity rows for the append-only fast path. */
172
+ export function isFastAppendCandidate(item) {
173
+ if (!isPresent(item.gatewayEffect))
174
+ return false;
175
+ const effect = item.gatewayEffect.value;
176
+ return effect.effectKind === SYNC_EFFECT_KINDS.SYSTEM_PROJECTION &&
177
+ effect.projection === SYNC_GATEWAY_PROJECTIONS.SYSTEM_STATE &&
178
+ effect.targetKind === EFFECT_TARGET_KINDS.ENTITY &&
179
+ effect.payload.createIfMissing &&
180
+ effect.expectedVisibleRevision === NON_NEGATIVE_SAFE_INTEGER_MINIMUM &&
181
+ effect.expectedVisibleHash === "";
182
+ }
183
+ export function isSyncProjection(value) {
184
+ return value === SYNC_GATEWAY_PROJECTIONS.USER_INPUT ||
185
+ value === SYNC_GATEWAY_PROJECTIONS.SYSTEM_STATE ||
186
+ value === SYNC_GATEWAY_PROJECTIONS.SYNC_CONFLICTS;
187
+ }
188
+ export function isEffectTargetKind(value) {
189
+ return value === EFFECT_TARGET_KINDS.ENTITY ||
190
+ value === EFFECT_TARGET_KINDS.ROW_BINDING ||
191
+ value === EFFECT_TARGET_KINDS.PROJECTION_ROW ||
192
+ value === EFFECT_TARGET_KINDS.CONFLICT;
193
+ }
194
+ export function fenceFromLease(lease, now) {
195
+ return {
196
+ role: lease.role,
197
+ writerEpoch: lease.writerEpoch,
198
+ fencingToken: lease.fencingToken,
199
+ now,
200
+ };
201
+ }
202
+ //# sourceMappingURL=SyncEffectWorkerRouting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncEffectWorkerRouting.js","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerRouting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** Timing classification and diagnostics emission for one effect-worker pass. */
2
+ import type { PendingEffect } from "../../../../infrastructure/storage/index.js";
3
+ import type { SyncGatewayEffect } from "../../gateway/syncGateway.js";
4
+ import { type SyncGatewayTiming, type SyncTimingEvent, type SyncTimingOperationCounts, type SyncTimingOperationKind } from "../../telemetry/syncTiming.js";
5
+ import type { ClaimedEffect, SyncEffectWorkerBaseOptions } from "./SyncEffectWorker.js";
6
+ export declare function emptyOperationCounts(): SyncTimingOperationCounts;
7
+ export declare function timingOperationKindForEffect(effect: SyncGatewayEffect): SyncTimingOperationKind;
8
+ export declare function timingOperationKindForPending(effect: PendingEffect): SyncTimingOperationKind;
9
+ export declare function countsForOperationKinds(kinds: readonly SyncTimingOperationKind[]): SyncTimingOperationCounts;
10
+ export declare function countsForItems(items: readonly ClaimedEffect[]): SyncTimingOperationCounts;
11
+ export declare function operationKindsForItems(items: readonly ClaimedEffect[]): readonly SyncTimingOperationKind[];
12
+ export declare function countsForPendingEffects(effects: readonly PendingEffect[]): SyncTimingOperationCounts;
13
+ export declare function operationKindsForPendingEffects(effects: readonly PendingEffect[]): readonly SyncTimingOperationKind[];
14
+ export declare function operationKindsForCounts(counts: SyncTimingOperationCounts): readonly SyncTimingOperationKind[];
15
+ export declare function emitGatewayTiming(options: SyncEffectWorkerBaseOptions, timing: SyncGatewayTiming | undefined): void;
16
+ export declare function emitWorkerTiming(options: SyncEffectWorkerBaseOptions, event: SyncTimingEvent): void;
17
+ //# sourceMappingURL=SyncEffectWorkerTiming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncEffectWorkerTiming.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerTiming.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAGjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC7B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EACV,aAAa,EACb,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,oBAAoB,IAAI,yBAAyB,CAEhE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,iBAAiB,GAAG,uBAAuB,CAe/F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,aAAa,GAAG,uBAAuB,CAc5F;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,uBAAuB,EAAE,GACxC,yBAAyB,CAM3B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,yBAAyB,CAIzF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,uBAAuB,EAAE,CAE1G;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,yBAAyB,CAEpG;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS,aAAa,EAAE,GAChC,SAAS,uBAAuB,EAAE,CAEpC;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,yBAAyB,GAChC,SAAS,uBAAuB,EAAE,CAMpC;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,2BAA2B,EACpC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,IAAI,CAWN;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,2BAA2B,EACpC,KAAK,EAAE,eAAe,GACrB,IAAI,CAMN"}
@@ -0,0 +1,80 @@
1
+ /** Timing classification and diagnostics emission for one effect-worker pass. */
2
+ import { NON_NEGATIVE_SAFE_INTEGER_MINIMUM } from "../../../../domain/index.js";
3
+ import { SYNC_TIMING_OPERATION_KINDS, SYNC_TIMING_SCOPES, } from "../../telemetry/syncTiming.js";
4
+ import { SYNC_EFFECT_KINDS } from "./SyncEffectWorkerConstants.js";
5
+ import { isPresent } from "./SyncEffectWorkerHelpers.js";
6
+ export function emptyOperationCounts() {
7
+ return { append: 0, update: 0, delete: 0 };
8
+ }
9
+ export function timingOperationKindForEffect(effect) {
10
+ if (effect.effectKind === SYNC_EFFECT_KINDS.RESOLUTION_DELETE ||
11
+ effect.effectKind === SYNC_EFFECT_KINDS.USER_INPUT_DELETE) {
12
+ return SYNC_TIMING_OPERATION_KINDS.DELETE;
13
+ }
14
+ if (effect.payload.createIfMissing &&
15
+ effect.expectedVisibleRevision === NON_NEGATIVE_SAFE_INTEGER_MINIMUM &&
16
+ effect.expectedVisibleHash === "") {
17
+ return SYNC_TIMING_OPERATION_KINDS.APPEND;
18
+ }
19
+ return SYNC_TIMING_OPERATION_KINDS.UPDATE;
20
+ }
21
+ export function timingOperationKindForPending(effect) {
22
+ if (effect.effect_kind === SYNC_EFFECT_KINDS.RESOLUTION_DELETE ||
23
+ effect.effect_kind === SYNC_EFFECT_KINDS.USER_INPUT_DELETE) {
24
+ return SYNC_TIMING_OPERATION_KINDS.DELETE;
25
+ }
26
+ if (effect.expected_visible_revision === NON_NEGATIVE_SAFE_INTEGER_MINIMUM &&
27
+ effect.expected_visible_hash === "") {
28
+ return SYNC_TIMING_OPERATION_KINDS.APPEND;
29
+ }
30
+ return SYNC_TIMING_OPERATION_KINDS.UPDATE;
31
+ }
32
+ export function countsForOperationKinds(kinds) {
33
+ return {
34
+ append: kinds.filter((kind) => kind === SYNC_TIMING_OPERATION_KINDS.APPEND).length,
35
+ update: kinds.filter((kind) => kind === SYNC_TIMING_OPERATION_KINDS.UPDATE).length,
36
+ delete: kinds.filter((kind) => kind === SYNC_TIMING_OPERATION_KINDS.DELETE).length,
37
+ };
38
+ }
39
+ export function countsForItems(items) {
40
+ const kinds = items.flatMap((item) => isPresent(item.gatewayEffect) ? [timingOperationKindForEffect(item.gatewayEffect.value)] : []);
41
+ return countsForOperationKinds(kinds);
42
+ }
43
+ export function operationKindsForItems(items) {
44
+ return operationKindsForCounts(countsForItems(items));
45
+ }
46
+ export function countsForPendingEffects(effects) {
47
+ return countsForOperationKinds(effects.map(timingOperationKindForPending));
48
+ }
49
+ export function operationKindsForPendingEffects(effects) {
50
+ return operationKindsForCounts(countsForPendingEffects(effects));
51
+ }
52
+ export function operationKindsForCounts(counts) {
53
+ return [
54
+ ...(counts.append > 0 ? [SYNC_TIMING_OPERATION_KINDS.APPEND] : []),
55
+ ...(counts.update > 0 ? [SYNC_TIMING_OPERATION_KINDS.UPDATE] : []),
56
+ ...(counts.delete > 0 ? [SYNC_TIMING_OPERATION_KINDS.DELETE] : []),
57
+ ];
58
+ }
59
+ export function emitGatewayTiming(options, timing) {
60
+ if (timing === undefined)
61
+ return;
62
+ for (const phase of timing.phases) {
63
+ emitWorkerTiming(options, {
64
+ scope: SYNC_TIMING_SCOPES.GATEWAY,
65
+ phase: phase.phase,
66
+ durationMs: phase.durationMs,
67
+ operationKinds: timing.operationKinds,
68
+ operationCounts: timing.operationCounts,
69
+ });
70
+ }
71
+ }
72
+ export function emitWorkerTiming(options, event) {
73
+ try {
74
+ options.onTiming?.(event);
75
+ }
76
+ catch {
77
+ // Diagnostics must never change worker state transitions.
78
+ }
79
+ }
80
+ //# sourceMappingURL=SyncEffectWorkerTiming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncEffectWorkerTiming.js","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerTiming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Durable result transitions for gateway responses and response-loss recovery. */
2
+ import type { FencingContext } from "../../../../infrastructure/storage/sync/shared/writerLease.js";
3
+ import type { Presence } from "../../../../shared/state/types.js";
4
+ import type { SyncEffectPostcondition, SyncGatewayEffectResult } from "../../gateway/syncGateway.js";
5
+ import { type SyncEffectWorkerErrorCode } from "./SyncEffectWorkerConstants.js";
6
+ import type { ClaimedEffect, EffectWorkerStorage, MutableReport, RepairReplanRequest, SyncEffectWorkerBaseOptions, SyncEffectWorkerFullOptions } from "./SyncEffectWorker.js";
7
+ export declare function completeGatewayResult(options: SyncEffectWorkerBaseOptions, storage: EffectWorkerStorage, fence: FencingContext, item: ClaimedEffect, result: SyncGatewayEffectResult, report: MutableReport): Promise<void>;
8
+ export declare function recoverUnknownResults(options: SyncEffectWorkerFullOptions, storage: EffectWorkerStorage, fence: FencingContext, items: readonly ClaimedEffect[], report: MutableReport): Promise<void>;
9
+ export declare function settleUnknownPostcondition(options: SyncEffectWorkerBaseOptions, storage: EffectWorkerStorage, fence: FencingContext, item: ClaimedEffect, postcondition: SyncEffectPostcondition, report: MutableReport): Promise<void>;
10
+ export declare function completeApplied(storage: EffectWorkerStorage, fence: FencingContext, item: ClaimedEffect, visibleRevision: Presence<number>, visibleHash: Presence<string>, report: MutableReport): Promise<void>;
11
+ export declare function replanOrFail(options: SyncEffectWorkerBaseOptions, storage: EffectWorkerStorage, fence: FencingContext, item: ClaimedEffect, request: RepairReplanRequest, report: MutableReport): Promise<void>;
12
+ export declare function completeFailure(storage: EffectWorkerStorage, fence: FencingContext, item: ClaimedEffect, code: SyncEffectWorkerErrorCode, message: Presence<string>, report: MutableReport): Promise<void>;
13
+ //# sourceMappingURL=SyncEffectWorkerTransitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncEffectWorkerTransitions.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/outbound/effects/SyncEffectWorkerTransitions.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAInF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAIpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAKlE,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,gCAAgC,CAAC;AAaxC,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAE/B,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAoEf;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAgEf;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,uBAAuB,EACtC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAoFf;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,aAAa,EACnB,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,EACjC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAkDf;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,205 @@
1
+ /** Durable result transitions for gateway responses and response-loss recovery. */
2
+ import { stableHash } from "../../../../domain/index.js";
3
+ import { LOOKUP_RESULT_KINDS, } from "../../../../shared/state/constants.js";
4
+ import { SYNC_GATEWAY_EFFECT_RESULT_STATUSES, SYNC_GATEWAY_POSTCONDITION_DISPOSITIONS, } from "../../gateway/constants.js";
5
+ import { OUTBOX_EFFECT_STATUSES, SYNC_EFFECT_KINDS, WORKER_ERROR_CODES, } from "./SyncEffectWorkerConstants.js";
6
+ import { absentValue, applicabilityFromSqlNullable, isPresent, lookupResult, presentValue, safeErrorMessage, } from "./SyncEffectWorkerHelpers.js";
7
+ import { groupByGatewayPostconditionRequest, isCandidateProtectingUserInputEffect, } from "./SyncEffectWorkerRouting.js";
8
+ export async function completeGatewayResult(options, storage, fence, item, result, report) {
9
+ if (result.status === SYNC_GATEWAY_EFFECT_RESULT_STATUSES.APPLIED ||
10
+ result.status === SYNC_GATEWAY_EFFECT_RESULT_STATUSES.ALREADY_APPLIED) {
11
+ await completeApplied(storage, fence, item, result.visibleRevision, result.visibleHash, report);
12
+ return;
13
+ }
14
+ if (result.status === SYNC_GATEWAY_EFFECT_RESULT_STATUSES.SUPERSEDED) {
15
+ if (await storage.applyEffectResult({
16
+ ...fence,
17
+ effectId: item.pending.effect_id,
18
+ claimToken: item.claimToken,
19
+ status: OUTBOX_EFFECT_STATUSES.SUPERSEDED,
20
+ lastErrorCode: presentValue(WORKER_ERROR_CODES.GATEWAY_SUPERSEDED),
21
+ lastErrorMessage: result.reason,
22
+ }))
23
+ report.superseded += 1;
24
+ return;
25
+ }
26
+ if (result.status === SYNC_GATEWAY_EFFECT_RESULT_STATUSES.GUARD_MISMATCH) {
27
+ const blocked = isPresent(item.gatewayEffect) &&
28
+ isCandidateProtectingUserInputEffect(item.gatewayEffect.value);
29
+ const status = blocked
30
+ ? OUTBOX_EFFECT_STATUSES.BLOCKED_CANDIDATE
31
+ : OUTBOX_EFFECT_STATUSES.CONFLICT;
32
+ const applied = await storage.applyEffectResult({
33
+ ...fence,
34
+ effectId: item.pending.effect_id,
35
+ claimToken: item.claimToken,
36
+ status,
37
+ lastErrorCode: presentValue(blocked
38
+ ? WORKER_ERROR_CODES.CANDIDATE_GUARD_MISMATCH
39
+ : WORKER_ERROR_CODES.VISIBLE_GUARD_MISMATCH),
40
+ lastErrorMessage: result.reason,
41
+ });
42
+ if (applied) {
43
+ if (blocked)
44
+ report.blockedCandidate += 1;
45
+ else
46
+ report.conflicted += 1;
47
+ }
48
+ return;
49
+ }
50
+ if (result.status === SYNC_GATEWAY_EFFECT_RESULT_STATUSES.REPAIR_REOBSERVE) {
51
+ await replanOrFail(options, storage, fence, item, {
52
+ effect: item.pending,
53
+ gatewayResult: presentValue(result),
54
+ postcondition: absentValue(),
55
+ }, report);
56
+ return;
57
+ }
58
+ await completeFailure(storage, fence, item, result.status === SYNC_GATEWAY_EFFECT_RESULT_STATUSES.SCHEMA_ERROR
59
+ ? WORKER_ERROR_CODES.GATEWAY_SCHEMA_ERROR
60
+ : WORKER_ERROR_CODES.GATEWAY_RETRYABLE_ERROR, result.reason, report);
61
+ }
62
+ export async function recoverUnknownResults(options, storage, fence, items, report) {
63
+ const usable = [];
64
+ for (const item of items) {
65
+ if (isPresent(item.gatewayEffect)) {
66
+ usable.push(item);
67
+ continue;
68
+ }
69
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.INVALID_EFFECT_PAYLOAD, item.invalidPayloadError, report);
70
+ }
71
+ for (const group of groupByGatewayPostconditionRequest(usable)) {
72
+ let results;
73
+ try {
74
+ results = await options.gateway.readEffectPostconditions(group.request);
75
+ }
76
+ catch (error) {
77
+ for (const item of group.items) {
78
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_READ_FAILED, presentValue(safeErrorMessage(error)), report);
79
+ }
80
+ continue;
81
+ }
82
+ const byEffectId = new Map(results.map((result) => [result.effectId, result]));
83
+ for (const item of group.items) {
84
+ const result = lookupResult(byEffectId.get(item.pending.effect_id));
85
+ if (result.kind === LOOKUP_RESULT_KINDS.NOT_FOUND ||
86
+ result.value.payloadHash !== item.pending.payload_hash) {
87
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_READ_FAILED, presentValue("Gateway postcondition batch did not return the expected effect evidence."), report);
88
+ continue;
89
+ }
90
+ await settleUnknownPostcondition(options, storage, fence, item, result.value.postcondition, report);
91
+ }
92
+ }
93
+ }
94
+ export async function settleUnknownPostcondition(options, storage, fence, item, postcondition, report) {
95
+ if (!isPresent(item.gatewayEffect)) {
96
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.INVALID_EFFECT_PAYLOAD, item.invalidPayloadError, report);
97
+ return;
98
+ }
99
+ if (postcondition.disposition === SYNC_GATEWAY_POSTCONDITION_DISPOSITIONS.APPLIED &&
100
+ isPresent(postcondition.visibleRevision) &&
101
+ isPresent(postcondition.visibleHash)) {
102
+ await completeApplied(storage, fence, item, postcondition.visibleRevision, postcondition.visibleHash, report);
103
+ report.responseLossRecovered += 1;
104
+ return;
105
+ }
106
+ if (postcondition.disposition === SYNC_GATEWAY_POSTCONDITION_DISPOSITIONS.APPLIED) {
107
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.POSTCONDITION_APPLIED_WITHOUT_VISIBLE_STATE, presentValue("Gateway claimed an applied postcondition without a verified visible revision and hash."), report);
108
+ return;
109
+ }
110
+ if (postcondition.disposition === SYNC_GATEWAY_POSTCONDITION_DISPOSITIONS.CHANGED &&
111
+ item.gatewayEffect.value.effectKind === SYNC_EFFECT_KINDS.SYSTEM_REPAIR) {
112
+ await replanOrFail(options, storage, fence, item, {
113
+ effect: item.pending,
114
+ gatewayResult: absentValue(),
115
+ postcondition: presentValue(postcondition),
116
+ }, report);
117
+ return;
118
+ }
119
+ if (postcondition.disposition === SYNC_GATEWAY_POSTCONDITION_DISPOSITIONS.UNAPPLIED) {
120
+ const requeued = await storage.retryClaimedEffect({
121
+ ...fence,
122
+ effectId: item.pending.effect_id,
123
+ claimToken: item.claimToken,
124
+ lastErrorCode: WORKER_ERROR_CODES.POSTCONDITION_UNAPPLIED_REQUIRES_REDRIVE,
125
+ lastErrorMessage: "Gateway did not expose the effect as applied; it was returned to pending.",
126
+ });
127
+ if (requeued) {
128
+ report.deferred += 1;
129
+ report.requeued += 1;
130
+ }
131
+ return;
132
+ }
133
+ const code = postcondition.disposition === SYNC_GATEWAY_POSTCONDITION_DISPOSITIONS.UNAVAILABLE
134
+ ? WORKER_ERROR_CODES.POSTCONDITION_UNAVAILABLE
135
+ : postcondition.disposition === SYNC_GATEWAY_POSTCONDITION_DISPOSITIONS.CHANGED
136
+ ? WORKER_ERROR_CODES.POSTCONDITION_CHANGED
137
+ : WORKER_ERROR_CODES.POSTCONDITION_UNAPPLIED_REQUIRES_REDRIVE;
138
+ await completeFailure(storage, fence, item, code, presentValue("Gateway response was not observed; postcondition=" + postcondition.disposition), report);
139
+ }
140
+ export async function completeApplied(storage, fence, item, visibleRevision, visibleHash, report) {
141
+ const gatewayEffect = item.gatewayEffect;
142
+ const confirmation = isPresent(gatewayEffect) &&
143
+ isPresent(gatewayEffect.value.rowBindingId) &&
144
+ isPresent(visibleRevision) &&
145
+ isPresent(visibleHash)
146
+ ? {
147
+ physicalSheetId: item.pending.physical_sheet_id,
148
+ projection: item.pending.projection,
149
+ rowBindingId: gatewayEffect.value.rowBindingId.value,
150
+ visibleRevision: visibleRevision.value,
151
+ visibleHash: visibleHash.value,
152
+ entityRevision: applicabilityFromSqlNullable(item.pending.target_entity_revision),
153
+ fieldHashes: Object.fromEntries(Object.entries(gatewayEffect.value.payload.fields)
154
+ .map(([fieldName, value]) => [fieldName, stableHash(value)])),
155
+ }
156
+ : undefined;
157
+ const applied = await storage.applyEffectResult({
158
+ ...fence,
159
+ effectId: item.pending.effect_id,
160
+ claimToken: item.claimToken,
161
+ status: OUTBOX_EFFECT_STATUSES.APPLIED,
162
+ lastErrorCode: absentValue(),
163
+ lastErrorMessage: absentValue(),
164
+ ...(confirmation === undefined ? {} : { projectionConfirmation: confirmation }),
165
+ });
166
+ if (applied)
167
+ report.applied += 1;
168
+ }
169
+ export async function replanOrFail(options, storage, fence, item, request, report) {
170
+ if (options.makeRepairReplan === undefined) {
171
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REOBSERVE_REQUIRES_WRITER_REPLAN, presentValue("A system repair changed remotely and no writer replan factory was configured."), report);
172
+ return;
173
+ }
174
+ let replacement;
175
+ try {
176
+ replacement = options.makeRepairReplan(request);
177
+ }
178
+ catch (error) {
179
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REPLAN_FAILED, presentValue(safeErrorMessage(error)), report);
180
+ return;
181
+ }
182
+ if (!isPresent(replacement)) {
183
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REPLAN_DEFERRED, presentValue("Writer deferred repair replan pending a fresh observation."), report);
184
+ return;
185
+ }
186
+ try {
187
+ await storage.supersedeAndReplan(fence, item.pending.effect_id, replacement.value);
188
+ report.replanned += 1;
189
+ }
190
+ catch (error) {
191
+ await completeFailure(storage, fence, item, WORKER_ERROR_CODES.REPAIR_REPLAN_FAILED, presentValue(safeErrorMessage(error)), report);
192
+ }
193
+ }
194
+ export async function completeFailure(storage, fence, item, code, message, report) {
195
+ if (await storage.applyEffectResult({
196
+ ...fence,
197
+ effectId: item.pending.effect_id,
198
+ claimToken: item.claimToken,
199
+ status: OUTBOX_EFFECT_STATUSES.FAILED,
200
+ lastErrorCode: presentValue(code),
201
+ lastErrorMessage: message,
202
+ }))
203
+ report.failed += 1;
204
+ }
205
+ //# sourceMappingURL=SyncEffectWorkerTransitions.js.map