@fragno-dev/db 0.3.0 → 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 +327 -160
- package/CHANGELOG.md +74 -0
- package/README.md +24 -0
- package/dist/adapters/adapters.d.ts +1 -1
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/adapters.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +0 -3
- package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-adapter.js +11 -12
- package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
- package/dist/adapters/generic-sql/generic-sql-uow-executor.js +46 -6
- 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 +1 -1
- package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js +1 -1
- package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
- package/dist/adapters/generic-sql/migration/dialect/sqlite.js +185 -19
- 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 +3 -3
- package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js +1 -1
- package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +1 -1
- package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
- 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 +9 -6
- package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
- package/dist/adapters/generic-sql/query/sql-query-compiler.js +37 -9
- package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
- package/dist/adapters/generic-sql/query/where-builder.js +24 -20
- package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-decoder.js +1 -1
- package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
- package/dist/adapters/generic-sql/uow-encoder.js +8 -9
- package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
- package/dist/adapters/in-memory/condition-evaluator.js +10 -6
- package/dist/adapters/in-memory/condition-evaluator.js.map +1 -1
- package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -1
- package/dist/adapters/in-memory/in-memory-adapter.js +45 -25
- package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -1
- package/dist/adapters/in-memory/in-memory-uow.js +236 -13
- package/dist/adapters/in-memory/in-memory-uow.js.map +1 -1
- package/dist/adapters/in-memory/options.d.ts +2 -0
- package/dist/adapters/in-memory/options.d.ts.map +1 -1
- package/dist/adapters/in-memory/options.js +3 -2
- package/dist/adapters/in-memory/options.js.map +1 -1
- package/dist/adapters/in-memory/reference-resolution.js.map +1 -1
- package/dist/adapters/in-memory/store.js +1 -1
- package/dist/adapters/in-memory/store.js.map +1 -1
- 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.map +1 -1
- 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 +85 -28
- package/dist/db-fragment-definition-builder.d.ts.map +1 -1
- package/dist/db-fragment-definition-builder.js +374 -46
- 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 +5 -20
- package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -1
- package/dist/dispatchers/cloudflare-do/index.js +23 -55
- package/dist/dispatchers/cloudflare-do/index.js.map +1 -1
- 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 +5 -10
- package/dist/dispatchers/node/index.d.ts.map +1 -1
- package/dist/dispatchers/node/index.js +21 -53
- package/dist/dispatchers/node/index.js.map +1 -1
- 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 +128 -27
- package/dist/fragments/internal-fragment.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.js +125 -78
- package/dist/fragments/internal-fragment.js.map +1 -1
- package/dist/fragments/internal-fragment.routes.js +138 -3
- package/dist/fragments/internal-fragment.routes.js.map +1 -1
- package/dist/fragments/internal-fragment.schema.d.ts +7 -1
- package/dist/fragments/internal-fragment.schema.d.ts.map +1 -1
- package/dist/fragments/internal-fragment.schema.js +18 -1
- package/dist/fragments/internal-fragment.schema.js.map +1 -1
- 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 -14
- package/dist/hooks/durable-hooks-processor.js +58 -10
- package/dist/hooks/durable-hooks-processor.js.map +1 -1
- 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 +60 -2
- package/dist/hooks/hooks.d.ts.map +1 -1
- package/dist/hooks/hooks.js +214 -53
- 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 +210 -27
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js +17 -5
- 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 +12 -11
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +10 -10
- package/dist/mod.js.map +1 -1
- package/dist/naming/sql-naming.d.ts.map +1 -1
- package/dist/naming/sql-naming.js.map +1 -1
- package/dist/outbox/outbox-builder.js.map +1 -1
- package/dist/outbox/outbox.d.ts +3 -1
- package/dist/outbox/outbox.d.ts.map +1 -1
- package/dist/outbox/outbox.js.map +1 -1
- 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.map +1 -1
- package/dist/query/cursor.js +7 -1
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/db-now.d.ts +15 -1
- package/dist/query/db-now.d.ts.map +1 -1
- package/dist/query/db-now.js +30 -2
- package/dist/query/db-now.js.map +1 -1
- package/dist/query/orm/orm.js.map +1 -1
- package/dist/query/serialize/create-sql-serializer.js +2 -2
- package/dist/query/serialize/create-sql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
- package/dist/query/serialize/dialect/sqlite-serializer.js +6 -2
- package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
- package/dist/query/simple-query-interface.d.ts +7 -3
- 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 +39 -18
- 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 +42 -16
- package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work/unit-of-work.js +50 -6
- package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
- package/dist/query/value-decoding.js +8 -1
- package/dist/query/value-decoding.js.map +1 -1
- package/dist/query/value-encoding.js.map +1 -1
- package/dist/schema/create.d.ts +69 -25
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +91 -16
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js +1 -1
- package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
- package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
- package/dist/schema/validator.d.ts.map +1 -1
- package/dist/schema/validator.js.map +1 -1
- package/dist/schema-output/drizzle.d.ts.map +1 -1
- package/dist/schema-output/drizzle.js +8 -6
- package/dist/schema-output/drizzle.js.map +1 -1
- package/dist/schema-output/prisma.d.ts.map +1 -1
- package/dist/schema-output/prisma.js +21 -10
- package/dist/schema-output/prisma.js.map +1 -1
- 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 +6 -1
- package/dist/util/default-database-adapter.js.map +1 -1
- package/dist/with-database.d.ts +3 -6
- package/dist/with-database.d.ts.map +1 -1
- package/dist/with-database.js +7 -15
- package/dist/with-database.js.map +1 -1
- package/package.json +33 -41
- package/src/adapters/adapters.ts +5 -4
- package/src/adapters/drizzle/migrate-drizzle.test.ts +46 -9
- package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +5 -3
- package/src/adapters/drizzle/test-utils.ts +2 -1
- package/src/adapters/generic-sql/generic-sql-adapter.test.ts +5 -3
- package/src/adapters/generic-sql/generic-sql-adapter.ts +21 -24
- package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +1 -0
- package/src/adapters/generic-sql/generic-sql-uow-executor.ts +81 -15
- package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +4 -2
- package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
- package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +3 -2
- package/src/adapters/generic-sql/migration/dialect/mysql.ts +1 -0
- package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +5 -4
- package/src/adapters/generic-sql/migration/dialect/postgres.ts +2 -1
- package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +795 -3
- package/src/adapters/generic-sql/migration/dialect/sqlite.ts +385 -57
- 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 +117 -14
- package/src/adapters/generic-sql/migration/prepared-migrations.ts +9 -8
- package/src/adapters/generic-sql/migration/sql-generator.ts +5 -3
- package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +3 -3
- package/src/adapters/generic-sql/query/cursor-utils.test.ts +3 -2
- package/src/adapters/generic-sql/query/cursor-utils.ts +1 -1
- 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 +144 -8
- package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +16 -17
- package/src/adapters/generic-sql/query/select-builder.test.ts +1 -0
- package/src/adapters/generic-sql/query/select-builder.ts +2 -2
- package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +24 -5
- package/src/adapters/generic-sql/query/sql-query-compiler.ts +83 -13
- package/src/adapters/generic-sql/query/where-builder.test.ts +7 -5
- package/src/adapters/generic-sql/query/where-builder.ts +48 -29
- package/src/adapters/generic-sql/sql-adapter-pglite-migrations.test.ts +6 -15
- package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +52 -7
- package/src/adapters/generic-sql/sql-adapter-pglite-queries.test.ts +9 -6
- package/src/adapters/generic-sql/sql-adapter-sqlite3-driver.test.ts +273 -5
- package/src/adapters/generic-sql/sql-adapter-sqlite3-uow.test.ts +123 -6
- package/src/adapters/generic-sql/sql-adapter-sqlocal.test.ts +4 -2
- package/src/adapters/generic-sql/uow-decoder.test.ts +4 -3
- package/src/adapters/generic-sql/uow-decoder.ts +3 -3
- package/src/adapters/generic-sql/uow-encoder.test.ts +4 -2
- package/src/adapters/generic-sql/uow-encoder.ts +14 -18
- package/src/adapters/in-memory/condition-evaluator.test.ts +2 -1
- package/src/adapters/in-memory/condition-evaluator.ts +9 -4
- package/src/adapters/in-memory/in-memory-adapter.ts +155 -44
- package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +50 -2
- package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +158 -3
- package/src/adapters/in-memory/in-memory-uow.ts +402 -26
- package/src/adapters/in-memory/options.test.ts +1 -0
- package/src/adapters/in-memory/options.ts +5 -1
- package/src/adapters/in-memory/outbox.test.ts +361 -0
- package/src/adapters/in-memory/reference-resolution.test.ts +3 -2
- package/src/adapters/in-memory/reference-resolution.ts +2 -2
- package/src/adapters/in-memory/sorted-array-index.test.ts +1 -0
- package/src/adapters/in-memory/store.test.ts +1 -0
- package/src/adapters/in-memory/store.ts +3 -3
- package/src/adapters/in-memory/value-normalization.test.ts +1 -0
- package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +51 -7
- package/src/adapters/shared/from-unit-of-work-compiler.ts +156 -46
- package/src/adapters/shared/uow-operation-compiler.ts +3 -3
- package/src/browser/mod.ts +64 -0
- package/src/client.ts +19 -0
- package/src/db-fragment-definition-builder.test.ts +821 -47
- package/src/db-fragment-definition-builder.ts +857 -110
- package/src/db-fragment-instantiator.test.ts +114 -90
- package/src/db-fragment-integration.test.ts +9 -6
- package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
- package/src/dispatchers/cloudflare-do/index.test.ts +145 -12
- package/src/dispatchers/cloudflare-do/index.ts +49 -90
- package/src/dispatchers/node/dispatcher.ts +112 -0
- package/src/dispatchers/node/index.test.ts +43 -14
- package/src/dispatchers/node/index.ts +38 -75
- 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 +297 -5
- package/src/fragments/internal-fragment.schema.ts +45 -1
- package/src/fragments/internal-fragment.test.ts +223 -251
- package/src/fragments/internal-fragment.ts +278 -154
- 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 +179 -14
- package/src/hooks/durable-hooks-processor.ts +120 -14
- 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 +314 -53
- package/src/hooks/hooks.ts +360 -81
- 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 +93 -0
- package/src/migration-engine/auto-from-schema.ts +360 -42
- package/src/migration-engine/create.test.ts +2 -1
- package/src/migration-engine/create.ts +1 -1
- package/src/migration-engine/generation-engine.test.ts +66 -9
- package/src/migration-engine/generation-engine.ts +31 -10
- package/src/migration-engine/shared.ts +13 -0
- package/src/mod.ts +45 -27
- package/src/naming/sql-naming.ts +1 -0
- package/src/outbox/outbox-builder.ts +2 -2
- package/src/outbox/outbox.test.ts +216 -45
- package/src/outbox/outbox.ts +3 -1
- package/src/query/column-defaults.ts +1 -1
- package/src/query/condition-builder.test.ts +15 -0
- 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 +3 -2
- package/src/query/cursor.ts +15 -3
- package/src/query/db-now.ts +69 -2
- package/src/query/orm/orm.ts +2 -2
- package/src/query/query-type.test.ts +2 -1
- package/src/query/serialize/create-sql-serializer.ts +3 -3
- package/src/query/serialize/dialect/mysql-serializer.ts +1 -1
- package/src/query/serialize/dialect/postgres-serializer.ts +1 -1
- package/src/query/serialize/dialect/sqlite-serializer.test.ts +39 -2
- package/src/query/serialize/dialect/sqlite-serializer.ts +18 -5
- package/src/query/simple-query-interface.ts +10 -4
- package/src/query/unit-of-work/execute-unit-of-work.test.ts +347 -9
- package/src/query/unit-of-work/execute-unit-of-work.ts +63 -20
- 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 +5 -4
- package/src/query/unit-of-work/unit-of-work-types.test.ts +41 -11
- package/src/query/unit-of-work/unit-of-work.test.ts +28 -2
- package/src/query/unit-of-work/unit-of-work.ts +105 -19
- package/src/query/value-decoding.test.ts +50 -2
- package/src/query/value-decoding.ts +17 -4
- package/src/query/value-encoding.test.ts +1 -0
- package/src/query/value-encoding.ts +1 -1
- package/src/schema/create.test.ts +164 -5
- package/src/schema/create.ts +222 -24
- package/src/schema/generate-id.test.ts +1 -0
- package/src/schema/serialize.test.ts +4 -3
- package/src/schema/type-conversion/create-sql-type-mapper.ts +1 -1
- package/src/schema/type-conversion/dialect/sqlite.ts +2 -2
- package/src/schema/type-conversion/type-mapping.test.ts +2 -1
- package/src/schema/validator.test.ts +4 -2
- package/src/schema/validator.ts +1 -0
- package/src/schema-output/drizzle.test.ts +72 -19
- package/src/schema-output/drizzle.ts +24 -18
- package/src/schema-output/prisma.test.ts +172 -14
- package/src/schema-output/prisma.ts +34 -14
- 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 +15 -2
- package/src/with-database.ts +20 -50
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +38 -26
- package/vitest.config.ts +1 -0
- package/dist/hooks/durable-hooks-processor.d.ts.map +0 -1
- package/dist/node_modules/.pnpm/rou3@0.7.12/node_modules/rou3/dist/index.js +0 -168
- package/dist/node_modules/.pnpm/rou3@0.7.12/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 -321
- package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
- package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -669
- 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 -185
- 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 -30
- 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/packages/fragno/dist/internal/trace-context.js +0 -12
- package/dist/packages/fragno/dist/internal/trace-context.js.map +0 -1
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
//#region ../../node_modules/.pnpm/rou3@0.7.12/node_modules/rou3/dist/index.mjs
|
|
2
|
-
const NullProtoObj = /* @__PURE__ */ (() => {
|
|
3
|
-
const e = function() {};
|
|
4
|
-
return e.prototype = Object.create(null), Object.freeze(e.prototype), e;
|
|
5
|
-
})();
|
|
6
|
-
/**
|
|
7
|
-
* Create a new router context.
|
|
8
|
-
*/
|
|
9
|
-
function createRouter() {
|
|
10
|
-
return {
|
|
11
|
-
root: { key: "" },
|
|
12
|
-
static: new NullProtoObj()
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function splitPath(path) {
|
|
16
|
-
const [_, ...s] = path.split("/");
|
|
17
|
-
return s[s.length - 1] === "" ? s.slice(0, -1) : s;
|
|
18
|
-
}
|
|
19
|
-
function getMatchParams(segments, paramsMap) {
|
|
20
|
-
const params = new NullProtoObj();
|
|
21
|
-
for (const [index, name] of paramsMap) {
|
|
22
|
-
const segment = index < 0 ? segments.slice(-(index + 1)).join("/") : segments[index];
|
|
23
|
-
if (typeof name === "string") params[name] = segment;
|
|
24
|
-
else {
|
|
25
|
-
const match = segment.match(name);
|
|
26
|
-
if (match) for (const key in match.groups) params[key] = match.groups[key];
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return params;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Add a route to the router context.
|
|
33
|
-
*/
|
|
34
|
-
function addRoute(ctx, method = "", path, data) {
|
|
35
|
-
method = method.toUpperCase();
|
|
36
|
-
if (path.charCodeAt(0) !== 47) path = `/${path}`;
|
|
37
|
-
path = path.replace(/\\:/g, "%3A");
|
|
38
|
-
const segments = splitPath(path);
|
|
39
|
-
let node = ctx.root;
|
|
40
|
-
let _unnamedParamIndex = 0;
|
|
41
|
-
const paramsMap = [];
|
|
42
|
-
const paramsRegexp = [];
|
|
43
|
-
for (let i = 0; i < segments.length; i++) {
|
|
44
|
-
let segment = segments[i];
|
|
45
|
-
if (segment.startsWith("**")) {
|
|
46
|
-
if (!node.wildcard) node.wildcard = { key: "**" };
|
|
47
|
-
node = node.wildcard;
|
|
48
|
-
paramsMap.push([
|
|
49
|
-
-(i + 1),
|
|
50
|
-
segment.split(":")[1] || "_",
|
|
51
|
-
segment.length === 2
|
|
52
|
-
]);
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
if (segment === "*" || segment.includes(":")) {
|
|
56
|
-
if (!node.param) node.param = { key: "*" };
|
|
57
|
-
node = node.param;
|
|
58
|
-
if (segment === "*") paramsMap.push([
|
|
59
|
-
i,
|
|
60
|
-
`_${_unnamedParamIndex++}`,
|
|
61
|
-
true
|
|
62
|
-
]);
|
|
63
|
-
else if (segment.includes(":", 1)) {
|
|
64
|
-
const regexp = getParamRegexp(segment);
|
|
65
|
-
paramsRegexp[i] = regexp;
|
|
66
|
-
node.hasRegexParam = true;
|
|
67
|
-
paramsMap.push([
|
|
68
|
-
i,
|
|
69
|
-
regexp,
|
|
70
|
-
false
|
|
71
|
-
]);
|
|
72
|
-
} else paramsMap.push([
|
|
73
|
-
i,
|
|
74
|
-
segment.slice(1),
|
|
75
|
-
false
|
|
76
|
-
]);
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
if (segment === "\\*") segment = segments[i] = "*";
|
|
80
|
-
else if (segment === "\\*\\*") segment = segments[i] = "**";
|
|
81
|
-
const child = node.static?.[segment];
|
|
82
|
-
if (child) node = child;
|
|
83
|
-
else {
|
|
84
|
-
const staticNode = { key: segment };
|
|
85
|
-
if (!node.static) node.static = new NullProtoObj();
|
|
86
|
-
node.static[segment] = staticNode;
|
|
87
|
-
node = staticNode;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const hasParams = paramsMap.length > 0;
|
|
91
|
-
if (!node.methods) node.methods = new NullProtoObj();
|
|
92
|
-
node.methods[method] ??= [];
|
|
93
|
-
node.methods[method].push({
|
|
94
|
-
data: data || null,
|
|
95
|
-
paramsRegexp,
|
|
96
|
-
paramsMap: hasParams ? paramsMap : void 0
|
|
97
|
-
});
|
|
98
|
-
if (!hasParams) ctx.static["/" + segments.join("/")] = node;
|
|
99
|
-
}
|
|
100
|
-
function getParamRegexp(segment) {
|
|
101
|
-
const regex = segment.replace(/:(\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\./g, "\\.");
|
|
102
|
-
return /* @__PURE__ */ new RegExp(`^${regex}$`);
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Find a route by path.
|
|
106
|
-
*/
|
|
107
|
-
function findRoute(ctx, method = "", path, opts) {
|
|
108
|
-
if (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);
|
|
109
|
-
const staticNode = ctx.static[path];
|
|
110
|
-
if (staticNode && staticNode.methods) {
|
|
111
|
-
const staticMatch = staticNode.methods[method] || staticNode.methods[""];
|
|
112
|
-
if (staticMatch !== void 0) return staticMatch[0];
|
|
113
|
-
}
|
|
114
|
-
const segments = splitPath(path);
|
|
115
|
-
const match = _lookupTree(ctx, ctx.root, method, segments, 0)?.[0];
|
|
116
|
-
if (match === void 0) return;
|
|
117
|
-
if (opts?.params === false) return match;
|
|
118
|
-
return {
|
|
119
|
-
data: match.data,
|
|
120
|
-
params: match.paramsMap ? getMatchParams(segments, match.paramsMap) : void 0
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
function _lookupTree(ctx, node, method, segments, index) {
|
|
124
|
-
if (index === segments.length) {
|
|
125
|
-
if (node.methods) {
|
|
126
|
-
const match = node.methods[method] || node.methods[""];
|
|
127
|
-
if (match) return match;
|
|
128
|
-
}
|
|
129
|
-
if (node.param && node.param.methods) {
|
|
130
|
-
const match = node.param.methods[method] || node.param.methods[""];
|
|
131
|
-
if (match) {
|
|
132
|
-
const pMap = match[0].paramsMap;
|
|
133
|
-
if (pMap?.[pMap?.length - 1]?.[2]) return match;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
if (node.wildcard && node.wildcard.methods) {
|
|
137
|
-
const match = node.wildcard.methods[method] || node.wildcard.methods[""];
|
|
138
|
-
if (match) {
|
|
139
|
-
const pMap = match[0].paramsMap;
|
|
140
|
-
if (pMap?.[pMap?.length - 1]?.[2]) return match;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
const segment = segments[index];
|
|
146
|
-
if (node.static) {
|
|
147
|
-
const staticChild = node.static[segment];
|
|
148
|
-
if (staticChild) {
|
|
149
|
-
const match = _lookupTree(ctx, staticChild, method, segments, index + 1);
|
|
150
|
-
if (match) return match;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
if (node.param) {
|
|
154
|
-
const match = _lookupTree(ctx, node.param, method, segments, index + 1);
|
|
155
|
-
if (match) {
|
|
156
|
-
if (node.param.hasRegexParam) {
|
|
157
|
-
const exactMatch = match.find((m) => m.paramsRegexp[index]?.test(segment)) || match.find((m) => !m.paramsRegexp[index]);
|
|
158
|
-
return exactMatch ? [exactMatch] : void 0;
|
|
159
|
-
}
|
|
160
|
-
return match;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
if (node.wildcard && node.wildcard.methods) return node.wildcard.methods[method] || node.wildcard.methods[""];
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
//#endregion
|
|
167
|
-
export { addRoute, createRouter, findRoute };
|
|
168
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/rou3@0.7.12/node_modules/rou3/dist/index.mjs"],"sourcesContent":["const NullProtoObj = /* @__PURE__ */ (() => {\n\tconst e = function() {};\n\treturn e.prototype = Object.create(null), Object.freeze(e.prototype), e;\n})();\n\n/**\n* Create a new router context.\n*/\nfunction createRouter() {\n\treturn {\n\t\troot: { key: \"\" },\n\t\tstatic: new NullProtoObj()\n\t};\n}\n\nfunction splitPath(path) {\n\tconst [_, ...s] = path.split(\"/\");\n\treturn s[s.length - 1] === \"\" ? s.slice(0, -1) : s;\n}\nfunction getMatchParams(segments, paramsMap) {\n\tconst params = new NullProtoObj();\n\tfor (const [index, name] of paramsMap) {\n\t\tconst segment = index < 0 ? segments.slice(-(index + 1)).join(\"/\") : segments[index];\n\t\tif (typeof name === \"string\") params[name] = segment;\n\t\telse {\n\t\t\tconst match = segment.match(name);\n\t\t\tif (match) for (const key in match.groups) params[key] = match.groups[key];\n\t\t}\n\t}\n\treturn params;\n}\n\n/**\n* Add a route to the router context.\n*/\nfunction addRoute(ctx, method = \"\", path, data) {\n\tmethod = method.toUpperCase();\n\tif (path.charCodeAt(0) !== 47) path = `/${path}`;\n\tpath = path.replace(/\\\\:/g, \"%3A\");\n\tconst segments = splitPath(path);\n\tlet node = ctx.root;\n\tlet _unnamedParamIndex = 0;\n\tconst paramsMap = [];\n\tconst paramsRegexp = [];\n\tfor (let i = 0; i < segments.length; i++) {\n\t\tlet segment = segments[i];\n\t\tif (segment.startsWith(\"**\")) {\n\t\t\tif (!node.wildcard) node.wildcard = { key: \"**\" };\n\t\t\tnode = node.wildcard;\n\t\t\tparamsMap.push([\n\t\t\t\t-(i + 1),\n\t\t\t\tsegment.split(\":\")[1] || \"_\",\n\t\t\t\tsegment.length === 2\n\t\t\t]);\n\t\t\tbreak;\n\t\t}\n\t\tif (segment === \"*\" || segment.includes(\":\")) {\n\t\t\tif (!node.param) node.param = { key: \"*\" };\n\t\t\tnode = node.param;\n\t\t\tif (segment === \"*\") paramsMap.push([\n\t\t\t\ti,\n\t\t\t\t`_${_unnamedParamIndex++}`,\n\t\t\t\ttrue\n\t\t\t]);\n\t\t\telse if (segment.includes(\":\", 1)) {\n\t\t\t\tconst regexp = getParamRegexp(segment);\n\t\t\t\tparamsRegexp[i] = regexp;\n\t\t\t\tnode.hasRegexParam = true;\n\t\t\t\tparamsMap.push([\n\t\t\t\t\ti,\n\t\t\t\t\tregexp,\n\t\t\t\t\tfalse\n\t\t\t\t]);\n\t\t\t} else paramsMap.push([\n\t\t\t\ti,\n\t\t\t\tsegment.slice(1),\n\t\t\t\tfalse\n\t\t\t]);\n\t\t\tcontinue;\n\t\t}\n\t\tif (segment === \"\\\\*\") segment = segments[i] = \"*\";\n\t\telse if (segment === \"\\\\*\\\\*\") segment = segments[i] = \"**\";\n\t\tconst child = node.static?.[segment];\n\t\tif (child) node = child;\n\t\telse {\n\t\t\tconst staticNode = { key: segment };\n\t\t\tif (!node.static) node.static = new NullProtoObj();\n\t\t\tnode.static[segment] = staticNode;\n\t\t\tnode = staticNode;\n\t\t}\n\t}\n\tconst hasParams = paramsMap.length > 0;\n\tif (!node.methods) node.methods = new NullProtoObj();\n\tnode.methods[method] ??= [];\n\tnode.methods[method].push({\n\t\tdata: data || null,\n\t\tparamsRegexp,\n\t\tparamsMap: hasParams ? paramsMap : void 0\n\t});\n\tif (!hasParams) ctx.static[\"/\" + segments.join(\"/\")] = node;\n}\nfunction getParamRegexp(segment) {\n\tconst regex = segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\");\n\treturn /* @__PURE__ */ new RegExp(`^${regex}$`);\n}\n\n/**\n* Find a route by path.\n*/\nfunction findRoute(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst staticNode = ctx.static[path];\n\tif (staticNode && staticNode.methods) {\n\t\tconst staticMatch = staticNode.methods[method] || staticNode.methods[\"\"];\n\t\tif (staticMatch !== void 0) return staticMatch[0];\n\t}\n\tconst segments = splitPath(path);\n\tconst match = _lookupTree(ctx, ctx.root, method, segments, 0)?.[0];\n\tif (match === void 0) return;\n\tif (opts?.params === false) return match;\n\treturn {\n\t\tdata: match.data,\n\t\tparams: match.paramsMap ? getMatchParams(segments, match.paramsMap) : void 0\n\t};\n}\nfunction _lookupTree(ctx, node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods) {\n\t\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\t\tif (match) return match;\n\t\t}\n\t\tif (node.param && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\tif (node.wildcard && node.wildcard.methods) {\n\t\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\tconst segment = segments[index];\n\tif (node.static) {\n\t\tconst staticChild = node.static[segment];\n\t\tif (staticChild) {\n\t\t\tconst match = _lookupTree(ctx, staticChild, method, segments, index + 1);\n\t\t\tif (match) return match;\n\t\t}\n\t}\n\tif (node.param) {\n\t\tconst match = _lookupTree(ctx, node.param, method, segments, index + 1);\n\t\tif (match) {\n\t\t\tif (node.param.hasRegexParam) {\n\t\t\t\tconst exactMatch = match.find((m) => m.paramsRegexp[index]?.test(segment)) || match.find((m) => !m.paramsRegexp[index]);\n\t\t\t\treturn exactMatch ? [exactMatch] : void 0;\n\t\t\t}\n\t\t\treturn match;\n\t\t}\n\t}\n\tif (node.wildcard && node.wildcard.methods) return node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n}\n\n/**\n* Remove a route from the router context.\n*/\nfunction removeRoute(ctx, method, path) {\n\tconst segments = splitPath(path);\n\treturn _remove(ctx.root, method || \"\", segments, 0);\n}\nfunction _remove(node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods && method in node.methods) {\n\t\t\tdelete node.methods[method];\n\t\t\tif (Object.keys(node.methods).length === 0) node.methods = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst segment = segments[index];\n\tif (segment === \"*\") {\n\t\tif (node.param) {\n\t\t\t_remove(node.param, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.param)) node.param = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tif (segment.startsWith(\"**\")) {\n\t\tif (node.wildcard) {\n\t\t\t_remove(node.wildcard, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.wildcard)) node.wildcard = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst childNode = node.static?.[segment];\n\tif (childNode) {\n\t\t_remove(childNode, method, segments, index + 1);\n\t\tif (_isEmptyNode(childNode)) {\n\t\t\tdelete node.static[segment];\n\t\t\tif (Object.keys(node.static).length === 0) node.static = void 0;\n\t\t}\n\t}\n}\nfunction _isEmptyNode(node) {\n\treturn node.methods === void 0 && node.static === void 0 && node.param === void 0 && node.wildcard === void 0;\n}\n\n/**\n* Find all route patterns that match the given path.\n*/\nfunction findAllRoutes(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst segments = splitPath(path);\n\tconst matches = _findAll(ctx, ctx.root, method, segments, 0);\n\tif (opts?.params === false) return matches;\n\treturn matches.map((m) => {\n\t\treturn {\n\t\t\tdata: m.data,\n\t\t\tparams: m.paramsMap ? getMatchParams(segments, m.paramsMap) : void 0\n\t\t};\n\t});\n}\nfunction _findAll(ctx, node, method, segments, index, matches = []) {\n\tconst segment = segments[index];\n\tif (node.wildcard && node.wildcard.methods) {\n\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\tif (node.param) {\n\t\t_findAll(ctx, node.param, method, segments, index + 1, matches);\n\t\tif (index === segments.length && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) matches.push(...match);\n\t\t\t}\n\t\t}\n\t}\n\tconst staticChild = node.static?.[segment];\n\tif (staticChild) _findAll(ctx, staticChild, method, segments, index + 1, matches);\n\tif (index === segments.length && node.methods) {\n\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\treturn matches;\n}\n\nfunction routeToRegExp(route = \"/\") {\n\tconst reSegments = [];\n\tlet idCtr = 0;\n\tfor (const segment of route.split(\"/\")) {\n\t\tif (!segment) continue;\n\t\tif (segment === \"*\") reSegments.push(`(?<_${idCtr++}>[^/]*)`);\n\t\telse if (segment.startsWith(\"**\")) reSegments.push(segment === \"**\" ? \"?(?<_>.*)\" : `?(?<${segment.slice(3)}>.+)`);\n\t\telse if (segment.includes(\":\")) reSegments.push(segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\"));\n\t\telse reSegments.push(segment);\n\t}\n\treturn /* @__PURE__ */ new RegExp(`^/${reSegments.join(\"/\")}/?$`);\n}\n\nexport { NullProtoObj, addRoute, createRouter, findAllRoutes, findRoute, removeRoute, routeToRegExp };"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
//#region ../fragno/dist/api/bind-services.js
|
|
2
|
-
/**
|
|
3
|
-
* Bind all functions in a service object to a specific context.
|
|
4
|
-
* This allows services to use `this` to access the context.
|
|
5
|
-
*
|
|
6
|
-
* @param services - The service object to bind
|
|
7
|
-
* @param context - The context to bind to (e.g., { getUnitOfWork })
|
|
8
|
-
* @returns A new object with all functions bound to the context
|
|
9
|
-
*/
|
|
10
|
-
function bindServicesToContext(services, context) {
|
|
11
|
-
const bound = {};
|
|
12
|
-
for (const [key, value] of Object.entries(services)) if (typeof value === "function") bound[key] = value.bind(context);
|
|
13
|
-
else if (value && typeof value === "object" && !Array.isArray(value)) bound[key] = bindServicesToContext(value, context);
|
|
14
|
-
else bound[key] = value;
|
|
15
|
-
return bound;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { bindServicesToContext };
|
|
20
|
-
//# sourceMappingURL=bind-services.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bind-services.js","names":[],"sources":["../../../../../../fragno/dist/api/bind-services.js"],"sourcesContent":["//#region src/api/bind-services.ts\n/**\n* Bind all functions in a service object to a specific context.\n* This allows services to use `this` to access the context.\n*\n* @param services - The service object to bind\n* @param context - The context to bind to (e.g., { getUnitOfWork })\n* @returns A new object with all functions bound to the context\n*/\nfunction bindServicesToContext(services, context) {\n\tconst bound = {};\n\tfor (const [key, value] of Object.entries(services)) if (typeof value === \"function\") bound[key] = value.bind(context);\n\telse if (value && typeof value === \"object\" && !Array.isArray(value)) bound[key] = bindServicesToContext(value, context);\n\telse bound[key] = value;\n\treturn bound;\n}\n\n//#endregion\nexport { bindServicesToContext };\n//# sourceMappingURL=bind-services.js.map"],"mappings":";;;;;;;;;AASA,SAAS,sBAAsB,UAAU,SAAS;CACjD,MAAM,QAAQ,EAAE;AAChB,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,SAAS,CAAE,KAAI,OAAO,UAAU,WAAY,OAAM,OAAO,MAAM,KAAK,QAAQ;UAC7G,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,CAAE,OAAM,OAAO,sBAAsB,OAAO,QAAQ;KACnH,OAAM,OAAO;AAClB,QAAO"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
//#region ../fragno/dist/api/error.js
|
|
2
|
-
var FragnoApiError = class extends Error {
|
|
3
|
-
#status;
|
|
4
|
-
#code;
|
|
5
|
-
constructor({ message, code }, status) {
|
|
6
|
-
super(message);
|
|
7
|
-
this.name = "FragnoApiError";
|
|
8
|
-
this.#status = status;
|
|
9
|
-
this.#code = code;
|
|
10
|
-
}
|
|
11
|
-
get status() {
|
|
12
|
-
return this.#status;
|
|
13
|
-
}
|
|
14
|
-
get code() {
|
|
15
|
-
return this.#code;
|
|
16
|
-
}
|
|
17
|
-
toResponse() {
|
|
18
|
-
return Response.json({
|
|
19
|
-
message: this.message,
|
|
20
|
-
code: this.code
|
|
21
|
-
}, { status: this.status });
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
var FragnoApiValidationError = class extends FragnoApiError {
|
|
25
|
-
#issues;
|
|
26
|
-
constructor(message, issues) {
|
|
27
|
-
super({
|
|
28
|
-
message,
|
|
29
|
-
code: "FRAGNO_VALIDATION_ERROR"
|
|
30
|
-
}, 400);
|
|
31
|
-
this.name = "FragnoApiValidationError";
|
|
32
|
-
this.#issues = issues;
|
|
33
|
-
}
|
|
34
|
-
get issues() {
|
|
35
|
-
return this.#issues;
|
|
36
|
-
}
|
|
37
|
-
toResponse() {
|
|
38
|
-
return Response.json({
|
|
39
|
-
message: this.message,
|
|
40
|
-
issues: this.#issues,
|
|
41
|
-
code: this.code
|
|
42
|
-
}, { status: this.status });
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
//#endregion
|
|
47
|
-
export { FragnoApiError, FragnoApiValidationError };
|
|
48
|
-
//# sourceMappingURL=error.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","names":["#status","#code","#issues"],"sources":["../../../../../../fragno/dist/api/error.js"],"sourcesContent":["//#region src/api/error.ts\nvar FragnoApiError = class extends Error {\n\t#status;\n\t#code;\n\tconstructor({ message, code }, status) {\n\t\tsuper(message);\n\t\tthis.name = \"FragnoApiError\";\n\t\tthis.#status = status;\n\t\tthis.#code = code;\n\t}\n\tget status() {\n\t\treturn this.#status;\n\t}\n\tget code() {\n\t\treturn this.#code;\n\t}\n\ttoResponse() {\n\t\treturn Response.json({\n\t\t\tmessage: this.message,\n\t\t\tcode: this.code\n\t\t}, { status: this.status });\n\t}\n};\nvar FragnoApiValidationError = class extends FragnoApiError {\n\t#issues;\n\tconstructor(message, issues) {\n\t\tsuper({\n\t\t\tmessage,\n\t\t\tcode: \"FRAGNO_VALIDATION_ERROR\"\n\t\t}, 400);\n\t\tthis.name = \"FragnoApiValidationError\";\n\t\tthis.#issues = issues;\n\t}\n\tget issues() {\n\t\treturn this.#issues;\n\t}\n\ttoResponse() {\n\t\treturn Response.json({\n\t\t\tmessage: this.message,\n\t\t\tissues: this.#issues,\n\t\t\tcode: this.code\n\t\t}, { status: this.status });\n\t}\n};\n\n//#endregion\nexport { FragnoApiError, FragnoApiValidationError };\n//# sourceMappingURL=error.js.map"],"mappings":";AACA,IAAI,iBAAiB,cAAc,MAAM;CACxC;CACA;CACA,YAAY,EAAE,SAAS,QAAQ,QAAQ;AACtC,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,QAAKA,SAAU;AACf,QAAKC,OAAQ;;CAEd,IAAI,SAAS;AACZ,SAAO,MAAKD;;CAEb,IAAI,OAAO;AACV,SAAO,MAAKC;;CAEb,aAAa;AACZ,SAAO,SAAS,KAAK;GACpB,SAAS,KAAK;GACd,MAAM,KAAK;GACX,EAAE,EAAE,QAAQ,KAAK,QAAQ,CAAC;;;AAG7B,IAAI,2BAA2B,cAAc,eAAe;CAC3D;CACA,YAAY,SAAS,QAAQ;AAC5B,QAAM;GACL;GACA,MAAM;GACN,EAAE,IAAI;AACP,OAAK,OAAO;AACZ,QAAKC,SAAU;;CAEhB,IAAI,SAAS;AACZ,SAAO,MAAKA;;CAEb,aAAa;AACZ,SAAO,SAAS,KAAK;GACpB,SAAS,KAAK;GACd,QAAQ,MAAKA;GACb,MAAM,KAAK;GACX,EAAE,EAAE,QAAQ,KAAK,QAAQ,CAAC"}
|
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
//#region ../fragno/dist/api/fragment-definition-builder.js
|
|
2
|
-
/**
|
|
3
|
-
* Builder class for creating fragment definitions.
|
|
4
|
-
* This provides a fluent API for defining fragments with type safety.
|
|
5
|
-
*/
|
|
6
|
-
var FragmentDefinitionBuilder = class FragmentDefinitionBuilder$1 {
|
|
7
|
-
#name;
|
|
8
|
-
#dependencies;
|
|
9
|
-
#baseServices;
|
|
10
|
-
#namedServices;
|
|
11
|
-
#privateServices;
|
|
12
|
-
#serviceDependencies;
|
|
13
|
-
#createRequestStorage;
|
|
14
|
-
#createThisContext;
|
|
15
|
-
#getExternalStorage;
|
|
16
|
-
#linkedFragments;
|
|
17
|
-
constructor(name, state) {
|
|
18
|
-
this.#name = name;
|
|
19
|
-
if (state) {
|
|
20
|
-
this.#dependencies = state.dependencies;
|
|
21
|
-
this.#baseServices = state.baseServices;
|
|
22
|
-
this.#namedServices = state.namedServices;
|
|
23
|
-
this.#privateServices = state.privateServices;
|
|
24
|
-
this.#serviceDependencies = state.serviceDependencies;
|
|
25
|
-
this.#createRequestStorage = state.createRequestStorage;
|
|
26
|
-
this.#createThisContext = state.createThisContext;
|
|
27
|
-
this.#getExternalStorage = state.getExternalStorage;
|
|
28
|
-
this.#linkedFragments = state.linkedFragments;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
get name() {
|
|
32
|
-
return this.#name;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Define dependencies for this fragment.
|
|
36
|
-
* Dependencies are available to services and handlers.
|
|
37
|
-
*
|
|
38
|
-
* **IMPORTANT**: This method resets all services, storage, and context configurations.
|
|
39
|
-
* Always call `withDependencies` early in the builder chain, before defining services
|
|
40
|
-
* or request storage/context.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* // ✅ GOOD: Dependencies set first
|
|
45
|
-
* defineFragment("my-fragment")
|
|
46
|
-
* .withDependencies(() => ({ apiKey: "..." }))
|
|
47
|
-
* .withRequestStorage(({ deps }) => ({ userId: deps.apiKey }))
|
|
48
|
-
* .providesService("myService", ...)
|
|
49
|
-
*
|
|
50
|
-
* // ❌ BAD: Dependencies set late (erases storage setup)
|
|
51
|
-
* defineFragment("my-fragment")
|
|
52
|
-
* .withRequestStorage(() => ({ userId: "..." })) // This gets erased!
|
|
53
|
-
* .withDependencies(() => ({ apiKey: "..." }))
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
withDependencies(fn) {
|
|
57
|
-
if (this.#baseServices || this.#namedServices || this.#privateServices || this.#createRequestStorage || this.#createThisContext || this.#getExternalStorage) console.warn(`[Fragno] Warning: withDependencies() on fragment "${this.#name}" is resetting previously configured services, request storage, or request context. To avoid this, call withDependencies() earlier in the builder chain, before configuring services or storage.`);
|
|
58
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
59
|
-
dependencies: fn,
|
|
60
|
-
baseServices: void 0,
|
|
61
|
-
namedServices: void 0,
|
|
62
|
-
privateServices: void 0,
|
|
63
|
-
serviceDependencies: this.#serviceDependencies,
|
|
64
|
-
createRequestStorage: void 0,
|
|
65
|
-
createThisContext: void 0,
|
|
66
|
-
getExternalStorage: void 0,
|
|
67
|
-
linkedFragments: this.#linkedFragments
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Define base (unnamed) services for this fragment.
|
|
72
|
-
* Base services are accessible directly on the fragment instance.
|
|
73
|
-
*/
|
|
74
|
-
providesBaseService(fn) {
|
|
75
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
76
|
-
dependencies: this.#dependencies,
|
|
77
|
-
baseServices: fn,
|
|
78
|
-
namedServices: this.#namedServices,
|
|
79
|
-
privateServices: this.#privateServices,
|
|
80
|
-
serviceDependencies: this.#serviceDependencies,
|
|
81
|
-
createRequestStorage: this.#createRequestStorage,
|
|
82
|
-
createThisContext: this.#createThisContext,
|
|
83
|
-
getExternalStorage: this.#getExternalStorage,
|
|
84
|
-
linkedFragments: this.#linkedFragments
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Provide a named service that other fragments or users can use.
|
|
89
|
-
* Named services are accessible as fragment.serviceName.method()
|
|
90
|
-
*/
|
|
91
|
-
providesService(serviceName, fn) {
|
|
92
|
-
const newNamedServices = {
|
|
93
|
-
...this.#namedServices,
|
|
94
|
-
[serviceName]: fn
|
|
95
|
-
};
|
|
96
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
97
|
-
dependencies: this.#dependencies,
|
|
98
|
-
baseServices: this.#baseServices,
|
|
99
|
-
namedServices: newNamedServices,
|
|
100
|
-
privateServices: this.#privateServices,
|
|
101
|
-
serviceDependencies: this.#serviceDependencies,
|
|
102
|
-
createRequestStorage: this.#createRequestStorage,
|
|
103
|
-
createThisContext: this.#createThisContext,
|
|
104
|
-
getExternalStorage: this.#getExternalStorage,
|
|
105
|
-
linkedFragments: this.#linkedFragments
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Provide a private service that is only accessible to the fragment author.
|
|
110
|
-
* Private services are NOT exposed on the fragment instance, but can be used
|
|
111
|
-
* when defining other services (baseServices, namedServices, and other privateServices).
|
|
112
|
-
* Private services are instantiated in order, so earlier private services are available
|
|
113
|
-
* to later ones.
|
|
114
|
-
*/
|
|
115
|
-
providesPrivateService(serviceName, fn) {
|
|
116
|
-
const newPrivateServices = {
|
|
117
|
-
...this.#privateServices,
|
|
118
|
-
[serviceName]: fn
|
|
119
|
-
};
|
|
120
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
121
|
-
dependencies: this.#dependencies,
|
|
122
|
-
baseServices: this.#baseServices,
|
|
123
|
-
namedServices: this.#namedServices,
|
|
124
|
-
privateServices: newPrivateServices,
|
|
125
|
-
serviceDependencies: this.#serviceDependencies,
|
|
126
|
-
createRequestStorage: this.#createRequestStorage,
|
|
127
|
-
createThisContext: this.#createThisContext,
|
|
128
|
-
linkedFragments: this.#linkedFragments
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Declare that this fragment uses a required service provided by the runtime.
|
|
133
|
-
*/
|
|
134
|
-
usesService(serviceName) {
|
|
135
|
-
const newServiceDependencies = {
|
|
136
|
-
...this.#serviceDependencies,
|
|
137
|
-
[serviceName]: {
|
|
138
|
-
name: serviceName,
|
|
139
|
-
required: true
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
143
|
-
dependencies: this.#dependencies,
|
|
144
|
-
baseServices: this.#baseServices,
|
|
145
|
-
namedServices: this.#namedServices,
|
|
146
|
-
privateServices: this.#privateServices,
|
|
147
|
-
serviceDependencies: newServiceDependencies,
|
|
148
|
-
createRequestStorage: this.#createRequestStorage,
|
|
149
|
-
createThisContext: this.#createThisContext,
|
|
150
|
-
linkedFragments: this.#linkedFragments
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Declare that this fragment uses an optional service provided by the runtime.
|
|
155
|
-
*/
|
|
156
|
-
usesOptionalService(serviceName) {
|
|
157
|
-
const newServiceDependencies = {
|
|
158
|
-
...this.#serviceDependencies,
|
|
159
|
-
[serviceName]: {
|
|
160
|
-
name: serviceName,
|
|
161
|
-
required: false
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
165
|
-
dependencies: this.#dependencies,
|
|
166
|
-
baseServices: this.#baseServices,
|
|
167
|
-
namedServices: this.#namedServices,
|
|
168
|
-
privateServices: this.#privateServices,
|
|
169
|
-
serviceDependencies: newServiceDependencies,
|
|
170
|
-
createRequestStorage: this.#createRequestStorage,
|
|
171
|
-
createThisContext: this.#createThisContext,
|
|
172
|
-
linkedFragments: this.#linkedFragments
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Define the type and initial data stored in AsyncLocalStorage for per-request isolation.
|
|
177
|
-
* This should be called before withThisContext if you need to store request-specific data.
|
|
178
|
-
*
|
|
179
|
-
* @param initializer Function that returns the initial storage data for each request
|
|
180
|
-
*
|
|
181
|
-
* @example
|
|
182
|
-
* ```typescript
|
|
183
|
-
* .withRequestStorage(({ config, options, deps }) => ({
|
|
184
|
-
* counter: 0,
|
|
185
|
-
* userId: deps.currentUserId
|
|
186
|
-
* }))
|
|
187
|
-
* .withThisContext(({ storage }) => ({
|
|
188
|
-
* serviceContext: {
|
|
189
|
-
* get counter() { return storage.getStore()!.counter; }
|
|
190
|
-
* },
|
|
191
|
-
* handlerContext: {
|
|
192
|
-
* get counter() { return storage.getStore()!.counter; }
|
|
193
|
-
* }
|
|
194
|
-
* }))
|
|
195
|
-
* ```
|
|
196
|
-
*/
|
|
197
|
-
withRequestStorage(initializer) {
|
|
198
|
-
const preservedExternalStorage = this.#getExternalStorage ? this.#getExternalStorage : void 0;
|
|
199
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
200
|
-
dependencies: this.#dependencies,
|
|
201
|
-
baseServices: this.#baseServices,
|
|
202
|
-
namedServices: this.#namedServices,
|
|
203
|
-
privateServices: this.#privateServices,
|
|
204
|
-
serviceDependencies: this.#serviceDependencies,
|
|
205
|
-
createRequestStorage: initializer,
|
|
206
|
-
createThisContext: void 0,
|
|
207
|
-
getExternalStorage: preservedExternalStorage,
|
|
208
|
-
linkedFragments: this.#linkedFragments
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Use an externally-provided RequestContextStorage instance.
|
|
213
|
-
* This allows multiple fragments to share the same storage instance.
|
|
214
|
-
* Useful when fragments need to coordinate (e.g., database fragments sharing adapter storage).
|
|
215
|
-
* Note: You must still call withRequestStorage to provide the initial storage data.
|
|
216
|
-
*
|
|
217
|
-
* @example
|
|
218
|
-
* ```typescript
|
|
219
|
-
* .withExternalRequestStorage(({ options }) =>
|
|
220
|
-
* options.databaseAdapter.contextStorage
|
|
221
|
-
* )
|
|
222
|
-
* .withRequestStorage(({ options }) => ({
|
|
223
|
-
* uow: options.databaseAdapter.db.createUnitOfWork()
|
|
224
|
-
* }))
|
|
225
|
-
* ```
|
|
226
|
-
*/
|
|
227
|
-
withExternalRequestStorage(getStorage) {
|
|
228
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
229
|
-
dependencies: this.#dependencies,
|
|
230
|
-
baseServices: this.#baseServices,
|
|
231
|
-
namedServices: this.#namedServices,
|
|
232
|
-
privateServices: this.#privateServices,
|
|
233
|
-
serviceDependencies: this.#serviceDependencies,
|
|
234
|
-
createRequestStorage: void 0,
|
|
235
|
-
createThisContext: void 0,
|
|
236
|
-
getExternalStorage: getStorage,
|
|
237
|
-
linkedFragments: this.#linkedFragments
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Set the this contexts for services and handlers in this fragment.
|
|
242
|
-
* Both contexts should contain only methods or getters that read from storage.
|
|
243
|
-
* This ensures proper per-request isolation via AsyncLocalStorage.
|
|
244
|
-
*
|
|
245
|
-
* @example
|
|
246
|
-
* ```ts
|
|
247
|
-
* .withThisContext(({ storage }) => ({
|
|
248
|
-
* serviceContext: {
|
|
249
|
-
* get myNumber() { return storage.getStore()?.myNumber ?? 0; }
|
|
250
|
-
* },
|
|
251
|
-
* handlerContext: {
|
|
252
|
-
* get myNumber() { return storage.getStore()?.myNumber ?? 0; }
|
|
253
|
-
* }
|
|
254
|
-
* }))
|
|
255
|
-
* ```
|
|
256
|
-
*/
|
|
257
|
-
withThisContext(fn) {
|
|
258
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
259
|
-
dependencies: this.#dependencies,
|
|
260
|
-
baseServices: this.#baseServices,
|
|
261
|
-
namedServices: this.#namedServices,
|
|
262
|
-
privateServices: this.#privateServices,
|
|
263
|
-
serviceDependencies: this.#serviceDependencies,
|
|
264
|
-
createRequestStorage: this.#createRequestStorage,
|
|
265
|
-
createThisContext: fn,
|
|
266
|
-
getExternalStorage: this.#getExternalStorage,
|
|
267
|
-
linkedFragments: this.#linkedFragments
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Register a linked fragment that will be automatically instantiated.
|
|
272
|
-
* Linked fragments share the same config/options as the parent and their services
|
|
273
|
-
* are exposed as private services. Routes are not exposed by default, but the
|
|
274
|
-
* instantiator may mount internal linked fragment routes under an internal prefix.
|
|
275
|
-
*/
|
|
276
|
-
withLinkedFragment(name, callback) {
|
|
277
|
-
const newLinkedFragments = {
|
|
278
|
-
...this.#linkedFragments,
|
|
279
|
-
[name]: callback
|
|
280
|
-
};
|
|
281
|
-
return new FragmentDefinitionBuilder$1(this.#name, {
|
|
282
|
-
dependencies: this.#dependencies,
|
|
283
|
-
baseServices: this.#baseServices,
|
|
284
|
-
namedServices: this.#namedServices,
|
|
285
|
-
privateServices: this.#privateServices,
|
|
286
|
-
serviceDependencies: this.#serviceDependencies,
|
|
287
|
-
createRequestStorage: this.#createRequestStorage,
|
|
288
|
-
createThisContext: this.#createThisContext,
|
|
289
|
-
getExternalStorage: this.#getExternalStorage,
|
|
290
|
-
linkedFragments: newLinkedFragments
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Extend this builder with a transformation function.
|
|
295
|
-
* This enables fluent API extensions like `.extend(withDatabase(schema))`.
|
|
296
|
-
*/
|
|
297
|
-
extend(transformer) {
|
|
298
|
-
return transformer(this);
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Build the final fragment definition
|
|
302
|
-
*/
|
|
303
|
-
build() {
|
|
304
|
-
return {
|
|
305
|
-
name: this.#name,
|
|
306
|
-
dependencies: this.#dependencies,
|
|
307
|
-
baseServices: this.#baseServices,
|
|
308
|
-
namedServices: this.#namedServices,
|
|
309
|
-
privateServices: this.#privateServices,
|
|
310
|
-
serviceDependencies: this.#serviceDependencies,
|
|
311
|
-
createRequestStorage: this.#createRequestStorage,
|
|
312
|
-
createThisContext: this.#createThisContext,
|
|
313
|
-
getExternalStorage: this.#getExternalStorage,
|
|
314
|
-
linkedFragments: this.#linkedFragments
|
|
315
|
-
};
|
|
316
|
-
}
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
//#endregion
|
|
320
|
-
export { FragmentDefinitionBuilder };
|
|
321
|
-
//# sourceMappingURL=fragment-definition-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fragment-definition-builder.js","names":["FragmentDefinitionBuilder","#name","#dependencies","#baseServices","#namedServices","#privateServices","#serviceDependencies","#createRequestStorage","#createThisContext","#getExternalStorage","#linkedFragments"],"sources":["../../../../../../fragno/dist/api/fragment-definition-builder.js"],"sourcesContent":["//#region src/api/fragment-definition-builder.ts\n/**\n* Builder class for creating fragment definitions.\n* This provides a fluent API for defining fragments with type safety.\n*/\nvar FragmentDefinitionBuilder = class FragmentDefinitionBuilder {\n\t#name;\n\t#dependencies;\n\t#baseServices;\n\t#namedServices;\n\t#privateServices;\n\t#serviceDependencies;\n\t#createRequestStorage;\n\t#createThisContext;\n\t#getExternalStorage;\n\t#linkedFragments;\n\tconstructor(name, state) {\n\t\tthis.#name = name;\n\t\tif (state) {\n\t\t\tthis.#dependencies = state.dependencies;\n\t\t\tthis.#baseServices = state.baseServices;\n\t\t\tthis.#namedServices = state.namedServices;\n\t\t\tthis.#privateServices = state.privateServices;\n\t\t\tthis.#serviceDependencies = state.serviceDependencies;\n\t\t\tthis.#createRequestStorage = state.createRequestStorage;\n\t\t\tthis.#createThisContext = state.createThisContext;\n\t\t\tthis.#getExternalStorage = state.getExternalStorage;\n\t\t\tthis.#linkedFragments = state.linkedFragments;\n\t\t}\n\t}\n\tget name() {\n\t\treturn this.#name;\n\t}\n\t/**\n\t* Define dependencies for this fragment.\n\t* Dependencies are available to services and handlers.\n\t*\n\t* **IMPORTANT**: This method resets all services, storage, and context configurations.\n\t* Always call `withDependencies` early in the builder chain, before defining services\n\t* or request storage/context.\n\t*\n\t* @example\n\t* ```typescript\n\t* // ✅ GOOD: Dependencies set first\n\t* defineFragment(\"my-fragment\")\n\t* .withDependencies(() => ({ apiKey: \"...\" }))\n\t* .withRequestStorage(({ deps }) => ({ userId: deps.apiKey }))\n\t* .providesService(\"myService\", ...)\n\t*\n\t* // ❌ BAD: Dependencies set late (erases storage setup)\n\t* defineFragment(\"my-fragment\")\n\t* .withRequestStorage(() => ({ userId: \"...\" })) // This gets erased!\n\t* .withDependencies(() => ({ apiKey: \"...\" }))\n\t* ```\n\t*/\n\twithDependencies(fn) {\n\t\tif (this.#baseServices || this.#namedServices || this.#privateServices || this.#createRequestStorage || this.#createThisContext || this.#getExternalStorage) console.warn(`[Fragno] Warning: withDependencies() on fragment \"${this.#name}\" is resetting previously configured services, request storage, or request context. To avoid this, call withDependencies() earlier in the builder chain, before configuring services or storage.`);\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: fn,\n\t\t\tbaseServices: void 0,\n\t\t\tnamedServices: void 0,\n\t\t\tprivateServices: void 0,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: void 0,\n\t\t\tcreateThisContext: void 0,\n\t\t\tgetExternalStorage: void 0,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Define base (unnamed) services for this fragment.\n\t* Base services are accessible directly on the fragment instance.\n\t*/\n\tprovidesBaseService(fn) {\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: fn,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: this.#createThisContext,\n\t\t\tgetExternalStorage: this.#getExternalStorage,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Provide a named service that other fragments or users can use.\n\t* Named services are accessible as fragment.serviceName.method()\n\t*/\n\tprovidesService(serviceName, fn) {\n\t\tconst newNamedServices = {\n\t\t\t...this.#namedServices,\n\t\t\t[serviceName]: fn\n\t\t};\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: newNamedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: this.#createThisContext,\n\t\t\tgetExternalStorage: this.#getExternalStorage,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Provide a private service that is only accessible to the fragment author.\n\t* Private services are NOT exposed on the fragment instance, but can be used\n\t* when defining other services (baseServices, namedServices, and other privateServices).\n\t* Private services are instantiated in order, so earlier private services are available\n\t* to later ones.\n\t*/\n\tprovidesPrivateService(serviceName, fn) {\n\t\tconst newPrivateServices = {\n\t\t\t...this.#privateServices,\n\t\t\t[serviceName]: fn\n\t\t};\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: newPrivateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: this.#createThisContext,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Declare that this fragment uses a required service provided by the runtime.\n\t*/\n\tusesService(serviceName) {\n\t\tconst newServiceDependencies = {\n\t\t\t...this.#serviceDependencies,\n\t\t\t[serviceName]: {\n\t\t\t\tname: serviceName,\n\t\t\t\trequired: true\n\t\t\t}\n\t\t};\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: newServiceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: this.#createThisContext,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Declare that this fragment uses an optional service provided by the runtime.\n\t*/\n\tusesOptionalService(serviceName) {\n\t\tconst newServiceDependencies = {\n\t\t\t...this.#serviceDependencies,\n\t\t\t[serviceName]: {\n\t\t\t\tname: serviceName,\n\t\t\t\trequired: false\n\t\t\t}\n\t\t};\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: newServiceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: this.#createThisContext,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Define the type and initial data stored in AsyncLocalStorage for per-request isolation.\n\t* This should be called before withThisContext if you need to store request-specific data.\n\t*\n\t* @param initializer Function that returns the initial storage data for each request\n\t*\n\t* @example\n\t* ```typescript\n\t* .withRequestStorage(({ config, options, deps }) => ({\n\t* counter: 0,\n\t* userId: deps.currentUserId\n\t* }))\n\t* .withThisContext(({ storage }) => ({\n\t* serviceContext: {\n\t* get counter() { return storage.getStore()!.counter; }\n\t* },\n\t* handlerContext: {\n\t* get counter() { return storage.getStore()!.counter; }\n\t* }\n\t* }))\n\t* ```\n\t*/\n\twithRequestStorage(initializer) {\n\t\tconst preservedExternalStorage = this.#getExternalStorage ? this.#getExternalStorage : void 0;\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: initializer,\n\t\t\tcreateThisContext: void 0,\n\t\t\tgetExternalStorage: preservedExternalStorage,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Use an externally-provided RequestContextStorage instance.\n\t* This allows multiple fragments to share the same storage instance.\n\t* Useful when fragments need to coordinate (e.g., database fragments sharing adapter storage).\n\t* Note: You must still call withRequestStorage to provide the initial storage data.\n\t*\n\t* @example\n\t* ```typescript\n\t* .withExternalRequestStorage(({ options }) =>\n\t* options.databaseAdapter.contextStorage\n\t* )\n\t* .withRequestStorage(({ options }) => ({\n\t* uow: options.databaseAdapter.db.createUnitOfWork()\n\t* }))\n\t* ```\n\t*/\n\twithExternalRequestStorage(getStorage) {\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: void 0,\n\t\t\tcreateThisContext: void 0,\n\t\t\tgetExternalStorage: getStorage,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Set the this contexts for services and handlers in this fragment.\n\t* Both contexts should contain only methods or getters that read from storage.\n\t* This ensures proper per-request isolation via AsyncLocalStorage.\n\t*\n\t* @example\n\t* ```ts\n\t* .withThisContext(({ storage }) => ({\n\t* serviceContext: {\n\t* get myNumber() { return storage.getStore()?.myNumber ?? 0; }\n\t* },\n\t* handlerContext: {\n\t* get myNumber() { return storage.getStore()?.myNumber ?? 0; }\n\t* }\n\t* }))\n\t* ```\n\t*/\n\twithThisContext(fn) {\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: fn,\n\t\t\tgetExternalStorage: this.#getExternalStorage,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t});\n\t}\n\t/**\n\t* Register a linked fragment that will be automatically instantiated.\n\t* Linked fragments share the same config/options as the parent and their services\n\t* are exposed as private services. Routes are not exposed by default, but the\n\t* instantiator may mount internal linked fragment routes under an internal prefix.\n\t*/\n\twithLinkedFragment(name, callback) {\n\t\tconst newLinkedFragments = {\n\t\t\t...this.#linkedFragments,\n\t\t\t[name]: callback\n\t\t};\n\t\treturn new FragmentDefinitionBuilder(this.#name, {\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: this.#createThisContext,\n\t\t\tgetExternalStorage: this.#getExternalStorage,\n\t\t\tlinkedFragments: newLinkedFragments\n\t\t});\n\t}\n\t/**\n\t* Extend this builder with a transformation function.\n\t* This enables fluent API extensions like `.extend(withDatabase(schema))`.\n\t*/\n\textend(transformer) {\n\t\treturn transformer(this);\n\t}\n\t/**\n\t* Build the final fragment definition\n\t*/\n\tbuild() {\n\t\treturn {\n\t\t\tname: this.#name,\n\t\t\tdependencies: this.#dependencies,\n\t\t\tbaseServices: this.#baseServices,\n\t\t\tnamedServices: this.#namedServices,\n\t\t\tprivateServices: this.#privateServices,\n\t\t\tserviceDependencies: this.#serviceDependencies,\n\t\t\tcreateRequestStorage: this.#createRequestStorage,\n\t\t\tcreateThisContext: this.#createThisContext,\n\t\t\tgetExternalStorage: this.#getExternalStorage,\n\t\t\tlinkedFragments: this.#linkedFragments\n\t\t};\n\t}\n};\n/**\n* Create a new fragment definition builder\n*/\nfunction defineFragment(name) {\n\treturn new FragmentDefinitionBuilder(name);\n}\n\n//#endregion\nexport { FragmentDefinitionBuilder, defineFragment };\n//# sourceMappingURL=fragment-definition-builder.js.map"],"mappings":"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"}
|