hikoutei 0.3.1 → 0.3.3

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 (233) hide show
  1. package/README.md +12 -2
  2. package/apps-script/gateway/Code.gs +41 -6
  3. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +2 -0
  4. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -1
  5. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +5 -0
  6. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -1
  7. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +52 -0
  8. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -1
  9. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +195 -13
  10. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -1
  11. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts +24 -0
  12. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts.map +1 -0
  13. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js +124 -0
  14. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js.map +1 -0
  15. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +1 -1
  16. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -1
  17. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +15 -2
  18. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts.map +1 -1
  19. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +27 -3
  20. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -1
  21. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +1 -0
  22. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -1
  23. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +1 -0
  24. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -1
  25. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +2 -0
  26. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -1
  27. package/dist/adapter/sheets/providers/apps-script-gateway/index.js +1 -0
  28. package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -1
  29. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +3 -1
  30. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -1
  31. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +9 -0
  32. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -1
  33. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -1
  34. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +139 -43
  35. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -1
  36. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -1
  37. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +86 -57
  38. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -1
  39. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts +8 -0
  40. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts.map +1 -0
  41. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js +122 -0
  42. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js.map +1 -0
  43. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts +31 -0
  44. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts.map +1 -0
  45. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js +567 -0
  46. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js.map +1 -0
  47. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +12 -17
  48. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -1
  49. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +27 -213
  50. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -1
  51. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -1
  52. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +15 -36
  53. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -1
  54. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +2 -3
  55. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +1 -1
  56. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -1
  57. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +81 -8
  58. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -1
  59. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +1 -6
  60. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -1
  61. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +15 -9
  62. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -1
  63. package/dist/application/orm/mapping/projection.js +1 -1
  64. package/dist/application/orm/mapping/projection.js.map +1 -1
  65. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
  66. package/dist/application/orm/persistence/flush/flushCoordinator.js +1 -0
  67. package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
  68. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +1 -1
  69. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -1
  70. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +3 -1
  71. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -1
  72. package/dist/application/sync/gateway/SyncGatewayBootstrap.js +3 -1
  73. package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -1
  74. package/dist/application/sync/gateway/conflictProjection.d.ts +13 -0
  75. package/dist/application/sync/gateway/conflictProjection.d.ts.map +1 -0
  76. package/dist/application/sync/gateway/conflictProjection.js +58 -0
  77. package/dist/application/sync/gateway/conflictProjection.js.map +1 -0
  78. package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts +11 -0
  79. package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts.map +1 -0
  80. package/dist/application/sync/gateway/conflictProjectionRegistration.js +70 -0
  81. package/dist/application/sync/gateway/conflictProjectionRegistration.js.map +1 -0
  82. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts +102 -0
  83. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts.map +1 -0
  84. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js +221 -0
  85. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js.map +1 -0
  86. package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts +51 -0
  87. package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts.map +1 -0
  88. package/dist/application/sync/gateway/coordinator/asyncMutex.js +65 -0
  89. package/dist/application/sync/gateway/coordinator/asyncMutex.js.map +1 -0
  90. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts +31 -0
  91. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts.map +1 -0
  92. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js +13 -0
  93. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js.map +1 -0
  94. package/dist/application/sync/gateway/syncGateway.d.ts +26 -6
  95. package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -1
  96. package/dist/application/sync/gateway/syncGateway.js +10 -2
  97. package/dist/application/sync/gateway/syncGateway.js.map +1 -1
  98. package/dist/application/sync/gateway/transportClassification.d.ts +62 -0
  99. package/dist/application/sync/gateway/transportClassification.d.ts.map +1 -0
  100. package/dist/application/sync/gateway/transportClassification.js +133 -0
  101. package/dist/application/sync/gateway/transportClassification.js.map +1 -0
  102. package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts +26 -0
  103. package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts.map +1 -0
  104. package/dist/application/sync/inbound/autoSystemConflictResolution.js +335 -0
  105. package/dist/application/sync/inbound/autoSystemConflictResolution.js.map +1 -0
  106. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts +50 -0
  107. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts.map +1 -0
  108. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js +97 -0
  109. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js.map +1 -0
  110. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +4 -1
  111. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
  112. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +35 -1
  113. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
  114. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +14 -2
  115. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
  116. package/dist/application/sync/outbound/effects/SyncEffectWorker.js +190 -31
  117. package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
  118. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +25 -2
  119. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
  120. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +25 -2
  121. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
  122. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +14 -7
  123. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
  124. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +118 -14
  125. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
  126. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -9
  127. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
  128. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +102 -18
  129. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
  130. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
  131. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +49 -14
  132. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
  133. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  134. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +97 -17
  135. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  136. package/dist/application/sync/service/SyncServiceBootstrap.d.ts +17 -0
  137. package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
  138. package/dist/application/sync/service/SyncServiceBootstrap.js +125 -10
  139. package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
  140. package/dist/application/sync/service/contracts.d.ts +2 -0
  141. package/dist/application/sync/service/contracts.d.ts.map +1 -1
  142. package/dist/application/sync/telemetry/syncTiming.d.ts +6 -0
  143. package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -1
  144. package/dist/application/sync/telemetry/syncTiming.js +2 -0
  145. package/dist/application/sync/telemetry/syncTiming.js.map +1 -1
  146. package/dist/domain/conflict/index.d.ts +1 -1
  147. package/dist/domain/conflict/index.d.ts.map +1 -1
  148. package/dist/domain/conflict/index.js +1 -1
  149. package/dist/domain/conflict/index.js.map +1 -1
  150. package/dist/domain/conflict/transitions.d.ts +3 -0
  151. package/dist/domain/conflict/transitions.d.ts.map +1 -1
  152. package/dist/domain/conflict/transitions.js +3 -2
  153. package/dist/domain/conflict/transitions.js.map +1 -1
  154. package/dist/domain/model/constants.d.ts +1 -0
  155. package/dist/domain/model/constants.d.ts.map +1 -1
  156. package/dist/domain/model/constants.js +1 -0
  157. package/dist/domain/model/constants.js.map +1 -1
  158. package/dist/infrastructure/storage/index.d.ts +4 -2
  159. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  160. package/dist/infrastructure/storage/index.js +2 -1
  161. package/dist/infrastructure/storage/index.js.map +1 -1
  162. package/dist/infrastructure/storage/sqlite/migrateSchema.d.ts.map +1 -1
  163. package/dist/infrastructure/storage/sqlite/migrateSchema.js +59 -1
  164. package/dist/infrastructure/storage/sqlite/migrateSchema.js.map +1 -1
  165. package/dist/infrastructure/storage/sqlite/schema.d.ts +12 -1
  166. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -1
  167. package/dist/infrastructure/storage/sqlite/schema.js +47 -3
  168. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -1
  169. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +2 -2
  170. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -1
  171. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +1 -1
  172. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -1
  173. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts +1 -0
  174. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts.map +1 -1
  175. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js +1 -1
  176. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js.map +1 -1
  177. package/dist/infrastructure/storage/state/observation/observationAudit.js +5 -1
  178. package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -1
  179. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +10 -0
  180. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -1
  181. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +106 -20
  182. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -1
  183. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +9 -1
  184. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -1
  185. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +3 -0
  186. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -1
  187. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +11 -0
  188. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -1
  189. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +35 -0
  190. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -1
  191. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +12 -4
  192. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
  193. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +46 -15
  194. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
  195. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +24 -0
  196. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
  197. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +1 -0
  198. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
  199. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +9 -7
  200. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
  201. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +44 -8
  202. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
  203. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +3 -1
  204. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -1
  205. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +35 -2
  206. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -1
  207. package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js +1 -0
  208. package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js.map +1 -1
  209. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts +31 -0
  210. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts.map +1 -0
  211. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js +92 -0
  212. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js.map +1 -0
  213. package/dist/infrastructure/storage/sync/shared/writerLease.js +3 -1
  214. package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -1
  215. package/dist/shared/encoding/constants.d.ts +1 -12
  216. package/dist/shared/encoding/constants.d.ts.map +1 -1
  217. package/dist/shared/encoding/constants.js +1 -10
  218. package/dist/shared/encoding/constants.js.map +1 -1
  219. package/dist/shared/encoding/stableEncode.d.ts +3 -30
  220. package/dist/shared/encoding/stableEncode.d.ts.map +1 -1
  221. package/dist/shared/encoding/stableEncode.js +12 -195
  222. package/dist/shared/encoding/stableEncode.js.map +1 -1
  223. package/dist/shared/encoding/types.d.ts +4 -9
  224. package/dist/shared/encoding/types.d.ts.map +1 -1
  225. package/docs/advanced-sheets-gateway-concurrency-problem.md +434 -0
  226. package/docs/architecture.md +53 -11
  227. package/docs/ci.md +27 -0
  228. package/docs/google-sheets-sync-scaling-strategy.md +459 -0
  229. package/docs/quick-start.md +15 -1
  230. package/docs/sync-bulk-write-benchmark.md +520 -0
  231. package/docs/sync-observability.md +39 -3
  232. package/docs/write-and-synchronization-flow.md +76 -17
  233. package/package.json +4 -1
