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,313 @@
1
+ /**
2
+ * Shared gateway contract for the SQLite-authoritative sync runtime.
3
+ *
4
+ * The contract deliberately contains normalized values and stable anchors,
5
+ * never Google SDK objects or physical row numbers. Both the fake gateway and
6
+ * the Apps Script client implement this boundary so fault tests exercise the
7
+ * same compare-and-set semantics as a deployed gateway.
8
+ */
9
+ import { type CellObservation, type EffectKind, type EffectTargetKind, type NormalizedCell } from "../../../domain/index.js";
10
+ import type { Applicability, Presence } from "../../../shared/state/types.js";
11
+ import type { RegisteredProjection } from "../../../infrastructure/storage/sync/shared/syncRegistry.js";
12
+ import { type SyncGatewayEffectResultStatus, type SyncGatewayFastAppendStatus, type SyncGatewayPostconditionMode, type SyncGatewayPostconditionDisposition, type SyncGatewayPostconditionStatus, type SyncGatewayProtocolVersion, type SyncGatewaySnapshotReadMode } from "./constants.js";
13
+ import type { SyncGatewayTiming } from "../telemetry/syncTiming.js";
14
+ /** Projections supported by the v1 sync gateway. */
15
+ export type SyncProjection = RegisteredProjection;
16
+ /** Effect classes whose compare-and-set behavior differs at the gateway. */
17
+ export type SyncEffectKind = EffectKind;
18
+ /** Literal/formula metadata retained by a normalized Sheet snapshot. */
19
+ export interface SyncSnapshotCell extends CellObservation {
20
+ readonly stableHash: Presence<string>;
21
+ }
22
+ /** One physical row read from a registered projection. */
23
+ export interface SyncSnapshotRow {
24
+ readonly rowNumber: number;
25
+ readonly physicalAnchor: Presence<string>;
26
+ /** Optional compatibility fields; the real gateway leaves visible state to SQLite. */
27
+ readonly visibleRevision: Presence<number>;
28
+ readonly visibleHash: Presence<string>;
29
+ readonly cells: Readonly<Record<string, SyncSnapshotCell>>;
30
+ }
31
+ /** Lock-free normalized snapshot returned by a gateway. */
32
+ export interface SyncGatewaySnapshot {
33
+ readonly protocolVersion: SyncGatewayProtocolVersion;
34
+ readonly sheetName: string;
35
+ readonly registeredRange: string;
36
+ readonly projection: SyncProjection;
37
+ readonly schemaVersion: number;
38
+ readonly headers: readonly string[];
39
+ readonly rows: readonly SyncSnapshotRow[];
40
+ readonly snapshotHash: string;
41
+ readonly unanchoredRows: readonly number[];
42
+ readonly duplicateAnchors: readonly {
43
+ readonly anchor: string;
44
+ readonly rowNumbers: readonly number[];
45
+ }[];
46
+ }
47
+ /** Request used to assign missing Developer Metadata anchors before a snapshot. */
48
+ export interface EnsureSyncRowAnchorsRequest {
49
+ readonly physicalSheetId: string;
50
+ readonly sheetName: string;
51
+ readonly registeredRange: string;
52
+ readonly projection: SyncProjection;
53
+ readonly schemaVersion: number;
54
+ }
55
+ /** Result of one anchor assignment pass. */
56
+ export interface EnsureSyncRowAnchorsResult {
57
+ readonly assigned: number;
58
+ readonly existing: number;
59
+ readonly duplicateAnchors: readonly {
60
+ readonly anchor: string;
61
+ readonly rowNumbers: readonly number[];
62
+ }[];
63
+ }
64
+ /** Lock-free snapshot request. */
65
+ export interface ReadSyncSnapshotRequest extends EnsureSyncRowAnchorsRequest {
66
+ /** Full metadata for reconciliation, or user-editable values for polling. */
67
+ readonly readMode?: SyncGatewaySnapshotReadMode;
68
+ }
69
+ /** Result of one combined anchor assignment and snapshot read. */
70
+ export interface SyncObservedSnapshot {
71
+ readonly anchors: EnsureSyncRowAnchorsResult;
72
+ readonly snapshot: SyncGatewaySnapshot;
73
+ /** Optional diagnostic phases returned by newer observation gateways. */
74
+ readonly timing?: SyncGatewayTiming;
75
+ }
76
+ /** Optional batch observation capability used to share one remote request. */
77
+ export interface SyncSheetObservationBatchGateway extends SyncSheetObservationGateway {
78
+ observeSnapshot(request: ReadSyncSnapshotRequest): Promise<SyncObservedSnapshot>;
79
+ observeSnapshots(requests: readonly ReadSyncSnapshotRequest[]): Promise<readonly SyncObservedSnapshot[]>;
80
+ }
81
+ /** Returns whether a gateway supports the one-request observation path. */
82
+ export declare function isSyncSheetObservationBatchGateway(gateway: SyncSheetObservationGateway): gateway is SyncSheetObservationBatchGateway;
83
+ /** Reads one snapshot with one combined request when the gateway supports it. */
84
+ export declare function observeSyncSnapshot(gateway: SyncSheetObservationGateway, request: ReadSyncSnapshotRequest): Promise<SyncObservedSnapshot>;
85
+ /** Reads several snapshots through one remote operation when available. */
86
+ export declare function observeSyncSnapshots(gateway: SyncSheetObservationGateway, requests: readonly ReadSyncSnapshotRequest[]): Promise<readonly SyncObservedSnapshot[]>;
87
+ /**
88
+ * Serializable projection values written by one outbox effect.
89
+ *
90
+ * `targetVisibleHash` is computed over `fields` with
91
+ * computeSyncVisibleHash(). The anchor is projection-local: User_Input and
92
+ * System_State may represent the same row binding with different anchors.
93
+ */
94
+ export interface SyncProjectionEffectPayload {
95
+ readonly sheetName: string;
96
+ readonly registeredRange: string;
97
+ readonly schemaVersion: number;
98
+ readonly targetAnchor: string;
99
+ readonly fields: Readonly<Record<string, NormalizedCell>>;
100
+ readonly targetVisibleHash: string;
101
+ readonly createIfMissing: boolean;
102
+ /** A candidate reconcile must fail rather than overwrite an active candidate. */
103
+ readonly expectedCandidateHash: Applicability<string>;
104
+ }
105
+ /** Gateway-ready view of one durable outbox row. */
106
+ export interface SyncGatewayEffect {
107
+ readonly effectId: string;
108
+ readonly payloadHash: string;
109
+ readonly effectKind: SyncEffectKind;
110
+ readonly physicalSheetId: string;
111
+ readonly projection: SyncProjection;
112
+ readonly targetKind: EffectTargetKind;
113
+ readonly targetId: string;
114
+ readonly rowBindingId: Presence<string>;
115
+ readonly conflictId: Presence<string>;
116
+ readonly expectedVisibleRevision: number;
117
+ readonly expectedVisibleHash: string;
118
+ readonly repairGuardHash: Presence<string>;
119
+ readonly payload: SyncProjectionEffectPayload;
120
+ }
121
+ /** Per-effect terminal/non-terminal gateway result. */
122
+ export interface SyncGatewayEffectResult {
123
+ readonly effectId: string;
124
+ readonly payloadHash: string;
125
+ readonly status: SyncGatewayEffectResultStatus;
126
+ readonly visibleRevision: Presence<number>;
127
+ readonly visibleHash: Presence<string>;
128
+ readonly snapshotHash: Presence<string>;
129
+ readonly reason: Presence<string>;
130
+ readonly postcondition: SyncGatewayPostconditionStatus;
131
+ }
132
+ /** Gateway batch request. All effects must target the same physical sheet. */
133
+ export interface ApplySyncEffectsRequest {
134
+ readonly physicalSheetId: string;
135
+ readonly sheetName: string;
136
+ readonly registeredRange: string;
137
+ readonly projection: SyncProjection;
138
+ readonly schemaVersion: number;
139
+ readonly effects: readonly SyncGatewayEffect[];
140
+ /**
141
+ * Defaults to inline verification for compatibility. The worker explicitly
142
+ * selects deferred verification so recovery/reconciliation owns read-back.
143
+ */
144
+ readonly postconditionMode?: SyncGatewayPostconditionMode;
145
+ }
146
+ /** A batch may intentionally return only a prefix when its budget is exhausted. */
147
+ export interface ApplySyncEffectsResult {
148
+ readonly results: readonly SyncGatewayEffectResult[];
149
+ readonly snapshotHash: Presence<string>;
150
+ /** True only when the gateway intentionally stopped before the supplied suffix. */
151
+ readonly hasMore: boolean;
152
+ /** Optional phase timing returned by newer Code.gs deployments. */
153
+ readonly timing?: SyncGatewayTiming;
154
+ }
155
+ /** Read-back classification used after a response is lost or a lease expires. */
156
+ export interface SyncEffectPostcondition {
157
+ readonly disposition: SyncGatewayPostconditionDisposition;
158
+ readonly visibleRevision: Presence<number>;
159
+ readonly visibleHash: Presence<string>;
160
+ readonly snapshotHash: Presence<string>;
161
+ }
162
+ /** One effect identity paired with its read-back result in a recovery batch. */
163
+ export interface SyncGatewayEffectPostconditionResult {
164
+ readonly effectId: string;
165
+ readonly payloadHash: string;
166
+ readonly postcondition: SyncEffectPostcondition;
167
+ }
168
+ /** One row written through the fast-append path.
169
+ *
170
+ * This path is deliberately append-only. It does not carry a row anchor,
171
+ * compare-and-set state, visible hash, receipt, or metadata instruction. A
172
+ * response loss may therefore cause a later retry to append the row again;
173
+ * reconciliation is the component that detects and repairs that drift.
174
+ */
175
+ export interface FastAppendRow {
176
+ readonly effectId: string;
177
+ readonly fields: Readonly<Record<string, NormalizedCell>>;
178
+ }
179
+ /** Per-effect result for one fast-append row. */
180
+ export interface FastAppendRowResult {
181
+ readonly effectId: string;
182
+ /** The row was included in the gateway's bulk write. */
183
+ readonly status: SyncGatewayFastAppendStatus;
184
+ }
185
+ /** Bounded fast-append request for one System_State projection sheet. */
186
+ export interface FastAppendRowsRequest {
187
+ readonly physicalSheetId: string;
188
+ readonly sheetName: string;
189
+ readonly registeredRange: string;
190
+ readonly projection: SyncProjection;
191
+ readonly schemaVersion: number;
192
+ readonly rows: readonly FastAppendRow[];
193
+ }
194
+ /** Result of one bounded fast-append batch. */
195
+ export interface FastAppendRowsResult {
196
+ readonly results: readonly FastAppendRowResult[];
197
+ /** True when the gateway intentionally stopped before the supplied suffix. */
198
+ readonly hasMore: boolean;
199
+ /** Optional phase timing returned by newer Code.gs deployments. */
200
+ readonly timing?: SyncGatewayTiming;
201
+ }
202
+ /** Request used to classify several response-loss effects with one Sheet read. */
203
+ export interface ReadSyncEffectPostconditionsRequest {
204
+ readonly physicalSheetId: string;
205
+ readonly sheetName: string;
206
+ readonly registeredRange: string;
207
+ readonly projection: SyncProjection;
208
+ readonly schemaVersion: number;
209
+ readonly effects: readonly SyncGatewayEffect[];
210
+ }
211
+ /** Fast append capability required for new System_State rows. */
212
+ export interface SyncEffectWorkerGateway {
213
+ fastAppendRows(request: FastAppendRowsRequest): Promise<FastAppendRowsResult>;
214
+ }
215
+ /**
216
+ * Full effect capability required for regular updates, deletes, and recovery.
217
+ *
218
+ * A fast-only gateway can still run the worker when its outbox contains only
219
+ * appendable System_State creates; regular effects are rejected explicitly.
220
+ */
221
+ export interface SyncEffectWorkerFullGateway extends SyncEffectWorkerGateway {
222
+ applyEffects(request: ApplySyncEffectsRequest): Promise<ApplySyncEffectsResult>;
223
+ readEffectPostcondition(effect: SyncGatewayEffect): Promise<SyncEffectPostcondition>;
224
+ readEffectPostconditions(request: ReadSyncEffectPostconditionsRequest): Promise<readonly SyncGatewayEffectPostconditionResult[]>;
225
+ }
226
+ /** Read-only gateway capability used by polling and onEdit observation. */
227
+ export interface SyncSheetObservationGateway {
228
+ ensureRowAnchors(request: EnsureSyncRowAnchorsRequest): Promise<EnsureSyncRowAnchorsResult>;
229
+ readSnapshot(request: ReadSyncSnapshotRequest): Promise<SyncGatewaySnapshot>;
230
+ }
231
+ /** Request for a lightweight table read used by simple polling. */
232
+ export interface ReadSyncTableRowsRequest {
233
+ readonly physicalSheetId: string;
234
+ readonly sheetName: string;
235
+ readonly registeredRange: string;
236
+ readonly projection: SyncProjection;
237
+ readonly schemaVersion: number;
238
+ readonly headers: readonly string[];
239
+ }
240
+ /** One nonblank row returned by a lightweight table read. */
241
+ export interface SyncTableRow {
242
+ readonly rowNumber: number;
243
+ readonly fields: Readonly<Record<string, NormalizedCell>>;
244
+ }
245
+ /** Result of a lightweight table read without Sheet metadata or CAS work. */
246
+ export interface SyncTableRowsResult {
247
+ readonly sheetName: string;
248
+ readonly registeredRange: string;
249
+ readonly headers: readonly string[];
250
+ readonly rows: readonly SyncTableRow[];
251
+ readonly timing?: SyncGatewayTiming;
252
+ }
253
+ /** Gateway capability for reading literal table values without observation metadata. */
254
+ export interface SyncSheetTableReaderGateway {
255
+ readRows(request: ReadSyncTableRowsRequest): Promise<SyncTableRowsResult>;
256
+ readRowsBatch(requests: readonly ReadSyncTableRowsRequest[]): Promise<readonly SyncTableRowsResult[]>;
257
+ }
258
+ /**
259
+ * Full gateway boundary used by observation and reconciliation.
260
+ *
261
+ * It includes the full effect-worker capabilities plus the metadata/snapshot
262
+ * reads required to observe user edits and repair projection drift.
263
+ */
264
+ export interface SyncSheetGateway extends SyncEffectWorkerFullGateway, SyncSheetObservationGateway {
265
+ }
266
+ /**
267
+ * Dependencies for a gateway that routes append writes and full observation
268
+ * work to separate remote capabilities.
269
+ *
270
+ * The fast gateway may be the thin operation-based Code.gs deployment, while
271
+ * the full gateway may be a separately deployed observation/reconciliation
272
+ * endpoint. Keeping this composition explicit prevents a fast-only endpoint
273
+ * from being mistaken for a complete sync gateway.
274
+ */
275
+ export interface SplitSyncGatewayOptions {
276
+ readonly fastGateway: SyncEffectWorkerGateway;
277
+ readonly fullGateway: SyncSheetGateway;
278
+ }
279
+ /**
280
+ * Combines the low-latency append path with the full observation path.
281
+ *
282
+ * New System_State creates use `fastGateway`. Updates, deletes, response-loss
283
+ * recovery, user-edit observation, and reconciliation use `fullGateway`.
284
+ * Neither delegate is allowed to silently handle the other capability.
285
+ */
286
+ export declare class SplitSyncGateway implements SyncSheetGateway {
287
+ private readonly fastGateway;
288
+ private readonly fullGateway;
289
+ constructor(options: SplitSyncGatewayOptions);
290
+ /** Sends append-only System_State creates through the thin gateway. */
291
+ fastAppendRows(request: FastAppendRowsRequest): Promise<FastAppendRowsResult>;
292
+ /** Sends regular effect writes through the full gateway. */
293
+ applyEffects(request: ApplySyncEffectsRequest): Promise<ApplySyncEffectsResult>;
294
+ /** Reads one effect postcondition through the full gateway. */
295
+ readEffectPostcondition(effect: SyncGatewayEffect): Promise<SyncEffectPostcondition>;
296
+ /** Reads a batch of effect postconditions through the full gateway. */
297
+ readEffectPostconditions(request: ReadSyncEffectPostconditionsRequest): Promise<readonly SyncGatewayEffectPostconditionResult[]>;
298
+ /** Ensures row anchors through the full observation gateway. */
299
+ ensureRowAnchors(request: EnsureSyncRowAnchorsRequest): Promise<EnsureSyncRowAnchorsResult>;
300
+ /** Reads snapshots through the full observation gateway. */
301
+ readSnapshot(request: ReadSyncSnapshotRequest): Promise<SyncGatewaySnapshot>;
302
+ /** Shares the full gateway's combined observation capability when present. */
303
+ observeSnapshot(request: ReadSyncSnapshotRequest): Promise<SyncObservedSnapshot>;
304
+ /** Shares one remote observation request across the supplied projections. */
305
+ observeSnapshots(requests: readonly ReadSyncSnapshotRequest[]): Promise<readonly SyncObservedSnapshot[]>;
306
+ }
307
+ /** Computes the stable visible-state hash shared by fake and real gateways. */
308
+ export declare function computeSyncVisibleHash(fields: Readonly<Record<string, NormalizedCell>>): string;
309
+ /** Validates and decodes the projection payload stored in a durable outbox row. */
310
+ export declare function parseSyncProjectionEffectPayload(value: string): SyncProjectionEffectPayload;
311
+ /** Serializes a checked projection payload in a stable key order for outbox use. */
312
+ export declare function serializeSyncProjectionEffectPayload(payload: SyncProjectionEffectPayload): string;
313
+ //# sourceMappingURL=syncGateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncGateway.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/gateway/syncGateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Shared gateway contract for the SQLite-authoritative sync runtime.
3
+ *
4
+ * The contract deliberately contains normalized values and stable anchors,
5
+ * never Google SDK objects or physical row numbers. Both the fake gateway and
6
+ * the Apps Script client implement this boundary so fault tests exercise the
7
+ * same compare-and-set semantics as a deployed gateway.
8
+ */
9
+ import { stableHash, } from "../../../domain/index.js";
10
+ import { JAVASCRIPT_TYPE_NAMES, NORMALIZED_CELL_KINDS, } from "../../../shared/encoding/constants.js";
11
+ import { isJavaScriptType, isRecord, } from "../../../shared/encoding/typeGuards.js";
12
+ import { APPLICABILITY_KINDS } from "../../../shared/state/constants.js";
13
+ import { EMPTY_ARRAY_LENGTH_ZERO, EMPTY_STRING_LENGTH_ZERO, } from "../../../shared/constants.js";
14
+ import { SYNC_GATEWAY_ERROR_CODES, SyncGatewayContractError, } from "./errors.js";
15
+ import { requireSyncGatewayPositiveSafeInteger, requireSyncGatewayText, } from "./validation.js";
16
+ /** Returns whether a gateway supports the one-request observation path. */
17
+ export function isSyncSheetObservationBatchGateway(gateway) {
18
+ const candidate = gateway;
19
+ return typeof candidate.observeSnapshot === "function" &&
20
+ typeof candidate.observeSnapshots === "function";
21
+ }
22
+ /** Reads one snapshot with one combined request when the gateway supports it. */
23
+ export async function observeSyncSnapshot(gateway, request) {
24
+ if (isSyncSheetObservationBatchGateway(gateway)) {
25
+ return gateway.observeSnapshot(request);
26
+ }
27
+ const anchors = await gateway.ensureRowAnchors(request);
28
+ const snapshot = await gateway.readSnapshot(request);
29
+ return { anchors, snapshot };
30
+ }
31
+ /** Reads several snapshots through one remote operation when available. */
32
+ export async function observeSyncSnapshots(gateway, requests) {
33
+ if (isSyncSheetObservationBatchGateway(gateway)) {
34
+ return gateway.observeSnapshots(requests);
35
+ }
36
+ const results = [];
37
+ for (const request of requests) {
38
+ results.push(await observeSyncSnapshot(gateway, request));
39
+ }
40
+ return results;
41
+ }
42
+ /**
43
+ * Combines the low-latency append path with the full observation path.
44
+ *
45
+ * New System_State creates use `fastGateway`. Updates, deletes, response-loss
46
+ * recovery, user-edit observation, and reconciliation use `fullGateway`.
47
+ * Neither delegate is allowed to silently handle the other capability.
48
+ */
49
+ export class SplitSyncGateway {
50
+ fastGateway;
51
+ fullGateway;
52
+ constructor(options) {
53
+ this.fastGateway = options.fastGateway;
54
+ this.fullGateway = options.fullGateway;
55
+ }
56
+ /** Sends append-only System_State creates through the thin gateway. */
57
+ fastAppendRows(request) {
58
+ return this.fastGateway.fastAppendRows(request);
59
+ }
60
+ /** Sends regular effect writes through the full gateway. */
61
+ applyEffects(request) {
62
+ return this.fullGateway.applyEffects(request);
63
+ }
64
+ /** Reads one effect postcondition through the full gateway. */
65
+ readEffectPostcondition(effect) {
66
+ return this.fullGateway.readEffectPostcondition(effect);
67
+ }
68
+ /** Reads a batch of effect postconditions through the full gateway. */
69
+ readEffectPostconditions(request) {
70
+ return this.fullGateway.readEffectPostconditions(request);
71
+ }
72
+ /** Ensures row anchors through the full observation gateway. */
73
+ ensureRowAnchors(request) {
74
+ return this.fullGateway.ensureRowAnchors(request);
75
+ }
76
+ /** Reads snapshots through the full observation gateway. */
77
+ readSnapshot(request) {
78
+ return this.fullGateway.readSnapshot(request);
79
+ }
80
+ /** Shares the full gateway's combined observation capability when present. */
81
+ observeSnapshot(request) {
82
+ return observeSyncSnapshot(this.fullGateway, request);
83
+ }
84
+ /** Shares one remote observation request across the supplied projections. */
85
+ observeSnapshots(requests) {
86
+ return observeSyncSnapshots(this.fullGateway, requests);
87
+ }
88
+ }
89
+ /** Computes the stable visible-state hash shared by fake and real gateways. */
90
+ export function computeSyncVisibleHash(fields) {
91
+ const entries = Object.entries(fields)
92
+ .sort(([left], [right]) => left.localeCompare(right))
93
+ .map(([fieldName, value]) => ({ fieldName, value }));
94
+ return stableHash({ fields: entries });
95
+ }
96
+ /** Validates and decodes the projection payload stored in a durable outbox row. */
97
+ export function parseSyncProjectionEffectPayload(value) {
98
+ let parsed;
99
+ try {
100
+ parsed = JSON.parse(value);
101
+ }
102
+ catch {
103
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "effect payload is not valid JSON");
104
+ }
105
+ if (!isRecord(parsed)) {
106
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "effect payload must be an object");
107
+ }
108
+ const sheetName = requireSyncGatewayText(parsed.sheetName, "effect payload sheetName", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
109
+ const registeredRange = requireSyncGatewayText(parsed.registeredRange, "effect payload registeredRange", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
110
+ const targetAnchor = requireSyncGatewayText(parsed.targetAnchor, "effect payload targetAnchor", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
111
+ const targetVisibleHash = requireSyncGatewayText(parsed.targetVisibleHash, "effect payload targetVisibleHash", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
112
+ const schemaVersion = requireSyncGatewayPositiveSafeInteger(parsed.schemaVersion, "effect payload schemaVersion", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
113
+ if (!isJavaScriptType(parsed.createIfMissing, JAVASCRIPT_TYPE_NAMES.BOOLEAN)) {
114
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "effect payload createIfMissing must be boolean");
115
+ }
116
+ const expectedCandidateHash = parseNullableCandidateHash(parsed.expectedCandidateHash);
117
+ if (!isRecord(parsed.fields)) {
118
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "effect payload fields must be an object");
119
+ }
120
+ const fields = {};
121
+ for (const [fieldName, cell] of Object.entries(parsed.fields)) {
122
+ if (fieldName.length === EMPTY_STRING_LENGTH_ZERO ||
123
+ !isNormalizedCell(cell)) {
124
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "effect payload contains an invalid normalized field");
125
+ }
126
+ fields[fieldName] = cell;
127
+ }
128
+ if (Object.keys(fields).length === EMPTY_ARRAY_LENGTH_ZERO) {
129
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "effect payload must contain a field");
130
+ }
131
+ if (computeSyncVisibleHash(fields) !== targetVisibleHash) {
132
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "effect payload targetVisibleHash does not match its fields");
133
+ }
134
+ return {
135
+ sheetName,
136
+ registeredRange,
137
+ schemaVersion,
138
+ targetAnchor,
139
+ fields,
140
+ targetVisibleHash,
141
+ createIfMissing: parsed.createIfMissing,
142
+ expectedCandidateHash,
143
+ };
144
+ }
145
+ /** Serializes a checked projection payload in a stable key order for outbox use. */
146
+ export function serializeSyncProjectionEffectPayload(payload) {
147
+ // Validate before serialization so worker and gateway fail at the same boundary.
148
+ const checked = parseSyncProjectionEffectPayload(JSON.stringify(toWireProjectionEffectPayload(payload)));
149
+ return JSON.stringify({
150
+ sheetName: checked.sheetName,
151
+ registeredRange: checked.registeredRange,
152
+ schemaVersion: checked.schemaVersion,
153
+ targetAnchor: checked.targetAnchor,
154
+ fields: Object.fromEntries(Object.entries(checked.fields).sort(([a], [b]) => a.localeCompare(b))),
155
+ targetVisibleHash: checked.targetVisibleHash,
156
+ createIfMissing: checked.createIfMissing,
157
+ expectedCandidateHash: toNullableCandidateHash(checked.expectedCandidateHash),
158
+ });
159
+ }
160
+ function parseNullableCandidateHash(value) {
161
+ if (value === null) {
162
+ return { kind: APPLICABILITY_KINDS.NOT_APPLICABLE };
163
+ }
164
+ return {
165
+ kind: APPLICABILITY_KINDS.APPLICABLE,
166
+ value: requireSyncGatewayText(value, "effect payload expectedCandidateHash", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD),
167
+ };
168
+ }
169
+ function toWireProjectionEffectPayload(payload) {
170
+ return {
171
+ sheetName: payload.sheetName,
172
+ registeredRange: payload.registeredRange,
173
+ schemaVersion: payload.schemaVersion,
174
+ targetAnchor: payload.targetAnchor,
175
+ fields: payload.fields,
176
+ targetVisibleHash: payload.targetVisibleHash,
177
+ createIfMissing: payload.createIfMissing,
178
+ expectedCandidateHash: toNullableCandidateHash(payload.expectedCandidateHash),
179
+ };
180
+ }
181
+ function toNullableCandidateHash(value) {
182
+ return value.kind === APPLICABILITY_KINDS.APPLICABLE ? value.value : null;
183
+ }
184
+ function isNormalizedCell(value) {
185
+ if (value === null)
186
+ return true;
187
+ if (!isRecord(value))
188
+ return false;
189
+ if (value.kind === NORMALIZED_CELL_KINDS.STRING) {
190
+ return typeof value.value === JAVASCRIPT_TYPE_NAMES.STRING;
191
+ }
192
+ if (value.kind === NORMALIZED_CELL_KINDS.NUMBER) {
193
+ return (typeof value.value === JAVASCRIPT_TYPE_NAMES.NUMBER &&
194
+ Number.isFinite(value.value));
195
+ }
196
+ if (value.kind === NORMALIZED_CELL_KINDS.BOOLEAN) {
197
+ return typeof value.value === JAVASCRIPT_TYPE_NAMES.BOOLEAN;
198
+ }
199
+ return (value.kind === NORMALIZED_CELL_KINDS.DATE &&
200
+ typeof value.value === JAVASCRIPT_TYPE_NAMES.STRING);
201
+ }
202
+ //# sourceMappingURL=syncGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncGateway.js","sourceRoot":"","sources":["../../../../src/application/sync/gateway/syncGateway.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,GAKX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,QAAQ,GACT,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AAUtC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qCAAqC,EACrC,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAkFzB,2EAA2E;AAC3E,MAAM,UAAU,kCAAkC,CAChD,OAAoC;IAEpC,MAAM,SAAS,GAAG,OAAoD,CAAC;IACvE,OAAO,OAAO,SAAS,CAAC,eAAe,KAAK,UAAU;QACpD,OAAO,SAAS,CAAC,gBAAgB,KAAK,UAAU,CAAC;AACrD,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAoC,EACpC,OAAgC;IAEhC,IAAI,kCAAkC,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAoC,EACpC,QAA4C;IAE5C,IAAI,kCAAkC,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AA0ND;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACV,WAAW,CAA0B;IACrC,WAAW,CAAmB;IAE/C,YAAmB,OAAgC;QACjD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;IAED,uEAAuE;IAChE,cAAc,CAAC,OAA8B;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,4DAA4D;IACrD,YAAY,CAAC,OAAgC;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,+DAA+D;IACxD,uBAAuB,CAAC,MAAyB;QACtD,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,uEAAuE;IAChE,wBAAwB,CAC7B,OAA4C;QAE5C,OAAO,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,gEAAgE;IACzD,gBAAgB,CACrB,OAAoC;QAEpC,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,4DAA4D;IACrD,YAAY,CAAC,OAAgC;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,8EAA8E;IACvE,eAAe,CAAC,OAAgC;QACrD,OAAO,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,6EAA6E;IACtE,gBAAgB,CACrB,QAA4C;QAE5C,OAAO,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,UAAU,sBAAsB,CAAC,MAAgD;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gCAAgC,CAAC,KAAa;IAC5D,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,CAAC,sBAAsB,EAC/C,kCAAkC,CACnC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,CAAC,sBAAsB,EAC/C,kCAAkC,CACnC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,sBAAsB,CACtC,MAAM,CAAC,SAAS,EAChB,0BAA0B,EAC1B,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,MAAM,eAAe,GAAG,sBAAsB,CAC5C,MAAM,CAAC,eAAe,EACtB,gCAAgC,EAChC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,MAAM,YAAY,GAAG,sBAAsB,CACzC,MAAM,CAAC,YAAY,EACnB,6BAA6B,EAC7B,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,MAAM,CAAC,iBAAiB,EACxB,kCAAkC,EAClC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,MAAM,aAAa,GAAG,qCAAqC,CACzD,MAAM,CAAC,aAAa,EACpB,8BAA8B,EAC9B,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,CAAC,sBAAsB,EAC/C,gDAAgD,CACjD,CAAC;IACJ,CAAC;IACD,MAAM,qBAAqB,GAAG,0BAA0B,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACvF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,CAAC,sBAAsB,EAC/C,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAmC,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,IACE,SAAS,CAAC,MAAM,KAAK,wBAAwB;YAC7C,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACvB,CAAC;YACD,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,CAAC,sBAAsB,EAC/C,qDAAqD,CACtD,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC3B,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,uBAAuB,EAAE,CAAC;QAC3D,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,CAAC,sBAAsB,EAC/C,qCAAqC,CACtC,CAAC;IACJ,CAAC;IACD,IAAI,sBAAsB,CAAC,MAAM,CAAC,KAAK,iBAAiB,EAAE,CAAC;QACzD,MAAM,IAAI,wBAAwB,CAChC,wBAAwB,CAAC,sBAAsB,EAC/C,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS;QACT,eAAe;QACf,aAAa;QACb,YAAY;QACZ,MAAM;QACN,iBAAiB;QACjB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,oCAAoC,CAAC,OAAoC;IACvF,iFAAiF;IACjF,MAAM,OAAO,GAAG,gCAAgC,CAC9C,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CACvD,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,qBAAqB,EAAE,uBAAuB,CAAC,OAAO,CAAC,qBAAqB,CAAC;KAC9E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,cAAc,EAAE,CAAC;IACtD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,UAAU;QACpC,KAAK,EAAE,sBAAsB,CAC3B,KAAK,EACL,sCAAsC,EACtC,wBAAwB,CAAC,sBAAsB,CAChD;KACF,CAAC;AACJ,CAAC;AAcD,SAAS,6BAA6B,CACpC,OAAoC;IAEpC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,qBAAqB,EAAE,uBAAuB,CAAC,OAAO,CAAC,qBAAqB,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA4B;IAC3D,OAAO,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,qBAAqB,CAAC,MAAM,CAAC;IAC7D,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO,CACL,OAAO,KAAK,CAAC,KAAK,KAAK,qBAAqB,CAAC,MAAM;YACnD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,qBAAqB,CAAC,OAAO,CAAC;IAC9D,CAAC;IACD,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI;QACzC,OAAO,KAAK,CAAC,KAAK,KAAK,qBAAqB,CAAC,MAAM,CACpD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type SyncGatewayProjection, type SyncGatewayProtocolVersion, type SyncGatewaySnapshotReadMode } from "./constants.js";
2
+ import { type SyncGatewayErrorCode } from "./errors.js";
3
+ /** Requires a non-empty string at a gateway contract boundary. */
4
+ export declare function requireSyncGatewayText(value: unknown, label: string, errorCode: SyncGatewayErrorCode): string;
5
+ /** Requires a positive safe integer at a gateway contract boundary. */
6
+ export declare function requireSyncGatewayPositiveSafeInteger(value: unknown, label: string, errorCode: SyncGatewayErrorCode): number;
7
+ /** Requires a non-negative safe integer at a gateway contract boundary. */
8
+ export declare function requireSyncGatewayNonNegativeSafeInteger(value: unknown, label: string, errorCode: SyncGatewayErrorCode): number;
9
+ /** Requires a protocol version returned by the runtime gateway. */
10
+ export declare function requireSyncGatewayProtocolVersion(value: unknown, label: string, errorCode: SyncGatewayErrorCode): SyncGatewayProtocolVersion;
11
+ /** Requires a projection label returned by the runtime gateway. */
12
+ export declare function requireSyncGatewayProjection(value: unknown, label: string, errorCode: SyncGatewayErrorCode): SyncGatewayProjection;
13
+ /** Requires a supported snapshot detail level at a gateway boundary. */
14
+ export declare function requireSyncGatewaySnapshotReadMode(value: unknown, label: string, errorCode: SyncGatewayErrorCode): SyncGatewaySnapshotReadMode;
15
+ /** Requires a non-empty list at a gateway contract boundary. */
16
+ export declare function requireSyncGatewayNonEmptyList<T>(values: readonly T[], label: string, errorCode: SyncGatewayErrorCode): void;
17
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/gateway/validation.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AAErB,kEAAkE;AAClE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAKR;AAED,uEAAuE;AACvE,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAQR;AAED,2EAA2E;AAC3E,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAQR;AAED,mEAAmE;AACnE,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,GAC9B,0BAA0B,CAW5B;AAED,mEAAmE;AACnE,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,GAC9B,qBAAqB,CAWvB;AAED,wEAAwE;AACxE,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,GAC9B,2BAA2B,CAa7B;AAED,gEAAgE;AAChE,wBAAgB,8BAA8B,CAAC,CAAC,EAC9C,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,GAC9B,IAAI,CAIN"}
@@ -0,0 +1,60 @@
1
+ import { JAVASCRIPT_TYPE_NAMES } from "../../../shared/encoding/constants.js";
2
+ import { isJavaScriptType } from "../../../shared/encoding/typeGuards.js";
3
+ import { isNonEmptyList, isNonEmptyString, isNonNegativeSafeInteger, isPositiveSafeInteger, } from "../../../shared/validation.js";
4
+ import { SYNC_GATEWAY_PROJECTIONS, SYNC_GATEWAY_PROTOCOL_VERSIONS, SYNC_GATEWAY_SNAPSHOT_READ_MODES, } from "./constants.js";
5
+ import { SyncGatewayContractError, } from "./errors.js";
6
+ /** Requires a non-empty string at a gateway contract boundary. */
7
+ export function requireSyncGatewayText(value, label, errorCode) {
8
+ if (!isNonEmptyString(value)) {
9
+ throw new SyncGatewayContractError(errorCode, `${label} is required`);
10
+ }
11
+ return value;
12
+ }
13
+ /** Requires a positive safe integer at a gateway contract boundary. */
14
+ export function requireSyncGatewayPositiveSafeInteger(value, label, errorCode) {
15
+ if (!isPositiveSafeInteger(value)) {
16
+ throw new SyncGatewayContractError(errorCode, `${label} must be a positive safe integer`);
17
+ }
18
+ return value;
19
+ }
20
+ /** Requires a non-negative safe integer at a gateway contract boundary. */
21
+ export function requireSyncGatewayNonNegativeSafeInteger(value, label, errorCode) {
22
+ if (!isNonNegativeSafeInteger(value)) {
23
+ throw new SyncGatewayContractError(errorCode, `${label} must be a non-negative safe integer`);
24
+ }
25
+ return value;
26
+ }
27
+ /** Requires a protocol version returned by the runtime gateway. */
28
+ export function requireSyncGatewayProtocolVersion(value, label, errorCode) {
29
+ if (!isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.STRING) ||
30
+ value !== SYNC_GATEWAY_PROTOCOL_VERSIONS.V1) {
31
+ throw new SyncGatewayContractError(errorCode, `${label} is not supported`);
32
+ }
33
+ return value;
34
+ }
35
+ /** Requires a projection label returned by the runtime gateway. */
36
+ export function requireSyncGatewayProjection(value, label, errorCode) {
37
+ if (!isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.STRING) ||
38
+ !isSyncGatewayProjection(value)) {
39
+ throw new SyncGatewayContractError(errorCode, `${label} is not supported`);
40
+ }
41
+ return value;
42
+ }
43
+ /** Requires a supported snapshot detail level at a gateway boundary. */
44
+ export function requireSyncGatewaySnapshotReadMode(value, label, errorCode) {
45
+ if (!isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.STRING) ||
46
+ !Object.values(SYNC_GATEWAY_SNAPSHOT_READ_MODES).includes(value)) {
47
+ throw new SyncGatewayContractError(errorCode, `${label} is not supported`);
48
+ }
49
+ return value;
50
+ }
51
+ /** Requires a non-empty list at a gateway contract boundary. */
52
+ export function requireSyncGatewayNonEmptyList(values, label, errorCode) {
53
+ if (!isNonEmptyList(values)) {
54
+ throw new SyncGatewayContractError(errorCode, `${label} requires at least one item`);
55
+ }
56
+ }
57
+ function isSyncGatewayProjection(value) {
58
+ return Object.values(SYNC_GATEWAY_PROJECTIONS).includes(value);
59
+ }
60
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/application/sync/gateway/validation.ts"],"names":[],"mappings":"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"}