hikoutei 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ja.md +135 -0
- package/README.ko.md +138 -0
- package/README.md +143 -0
- package/apps-script/gateway/Code.gs +412 -0
- package/dist/adapter/persistence/contracts/index.d.ts +3 -0
- package/dist/adapter/persistence/contracts/index.d.ts.map +1 -0
- package/dist/adapter/persistence/contracts/index.js +3 -0
- package/dist/adapter/persistence/contracts/index.js.map +1 -0
- package/dist/adapter/persistence/contracts/sql.d.ts +50 -0
- package/dist/adapter/persistence/contracts/sql.d.ts.map +1 -0
- package/dist/adapter/persistence/contracts/sql.js +9 -0
- package/dist/adapter/persistence/contracts/sql.js.map +1 -0
- package/dist/adapter/persistence/index.d.ts +2 -0
- package/dist/adapter/persistence/index.d.ts.map +1 -0
- package/dist/adapter/persistence/index.js +2 -0
- package/dist/adapter/persistence/index.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts +53 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js +105 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +39 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +54 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts +38 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js +55 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.d.ts +16 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.js +9 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +27 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +67 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts +19 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js +67 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts +78 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js +121 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts +20 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js +125 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +42 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +51 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +22 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js +12 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +42 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +161 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts +3 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +692 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +29 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +538 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts +12 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +190 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +23 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +166 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +50 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js +60 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts +44 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js +40 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +7 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +47 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts +5 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +54 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +5 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js +2 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +10 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +35 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +67 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +204 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +78 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +343 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -0
- package/dist/application/index.d.ts +4 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +4 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/orm/api/TypedSheetsOrm.d.ts +71 -0
- package/dist/application/orm/api/TypedSheetsOrm.d.ts.map +1 -0
- package/dist/application/orm/api/TypedSheetsOrm.js +116 -0
- package/dist/application/orm/api/TypedSheetsOrm.js.map +1 -0
- package/dist/application/orm/api/contracts.d.ts +118 -0
- package/dist/application/orm/api/contracts.d.ts.map +1 -0
- package/dist/application/orm/api/contracts.js +21 -0
- package/dist/application/orm/api/contracts.js.map +1 -0
- package/dist/application/orm/errors.d.ts +35 -0
- package/dist/application/orm/errors.d.ts.map +1 -0
- package/dist/application/orm/errors.js +35 -0
- package/dist/application/orm/errors.js.map +1 -0
- package/dist/application/orm/index.d.ts +13 -0
- package/dist/application/orm/index.d.ts.map +1 -0
- package/dist/application/orm/index.js +7 -0
- package/dist/application/orm/index.js.map +1 -0
- package/dist/application/orm/mapping/contracts.d.ts +113 -0
- package/dist/application/orm/mapping/contracts.d.ts.map +1 -0
- package/dist/application/orm/mapping/contracts.js +8 -0
- package/dist/application/orm/mapping/contracts.js.map +1 -0
- package/dist/application/orm/mapping/definition.d.ts +16 -0
- package/dist/application/orm/mapping/definition.d.ts.map +1 -0
- package/dist/application/orm/mapping/definition.js +145 -0
- package/dist/application/orm/mapping/definition.js.map +1 -0
- package/dist/application/orm/mapping/entityMapping.d.ts +13 -0
- package/dist/application/orm/mapping/entityMapping.d.ts.map +1 -0
- package/dist/application/orm/mapping/entityMapping.js +13 -0
- package/dist/application/orm/mapping/entityMapping.js.map +1 -0
- package/dist/application/orm/mapping/identity.d.ts +14 -0
- package/dist/application/orm/mapping/identity.d.ts.map +1 -0
- package/dist/application/orm/mapping/identity.js +37 -0
- package/dist/application/orm/mapping/identity.js.map +1 -0
- package/dist/application/orm/mapping/observationMapping.d.ts +42 -0
- package/dist/application/orm/mapping/observationMapping.d.ts.map +1 -0
- package/dist/application/orm/mapping/observationMapping.js +65 -0
- package/dist/application/orm/mapping/observationMapping.js.map +1 -0
- package/dist/application/orm/mapping/projection.d.ts +22 -0
- package/dist/application/orm/mapping/projection.d.ts.map +1 -0
- package/dist/application/orm/mapping/projection.js +74 -0
- package/dist/application/orm/mapping/projection.js.map +1 -0
- package/dist/application/orm/mapping/registry.d.ts +15 -0
- package/dist/application/orm/mapping/registry.d.ts.map +1 -0
- package/dist/application/orm/mapping/registry.js +38 -0
- package/dist/application/orm/mapping/registry.js.map +1 -0
- package/dist/application/orm/mapping/values.d.ts +17 -0
- package/dist/application/orm/mapping/values.d.ts.map +1 -0
- package/dist/application/orm/mapping/values.js +141 -0
- package/dist/application/orm/mapping/values.js.map +1 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +28 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.js +170 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts +9 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts.map +1 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js +8 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js.map +1 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts +12 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts.map +1 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +134 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -0
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts +21 -0
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts.map +1 -0
- package/dist/application/orm/persistence/projection/projectionEffects.js +203 -0
- package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -0
- package/dist/application/orm/persistence/support/businessKeys.d.ts +17 -0
- package/dist/application/orm/persistence/support/businessKeys.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/businessKeys.js +72 -0
- package/dist/application/orm/persistence/support/businessKeys.js.map +1 -0
- package/dist/application/orm/persistence/support/canonicalState.d.ts +22 -0
- package/dist/application/orm/persistence/support/canonicalState.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/canonicalState.js +88 -0
- package/dist/application/orm/persistence/support/canonicalState.js.map +1 -0
- package/dist/application/orm/persistence/support/contracts.d.ts +139 -0
- package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/contracts.js +93 -0
- package/dist/application/orm/persistence/support/contracts.js.map +1 -0
- package/dist/application/orm/persistence/support/helpers.d.ts +32 -0
- package/dist/application/orm/persistence/support/helpers.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/helpers.js +66 -0
- package/dist/application/orm/persistence/support/helpers.js.map +1 -0
- package/dist/application/orm/persistence/support/timing.d.ts +20 -0
- package/dist/application/orm/persistence/support/timing.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/timing.js +55 -0
- package/dist/application/orm/persistence/support/timing.js.map +1 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +46 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js +93 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -0
- package/dist/application/sync/gateway/constants.d.ts +65 -0
- package/dist/application/sync/gateway/constants.d.ts.map +1 -0
- package/dist/application/sync/gateway/constants.js +57 -0
- package/dist/application/sync/gateway/constants.js.map +1 -0
- package/dist/application/sync/gateway/errors.d.ts +15 -0
- package/dist/application/sync/gateway/errors.d.ts.map +1 -0
- package/dist/application/sync/gateway/errors.js +16 -0
- package/dist/application/sync/gateway/errors.js.map +1 -0
- package/dist/application/sync/gateway/syncGateway.d.ts +313 -0
- package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -0
- package/dist/application/sync/gateway/syncGateway.js +202 -0
- package/dist/application/sync/gateway/syncGateway.js.map +1 -0
- package/dist/application/sync/gateway/validation.d.ts +17 -0
- package/dist/application/sync/gateway/validation.d.ts.map +1 -0
- package/dist/application/sync/gateway/validation.js +60 -0
- package/dist/application/sync/gateway/validation.js.map +1 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts +72 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +272 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -0
- package/dist/application/sync/index.d.ts +16 -0
- package/dist/application/sync/index.d.ts.map +1 -0
- package/dist/application/sync/index.js +9 -0
- package/dist/application/sync/index.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +106 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +297 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +100 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js +345 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +46 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +63 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +20 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +102 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts +19 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +32 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +202 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts +17 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js +80 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +13 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +205 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts +81 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +245 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts +77 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +518 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -0
- package/dist/application/sync/telemetry/syncTiming.d.ts +50 -0
- package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -0
- package/dist/application/sync/telemetry/syncTiming.js +22 -0
- package/dist/application/sync/telemetry/syncTiming.js.map +1 -0
- package/dist/domain/conflict/errors.d.ts +42 -0
- package/dist/domain/conflict/errors.d.ts.map +1 -0
- package/dist/domain/conflict/errors.js +36 -0
- package/dist/domain/conflict/errors.js.map +1 -0
- package/dist/domain/conflict/index.d.ts +5 -0
- package/dist/domain/conflict/index.d.ts.map +1 -0
- package/dist/domain/conflict/index.js +3 -0
- package/dist/domain/conflict/index.js.map +1 -0
- package/dist/domain/conflict/transitions.d.ts +52 -0
- package/dist/domain/conflict/transitions.d.ts.map +1 -0
- package/dist/domain/conflict/transitions.js +115 -0
- package/dist/domain/conflict/transitions.js.map +1 -0
- package/dist/domain/errors/evaluation.d.ts +13 -0
- package/dist/domain/errors/evaluation.d.ts.map +1 -0
- package/dist/domain/errors/evaluation.js +14 -0
- package/dist/domain/errors/evaluation.js.map +1 -0
- package/dist/domain/errors/identity.d.ts +12 -0
- package/dist/domain/errors/identity.d.ts.map +1 -0
- package/dist/domain/errors/identity.js +15 -0
- package/dist/domain/errors/identity.js.map +1 -0
- package/dist/domain/errors/index.d.ts +7 -0
- package/dist/domain/errors/index.d.ts.map +1 -0
- package/dist/domain/errors/index.js +5 -0
- package/dist/domain/errors/index.js.map +1 -0
- package/dist/domain/errors/stableEncoding.d.ts +7 -0
- package/dist/domain/errors/stableEncoding.d.ts.map +1 -0
- package/dist/domain/errors/stableEncoding.js +8 -0
- package/dist/domain/errors/stableEncoding.js.map +1 -0
- package/dist/domain/errors/types.d.ts +20 -0
- package/dist/domain/errors/types.d.ts.map +1 -0
- package/dist/domain/errors/types.js +18 -0
- package/dist/domain/errors/types.js.map +1 -0
- package/dist/domain/evaluate/constants.d.ts +55 -0
- package/dist/domain/evaluate/constants.d.ts.map +1 -0
- package/dist/domain/evaluate/constants.js +41 -0
- package/dist/domain/evaluate/constants.js.map +1 -0
- package/dist/domain/evaluate/contracts.d.ts +125 -0
- package/dist/domain/evaluate/contracts.d.ts.map +1 -0
- package/dist/domain/evaluate/contracts.js +8 -0
- package/dist/domain/evaluate/contracts.js.map +1 -0
- package/dist/domain/evaluate/evaluateBatch.d.ts +11 -0
- package/dist/domain/evaluate/evaluateBatch.d.ts.map +1 -0
- package/dist/domain/evaluate/evaluateBatch.js +91 -0
- package/dist/domain/evaluate/evaluateBatch.js.map +1 -0
- package/dist/domain/evaluate/fieldEvaluation.d.ts +14 -0
- package/dist/domain/evaluate/fieldEvaluation.d.ts.map +1 -0
- package/dist/domain/evaluate/fieldEvaluation.js +133 -0
- package/dist/domain/evaluate/fieldEvaluation.js.map +1 -0
- package/dist/domain/evaluate/identity.d.ts +21 -0
- package/dist/domain/evaluate/identity.d.ts.map +1 -0
- package/dist/domain/evaluate/identity.js +72 -0
- package/dist/domain/evaluate/identity.js.map +1 -0
- package/dist/domain/evaluate/index.d.ts +4 -0
- package/dist/domain/evaluate/index.d.ts.map +1 -0
- package/dist/domain/evaluate/index.js +3 -0
- package/dist/domain/evaluate/index.js.map +1 -0
- package/dist/domain/evaluate/preconditions.d.ts +30 -0
- package/dist/domain/evaluate/preconditions.d.ts.map +1 -0
- package/dist/domain/evaluate/preconditions.js +389 -0
- package/dist/domain/evaluate/preconditions.js.map +1 -0
- package/dist/domain/evaluate/quarantine.d.ts +15 -0
- package/dist/domain/evaluate/quarantine.d.ts.map +1 -0
- package/dist/domain/evaluate/quarantine.js +185 -0
- package/dist/domain/evaluate/quarantine.js.map +1 -0
- package/dist/domain/index.d.ts +7 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +7 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/model/constants.d.ts +73 -0
- package/dist/domain/model/constants.d.ts.map +1 -0
- package/dist/domain/model/constants.js +59 -0
- package/dist/domain/model/constants.js.map +1 -0
- package/dist/domain/model/index.d.ts +3 -0
- package/dist/domain/model/index.d.ts.map +1 -0
- package/dist/domain/model/index.js +2 -0
- package/dist/domain/model/index.js.map +1 -0
- package/dist/domain/model/types.d.ts +330 -0
- package/dist/domain/model/types.d.ts.map +1 -0
- package/dist/domain/model/types.js +8 -0
- package/dist/domain/model/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +3 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +3 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/storage/constants.d.ts +4 -0
- package/dist/infrastructure/storage/constants.d.ts.map +1 -0
- package/dist/infrastructure/storage/constants.js +4 -0
- package/dist/infrastructure/storage/constants.js.map +1 -0
- package/dist/infrastructure/storage/errors.d.ts +55 -0
- package/dist/infrastructure/storage/errors.d.ts.map +1 -0
- package/dist/infrastructure/storage/errors.js +58 -0
- package/dist/infrastructure/storage/errors.js.map +1 -0
- package/dist/infrastructure/storage/index.d.ts +23 -0
- package/dist/infrastructure/storage/index.d.ts.map +1 -0
- package/dist/infrastructure/storage/index.js +13 -0
- package/dist/infrastructure/storage/index.js.map +1 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts +64 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts.map +1 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.js +148 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/schema.d.ts +49 -0
- package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/schema.js +529 -0
- package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +5 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.js +2 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.d.ts +9 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.js +122 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlState.d.ts +6 -0
- package/dist/infrastructure/storage/sqlite/sqlState.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlState.js +14 -0
- package/dist/infrastructure/storage/sqlite/sqlState.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts +6 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.js +24 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts +44 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.js +66 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.js.map +1 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts +101 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +417 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.d.ts +16 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.js +85 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts +31 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.js +439 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.d.ts +53 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.js +41 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.d.ts +49 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.js +537 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts +15 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js +100 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +124 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.js +13 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts +28 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.js +223 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts +28 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.js +293 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.js.map +1 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts +58 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js +195 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +31 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +563 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +118 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +18 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts +23 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js +84 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +16 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +97 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +137 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +396 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +101 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +9 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +21 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +184 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +25 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +158 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +69 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js +272 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts +90 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.js +282 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -0
- package/dist/shared/constants.d.ts +8 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +8 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/encoding/constants.d.ts +45 -0
- package/dist/shared/encoding/constants.d.ts.map +1 -0
- package/dist/shared/encoding/constants.js +37 -0
- package/dist/shared/encoding/constants.js.map +1 -0
- package/dist/shared/encoding/index.d.ts +6 -0
- package/dist/shared/encoding/index.d.ts.map +1 -0
- package/dist/shared/encoding/index.js +4 -0
- package/dist/shared/encoding/index.js.map +1 -0
- package/dist/shared/encoding/stableEncode.d.ts +34 -0
- package/dist/shared/encoding/stableEncode.d.ts.map +1 -0
- package/dist/shared/encoding/stableEncode.js +210 -0
- package/dist/shared/encoding/stableEncode.js.map +1 -0
- package/dist/shared/encoding/typeGuards.d.ts +15 -0
- package/dist/shared/encoding/typeGuards.d.ts.map +1 -0
- package/dist/shared/encoding/typeGuards.js +11 -0
- package/dist/shared/encoding/typeGuards.js.map +1 -0
- package/dist/shared/encoding/types.d.ts +52 -0
- package/dist/shared/encoding/types.d.ts.map +1 -0
- package/dist/shared/encoding/types.js +8 -0
- package/dist/shared/encoding/types.js.map +1 -0
- package/dist/shared/index.d.ts +6 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +6 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/state/constants.d.ts +16 -0
- package/dist/shared/state/constants.d.ts.map +1 -0
- package/dist/shared/state/constants.js +16 -0
- package/dist/shared/state/constants.js.map +1 -0
- package/dist/shared/state/index.d.ts +3 -0
- package/dist/shared/state/index.d.ts.map +1 -0
- package/dist/shared/state/index.js +2 -0
- package/dist/shared/state/index.js.map +1 -0
- package/dist/shared/state/types.d.ts +23 -0
- package/dist/shared/state/types.d.ts.map +1 -0
- package/dist/shared/state/types.js +2 -0
- package/dist/shared/state/types.js.map +1 -0
- package/dist/shared/validation.d.ts +9 -0
- package/dist/shared/validation.d.ts.map +1 -0
- package/dist/shared/validation.js +25 -0
- package/dist/shared/validation.js.map +1 -0
- package/docs/architecture.md +72 -0
- package/docs/code-guidelines.md +256 -0
- package/docs/development.md +48 -0
- package/docs/git-workflow.md +224 -0
- package/docs/mikro-orm-adapter-spike.md +248 -0
- package/docs/quick-start.md +102 -0
- package/docs/sql-layer-plan.md +59 -0
- package/docs/sync-bulk-write-benchmark.md +1036 -0
- package/docs/sync-observability.md +71 -0
- package/docs/task-queue-write-model.md +640 -0
- package/docs/typed-sheets-mvp-scope-2026-06-29.md +490 -0
- package/docs/typed-sheets-plan.md +417 -0
- package/docs/write-and-synchronization-flow.md +71 -0
- package/package.json +68 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# MikroORM SQLite Adapter and Entity Facade Spike
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This spike tests the proposed Sheets-side persistence shape without making
|
|
6
|
+
MikroORM the typed-sheets public API:
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
application server
|
|
10
|
+
├─ primary entities → application MikroORM → primary database (for example MySQL)
|
|
11
|
+
└─ Sheets entities → typed-sheets EntityManager → MikroORM SQLite executor → SQLite → Google Sheets outbox
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The two MikroORM instances are intentionally separate. A Sheets entity uses a
|
|
15
|
+
dedicated SQLite database and cannot accidentally write through the
|
|
16
|
+
application's MySQL entity manager. `TypedSheetsOrm` and
|
|
17
|
+
`TypedSheetsEntityManager` are ours; MikroORM is only the first replaceable
|
|
18
|
+
SQLite execution engine behind them.
|
|
19
|
+
|
|
20
|
+
## Public entity lifecycle
|
|
21
|
+
|
|
22
|
+
The application-facing lifecycle follows the familiar entity-manager shape,
|
|
23
|
+
without returning a raw MikroORM manager:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import {
|
|
27
|
+
defineTypedSheetsEntityMapping,
|
|
28
|
+
} from "typed-sheets/orm";
|
|
29
|
+
import {
|
|
30
|
+
initializeMappedTypedSheetsOrm,
|
|
31
|
+
} from "typed-sheets/mikro-orm";
|
|
32
|
+
import { provisionRegisteredSyncSheets } from "typed-sheets";
|
|
33
|
+
|
|
34
|
+
const orderMapping = defineTypedSheetsEntityMapping({
|
|
35
|
+
entity: Order,
|
|
36
|
+
logicalSheetId: "orders",
|
|
37
|
+
primaryKey: "id",
|
|
38
|
+
businessKey: "orderNumber",
|
|
39
|
+
schemaVersion: 1,
|
|
40
|
+
fields: [
|
|
41
|
+
{
|
|
42
|
+
property: "orderNumber",
|
|
43
|
+
cellKind: "string",
|
|
44
|
+
ownership: "user",
|
|
45
|
+
required: true,
|
|
46
|
+
unique: true,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
property: "status",
|
|
50
|
+
cellKind: "string",
|
|
51
|
+
ownership: "user",
|
|
52
|
+
required: true,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
property: "approvedAt",
|
|
56
|
+
cellKind: "date",
|
|
57
|
+
ownership: "system",
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
projections: [
|
|
61
|
+
{
|
|
62
|
+
physicalSheetId: "orders-input",
|
|
63
|
+
spreadsheetId: process.env.GOOGLE_SHEET_ID!,
|
|
64
|
+
tabName: "User_Input",
|
|
65
|
+
registeredRange: "A:B",
|
|
66
|
+
projection: "user_input",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
physicalSheetId: "orders-system",
|
|
70
|
+
spreadsheetId: process.env.GOOGLE_SHEET_ID!,
|
|
71
|
+
tabName: "System_State",
|
|
72
|
+
registeredRange: "A:D",
|
|
73
|
+
projection: "system_state",
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const typedSheetsOrm = await initializeMappedTypedSheetsOrm({
|
|
79
|
+
dbName: "./typed-sheets.sqlite",
|
|
80
|
+
entities: [Order],
|
|
81
|
+
mappings: [orderMapping],
|
|
82
|
+
writer: { writerId: "orders-service" },
|
|
83
|
+
onRegisteredProjections: (definitions) =>
|
|
84
|
+
provisionRegisteredSyncSheets(appsScriptGateway, definitions),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const em = typedSheetsOrm.em.fork();
|
|
88
|
+
|
|
89
|
+
const order = em.create(Order, { id: "o-1", status: "pending" });
|
|
90
|
+
em.persist(order);
|
|
91
|
+
await em.flush();
|
|
92
|
+
|
|
93
|
+
const loaded = await em.findOne(Order, { id: "o-1" });
|
|
94
|
+
if (loaded !== null) {
|
|
95
|
+
loaded.status = "paid";
|
|
96
|
+
await em.flush();
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The initial facade exposes `fork`, `create`, `find`, `findOne`, `persist`,
|
|
101
|
+
`remove`, `flush`, `transactional`, and `clear`. Reads use the local SQLite
|
|
102
|
+
state only; they do not wait for a Google Sheets API call. The initial filter
|
|
103
|
+
contract is an equality filter with optional `limit` and `offset`, rather than
|
|
104
|
+
the entire MikroORM query language.
|
|
105
|
+
|
|
106
|
+
`flush()` collects create, update, and delete changes, then the built-in mapping
|
|
107
|
+
planner writes the entity row, canonical state, row binding, business-key
|
|
108
|
+
index, and ordered Sheets outbox effects in one SQLite transaction. It does
|
|
109
|
+
not synchronously call Google Sheets. If planning throws, all of those local
|
|
110
|
+
writes roll back together.
|
|
111
|
+
|
|
112
|
+
The mapping requires exactly one `System_State` route and may additionally
|
|
113
|
+
declare one `User_Input` route. `System_State` receives the complete canonical
|
|
114
|
+
view plus a system tombstone marker. A direct create or a direct change to a
|
|
115
|
+
user-owned field also emits a candidate-preserving `User_Input` reconcile
|
|
116
|
+
effect; it does not overwrite an unresolved Sheet candidate. A direct remove
|
|
117
|
+
also creates a guarded `user_input_delete` effect when a `User_Input` route
|
|
118
|
+
exists. Its payload contains the complete expected input row, so the gateway
|
|
119
|
+
deletes only an anchored row whose visible revision and full row hash still
|
|
120
|
+
match. The worker blocks that effect rather than deleting when an unresolved
|
|
121
|
+
candidate owns any user-owned field.
|
|
122
|
+
|
|
123
|
+
The production-shaped sync gateway source at
|
|
124
|
+
`apps-script/gateway/Code.gs` is the thin operation data plane. Deploy the
|
|
125
|
+
current source before connecting a service; older deployments may not
|
|
126
|
+
understand the current signed operation protocol.
|
|
127
|
+
|
|
128
|
+
The low-level `flushCoordinator` seam remains available for an adapter author
|
|
129
|
+
or an advanced custom planner, but ordinary entity configuration no longer
|
|
130
|
+
needs it.
|
|
131
|
+
|
|
132
|
+
`onRegisteredProjections` is optional. When supplied, it receives the exact
|
|
133
|
+
registry routes and generated headers after the local SQLite registration has
|
|
134
|
+
succeeded; the example uses it to provision the reviewed Apps Script
|
|
135
|
+
allowlist. Omitting it keeps remote spreadsheet provisioning separate from
|
|
136
|
+
process startup.
|
|
137
|
+
|
|
138
|
+
## Package boundary
|
|
139
|
+
|
|
140
|
+
The typed-sheets entity lifecycle contracts are available from
|
|
141
|
+
`typed-sheets/orm`. The MikroORM-specific initializer and SQLite adapter are
|
|
142
|
+
available only from `typed-sheets/mikro-orm`. The root `typed-sheets` import
|
|
143
|
+
does not load MikroORM.
|
|
144
|
+
|
|
145
|
+
MikroORM is an optional peer dependency. This keeps the core/storage contract
|
|
146
|
+
replaceable by another persistence integration later.
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
import {
|
|
150
|
+
initializeMikroOrmSqliteAdapter,
|
|
151
|
+
migrateMikroOrmSqliteStorageSchema,
|
|
152
|
+
} from "typed-sheets/mikro-orm";
|
|
153
|
+
|
|
154
|
+
const storage = await initializeMikroOrmSqliteAdapter({
|
|
155
|
+
dbName: "./typed-sheets.sqlite",
|
|
156
|
+
entities: [Order],
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// Explicit on purpose: startup does not mutate a production schema unless the
|
|
160
|
+
// application opts in.
|
|
161
|
+
await migrateMikroOrmSqliteStorageSchema(storage);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
`migrateMikroOrmSqliteStorageSchema()` first applies MikroORM's safe,
|
|
165
|
+
non-destructive entity-schema update, then applies typed-sheets' versioned sync
|
|
166
|
+
schema. The sync schema keeps its existing `PRAGMA user_version` migration
|
|
167
|
+
contract while both schemas share the same SQLite connection.
|
|
168
|
+
|
|
169
|
+
## Proven transaction boundary
|
|
170
|
+
|
|
171
|
+
`MikroOrmSqliteAdapter.transactional()` provides the active MikroORM entity
|
|
172
|
+
manager and an adapter-neutral SQL executor together:
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
import { persistObservedRowWithSql } from "typed-sheets";
|
|
176
|
+
|
|
177
|
+
await storage.transactional(async ({ entityManager, sql }) => {
|
|
178
|
+
const order = entityManager.create(Order, { id: "o-1", status: "pending" });
|
|
179
|
+
entityManager.persist(order);
|
|
180
|
+
await entityManager.flush();
|
|
181
|
+
|
|
182
|
+
// The observation receipt, event ledger, canonical state, and Sheets outbox
|
|
183
|
+
// all use this same transaction-bound SQL executor. A later failure rolls
|
|
184
|
+
// the Order row back too.
|
|
185
|
+
await persistObservedRowWithSql(sql, fence, observedRow);
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Focused tests prove these operations commit or roll back together:
|
|
190
|
+
|
|
191
|
+
- MikroORM entity row
|
|
192
|
+
- typed-sheets canonical state
|
|
193
|
+
- pending Google Sheets effect
|
|
194
|
+
- writer lease and fencing (stale writer rejection)
|
|
195
|
+
- registered Sheet projection/allowlist
|
|
196
|
+
|
|
197
|
+
## Current boundary
|
|
198
|
+
|
|
199
|
+
The durable SQLite paths now have adapter-backed counterparts:
|
|
200
|
+
|
|
201
|
+
- writer lease, registry, canonical commit, and effect-outbox operations;
|
|
202
|
+
- `persistObservedRowWithSql()` / `persistObservedRowWithAdapter()` for
|
|
203
|
+
observation receipt, event ledger, canonical state, conflict, quarantine,
|
|
204
|
+
and effects;
|
|
205
|
+
- `persistResolutionCommandWithSql()` /
|
|
206
|
+
`persistResolutionCommandWithAdapter()` for trusted conflict commands;
|
|
207
|
+
- `runSyncEffectWorkerWithAdapter()` from `typed-sheets/mikro-orm` for Sheets
|
|
208
|
+
effect claiming, application, and recovery.
|
|
209
|
+
|
|
210
|
+
The legacy synchronous `node:sqlite` APIs remain available for existing
|
|
211
|
+
runtimes. The `WithSql` variants require a caller-owned transaction, while the
|
|
212
|
+
`WithAdapter` variants open one through the adapter. This distinction makes it
|
|
213
|
+
explicit at the call site whether a user-entity mutation must share the same
|
|
214
|
+
commit boundary.
|
|
215
|
+
|
|
216
|
+
The public mapping layer now derives canonical commits and projection effects
|
|
217
|
+
from entity lifecycle changes. It also supplies
|
|
218
|
+
`persistMappedObservedRowWithMikroOrm()` for the reverse half of the durable
|
|
219
|
+
boundary: an already-normalized, already-evaluated accepted observation is
|
|
220
|
+
stored and applied to the mapped MikroORM entity in one SQLite transaction.
|
|
221
|
+
It uses native MikroORM writes internally so it does not trigger a second
|
|
222
|
+
outbound `flush()` loop.
|
|
223
|
+
|
|
224
|
+
The raw Sheet snapshot → normalized observation → pure evaluator bridge is
|
|
225
|
+
still explicit. In particular, physical row-anchor discovery and projection
|
|
226
|
+
row-location persistence must be supplied by the existing gateway/ingestion
|
|
227
|
+
flow before an observation reaches `persistMappedObservedRowWithMikroOrm()`.
|
|
228
|
+
This prevents the mapping layer from guessing row identity from a row number or
|
|
229
|
+
business key.
|
|
230
|
+
|
|
231
|
+
`em.remove()` creates a canonical tombstone, a `System_State` tombstone
|
|
232
|
+
projection, and a guarded physical `User_Input` deletion when that route is
|
|
233
|
+
configured. A gateway response loss is resolved only through the deletion
|
|
234
|
+
effect's own receipt; an absent row by itself is never treated as proof that a
|
|
235
|
+
manual or unrelated deletion was ours. If the gateway or local conflict ledger
|
|
236
|
+
detects an active candidate, the input row is retained and the deletion effect
|
|
237
|
+
is marked `blocked_candidate` for explicit conflict handling.
|
|
238
|
+
|
|
239
|
+
The mapping/planner depends only on the adapter-neutral storage and entity
|
|
240
|
+
engine contracts. A future SQLite execution engine can replace MikroORM
|
|
241
|
+
without changing the `typedSheetsOrm.em.fork()` workflow or mapping
|
|
242
|
+
declarations.
|
|
243
|
+
|
|
244
|
+
## Runtime requirement
|
|
245
|
+
|
|
246
|
+
The current adapter uses MikroORM 7's Node SQLite dialect, which requires Node
|
|
247
|
+
22.17 or later. Node's built-in SQLite API is still marked experimental; that
|
|
248
|
+
warning is expected in the focused adapter tests.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Hikoutei Quick Start
|
|
2
|
+
|
|
3
|
+
The project is called Hikoutei and is currently published on npm as
|
|
4
|
+
`hikoutei`.
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
npm install hikoutei @mikro-orm/core @mikro-orm/sql
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The MikroORM packages are optional peer dependencies of the root package. They
|
|
13
|
+
are required only when the MikroORM persistence adapter is used.
|
|
14
|
+
|
|
15
|
+
## Entity lifecycle
|
|
16
|
+
|
|
17
|
+
The public API is entity-oriented: load an entity, mutate it, and flush the
|
|
18
|
+
unit of work.
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { defineEntity, p } from "@mikro-orm/sql";
|
|
22
|
+
import { defineTypedSheetsEntityMapping } from "hikoutei/orm";
|
|
23
|
+
import { initializeMappedTypedSheetsOrm } from "hikoutei/mikro-orm";
|
|
24
|
+
|
|
25
|
+
const OrderSchema = defineEntity({
|
|
26
|
+
name: "Order",
|
|
27
|
+
tableName: "orders",
|
|
28
|
+
properties: {
|
|
29
|
+
id: p.string().primary(),
|
|
30
|
+
status: p.string(),
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
class Order extends OrderSchema.class {
|
|
35
|
+
declare id: string;
|
|
36
|
+
declare status: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
OrderSchema.setClass(Order);
|
|
40
|
+
|
|
41
|
+
const orderMapping = defineTypedSheetsEntityMapping({
|
|
42
|
+
entity: Order,
|
|
43
|
+
logicalSheetId: "orders",
|
|
44
|
+
primaryKey: "id",
|
|
45
|
+
businessKey: "id",
|
|
46
|
+
schemaVersion: 1,
|
|
47
|
+
fields: [
|
|
48
|
+
{
|
|
49
|
+
property: "id",
|
|
50
|
+
cellKind: "string",
|
|
51
|
+
ownership: "user",
|
|
52
|
+
required: true,
|
|
53
|
+
unique: true,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
property: "status",
|
|
57
|
+
cellKind: "string",
|
|
58
|
+
ownership: "user",
|
|
59
|
+
required: true,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
projections: [
|
|
63
|
+
{
|
|
64
|
+
physicalSheetId: "orders-system",
|
|
65
|
+
spreadsheetId: process.env.GOOGLE_SHEET_ID!,
|
|
66
|
+
tabName: "Orders_System",
|
|
67
|
+
registeredRange: "A:C",
|
|
68
|
+
projection: "system_state",
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const typedSheetsOrm = await initializeMappedTypedSheetsOrm({
|
|
74
|
+
dbName: "./hikoutei.sqlite",
|
|
75
|
+
entities: [Order],
|
|
76
|
+
mappings: [orderMapping],
|
|
77
|
+
writer: { writerId: "orders-service" },
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const em = typedSheetsOrm.em.fork();
|
|
81
|
+
const order = em.create(Order, { id: "o-1", status: "pending" });
|
|
82
|
+
em.persist(order);
|
|
83
|
+
await em.flush();
|
|
84
|
+
|
|
85
|
+
const loaded = await em.findOne(Order, { id: "o-1" });
|
|
86
|
+
if (loaded !== null) {
|
|
87
|
+
loaded.status = "paid";
|
|
88
|
+
await em.flush();
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The current manager supports `fork()`, `create()`, `find()`, `findOne()`,
|
|
93
|
+
`persist()`, `remove()`, `flush()`, `transactional()`, and `clear()`.
|
|
94
|
+
Reads are served from SQLite and do not wait for a Google Sheets request.
|
|
95
|
+
|
|
96
|
+
## Gateway setup
|
|
97
|
+
|
|
98
|
+
Deploy [`apps-script/gateway/Code.gs`](../apps-script/gateway/Code.gs) as a
|
|
99
|
+
Google Apps Script Web App. Initialize the local SQLite registry first, then
|
|
100
|
+
use `provisionRegisteredSyncSheets()` through the operation-backed gateway.
|
|
101
|
+
|
|
102
|
+
Keep the shared gateway secret on the server and out of browser code and Git.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# SQL Layer Plan
|
|
2
|
+
|
|
3
|
+
## Positioning
|
|
4
|
+
|
|
5
|
+
The SQL layer should sit above the existing repository/core layer.
|
|
6
|
+
|
|
7
|
+
It should not turn Google Sheets into a general database. The goal is a small, predictable SQL subset for MVPs, internal tools, and low-traffic admin workflows.
|
|
8
|
+
|
|
9
|
+
## Initial SQL Subset
|
|
10
|
+
|
|
11
|
+
Candidate first subset:
|
|
12
|
+
|
|
13
|
+
```sql
|
|
14
|
+
SELECT * FROM Users;
|
|
15
|
+
SELECT * FROM Users WHERE id = ?;
|
|
16
|
+
INSERT INTO Users (id, email, active, _version) VALUES (?, ?, ?, ?);
|
|
17
|
+
UPDATE Users SET active = ? WHERE id = ?;
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Required Constraints
|
|
21
|
+
|
|
22
|
+
- One sheet tab maps to one table.
|
|
23
|
+
- Table schema still comes from typed column definitions.
|
|
24
|
+
- Header drift still fails.
|
|
25
|
+
- `_version` optimistic locking remains the write-safety mechanism.
|
|
26
|
+
- SQL parsing should call repository operations instead of bypassing them.
|
|
27
|
+
|
|
28
|
+
## Out of Scope for the First SQL Version
|
|
29
|
+
|
|
30
|
+
- Joins.
|
|
31
|
+
- Transactions.
|
|
32
|
+
- Multi-row atomic writes.
|
|
33
|
+
- Aggregations.
|
|
34
|
+
- Nested queries.
|
|
35
|
+
- Arbitrary expressions.
|
|
36
|
+
- Cross-spreadsheet queries.
|
|
37
|
+
|
|
38
|
+
## Implementation Direction
|
|
39
|
+
|
|
40
|
+
The SQL layer should be a separate package or module above core:
|
|
41
|
+
|
|
42
|
+
```txt
|
|
43
|
+
sql query
|
|
44
|
+
-> parser
|
|
45
|
+
-> typed table registry
|
|
46
|
+
-> repository operation
|
|
47
|
+
-> adapter
|
|
48
|
+
-> Google Sheets API
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This keeps schema drift detection, parsing, duplicate key checks, and optimistic locking in one place.
|
|
52
|
+
|
|
53
|
+
## 한국어
|
|
54
|
+
|
|
55
|
+
SQL layer는 현재 repository/core layer 위에 올라가는 구조가 맞습니다.
|
|
56
|
+
|
|
57
|
+
목표는 Google Sheets를 범용 DB로 만드는 것이 아니라, MVP/internal tool/low-traffic admin을 위한 작고 예측 가능한 SQL subset을 제공하는 것입니다.
|
|
58
|
+
|
|
59
|
+
초기 SQL은 `SELECT`, key 기반 `WHERE`, `INSERT`, 단순 `UPDATE` 정도로 제한하는 것이 좋습니다. Join, transaction, multi-row atomic write는 후순위입니다.
|