@@ -0,0 +1,122 @@
1
+ /** Self-contained Apps Script source for the stable_encode_v1 runtime adapter. */
2
+ /**
3
+ * This fragment is interpolated into dynamic operation functions. It uses only
4
+ * Apps Script globals and intentionally keeps every helper name prefixed so it
5
+ * cannot collide with operation-specific helpers or an older Code.gs global.
6
+ */
7
+ export const APPS_SCRIPT_STABLE_CODEC_SOURCE = String.raw `
8
+ function codecStableHash_(value) {
9
+ return codecSha256Hex_(codecStableEncode_(value, []));
10
+ }
11
+ function codecStableEncode_(value, ancestors) {
12
+ if (ancestors === undefined) ancestors = [];
13
+ if (value === null) return "n";
14
+ if (value === true) return "b1";
15
+ if (value === false) return "b0";
16
+ if (typeof value === "number") return codecStableEncodeNumber_(value);
17
+ if (typeof value === "string") return codecStableEncodeString_(value);
18
+ if (codecIsDateValue_(value)) return codecEncodeDate_(value.value);
19
+ if (Array.isArray(value)) {
20
+ if (!codecIsDenseArray_(value)) throw new Error("stable array must be dense");
21
+ codecEnterContainer_(value, ancestors);
22
+ try {
23
+ return "a" + value.length + "[" + value.map(function (item) {
24
+ return codecStableEncode_(item, ancestors);
25
+ }).join("") + "]";
26
+ } finally {
27
+ codecLeaveContainer_(value, ancestors);
28
+ }
29
+ }
30
+ if (codecIsPlainRecord_(value)) {
31
+ codecEnterContainer_(value, ancestors);
32
+ try {
33
+ var entries = Object.keys(value).map(function (key) {
34
+ var normalized = codecNormalizeScalarString_(key);
35
+ return { key: normalized, bytes: codecUtf8Bytes_(normalized), value: value[key] };
36
+ });
37
+ var normalizedKeys = Object.create(null);
38
+ entries.forEach(function (entry) {
39
+ if (normalizedKeys[entry.key]) throw new Error("stable object has duplicate NFC key");
40
+ normalizedKeys[entry.key] = true;
41
+ });
42
+ entries.sort(function (left, right) { return codecCompareBytes_(left.bytes, right.bytes); });
43
+ return "o" + entries.length + "{" + entries.map(function (entry) {
44
+ return "s" + entry.bytes.length + ":" + entry.key + codecStableEncode_(entry.value, ancestors);
45
+ }).join("") + "}";
46
+ } finally {
47
+ codecLeaveContainer_(value, ancestors);
48
+ }
49
+ }
50
+ throw new Error("stable value is unsupported");
51
+ }
52
+ function codecStableEncodeNumber_(value) {
53
+ if (!isFinite(value)) throw new Error("stable number is not finite");
54
+ var decimal = value === 0 ? "0" : String(value).replace(/e\+/, "e").replace(/e(-?)0+(\d+)/, "e$1$2");
55
+ return "f" + codecUtf8ByteLength_(decimal) + ":" + decimal;
56
+ }
57
+ function codecStableEncodeString_(value) {
58
+ var normalized = codecNormalizeScalarString_(value);
59
+ return "s" + codecUtf8ByteLength_(normalized) + ":" + normalized;
60
+ }
61
+ function codecEncodeDate_(value) {
62
+ if (!codecIsCanonicalDate_(value)) throw new Error("stable date is invalid");
63
+ return "d24:" + value;
64
+ }
65
+ function codecIsDateValue_(value) {
66
+ return codecIsPlainRecord_(value) && Object.keys(value).length === 2 &&
67
+ Object.prototype.hasOwnProperty.call(value, "kind") &&
68
+ Object.prototype.hasOwnProperty.call(value, "value") &&
69
+ value.kind === "date" && typeof value.value === "string";
70
+ }
71
+ function codecIsCanonicalDate_(value) {
72
+ if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value)) return false;
73
+ var parsed = new Date(value);
74
+ return !isNaN(parsed.getTime()) && parsed.toISOString() === value;
75
+ }
76
+ function codecIsPlainRecord_(value) {
77
+ if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
78
+ var prototype = Object.getPrototypeOf(value);
79
+ return prototype === Object.prototype || prototype === null;
80
+ }
81
+ function codecIsDenseArray_(value) {
82
+ for (var index = 0; index < value.length; index += 1) {
83
+ if (!Object.prototype.hasOwnProperty.call(value, index)) return false;
84
+ }
85
+ return true;
86
+ }
87
+ function codecEnterContainer_(value, ancestors) {
88
+ if (ancestors.indexOf(value) >= 0) throw new Error("stable value cannot contain cycles");
89
+ ancestors.push(value);
90
+ }
91
+ function codecLeaveContainer_(value, ancestors) { ancestors.pop(); }
92
+ function codecNormalizeScalarString_(value) {
93
+ for (var index = 0; index < value.length; index += 1) {
94
+ var codeUnit = value.charCodeAt(index);
95
+ if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {
96
+ var next = value.charCodeAt(index + 1);
97
+ if (!Number.isInteger(next) || next < 0xdc00 || next > 0xdfff) throw new Error("stable string has an unpaired high surrogate");
98
+ index += 1;
99
+ } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {
100
+ throw new Error("stable string has an unpaired low surrogate");
101
+ }
102
+ }
103
+ return value.normalize("NFC");
104
+ }
105
+ function codecSha256Hex_(value) {
106
+ return Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value, Utilities.Charset.UTF_8)
107
+ .map(function (byte) { var unsigned = byte < 0 ? byte + 256 : byte; return ("0" + unsigned.toString(16)).slice(-2); })
108
+ .join("");
109
+ }
110
+ function codecUtf8Bytes_(value) { return Utilities.newBlob(value).getBytes(); }
111
+ function codecUtf8ByteLength_(value) { return codecUtf8Bytes_(value).length; }
112
+ function codecCompareBytes_(left, right) {
113
+ var count = Math.min(left.length, right.length);
114
+ for (var index = 0; index < count; index += 1) {
115
+ var a = left[index] < 0 ? left[index] + 256 : left[index];
116
+ var b = right[index] < 0 ? right[index] + 256 : right[index];
117
+ if (a !== b) return a - b;
118
+ }
119
+ return left.length - right.length;
120
+ }
121
+ `;
122
+ //# sourceMappingURL=appsScriptStableCodecSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appsScriptStableCodecSource.js","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF;;;;GAIG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHxD,CAAC"}
@@ -0,0 +1,31 @@
1
+ /** Idempotent append operation executed through the Apps Script eval gateway. */
2
+ import type { FastAppendRow, FastAppendRowsResult, SyncGatewayAuthority } from "../../../../../../application/sync/gateway/syncGateway.js";
3
+ import type { AppsScriptOperationDefinition } from "../../transport/operationClient.js";
4
+ export interface AppsScriptBatchAppendOperationArgs {
5
+ readonly authority?: SyncGatewayAuthority;
6
+ readonly sheetName: string;
7
+ readonly registeredRange: string;
8
+ readonly headers: readonly string[];
9
+ readonly identityField: string;
10
+ readonly rows: readonly FastAppendRow[];
11
+ }
12
+ export type AppsScriptBatchAppendOperation = AppsScriptOperationDefinition<AppsScriptBatchAppendOperationArgs, FastAppendRowsResult>;
13
+ /**
14
+ * Builds an idempotent append operation backed by built-in Apps Script
15
+ * services only (SpreadsheetApp, LockService, PropertiesService, Utilities);
16
+ * no Advanced Sheets dependency is required. The data rows and their Gateway
17
+ * receipts are written under one script lock, but the target write and the
18
+ * receipt write are separate flush() calls, so a crash between them can leave
19
+ * a target row without a receipt; this is not a cross-request atomic batch.
20
+ * A lost HTTP response is recovered by replaying the same effect ID: the
21
+ * replay verifies the target row postcondition and returns applied without
22
+ * adding another row, while a reused effect ID with a different payload hash
23
+ * fails closed.
24
+ *
25
+ * The registered identityField is required because this path never
26
+ * materializes anchor metadata: replay and postcondition verification locate
27
+ * the target row through the identity column and fail closed when the
28
+ * identity is missing or ambiguous instead of guessing at a position.
29
+ */
30
+ export declare function createBatchAppendRowsOperation(request: AppsScriptBatchAppendOperationArgs): AppsScriptBatchAppendOperation;
31
+ //# sourceMappingURL=batchAppendOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchAppendOperation.d.ts","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,2DAA2D,CAAC;AAEnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAMxF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;CACzC;AAED,MAAM,MAAM,8BAA8B,GAAG,6BAA6B,CACxE,kCAAkC,EAClC,oBAAoB,CACrB,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,kCAAkC,GAC1C,8BAA8B,CAOhC"}