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,23 @@
|
|
|
1
|
+
import { APPLICABILITY_KINDS, LOOKUP_RESULT_KINDS, PRESENCE_KINDS } from "./constants.js";
|
|
2
|
+
/** A value that is either present or explicitly absent. */
|
|
3
|
+
export type Presence<T> = {
|
|
4
|
+
readonly kind: typeof PRESENCE_KINDS.PRESENT;
|
|
5
|
+
readonly value: T;
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: typeof PRESENCE_KINDS.ABSENT;
|
|
8
|
+
};
|
|
9
|
+
/** A lookup that either found a value or explicitly found no value. */
|
|
10
|
+
export type LookupResult<T> = {
|
|
11
|
+
readonly kind: typeof LOOKUP_RESULT_KINDS.FOUND;
|
|
12
|
+
readonly value: T;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: typeof LOOKUP_RESULT_KINDS.NOT_FOUND;
|
|
15
|
+
};
|
|
16
|
+
/** A value that applies to an operation or is not meaningful for it. */
|
|
17
|
+
export type Applicability<T> = {
|
|
18
|
+
readonly kind: typeof APPLICABILITY_KINDS.APPLICABLE;
|
|
19
|
+
readonly value: T;
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: typeof APPLICABILITY_KINDS.NOT_APPLICABLE;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB,2DAA2D;AAC3D,MAAM,MAAM,QAAQ,CAAC,CAAC,IAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,cAAc,CAAC,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,cAAc,CAAC,MAAM,CAAA;CAAE,CAAC;AAEpD,uEAAuE;AACvE,MAAM,MAAM,YAAY,CAAC,CAAC,IACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,mBAAmB,CAAC,SAAS,CAAA;CAAE,CAAC;AAE5D,wEAAwE;AACxE,MAAM,MAAM,aAAa,CAAC,CAAC,IACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,mBAAmB,CAAC,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,mBAAmB,CAAC,cAAc,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/state/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Checks whether an unknown value is a non-empty string. */
|
|
2
|
+
export declare function isNonEmptyString(value: unknown): value is string;
|
|
3
|
+
/** Checks whether an unknown value is a positive safe integer. */
|
|
4
|
+
export declare function isPositiveSafeInteger(value: unknown): value is number;
|
|
5
|
+
/** Checks whether an unknown value is a non-negative safe integer. */
|
|
6
|
+
export declare function isNonNegativeSafeInteger(value: unknown): value is number;
|
|
7
|
+
/** Checks whether a list contains at least one item. */
|
|
8
|
+
export declare function isNonEmptyList<T>(values: readonly T[]): boolean;
|
|
9
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EMPTY_ARRAY_LENGTH_ZERO, EMPTY_STRING_LENGTH_ZERO, NON_NEGATIVE_SAFE_INTEGER_MINIMUM, POSITIVE_SAFE_INTEGER_MINIMUM, } from "./constants.js";
|
|
2
|
+
import { JAVASCRIPT_TYPE_NAMES } from "./encoding/constants.js";
|
|
3
|
+
import { isJavaScriptType } from "./encoding/typeGuards.js";
|
|
4
|
+
/** Checks whether an unknown value is a non-empty string. */
|
|
5
|
+
export function isNonEmptyString(value) {
|
|
6
|
+
return (isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.STRING) &&
|
|
7
|
+
value.length !== EMPTY_STRING_LENGTH_ZERO);
|
|
8
|
+
}
|
|
9
|
+
/** Checks whether an unknown value is a positive safe integer. */
|
|
10
|
+
export function isPositiveSafeInteger(value) {
|
|
11
|
+
return (isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.NUMBER) &&
|
|
12
|
+
Number.isSafeInteger(value) &&
|
|
13
|
+
value >= POSITIVE_SAFE_INTEGER_MINIMUM);
|
|
14
|
+
}
|
|
15
|
+
/** Checks whether an unknown value is a non-negative safe integer. */
|
|
16
|
+
export function isNonNegativeSafeInteger(value) {
|
|
17
|
+
return (isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.NUMBER) &&
|
|
18
|
+
Number.isSafeInteger(value) &&
|
|
19
|
+
value >= NON_NEGATIVE_SAFE_INTEGER_MINIMUM);
|
|
20
|
+
}
|
|
21
|
+
/** Checks whether a list contains at least one item. */
|
|
22
|
+
export function isNonEmptyList(values) {
|
|
23
|
+
return values.length !== EMPTY_ARRAY_LENGTH_ZERO;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Hikoutei Architecture
|
|
2
|
+
|
|
3
|
+
Hikoutei separates the local canonical data model from the Google Sheets
|
|
4
|
+
projection. The application server owns the entity lifecycle and SQLite state;
|
|
5
|
+
Google Sheets is updated asynchronously through a thin Apps Script gateway.
|
|
6
|
+
|
|
7
|
+
## System shape
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
Application server
|
|
11
|
+
└─ Hikoutei EntityManager
|
|
12
|
+
└─ replaceable persistence adapter (currently MikroORM)
|
|
13
|
+
└─ SQLite canonical state + durable outbox
|
|
14
|
+
└─ background effect worker
|
|
15
|
+
└─ signed Apps Script operation gateway
|
|
16
|
+
└─ Google Sheets projection
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Responsibilities
|
|
20
|
+
|
|
21
|
+
### Application server
|
|
22
|
+
|
|
23
|
+
The server exposes the application-facing entity API and decides when an
|
|
24
|
+
entity is created, mutated, or removed. It does not treat a successful remote
|
|
25
|
+
HTTP response as the source of truth.
|
|
26
|
+
|
|
27
|
+
### EntityManager and persistence adapter
|
|
28
|
+
|
|
29
|
+
The entity manager follows an entity lifecycle similar to MikroORM: load an
|
|
30
|
+
entity, mutate it, and flush the unit of work. The persistence adapter keeps the
|
|
31
|
+
public API independent from the current MikroORM implementation so another
|
|
32
|
+
SQLite engine can be introduced later.
|
|
33
|
+
|
|
34
|
+
### SQLite canonical state
|
|
35
|
+
|
|
36
|
+
SQLite is the authoritative read and write store. A local transaction persists
|
|
37
|
+
the entity state and the durable effect that must eventually be materialized in
|
|
38
|
+
Sheets.
|
|
39
|
+
|
|
40
|
+
### Durable outbox and effect worker
|
|
41
|
+
|
|
42
|
+
The outbox records remote work until it is applied or classified as failed. The
|
|
43
|
+
worker claims work with a lease, sends signed operation batches, recovers expired
|
|
44
|
+
leases, and applies retry policy without blocking the application request.
|
|
45
|
+
|
|
46
|
+
### Apps Script gateway
|
|
47
|
+
|
|
48
|
+
The gateway validates a signed operation envelope and executes an allowlisted
|
|
49
|
+
Sheet operation. It is intentionally not the owner of entity evaluation,
|
|
50
|
+
canonical state, retry policy, or reconciliation decisions.
|
|
51
|
+
|
|
52
|
+
### Google Sheets projection
|
|
53
|
+
|
|
54
|
+
Sheets is the human-readable projection. It can lag behind SQLite, and external
|
|
55
|
+
limits such as Apps Script execution time, Google Sheets quotas, network timeout,
|
|
56
|
+
or response loss can affect convergence.
|
|
57
|
+
|
|
58
|
+
## Consistency boundary
|
|
59
|
+
|
|
60
|
+
A successful `flush()` means:
|
|
61
|
+
|
|
62
|
+
- the local entity state was accepted by SQLite
|
|
63
|
+
- the corresponding remote effect was durably queued
|
|
64
|
+
|
|
65
|
+
It does not mean that the Google Sheet has already converged. The worker and
|
|
66
|
+
reconciliation safety net complete the remote side asynchronously.
|
|
67
|
+
|
|
68
|
+
## Design boundary
|
|
69
|
+
|
|
70
|
+
Hikoutei is intended for a single SQLite writer process. It is not a distributed
|
|
71
|
+
transaction coordinator or a replacement for a high-throughput relational
|
|
72
|
+
database.
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# Code Guidelines
|
|
2
|
+
|
|
3
|
+
## Project Identity
|
|
4
|
+
|
|
5
|
+
This project is a TypeScript library for using Google Sheets as a lightweight, typed repository layer for MVP apps, internal tools, and low-traffic admin workflows.
|
|
6
|
+
|
|
7
|
+
The project is not a full database replacement, not a Prisma/JPA clone, and not a general-purpose Google Sheets API wrapper. Existing libraries such as `google-spreadsheet` and `@googleapis/sheets` already cover low-level Sheets access.
|
|
8
|
+
|
|
9
|
+
The core value is safety around common Google Sheets-as-data-store failure modes:
|
|
10
|
+
|
|
11
|
+
- schema drift caused by manual sheet edits
|
|
12
|
+
- stale writes and lost updates
|
|
13
|
+
- invalid row parsing
|
|
14
|
+
- duplicate or missing key columns
|
|
15
|
+
- API quota pressure
|
|
16
|
+
- future write serialization through Apps Script
|
|
17
|
+
|
|
18
|
+
## Positioning
|
|
19
|
+
|
|
20
|
+
Use this wording when describing the project:
|
|
21
|
+
|
|
22
|
+
> Typed repository and safe write layer for Google Sheets-backed MVPs.
|
|
23
|
+
|
|
24
|
+
Avoid these claims:
|
|
25
|
+
|
|
26
|
+
- Google Sheets replacement for MySQL/Postgres
|
|
27
|
+
- JPA for Google Sheets
|
|
28
|
+
- Prisma for Google Sheets
|
|
29
|
+
- transaction-safe database on top of Sheets
|
|
30
|
+
|
|
31
|
+
The honest boundary matters. Google Sheets has no native database transaction model, limited quota, weak query capabilities, and manual edit risk. The library should make those constraints explicit instead of hiding them.
|
|
32
|
+
|
|
33
|
+
## MVP Scope
|
|
34
|
+
|
|
35
|
+
The first implementation should stay small and prove the core safety model.
|
|
36
|
+
|
|
37
|
+
Required MVP capabilities:
|
|
38
|
+
|
|
39
|
+
- schema definition API
|
|
40
|
+
- adapter boundary for Sheets access
|
|
41
|
+
- header/schema validation
|
|
42
|
+
- required column detection
|
|
43
|
+
- duplicate header detection
|
|
44
|
+
- key column detection
|
|
45
|
+
- row parsing
|
|
46
|
+
- `text`, `number`, `boolean` basic column parsers
|
|
47
|
+
- `findAll`
|
|
48
|
+
- `findById`
|
|
49
|
+
- `insert`
|
|
50
|
+
- `update`
|
|
51
|
+
- `_version` based optimistic locking
|
|
52
|
+
- `SchemaDriftError`
|
|
53
|
+
- `ConflictError`
|
|
54
|
+
- `ParseError`
|
|
55
|
+
|
|
56
|
+
MVP exclusions:
|
|
57
|
+
|
|
58
|
+
- relations and joins
|
|
59
|
+
- SQL-like query language
|
|
60
|
+
- migration engine
|
|
61
|
+
- lazy loading
|
|
62
|
+
- multi-row atomic transactions
|
|
63
|
+
- Apps Script automatic installation
|
|
64
|
+
- Apps Script Web App gateway
|
|
65
|
+
- caching
|
|
66
|
+
- request collapse
|
|
67
|
+
- retry/backoff
|
|
68
|
+
- dashboard UI
|
|
69
|
+
- browser support matrix
|
|
70
|
+
|
|
71
|
+
## Architecture
|
|
72
|
+
|
|
73
|
+
Keep domain rules separate from application orchestration, infrastructure
|
|
74
|
+
storage, and Google API details.
|
|
75
|
+
|
|
76
|
+
Recommended package boundaries:
|
|
77
|
+
|
|
78
|
+
```txt
|
|
79
|
+
src/
|
|
80
|
+
domain/ # 정규화 값, 평가, 충돌, 상태 규칙
|
|
81
|
+
shared/ # 도메인 간 공유 상수·인코딩·상태 계약
|
|
82
|
+
application/
|
|
83
|
+
orm/ # 공개 ORM facade, mapping, flush 계획
|
|
84
|
+
sync/ # worker, reconciliation, gateway orchestration
|
|
85
|
+
adapter/
|
|
86
|
+
persistence/
|
|
87
|
+
contracts/ # 저장소 공통 계약
|
|
88
|
+
providers/mikro-orm/ # 현재 MikroORM + SQLite 구현
|
|
89
|
+
sheets/
|
|
90
|
+
providers/apps-script-gateway/
|
|
91
|
+
protocol/ # 서명·직렬화·응답 검증
|
|
92
|
+
transport/ # HTTP operation client
|
|
93
|
+
operations/
|
|
94
|
+
read/ # 테이블 읽기
|
|
95
|
+
write/ # fast append
|
|
96
|
+
observation/ # snapshot·anchor 관측
|
|
97
|
+
effect/ # update/delete effect
|
|
98
|
+
infrastructure/
|
|
99
|
+
storage/ # SQLite canonical state와 outbox
|
|
100
|
+
index.ts
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`domain/`과 `shared/`는 외부 SDK를 몰라야 한다. `application/`은 use case와
|
|
104
|
+
동기화 흐름을 조율하고, `infrastructure/`는 SQLite 같은 외부 저장 기술을
|
|
105
|
+
담당한다. `adapter/`는 persistence와 Sheets provider를 각각 계약 뒤에
|
|
106
|
+
격리한다.
|
|
107
|
+
|
|
108
|
+
The domain should depend on adapter interfaces, not directly on Google Sheets
|
|
109
|
+
SDKs.
|
|
110
|
+
|
|
111
|
+
The first tests should use an in-memory fake adapter. Real Google integration tests can come later and should be opt-in because they require credentials and quota.
|
|
112
|
+
|
|
113
|
+
## Code Modification Rules
|
|
114
|
+
|
|
115
|
+
Do not modify production source files under `src/**` unless the user explicitly asks for production implementation work.
|
|
116
|
+
|
|
117
|
+
When the user asks for planning, review, explanation, test scaffolding, or configuration only:
|
|
118
|
+
|
|
119
|
+
- do not edit `src/**`
|
|
120
|
+
- do not create new production files under `src/**`
|
|
121
|
+
- do not "fix" user-written production code opportunistically
|
|
122
|
+
- explain suspected production code issues in the response instead
|
|
123
|
+
- wait for explicit approval before changing production code
|
|
124
|
+
|
|
125
|
+
Allowed without extra confirmation when requested:
|
|
126
|
+
|
|
127
|
+
- documentation files
|
|
128
|
+
- planning notes
|
|
129
|
+
- test file scaffolding under `test/**`
|
|
130
|
+
- TypeScript/package/test configuration files
|
|
131
|
+
- `.gitignore`
|
|
132
|
+
|
|
133
|
+
If a production source issue blocks the requested work, describe the blocker and ask before editing `src/**`.
|
|
134
|
+
|
|
135
|
+
## Adapter Boundary
|
|
136
|
+
|
|
137
|
+
Adapters are split by capability and provider. A provider is a concrete
|
|
138
|
+
implementation such as MikroORM or Apps Script; a contract is the stable
|
|
139
|
+
boundary that core, ORM, storage, or runtime code consumes.
|
|
140
|
+
|
|
141
|
+
- `adapter/persistence/contracts/`: SQL and persistence contracts independent of
|
|
142
|
+
MikroORM, Prisma, or another future implementation
|
|
143
|
+
- `adapter/persistence/providers/mikro-orm/`: the current MikroORM-backed
|
|
144
|
+
entity engine and SQLite storage bridge
|
|
145
|
+
- `adapter/sheets/providers/apps-script-gateway/`: the current signed Apps Script
|
|
146
|
+
provider, separated into protocol, transport, and operation capabilities
|
|
147
|
+
|
|
148
|
+
The adapter should expose sheet-level operations in terms the core needs, not Google-specific concepts.
|
|
149
|
+
|
|
150
|
+
Suggested responsibilities:
|
|
151
|
+
|
|
152
|
+
- read headers
|
|
153
|
+
- read rows
|
|
154
|
+
- append row
|
|
155
|
+
- replace row by index or key
|
|
156
|
+
- optionally re-read row before update
|
|
157
|
+
|
|
158
|
+
Do not leak Google SDK response objects into core repository logic.
|
|
159
|
+
|
|
160
|
+
## Schema Drift Policy
|
|
161
|
+
|
|
162
|
+
Schema drift must not be silently ignored.
|
|
163
|
+
|
|
164
|
+
The library should fail clearly when:
|
|
165
|
+
|
|
166
|
+
- a required column is missing
|
|
167
|
+
- the key column is missing
|
|
168
|
+
- headers are duplicated
|
|
169
|
+
- `_version` is required but missing
|
|
170
|
+
- a row cannot be parsed into the declared type
|
|
171
|
+
|
|
172
|
+
Unexpected extra columns may be allowed by default, but the behavior should be explicit and configurable later.
|
|
173
|
+
|
|
174
|
+
## Stale Write Policy
|
|
175
|
+
|
|
176
|
+
MVP optimistic locking should be based on a version column.
|
|
177
|
+
|
|
178
|
+
Expected behavior:
|
|
179
|
+
|
|
180
|
+
- read current row
|
|
181
|
+
- keep its `_version`
|
|
182
|
+
- before update, re-check the current `_version`
|
|
183
|
+
- if the version changed, throw `ConflictError`
|
|
184
|
+
- if unchanged, write the updated row with incremented `_version`
|
|
185
|
+
|
|
186
|
+
This is not a true database transaction. Document it as stale-write protection, not full transactional safety.
|
|
187
|
+
|
|
188
|
+
## Google Sheets API Constraints
|
|
189
|
+
|
|
190
|
+
Design with quota and latency in mind.
|
|
191
|
+
|
|
192
|
+
Current official Sheets API limits to consider:
|
|
193
|
+
|
|
194
|
+
- 300 read requests per minute per project
|
|
195
|
+
- 60 read requests per minute per user per project
|
|
196
|
+
- 300 write requests per minute per project
|
|
197
|
+
- 60 write requests per minute per user per project
|
|
198
|
+
- 2MB recommended max request payload
|
|
199
|
+
- 180 seconds max processing time per request
|
|
200
|
+
- quota exceeded responses return 429
|
|
201
|
+
|
|
202
|
+
This means the library should favor batch reads and avoid one API call per row where possible.
|
|
203
|
+
|
|
204
|
+
## Future Extensions
|
|
205
|
+
|
|
206
|
+
After the MVP is stable, possible extensions are:
|
|
207
|
+
|
|
208
|
+
- read cache
|
|
209
|
+
- in-flight read collapse
|
|
210
|
+
- retry/backoff for 429 and transient 5xx
|
|
211
|
+
- Google Sheet template generator
|
|
212
|
+
- schema drift report
|
|
213
|
+
- Apps Script installer CLI
|
|
214
|
+
- Apps Script `LockService` write gateway
|
|
215
|
+
- audit log sheet
|
|
216
|
+
- `_createdAt` and `_updatedAt` system columns
|
|
217
|
+
- GitHub Action for schema verification
|
|
218
|
+
|
|
219
|
+
Add these only after the base repository model is tested and documented.
|
|
220
|
+
|
|
221
|
+
## Testing Standard
|
|
222
|
+
|
|
223
|
+
Tests should prove behavior through realistic sheet states, not through shallow mocks.
|
|
224
|
+
|
|
225
|
+
Required test categories:
|
|
226
|
+
|
|
227
|
+
- valid schema passes
|
|
228
|
+
- missing required column fails
|
|
229
|
+
- duplicate header fails
|
|
230
|
+
- missing key column fails
|
|
231
|
+
- invalid number/boolean parse fails
|
|
232
|
+
- `findAll` returns typed rows
|
|
233
|
+
- `findById` returns matching row
|
|
234
|
+
- `findById` returns null/undefined for missing key, whichever API chooses
|
|
235
|
+
- insert rejects duplicate key
|
|
236
|
+
- update increments `_version`
|
|
237
|
+
- update rejects stale version with `ConflictError`
|
|
238
|
+
- extra column behavior is documented by test
|
|
239
|
+
|
|
240
|
+
The fake adapter should be simple but should preserve enough behavior to expose row/header bugs.
|
|
241
|
+
|
|
242
|
+
## Documentation Standard
|
|
243
|
+
|
|
244
|
+
README should explain:
|
|
245
|
+
|
|
246
|
+
- when this library is appropriate
|
|
247
|
+
- when it is not appropriate
|
|
248
|
+
- Google Sheets quota constraints
|
|
249
|
+
- schema drift problem
|
|
250
|
+
- stale write problem
|
|
251
|
+
- quick start
|
|
252
|
+
- API reference
|
|
253
|
+
- limitations
|
|
254
|
+
- roadmap
|
|
255
|
+
|
|
256
|
+
Do not market the project as a general database replacement.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Hikoutei Development
|
|
2
|
+
|
|
3
|
+
## Local verification
|
|
4
|
+
|
|
5
|
+
Install dependencies and run the normal checks:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm ci
|
|
9
|
+
npm test
|
|
10
|
+
npm run typecheck
|
|
11
|
+
npm run typecheck:test
|
|
12
|
+
npm run build
|
|
13
|
+
npm pack --dry-run
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The default test suite uses fake gateways and SQLite/MikroORM fixtures. It does
|
|
17
|
+
not require live Google credentials.
|
|
18
|
+
|
|
19
|
+
## Google integration tests
|
|
20
|
+
|
|
21
|
+
Live Google Sheets tests are opt-in. They require a deployed Apps Script
|
|
22
|
+
gateway, credentials, a spreadsheet, and consume external quota. Keep secrets
|
|
23
|
+
in an untracked environment file and never commit them.
|
|
24
|
+
|
|
25
|
+
## Benchmarks
|
|
26
|
+
|
|
27
|
+
Performance measurements should be recorded in
|
|
28
|
+
[`sync-bulk-write-benchmark.md`](sync-bulk-write-benchmark.md). Separate:
|
|
29
|
+
|
|
30
|
+
- one-time setup from steady-state work
|
|
31
|
+
- raw Gateway writes from full worker drain
|
|
32
|
+
- reconciliation from the normal append path
|
|
33
|
+
- local SQLite/ORM time from HTTP and Apps Script time
|
|
34
|
+
|
|
35
|
+
The benchmark history is not a universal Sheets performance guarantee. Network
|
|
36
|
+
latency, Apps Script execution behavior, quotas, and spreadsheet state can
|
|
37
|
+
change the result.
|
|
38
|
+
|
|
39
|
+
## Package preview
|
|
40
|
+
|
|
41
|
+
Before publishing, inspect the tarball contents:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
npm pack --dry-run
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The package should include the built `dist/` output, public documentation, and
|
|
48
|
+
the deployable [`apps-script/gateway/Code.gs`](../apps-script/gateway/Code.gs).
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Git Workflow
|
|
2
|
+
|
|
3
|
+
## Branch Model
|
|
4
|
+
|
|
5
|
+
Use a simple branch model.
|
|
6
|
+
|
|
7
|
+
```txt
|
|
8
|
+
main stable releases
|
|
9
|
+
next integration branch, optional
|
|
10
|
+
feature/* feature work
|
|
11
|
+
fix/* bug fixes
|
|
12
|
+
chore/* maintenance
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
If the project is still early, `main` plus short-lived feature branches is enough.
|
|
16
|
+
|
|
17
|
+
Do not commit directly to `main` once the first usable version is published.
|
|
18
|
+
|
|
19
|
+
## Branch Naming
|
|
20
|
+
|
|
21
|
+
Use English kebab-case branch names.
|
|
22
|
+
|
|
23
|
+
Examples:
|
|
24
|
+
|
|
25
|
+
```txt
|
|
26
|
+
feature/core-schema
|
|
27
|
+
feature/memory-adapter
|
|
28
|
+
feature/version-locking
|
|
29
|
+
feature/google-sheets-adapter
|
|
30
|
+
feature/readme-quickstart
|
|
31
|
+
fix/conflict-error-message
|
|
32
|
+
chore/node-version-matrix
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Commit Messages
|
|
36
|
+
|
|
37
|
+
Use Conventional Commits.
|
|
38
|
+
|
|
39
|
+
Format:
|
|
40
|
+
|
|
41
|
+
```txt
|
|
42
|
+
<type>(<scope>): <summary>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Common types:
|
|
46
|
+
|
|
47
|
+
```txt
|
|
48
|
+
feat
|
|
49
|
+
fix
|
|
50
|
+
docs
|
|
51
|
+
test
|
|
52
|
+
refactor
|
|
53
|
+
build
|
|
54
|
+
ci
|
|
55
|
+
chore
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Examples:
|
|
59
|
+
|
|
60
|
+
```txt
|
|
61
|
+
feat(core): add schema definition API
|
|
62
|
+
feat(core): add version-based stale write protection
|
|
63
|
+
feat(adapter): add in-memory sheet adapter
|
|
64
|
+
test(core): cover duplicate header detection
|
|
65
|
+
docs(readme): clarify Google Sheets limitations
|
|
66
|
+
ci(node): add Node version matrix
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## PR Size
|
|
70
|
+
|
|
71
|
+
Keep PRs reviewable.
|
|
72
|
+
|
|
73
|
+
Target size:
|
|
74
|
+
|
|
75
|
+
```txt
|
|
76
|
+
300-1,000 changed lines
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Split larger changes by responsibility.
|
|
80
|
+
|
|
81
|
+
Good PR sequence:
|
|
82
|
+
|
|
83
|
+
1. project scaffold
|
|
84
|
+
2. core schema and column parsers
|
|
85
|
+
3. memory adapter
|
|
86
|
+
4. repository read methods
|
|
87
|
+
5. insert/update methods
|
|
88
|
+
6. optimistic locking
|
|
89
|
+
7. README and examples
|
|
90
|
+
8. Google Sheets adapter
|
|
91
|
+
|
|
92
|
+
## First Milestone PR Plan
|
|
93
|
+
|
|
94
|
+
Recommended first milestone:
|
|
95
|
+
|
|
96
|
+
```txt
|
|
97
|
+
PR 1: project scaffold
|
|
98
|
+
PR 2: schema and parser core
|
|
99
|
+
PR 3: memory adapter and read repository
|
|
100
|
+
PR 4: insert/update with version conflict
|
|
101
|
+
PR 5: README quickstart and limitations
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Do not start with Google OAuth or Apps Script. Those belong after the core model is stable.
|
|
105
|
+
|
|
106
|
+
## Release Policy
|
|
107
|
+
|
|
108
|
+
Use semantic versioning.
|
|
109
|
+
|
|
110
|
+
Before `1.0.0`, breaking changes are allowed but should be documented.
|
|
111
|
+
|
|
112
|
+
Suggested early versions:
|
|
113
|
+
|
|
114
|
+
```txt
|
|
115
|
+
0.1.0 core schema + memory adapter
|
|
116
|
+
0.2.0 repository CRUD + optimistic locking
|
|
117
|
+
0.3.0 Google Sheets adapter
|
|
118
|
+
0.4.0 README, examples, CI hardening
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Pull Request Template
|
|
122
|
+
|
|
123
|
+
Each PR should include:
|
|
124
|
+
|
|
125
|
+
```md
|
|
126
|
+
## Summary
|
|
127
|
+
|
|
128
|
+
## Why
|
|
129
|
+
|
|
130
|
+
## Changes
|
|
131
|
+
|
|
132
|
+
## Tests
|
|
133
|
+
|
|
134
|
+
## Limitations
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Labels
|
|
138
|
+
|
|
139
|
+
Use lowercase labels matching commit types where possible.
|
|
140
|
+
|
|
141
|
+
```txt
|
|
142
|
+
feat
|
|
143
|
+
fix
|
|
144
|
+
docs
|
|
145
|
+
test
|
|
146
|
+
refactor
|
|
147
|
+
build
|
|
148
|
+
ci
|
|
149
|
+
chore
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Additional useful labels:
|
|
153
|
+
|
|
154
|
+
```txt
|
|
155
|
+
core
|
|
156
|
+
adapter
|
|
157
|
+
docs
|
|
158
|
+
release
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## CI Expectations
|
|
162
|
+
|
|
163
|
+
Minimum CI before first release:
|
|
164
|
+
|
|
165
|
+
- install
|
|
166
|
+
- typecheck
|
|
167
|
+
- test
|
|
168
|
+
- build
|
|
169
|
+
|
|
170
|
+
Recommended Node matrix:
|
|
171
|
+
|
|
172
|
+
```txt
|
|
173
|
+
Node 18
|
|
174
|
+
Node 20
|
|
175
|
+
Node 22
|
|
176
|
+
Node 24
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Google integration tests should not run by default unless credentials are available.
|
|
180
|
+
|
|
181
|
+
## Release Checklist
|
|
182
|
+
|
|
183
|
+
Before publishing:
|
|
184
|
+
|
|
185
|
+
- README quickstart works
|
|
186
|
+
- package exports are correct
|
|
187
|
+
- `npm pack` contents are checked
|
|
188
|
+
- tests pass
|
|
189
|
+
- typecheck passes
|
|
190
|
+
- build output is verified
|
|
191
|
+
- package name availability is checked
|
|
192
|
+
- limitations are documented
|
|
193
|
+
- no credentials or local files are included
|
|
194
|
+
|
|
195
|
+
## Issue Strategy
|
|
196
|
+
|
|
197
|
+
Initial issues should be small and implementation-oriented.
|
|
198
|
+
|
|
199
|
+
Examples:
|
|
200
|
+
|
|
201
|
+
```txt
|
|
202
|
+
Add duplicate header detection
|
|
203
|
+
Add missing key column error
|
|
204
|
+
Add number parser
|
|
205
|
+
Add memory adapter
|
|
206
|
+
Add version conflict test
|
|
207
|
+
Add README limitations section
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Avoid opening vague issues such as:
|
|
211
|
+
|
|
212
|
+
```txt
|
|
213
|
+
Build ORM
|
|
214
|
+
Add transactions
|
|
215
|
+
Support everything
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Project Narrative
|
|
219
|
+
|
|
220
|
+
The public project story should be:
|
|
221
|
+
|
|
222
|
+
> Google Sheets is practical for early MVPs and internal tools, but manual edits introduce schema drift and stale writes. This library provides a typed repository layer that fails fast on schema drift and protects writes with version-based conflict detection.
|
|
223
|
+
|
|
224
|
+
Do not claim full database semantics.
|