hikoutei 0.3.4 → 0.3.6

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 (355) hide show
  1. package/README.ja.md +44 -21
  2. package/README.ko.md +43 -23
  3. package/README.md +49 -33
  4. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +3 -3
  5. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -1
  6. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +1 -1
  7. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.d.ts +1 -1
  8. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js +1 -1
  9. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js +3 -3
  10. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js.map +1 -1
  11. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +3 -3
  12. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -1
  13. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +15 -15
  14. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -1
  15. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts +1 -1
  16. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts.map +1 -1
  17. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js +3 -3
  18. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js.map +1 -1
  19. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts +5 -5
  20. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts.map +1 -1
  21. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +5 -5
  22. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -1
  23. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +1 -1
  24. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +5 -5
  25. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -1
  26. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js +3 -3
  27. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js.map +1 -1
  28. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts +156 -0
  29. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map +1 -0
  30. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js +1112 -0
  31. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js.map +1 -0
  32. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts +87 -0
  33. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts.map +1 -0
  34. package/dist/adapter/sheets/providers/google-sheets-api/constants.js +97 -0
  35. package/dist/adapter/sheets/providers/google-sheets-api/constants.js.map +1 -0
  36. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts +53 -0
  37. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts.map +1 -0
  38. package/dist/adapter/sheets/providers/google-sheets-api/errors.js +61 -0
  39. package/dist/adapter/sheets/providers/google-sheets-api/errors.js.map +1 -0
  40. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts +16 -0
  41. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts.map +1 -0
  42. package/dist/adapter/sheets/providers/google-sheets-api/index.js +13 -0
  43. package/dist/adapter/sheets/providers/google-sheets-api/index.js.map +1 -0
  44. package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.d.ts +83 -0
  45. package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.d.ts.map +1 -0
  46. package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.js +413 -0
  47. package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.js.map +1 -0
  48. package/dist/adapter/sheets/providers/google-sheets-api/model/observation.d.ts +86 -0
  49. package/dist/adapter/sheets/providers/google-sheets-api/model/observation.d.ts.map +1 -0
  50. package/dist/adapter/sheets/providers/google-sheets-api/model/observation.js +439 -0
  51. package/dist/adapter/sheets/providers/google-sheets-api/model/observation.js.map +1 -0
  52. package/dist/adapter/sheets/providers/google-sheets-api/model/planner.d.ts +115 -0
  53. package/dist/adapter/sheets/providers/google-sheets-api/model/planner.d.ts.map +1 -0
  54. package/dist/adapter/sheets/providers/google-sheets-api/model/planner.js +522 -0
  55. package/dist/adapter/sheets/providers/google-sheets-api/model/planner.js.map +1 -0
  56. package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.d.ts +17 -0
  57. package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.d.ts.map +1 -0
  58. package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.js +99 -0
  59. package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.js.map +1 -0
  60. package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.d.ts +242 -0
  61. package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.d.ts.map +1 -0
  62. package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.js +707 -0
  63. package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.js.map +1 -0
  64. package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.d.ts +16 -0
  65. package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.d.ts.map +1 -0
  66. package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.js +29 -0
  67. package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.js.map +1 -0
  68. package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.d.ts +26 -0
  69. package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.d.ts.map +1 -0
  70. package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.js +57 -0
  71. package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.js.map +1 -0
  72. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts +102 -0
  73. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts.map +1 -0
  74. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js +375 -0
  75. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js.map +1 -0
  76. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts +168 -0
  77. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts.map +1 -0
  78. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +247 -0
  79. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js.map +1 -0
  80. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts +47 -0
  81. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts.map +1 -0
  82. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js +60 -0
  83. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js.map +1 -0
  84. package/dist/api/Hikoutei.d.ts +1 -1
  85. package/dist/api/Hikoutei.js +1 -1
  86. package/dist/api/index.d.ts +2 -2
  87. package/dist/api/index.js +2 -2
  88. package/dist/application/orm/mapping/contracts.d.ts +2 -2
  89. package/dist/application/orm/mapping/contracts.d.ts.map +1 -1
  90. package/dist/application/orm/mapping/definition.js +5 -5
  91. package/dist/application/orm/mapping/definition.js.map +1 -1
  92. package/dist/application/orm/mapping/projection.js +7 -7
  93. package/dist/application/orm/mapping/projection.js.map +1 -1
  94. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +3 -3
  95. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
  96. package/dist/application/orm/persistence/flush/flushCoordinator.js +2 -2
  97. package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
  98. package/dist/application/orm/persistence/projection/projectionEffects.d.ts +1 -1
  99. package/dist/application/orm/persistence/projection/projectionEffects.js +6 -6
  100. package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -1
  101. package/dist/application/orm/persistence/support/contracts.d.ts +2 -2
  102. package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -1
  103. package/dist/application/sync/inbound/autoSystemConflictResolution.js +7 -7
  104. package/dist/application/sync/inbound/autoSystemConflictResolution.js.map +1 -1
  105. package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts +3 -3
  106. package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -1
  107. package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +1 -1
  108. package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -1
  109. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts +17 -1
  110. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts.map +1 -1
  111. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js +27 -1
  112. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js.map +1 -1
  113. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +2 -2
  114. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
  115. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +26 -6
  116. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
  117. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +24 -9
  118. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
  119. package/dist/application/sync/outbound/effects/SyncEffectWorker.js +128 -81
  120. package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
  121. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +31 -14
  122. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
  123. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +32 -15
  124. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
  125. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +13 -9
  126. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
  127. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +53 -37
  128. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
  129. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +1 -1
  130. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -1
  131. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +29 -19
  132. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
  133. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +59 -41
  134. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
  135. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts +4 -4
  136. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts.map +1 -1
  137. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js +3 -3
  138. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js.map +1 -1
  139. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +3 -3
  140. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
  141. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +42 -46
  142. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
  143. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts +8 -8
  144. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -1
  145. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +15 -15
  146. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -1
  147. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts +3 -3
  148. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  149. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +10 -10
  150. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  151. package/dist/application/sync/service/SyncPollingSupervisor.d.ts +1 -1
  152. package/dist/application/sync/service/SyncPollingSupervisor.js +1 -1
  153. package/dist/application/sync/service/SyncServiceBootstrap.d.ts +29 -19
  154. package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
  155. package/dist/application/sync/service/SyncServiceBootstrap.js +103 -78
  156. package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
  157. package/dist/application/sync/service/errors.d.ts +1 -1
  158. package/dist/application/sync/service/errors.js +1 -1
  159. package/dist/application/sync/service/errors.js.map +1 -1
  160. package/dist/application/sync/sheets/conflictProjection.d.ts.map +1 -0
  161. package/dist/application/sync/sheets/conflictProjection.js.map +1 -0
  162. package/dist/application/sync/{gateway → sheets}/conflictProjectionRegistration.d.ts +1 -1
  163. package/dist/application/sync/sheets/conflictProjectionRegistration.d.ts.map +1 -0
  164. package/dist/application/sync/{gateway → sheets}/conflictProjectionRegistration.js +3 -3
  165. package/dist/application/sync/sheets/conflictProjectionRegistration.js.map +1 -0
  166. package/dist/application/sync/sheets/constants.d.ts +66 -0
  167. package/dist/application/sync/sheets/constants.d.ts.map +1 -0
  168. package/dist/application/sync/{gateway → sheets}/constants.js +15 -15
  169. package/dist/application/sync/sheets/constants.js.map +1 -0
  170. package/dist/application/sync/sheets/errors.d.ts +15 -0
  171. package/dist/application/sync/sheets/errors.d.ts.map +1 -0
  172. package/dist/application/sync/sheets/errors.js +16 -0
  173. package/dist/application/sync/sheets/errors.js.map +1 -0
  174. package/dist/application/sync/{gateway/coordinator/CoordinatedSyncGateway.d.ts → sheets/mutationCoordinator/CoordinatedSheetsProvider.d.ts} +29 -28
  175. package/dist/application/sync/sheets/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +1 -0
  176. package/dist/application/sync/{gateway/coordinator/CoordinatedSyncGateway.js → sheets/mutationCoordinator/CoordinatedSheetsProvider.js} +27 -26
  177. package/dist/application/sync/sheets/mutationCoordinator/CoordinatedSheetsProvider.js.map +1 -0
  178. package/dist/application/sync/{gateway/coordinator → sheets/mutationCoordinator}/asyncMutex.d.ts +2 -3
  179. package/dist/application/sync/sheets/mutationCoordinator/asyncMutex.d.ts.map +1 -0
  180. package/dist/application/sync/sheets/mutationCoordinator/asyncMutex.js.map +1 -0
  181. package/dist/application/sync/{gateway/coordinator/coordinatorTelemetry.d.ts → sheets/mutationCoordinator/laneTelemetry.d.ts} +4 -4
  182. package/dist/application/sync/sheets/mutationCoordinator/laneTelemetry.d.ts.map +1 -0
  183. package/dist/application/sync/{gateway/coordinator/coordinatorTelemetry.js → sheets/mutationCoordinator/laneTelemetry.js} +5 -5
  184. package/dist/application/sync/sheets/mutationCoordinator/laneTelemetry.js.map +1 -0
  185. package/dist/application/sync/{gateway/SyncGatewayBootstrap.d.ts → sheets/sheetsProvisioning.d.ts} +14 -14
  186. package/dist/application/sync/sheets/sheetsProvisioning.d.ts.map +1 -0
  187. package/dist/application/sync/sheets/sheetsProvisioning.js +95 -0
  188. package/dist/application/sync/sheets/sheetsProvisioning.js.map +1 -0
  189. package/dist/application/sync/{gateway/syncGateway.d.ts → sheets/syncSheets.d.ts} +61 -117
  190. package/dist/application/sync/sheets/syncSheets.d.ts.map +1 -0
  191. package/dist/application/sync/sheets/syncSheets.js +144 -0
  192. package/dist/application/sync/sheets/syncSheets.js.map +1 -0
  193. package/dist/application/sync/{gateway/transportClassification.d.ts → sheets/transportOutcome.d.ts} +23 -22
  194. package/dist/application/sync/sheets/transportOutcome.d.ts.map +1 -0
  195. package/dist/application/sync/sheets/transportOutcome.js +97 -0
  196. package/dist/application/sync/sheets/transportOutcome.js.map +1 -0
  197. package/dist/application/sync/sheets/validation.d.ts +22 -0
  198. package/dist/application/sync/sheets/validation.d.ts.map +1 -0
  199. package/dist/application/sync/sheets/validation.js +79 -0
  200. package/dist/application/sync/sheets/validation.js.map +1 -0
  201. package/dist/application/sync/telemetry/syncTiming.d.ts +7 -7
  202. package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -1
  203. package/dist/application/sync/telemetry/syncTiming.js +2 -2
  204. package/dist/application/sync/telemetry/syncTiming.js.map +1 -1
  205. package/dist/domain/evaluate/contracts.d.ts +1 -1
  206. package/dist/domain/evaluate/contracts.js +1 -1
  207. package/dist/domain/model/constants.d.ts +1 -1
  208. package/dist/domain/model/constants.d.ts.map +1 -1
  209. package/dist/domain/model/types.d.ts +1 -1
  210. package/dist/domain/model/types.d.ts.map +1 -1
  211. package/dist/index.d.ts +3 -2
  212. package/dist/index.d.ts.map +1 -1
  213. package/dist/index.js +3 -2
  214. package/dist/index.js.map +1 -1
  215. package/dist/infrastructure/storage/index.d.ts +1 -1
  216. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  217. package/dist/infrastructure/storage/index.js +1 -1
  218. package/dist/infrastructure/storage/index.js.map +1 -1
  219. package/dist/infrastructure/storage/state/observation/observationAudit.d.ts +1 -1
  220. package/dist/infrastructure/storage/state/observation/observationAudit.js +1 -1
  221. package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +3 -3
  222. package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -1
  223. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +13 -1
  224. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
  225. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +23 -2
  226. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
  227. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +9 -3
  228. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
  229. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +7 -1
  230. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
  231. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +11 -1
  232. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
  233. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +44 -3
  234. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
  235. package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +4 -4
  236. package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -1
  237. package/dist/infrastructure/storage/sync/shared/syncRegistry.js +4 -4
  238. package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -1
  239. package/dist/shared/encoding/types.d.ts +1 -1
  240. package/docs/architecture.md +52 -23
  241. package/docs/ci.md +31 -23
  242. package/docs/code-guidelines.md +10 -18
  243. package/docs/development.md +37 -11
  244. package/docs/gateway-removal-inventory.md +147 -0
  245. package/docs/quick-start.md +36 -26
  246. package/docs/sync-bulk-write-benchmark.md +561 -0
  247. package/docs/sync-observability.md +38 -45
  248. package/docs/write-and-synchronization-flow.md +56 -39
  249. package/package.json +5 -4
  250. package/apps-script/gateway/Code.gs +0 -447
  251. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +0 -43
  252. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +0 -1
  253. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +0 -52
  254. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +0 -1
  255. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +0 -24
  256. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +0 -1
  257. package/dist/adapter/sheets/providers/apps-script-gateway/index.js +0 -13
  258. package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +0 -1
  259. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +0 -44
  260. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +0 -1
  261. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +0 -181
  262. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +0 -1
  263. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts +0 -3
  264. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +0 -1
  265. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +0 -810
  266. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +0 -1
  267. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +0 -31
  268. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +0 -1
  269. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +0 -560
  270. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +0 -1
  271. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts +0 -12
  272. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +0 -1
  273. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +0 -166
  274. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +0 -1
  275. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts +0 -8
  276. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts.map +0 -1
  277. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js +0 -122
  278. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js.map +0 -1
  279. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts +0 -31
  280. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts.map +0 -1
  281. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js +0 -567
  282. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js.map +0 -1
  283. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +0 -19
  284. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +0 -1
  285. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +0 -37
  286. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +0 -1
  287. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +0 -51
  288. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +0 -1
  289. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js +0 -60
  290. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +0 -1
  291. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts +0 -44
  292. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts.map +0 -1
  293. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js +0 -40
  294. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js.map +0 -1
  295. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +0 -12
  296. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +0 -1
  297. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +0 -41
  298. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +0 -1
  299. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts +0 -5
  300. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts.map +0 -1
  301. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +0 -53
  302. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +0 -1
  303. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +0 -4
  304. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +0 -1
  305. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js +0 -2
  306. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js.map +0 -1
  307. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +0 -11
  308. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +0 -1
  309. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +0 -36
  310. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +0 -1
  311. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +0 -68
  312. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +0 -1
  313. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +0 -273
  314. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +0 -1
  315. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +0 -73
  316. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +0 -1
  317. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +0 -363
  318. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +0 -1
  319. package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts +0 -3
  320. package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts.map +0 -1
  321. package/dist/adapter/sheets/providers/apps-script-gateway/validation.js +0 -10
  322. package/dist/adapter/sheets/providers/apps-script-gateway/validation.js.map +0 -1
  323. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +0 -1
  324. package/dist/application/sync/gateway/SyncGatewayBootstrap.js +0 -95
  325. package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +0 -1
  326. package/dist/application/sync/gateway/conflictProjection.d.ts.map +0 -1
  327. package/dist/application/sync/gateway/conflictProjection.js.map +0 -1
  328. package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts.map +0 -1
  329. package/dist/application/sync/gateway/conflictProjectionRegistration.js.map +0 -1
  330. package/dist/application/sync/gateway/constants.d.ts +0 -66
  331. package/dist/application/sync/gateway/constants.d.ts.map +0 -1
  332. package/dist/application/sync/gateway/constants.js.map +0 -1
  333. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts.map +0 -1
  334. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js.map +0 -1
  335. package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts.map +0 -1
  336. package/dist/application/sync/gateway/coordinator/asyncMutex.js.map +0 -1
  337. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts.map +0 -1
  338. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js.map +0 -1
  339. package/dist/application/sync/gateway/errors.d.ts +0 -15
  340. package/dist/application/sync/gateway/errors.d.ts.map +0 -1
  341. package/dist/application/sync/gateway/errors.js +0 -16
  342. package/dist/application/sync/gateway/errors.js.map +0 -1
  343. package/dist/application/sync/gateway/syncGateway.d.ts.map +0 -1
  344. package/dist/application/sync/gateway/syncGateway.js +0 -191
  345. package/dist/application/sync/gateway/syncGateway.js.map +0 -1
  346. package/dist/application/sync/gateway/transportClassification.d.ts.map +0 -1
  347. package/dist/application/sync/gateway/transportClassification.js +0 -133
  348. package/dist/application/sync/gateway/transportClassification.js.map +0 -1
  349. package/dist/application/sync/gateway/validation.d.ts +0 -22
  350. package/dist/application/sync/gateway/validation.d.ts.map +0 -1
  351. package/dist/application/sync/gateway/validation.js +0 -79
  352. package/dist/application/sync/gateway/validation.js.map +0 -1
  353. /package/dist/application/sync/{gateway → sheets}/conflictProjection.d.ts +0 -0
  354. /package/dist/application/sync/{gateway → sheets}/conflictProjection.js +0 -0
  355. /package/dist/application/sync/{gateway/coordinator → sheets/mutationCoordinator}/asyncMutex.js +0 -0
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Value normalization between Sheets API cells and the canonical contracts.
3
+ *
4
+ * These helpers mirror the Apps Script operations' value semantics exactly:
5
+ * whole-column registered ranges, the Excel 1900-system date serial
6
+ * (days since 1899-12-30 UTC), the canonical UTC number format, NFC-normalized
7
+ * strings, and the identity-from-cell rule used by the append/replay paths.
8
+ */
9
+ import { GOOGLE_SHEETS_API_DATE_NUMBER_FORMAT, } from "../constants.js";
10
+ import { invalidProviderState } from "../errors.js";
11
+ const WHOLE_COLUMN_RANGE_PATTERN = /^[A-Z]+:[A-Z]+$/;
12
+ /** Parses `A:C`-style whole-column ranges like the Apps Script operations. */
13
+ export function parseRegisteredRange(value) {
14
+ if (!WHOLE_COLUMN_RANGE_PATTERN.test(value)) {
15
+ invalidProviderState("registeredRange must be an uppercase whole-column range");
16
+ }
17
+ const separator = value.indexOf(":");
18
+ const start = value.slice(0, separator);
19
+ const end = value.slice(separator + 1);
20
+ const startColumn = columnNumber(start);
21
+ const endColumn = columnNumber(end);
22
+ if (endColumn < startColumn) {
23
+ invalidProviderState("registeredRange end precedes start");
24
+ }
25
+ return { startColumn, columnCount: endColumn - startColumn + 1 };
26
+ }
27
+ /** Converts A1 column letters to a 1-based column number. */
28
+ export function columnNumber(letters) {
29
+ let result = 0;
30
+ for (const letter of letters) {
31
+ result = result * 26 + letter.charCodeAt(0) - 64;
32
+ }
33
+ return result;
34
+ }
35
+ /** Converts a 1-based column number to A1 column letters (1 -> "A", 28 -> "AB"). */
36
+ export function columnLetters(column) {
37
+ let letters = "";
38
+ let value = column;
39
+ while (value > 0) {
40
+ const remainder = (value - 1) % 26;
41
+ letters = String.fromCharCode(65 + remainder) + letters;
42
+ value = Math.floor((value - 1) / 26);
43
+ }
44
+ return letters;
45
+ }
46
+ /** Quotes a sheet tab name for A1 notation, doubling embedded single quotes. */
47
+ export function quoteA1SheetName(sheetName) {
48
+ return `'${sheetName.replace(/'/g, "''")}'`;
49
+ }
50
+ /**
51
+ * Excel/Sheets 1900-system serial: whole days since 1899-12-30 UTC. Canonical
52
+ * dates are always after the 1900-02-29 phantom day, so the serial is exactly
53
+ * the UTC day offset (the same formula the Apps Script batch append uses).
54
+ */
55
+ export function dateSerialFromIso(iso) {
56
+ return (Date.parse(iso) - Date.UTC(1899, 11, 30)) / 86_400_000;
57
+ }
58
+ /** Converts a date serial back to the canonical UTC ISO timestamp. */
59
+ export function isoFromDateSerial(serial) {
60
+ return new Date(Date.UTC(1899, 11, 30) + serial * 86_400_000).toISOString();
61
+ }
62
+ /**
63
+ * Returns whether a cell number format is the canonical date format.
64
+ *
65
+ * The REST API returns `CellFormat.numberFormat` as a `{ type, pattern }`
66
+ * object, never a bare string. The canonical check requires the DATE_TIME
67
+ * type and a pattern that matches after stripping embedded quotes and
68
+ * whitespace, so both the quoted pattern the provider writes and any
69
+ * unquoted equivalent are recognized. Null or absent formats are tolerated
70
+ * and are not dates.
71
+ */
72
+ export function isCanonicalDateNumberFormat(format) {
73
+ if (format === null || format === undefined)
74
+ return false;
75
+ if (typeof format !== "object" || Array.isArray(format))
76
+ return false;
77
+ const record = format;
78
+ if (record.type !== "DATE_TIME")
79
+ return false;
80
+ const pattern = record.pattern;
81
+ if (typeof pattern !== "string")
82
+ return false;
83
+ return normalizeDateNumberFormatPattern(pattern) ===
84
+ normalizeDateNumberFormatPattern(GOOGLE_SHEETS_API_DATE_NUMBER_FORMAT);
85
+ }
86
+ function normalizeDateNumberFormatPattern(pattern) {
87
+ return pattern.replace(/["\s]/g, "");
88
+ }
89
+ /**
90
+ * Converts one API cell value to a canonical normalized cell.
91
+ *
92
+ * A number whose cell format is the canonical date format becomes a date;
93
+ * everything else keeps its raw kind. Formula and error cells fail closed
94
+ * (the outbound provider never writes them and must not hash them as
95
+ * literals). Blank cells (missing or empty value objects) become `null`.
96
+ */
97
+ export function normalizedCellFromApiValue(value, numberFormat) {
98
+ if (value === null || value === undefined)
99
+ return null;
100
+ if (typeof value !== "object") {
101
+ invalidProviderState("Sheet cell value is not an object");
102
+ }
103
+ const record = value;
104
+ if (record.formulaValue !== undefined || record.errorValue !== undefined) {
105
+ invalidProviderState("Sheet cell contains a formula or error value");
106
+ }
107
+ if (record.stringValue !== undefined) {
108
+ if (typeof record.stringValue !== "string") {
109
+ invalidProviderState("Sheet cell stringValue is not a string");
110
+ }
111
+ return { kind: "string", value: record.stringValue.normalize("NFC") };
112
+ }
113
+ if (record.boolValue !== undefined) {
114
+ if (typeof record.boolValue !== "boolean") {
115
+ invalidProviderState("Sheet cell boolValue is not a boolean");
116
+ }
117
+ return { kind: "boolean", value: record.boolValue };
118
+ }
119
+ if (record.numberValue !== undefined) {
120
+ if (typeof record.numberValue !== "number" || !Number.isFinite(record.numberValue)) {
121
+ invalidProviderState("Sheet cell numberValue is not a finite number");
122
+ }
123
+ if (isCanonicalDateNumberFormat(numberFormat)) {
124
+ return { kind: "date", value: isoFromDateSerial(record.numberValue) };
125
+ }
126
+ return { kind: "number", value: record.numberValue };
127
+ }
128
+ // An empty value object (or an unknown value shape) is treated as blank;
129
+ // the API omits empty cells, so a missing value is the common blank form.
130
+ if (Object.keys(record).length === 0)
131
+ return null;
132
+ invalidProviderState("Sheet cell cannot be normalized");
133
+ }
134
+ /**
135
+ * Normalizes a literal API cell for observation reads.
136
+ *
137
+ * Matches the Apps Script observation literal branch: explicit empty strings
138
+ * and empty value objects become `null` (blank). Returns `undefined` for
139
+ * shapes that are not a valid literal (formula/error/unknown) so the caller
140
+ * can emit an `unsupported_cell_value` error cell instead of failing the
141
+ * whole snapshot; type-invalid fields still fail closed.
142
+ */
143
+ export function observationLiteralFromApiValue(value, numberFormat) {
144
+ if (value === null || value === undefined)
145
+ return null;
146
+ if (typeof value !== "object")
147
+ return undefined;
148
+ const record = value;
149
+ if (record.stringValue !== undefined) {
150
+ if (typeof record.stringValue !== "string") {
151
+ invalidProviderState("Sheet cell stringValue is not a string");
152
+ }
153
+ return record.stringValue.length === 0
154
+ ? null
155
+ : { kind: "string", value: record.stringValue.normalize("NFC") };
156
+ }
157
+ if (record.boolValue !== undefined) {
158
+ if (typeof record.boolValue !== "boolean") {
159
+ invalidProviderState("Sheet cell boolValue is not a boolean");
160
+ }
161
+ return { kind: "boolean", value: record.boolValue };
162
+ }
163
+ if (record.numberValue !== undefined) {
164
+ if (typeof record.numberValue !== "number" || !Number.isFinite(record.numberValue)) {
165
+ invalidProviderState("Sheet cell numberValue is not a finite number");
166
+ }
167
+ if (isCanonicalDateNumberFormat(numberFormat)) {
168
+ return { kind: "date", value: isoFromDateSerial(record.numberValue) };
169
+ }
170
+ return { kind: "number", value: record.numberValue };
171
+ }
172
+ if (Object.keys(record).length === 0)
173
+ return null;
174
+ // Formula, error, and unknown value shapes are handled by the caller.
175
+ return undefined;
176
+ }
177
+ /**
178
+ * getValues-equivalent normalization for one REST cell.
179
+ *
180
+ * Formula cells resolve to their computed effective value, error cells to
181
+ * their formatted error string (the Apps Script fast-path limitation: a
182
+ * "#REF!" error cell becomes a literal string), and literal cells to their
183
+ * user-entered value. Blank cells — including explicit empty strings —
184
+ * become `null`; unsupported shapes fail closed exactly like the Apps
185
+ * Script table read throws.
186
+ */
187
+ export function computedValueFromApiCell(value, numberFormat) {
188
+ if (value === null || value === undefined)
189
+ return null;
190
+ if (typeof value !== "object") {
191
+ invalidProviderState("Sheet cell value is not an object");
192
+ }
193
+ const record = value;
194
+ const entered = record.userEnteredValue;
195
+ const enteredRecord = recordLike(entered);
196
+ if (enteredRecord !== undefined && enteredRecord.formulaValue !== undefined) {
197
+ if (typeof enteredRecord.formulaValue !== "string") {
198
+ invalidProviderState("Sheet cell formulaValue is not a string");
199
+ }
200
+ const effective = record.effectiveValue;
201
+ const effectiveRecord = recordLike(effective);
202
+ if (effectiveRecord === undefined) {
203
+ invalidProviderState("Sheet formula cell has no effective value");
204
+ }
205
+ if (effectiveRecord.errorValue !== undefined) {
206
+ return {
207
+ kind: "string",
208
+ value: errorDisplayString(record, effectiveRecord),
209
+ };
210
+ }
211
+ if (effectiveRecord.stringValue !== undefined) {
212
+ if (typeof effectiveRecord.stringValue !== "string") {
213
+ invalidProviderState("Sheet cell effective stringValue is not a string");
214
+ }
215
+ return { kind: "string", value: effectiveRecord.stringValue.normalize("NFC") };
216
+ }
217
+ if (effectiveRecord.boolValue !== undefined) {
218
+ if (typeof effectiveRecord.boolValue !== "boolean") {
219
+ invalidProviderState("Sheet cell effective boolValue is not a boolean");
220
+ }
221
+ return { kind: "boolean", value: effectiveRecord.boolValue };
222
+ }
223
+ if (effectiveRecord.numberValue !== undefined) {
224
+ if (typeof effectiveRecord.numberValue !== "number" ||
225
+ !Number.isFinite(effectiveRecord.numberValue)) {
226
+ invalidProviderState("Sheet cell effective numberValue is not a finite number");
227
+ }
228
+ if (isCanonicalDateNumberFormat(numberFormat)) {
229
+ return { kind: "date", value: isoFromDateSerial(effectiveRecord.numberValue) };
230
+ }
231
+ return { kind: "number", value: effectiveRecord.numberValue };
232
+ }
233
+ invalidProviderState("Sheet formula cell effective value is unsupported");
234
+ }
235
+ if (enteredRecord !== undefined && enteredRecord.errorValue !== undefined) {
236
+ return { kind: "string", value: errorDisplayString(record, enteredRecord) };
237
+ }
238
+ const literal = observationLiteralFromApiValue(entered, numberFormat);
239
+ if (literal === undefined) {
240
+ invalidProviderState("Sheet cell value is unsupported");
241
+ }
242
+ return literal;
243
+ }
244
+ /**
245
+ * Blank-row rule shared by the values-only read and observation paths.
246
+ *
247
+ * A cell is blank when it has no value at all; checkbox columns additionally
248
+ * treat an unchecked (boolValue false) cell as blank, mirroring the Apps
249
+ * Script `isBlankRow_` rule. Formula cells are blank only when their computed
250
+ * value is an empty string (getValues semantics).
251
+ */
252
+ export function isComputedBlankCell(value, checkboxColumn) {
253
+ if (value === null || value === undefined)
254
+ return true;
255
+ if (typeof value !== "object")
256
+ return false;
257
+ const record = value;
258
+ if (Object.keys(record).length === 0)
259
+ return true;
260
+ const entered = record.userEnteredValue;
261
+ const enteredRecord = recordLike(entered);
262
+ if (enteredRecord === undefined) {
263
+ // Formatting-only or effective-only cells carry no user value.
264
+ return true;
265
+ }
266
+ if (enteredRecord.formulaValue !== undefined) {
267
+ const effective = record.effectiveValue;
268
+ const effectiveRecord = recordLike(effective);
269
+ if (effectiveRecord === undefined)
270
+ return false;
271
+ if (effectiveRecord.stringValue !== undefined) {
272
+ if (typeof effectiveRecord.stringValue !== "string") {
273
+ invalidProviderState("Sheet cell effective stringValue is not a string");
274
+ }
275
+ return effectiveRecord.stringValue.length === 0;
276
+ }
277
+ if (effectiveRecord.boolValue !== undefined) {
278
+ if (typeof effectiveRecord.boolValue !== "boolean") {
279
+ invalidProviderState("Sheet cell effective boolValue is not a boolean");
280
+ }
281
+ return checkboxColumn && effectiveRecord.boolValue === false;
282
+ }
283
+ return false;
284
+ }
285
+ if (enteredRecord.errorValue !== undefined)
286
+ return false;
287
+ if (enteredRecord.stringValue !== undefined) {
288
+ if (typeof enteredRecord.stringValue !== "string") {
289
+ invalidProviderState("Sheet cell stringValue is not a string");
290
+ }
291
+ return enteredRecord.stringValue.length === 0;
292
+ }
293
+ if (enteredRecord.numberValue !== undefined) {
294
+ if (typeof enteredRecord.numberValue !== "number" ||
295
+ !Number.isFinite(enteredRecord.numberValue)) {
296
+ invalidProviderState("Sheet cell numberValue is not a finite number");
297
+ }
298
+ return false;
299
+ }
300
+ if (enteredRecord.boolValue !== undefined) {
301
+ if (typeof enteredRecord.boolValue !== "boolean") {
302
+ invalidProviderState("Sheet cell boolValue is not a boolean");
303
+ }
304
+ return checkboxColumn && enteredRecord.boolValue === false;
305
+ }
306
+ return Object.keys(enteredRecord).length === 0;
307
+ }
308
+ /** Returns `value` as a record when it is a plain object. */
309
+ function recordLike(value) {
310
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
311
+ return undefined;
312
+ }
313
+ return value;
314
+ }
315
+ /**
316
+ * Resolves the display string of an error cell: the formatted value when
317
+ * present ("#DIV/0!"), the error message otherwise, failing closed when an
318
+ * error cell carries no display evidence at all.
319
+ */
320
+ function errorDisplayString(cell, errorOwner) {
321
+ const formatted = cell.formattedValue;
322
+ if (typeof formatted === "string" && formatted.length > 0)
323
+ return formatted;
324
+ const error = errorOwner.errorValue;
325
+ const errorRecord = recordLike(error);
326
+ const message = errorRecord?.message;
327
+ if (typeof message === "string" && message.length > 0)
328
+ return message;
329
+ invalidProviderState("Sheet error cell has no display string");
330
+ }
331
+ /**
332
+ * Converts a canonical normalized cell to the API userEnteredValue shape.
333
+ *
334
+ * Dates become their Excel serial number; the canonical number format is
335
+ * applied separately by the batch builder so it can keep the format field
336
+ * mask isolated from the value write.
337
+ */
338
+ export function toApiUserEnteredValue(cell) {
339
+ if (cell === null)
340
+ return { userEnteredValue: {} };
341
+ switch (cell.kind) {
342
+ case "string":
343
+ return { userEnteredValue: { stringValue: cell.value } };
344
+ case "number":
345
+ return { userEnteredValue: { numberValue: cell.value } };
346
+ case "boolean":
347
+ return { userEnteredValue: { boolValue: cell.value } };
348
+ case "date":
349
+ return { userEnteredValue: { numberValue: dateSerialFromIso(cell.value) } };
350
+ }
351
+ }
352
+ /**
353
+ * Derives the visible business identity from a normalized cell, exactly like
354
+ * the Apps Script `identityFromCell_`: non-empty strings and finite numbers.
355
+ */
356
+ export function identityFromNormalizedCell(cell) {
357
+ if (cell === null)
358
+ return null;
359
+ if (typeof cell.value === "string")
360
+ return cell.value.length === 0 ? null : cell.value;
361
+ if (typeof cell.value === "number" && Number.isFinite(cell.value)) {
362
+ return String(cell.value);
363
+ }
364
+ return null;
365
+ }
366
+ /** Returns whether an API cell is blank (missing value or empty object). */
367
+ export function isBlankApiCell(value) {
368
+ if (value === null || value === undefined)
369
+ return true;
370
+ if (typeof value !== "object")
371
+ return false;
372
+ const record = value;
373
+ return Object.keys(record).length === 0 || record.userEnteredValue === undefined;
374
+ }
375
+ //# sourceMappingURL=valueNormalization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueNormalization.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/model/valueNormalization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Narrow transport contract for the direct Google Sheets API provider.
3
+ *
4
+ * All Google SDK types stay behind this module: the rest of the provider
5
+ * works with a small discriminated union of write requests and treats every
6
+ * response as an untrusted `unknown` value that the preflight/reply modules
7
+ * validate with runtime guards. Tests implement the same interface with an
8
+ * in-memory spreadsheet model, so the planner and batch builder are exercised
9
+ * without credentials or network access.
10
+ */
11
+ import { sheets, type sheets_v4 } from "@googleapis/sheets";
12
+ import { GoogleSheetsApiTransportError } from "../errors.js";
13
+ /** REST `CellFormat.numberFormat` object written by the provider. */
14
+ export interface GoogleSheetsApiNumberFormat {
15
+ readonly type: "DATE_TIME";
16
+ readonly pattern: string;
17
+ }
18
+ /** One cell value/format pair written through an updateCells request. */
19
+ export interface GoogleSheetsApiCell {
20
+ readonly userEnteredValue?: {
21
+ readonly stringValue?: string;
22
+ readonly numberValue?: number;
23
+ readonly boolValue?: boolean;
24
+ };
25
+ readonly userEnteredFormat?: {
26
+ readonly numberFormat?: GoogleSheetsApiNumberFormat;
27
+ };
28
+ }
29
+ /**
30
+ * Row of an updateCells request; index `j` addresses the column
31
+ * `startColumnIndex + j`. A `null` entry is never produced by the provider
32
+ * (an included cell is always written), but the type keeps the boundary
33
+ * explicit for test fixtures.
34
+ */
35
+ export type GoogleSheetsApiCellRow = readonly (GoogleSheetsApiCell | null)[];
36
+ /** Write requests the direct provider emits; the SDK mapping is contained here. */
37
+ export type GoogleSheetsApiWriteRequest = {
38
+ readonly kind: "addSheet";
39
+ readonly title: string;
40
+ readonly sheetId: number;
41
+ } | {
42
+ readonly kind: "updateSheetProperties";
43
+ readonly sheetId: number;
44
+ readonly hidden: boolean;
45
+ } | {
46
+ readonly kind: "updateCells";
47
+ readonly sheetId: number;
48
+ readonly startRowIndex: number;
49
+ readonly startColumnIndex: number;
50
+ readonly rows: readonly GoogleSheetsApiCellRow[];
51
+ /** Field mask such as "userEnteredValue" or "userEnteredFormat.numberFormat". */
52
+ readonly fields: string;
53
+ } | {
54
+ readonly kind: "insertDimension";
55
+ readonly sheetId: number;
56
+ readonly dimension: "ROWS";
57
+ readonly startIndex: number;
58
+ /** Exclusive end index; `endIndex - startIndex` rows are inserted. */
59
+ readonly endIndex: number;
60
+ readonly inheritFromBefore: boolean;
61
+ } | {
62
+ readonly kind: "deleteDimension";
63
+ readonly sheetId: number;
64
+ readonly dimension: "ROWS";
65
+ readonly startIndex: number;
66
+ /** Exclusive end index; exactly one row is deleted by the provider. */
67
+ readonly endIndex: number;
68
+ } | {
69
+ readonly kind: "setDataValidation";
70
+ readonly sheetId: number;
71
+ readonly startRowIndex: number;
72
+ readonly endRowIndex: number;
73
+ readonly startColumnIndex: number;
74
+ readonly endColumnIndex: number;
75
+ readonly strict: boolean;
76
+ } | {
77
+ readonly kind: "createDeveloperMetadata";
78
+ readonly sheetId: number;
79
+ /** 0-based row index for the metadata location. */
80
+ readonly rowIndex: number;
81
+ readonly key: string;
82
+ readonly value: string;
83
+ } | {
84
+ /**
85
+ * Harness/cleanup-only request kind: the provider itself never emits
86
+ * deleteSheet. Live scenario cleanup uses it to remove fixture tabs;
87
+ * keeping the SDK mapping and the stub behavior inside the transport
88
+ * boundary lets that cleanup reuse the provider's narrow contract.
89
+ */
90
+ readonly kind: "deleteSheet";
91
+ readonly sheetId: number;
92
+ };
93
+ /** Request shape of one `spreadsheets.get` call. */
94
+ export interface GoogleSheetsApiGetSpreadsheetRequest {
95
+ readonly spreadsheetId: string;
96
+ readonly ranges: readonly string[];
97
+ readonly fields: string;
98
+ /**
99
+ * Per-call timeout override. The provider gives READS a shorter internal
100
+ * timeout than writes; omitted falls back to the transport's configured
101
+ * timeout.
102
+ */
103
+ readonly timeoutMs?: number;
104
+ }
105
+ /** Request shape of one `spreadsheets.batchUpdate` call. */
106
+ export interface GoogleSheetsApiBatchUpdateRequest {
107
+ readonly spreadsheetId: string;
108
+ readonly requests: readonly GoogleSheetsApiWriteRequest[];
109
+ }
110
+ /**
111
+ * Internal transport boundary; every method returns the raw (untrusted)
112
+ * response body. The provider never forwards SDK objects beyond this module.
113
+ */
114
+ export interface GoogleSheetsApiTransport {
115
+ getSpreadsheet(request: GoogleSheetsApiGetSpreadsheetRequest): Promise<unknown>;
116
+ batchUpdate(request: GoogleSheetsApiBatchUpdateRequest): Promise<unknown>;
117
+ }
118
+ /** Auth type accepted by the sheets factory (may resolve to a nested version). */
119
+ type SheetsAuth = NonNullable<Parameters<typeof sheets>[0]["auth"]>;
120
+ /** Options for the real HTTP transport backed by @googleapis/sheets. */
121
+ export interface GoogleSheetsApiHttpTransportOptions {
122
+ /**
123
+ * Injected auth for tests/alternate credentials. Defaults to Application
124
+ * Default Credentials (`GOOGLE_APPLICATION_CREDENTIALS` service account).
125
+ */
126
+ readonly auth?: SheetsAuth;
127
+ readonly requestTimeoutMs: number;
128
+ }
129
+ /**
130
+ * Real transport over the Google Sheets REST API.
131
+ *
132
+ * gaxios auto-retry is disabled for every call: retries are the durable
133
+ * worker/recovery path's job, and a retried mutating request could replay an
134
+ * already committed batch. All errors are mapped to
135
+ * `GoogleSheetsApiTransportError` before leaving this module.
136
+ */
137
+ export declare class GoogleSheetsApiHttpTransport implements GoogleSheetsApiTransport {
138
+ private readonly client;
139
+ private readonly requestTimeoutMs;
140
+ constructor(options: GoogleSheetsApiHttpTransportOptions);
141
+ getSpreadsheet(request: GoogleSheetsApiGetSpreadsheetRequest): Promise<unknown>;
142
+ batchUpdate(request: GoogleSheetsApiBatchUpdateRequest): Promise<unknown>;
143
+ }
144
+ /**
145
+ * Maps a thrown SDK/gaxios/network error to the provider transport error.
146
+ *
147
+ * Exported separately so tests can exercise the mapping with shaped fixtures
148
+ * instead of real network failures. Any error without a proven HTTP status is
149
+ * classified conservatively as delivery-uncertain material (network/timeout),
150
+ * never as a proven pre-mutation rejection.
151
+ */
152
+ export declare function classifyGoogleSheetsApiError(error: unknown): GoogleSheetsApiTransportError;
153
+ /**
154
+ * Builds the SDK batchUpdate body from provider write requests. The SDK
155
+ * request union is wider than the provider's narrow shapes; this boundary
156
+ * cast is the only place both types meet.
157
+ */
158
+ export declare function toSdkBatchUpdateBody(requests: readonly GoogleSheetsApiWriteRequest[]): {
159
+ readonly requests: sheets_v4.Schema$Request[];
160
+ };
161
+ /**
162
+ * Serializes the batchUpdate body exactly as the transport sends it, so the
163
+ * batch builder's byte budget measures the real wire bytes (SDK-wrapped
164
+ * request shapes, not the internal request union).
165
+ */
166
+ export declare function serializeBatchUpdateRequests(requests: readonly GoogleSheetsApiWriteRequest[]): string;
167
+ export {};
168
+ //# sourceMappingURL=googleSheetsApiTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"googleSheetsApiTransport.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.ts"],"names":[],"mappings":"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"}