hikoutei 0.3.0 → 0.3.1
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 +13 -21
- package/README.ko.md +14 -22
- package/README.md +25 -29
- package/dist/adapter/persistence/contracts/sql.d.ts +16 -2
- package/dist/adapter/persistence/contracts/sql.d.ts.map +1 -1
- package/dist/adapter/persistence/contracts/sql.js +11 -1
- package/dist/adapter/persistence/contracts/sql.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.js +40 -14
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts +2 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js +23 -8
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +13 -4
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +12 -2
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.d.ts +21 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js +59 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.d.ts +14 -13
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js +43 -64
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js +4 -2
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +1 -2
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +61 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +186 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts +56 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +275 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +11 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +345 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.d.ts +65 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js +51 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.d.ts +36 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.js +126 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts +11 -2
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js +39 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +46 -35
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +22 -4
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +2 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +47 -54
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +6 -30
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +79 -22
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +5 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +19 -4
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +5 -6
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +15 -19
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +44 -30
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts +3 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.js +10 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.js.map +1 -0
- package/dist/api/Hikoutei.d.ts +17 -50
- package/dist/api/Hikoutei.d.ts.map +1 -1
- package/dist/api/Hikoutei.js +46 -105
- package/dist/api/Hikoutei.js.map +1 -1
- package/dist/api/entity.d.ts +9 -10
- package/dist/api/entity.d.ts.map +1 -1
- package/dist/api/entity.js +20 -26
- package/dist/api/entity.js.map +1 -1
- package/dist/api/errors.d.ts +0 -6
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +0 -6
- package/dist/api/errors.js.map +1 -1
- package/dist/api/index.d.ts +4 -4
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/internalEntityManager.d.ts.map +1 -1
- package/dist/api/internalEntityManager.js +33 -19
- package/dist/api/internalEntityManager.js.map +1 -1
- package/dist/application/orm/mapping/contracts.d.ts +16 -6
- package/dist/application/orm/mapping/contracts.d.ts.map +1 -1
- package/dist/application/orm/mapping/definition.d.ts.map +1 -1
- package/dist/application/orm/mapping/definition.js +47 -8
- package/dist/application/orm/mapping/definition.js.map +1 -1
- package/dist/application/orm/mapping/identity.js +1 -1
- package/dist/application/orm/mapping/identity.js.map +1 -1
- package/dist/application/orm/mapping/projection.d.ts.map +1 -1
- package/dist/application/orm/mapping/projection.js +10 -2
- package/dist/application/orm/mapping/projection.js.map +1 -1
- package/dist/application/orm/mapping/values.d.ts.map +1 -1
- package/dist/application/orm/mapping/values.js +5 -35
- package/dist/application/orm/mapping/values.js.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +3 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.js +4 -3
- package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +2 -1
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -1
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts +3 -1
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts.map +1 -1
- package/dist/application/orm/persistence/projection/projectionEffects.js +14 -16
- package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -1
- package/dist/application/orm/persistence/scalar/unitOfWork.d.ts +6 -6
- package/dist/application/orm/persistence/scalar/unitOfWork.d.ts.map +1 -1
- package/dist/application/orm/persistence/scalar/unitOfWork.js +28 -28
- package/dist/application/orm/persistence/scalar/unitOfWork.js.map +1 -1
- package/dist/application/orm/persistence/support/businessKeys.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/businessKeys.js +6 -24
- package/dist/application/orm/persistence/support/businessKeys.js.map +1 -1
- package/dist/application/orm/persistence/support/canonicalState.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/canonicalState.js +9 -25
- package/dist/application/orm/persistence/support/canonicalState.js.map +1 -1
- package/dist/application/orm/persistence/support/contracts.d.ts +0 -57
- package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/contracts.js +0 -68
- package/dist/application/orm/persistence/support/contracts.js.map +1 -1
- package/dist/application/orm/persistence/support/helpers.d.ts +1 -11
- package/dist/application/orm/persistence/support/helpers.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/helpers.js +1 -21
- package/dist/application/orm/persistence/support/helpers.js.map +1 -1
- package/dist/application/sync/gateway/constants.d.ts +2 -1
- package/dist/application/sync/gateway/constants.d.ts.map +1 -1
- package/dist/application/sync/gateway/constants.js +4 -3
- package/dist/application/sync/gateway/constants.js.map +1 -1
- package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -1
- package/dist/application/sync/gateway/syncGateway.js +9 -28
- package/dist/application/sync/gateway/syncGateway.js.map +1 -1
- package/dist/application/sync/gateway/validation.d.ts +5 -0
- package/dist/application/sync/gateway/validation.d.ts.map +1 -1
- package/dist/application/sync/gateway/validation.js +22 -3
- package/dist/application/sync/gateway/validation.js.map +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +3 -23
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +2 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +24 -6
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js +35 -34
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +8 -37
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +2 -2
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts +0 -5
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +3 -10
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +13 -21
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +15 -3
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +1 -10
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +5 -9
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
- package/dist/application/sync/service/SyncPollingSupervisor.d.ts +45 -0
- package/dist/application/sync/service/SyncPollingSupervisor.d.ts.map +1 -0
- package/dist/application/sync/service/SyncPollingSupervisor.js +142 -0
- package/dist/application/sync/service/SyncPollingSupervisor.js.map +1 -0
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts +63 -0
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -0
- package/dist/application/sync/service/SyncServiceBootstrap.js +223 -0
- package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -0
- package/dist/application/sync/service/contracts.d.ts +25 -0
- package/dist/application/sync/service/contracts.d.ts.map +1 -0
- package/dist/application/sync/service/contracts.js +3 -0
- package/dist/application/sync/service/contracts.js.map +1 -0
- package/dist/application/sync/service/errors.d.ts +15 -0
- package/dist/application/sync/service/errors.d.ts.map +1 -0
- package/dist/application/sync/service/errors.js +16 -0
- package/dist/application/sync/service/errors.js.map +1 -0
- package/dist/domain/errors/types.d.ts +1 -1
- package/dist/domain/errors/types.d.ts.map +1 -1
- package/dist/domain/errors/types.js +2 -2
- package/dist/domain/errors/types.js.map +1 -1
- package/dist/domain/evaluate/constants.d.ts +1 -1
- package/dist/domain/evaluate/constants.d.ts.map +1 -1
- package/dist/domain/evaluate/constants.js.map +1 -1
- package/dist/domain/evaluate/preconditions.d.ts.map +1 -1
- package/dist/domain/evaluate/preconditions.js +25 -32
- package/dist/domain/evaluate/preconditions.js.map +1 -1
- package/dist/domain/evaluate/quarantine.js +4 -1
- package/dist/domain/evaluate/quarantine.js.map +1 -1
- package/dist/domain/model/constants.d.ts +48 -0
- package/dist/domain/model/constants.d.ts.map +1 -1
- package/dist/domain/model/constants.js +38 -0
- package/dist/domain/model/constants.js.map +1 -1
- package/dist/domain/model/index.d.ts +2 -2
- package/dist/domain/model/index.d.ts.map +1 -1
- package/dist/domain/model/index.js +1 -1
- package/dist/domain/model/index.js.map +1 -1
- package/dist/domain/model/types.d.ts +13 -10
- package/dist/domain/model/types.d.ts.map +1 -1
- package/dist/infrastructure/storage/constants.d.ts +1 -1
- package/dist/infrastructure/storage/constants.d.ts.map +1 -1
- package/dist/infrastructure/storage/constants.js.map +1 -1
- package/dist/infrastructure/storage/errors.d.ts +2 -2
- package/dist/infrastructure/storage/errors.d.ts.map +1 -1
- package/dist/infrastructure/storage/errors.js +3 -5
- package/dist/infrastructure/storage/errors.js.map +1 -1
- package/dist/infrastructure/storage/index.d.ts +9 -5
- package/dist/infrastructure/storage/index.d.ts.map +1 -1
- package/dist/infrastructure/storage/index.js +3 -1
- package/dist/infrastructure/storage/index.js.map +1 -1
- package/dist/infrastructure/storage/sqlite/migrateSchema.js +9 -4
- package/dist/infrastructure/storage/sqlite/migrateSchema.js.map +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts +9 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +35 -36
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts +8 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js +14 -0
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.js +4 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts +11 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.js +108 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts +36 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js +55 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +22 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationTypes.js +5 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.js +26 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.js +5 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +3 -2
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts +1 -5
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js +3 -43
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +2 -4
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +2 -2
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +20 -10
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +33 -18
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +2 -4
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +6 -2
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +157 -14
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.d.ts +1 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js +14 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +2 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js +4 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts +4 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/shared/writerLease.js +9 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -1
- package/dist/shared/constants.d.ts +4 -4
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/encoding/index.d.ts +1 -0
- package/dist/shared/encoding/index.d.ts.map +1 -1
- package/dist/shared/encoding/index.js +1 -0
- package/dist/shared/encoding/index.js.map +1 -1
- package/dist/shared/encoding/normalizedCell.d.ts +4 -0
- package/dist/shared/encoding/normalizedCell.d.ts.map +1 -0
- package/dist/shared/encoding/normalizedCell.js +29 -0
- package/dist/shared/encoding/normalizedCell.js.map +1 -0
- package/dist/shared/encoding/stableEncode.d.ts +2 -1
- package/dist/shared/encoding/stableEncode.d.ts.map +1 -1
- package/dist/shared/encoding/stableEncode.js +6 -12
- package/dist/shared/encoding/stableEncode.js.map +1 -1
- package/dist/shared/identity/index.d.ts +3 -0
- package/dist/shared/identity/index.d.ts.map +1 -0
- package/dist/shared/identity/index.js +2 -0
- package/dist/shared/identity/index.js.map +1 -0
- package/dist/shared/identity/types.d.ts +41 -0
- package/dist/shared/identity/types.d.ts.map +1 -0
- package/dist/shared/identity/types.js +34 -0
- package/dist/shared/identity/types.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/state/constructors.d.ts +10 -0
- package/dist/shared/state/constructors.d.ts.map +1 -0
- package/dist/shared/state/constructors.js +18 -0
- package/dist/shared/state/constructors.js.map +1 -0
- package/dist/shared/state/index.d.ts +1 -0
- package/dist/shared/state/index.d.ts.map +1 -1
- package/dist/shared/state/index.js +1 -0
- package/dist/shared/state/index.js.map +1 -1
- package/dist/shared/validation.d.ts +2 -0
- package/dist/shared/validation.d.ts.map +1 -1
- package/dist/shared/validation.js +9 -0
- package/dist/shared/validation.js.map +1 -1
- package/docs/architecture.md +108 -103
- package/docs/ci.md +184 -61
- package/docs/mikro-orm-adapter-spike.md +55 -214
- package/docs/quick-start.md +58 -96
- package/docs/write-and-synchronization-flow.md +70 -39
- package/package.json +1 -1
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
*/
|
|
26
26
|
import { createHash } from "node:crypto";
|
|
27
27
|
import { JAVASCRIPT_TYPE_NAMES, NORMALIZED_CELL_KINDS, STABLE_ENCODING_ERROR_CODES, } from "./constants.js";
|
|
28
|
-
import { isJavaScriptType } from "./typeGuards.js";
|
|
28
|
+
import { isJavaScriptType, isRecord } from "./typeGuards.js";
|
|
29
|
+
import { isCanonicalUtcIsoDate } from "../validation.js";
|
|
29
30
|
import { StableEncodingError } from "../../domain/errors/stableEncoding.js";
|
|
30
31
|
/**
|
|
31
32
|
* Encodes a stable value to its canonical byte sequence.
|
|
@@ -69,7 +70,7 @@ function encodeValue(value, chunks) {
|
|
|
69
70
|
encodeArray(value, chunks);
|
|
70
71
|
return;
|
|
71
72
|
}
|
|
72
|
-
if (
|
|
73
|
+
if (isRecord(value)) {
|
|
73
74
|
encodeObject(value, chunks);
|
|
74
75
|
return;
|
|
75
76
|
}
|
|
@@ -92,7 +93,7 @@ function encodeString(value, chunks) {
|
|
|
92
93
|
chunks.push(lengthPrefix, bytes);
|
|
93
94
|
}
|
|
94
95
|
function encodeDate(iso, chunks) {
|
|
95
|
-
if (!
|
|
96
|
+
if (!isCanonicalUtcIsoDate(iso)) {
|
|
96
97
|
throw new StableEncodingError(STABLE_ENCODING_ERROR_CODES.INVALID_DATE_FORMAT, `stable_encode: invalid date format: ${iso}`);
|
|
97
98
|
}
|
|
98
99
|
const bytes = textEncode(iso);
|
|
@@ -147,14 +148,11 @@ function shortestRoundTripDecimal(value) {
|
|
|
147
148
|
return `e${expSign}${digit}`;
|
|
148
149
|
}).replace(/e\+/, "e");
|
|
149
150
|
}
|
|
150
|
-
const DATE_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
|
151
151
|
function isDateValue(value) {
|
|
152
|
-
return (
|
|
153
|
-
value !== null &&
|
|
154
|
-
!Array.isArray(value) &&
|
|
152
|
+
return (isRecord(value) &&
|
|
155
153
|
Object.keys(value).length === 2 &&
|
|
156
154
|
value.kind === NORMALIZED_CELL_KINDS.DATE &&
|
|
157
|
-
|
|
155
|
+
typeof value.value === "string");
|
|
158
156
|
}
|
|
159
157
|
/** Rejects unpaired UTF-16 surrogates instead of letting TextEncoder replace them. */
|
|
160
158
|
function normalizeScalarString(value) {
|
|
@@ -174,10 +172,6 @@ function normalizeScalarString(value) {
|
|
|
174
172
|
}
|
|
175
173
|
return value.normalize("NFC");
|
|
176
174
|
}
|
|
177
|
-
function isCanonicalDate(value) {
|
|
178
|
-
const timestamp = Date.parse(value);
|
|
179
|
-
return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;
|
|
180
|
-
}
|
|
181
175
|
function ascii(s) {
|
|
182
176
|
return textEncode(s);
|
|
183
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stableEncode.js","sourceRoot":"","sources":["../../../src/shared/encoding/stableEncode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"stableEncode.js","sourceRoot":"","sources":["../../../src/shared/encoding/stableEncode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { HikouteiBusinessKeyHash, HikouteiCanonicalEntityId, HikouteiClaimToken, HikouteiEffectDedupeKey, HikouteiEffectId, HikouteiEntityId, HikouteiPayloadHash, HikouteiPhysicalSheetId, HikouteiRequestId, HikouteiRevision, HikouteiRowBindingId, HikouteiSnapshotHash, HikouteiStableHash, HikouteiVisibleHash, SemanticRevision, SemanticString, } from "./types.js";
|
|
2
|
+
export { isSemanticRevision, requireHash, requireSemanticRevision, requireSemanticString, } from "./types.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/identity/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/identity/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal semantic brands for identifiers and evidence values.
|
|
3
|
+
*
|
|
4
|
+
* These brands prevent unrelated IDs and hashes from being mixed inside the
|
|
5
|
+
* sync/storage engine while remaining plain strings at SQLite and JSON
|
|
6
|
+
* boundaries. They are intentionally not exported from the public root API.
|
|
7
|
+
*/
|
|
8
|
+
declare const semanticStringBrand: unique symbol;
|
|
9
|
+
declare const semanticNumberBrand: unique symbol;
|
|
10
|
+
/** A string carrying a compile-time semantic label. */
|
|
11
|
+
export type SemanticString<Label extends string> = string & {
|
|
12
|
+
readonly [semanticStringBrand]: Label;
|
|
13
|
+
};
|
|
14
|
+
/** A non-negative safe integer carrying a compile-time semantic label. */
|
|
15
|
+
export type SemanticRevision<Label extends string = "revision"> = number & {
|
|
16
|
+
readonly [semanticNumberBrand]: Label;
|
|
17
|
+
};
|
|
18
|
+
export type HikouteiEntityId = SemanticString<"entity-id">;
|
|
19
|
+
export type HikouteiCanonicalEntityId = SemanticString<"canonical-entity-id">;
|
|
20
|
+
export type HikouteiRowBindingId = SemanticString<"row-binding-id">;
|
|
21
|
+
export type HikouteiEffectId = SemanticString<"effect-id">;
|
|
22
|
+
export type HikouteiEffectDedupeKey = SemanticString<"effect-dedupe-key">;
|
|
23
|
+
export type HikouteiPhysicalSheetId = SemanticString<"physical-sheet-id">;
|
|
24
|
+
export type HikouteiStableHash = SemanticString<"stable-hash">;
|
|
25
|
+
export type HikouteiBusinessKeyHash = SemanticString<"business-key-hash">;
|
|
26
|
+
export type HikouteiPayloadHash = SemanticString<"payload-hash">;
|
|
27
|
+
export type HikouteiVisibleHash = SemanticString<"visible-hash">;
|
|
28
|
+
export type HikouteiSnapshotHash = SemanticString<"snapshot-hash">;
|
|
29
|
+
export type HikouteiRequestId = SemanticString<"request-id">;
|
|
30
|
+
export type HikouteiClaimToken = SemanticString<"claim-token">;
|
|
31
|
+
export type HikouteiRevision = SemanticRevision;
|
|
32
|
+
/** Promotes a validated non-empty string to one semantic string type. */
|
|
33
|
+
export declare function requireSemanticString<Label extends string>(value: unknown, label: string): SemanticString<Label>;
|
|
34
|
+
/** Promotes a validated non-negative safe integer to a revision type. */
|
|
35
|
+
export declare function requireSemanticRevision<Label extends string = "revision">(value: unknown, label?: string): SemanticRevision<Label>;
|
|
36
|
+
/** Checks whether an unknown value is a non-negative safe integer revision. */
|
|
37
|
+
export declare function isSemanticRevision(value: unknown): value is HikouteiRevision;
|
|
38
|
+
/** Promotes a stable hash after checking the representation used by storage. */
|
|
39
|
+
export declare function requireHash<Label extends string>(value: unknown, label: string): SemanticString<Label>;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/identity/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,CAAC,MAAM,mBAAmB,EAAE,OAAO,MAAM,CAAC;AACjD,OAAO,CAAC,MAAM,mBAAmB,EAAE,OAAO,MAAM,CAAC;AAEjD,uDAAuD;AACvD,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,MAAM,IAAI,MAAM,GAAG;IAC1D,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC;CACvC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,MAAM,GAAG,UAAU,IAAI,MAAM,GAAG;IACzE,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AAC3D,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAC9E,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AAC3D,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC1E,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAC/D,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AACjE,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;AACnE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAC/D,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEhD,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,KAAK,SAAS,MAAM,EACxD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,cAAc,CAAC,KAAK,CAAC,CAKvB;AAED,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,MAAM,GAAG,UAAU,EACvE,KAAK,EAAE,OAAO,EACd,KAAK,SAAa,GACjB,gBAAgB,CAAC,KAAK,CAAC,CAKzB;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,SAAS,MAAM,EAC9C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,cAAc,CAAC,KAAK,CAAC,CAKvB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal semantic brands for identifiers and evidence values.
|
|
3
|
+
*
|
|
4
|
+
* These brands prevent unrelated IDs and hashes from being mixed inside the
|
|
5
|
+
* sync/storage engine while remaining plain strings at SQLite and JSON
|
|
6
|
+
* boundaries. They are intentionally not exported from the public root API.
|
|
7
|
+
*/
|
|
8
|
+
import { isNonEmptyString, isNonNegativeSafeInteger, } from "../validation.js";
|
|
9
|
+
/** Promotes a validated non-empty string to one semantic string type. */
|
|
10
|
+
export function requireSemanticString(value, label) {
|
|
11
|
+
if (!isNonEmptyString(value)) {
|
|
12
|
+
throw new TypeError(`${label} must be a non-empty string`);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
/** Promotes a validated non-negative safe integer to a revision type. */
|
|
17
|
+
export function requireSemanticRevision(value, label = "revision") {
|
|
18
|
+
if (!isNonNegativeSafeInteger(value)) {
|
|
19
|
+
throw new TypeError(`${label} must be a non-negative safe integer`);
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
/** Checks whether an unknown value is a non-negative safe integer revision. */
|
|
24
|
+
export function isSemanticRevision(value) {
|
|
25
|
+
return isNonNegativeSafeInteger(value);
|
|
26
|
+
}
|
|
27
|
+
/** Promotes a stable hash after checking the representation used by storage. */
|
|
28
|
+
export function requireHash(value, label) {
|
|
29
|
+
if (typeof value !== "string" || !/^[0-9a-f]{64}$/i.test(value)) {
|
|
30
|
+
throw new TypeError(`${label} must be a SHA-256 hexadecimal hash`);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/identity/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AA8B1B,yEAAyE;AACzE,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,KAAa;IAEb,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAA8B,CAAC;AACxC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CACrC,KAAc,EACd,KAAK,GAAG,UAAU;IAElB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CACzB,KAAc,EACd,KAAa;IAEb,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,qCAAqC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAA8B,CAAC;AACxC,CAAC"}
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Shared kernel contracts used by domain, application, and adapters. */
|
|
2
2
|
export * from "./constants.js";
|
|
3
3
|
export * from "./encoding/index.js";
|
|
4
|
+
export * from "./identity/index.js";
|
|
4
5
|
export * from "./state/index.js";
|
|
5
6
|
export * from "./validation.js";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
package/dist/shared/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Shared kernel contracts used by domain, application, and adapters. */
|
|
2
2
|
export * from "./constants.js";
|
|
3
3
|
export * from "./encoding/index.js";
|
|
4
|
+
export * from "./identity/index.js";
|
|
4
5
|
export * from "./state/index.js";
|
|
5
6
|
export * from "./validation.js";
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/shared/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Applicability, Presence } from "./types.js";
|
|
2
|
+
/** Wraps a value in an explicit present state. */
|
|
3
|
+
export declare function presentValue<T>(value: T): Presence<T>;
|
|
4
|
+
/** Represents a value that is explicitly absent. */
|
|
5
|
+
export declare function absentValue<T>(): Presence<T>;
|
|
6
|
+
/** Wraps a value in an explicit applicable state. */
|
|
7
|
+
export declare function applicableValue<T>(value: T): Applicability<T>;
|
|
8
|
+
/** Represents a value that is not applicable to the current operation. */
|
|
9
|
+
export declare function notApplicableValue<T>(): Applicability<T>;
|
|
10
|
+
//# sourceMappingURL=constructors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../../src/shared/state/constructors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1D,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAErD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAE5C;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAE7D;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAExD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { APPLICABILITY_KINDS, PRESENCE_KINDS } from "./constants.js";
|
|
2
|
+
/** Wraps a value in an explicit present state. */
|
|
3
|
+
export function presentValue(value) {
|
|
4
|
+
return { kind: PRESENCE_KINDS.PRESENT, value };
|
|
5
|
+
}
|
|
6
|
+
/** Represents a value that is explicitly absent. */
|
|
7
|
+
export function absentValue() {
|
|
8
|
+
return { kind: PRESENCE_KINDS.ABSENT };
|
|
9
|
+
}
|
|
10
|
+
/** Wraps a value in an explicit applicable state. */
|
|
11
|
+
export function applicableValue(value) {
|
|
12
|
+
return { kind: APPLICABILITY_KINDS.APPLICABLE, value };
|
|
13
|
+
}
|
|
14
|
+
/** Represents a value that is not applicable to the current operation. */
|
|
15
|
+
export function notApplicableValue() {
|
|
16
|
+
return { kind: APPLICABILITY_KINDS.NOT_APPLICABLE };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=constructors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../src/shared/state/constructors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrE,kDAAkD;AAClD,MAAM,UAAU,YAAY,CAAI,KAAQ;IACtC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,WAAW;IACzB,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,eAAe,CAAI,KAAQ;IACzC,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,cAAc,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { applicableValue, absentValue, notApplicableValue, presentValue, } from "./constructors.js";
|
|
1
2
|
export { APPLICABILITY_KINDS, LOOKUP_RESULT_KINDS, PRESENCE_KINDS, } from "./constants.js";
|
|
2
3
|
export type { Applicability, LookupResult, Presence } from "./types.js";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,gBAAgB,CAAC"}
|
|
@@ -4,6 +4,8 @@ export declare function isNonEmptyString(value: unknown): value is string;
|
|
|
4
4
|
export declare function isPositiveSafeInteger(value: unknown): value is number;
|
|
5
5
|
/** Checks whether an unknown value is a non-negative safe integer. */
|
|
6
6
|
export declare function isNonNegativeSafeInteger(value: unknown): value is number;
|
|
7
|
+
/** Checks whether a string is the canonical UTC ISO representation of a date. */
|
|
8
|
+
export declare function isCanonicalUtcIsoDate(value: unknown): value is string;
|
|
7
9
|
/** Checks whether a list contains at least one item. */
|
|
8
10
|
export declare function isNonEmptyList<T>(values: readonly T[]): boolean;
|
|
9
11
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"AASA,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAKhE;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAMrE;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAMxE;AAED,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,OAAO,CAE/D"}
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"AASA,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAKhE;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAMrE;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAMxE;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CASrE;AAED,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,OAAO,CAE/D"}
|
|
@@ -18,6 +18,15 @@ export function isNonNegativeSafeInteger(value) {
|
|
|
18
18
|
Number.isSafeInteger(value) &&
|
|
19
19
|
value >= NON_NEGATIVE_SAFE_INTEGER_MINIMUM);
|
|
20
20
|
}
|
|
21
|
+
/** Checks whether a string is the canonical UTC ISO representation of a date. */
|
|
22
|
+
export function isCanonicalUtcIsoDate(value) {
|
|
23
|
+
if (!isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.STRING) ||
|
|
24
|
+
!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const timestamp = Date.parse(value);
|
|
28
|
+
return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;
|
|
29
|
+
}
|
|
21
30
|
/** Checks whether a list contains at least one item. */
|
|
22
31
|
export function isNonEmptyList(values) {
|
|
23
32
|
return values.length !== EMPTY_ARRAY_LENGTH_ZERO;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,iCAAiC,EACjC,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,6DAA6D;AAC7D,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,CACL,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrD,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAC1C,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CACL,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B,KAAK,IAAI,6BAA6B,CACvC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,CACL,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B,KAAK,IAAI,iCAAiC,CAC3C,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,cAAc,CAAI,MAAoB;IACpD,OAAO,MAAM,CAAC,MAAM,KAAK,uBAAuB,CAAC;AACnD,CAAC"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,iCAAiC,EACjC,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,6DAA6D;AAC7D,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,CACL,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrD,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAC1C,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CACL,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B,KAAK,IAAI,6BAA6B,CACvC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,CACL,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrD,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B,KAAK,IAAI,iCAAiC,CAC3C,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IACE,CAAC,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACtD,CAAC,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,EAC5D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AACnF,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,cAAc,CAAI,MAAoB;IACpD,OAAO,MAAM,CAAC,MAAM,KAAK,uBAAuB,CAAC;AACnD,CAAC"}
|
package/docs/architecture.md
CHANGED
|
@@ -1,148 +1,153 @@
|
|
|
1
1
|
# Hikoutei Architecture
|
|
2
2
|
|
|
3
3
|
Hikoutei owns a local SQLite entity store and exposes Google Sheets as an
|
|
4
|
-
asynchronous human-facing projection.
|
|
5
|
-
|
|
4
|
+
asynchronous human-facing projection. SQLite is the authority; Sheets is an
|
|
5
|
+
internal service-side projection and human input surface.
|
|
6
6
|
|
|
7
|
-
>
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
> target design foundation, not a complete end-to-end public runtime yet. The
|
|
11
|
-
> root public API is provider-neutral; MikroORM is only the current adapter and
|
|
12
|
-
> Prisma is a future provider target.
|
|
7
|
+
> The root package API is ORM-only. Sheet synchronization is implemented inside
|
|
8
|
+
> `src`, but its bootstrap, gateway, worker, and storage contracts are not root
|
|
9
|
+
> exports.
|
|
13
10
|
|
|
14
11
|
## System shape
|
|
15
12
|
|
|
16
13
|
```text
|
|
17
|
-
Application
|
|
18
|
-
└─
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
├─
|
|
24
|
-
├─
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
└─ Google Sheets projections
|
|
14
|
+
Application code
|
|
15
|
+
└─ hikoutei root API
|
|
16
|
+
└─ EntityManager
|
|
17
|
+
└─ SQLite entity tables
|
|
18
|
+
└─ [internal sync service in the same process]
|
|
19
|
+
├─ canonical sync state
|
|
20
|
+
├─ durable Sheet effect outbox
|
|
21
|
+
├─ outbound effect worker
|
|
22
|
+
├─ User_Input polling
|
|
23
|
+
└─ Apps Script gateway
|
|
24
|
+
└─ Google Sheets projections
|
|
29
25
|
```
|
|
30
26
|
|
|
31
|
-
|
|
27
|
+
The internal service reuses the same MikroORM SQLite adapter and transaction
|
|
28
|
+
boundary as the entity manager. A future deployment can extract the worker
|
|
29
|
+
process without changing the root entity lifecycle contract.
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
## Source boundaries
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
```text
|
|
34
|
+
src/domain/ pure normalization/evaluation/conflict rules
|
|
35
|
+
src/application/orm/ public ORM facade and mapped flush planning
|
|
36
|
+
src/application/sync/ internal sync engine and service bootstrap
|
|
37
|
+
src/adapter/persistence/ SQLite/MikroORM implementation
|
|
38
|
+
src/adapter/sheets/ Apps Script transport and operation adapter
|
|
39
|
+
src/infrastructure/storage/ canonical, observation, resolution, outbox state
|
|
40
|
+
src/api/ root-facing entity and EntityManager facade
|
|
41
|
+
src/index.ts root public barrel only
|
|
42
|
+
apps-script/gateway/ deployable Apps Script code
|
|
43
|
+
```
|
|
38
44
|
|
|
39
|
-
|
|
40
|
-
`
|
|
41
|
-
|
|
42
|
-
owns identity maps, snapshots, dirty diffs, and flush semantics; the current
|
|
43
|
-
MikroORM adapter materializes those plans and a future Prisma adapter must use
|
|
44
|
-
the same provider contract.
|
|
45
|
+
`src` does not mean public. The only application-facing package entrypoint is
|
|
46
|
+
`src/index.ts`; package subpaths for providers, gateway operations, polling,
|
|
47
|
+
and sync state are not part of the contract.
|
|
45
48
|
|
|
46
|
-
|
|
49
|
+
## Root public API
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
SQLite transaction commits the entity mutation together with the sync work
|
|
50
|
-
needed to project it to Sheets.
|
|
51
|
+
Applications define scalar entities and open a local SQLite runtime:
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
provider-specific query operators, lazy loading, and cascade persistence are
|
|
55
|
-
out of scope for this release.
|
|
53
|
+
```ts
|
|
54
|
+
import { createTypedSheets, defineTypedSheetsEntity } from "hikoutei";
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
const User = defineTypedSheetsEntity({
|
|
57
|
+
name: "User",
|
|
58
|
+
tableName: "users",
|
|
59
|
+
properties: {
|
|
60
|
+
id: { type: "string", primary: true },
|
|
61
|
+
name: { type: "string" },
|
|
62
|
+
},
|
|
63
|
+
});
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
const hikoutei = await createTypedSheets({
|
|
66
|
+
dbName: "./hikoutei.sqlite",
|
|
67
|
+
entities: [User],
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const em = hikoutei.em.fork();
|
|
71
|
+
const user = em.create(User, { id: "u1", name: "Ada" });
|
|
72
|
+
em.persist(user);
|
|
73
|
+
await em.flush();
|
|
74
|
+
```
|
|
62
75
|
|
|
63
|
-
The
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
The public surface contains entity definition, runtime creation, and the
|
|
77
|
+
request-local `EntityManager` lifecycle: `fork()`, `create()`, `find()`,
|
|
78
|
+
`findOne()`, `persist()`, `remove()`, `flush()`, and `transactional()`.
|
|
79
|
+
MikroORM, raw SQL, gateway clients, Sheet routes, provisioning, polling, and
|
|
80
|
+
outbox controls are internal.
|
|
67
81
|
|
|
68
|
-
|
|
82
|
+
## SQLite authority
|
|
69
83
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
evaluate intentional human changes.
|
|
84
|
+
Business entity tables are the authoritative application data. Normal reads
|
|
85
|
+
always come from SQLite and never from a Sheet. The public local runtime opens
|
|
86
|
+
entity tables only and does not contact Google Sheets or create sync tables.
|
|
74
87
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
decision and two mutually exclusive controls:
|
|
88
|
+
When the internal sync service is active, its mapped flush coordinator extends
|
|
89
|
+
the same SQLite transaction with:
|
|
78
90
|
|
|
79
91
|
```text
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
entity mutation
|
|
93
|
+
canonical sync state
|
|
94
|
+
projection registry/state
|
|
95
|
+
Sheet effect outbox
|
|
82
96
|
```
|
|
83
97
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
After a successful resolution, SQLite records the result first and a durable
|
|
88
|
-
outbox effect removes the resolved row from the Conflict projection. The
|
|
89
|
-
projection contract is designed now; global registration and end-to-end
|
|
90
|
-
checkbox consumption are still pending implementation.
|
|
98
|
+
The service-side configuration supplies projection routes, spreadsheet identity,
|
|
99
|
+
and user-owned fields. Those values are not entity metadata or public ORM
|
|
100
|
+
options.
|
|
91
101
|
|
|
92
|
-
##
|
|
102
|
+
## Google Sheets projection
|
|
93
103
|
|
|
94
|
-
The
|
|
104
|
+
The internal service provisions and validates registered projection tabs before
|
|
105
|
+
starting delivery. It owns the signed Apps Script client, effect worker,
|
|
106
|
+
response-loss recovery, reconciliation, and User_Input polling.
|
|
107
|
+
|
|
108
|
+
The application does not call Sheet operations. A successful public `flush()`
|
|
109
|
+
means that the local SQLite transaction committed. It does not mean that a
|
|
110
|
+
remote Sheet write has completed.
|
|
111
|
+
|
|
112
|
+
`System_State` is materialized from canonical SQLite state. `User_Input` is
|
|
113
|
+
observed by the internal polling loop, evaluated with ownership and field-level
|
|
114
|
+
compare-and-set rules, and then committed back to SQLite. Stale, conflicting,
|
|
115
|
+
and malformed input is recorded in SQLite rather than silently overwriting the
|
|
116
|
+
entity table.
|
|
117
|
+
|
|
118
|
+
## Transaction and lifecycle boundary
|
|
95
119
|
|
|
96
120
|
```text
|
|
97
121
|
em.persist(entity) / em.remove(entity)
|
|
98
122
|
│
|
|
99
123
|
▼
|
|
100
|
-
SQLite transaction
|
|
101
|
-
├─
|
|
102
|
-
├─
|
|
124
|
+
SQLite transaction (internal sync service mode)
|
|
125
|
+
├─ entity table
|
|
126
|
+
├─ canonical state and conflict evidence
|
|
103
127
|
└─ durable Sheet effect outbox
|
|
104
128
|
│
|
|
105
129
|
▼
|
|
106
|
-
|
|
107
|
-
├─
|
|
108
|
-
├─
|
|
109
|
-
|
|
110
|
-
└─ [planned] poll and apply Conflict decisions
|
|
130
|
+
internal outbound effect supervisor
|
|
131
|
+
├─ claim leases and send signed operations
|
|
132
|
+
├─ retry recoverable failures
|
|
133
|
+
└─ reconcile remote drift
|
|
111
134
|
│
|
|
112
135
|
▼
|
|
113
|
-
Google Sheets
|
|
136
|
+
Apps Script gateway ──▶ Google Sheets
|
|
137
|
+
|
|
138
|
+
internal User_Input polling
|
|
139
|
+
├─ read registered projections
|
|
140
|
+
├─ evaluate ownership/revisions/CAS
|
|
141
|
+
└─ persist accepted observations and entity mutations in SQLite
|
|
114
142
|
```
|
|
115
143
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
separate: `createTypedSheets()` is local-only and `setupSheets()` is the
|
|
120
|
-
explicit external setup call.
|
|
121
|
-
|
|
122
|
-
## Worker responsibilities
|
|
123
|
-
|
|
124
|
-
The initial inbound source is polling. The current MikroORM provider exposes a
|
|
125
|
-
worker-side one-pass polling entrypoint that observes `User_Input`, validates
|
|
126
|
-
row identity and cells, evaluates field revisions, and persists accepted rows
|
|
127
|
-
through the observation writer and mapped entity mutation transaction.
|
|
128
|
-
Every remote projection is addressed through its registered visible business-key
|
|
129
|
-
column (normally `id`), which must be required and unique in SQLite. Snapshot
|
|
130
|
-
reads never assign or scan Developer Metadata. An unknown or duplicated business
|
|
131
|
-
key is quarantined as invalid rather than being matched to a different entity.
|
|
132
|
-
The Sheet owner should treat this identity column as immutable/protected: a
|
|
133
|
-
polling-only runtime cannot prove which old row a manually changed key came from
|
|
134
|
-
when the key is changed to another existing entity.
|
|
135
|
-
`onEdit` can be added later as an optional lower-latency observation source, but
|
|
136
|
-
it must enter the same evaluator and SQLite writer boundary. Long-running loop
|
|
137
|
-
ownership and Conflict checkbox consumption remain worker follow-up work.
|
|
138
|
-
|
|
139
|
-
The worker claims leases, sends signed gateway operations, retries recoverable
|
|
140
|
-
failures, and reconciles remote drift. The Apps Script gateway performs only
|
|
141
|
-
the signed, range-constrained Sheet operation; it does not choose conflict
|
|
142
|
-
winners or own canonical state.
|
|
144
|
+
The service bootstrap starts provisioning, outbound delivery, and inbound polling
|
|
145
|
+
as one internal runtime. Shutdown stops polling first, waits for remote calls,
|
|
146
|
+
stops the outbound supervisor, and only then closes SQLite.
|
|
143
147
|
|
|
144
148
|
## Design limits
|
|
145
149
|
|
|
146
150
|
Hikoutei targets one local SQLite writer process and low-traffic MVP or internal
|
|
147
151
|
workflows. It is not a distributed transaction coordinator, a general-purpose
|
|
148
|
-
database, or a Google Sheets API replacement.
|
|
152
|
+
database, or a Google Sheets API replacement. Live Google integration remains
|
|
153
|
+
opt-in; normal tests use fake gateways and SQLite fixtures.
|