@fragno-dev/db 0.2.2 → 0.4.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/.turbo/turbo-build.log +404 -175
- package/CHANGELOG.md +109 -0
- package/README.md +54 -9
- package/dist/adapters/adapters.d.ts +23 -21
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
- package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
- package/dist/adapters/generic-sql/driver-config.js +23 -1
- package/dist/adapters/generic-sql/driver-config.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +24 -9
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/executor.js +30 -3
- package/dist/adapters/generic-sql/migration/executor.js.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
- package/dist/adapters/generic-sql/migration/prepared-migrations.js +9 -9
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
- package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
- package/dist/adapters/generic-sql/query/db-now-sql.js +27 -0
- package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/select-builder.js +5 -3
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +49 -18
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/where-builder.js +43 -29
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
- package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
- package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
- package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
- package/dist/adapters/generic-sql/uow-decoder.js +6 -2
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-encoder.js +27 -8
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
- package/dist/adapters/in-memory/condition-evaluator.js +135 -0
- package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
- package/dist/adapters/in-memory/errors.d.ts +13 -0
- package/dist/adapters/in-memory/errors.d.ts.map +1 -0
- package/dist/adapters/in-memory/errors.js +23 -0
- package/dist/adapters/in-memory/errors.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
- package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
- package/dist/adapters/in-memory/in-memory-adapter.js +196 -0
- package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
- package/dist/adapters/in-memory/in-memory-uow.js +871 -0
- package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
- package/dist/adapters/in-memory/index.d.ts +4 -0
- package/dist/adapters/in-memory/index.js +4 -0
- package/dist/adapters/in-memory/options.d.ts +30 -0
- package/dist/adapters/in-memory/options.d.ts.map +1 -0
- package/dist/adapters/in-memory/options.js +62 -0
- package/dist/adapters/in-memory/options.js.map +1 -0
- package/dist/adapters/in-memory/reference-resolution.js +26 -0
- package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
- package/dist/adapters/in-memory/sorted-array-index.js +129 -0
- package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
- package/dist/adapters/in-memory/store.js +71 -0
- package/dist/adapters/in-memory/store.js.map +1 -0
- package/dist/adapters/in-memory/value-comparison.js +28 -0
- package/dist/adapters/in-memory/value-comparison.js.map +1 -0
- package/dist/adapters/shared/from-unit-of-work-compiler.js +51 -24
- package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
- package/dist/adapters/shared/uow-operation-compiler.js +11 -11
- package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
- package/dist/adapters/sql/index.d.ts +5 -0
- package/dist/adapters/sql/index.js +4 -0
- package/dist/browser/adapters/adapters.d.ts +61 -0
- package/dist/browser/adapters/adapters.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
- package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
- package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
- package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
- package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
- package/dist/browser/adapters/in-memory/index.d.ts +2 -0
- package/dist/browser/adapters/in-memory/options.d.ts +1 -0
- package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
- package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
- package/dist/browser/durable-hooks.d.ts +3 -0
- package/dist/browser/fragments/internal-fragment.d.ts +317 -0
- package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
- package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/browser/hooks/hooks.d.ts +146 -0
- package/dist/browser/hooks/hooks.d.ts.map +1 -0
- package/dist/browser/id.js +1 -0
- package/dist/browser/internal/adapter-registry.d.ts +4 -0
- package/dist/browser/internal/outbox-state.d.ts +2 -0
- package/dist/browser/mod.d.ts +15 -0
- package/dist/browser/mod.d.ts.map +1 -0
- package/dist/browser/mod.js +17 -0
- package/dist/browser/mod.js.map +1 -0
- package/dist/browser/mod2.d.ts +48 -0
- package/dist/browser/mod2.d.ts.map +1 -0
- package/dist/browser/naming/sql-naming.d.ts +19 -0
- package/dist/browser/naming/sql-naming.d.ts.map +1 -0
- package/dist/browser/outbox/outbox.d.ts +21 -0
- package/dist/browser/outbox/outbox.d.ts.map +1 -0
- package/dist/browser/query/column-defaults.js +1 -0
- package/dist/browser/query/condition-builder.d.ts +44 -0
- package/dist/browser/query/condition-builder.d.ts.map +1 -0
- package/dist/browser/query/condition-builder.js +97 -0
- package/dist/browser/query/condition-builder.js.map +1 -0
- package/dist/browser/query/cursor.d.ts +105 -0
- package/dist/browser/query/cursor.d.ts.map +1 -0
- package/dist/browser/query/cursor.js +150 -0
- package/dist/browser/query/cursor.js.map +1 -0
- package/dist/browser/query/db-now.d.ts +22 -0
- package/dist/browser/query/db-now.d.ts.map +1 -0
- package/dist/browser/query/db-now.js +33 -0
- package/dist/browser/query/db-now.js.map +1 -0
- package/dist/browser/query/orm/orm.d.ts +18 -0
- package/dist/browser/query/orm/orm.d.ts.map +1 -0
- package/dist/browser/query/simple-query-interface.d.ts +108 -0
- package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
- package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
- package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
- package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
- package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
- package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
- package/dist/browser/query/value-encoding.js +38 -0
- package/dist/browser/query/value-encoding.js.map +1 -0
- package/dist/browser/schema/create.d.ts +326 -0
- package/dist/browser/schema/create.d.ts.map +1 -0
- package/dist/browser/schema/create.js +89 -0
- package/dist/browser/schema/create.js.map +1 -0
- package/dist/browser/schema/generate-id.js +28 -0
- package/dist/browser/schema/generate-id.js.map +1 -0
- package/dist/browser/shared/providers.d.ts +6 -0
- package/dist/browser/shared/providers.d.ts.map +1 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
- package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
- package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
- package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
- package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
- package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
- package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
- package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
- package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
- package/dist/browser/sync/commands.d.ts +15 -0
- package/dist/browser/sync/commands.d.ts.map +1 -0
- package/dist/browser/sync/commands.js +27 -0
- package/dist/browser/sync/commands.js.map +1 -0
- package/dist/browser/sync/types.d.ts +63 -0
- package/dist/browser/sync/types.d.ts.map +1 -0
- package/dist/browser/util/types.d.ts +8 -0
- package/dist/browser/util/types.d.ts.map +1 -0
- package/dist/browser/with-database.d.ts +29 -0
- package/dist/browser/with-database.d.ts.map +1 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.js +5 -0
- package/dist/db-fragment-definition-builder.d.ts +101 -33
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +450 -60
- package/dist/db-fragment-definition-builder.js.map +1 -1
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
- package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
- package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
- package/dist/dispatchers/cloudflare-do/index.js +31 -0
- package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
- package/dist/dispatchers/node/dispatcher.d.ts +14 -0
- package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
- package/dist/dispatchers/node/dispatcher.js +80 -0
- package/dist/dispatchers/node/dispatcher.js.map +1 -0
- package/dist/dispatchers/node/index.d.ts +12 -0
- package/dist/dispatchers/node/index.d.ts.map +1 -0
- package/dist/dispatchers/node/index.js +27 -0
- package/dist/dispatchers/node/index.js.map +1 -0
- package/dist/durable-hooks.d.ts +31 -0
- package/dist/durable-hooks.d.ts.map +1 -0
- package/dist/durable-hooks.js +23 -0
- package/dist/durable-hooks.js.map +1 -0
- package/dist/fragments/internal-fragment.d.ts +186 -8
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +203 -38
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/fragments/internal-fragment.routes.js +164 -0
- package/dist/fragments/internal-fragment.routes.js.map +1 -0
- package/dist/fragments/internal-fragment.schema.d.ts +15 -0
- package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
- package/dist/fragments/internal-fragment.schema.js +39 -0
- package/dist/fragments/internal-fragment.schema.js.map +1 -0
- package/dist/hooks/durable-hooks-logger.d.ts +10 -0
- package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
- package/dist/hooks/durable-hooks-logger.js +75 -0
- package/dist/hooks/durable-hooks-logger.js.map +1 -0
- package/dist/hooks/durable-hooks-processor.d.ts +1 -0
- package/dist/hooks/durable-hooks-processor.js +80 -0
- package/dist/hooks/durable-hooks-processor.js.map +1 -0
- package/dist/hooks/durable-hooks-runtime.js +44 -0
- package/dist/hooks/durable-hooks-runtime.js.map +1 -0
- package/dist/hooks/hooks.d.ts +100 -1
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +254 -27
- package/dist/hooks/hooks.js.map +1 -1
- package/dist/id.d.ts +2 -2
- package/dist/id.js +2 -2
- package/dist/internal/adapter-registry.d.ts +11 -0
- package/dist/internal/adapter-registry.d.ts.map +1 -0
- package/dist/internal/adapter-registry.js +135 -0
- package/dist/internal/adapter-registry.js.map +1 -0
- package/dist/internal/outbox-state.d.ts +2 -0
- package/dist/internal/outbox-state.js +26 -0
- package/dist/internal/outbox-state.js.map +1 -0
- package/dist/migration-engine/auto-from-schema.d.ts +33 -0
- package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
- package/dist/migration-engine/auto-from-schema.js +223 -37
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts +16 -10
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +86 -35
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/migration-engine/shared.d.ts +113 -0
- package/dist/migration-engine/shared.d.ts.map +1 -0
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +20 -12
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +18 -12
- package/dist/mod.js.map +1 -1
- package/dist/naming/sql-naming.d.ts +19 -0
- package/dist/naming/sql-naming.d.ts.map +1 -0
- package/dist/naming/sql-naming.js +116 -0
- package/dist/naming/sql-naming.js.map +1 -0
- package/dist/outbox/outbox-builder.js +156 -0
- package/dist/outbox/outbox-builder.js.map +1 -0
- package/dist/outbox/outbox.d.ts +54 -0
- package/dist/outbox/outbox.d.ts.map +1 -0
- package/dist/outbox/outbox.js +37 -0
- package/dist/outbox/outbox.js.map +1 -0
- package/dist/query/column-defaults.js +20 -4
- package/dist/query/column-defaults.js.map +1 -1
- package/dist/query/condition-builder.d.ts +7 -1
- package/dist/query/condition-builder.d.ts.map +1 -1
- package/dist/query/condition-builder.js +5 -1
- package/dist/query/condition-builder.js.map +1 -1
- package/dist/query/cursor-client.d.ts +105 -0
- package/dist/query/cursor-client.d.ts.map +1 -0
- package/dist/query/cursor-client.js +165 -0
- package/dist/query/cursor-client.js.map +1 -0
- package/dist/query/cursor.d.ts +3 -1
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +51 -14
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/db-now.d.ts +22 -0
- package/dist/query/db-now.d.ts.map +1 -0
- package/dist/query/db-now.js +35 -0
- package/dist/query/db-now.js.map +1 -0
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +5 -4
- package/dist/query/serialize/create-sql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/sqlite-serializer.js +60 -12
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
- package/dist/query/serialize/sql-serializer.js +2 -2
- package/dist/query/serialize/sql-serializer.js.map +1 -1
- package/dist/query/simple-query-interface.d.ts +13 -4
- package/dist/query/simple-query-interface.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
- package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/execute-unit-of-work.js +50 -24
- package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.d.ts +92 -30
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +136 -11
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +16 -6
- package/dist/query/value-decoding.js.map +1 -1
- package/dist/query/value-encoding.js +29 -9
- package/dist/query/value-encoding.js.map +1 -1
- package/dist/schema/create.d.ts +103 -35
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +172 -58
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/generate-id.js +2 -2
- package/dist/schema/generate-id.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +4 -3
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
- package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
- package/dist/schema/validator.d.ts +10 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +123 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/schema-output/drizzle.d.ts +30 -0
- package/dist/schema-output/drizzle.d.ts.map +1 -0
- package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +88 -60
- package/dist/schema-output/drizzle.js.map +1 -0
- package/dist/schema-output/prisma.d.ts +17 -0
- package/dist/schema-output/prisma.d.ts.map +1 -0
- package/dist/schema-output/prisma.js +307 -0
- package/dist/schema-output/prisma.js.map +1 -0
- package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
- package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
- package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
- package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
- package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
- package/dist/sql-driver/sql.js.map +1 -1
- package/dist/sync/commands.d.ts +15 -0
- package/dist/sync/commands.d.ts.map +1 -0
- package/dist/sync/commands.js +27 -0
- package/dist/sync/commands.js.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.js +4 -0
- package/dist/sync/read-tracking.d.ts +25 -0
- package/dist/sync/read-tracking.d.ts.map +1 -0
- package/dist/sync/read-tracking.js +148 -0
- package/dist/sync/read-tracking.js.map +1 -0
- package/dist/sync/submit.js +213 -0
- package/dist/sync/submit.js.map +1 -0
- package/dist/sync/types.d.ts +63 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/util/default-database-adapter.js +66 -0
- package/dist/util/default-database-adapter.js.map +1 -0
- package/dist/with-database.d.ts +3 -6
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +8 -7
- package/dist/with-database.js.map +1 -1
- package/package.json +62 -55
- package/src/adapters/adapters.ts +33 -26
- package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
- package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
- package/src/adapters/drizzle/test-utils.ts +13 -8
- package/src/adapters/generic-sql/driver-config.ts +38 -0
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
- package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
- package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
- package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
- package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
- package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
- package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
- package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
- package/src/adapters/generic-sql/migration/executor.ts +47 -4
- package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
- package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
- package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
- package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
- package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
- package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
- package/src/adapters/generic-sql/query/select-builder.ts +7 -3
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
- package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
- package/src/adapters/generic-sql/query/where-builder.ts +112 -41
- package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
- package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
- package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
- package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
- package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
- package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
- package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
- package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
- package/src/adapters/generic-sql/uow-decoder.ts +23 -5
- package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
- package/src/adapters/generic-sql/uow-encoder.ts +48 -13
- package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
- package/src/adapters/in-memory/condition-evaluator.ts +280 -0
- package/src/adapters/in-memory/errors.ts +20 -0
- package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
- package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
- package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
- package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
- package/src/adapters/in-memory/index.ts +3 -0
- package/src/adapters/in-memory/options.test.ts +42 -0
- package/src/adapters/in-memory/options.ts +91 -0
- package/src/adapters/in-memory/outbox.test.ts +361 -0
- package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
- package/src/adapters/in-memory/reference-resolution.ts +67 -0
- package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
- package/src/adapters/in-memory/sorted-array-index.ts +228 -0
- package/src/adapters/in-memory/store.test.ts +69 -0
- package/src/adapters/in-memory/store.ts +145 -0
- package/src/adapters/in-memory/value-comparison.ts +53 -0
- package/src/adapters/in-memory/value-normalization.test.ts +58 -0
- package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
- package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
- package/src/adapters/shared/uow-operation-compiler.ts +28 -18
- package/src/adapters/sql/index.ts +12 -0
- package/src/browser/mod.ts +64 -0
- package/src/client.ts +19 -0
- package/src/db-fragment-definition-builder.test.ts +845 -53
- package/src/db-fragment-definition-builder.ts +911 -95
- package/src/db-fragment-instantiator.test.ts +210 -94
- package/src/db-fragment-integration.test.ts +17 -12
- package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
- package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
- package/src/dispatchers/cloudflare-do/index.ts +63 -0
- package/src/dispatchers/node/dispatcher.ts +112 -0
- package/src/dispatchers/node/index.test.ts +120 -0
- package/src/dispatchers/node/index.ts +50 -0
- package/src/durable-hooks.test.ts +80 -0
- package/src/durable-hooks.ts +67 -0
- package/src/fragments/internal-fragment.routes.test.ts +570 -0
- package/src/fragments/internal-fragment.routes.ts +334 -0
- package/src/fragments/internal-fragment.schema.ts +95 -0
- package/src/fragments/internal-fragment.test.ts +505 -83
- package/src/fragments/internal-fragment.ts +453 -70
- package/src/hooks/durable-hooks-logger.ts +126 -0
- package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
- package/src/hooks/durable-hooks-processor.test.ts +282 -0
- package/src/hooks/durable-hooks-processor.ts +173 -0
- package/src/hooks/durable-hooks-runtime.test.ts +65 -0
- package/src/hooks/durable-hooks-runtime.ts +81 -0
- package/src/hooks/hooks.test.ts +455 -34
- package/src/hooks/hooks.ts +501 -34
- package/src/id.test.ts +34 -0
- package/src/id.ts +1 -3
- package/src/internal/adapter-registry.test.ts +93 -0
- package/src/internal/adapter-registry.ts +239 -0
- package/src/internal/outbox-state.ts +43 -0
- package/src/migration-engine/auto-from-schema.test.ts +107 -14
- package/src/migration-engine/auto-from-schema.ts +365 -44
- package/src/migration-engine/create.test.ts +4 -3
- package/src/migration-engine/create.ts +1 -1
- package/src/migration-engine/generation-engine.test.ts +292 -110
- package/src/migration-engine/generation-engine.ts +117 -66
- package/src/migration-engine/shared.ts +14 -0
- package/src/mod.ts +95 -39
- package/src/naming/sql-naming.ts +181 -0
- package/src/outbox/outbox-builder.ts +241 -0
- package/src/outbox/outbox.test.ts +424 -0
- package/src/outbox/outbox.ts +139 -0
- package/src/query/column-defaults.ts +42 -4
- package/src/query/condition-builder.test.ts +18 -3
- package/src/query/condition-builder.ts +7 -0
- package/src/query/cursor-client.test.ts +70 -0
- package/src/query/cursor-client.ts +263 -0
- package/src/query/cursor.test.ts +119 -20
- package/src/query/cursor.ts +88 -27
- package/src/query/db-now.ts +73 -0
- package/src/query/orm/orm.ts +2 -2
- package/src/query/query-type.test.ts +4 -3
- package/src/query/serialize/create-sql-serializer.ts +10 -5
- package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
- package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
- package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
- package/src/query/serialize/sql-serializer.ts +4 -4
- package/src/query/simple-query-interface.ts +15 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
- package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
- package/src/query/unit-of-work/retry-policy.test.ts +1 -0
- package/src/query/unit-of-work/tx-builder.test.ts +73 -1
- package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
- package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
- package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
- package/src/query/unit-of-work/unit-of-work.ts +309 -38
- package/src/query/value-decoding.test.ts +63 -4
- package/src/query/value-decoding.ts +32 -6
- package/src/query/value-encoding.test.ts +86 -2
- package/src/query/value-encoding.ts +56 -6
- package/src/schema/create.test.ts +293 -47
- package/src/schema/create.ts +406 -70
- package/src/schema/generate-id.test.ts +3 -2
- package/src/schema/generate-id.ts +2 -2
- package/src/schema/serialize.test.ts +18 -5
- package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
- package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
- package/src/schema/type-conversion/type-mapping.test.ts +26 -1
- package/src/schema/validator.test.ts +199 -0
- package/src/schema/validator.ts +232 -0
- package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
- package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
- package/src/schema-output/prisma.test.ts +694 -0
- package/src/schema-output/prisma.ts +593 -0
- package/src/sql-driver/better-sqlite3.test.ts +5 -3
- package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
- package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
- package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
- package/src/sql-driver/query-executor/query-executor.ts +1 -1
- package/src/sql-driver/sql-driver-adapter.ts +2 -2
- package/src/sql-driver/sql.ts +2 -1
- package/src/sql-driver/sqlocal.test.ts +4 -2
- package/src/sync/commands.test.ts +39 -0
- package/src/sync/commands.ts +51 -0
- package/src/sync/conflict-checker.test.ts +450 -0
- package/src/sync/conflict-checker.ts +248 -0
- package/src/sync/index.ts +14 -0
- package/src/sync/plan.ts +9 -0
- package/src/sync/read-tracking.test.ts +177 -0
- package/src/sync/read-tracking.ts +287 -0
- package/src/sync/submit.test.ts +205 -0
- package/src/sync/submit.ts +328 -0
- package/src/sync/types.ts +80 -0
- package/src/util/default-database-adapter.ts +119 -0
- package/src/with-database.ts +20 -31
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +38 -24
- package/vitest.config.ts +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
- package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
- package/dist/adapters/drizzle/generate.d.ts +0 -30
- package/dist/adapters/drizzle/generate.d.ts.map +0 -1
- package/dist/adapters/drizzle/generate.js.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
- package/dist/adapters/kysely/kysely-adapter.js +0 -17
- package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
- package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
- package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
- package/dist/adapters/shared/table-name-mapper.js +0 -43
- package/dist/adapters/shared/table-name-mapper.js.map +0 -1
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +0 -165
- package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
- package/dist/packages/fragno/dist/api/bind-services.js +0 -20
- package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
- package/dist/packages/fragno/dist/api/error.js +0 -48
- package/dist/packages/fragno/dist/api/error.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
- package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
- package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
- package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
- package/dist/packages/fragno/dist/api/internal/route.js +0 -10
- package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
- package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
- package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
- package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
- package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
- package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
- package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
- package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
- package/dist/packages/fragno/dist/api/route.js +0 -17
- package/dist/packages/fragno/dist/api/route.js.map +0 -1
- package/dist/packages/fragno/dist/internal/symbols.js +0 -10
- package/dist/packages/fragno/dist/internal/symbols.js.map +0 -1
- package/dist/schema-generator/schema-generator.d.ts +0 -15
- package/dist/schema-generator/schema-generator.d.ts.map +0 -1
- package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
- package/src/adapters/kysely/kysely-adapter.ts +0 -27
- package/src/adapters/shared/table-name-mapper.ts +0 -50
- package/src/schema-generator/schema-generator.ts +0 -12
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { dbInterval, dbNow } from "../db-now.js";
|
|
2
|
+
import { buildCondition } from "../condition-builder.js";
|
|
1
3
|
import { generateId } from "../../schema/generate-id.js";
|
|
2
4
|
import { FragnoId } from "../../schema/create.js";
|
|
3
5
|
import { Cursor } from "../cursor.js";
|
|
4
|
-
import { buildCondition } from "../condition-builder.js";
|
|
5
6
|
|
|
6
7
|
//#region src/query/unit-of-work/unit-of-work.ts
|
|
7
8
|
/**
|
|
@@ -167,6 +168,15 @@ var UpdateBuilder = class {
|
|
|
167
168
|
return this;
|
|
168
169
|
}
|
|
169
170
|
/**
|
|
171
|
+
* Database timestamp helper for mutation values.
|
|
172
|
+
*/
|
|
173
|
+
now() {
|
|
174
|
+
return dbNow();
|
|
175
|
+
}
|
|
176
|
+
interval(input) {
|
|
177
|
+
return dbInterval(input);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
170
180
|
* Enable version checking for optimistic concurrency control
|
|
171
181
|
* @throws Error if the ID is just a string (no version available)
|
|
172
182
|
*/
|
|
@@ -304,7 +314,7 @@ function buildJoinIndexed(table, fn) {
|
|
|
304
314
|
for (const name in table.relations) {
|
|
305
315
|
const relation = table.relations[name];
|
|
306
316
|
builder[name] = (builderFn) => {
|
|
307
|
-
const joinBuilder = new JoinFindBuilder(relation.table.
|
|
317
|
+
const joinBuilder = new JoinFindBuilder(relation.table.name, relation.table);
|
|
308
318
|
if (builderFn) builderFn(joinBuilder);
|
|
309
319
|
const config = joinBuilder.build();
|
|
310
320
|
let conditions;
|
|
@@ -346,6 +356,11 @@ function buildJoinIndexed(table, fn) {
|
|
|
346
356
|
function createUnitOfWork(compiler, executor, decoder, schemaNamespaceMap, name) {
|
|
347
357
|
return new UnitOfWork(compiler, executor, decoder, name, void 0, schemaNamespaceMap);
|
|
348
358
|
}
|
|
359
|
+
function isUowInstrumentationInjection(value) {
|
|
360
|
+
if (!value || typeof value !== "object") return false;
|
|
361
|
+
const injection = value;
|
|
362
|
+
return injection.type === "conflict" || injection.type === "error";
|
|
363
|
+
}
|
|
349
364
|
/**
|
|
350
365
|
* Encapsulates a promise with its resolver/rejecter functions.
|
|
351
366
|
* Simplifies management of deferred promises with built-in error handling.
|
|
@@ -546,6 +561,7 @@ var UnitOfWork = class UnitOfWork {
|
|
|
546
561
|
#schemaNamespaceMap;
|
|
547
562
|
#retrievalResults;
|
|
548
563
|
#createdInternalIds = [];
|
|
564
|
+
#readTrackingEnabled = false;
|
|
549
565
|
#retrievalPhaseDeferred = new DeferredPromise();
|
|
550
566
|
#mutationPhaseDeferred = new DeferredPromise();
|
|
551
567
|
#retrievalError = null;
|
|
@@ -561,6 +577,39 @@ var UnitOfWork = class UnitOfWork {
|
|
|
561
577
|
this.#config = config;
|
|
562
578
|
this.#idempotencyKey = config?.idempotencyKey ?? crypto.randomUUID();
|
|
563
579
|
}
|
|
580
|
+
#createInstrumentationContext(phase) {
|
|
581
|
+
return {
|
|
582
|
+
phase,
|
|
583
|
+
uowName: this.#name,
|
|
584
|
+
idempotencyKey: this.#idempotencyKey,
|
|
585
|
+
retrievalOpsCount: this.#retrievalOps.length,
|
|
586
|
+
mutationOpsCount: this.#mutationOps.length,
|
|
587
|
+
uow: this
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
async #runInstrumentation(phase) {
|
|
591
|
+
const hook = this.#config?.instrumentation?.[phase];
|
|
592
|
+
if (!hook) return null;
|
|
593
|
+
const result = await hook(this.#createInstrumentationContext(phase));
|
|
594
|
+
if (isUowInstrumentationInjection(result)) return result;
|
|
595
|
+
return null;
|
|
596
|
+
}
|
|
597
|
+
async #runInstrumentationFinalizer(phase) {
|
|
598
|
+
const hook = this.#config?.instrumentationFinalizer?.[phase];
|
|
599
|
+
if (!hook) return;
|
|
600
|
+
await hook(this.#createInstrumentationContext(phase));
|
|
601
|
+
}
|
|
602
|
+
#handleRetrieveInjection(injection) {
|
|
603
|
+
if (injection.type === "error") throw injection.error;
|
|
604
|
+
throw new Error(injection.reason ?? "Injected conflict");
|
|
605
|
+
}
|
|
606
|
+
#handleMutationInjection(injection) {
|
|
607
|
+
if (injection.type === "error") throw injection.error;
|
|
608
|
+
this.#state = "executed";
|
|
609
|
+
this.#createdInternalIds.length = 0;
|
|
610
|
+
this.#mutationPhaseDeferred.resolve();
|
|
611
|
+
return { success: false };
|
|
612
|
+
}
|
|
564
613
|
/**
|
|
565
614
|
* Register a schema with its namespace for cross-fragment operations.
|
|
566
615
|
* This is used for internal fragments like hooks that need to create
|
|
@@ -600,6 +649,7 @@ var UnitOfWork = class UnitOfWork {
|
|
|
600
649
|
child.#mutationOps = this.#mutationOps;
|
|
601
650
|
child.#retrievalResults = this.#retrievalResults;
|
|
602
651
|
child.#createdInternalIds = this.#createdInternalIds;
|
|
652
|
+
child.#readTrackingEnabled = this.#readTrackingEnabled;
|
|
603
653
|
child.#retrievalPhaseDeferred = this.#retrievalPhaseDeferred;
|
|
604
654
|
child.#mutationPhaseDeferred = this.#mutationPhaseDeferred;
|
|
605
655
|
child.#retrievalError = this.#retrievalError;
|
|
@@ -634,6 +684,7 @@ var UnitOfWork = class UnitOfWork {
|
|
|
634
684
|
this.#mutationOps = [];
|
|
635
685
|
this.#retrievalResults = void 0;
|
|
636
686
|
this.#createdInternalIds = [];
|
|
687
|
+
this.#readTrackingEnabled = false;
|
|
637
688
|
this.#state = "building-retrieval";
|
|
638
689
|
this.#retrievalError = null;
|
|
639
690
|
this.#mutationError = null;
|
|
@@ -645,8 +696,9 @@ var UnitOfWork = class UnitOfWork {
|
|
|
645
696
|
/**
|
|
646
697
|
* Trigger a hook to be executed after the transaction commits.
|
|
647
698
|
*/
|
|
648
|
-
triggerHook(hookName, payload, options) {
|
|
699
|
+
triggerHook(namespace, hookName, payload, options) {
|
|
649
700
|
this.#triggeredHooks.push({
|
|
701
|
+
namespace,
|
|
650
702
|
hookName,
|
|
651
703
|
payload,
|
|
652
704
|
options
|
|
@@ -661,6 +713,12 @@ var UnitOfWork = class UnitOfWork {
|
|
|
661
713
|
get state() {
|
|
662
714
|
return this.#coordinator.parent?.state ?? this.#state;
|
|
663
715
|
}
|
|
716
|
+
enableReadTracking() {
|
|
717
|
+
this.#readTrackingEnabled = true;
|
|
718
|
+
}
|
|
719
|
+
get readTrackingEnabled() {
|
|
720
|
+
return this.#readTrackingEnabled;
|
|
721
|
+
}
|
|
664
722
|
get name() {
|
|
665
723
|
return this.#name;
|
|
666
724
|
}
|
|
@@ -688,11 +746,18 @@ var UnitOfWork = class UnitOfWork {
|
|
|
688
746
|
async executeRetrieve() {
|
|
689
747
|
if (this.#coordinator.isRestricted) throw new Error("executeRetrieve() cannot be called on restricted child UOWs");
|
|
690
748
|
if (this.#state !== "building-retrieval") throw new Error(`Cannot execute retrieval from state ${this.#state}. Must be in building-retrieval state.`);
|
|
749
|
+
let afterRan = false;
|
|
750
|
+
let failed = false;
|
|
691
751
|
try {
|
|
692
752
|
await this.#coordinator.retrievalReadinessPromise;
|
|
753
|
+
const beforeInjection = await this.#runInstrumentation("beforeRetrieve");
|
|
754
|
+
if (beforeInjection) return this.#handleRetrieveInjection(beforeInjection);
|
|
693
755
|
if (this.#retrievalOps.length === 0) {
|
|
694
756
|
this.#state = "building-mutation";
|
|
695
757
|
const emptyResults = [];
|
|
758
|
+
afterRan = true;
|
|
759
|
+
const afterInjection$1 = await this.#runInstrumentation("afterRetrieve");
|
|
760
|
+
if (afterInjection$1) return this.#handleRetrieveInjection(afterInjection$1);
|
|
696
761
|
this.#retrievalPhaseDeferred.resolve(emptyResults);
|
|
697
762
|
return emptyResults;
|
|
698
763
|
}
|
|
@@ -707,17 +772,31 @@ var UnitOfWork = class UnitOfWork {
|
|
|
707
772
|
if (this.#config?.dryRun) {
|
|
708
773
|
this.#state = "executed";
|
|
709
774
|
const emptyResults = [];
|
|
775
|
+
afterRan = true;
|
|
776
|
+
const afterInjection$1 = await this.#runInstrumentation("afterRetrieve");
|
|
777
|
+
if (afterInjection$1) return this.#handleRetrieveInjection(afterInjection$1);
|
|
710
778
|
this.#retrievalPhaseDeferred.resolve(emptyResults);
|
|
711
779
|
return emptyResults;
|
|
712
780
|
}
|
|
713
781
|
const rawResults = await this.#executor.executeRetrievalPhase(retrievalBatch);
|
|
714
782
|
this.#retrievalResults = this.#decoder.decode(rawResults, this.#retrievalOps);
|
|
715
783
|
this.#state = "building-mutation";
|
|
784
|
+
afterRan = true;
|
|
785
|
+
const afterInjection = await this.#runInstrumentation("afterRetrieve");
|
|
786
|
+
if (afterInjection) return this.#handleRetrieveInjection(afterInjection);
|
|
716
787
|
this.#retrievalPhaseDeferred.resolve(this.#retrievalResults);
|
|
717
788
|
return this.#retrievalResults;
|
|
718
789
|
} catch (error) {
|
|
719
790
|
this.#retrievalError = error instanceof Error ? error : new Error(String(error));
|
|
791
|
+
failed = true;
|
|
720
792
|
throw error;
|
|
793
|
+
} finally {
|
|
794
|
+
try {
|
|
795
|
+
await this.#runInstrumentationFinalizer("afterRetrieve");
|
|
796
|
+
} catch {}
|
|
797
|
+
if (!afterRan && failed) try {
|
|
798
|
+
await this.#runInstrumentation("afterRetrieve");
|
|
799
|
+
} catch {}
|
|
721
800
|
}
|
|
722
801
|
}
|
|
723
802
|
/**
|
|
@@ -727,18 +806,26 @@ var UnitOfWork = class UnitOfWork {
|
|
|
727
806
|
async executeMutations() {
|
|
728
807
|
if (this.#coordinator.isRestricted) throw new Error("executeMutations() cannot be called on restricted child UOWs");
|
|
729
808
|
if (this.#state === "executed") throw new Error(`Cannot execute mutations from state ${this.#state}.`);
|
|
809
|
+
let afterRan = false;
|
|
810
|
+
let failed = false;
|
|
730
811
|
try {
|
|
731
812
|
await this.#coordinator.mutationReadinessPromise;
|
|
813
|
+
const beforeInjection = await this.#runInstrumentation("beforeMutate");
|
|
814
|
+
if (beforeInjection) return this.#handleMutationInjection(beforeInjection);
|
|
732
815
|
const mutationBatch = [];
|
|
733
816
|
for (const op of this.#mutationOps) {
|
|
734
817
|
const compiled = this.#compiler.compileMutationOperation(op);
|
|
735
818
|
if (compiled !== null) {
|
|
819
|
+
compiled.uowId = this.#idempotencyKey;
|
|
736
820
|
this.#config?.onQuery?.(compiled);
|
|
737
821
|
mutationBatch.push(compiled);
|
|
738
822
|
}
|
|
739
823
|
}
|
|
740
824
|
if (this.#config?.dryRun) {
|
|
741
825
|
this.#state = "executed";
|
|
826
|
+
afterRan = true;
|
|
827
|
+
const afterInjection$1 = await this.#runInstrumentation("afterMutate");
|
|
828
|
+
if (afterInjection$1) return this.#handleMutationInjection(afterInjection$1);
|
|
742
829
|
this.#mutationPhaseDeferred.resolve();
|
|
743
830
|
return { success: true };
|
|
744
831
|
}
|
|
@@ -748,11 +835,22 @@ var UnitOfWork = class UnitOfWork {
|
|
|
748
835
|
this.#createdInternalIds.length = 0;
|
|
749
836
|
this.#createdInternalIds.push(...result.createdInternalIds);
|
|
750
837
|
}
|
|
838
|
+
afterRan = true;
|
|
839
|
+
const afterInjection = await this.#runInstrumentation("afterMutate");
|
|
840
|
+
if (afterInjection) return this.#handleMutationInjection(afterInjection);
|
|
751
841
|
this.#mutationPhaseDeferred.resolve();
|
|
752
842
|
return { success: result.success };
|
|
753
843
|
} catch (error) {
|
|
754
844
|
this.#mutationError = error instanceof Error ? error : new Error(String(error));
|
|
845
|
+
failed = true;
|
|
755
846
|
throw error;
|
|
847
|
+
} finally {
|
|
848
|
+
try {
|
|
849
|
+
await this.#runInstrumentationFinalizer("afterMutate");
|
|
850
|
+
} catch {}
|
|
851
|
+
if (!afterRan && failed) try {
|
|
852
|
+
await this.#runInstrumentation("afterMutate");
|
|
853
|
+
} catch {}
|
|
756
854
|
}
|
|
757
855
|
}
|
|
758
856
|
/**
|
|
@@ -820,7 +918,10 @@ var UnitOfWork = class UnitOfWork {
|
|
|
820
918
|
const mutationBatch = [];
|
|
821
919
|
for (const op of this.#mutationOps) {
|
|
822
920
|
const compiled = compiler.compileMutationOperation(op);
|
|
823
|
-
if (compiled !== null)
|
|
921
|
+
if (compiled !== null) {
|
|
922
|
+
compiled.uowId = this.#idempotencyKey;
|
|
923
|
+
mutationBatch.push(compiled);
|
|
924
|
+
}
|
|
824
925
|
}
|
|
825
926
|
return {
|
|
826
927
|
name: this.#name,
|
|
@@ -845,6 +946,9 @@ var TypedUnitOfWork = class {
|
|
|
845
946
|
this.#namespace = namespace;
|
|
846
947
|
this.#uow = uow;
|
|
847
948
|
}
|
|
949
|
+
/**
|
|
950
|
+
* Type-only access to retrieval results for this typed UOW.
|
|
951
|
+
*/
|
|
848
952
|
get $results() {
|
|
849
953
|
throw new Error("type only");
|
|
850
954
|
}
|
|
@@ -905,6 +1009,18 @@ var TypedUnitOfWork = class {
|
|
|
905
1009
|
forSchema(schema, hooks) {
|
|
906
1010
|
return this.#uow.forSchema(schema, hooks);
|
|
907
1011
|
}
|
|
1012
|
+
/**
|
|
1013
|
+
* Database timestamp helper for inserts.
|
|
1014
|
+
*/
|
|
1015
|
+
now() {
|
|
1016
|
+
return dbNow();
|
|
1017
|
+
}
|
|
1018
|
+
/**
|
|
1019
|
+
* Build a database interval for use with now().plus(...).
|
|
1020
|
+
*/
|
|
1021
|
+
interval(input) {
|
|
1022
|
+
return dbInterval(input);
|
|
1023
|
+
}
|
|
908
1024
|
registerSchema(schema, namespace) {
|
|
909
1025
|
this.#uow.registerSchema(schema, namespace);
|
|
910
1026
|
}
|
|
@@ -924,7 +1040,8 @@ var TypedUnitOfWork = class {
|
|
|
924
1040
|
namespace: this.#namespace,
|
|
925
1041
|
table,
|
|
926
1042
|
indexName,
|
|
927
|
-
options
|
|
1043
|
+
options,
|
|
1044
|
+
readTracking: this.#uow.readTrackingEnabled
|
|
928
1045
|
});
|
|
929
1046
|
this.#operationIndices.push(operationIndex);
|
|
930
1047
|
return this;
|
|
@@ -944,7 +1061,8 @@ var TypedUnitOfWork = class {
|
|
|
944
1061
|
table,
|
|
945
1062
|
indexName,
|
|
946
1063
|
options,
|
|
947
|
-
withSingleResult: true
|
|
1064
|
+
withSingleResult: true,
|
|
1065
|
+
readTracking: this.#uow.readTrackingEnabled
|
|
948
1066
|
});
|
|
949
1067
|
this.#operationIndices.push(operationIndex);
|
|
950
1068
|
return this;
|
|
@@ -962,7 +1080,8 @@ var TypedUnitOfWork = class {
|
|
|
962
1080
|
table,
|
|
963
1081
|
indexName,
|
|
964
1082
|
options,
|
|
965
|
-
withCursor: true
|
|
1083
|
+
withCursor: true,
|
|
1084
|
+
readTracking: this.#uow.readTrackingEnabled
|
|
966
1085
|
});
|
|
967
1086
|
this.#operationIndices.push(operationIndex);
|
|
968
1087
|
return this;
|
|
@@ -988,16 +1107,16 @@ var TypedUnitOfWork = class {
|
|
|
988
1107
|
const idColumn = tableSchema.getIdColumn();
|
|
989
1108
|
let externalId;
|
|
990
1109
|
let updatedValues = values;
|
|
991
|
-
const providedIdValue = values[idColumn.
|
|
1110
|
+
const providedIdValue = values[idColumn.name];
|
|
992
1111
|
if (providedIdValue !== void 0) if (typeof providedIdValue === "object" && providedIdValue !== null && "externalId" in providedIdValue) externalId = providedIdValue.externalId;
|
|
993
1112
|
else externalId = providedIdValue;
|
|
994
1113
|
else {
|
|
995
1114
|
const generated = idColumn.generateDefaultValue();
|
|
996
|
-
if (generated === void 0) throw new Error(`No ID value provided and ID column ${idColumn.
|
|
1115
|
+
if (generated === void 0) throw new Error(`No ID value provided and ID column ${idColumn.name} has no default generator`);
|
|
997
1116
|
externalId = generated;
|
|
998
1117
|
updatedValues = {
|
|
999
1118
|
...values,
|
|
1000
|
-
[idColumn.
|
|
1119
|
+
[idColumn.name]: externalId
|
|
1001
1120
|
};
|
|
1002
1121
|
}
|
|
1003
1122
|
this.#uow.addMutationOperation({
|
|
@@ -1065,11 +1184,17 @@ var TypedUnitOfWork = class {
|
|
|
1065
1184
|
get $hooks() {
|
|
1066
1185
|
throw new Error("type only");
|
|
1067
1186
|
}
|
|
1187
|
+
get namespace() {
|
|
1188
|
+
return this.#namespace;
|
|
1189
|
+
}
|
|
1068
1190
|
/**
|
|
1069
1191
|
* Trigger a hook to be executed after the transaction commits.
|
|
1192
|
+
* The namespace is automatically injected from this typed view's schema registration.
|
|
1070
1193
|
*/
|
|
1071
1194
|
triggerHook(hookName, payload, options) {
|
|
1072
|
-
this.#
|
|
1195
|
+
if (this.#namespace === void 0) throw new Error("Cannot trigger hook: schema has no registered namespace. Ensure the schema is registered with a namespace via registerSchema().");
|
|
1196
|
+
const hookNamespace = this.#namespace ?? this.#schema.name;
|
|
1197
|
+
this.#uow.triggerHook(hookNamespace, hookName, payload, options);
|
|
1073
1198
|
}
|
|
1074
1199
|
getTriggeredHooks() {
|
|
1075
1200
|
return this.#uow.getTriggeredHooks();
|