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.
- package/README.ja.md +44 -21
- package/README.ko.md +43 -23
- package/README.md +49 -33
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +3 -3
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js +3 -3
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +3 -3
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +15 -15
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js +3 -3
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts +5 -5
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +5 -5
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +5 -5
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js +3 -3
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts +156 -0
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js +1112 -0
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts +87 -0
- package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/constants.js +97 -0
- package/dist/adapter/sheets/providers/google-sheets-api/constants.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts +53 -0
- package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/errors.js +61 -0
- package/dist/adapter/sheets/providers/google-sheets-api/errors.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts +16 -0
- package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/index.js +13 -0
- package/dist/adapter/sheets/providers/google-sheets-api/index.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.d.ts +83 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.js +413 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/batchBuilder.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.d.ts +86 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.js +439 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/observation.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.d.ts +115 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.js +522 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/planner.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.d.ts +17 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.js +99 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/postcondition.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.d.ts +242 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.js +707 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflight.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.d.ts +16 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.js +29 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/sheetIdAllocator.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.d.ts +26 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.js +57 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/tableRead.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts +102 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js +375 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts +168 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +247 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts +47 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js +60 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js.map +1 -0
- package/dist/api/Hikoutei.d.ts +1 -1
- package/dist/api/Hikoutei.js +1 -1
- package/dist/api/index.d.ts +2 -2
- package/dist/api/index.js +2 -2
- package/dist/application/orm/mapping/contracts.d.ts +2 -2
- package/dist/application/orm/mapping/contracts.d.ts.map +1 -1
- package/dist/application/orm/mapping/definition.js +5 -5
- package/dist/application/orm/mapping/definition.js.map +1 -1
- package/dist/application/orm/mapping/projection.js +7 -7
- package/dist/application/orm/mapping/projection.js.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +3 -3
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.js +2 -2
- package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts +1 -1
- package/dist/application/orm/persistence/projection/projectionEffects.js +6 -6
- package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -1
- package/dist/application/orm/persistence/support/contracts.d.ts +2 -2
- package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -1
- package/dist/application/sync/inbound/autoSystemConflictResolution.js +7 -7
- package/dist/application/sync/inbound/autoSystemConflictResolution.js.map +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts +3 -3
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -1
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts +17 -1
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js +27 -1
- package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +2 -2
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +26 -6
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +24 -9
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js +128 -81
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +31 -14
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +32 -15
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +13 -9
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +53 -37
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +29 -19
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +59 -41
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts +4 -4
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js +3 -3
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +3 -3
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +42 -46
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts +8 -8
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +15 -15
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts +3 -3
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +10 -10
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
- package/dist/application/sync/service/SyncPollingSupervisor.d.ts +1 -1
- package/dist/application/sync/service/SyncPollingSupervisor.js +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts +29 -19
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.js +103 -78
- package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
- package/dist/application/sync/service/errors.d.ts +1 -1
- package/dist/application/sync/service/errors.js +1 -1
- package/dist/application/sync/service/errors.js.map +1 -1
- package/dist/application/sync/sheets/conflictProjection.d.ts.map +1 -0
- package/dist/application/sync/sheets/conflictProjection.js.map +1 -0
- package/dist/application/sync/{gateway → sheets}/conflictProjectionRegistration.d.ts +1 -1
- package/dist/application/sync/sheets/conflictProjectionRegistration.d.ts.map +1 -0
- package/dist/application/sync/{gateway → sheets}/conflictProjectionRegistration.js +3 -3
- package/dist/application/sync/sheets/conflictProjectionRegistration.js.map +1 -0
- package/dist/application/sync/sheets/constants.d.ts +66 -0
- package/dist/application/sync/sheets/constants.d.ts.map +1 -0
- package/dist/application/sync/{gateway → sheets}/constants.js +15 -15
- package/dist/application/sync/sheets/constants.js.map +1 -0
- package/dist/application/sync/sheets/errors.d.ts +15 -0
- package/dist/application/sync/sheets/errors.d.ts.map +1 -0
- package/dist/application/sync/sheets/errors.js +16 -0
- package/dist/application/sync/sheets/errors.js.map +1 -0
- package/dist/application/sync/{gateway/coordinator/CoordinatedSyncGateway.d.ts → sheets/mutationCoordinator/CoordinatedSheetsProvider.d.ts} +29 -28
- package/dist/application/sync/sheets/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +1 -0
- package/dist/application/sync/{gateway/coordinator/CoordinatedSyncGateway.js → sheets/mutationCoordinator/CoordinatedSheetsProvider.js} +27 -26
- package/dist/application/sync/sheets/mutationCoordinator/CoordinatedSheetsProvider.js.map +1 -0
- package/dist/application/sync/{gateway/coordinator → sheets/mutationCoordinator}/asyncMutex.d.ts +2 -3
- package/dist/application/sync/sheets/mutationCoordinator/asyncMutex.d.ts.map +1 -0
- package/dist/application/sync/sheets/mutationCoordinator/asyncMutex.js.map +1 -0
- package/dist/application/sync/{gateway/coordinator/coordinatorTelemetry.d.ts → sheets/mutationCoordinator/laneTelemetry.d.ts} +4 -4
- package/dist/application/sync/sheets/mutationCoordinator/laneTelemetry.d.ts.map +1 -0
- package/dist/application/sync/{gateway/coordinator/coordinatorTelemetry.js → sheets/mutationCoordinator/laneTelemetry.js} +5 -5
- package/dist/application/sync/sheets/mutationCoordinator/laneTelemetry.js.map +1 -0
- package/dist/application/sync/{gateway/SyncGatewayBootstrap.d.ts → sheets/sheetsProvisioning.d.ts} +14 -14
- package/dist/application/sync/sheets/sheetsProvisioning.d.ts.map +1 -0
- package/dist/application/sync/sheets/sheetsProvisioning.js +95 -0
- package/dist/application/sync/sheets/sheetsProvisioning.js.map +1 -0
- package/dist/application/sync/{gateway/syncGateway.d.ts → sheets/syncSheets.d.ts} +61 -117
- package/dist/application/sync/sheets/syncSheets.d.ts.map +1 -0
- package/dist/application/sync/sheets/syncSheets.js +144 -0
- package/dist/application/sync/sheets/syncSheets.js.map +1 -0
- package/dist/application/sync/{gateway/transportClassification.d.ts → sheets/transportOutcome.d.ts} +23 -22
- package/dist/application/sync/sheets/transportOutcome.d.ts.map +1 -0
- package/dist/application/sync/sheets/transportOutcome.js +97 -0
- package/dist/application/sync/sheets/transportOutcome.js.map +1 -0
- package/dist/application/sync/sheets/validation.d.ts +22 -0
- package/dist/application/sync/sheets/validation.d.ts.map +1 -0
- package/dist/application/sync/sheets/validation.js +79 -0
- package/dist/application/sync/sheets/validation.js.map +1 -0
- package/dist/application/sync/telemetry/syncTiming.d.ts +7 -7
- package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -1
- package/dist/application/sync/telemetry/syncTiming.js +2 -2
- package/dist/application/sync/telemetry/syncTiming.js.map +1 -1
- package/dist/domain/evaluate/contracts.d.ts +1 -1
- package/dist/domain/evaluate/contracts.js +1 -1
- package/dist/domain/model/constants.d.ts +1 -1
- package/dist/domain/model/constants.d.ts.map +1 -1
- package/dist/domain/model/types.d.ts +1 -1
- package/dist/domain/model/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/storage/index.d.ts +1 -1
- package/dist/infrastructure/storage/index.d.ts.map +1 -1
- package/dist/infrastructure/storage/index.js +1 -1
- package/dist/infrastructure/storage/index.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.js +1 -1
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +3 -3
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +13 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +23 -2
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +9 -3
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +7 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +11 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +44 -3
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +4 -4
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js +4 -4
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -1
- package/dist/shared/encoding/types.d.ts +1 -1
- package/docs/architecture.md +52 -23
- package/docs/ci.md +31 -23
- package/docs/code-guidelines.md +10 -18
- package/docs/development.md +37 -11
- package/docs/gateway-removal-inventory.md +147 -0
- package/docs/quick-start.md +36 -26
- package/docs/sync-bulk-write-benchmark.md +561 -0
- package/docs/sync-observability.md +38 -45
- package/docs/write-and-synchronization-flow.md +56 -39
- package/package.json +5 -4
- package/apps-script/gateway/Code.gs +0 -447
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +0 -43
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +0 -52
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +0 -24
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js +0 -13
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +0 -44
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +0 -181
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts +0 -3
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +0 -810
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +0 -31
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +0 -560
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts +0 -12
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +0 -166
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts +0 -8
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js +0 -122
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts +0 -31
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js +0 -567
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +0 -19
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +0 -37
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +0 -51
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js +0 -60
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts +0 -44
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js +0 -40
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +0 -12
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +0 -41
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts +0 -5
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +0 -53
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +0 -4
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js +0 -2
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +0 -11
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +0 -36
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +0 -68
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +0 -273
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +0 -73
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +0 -363
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts +0 -3
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts.map +0 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.js +0 -10
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.js.map +0 -1
- package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +0 -1
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js +0 -95
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +0 -1
- package/dist/application/sync/gateway/conflictProjection.d.ts.map +0 -1
- package/dist/application/sync/gateway/conflictProjection.js.map +0 -1
- package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts.map +0 -1
- package/dist/application/sync/gateway/conflictProjectionRegistration.js.map +0 -1
- package/dist/application/sync/gateway/constants.d.ts +0 -66
- package/dist/application/sync/gateway/constants.d.ts.map +0 -1
- package/dist/application/sync/gateway/constants.js.map +0 -1
- package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts.map +0 -1
- package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js.map +0 -1
- package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts.map +0 -1
- package/dist/application/sync/gateway/coordinator/asyncMutex.js.map +0 -1
- package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts.map +0 -1
- package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js.map +0 -1
- package/dist/application/sync/gateway/errors.d.ts +0 -15
- package/dist/application/sync/gateway/errors.d.ts.map +0 -1
- package/dist/application/sync/gateway/errors.js +0 -16
- package/dist/application/sync/gateway/errors.js.map +0 -1
- package/dist/application/sync/gateway/syncGateway.d.ts.map +0 -1
- package/dist/application/sync/gateway/syncGateway.js +0 -191
- package/dist/application/sync/gateway/syncGateway.js.map +0 -1
- package/dist/application/sync/gateway/transportClassification.d.ts.map +0 -1
- package/dist/application/sync/gateway/transportClassification.js +0 -133
- package/dist/application/sync/gateway/transportClassification.js.map +0 -1
- package/dist/application/sync/gateway/validation.d.ts +0 -22
- package/dist/application/sync/gateway/validation.d.ts.map +0 -1
- package/dist/application/sync/gateway/validation.js +0 -79
- package/dist/application/sync/gateway/validation.js.map +0 -1
- /package/dist/application/sync/{gateway → sheets}/conflictProjection.d.ts +0 -0
- /package/dist/application/sync/{gateway → sheets}/conflictProjection.js +0 -0
- /package/dist/application/sync/{gateway/coordinator → sheets/mutationCoordinator}/asyncMutex.js +0 -0
package/README.ja.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<a href="https://www.npmjs.com/package/hikoutei">npm パッケージ</a> ·
|
|
10
10
|
<a href="https://github.com/ManddarinShop/Hikoutei/issues">Issues</a> ·
|
|
11
|
-
<a href="
|
|
11
|
+
<a href="docs/quick-start.md">クイックスタート</a>
|
|
12
12
|
|
|
13
13
|
[](https://www.npmjs.com/package/hikoutei)
|
|
14
14
|
[](LICENSE)
|
|
@@ -18,8 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
Hikoutei は、TypeScript と Node.js のアプリケーションで Google Sheets を
|
|
20
20
|
MVP や社内ワークフローの人間向けの画面として利用できるようにします。
|
|
21
|
-
アプリケーションは型付きエンティティとローカル SQLite
|
|
22
|
-
|
|
21
|
+
アプリケーションは型付きエンティティとローカル SQLite を使い、サービス
|
|
22
|
+
アカウントの Google Sheets provider を通して変更を Google Sheets へ非同期に
|
|
23
|
+
届けられます。
|
|
23
24
|
|
|
24
25
|
Hikoutei の対象は意図的に限定されています。汎用データベースの代替、
|
|
25
26
|
Prisma/JPA のクローン、汎用 Google Sheets API ラッパーを目的としていません。
|
|
@@ -47,7 +48,7 @@ SQLite provider が内部で利用しますが、ルート public API に MikroO
|
|
|
47
48
|
## クイックスタート
|
|
48
49
|
|
|
49
50
|
エンティティ定義と SQLite の lifecycle はルート API だけを使います。Sheet route、
|
|
50
|
-
|
|
51
|
+
provider credential、provisioning、polling は内部 service bootstrap の責務です。
|
|
51
52
|
|
|
52
53
|
```ts
|
|
53
54
|
import { createTypedSheets, defineTypedSheetsEntity } from "hikoutei";
|
|
@@ -102,21 +103,43 @@ Sheet への配信は非同期に行います。
|
|
|
102
103
|
|
|
103
104
|
## Google Sheets の設定
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
106
|
+
Google Sheets の同期は service-side の責務です。推奨経路はサービスアカウントの
|
|
107
|
+
`googleSheetsApi` provider で、ひとつのサービスアカウントがタブの provisioning、
|
|
108
|
+
outbound effect の書き込み(高速 append、guarded update/delete、レシート、
|
|
109
|
+
応答喪失の復旧)、テーブル読み取り、行アンカー、ユーザー編集の観察をすべて
|
|
110
|
+
行います。アプリケーションは provider クライアントを import したり、Sheet route
|
|
111
|
+
を `createTypedSheets()` に渡したりしません。
|
|
112
|
+
|
|
113
|
+
1. `https://www.googleapis.com/auth/spreadsheets` スコープを持つ Google Cloud
|
|
114
|
+
サービスアカウントを作成し、対象スプレッドシートをそのメールアドレスに
|
|
115
|
+
**編集者**として共有します。provider がタブ作成、effect 行とレシート記録、
|
|
116
|
+
行アンカー管理を行うため、閲覧者権限では不十分です。Cloud プロジェクトで
|
|
117
|
+
Google Sheets API を有効化します。
|
|
118
|
+
2. サービスアカウントキーのファイルパスをサーバーの
|
|
119
|
+
`GOOGLE_APPLICATION_CREDENTIALS` に置き、スプレッドシート ID はコミットされない
|
|
120
|
+
シークレットストアに保管します。キーをブラウザコードや Git に入れないでください。
|
|
121
|
+
3. `googleSheetsApi` で内部 sync bootstrap を起動します。登録タブのヘッダーを
|
|
122
|
+
作成・検証した後、outbox 配信と User_Input polling を開始します。
|
|
123
|
+
|
|
124
|
+
シートの整合性はリクエスト間の Sheet トランザクションから生まれるのではなく、
|
|
125
|
+
隠された effect-receipt タブ、effect-id/payload-hash の重複排除、SQLite の
|
|
126
|
+
durable outbox、フェンシング、フィールド単位の compare-and-set 証拠、
|
|
127
|
+
postcondition 復旧から生まれます。provider は資格情報・スプレッドシート ID・
|
|
128
|
+
URL・payload をログに残さず、要求開始間隔をクラスごと(読み取り/書き込み)
|
|
129
|
+
1,100ms に調整して Google の quota window を守ります。`flush()` はローカル
|
|
130
|
+
コミットのみを意味し、配信は非同期で、すべての書き込みはレシートで記録され、
|
|
131
|
+
同じ effect worker が復旧します。
|
|
132
|
+
|
|
133
|
+
追跡される live シナリオはこの provider で実行されます。
|
|
134
|
+
[docs/sync-bulk-write-benchmark.md](docs/sync-bulk-write-benchmark.md) の
|
|
135
|
+
10,000 行 append と update/delete の live 証拠も同じ REST 経路です。
|
|
136
|
+
`scripts/bench/` の生トランスポート実験はレシート/CAS のない unguarded 経路
|
|
137
|
+
なので、worker 経由の測定までは性能値を検証済みと見なさないでください。live
|
|
138
|
+
呼び出しは opt-in で、通常の検証は fake provider と SQLite fixture を使います。
|
|
139
|
+
|
|
140
|
+
従来の Apps Script Gateway と `appsScript`/`googleApiWorker` オプションは削除され、
|
|
141
|
+
上記のサービスアカウント provider が唯一の同期経路です。詳しい設定と
|
|
142
|
+
トラブルシューティングは [クイックスタート](docs/quick-start.md) を参照してください。
|
|
120
143
|
|
|
121
144
|
## ドキュメント
|
|
122
145
|
|
|
@@ -128,7 +151,7 @@ Sheet への配信は非同期に行います。
|
|
|
128
151
|
|
|
129
152
|
## 制限事項
|
|
130
153
|
|
|
131
|
-
- Google Sheets にはクォータ、レイテンシー、
|
|
154
|
+
- Google Sheets にはクォータ、レイテンシー、API のレート制限があります。
|
|
132
155
|
- Sheet の更新は非同期なので、アプリケーションはローカル状態を読み取るべきです。
|
|
133
156
|
- SQLite はサービスにローカルなもので、分散調整レイヤーではありません。
|
|
134
157
|
- スキーマ変更、手動編集、競合する変更に対する運用方針は、アプリケーション側で
|
|
@@ -138,7 +161,7 @@ Sheet への配信は非同期に行います。
|
|
|
138
161
|
|
|
139
162
|
- Google Sheets から意図的なユーザー編集を取り込む機能を完成させる。
|
|
140
163
|
- update/delete の競合処理と表示を改善する。
|
|
141
|
-
-
|
|
164
|
+
- レジストリと直接 provider デプロイ用のセットアップツールを追加する。
|
|
142
165
|
- 公開パッケージのリリースを安定化する。
|
|
143
166
|
|
|
144
167
|
現在の作業については [open issues](https://github.com/ManddarinShop/Hikoutei/issues)
|
package/README.ko.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<a href="https://www.npmjs.com/package/hikoutei">npm 패키지</a> ·
|
|
10
10
|
<a href="https://github.com/ManddarinShop/Hikoutei/issues">이슈</a> ·
|
|
11
|
-
<a href="
|
|
11
|
+
<a href="docs/quick-start.md">빠른 시작</a>
|
|
12
12
|
|
|
13
13
|
[](https://www.npmjs.com/package/hikoutei)
|
|
14
14
|
[](LICENSE)
|
|
@@ -18,8 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
Hikoutei는 TypeScript와 Node.js 애플리케이션에서 Google Sheets를 MVP 또는
|
|
20
20
|
내부 업무 흐름의 사람이 읽기 쉬운 화면으로 사용할 수 있게 합니다. 애플리케이션은
|
|
21
|
-
타입이 지정된 엔티티와 로컬 SQLite를 사용하고,
|
|
22
|
-
통해 변경 내용을 Google Sheets에 비동기적으로 전달할 수
|
|
21
|
+
타입이 지정된 엔티티와 로컬 SQLite를 사용하고, 서비스 계정 기반 Google
|
|
22
|
+
Sheets provider를 통해 변경 내용을 Google Sheets에 비동기적으로 전달할 수
|
|
23
|
+
있습니다.
|
|
23
24
|
|
|
24
25
|
Hikoutei의 범위는 의도적으로 작습니다. 범용 데이터베이스 대체재, Prisma/JPA
|
|
25
26
|
클론, 범용 Google Sheets API 래퍼를 목표로 하지 않습니다.
|
|
@@ -47,7 +48,7 @@ SQLite provider가 내부적으로 사용하지만 루트 public API에는 Mikro
|
|
|
47
48
|
## 빠른 시작
|
|
48
49
|
|
|
49
50
|
엔티티 정의와 SQLite lifecycle은 루트 API만 사용합니다. Sheet route,
|
|
50
|
-
|
|
51
|
+
provider credential, provisioning, polling은 내부 service bootstrap의 책임입니다.
|
|
51
52
|
|
|
52
53
|
```ts
|
|
53
54
|
import { createTypedSheets, defineTypedSheetsEntity } from "hikoutei";
|
|
@@ -104,23 +105,42 @@ outbound worker와 User_Input polling을 시작합니다. service mode에서
|
|
|
104
105
|
|
|
105
106
|
## Google Sheets 설정
|
|
106
107
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
108
|
+
Google Sheets 동기화는 service-side의 책임입니다. 권장 경로는 서비스 계정
|
|
109
|
+
기반 `googleSheetsApi` provider로, 하나의 서비스 계정으로 탭 provisioning,
|
|
110
|
+
outbound effect 쓰기(빠른 append, guarded update/delete, receipt, 응답 유실
|
|
111
|
+
복구), 테이블 읽기, 행 anchor, 사용자 편집 관찰을 모두 수행합니다.
|
|
112
|
+
애플리케이션은 provider client를 import하거나 Sheet route를
|
|
113
|
+
`createTypedSheets()`에 넘기지 않습니다.
|
|
114
|
+
|
|
115
|
+
1. `https://www.googleapis.com/auth/spreadsheets` scope를 가진 Google Cloud
|
|
116
|
+
서비스 계정을 만들고, 대상 스프레드시트를 이메일로 **Editor** 권한으로
|
|
117
|
+
공유합니다. provider가 탭 생성, effect 행과 receipt 기록, 행 anchor 관리를
|
|
118
|
+
하므로 Viewer 권한으로는 부족합니다. Cloud 프로젝트에서 Google Sheets API를
|
|
119
|
+
활성화합니다.
|
|
120
|
+
2. 서비스 계정 키 파일 경로를 서버의 `GOOGLE_APPLICATION_CREDENTIALS`에 두고,
|
|
121
|
+
스프레드시트 ID는 커밋되지 않는 시크릿 저장소에 보관합니다. 키를 브라우저
|
|
122
|
+
코드나 Git에 넣지 마세요.
|
|
123
|
+
3. `googleSheetsApi`로 내부 sync bootstrap을 시작합니다. 등록된 탭의 헤더를
|
|
124
|
+
생성/검증한 뒤 outbox 전달과 User_Input polling을 시작합니다.
|
|
125
|
+
|
|
126
|
+
시트 일관성은 요청 간 Sheet 트랜잭션에서 오지 않습니다. 숨겨진
|
|
127
|
+
effect-receipt 탭, effect-id/payload-hash 중복 제거, SQLite durable outbox,
|
|
128
|
+
fencing, 필드 단위 compare-and-set 증거, postcondition 복구에서 옵니다.
|
|
129
|
+
provider는 자격 증명, 스프레드시트 ID, URL, payload를 로그에 남기지 않으며,
|
|
130
|
+
요청 시작 간격을 클래스별(읽기/쓰기) 1,100ms로 조절해 Google quota window를
|
|
131
|
+
지킵니다. `flush()`는 로컬 커밋만 의미하고 전달은 비동기이며, 모든 쓰기는
|
|
132
|
+
receipt로 기록되고 같은 effect worker가 복구합니다.
|
|
133
|
+
|
|
134
|
+
추적되는 live 시나리오는 이 provider로 실행됩니다.
|
|
135
|
+
[docs/sync-bulk-write-benchmark.md](docs/sync-bulk-write-benchmark.md)의
|
|
136
|
+
10,000행 append와 update/delete live 증거도 같은 REST 경로를 사용합니다.
|
|
137
|
+
`scripts/bench/`의 원시 전송 실험은 receipt/CAS 없는 unguarded 경로이므로,
|
|
138
|
+
worker를 통한 측정 전에는 성능 수치를 검증된 것으로 보지 마세요. live 호출은
|
|
139
|
+
opt-in이며, 일반 검증은 fake provider와 SQLite fixture를 사용합니다.
|
|
140
|
+
|
|
141
|
+
기존 Apps Script Gateway와 `appsScript`/`googleApiWorker` 옵션은 제거되어
|
|
142
|
+
위 서비스 계정 provider가 유일한 동기화 경로입니다. 상세한 설정과 문제 해결
|
|
143
|
+
방법은 [빠른 시작](docs/quick-start.md)에 설명되어 있습니다.
|
|
124
144
|
|
|
125
145
|
## 문서
|
|
126
146
|
|
|
@@ -134,7 +154,7 @@ outbound worker와 User_Input polling을 시작합니다. service mode에서
|
|
|
134
154
|
|
|
135
155
|
## 제한사항
|
|
136
156
|
|
|
137
|
-
- Google Sheets에는 quota, 지연 시간,
|
|
157
|
+
- Google Sheets에는 quota, 지연 시간, API rate limit이 있습니다.
|
|
138
158
|
- Sheet 업데이트는 비동기이므로 애플리케이션은 로컬 상태를 읽어야 합니다.
|
|
139
159
|
- SQLite는 서비스에 로컬이며 분산 조정 계층이 아닙니다.
|
|
140
160
|
- 스키마 변경, 수동 편집, 충돌하는 변경에 대한 운영 정책은 애플리케이션이
|
|
@@ -144,7 +164,7 @@ outbound worker와 User_Input polling을 시작합니다. service mode에서
|
|
|
144
164
|
|
|
145
165
|
- Google Sheets에서 의도적인 사용자 편집을 수집하는 기능 완성.
|
|
146
166
|
- update/delete 충돌 처리와 표시 개선.
|
|
147
|
-
- 레지스트리 및
|
|
167
|
+
- 레지스트리 및 직접 provider 배포를 위한 설정 도구 추가.
|
|
148
168
|
- 공개 패키지 릴리스 안정화.
|
|
149
169
|
|
|
150
170
|
현재 작업은 [open issues](https://github.com/ManddarinShop/Hikoutei/issues)
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<a href="https://www.npmjs.com/package/hikoutei">npm package</a> ·
|
|
10
10
|
<a href="https://github.com/ManddarinShop/Hikoutei/issues">Issues</a> ·
|
|
11
|
-
<a href="
|
|
11
|
+
<a href="docs/quick-start.md">Quick start</a>
|
|
12
12
|
|
|
13
13
|
[](https://www.npmjs.com/package/hikoutei)
|
|
14
14
|
[](LICENSE)
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
Hikoutei helps TypeScript and Node.js applications use Google Sheets as a
|
|
20
20
|
human-friendly part of an MVP or internal workflow. Your application works
|
|
21
21
|
with typed entities and local SQLite; changes can be delivered to Google
|
|
22
|
-
Sheets asynchronously through
|
|
22
|
+
Sheets asynchronously through a service-account Google Sheets provider.
|
|
23
23
|
|
|
24
24
|
Hikoutei is intentionally focused. It is not a general-purpose database
|
|
25
25
|
replacement, a Prisma/JPA clone, or a general Google Sheets API wrapper.
|
|
@@ -51,7 +51,7 @@ without changing the entity lifecycle API.
|
|
|
51
51
|
## Quick start
|
|
52
52
|
|
|
53
53
|
Define a scalar entity and use the local SQLite authority through a
|
|
54
|
-
request-local manager. Sheet routes,
|
|
54
|
+
request-local manager. Sheet routes, provider credentials, provisioning, and
|
|
55
55
|
polling belong to the internal service bootstrap rather than the application
|
|
56
56
|
API.
|
|
57
57
|
|
|
@@ -111,36 +111,52 @@ Use a conventional database and direct Google APIs when you need:
|
|
|
111
111
|
## Google Sheets setup
|
|
112
112
|
|
|
113
113
|
Google Sheets synchronization is a service-side concern. Applications do not
|
|
114
|
-
import a
|
|
114
|
+
import a provider client, pass Sheet routes to `createTypedSheets()`, call
|
|
115
115
|
`setupSheets()`, or choose an operation for each write.
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
117
|
+
### Service-account provider (googleSheetsApi)
|
|
118
|
+
|
|
119
|
+
The sync runtime uses one Google Sheets API provider (the internal
|
|
120
|
+
`googleSheetsApi` bootstrap option) with a service account — no Apps Script
|
|
121
|
+
deployment. The provider provisions the registered tabs, writes outbound
|
|
122
|
+
effects (fast append, guarded update/delete, receipts, response-loss
|
|
123
|
+
recovery), reads table values, assigns row anchors, and observes human edits:
|
|
124
|
+
|
|
125
|
+
1. Create a Google Cloud service account with the
|
|
126
|
+
`https://www.googleapis.com/auth/spreadsheets` scope and share the target
|
|
127
|
+
spreadsheet with its email as an Editor: the provider creates tabs, writes
|
|
128
|
+
effect rows and receipt records, and manages row anchors, so Viewer access
|
|
129
|
+
is not enough. Enable the Google Sheets API for the Cloud project.
|
|
130
|
+
2. Keep the service-account key file path in
|
|
131
|
+
`GOOGLE_APPLICATION_CREDENTIALS` on the server, and the spreadsheet ID in
|
|
132
|
+
an untracked secret store. Never put the key in browser code or Git.
|
|
133
|
+
3. Start the internal sync bootstrap with `googleSheetsApi` configured. It
|
|
134
|
+
creates and verifies headers on the registered tabs, then starts outbox
|
|
135
|
+
delivery and User_Input polling.
|
|
136
|
+
|
|
137
|
+
Sheet consistency does not come from cross-request Sheet transactions; it
|
|
138
|
+
comes from the hidden effect-receipt tab, effect-id/payload-hash dedupe, the
|
|
139
|
+
SQLite durable outbox, fencing, field-level compare-and-set evidence, and
|
|
140
|
+
postcondition recovery. The provider never logs credentials, spreadsheet IDs,
|
|
141
|
+
URLs, or payloads; it spaces request starts at 1,100 ms per class (reads and
|
|
142
|
+
writes separately) to stay inside Google's quota windows, and it keeps the
|
|
143
|
+
same SQLite-authoritative model: `flush()` commits locally, delivery is
|
|
144
|
+
asynchronous, and every write is receipted and recovered through the same
|
|
145
|
+
effect worker.
|
|
146
|
+
|
|
147
|
+
The tracked live scenario runs through this provider. The 10,000-row append
|
|
148
|
+
and update/delete live evidence recorded in
|
|
149
|
+
[docs/sync-bulk-write-benchmark.md](docs/sync-bulk-write-benchmark.md) uses
|
|
150
|
+
the same REST path; the raw-transport experiments under `scripts/bench/`
|
|
151
|
+
measure the unguarded API path (no receipts, no compare-and-set), so treat
|
|
152
|
+
any throughput number as unverified until it is measured through the full
|
|
153
|
+
worker. Live Google calls are opt-in; fake providers and SQLite fixtures are
|
|
154
|
+
the normal verification path.
|
|
155
|
+
|
|
156
|
+
The previous Apps Script gateway and the `appsScript`/`googleApiWorker`
|
|
157
|
+
options were removed; the service-account provider above is the only sync
|
|
158
|
+
path. The detailed setup and troubleshooting steps are in the
|
|
159
|
+
[Quick start](docs/quick-start.md).
|
|
144
160
|
|
|
145
161
|
## Documentation
|
|
146
162
|
|
|
@@ -155,7 +171,7 @@ The detailed setup and troubleshooting steps are in the [Quick start](docs/quick
|
|
|
155
171
|
|
|
156
172
|
## Limitations
|
|
157
173
|
|
|
158
|
-
- Google Sheets has quota, latency, and
|
|
174
|
+
- Google Sheets has quota, latency, and API rate limits.
|
|
159
175
|
- Sheet updates are asynchronous; the application should read its local state.
|
|
160
176
|
- SQLite is local to the service and is not a distributed coordination layer.
|
|
161
177
|
- Schema changes, manual edits, and conflicting updates still need an
|
|
@@ -165,7 +181,7 @@ The detailed setup and troubleshooting steps are in the [Quick start](docs/quick
|
|
|
165
181
|
|
|
166
182
|
- Complete ingestion of intentional user edits from Google Sheets.
|
|
167
183
|
- Improve update/delete conflict handling and presentation.
|
|
168
|
-
- Add setup tooling for registry and
|
|
184
|
+
- Add setup tooling for registry and direct provider deployment.
|
|
169
185
|
- Stabilize the public package release.
|
|
170
186
|
|
|
171
187
|
See the [open issues](https://github.com/ManddarinShop/Hikoutei/issues)
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { type TypedSheetsEntityMapping, type TypedSheetsEntityMappingRegistry } from "../../../../../application/orm/mapping/entityMapping.js";
|
|
9
9
|
import type { RegisteredTypedSheetsMappedProjection, TypedSheetsEntityWriterOptions } from "../../../../../application/orm/persistence/support/contracts.js";
|
|
10
10
|
import type { TypedSheetsOrm } from "../../../../../application/orm/api/TypedSheetsOrm.js";
|
|
11
|
-
import type { RegisteredSyncProjectionDefinition } from "../../../../../application/sync/
|
|
11
|
+
import type { RegisteredSyncProjectionDefinition } from "../../../../../application/sync/sheets/sheetsProvisioning.js";
|
|
12
12
|
import { type InitializeMikroOrmSqliteAdapterOptions, type MikroOrmSqliteAdapter } from "../storage/MikroOrmSqliteAdapter.js";
|
|
13
13
|
/** Options for creating a mapped public ORM around an existing MikroORM SQLite adapter. */
|
|
14
14
|
export interface CreateMappedTypedSheetsOrmOptions {
|
|
@@ -21,7 +21,7 @@ export interface InitializeMappedTypedSheetsOrmOptions extends InitializeMikroOr
|
|
|
21
21
|
* Optional internal hook invoked after local registry writes succeed.
|
|
22
22
|
*
|
|
23
23
|
* The hook receives the exact generated projection definitions so the sync
|
|
24
|
-
* service can provision a remote
|
|
24
|
+
* service can provision a remote provider without duplicating route metadata.
|
|
25
25
|
*/
|
|
26
26
|
readonly onRegisteredProjections?: (definitions: readonly RegisteredSyncProjectionDefinition[]) => Promise<void>;
|
|
27
27
|
}
|
|
@@ -41,7 +41,7 @@ export declare function createMappedTypedSheetsOrm(storage: MikroOrmSqliteAdapte
|
|
|
41
41
|
* Opens a dedicated MikroORM SQLite runtime ready for mapped entity lifecycle work.
|
|
42
42
|
*
|
|
43
43
|
* Startup performs non-destructive entity/schema migration and idempotent local
|
|
44
|
-
* projection registration. Remote
|
|
44
|
+
* projection registration. Remote provider-side provisioning remains explicit so
|
|
45
45
|
* a process cannot mutate a spreadsheet merely by opening its local database.
|
|
46
46
|
*/
|
|
47
47
|
export declare function initializeMappedTypedSheetsRuntime(options: InitializeMappedTypedSheetsOrmOptions): Promise<InitializedMappedTypedSheetsRuntime>;
|
package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MikroOrmMappedTypedSheets.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACtC,MAAM,yDAAyD,CAAC;AACjE,OAAO,KAAK,EACV,qCAAqC,EACrC,8BAA8B,EAC/B,MAAM,iEAAiE,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"MikroOrmMappedTypedSheets.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACtC,MAAM,yDAAyD,CAAC;AACjE,OAAO,KAAK,EACV,qCAAqC,EACrC,8BAA8B,EAC/B,MAAM,iEAAiE,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,8DAA8D,CAAC;AAIvH,OAAO,EAEL,KAAK,sCAAsC,EAC3C,KAAK,qBAAqB,EAC3B,MAAM,qCAAqC,CAAC;AAG7C,2FAA2F;AAC3F,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,GAAG,SAAS,wBAAwB,EAAE,CAAC;IAC1F,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;CACjD;AAED,2FAA2F;AAC3F,MAAM,WAAW,qCACf,SAAQ,sCAAsC,EAAE,iCAAiC;IACjF;;;;;OAKG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CACjC,WAAW,EAAE,SAAS,kCAAkC,EAAE,KACvD,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED,kFAAkF;AAClF,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;IACpD,QAAQ,CAAC,aAAa,EAAE,SAAS,qCAAqC,EAAE,CAAC;CAC1E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,iCAAiC,GACzC,cAAc,CAQhB;AAED;;;;;;GAMG;AACH,wBAAsB,kCAAkC,CACtD,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,mCAAmC,CAAC,CAyB9C;AAED,mFAAmF;AACnF,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,cAAc,CAAC,CAGzB"}
|
|
@@ -27,7 +27,7 @@ export function createMappedTypedSheetsOrm(storage, options) {
|
|
|
27
27
|
* Opens a dedicated MikroORM SQLite runtime ready for mapped entity lifecycle work.
|
|
28
28
|
*
|
|
29
29
|
* Startup performs non-destructive entity/schema migration and idempotent local
|
|
30
|
-
* projection registration. Remote
|
|
30
|
+
* projection registration. Remote provider-side provisioning remains explicit so
|
|
31
31
|
* a process cannot mutate a spreadsheet merely by opening its local database.
|
|
32
32
|
*/
|
|
33
33
|
export async function initializeMappedTypedSheetsRuntime(options) {
|
package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Materializes scalar entity schemas and provider bindings without sync code.
|
|
3
3
|
*
|
|
4
4
|
* The root ORM factory imports this module only. Projection mapping, canonical
|
|
5
|
-
* state, and
|
|
5
|
+
* state, and provider code remain behind the internal sync-service path.
|
|
6
6
|
*/
|
|
7
7
|
import type { HikouteiEntity } from "../../../../../api/entity.js";
|
|
8
8
|
import type { MikroOrmSqliteEntity } from "../storage/MikroOrmSqliteAdapter.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Materializes scalar entity schemas and provider bindings without sync code.
|
|
3
3
|
*
|
|
4
4
|
* The root ORM factory imports this module only. Projection mapping, canonical
|
|
5
|
-
* state, and
|
|
5
|
+
* state, and provider code remain behind the internal sync-service path.
|
|
6
6
|
*/
|
|
7
7
|
import { defineEntity, p } from "@mikro-orm/sql";
|
|
8
8
|
import { getEntityDescriptor } from "../../../../../api/entity.js";
|
|
@@ -12,7 +12,7 @@ import { TYPED_SHEETS_ORM_ERROR_CODES, TypedSheetsOrmError, } from "../../../../
|
|
|
12
12
|
import { createMikroOrmScalarEntityRuntime, } from "./MikroOrmScalarEntityRuntime.js";
|
|
13
13
|
import { FIELD_OWNERSHIPS } from "../../../../../domain/model/constants.js";
|
|
14
14
|
import { NORMALIZED_CELL_KINDS, } from "../../../../../shared/encoding/constants.js";
|
|
15
|
-
import {
|
|
15
|
+
import { SYNC_PROJECTIONS } from "../../../../../application/sync/sheets/constants.js";
|
|
16
16
|
/**
|
|
17
17
|
* Adds internal projection mappings to the provider materialization.
|
|
18
18
|
*
|
|
@@ -51,14 +51,14 @@ function createMapping(descriptor, reference, entityConfig, spreadsheetId) {
|
|
|
51
51
|
spreadsheetId,
|
|
52
52
|
tabName: entityConfig.systemState.tabName,
|
|
53
53
|
registeredRange: entityConfig.systemState.registeredRange,
|
|
54
|
-
projection:
|
|
54
|
+
projection: SYNC_PROJECTIONS.SYSTEM_STATE,
|
|
55
55
|
},
|
|
56
56
|
...(entityConfig.userInput === undefined ? [] : [{
|
|
57
57
|
physicalSheetId: `${logicalSheetId}:user_input`,
|
|
58
58
|
spreadsheetId,
|
|
59
59
|
tabName: entityConfig.userInput.tabName,
|
|
60
60
|
registeredRange: entityConfig.userInput.registeredRange,
|
|
61
|
-
projection:
|
|
61
|
+
projection: SYNC_PROJECTIONS.USER_INPUT,
|
|
62
62
|
}]),
|
|
63
63
|
];
|
|
64
64
|
return defineTypedSheetsEntityMapping({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MikroOrmScalarRuntime.js","sourceRoot":"","sources":["../../../../../../src/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAOnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sDAAsD,CAAC;AAKtG,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAKlD,OAAO,EACL,iCAAiC,GAElC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EACL,qBAAqB,GAEtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MikroOrmScalarRuntime.js","sourceRoot":"","sources":["../../../../../../src/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Polls User_Input projections and applies accepted edits to the local entity
|
|
3
3
|
* table through the observation writer.
|
|
4
4
|
*
|
|
5
|
-
* The
|
|
5
|
+
* The provider is treated as an untrusted observation source: only rows with a
|
|
6
6
|
* known SQLite business key and literal/blank cells are promoted. Canonical
|
|
7
7
|
* state, field revisions, conflict candidates, and the System_State outbox
|
|
8
8
|
* remain the durable source of truth.
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
10
|
+
import type { SyncSheetsObservationProvider } from "../../../../../application/sync/sheets/syncSheets.js";
|
|
11
11
|
import { type SyncTimingSink } from "../../../../../application/sync/telemetry/syncTiming.js";
|
|
12
12
|
import type { TypedSheetsEntityMapping, TypedSheetsEntityMappingRegistry } from "../../../../../application/orm/mapping/entityMapping.js";
|
|
13
13
|
import type { TypedSheetsEntityWriterOptions } from "../../../../../application/orm/persistence/support/contracts.js";
|
|
@@ -67,7 +67,7 @@ export interface MappedUserInputPollingReport {
|
|
|
67
67
|
/** Options for the provider-specific first inbound worker slice. */
|
|
68
68
|
export interface PollMappedUserInputWithMikroOrmOptions {
|
|
69
69
|
readonly storage: MikroOrmSqliteAdapter;
|
|
70
|
-
readonly
|
|
70
|
+
readonly provider: SyncSheetsObservationProvider;
|
|
71
71
|
readonly mappings: TypedSheetsEntityMappingRegistry | readonly TypedSheetsEntityMapping[];
|
|
72
72
|
readonly writer: TypedSheetsEntityWriterOptions;
|
|
73
73
|
readonly physicalSheetIds?: readonly string[];
|
package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MikroOrmUserInputPolling.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAGV,
|
|
1
|
+
{"version":3,"file":"MikroOrmUserInputPolling.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Polls User_Input projections and applies accepted edits to the local entity
|
|
3
3
|
* table through the observation writer.
|
|
4
4
|
*
|
|
5
|
-
* The
|
|
5
|
+
* The provider is treated as an untrusted observation source: only rows with a
|
|
6
6
|
* known SQLite business key and literal/blank cells are promoted. Canonical
|
|
7
7
|
* state, field revisions, conflict candidates, and the System_State outbox
|
|
8
8
|
* remain the durable source of truth.
|
|
9
9
|
*/
|
|
10
10
|
import { emptySyncTimingOperationCounts, SYNC_TIMING_SCOPES, } from "../../../../../application/sync/telemetry/syncTiming.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { isSyncSheetsTableReader, observeSyncSnapshots, } from "../../../../../application/sync/sheets/syncSheets.js";
|
|
12
|
+
import { SYNC_PROJECTIONS, SYNC_SNAPSHOT_READ_MODES, } from "../../../../../application/sync/sheets/constants.js";
|
|
13
13
|
import { createTypedSheetsEntityMappingRegistry, requireTypedSheetsEntityProjection, typedSheetsEntityProjectionHeaders, } from "../../../../../application/orm/mapping/entityMapping.js";
|
|
14
14
|
import { resolveTypedSheetsEntityWriterOptions } from "../../../../../application/orm/persistence/flush/flushCoordinator.js";
|
|
15
15
|
import { claimWriterLeaseWithAdapter, WRITER_LEASE_CLAIM_RESULT_KINDS, } from "../../../../../infrastructure/storage/index.js";
|
|
@@ -82,10 +82,10 @@ export async function pollMappedUserInputWithMikroOrm(options) {
|
|
|
82
82
|
const accumulators = mappings.map((mapping) => createAccumulator(mapping));
|
|
83
83
|
const canUseAdaptivePath = requestedMode === MAPPED_USER_INPUT_POLL_MODES.ADAPTIVE &&
|
|
84
84
|
options.forceFull !== true &&
|
|
85
|
-
|
|
85
|
+
isSyncSheetsTableReader(options.provider);
|
|
86
86
|
if (canUseAdaptivePath) {
|
|
87
87
|
const valuesReadStartedAt = Date.now();
|
|
88
|
-
const fastResults = await options.
|
|
88
|
+
const fastResults = await options.provider.readRowsBatch(mappings.map(toTableRowsRequest));
|
|
89
89
|
emitPollingTiming(timingSink, POLLING_TIMING_PHASES.VALUES_ONLY_READ, Date.now() - valuesReadStartedAt);
|
|
90
90
|
assertTableReadCount(fastResults, mappings.length);
|
|
91
91
|
const fullMappings = [];
|
|
@@ -125,7 +125,7 @@ export async function pollMappedUserInputWithMikroOrm(options) {
|
|
|
125
125
|
return report;
|
|
126
126
|
}
|
|
127
127
|
const observationStartedAt = Date.now();
|
|
128
|
-
const observed = await observeSyncSnapshots(options.
|
|
128
|
+
const observed = await observeSyncSnapshots(options.provider, fullMappings.map(toSnapshotRequest));
|
|
129
129
|
emitPollingTiming(timingSink, POLLING_TIMING_PHASES.FULL_METADATA_OBSERVATION, Date.now() - observationStartedAt);
|
|
130
130
|
assertObservationCount(observed, fullMappings.length);
|
|
131
131
|
const prepared = prepareObservedRows(fullMappings, observed, state, fullAccumulators);
|
|
@@ -145,7 +145,7 @@ export async function pollMappedUserInputWithMikroOrm(options) {
|
|
|
145
145
|
return report;
|
|
146
146
|
}
|
|
147
147
|
const observationStartedAt = Date.now();
|
|
148
|
-
const observed = await observeSyncSnapshots(options.
|
|
148
|
+
const observed = await observeSyncSnapshots(options.provider, mappings.map(toSnapshotRequest));
|
|
149
149
|
emitPollingTiming(timingSink, POLLING_TIMING_PHASES.FULL_METADATA_OBSERVATION, Date.now() - observationStartedAt);
|
|
150
150
|
assertObservationCount(observed, mappings.length);
|
|
151
151
|
const prepared = prepareObservedRows(mappings, observed, state, accumulators);
|
|
@@ -265,14 +265,14 @@ function createPollingReport(startedAt, accumulators, metrics) {
|
|
|
265
265
|
};
|
|
266
266
|
}
|
|
267
267
|
function toTableRowsRequest(mapping) {
|
|
268
|
-
const projection = requireTypedSheetsEntityProjection(mapping,
|
|
268
|
+
const projection = requireTypedSheetsEntityProjection(mapping, SYNC_PROJECTIONS.USER_INPUT);
|
|
269
269
|
return {
|
|
270
270
|
physicalSheetId: projection.physicalSheetId,
|
|
271
271
|
sheetName: projection.tabName,
|
|
272
272
|
registeredRange: projection.registeredRange,
|
|
273
|
-
projection:
|
|
273
|
+
projection: SYNC_PROJECTIONS.USER_INPUT,
|
|
274
274
|
schemaVersion: mapping.schemaVersion,
|
|
275
|
-
headers: typedSheetsEntityProjectionHeaders(mapping,
|
|
275
|
+
headers: typedSheetsEntityProjectionHeaders(mapping, SYNC_PROJECTIONS.USER_INPUT),
|
|
276
276
|
};
|
|
277
277
|
}
|
|
278
278
|
function selectMappings(input, physicalSheetIds) {
|
|
@@ -283,21 +283,21 @@ function selectMappings(input, physicalSheetIds) {
|
|
|
283
283
|
? undefined
|
|
284
284
|
: new Set(physicalSheetIds);
|
|
285
285
|
return registry.mappings.filter((mapping) => {
|
|
286
|
-
const projection = mapping.projections.find((candidate) => candidate.projection ===
|
|
286
|
+
const projection = mapping.projections.find((candidate) => candidate.projection === SYNC_PROJECTIONS.USER_INPUT);
|
|
287
287
|
return projection !== undefined && (selected === undefined || selected.has(projection.physicalSheetId));
|
|
288
288
|
});
|
|
289
289
|
}
|
|
290
290
|
function toSnapshotRequest(mapping) {
|
|
291
|
-
const projection = requireTypedSheetsEntityProjection(mapping,
|
|
291
|
+
const projection = requireTypedSheetsEntityProjection(mapping, SYNC_PROJECTIONS.USER_INPUT);
|
|
292
292
|
return {
|
|
293
293
|
physicalSheetId: projection.physicalSheetId,
|
|
294
294
|
sheetName: projection.tabName,
|
|
295
295
|
registeredRange: projection.registeredRange,
|
|
296
|
-
projection:
|
|
296
|
+
projection: SYNC_PROJECTIONS.USER_INPUT,
|
|
297
297
|
schemaVersion: mapping.schemaVersion,
|
|
298
298
|
// Polling must retain formula/merge/error metadata so invalid cells are
|
|
299
299
|
// quarantined instead of being mistaken for literal user edits.
|
|
300
|
-
readMode:
|
|
300
|
+
readMode: SYNC_SNAPSHOT_READ_MODES.FULL,
|
|
301
301
|
};
|
|
302
302
|
}
|
|
303
303
|
async function readMappedPollingState(storage, mappings) {
|
|
@@ -324,7 +324,7 @@ function createAccumulator(mapping) {
|
|
|
324
324
|
}
|
|
325
325
|
function toSheetReport(accumulator) {
|
|
326
326
|
return {
|
|
327
|
-
physicalSheetId: requireTypedSheetsEntityProjection(accumulator.mapping,
|
|
327
|
+
physicalSheetId: requireTypedSheetsEntityProjection(accumulator.mapping, SYNC_PROJECTIONS.USER_INPUT).physicalSheetId,
|
|
328
328
|
logicalSheetId: accumulator.mapping.logicalSheetId,
|
|
329
329
|
rowsScanned: accumulator.rowsScanned,
|
|
330
330
|
changedRows: accumulator.changedRows,
|