@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fragment-instantiator.js","names":["FragnoInstantiatedFragment","#name","#routes","#deps","#services","#mountRoute","#serviceThisContext","#handlerThisContext","#contextStorage","#createRequestStorage","#options","#linkedFragments","#internalData","#router","#middlewareHandler","#withRequestStorage","#executeMiddleware","#runMiddlewareForFragment","#executeHandler","FragmentInstantiationBuilder","#definition","#config"],"sources":["../../../../../../fragno/dist/api/fragment-instantiator.js"],"sourcesContent":["import { instantiatedFragmentFakeSymbol } from \"../internal/symbols.js\";\nimport { resolveRouteFactories } from \"./route.js\";\nimport { FragnoApiError } from \"./error.js\";\nimport { getMountRoute } from \"./internal/route.js\";\nimport { RequestInputContext } from \"./request-input-context.js\";\nimport { RequestOutputContext } from \"./request-output-context.js\";\nimport { MutableRequestState } from \"./mutable-request-state.js\";\nimport { RequestMiddlewareInputContext, RequestMiddlewareOutputContext } from \"./request-middleware.js\";\nimport { parseFragnoResponse } from \"./fragno-response.js\";\nimport { RequestContextStorage } from \"./request-context-storage.js\";\nimport { bindServicesToContext } from \"./bind-services.js\";\nimport { recordTraceEvent } from \"../internal/trace-context.js\";\nimport { addRoute, createRouter, findRoute } from \"rou3\";\n\n//#region src/api/fragment-instantiator.ts\nconst serializeHeadersForTrace = (headers) => Array.from(headers.entries()).sort(([a], [b]) => a.localeCompare(b));\nconst serializeQueryForTrace = (query) => Array.from(query.entries()).sort(([a], [b]) => a.localeCompare(b));\nconst serializeBodyForTrace = (body) => {\n\tif (body instanceof FormData) return {\n\t\ttype: \"form-data\",\n\t\tentries: Array.from(body.entries()).map(([key, value]) => {\n\t\t\tif (value instanceof Blob) return [key, {\n\t\t\t\ttype: \"blob\",\n\t\t\t\tsize: value.size,\n\t\t\t\tmime: value.type\n\t\t\t}];\n\t\t\treturn [key, value];\n\t\t})\n\t};\n\tif (body instanceof Blob) return {\n\t\ttype: \"blob\",\n\t\tsize: body.size,\n\t\tmime: body.type\n\t};\n\tif (body instanceof ReadableStream) return { type: \"stream\" };\n\treturn body;\n};\nconst INTERNAL_LINKED_FRAGMENT_NAME = \"_fragno_internal\";\nconst INTERNAL_ROUTE_PREFIX = \"/_internal\";\nfunction normalizeRoutePrefix(prefix) {\n\tif (!prefix.startsWith(\"/\")) prefix = `/${prefix}`;\n\treturn prefix.endsWith(\"/\") && prefix.length > 1 ? prefix.slice(0, -1) : prefix;\n}\nfunction joinRoutePath(prefix, path) {\n\tconst normalizedPrefix = normalizeRoutePrefix(prefix);\n\tif (!path || path === \"/\") return normalizedPrefix;\n\treturn `${normalizedPrefix}${path.startsWith(\"/\") ? path : `/${path}`}`;\n}\nfunction collectLinkedFragmentRoutes(linkedFragments) {\n\tconst linkedRoutes = [];\n\tfor (const [name, fragment] of Object.entries(linkedFragments)) {\n\t\tif (name !== INTERNAL_LINKED_FRAGMENT_NAME) continue;\n\t\tconst internalRoutes = fragment.routes ?? [];\n\t\tif (internalRoutes.length === 0) continue;\n\t\tfor (const route of internalRoutes) linkedRoutes.push({\n\t\t\t...route,\n\t\t\tpath: joinRoutePath(INTERNAL_ROUTE_PREFIX, route.path),\n\t\t\t__internal: {\n\t\t\t\tfragment,\n\t\t\t\toriginalPath: route.path,\n\t\t\t\troutes: internalRoutes\n\t\t\t}\n\t\t});\n\t}\n\treturn linkedRoutes;\n}\n/**\n* Instantiated fragment class with encapsulated state.\n* Provides the same public API as the old FragnoInstantiatedFragment but with better encapsulation.\n*/\nvar FragnoInstantiatedFragment = class FragnoInstantiatedFragment {\n\t[instantiatedFragmentFakeSymbol] = instantiatedFragmentFakeSymbol;\n\t#name;\n\t#routes;\n\t#deps;\n\t#services;\n\t#mountRoute;\n\t#router;\n\t#middlewareHandler;\n\t#serviceThisContext;\n\t#handlerThisContext;\n\t#contextStorage;\n\t#createRequestStorage;\n\t#options;\n\t#linkedFragments;\n\t#internalData;\n\tconstructor(params) {\n\t\tthis.#name = params.name;\n\t\tthis.#routes = params.routes;\n\t\tthis.#deps = params.deps;\n\t\tthis.#services = params.services;\n\t\tthis.#mountRoute = params.mountRoute;\n\t\tthis.#serviceThisContext = params.serviceThisContext;\n\t\tthis.#handlerThisContext = params.handlerThisContext;\n\t\tthis.#contextStorage = params.storage;\n\t\tthis.#createRequestStorage = params.createRequestStorage;\n\t\tthis.#options = params.options;\n\t\tthis.#linkedFragments = params.linkedFragments ?? {};\n\t\tthis.#internalData = params.internalData ?? {};\n\t\tthis.#router = createRouter();\n\t\tfor (const routeConfig of this.#routes) addRoute(this.#router, routeConfig.method.toUpperCase(), routeConfig.path, routeConfig);\n\t\tthis.handler = this.handler.bind(this);\n\t}\n\tget name() {\n\t\treturn this.#name;\n\t}\n\tget routes() {\n\t\treturn this.#routes;\n\t}\n\tget services() {\n\t\treturn this.#services;\n\t}\n\tget mountRoute() {\n\t\treturn this.#mountRoute;\n\t}\n\t/**\n\t* @internal\n\t*/\n\tget $internal() {\n\t\treturn {\n\t\t\tdeps: this.#deps,\n\t\t\toptions: this.#options,\n\t\t\tlinkedFragments: this.#linkedFragments,\n\t\t\t...this.#internalData\n\t\t};\n\t}\n\t/**\n\t* Add middleware to this fragment.\n\t* Middleware can inspect and modify requests before they reach handlers.\n\t*/\n\twithMiddleware(handler) {\n\t\tif (this.#middlewareHandler) throw new Error(\"Middleware already set\");\n\t\tthis.#middlewareHandler = handler;\n\t\treturn this;\n\t}\n\t#withRequestStorage(callback) {\n\t\tif (!this.#serviceThisContext && !this.#handlerThisContext) return callback();\n\t\tconst storageData = this.#createRequestStorage ? this.#createRequestStorage() : {};\n\t\treturn this.#contextStorage.run(storageData, callback);\n\t}\n\tinContext(callback) {\n\t\tif (this.#handlerThisContext) {\n\t\t\tconst boundCallback = callback.bind(this.#handlerThisContext);\n\t\t\treturn this.#withRequestStorage(boundCallback);\n\t\t}\n\t\treturn this.#withRequestStorage(callback);\n\t}\n\t/**\n\t* Get framework-specific handlers for this fragment.\n\t* Use this to integrate the fragment with different fullstack frameworks.\n\t*/\n\thandlersFor(framework) {\n\t\tconst handler = this.handler.bind(this);\n\t\tif (framework === \"h3\" || framework === \"nuxt\") throw new Error(`To get handlers for h3, use the 'fromWebHandler' utility function:\n import { fromWebHandler } from \"h3\";\n export default fromWebHandler(myFragment().handler);`);\n\t\treturn {\n\t\t\tastro: { ALL: handler },\n\t\t\t\"react-router\": {\n\t\t\t\tloader: ({ request }) => handler(request),\n\t\t\t\taction: ({ request }) => handler(request)\n\t\t\t},\n\t\t\t\"next-js\": {\n\t\t\t\tGET: handler,\n\t\t\t\tPOST: handler,\n\t\t\t\tPUT: handler,\n\t\t\t\tDELETE: handler,\n\t\t\t\tPATCH: handler,\n\t\t\t\tHEAD: handler,\n\t\t\t\tOPTIONS: handler\n\t\t\t},\n\t\t\t\"svelte-kit\": {\n\t\t\t\tGET: handler,\n\t\t\t\tPOST: handler,\n\t\t\t\tPUT: handler,\n\t\t\t\tDELETE: handler,\n\t\t\t\tPATCH: handler,\n\t\t\t\tHEAD: handler,\n\t\t\t\tOPTIONS: handler\n\t\t\t},\n\t\t\t\"solid-start\": {\n\t\t\t\tGET: ({ request }) => handler(request),\n\t\t\t\tPOST: ({ request }) => handler(request),\n\t\t\t\tPUT: ({ request }) => handler(request),\n\t\t\t\tDELETE: ({ request }) => handler(request),\n\t\t\t\tPATCH: ({ request }) => handler(request),\n\t\t\t\tHEAD: ({ request }) => handler(request),\n\t\t\t\tOPTIONS: ({ request }) => handler(request)\n\t\t\t},\n\t\t\t\"tanstack-start\": {\n\t\t\t\tGET: ({ request }) => handler(request),\n\t\t\t\tPOST: ({ request }) => handler(request),\n\t\t\t\tPUT: ({ request }) => handler(request),\n\t\t\t\tDELETE: ({ request }) => handler(request),\n\t\t\t\tPATCH: ({ request }) => handler(request),\n\t\t\t\tHEAD: ({ request }) => handler(request),\n\t\t\t\tOPTIONS: ({ request }) => handler(request)\n\t\t\t}\n\t\t}[framework];\n\t}\n\t/**\n\t* Main request handler for this fragment.\n\t* Handles routing, middleware, and error handling.\n\t*/\n\tasync handler(req) {\n\t\tconst url = new URL(req.url);\n\t\tconst pathname = url.pathname;\n\t\tconst matchRoute = pathname.startsWith(this.#mountRoute) ? pathname.slice(this.#mountRoute.length) : null;\n\t\tif (matchRoute === null) return Response.json({\n\t\t\terror: `Fragno: Route for '${this.#name}' not found. Is the fragment mounted on the right route? Expecting: '${this.#mountRoute}'.`,\n\t\t\tcode: \"ROUTE_NOT_FOUND\"\n\t\t}, { status: 404 });\n\t\tconst route = findRoute(this.#router, req.method, matchRoute);\n\t\tif (!route) return Response.json({\n\t\t\terror: `Fragno: Route for '${this.#name}' not found`,\n\t\t\tcode: \"ROUTE_NOT_FOUND\"\n\t\t}, { status: 404 });\n\t\tconst routeConfig = route.data;\n\t\tconst expectedContentType = routeConfig.contentType ?? \"application/json\";\n\t\tlet requestBody = void 0;\n\t\tlet rawBody = void 0;\n\t\tif (req.body instanceof ReadableStream) {\n\t\t\tconst requestContentType = (req.headers.get(\"content-type\") ?? \"\").toLowerCase();\n\t\t\tif (expectedContentType === \"multipart/form-data\") {\n\t\t\t\tif (!requestContentType.includes(\"multipart/form-data\")) return Response.json({\n\t\t\t\t\terror: `This endpoint expects multipart/form-data, but received: ${requestContentType || \"no content-type\"}`,\n\t\t\t\t\tcode: \"UNSUPPORTED_MEDIA_TYPE\"\n\t\t\t\t}, { status: 415 });\n\t\t\t\ttry {\n\t\t\t\t\trequestBody = await req.formData();\n\t\t\t\t} catch {\n\t\t\t\t\treturn Response.json({\n\t\t\t\t\t\terror: \"Failed to parse multipart form data\",\n\t\t\t\t\t\tcode: \"INVALID_REQUEST_BODY\"\n\t\t\t\t\t}, { status: 400 });\n\t\t\t\t}\n\t\t\t} else if (expectedContentType === \"application/octet-stream\") {\n\t\t\t\tif (!requestContentType.includes(\"application/octet-stream\")) return Response.json({\n\t\t\t\t\terror: `This endpoint expects application/octet-stream, but received: ${requestContentType || \"no content-type\"}`,\n\t\t\t\t\tcode: \"UNSUPPORTED_MEDIA_TYPE\"\n\t\t\t\t}, { status: 415 });\n\t\t\t\trequestBody = req.body ?? new ReadableStream();\n\t\t\t} else {\n\t\t\t\tif (requestContentType.includes(\"multipart/form-data\")) return Response.json({\n\t\t\t\t\terror: `This endpoint expects JSON, but received multipart/form-data. Use a route with contentType: \"multipart/form-data\" for file uploads.`,\n\t\t\t\t\tcode: \"UNSUPPORTED_MEDIA_TYPE\"\n\t\t\t\t}, { status: 415 });\n\t\t\t\trawBody = await req.clone().text();\n\t\t\t\tif (rawBody) try {\n\t\t\t\t\trequestBody = JSON.parse(rawBody);\n\t\t\t\t} catch {\n\t\t\t\t\trequestBody = void 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst decodedRouteParams = {};\n\t\tfor (const [key, value] of Object.entries(route.params ?? {})) decodedRouteParams[key] = decodeURIComponent(value);\n\t\tconst requestState = new MutableRequestState({\n\t\t\tpathParams: decodedRouteParams,\n\t\t\tsearchParams: url.searchParams,\n\t\t\tbody: requestBody,\n\t\t\theaders: new Headers(req.headers)\n\t\t});\n\t\tconst executeRequest = async () => {\n\t\t\tconst middlewareResult = await this.#executeMiddleware(req, route, requestState);\n\t\t\tif (middlewareResult !== void 0) return middlewareResult;\n\t\t\tconst internalMeta = routeConfig.__internal;\n\t\t\tif (internalMeta) {\n\t\t\t\tconst internalResult = await FragnoInstantiatedFragment.#runMiddlewareForFragment(internalMeta.fragment, {\n\t\t\t\t\treq,\n\t\t\t\t\tmethod: routeConfig.method,\n\t\t\t\t\tpath: internalMeta.originalPath,\n\t\t\t\t\trequestState,\n\t\t\t\t\troutes: internalMeta.routes\n\t\t\t\t});\n\t\t\t\tif (internalResult !== void 0) return internalResult;\n\t\t\t}\n\t\t\treturn this.#executeHandler(req, route, requestState, rawBody);\n\t\t};\n\t\treturn this.#withRequestStorage(executeRequest);\n\t}\n\t/**\n\t* Call a route directly with typed inputs and outputs.\n\t* Useful for testing and server-side route calls.\n\t*/\n\tasync callRoute(method, path, inputOptions) {\n\t\treturn parseFragnoResponse(await this.callRouteRaw(method, path, inputOptions));\n\t}\n\t/**\n\t* Call a route directly and get the raw Response object.\n\t* Useful for testing and server-side route calls.\n\t*/\n\tasync callRouteRaw(method, path, inputOptions) {\n\t\tconst route = this.#routes.find((r) => r.method === method && r.path === path);\n\t\tif (!route) return Response.json({\n\t\t\terror: `Route ${method} ${path} not found`,\n\t\t\tcode: \"ROUTE_NOT_FOUND\"\n\t\t}, { status: 404 });\n\t\tconst { pathParams = {}, body, query, headers } = inputOptions || {};\n\t\tconst searchParams = query instanceof URLSearchParams ? query : query ? new URLSearchParams(query) : new URLSearchParams();\n\t\tconst requestHeaders = headers instanceof Headers ? headers : headers ? new Headers(headers) : new Headers();\n\t\tconst inputContext = new RequestInputContext({\n\t\t\tpath: route.path,\n\t\t\tmethod: route.method,\n\t\t\tpathParams,\n\t\t\tsearchParams,\n\t\t\theaders: requestHeaders,\n\t\t\tparsedBody: body,\n\t\t\tinputSchema: route.inputSchema,\n\t\t\tshouldValidateInput: true\n\t\t});\n\t\trecordTraceEvent({\n\t\t\ttype: \"route-input\",\n\t\t\tmethod: route.method,\n\t\t\tpath: route.path,\n\t\t\tpathParams: pathParams ?? {},\n\t\t\tqueryParams: serializeQueryForTrace(searchParams),\n\t\t\theaders: serializeHeadersForTrace(requestHeaders),\n\t\t\tbody: serializeBodyForTrace(body)\n\t\t});\n\t\tconst outputContext = new RequestOutputContext(route.outputSchema);\n\t\tconst executeHandler = async () => {\n\t\t\ttry {\n\t\t\t\tconst thisContext = this.#handlerThisContext ?? {};\n\t\t\t\treturn await route.handler.call(thisContext, inputContext, outputContext);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Error in callRoute handler\", error);\n\t\t\t\tif (error instanceof FragnoApiError) return error.toResponse();\n\t\t\t\treturn Response.json({\n\t\t\t\t\terror: \"Internal server error\",\n\t\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\"\n\t\t\t\t}, { status: 500 });\n\t\t\t}\n\t\t};\n\t\treturn this.#withRequestStorage(executeHandler);\n\t}\n\t/**\n\t* Execute middleware for a request.\n\t* Returns undefined if middleware allows the request to continue to the handler.\n\t*/\n\tasync #executeMiddleware(req, route, requestState) {\n\t\tif (!route) return;\n\t\tconst { path } = route.data;\n\t\treturn FragnoInstantiatedFragment.#runMiddlewareForFragment(this, {\n\t\t\treq,\n\t\t\tmethod: req.method,\n\t\t\tpath,\n\t\t\trequestState\n\t\t});\n\t}\n\tstatic async #runMiddlewareForFragment(fragment, options) {\n\t\tif (!fragment.#middlewareHandler) return;\n\t\tconst middlewareInputContext = new RequestMiddlewareInputContext(options.routes ?? fragment.#routes, {\n\t\t\tmethod: options.method,\n\t\t\tpath: options.path,\n\t\t\trequest: options.req,\n\t\t\tstate: options.requestState\n\t\t});\n\t\tconst middlewareOutputContext = new RequestMiddlewareOutputContext(fragment.#deps, fragment.#services);\n\t\ttry {\n\t\t\tconst middlewareResult = await fragment.#middlewareHandler(middlewareInputContext, middlewareOutputContext);\n\t\t\trecordTraceEvent({\n\t\t\t\ttype: \"middleware-decision\",\n\t\t\t\tmethod: options.method,\n\t\t\t\tpath: options.path,\n\t\t\t\toutcome: middlewareResult ? \"deny\" : \"allow\",\n\t\t\t\tstatus: middlewareResult?.status\n\t\t\t});\n\t\t\tif (middlewareResult !== void 0) return middlewareResult;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error in middleware\", error);\n\t\t\trecordTraceEvent({\n\t\t\t\ttype: \"middleware-decision\",\n\t\t\t\tmethod: options.method,\n\t\t\t\tpath: options.path,\n\t\t\t\toutcome: \"deny\",\n\t\t\t\tstatus: error instanceof FragnoApiError ? error.status : 500\n\t\t\t});\n\t\t\tif (error instanceof FragnoApiError) return error.toResponse();\n\t\t\treturn Response.json({\n\t\t\t\terror: \"Internal server error\",\n\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\"\n\t\t\t}, { status: 500 });\n\t\t}\n\t}\n\t/**\n\t* Execute a route handler with proper error handling.\n\t*/\n\tasync #executeHandler(req, route, requestState, rawBody) {\n\t\tif (!route) return Response.json({\n\t\t\terror: \"Route not found\",\n\t\t\tcode: \"ROUTE_NOT_FOUND\"\n\t\t}, { status: 404 });\n\t\tconst { handler, inputSchema, outputSchema, path } = route.data;\n\t\tconst inputContext = await RequestInputContext.fromRequest({\n\t\t\trequest: req,\n\t\t\tmethod: req.method,\n\t\t\tpath,\n\t\t\tpathParams: route.params ?? {},\n\t\t\tinputSchema,\n\t\t\tstate: requestState,\n\t\t\trawBody\n\t\t});\n\t\trecordTraceEvent({\n\t\t\ttype: \"route-input\",\n\t\t\tmethod: req.method,\n\t\t\tpath,\n\t\t\tpathParams: inputContext.pathParams,\n\t\t\tqueryParams: serializeQueryForTrace(requestState.searchParams),\n\t\t\theaders: serializeHeadersForTrace(requestState.headers),\n\t\t\tbody: serializeBodyForTrace(requestState.body)\n\t\t});\n\t\tconst outputContext = new RequestOutputContext(outputSchema);\n\t\ttry {\n\t\t\tconst contextForHandler = this.#handlerThisContext ?? {};\n\t\t\treturn await handler.call(contextForHandler, inputContext, outputContext);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error in handler\", error);\n\t\t\tif (error instanceof FragnoApiError) return error.toResponse();\n\t\t\treturn Response.json({\n\t\t\t\terror: \"Internal server error\",\n\t\t\t\tcode: \"INTERNAL_SERVER_ERROR\"\n\t\t\t}, { status: 500 });\n\t\t}\n\t}\n};\n/**\n* Core instantiation function that creates a fragment instance from a definition.\n* This function validates dependencies, calls all callbacks, and wires everything together.\n*/\nfunction instantiateFragment(definition, config, routesOrFactories, options, serviceImplementations, instantiationOptions) {\n\tconst { dryRun = false } = instantiationOptions ?? {};\n\tconst serviceDependencies = definition.serviceDependencies;\n\tif (serviceDependencies) for (const [serviceName, meta] of Object.entries(serviceDependencies)) {\n\t\tconst metadata = meta;\n\t\tconst implementation = serviceImplementations?.[serviceName];\n\t\tif (metadata.required && !implementation) throw new Error(`Fragment '${definition.name}' requires service '${metadata.name}' but it was not provided`);\n\t}\n\tlet deps;\n\ttry {\n\t\tdeps = definition.dependencies?.({\n\t\t\tconfig,\n\t\t\toptions\n\t\t}) ?? {};\n\t} catch (error) {\n\t\tif (dryRun) {\n\t\t\tconsole.warn(\"Warning: Failed to initialize dependencies in dry run mode:\", error instanceof Error ? error.message : String(error));\n\t\t\tdeps = {};\n\t\t} else throw error;\n\t}\n\tconst linkedFragmentInstances = {};\n\tconst linkedFragmentServices = {};\n\tif (definition.linkedFragments) for (const [name, callback] of Object.entries(definition.linkedFragments)) {\n\t\tconst linkedFragment = callback({\n\t\t\tconfig,\n\t\t\toptions,\n\t\t\tserviceDependencies: serviceImplementations\n\t\t});\n\t\tlinkedFragmentInstances[name] = linkedFragment;\n\t\tconst services$1 = linkedFragment.services;\n\t\tfor (const [serviceName, service] of Object.entries(services$1)) linkedFragmentServices[serviceName] = service;\n\t}\n\tconst defineService = (services$1) => services$1;\n\tconst privateServices = { ...linkedFragmentServices };\n\tif (definition.privateServices) for (const [serviceName, factory] of Object.entries(definition.privateServices)) {\n\t\tconst serviceFactory = factory;\n\t\ttry {\n\t\t\tprivateServices[serviceName] = serviceFactory({\n\t\t\t\tconfig,\n\t\t\t\toptions,\n\t\t\t\tdeps,\n\t\t\t\tserviceDeps: serviceImplementations ?? {},\n\t\t\t\tprivateServices,\n\t\t\t\tdefineService\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (dryRun) {\n\t\t\t\tconsole.warn(`Warning: Failed to initialize private service '${serviceName}' in dry run mode:`, error instanceof Error ? error.message : String(error));\n\t\t\t\tprivateServices[serviceName] = {};\n\t\t\t} else throw error;\n\t\t}\n\t}\n\tlet baseServices;\n\ttry {\n\t\tbaseServices = definition.baseServices?.({\n\t\t\tconfig,\n\t\t\toptions,\n\t\t\tdeps,\n\t\t\tserviceDeps: serviceImplementations ?? {},\n\t\t\tprivateServices,\n\t\t\tdefineService\n\t\t}) ?? {};\n\t} catch (error) {\n\t\tif (dryRun) {\n\t\t\tconsole.warn(\"Warning: Failed to initialize base services in dry run mode:\", error instanceof Error ? error.message : String(error));\n\t\t\tbaseServices = {};\n\t\t} else throw error;\n\t}\n\tconst namedServices = {};\n\tif (definition.namedServices) for (const [serviceName, factory] of Object.entries(definition.namedServices)) {\n\t\tconst serviceFactory = factory;\n\t\ttry {\n\t\t\tnamedServices[serviceName] = serviceFactory({\n\t\t\t\tconfig,\n\t\t\t\toptions,\n\t\t\t\tdeps,\n\t\t\t\tserviceDeps: serviceImplementations ?? {},\n\t\t\t\tprivateServices,\n\t\t\t\tdefineService\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (dryRun) {\n\t\t\t\tconsole.warn(`Warning: Failed to initialize service '${serviceName}' in dry run mode:`, error instanceof Error ? error.message : String(error));\n\t\t\t\tnamedServices[serviceName] = {};\n\t\t\t} else throw error;\n\t\t}\n\t}\n\tconst services = {\n\t\t...baseServices,\n\t\t...namedServices\n\t};\n\tconst storage = definition.getExternalStorage ? definition.getExternalStorage({\n\t\tconfig,\n\t\toptions,\n\t\tdeps\n\t}) : new RequestContextStorage();\n\tconst contexts = definition.createThisContext?.({\n\t\tconfig,\n\t\toptions,\n\t\tdeps,\n\t\tstorage\n\t});\n\tconst serviceContext = contexts?.serviceContext;\n\tconst handlerContext = contexts?.handlerContext;\n\tconst internalData = definition.internalDataFactory?.({\n\t\tconfig,\n\t\toptions,\n\t\tdeps,\n\t\tlinkedFragments: linkedFragmentInstances\n\t}) ?? {};\n\tconst boundServices = serviceContext ? bindServicesToContext(services, serviceContext) : services;\n\tconst routes = resolveRouteFactories({\n\t\tconfig,\n\t\tdeps,\n\t\tservices: boundServices,\n\t\tserviceDeps: serviceImplementations ?? {}\n\t}, routesOrFactories);\n\tconst linkedRoutes = collectLinkedFragmentRoutes(linkedFragmentInstances);\n\tconst finalRoutes = linkedRoutes.length > 0 ? [...routes, ...linkedRoutes] : routes;\n\tconst mountRoute = getMountRoute({\n\t\tname: definition.name,\n\t\tmountRoute: options.mountRoute\n\t});\n\tconst createRequestStorageWithContext = definition.createRequestStorage ? () => definition.createRequestStorage({\n\t\tconfig,\n\t\toptions,\n\t\tdeps\n\t}) : void 0;\n\treturn new FragnoInstantiatedFragment({\n\t\tname: definition.name,\n\t\troutes: finalRoutes,\n\t\tdeps,\n\t\tservices: boundServices,\n\t\tmountRoute,\n\t\tserviceThisContext: serviceContext,\n\t\thandlerThisContext: handlerContext,\n\t\tstorage,\n\t\tcreateRequestStorage: createRequestStorageWithContext,\n\t\toptions,\n\t\tlinkedFragments: linkedFragmentInstances,\n\t\tinternalData\n\t});\n}\n/**\n* Fluent builder for instantiating fragments.\n* Provides a type-safe API for configuring and building fragment instances.\n*/\nvar FragmentInstantiationBuilder = class FragmentInstantiationBuilder {\n\t#definition;\n\t#config;\n\t#routes;\n\t#options;\n\t#services;\n\tconstructor(definition, routes) {\n\t\tthis.#definition = definition;\n\t\tthis.#routes = routes;\n\t}\n\t/**\n\t* Get the fragment definition\n\t*/\n\tget definition() {\n\t\treturn this.#definition;\n\t}\n\t/**\n\t* Get the configured routes\n\t*/\n\tget routes() {\n\t\treturn this.#routes ?? [];\n\t}\n\t/**\n\t* Get the configuration\n\t*/\n\tget config() {\n\t\treturn this.#config;\n\t}\n\t/**\n\t* Get the options\n\t*/\n\tget options() {\n\t\treturn this.#options;\n\t}\n\t/**\n\t* Set the configuration for the fragment\n\t*/\n\twithConfig(config) {\n\t\tthis.#config = config;\n\t\treturn this;\n\t}\n\t/**\n\t* Set the routes for the fragment\n\t*/\n\twithRoutes(routes) {\n\t\tconst newBuilder = new FragmentInstantiationBuilder(this.#definition, routes);\n\t\tnewBuilder.#config = this.#config;\n\t\tnewBuilder.#options = this.#options;\n\t\tnewBuilder.#services = this.#services;\n\t\treturn newBuilder;\n\t}\n\t/**\n\t* Set the options for the fragment (e.g., mountRoute, databaseAdapter)\n\t*/\n\twithOptions(options) {\n\t\tthis.#options = options;\n\t\treturn this;\n\t}\n\t/**\n\t* Provide implementations for services that this fragment uses\n\t*/\n\twithServices(services) {\n\t\tthis.#services = services;\n\t\treturn this;\n\t}\n\t/**\n\t* Build and return the instantiated fragment\n\t*/\n\tbuild() {\n\t\tconst dryRun = process.env[\"FRAGNO_INIT_DRY_RUN\"] === \"true\";\n\t\treturn instantiateFragment(this.#definition, this.#config ?? {}, this.#routes ?? [], this.#options ?? {}, this.#services, { dryRun });\n\t}\n};\n/**\n* Create a fluent builder for instantiating a fragment.\n*\n* @example\n* ```ts\n* const fragment = instantiate(myFragmentDefinition)\n* .withConfig({ apiKey: \"key\" })\n* .withRoutes([route1, route2])\n* .withOptions({ mountRoute: \"/api\" })\n* .build();\n* ```\n*/\nfunction instantiate(definition) {\n\treturn new FragmentInstantiationBuilder(definition);\n}\n\n//#endregion\nexport { FragmentInstantiationBuilder, FragnoInstantiatedFragment, instantiate, instantiateFragment };\n//# sourceMappingURL=fragment-instantiator.js.map"],"mappings":"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"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
//#region ../fragno/dist/api/fragno-response.js
|
|
2
|
-
/**
|
|
3
|
-
* Parse a Response object into a FragnoResponse discriminated union
|
|
4
|
-
*/
|
|
5
|
-
async function parseFragnoResponse(response) {
|
|
6
|
-
const status = response.status;
|
|
7
|
-
const headers = response.headers;
|
|
8
|
-
if ((headers.get("content-type") || "").includes("application/x-ndjson")) return {
|
|
9
|
-
type: "jsonStream",
|
|
10
|
-
status,
|
|
11
|
-
headers,
|
|
12
|
-
stream: parseNDJSONStream(response)
|
|
13
|
-
};
|
|
14
|
-
const text = await response.text();
|
|
15
|
-
if (!text || text === "null") return {
|
|
16
|
-
type: "empty",
|
|
17
|
-
status,
|
|
18
|
-
headers
|
|
19
|
-
};
|
|
20
|
-
const data = JSON.parse(text);
|
|
21
|
-
if (data && typeof data === "object" && "code" in data) {
|
|
22
|
-
if ("message" in data) return {
|
|
23
|
-
type: "error",
|
|
24
|
-
status,
|
|
25
|
-
headers,
|
|
26
|
-
error: {
|
|
27
|
-
message: data.message,
|
|
28
|
-
code: data.code
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
if ("error" in data) return {
|
|
32
|
-
type: "error",
|
|
33
|
-
status,
|
|
34
|
-
headers,
|
|
35
|
-
error: {
|
|
36
|
-
message: data.error,
|
|
37
|
-
code: data.code
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
type: "json",
|
|
43
|
-
status,
|
|
44
|
-
headers,
|
|
45
|
-
data
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Parse an NDJSON stream into an async generator
|
|
50
|
-
*/
|
|
51
|
-
async function* parseNDJSONStream(response) {
|
|
52
|
-
if (!response.body) return;
|
|
53
|
-
const reader = response.body.getReader();
|
|
54
|
-
const decoder = new TextDecoder();
|
|
55
|
-
let buffer = "";
|
|
56
|
-
try {
|
|
57
|
-
while (true) {
|
|
58
|
-
const { done, value } = await reader.read();
|
|
59
|
-
if (done) break;
|
|
60
|
-
buffer += decoder.decode(value, { stream: true });
|
|
61
|
-
const lines = buffer.split("\n");
|
|
62
|
-
buffer = lines.pop() || "";
|
|
63
|
-
for (const line of lines) if (line.trim()) yield JSON.parse(line);
|
|
64
|
-
}
|
|
65
|
-
if (buffer.trim()) yield JSON.parse(buffer);
|
|
66
|
-
} finally {
|
|
67
|
-
reader.releaseLock();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
//#endregion
|
|
72
|
-
export { parseFragnoResponse };
|
|
73
|
-
//# sourceMappingURL=fragno-response.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fragno-response.js","names":[],"sources":["../../../../../../fragno/dist/api/fragno-response.js"],"sourcesContent":["//#region src/api/fragno-response.ts\n/**\n* Parse a Response object into a FragnoResponse discriminated union\n*/\nasync function parseFragnoResponse(response) {\n\tconst status = response.status;\n\tconst headers = response.headers;\n\tif ((headers.get(\"content-type\") || \"\").includes(\"application/x-ndjson\")) return {\n\t\ttype: \"jsonStream\",\n\t\tstatus,\n\t\theaders,\n\t\tstream: parseNDJSONStream(response)\n\t};\n\tconst text = await response.text();\n\tif (!text || text === \"null\") return {\n\t\ttype: \"empty\",\n\t\tstatus,\n\t\theaders\n\t};\n\tconst data = JSON.parse(text);\n\tif (data && typeof data === \"object\" && \"code\" in data) {\n\t\tif (\"message\" in data) return {\n\t\t\ttype: \"error\",\n\t\t\tstatus,\n\t\t\theaders,\n\t\t\terror: {\n\t\t\t\tmessage: data.message,\n\t\t\t\tcode: data.code\n\t\t\t}\n\t\t};\n\t\tif (\"error\" in data) return {\n\t\t\ttype: \"error\",\n\t\t\tstatus,\n\t\t\theaders,\n\t\t\terror: {\n\t\t\t\tmessage: data.error,\n\t\t\t\tcode: data.code\n\t\t\t}\n\t\t};\n\t}\n\treturn {\n\t\ttype: \"json\",\n\t\tstatus,\n\t\theaders,\n\t\tdata\n\t};\n}\n/**\n* Parse an NDJSON stream into an async generator\n*/\nasync function* parseNDJSONStream(response) {\n\tif (!response.body) return;\n\tconst reader = response.body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() || \"\";\n\t\t\tfor (const line of lines) if (line.trim()) yield JSON.parse(line);\n\t\t}\n\t\tif (buffer.trim()) yield JSON.parse(buffer);\n\t} finally {\n\t\treader.releaseLock();\n\t}\n}\n\n//#endregion\nexport { parseFragnoResponse };\n//# sourceMappingURL=fragno-response.js.map"],"mappings":";;;;AAIA,eAAe,oBAAoB,UAAU;CAC5C,MAAM,SAAS,SAAS;CACxB,MAAM,UAAU,SAAS;AACzB,MAAK,QAAQ,IAAI,eAAe,IAAI,IAAI,SAAS,uBAAuB,CAAE,QAAO;EAChF,MAAM;EACN;EACA;EACA,QAAQ,kBAAkB,SAAS;EACnC;CACD,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,KAAI,CAAC,QAAQ,SAAS,OAAQ,QAAO;EACpC,MAAM;EACN;EACA;EACA;CACD,MAAM,OAAO,KAAK,MAAM,KAAK;AAC7B,KAAI,QAAQ,OAAO,SAAS,YAAY,UAAU,MAAM;AACvD,MAAI,aAAa,KAAM,QAAO;GAC7B,MAAM;GACN;GACA;GACA,OAAO;IACN,SAAS,KAAK;IACd,MAAM,KAAK;IACX;GACD;AACD,MAAI,WAAW,KAAM,QAAO;GAC3B,MAAM;GACN;GACA;GACA,OAAO;IACN,SAAS,KAAK;IACd,MAAM,KAAK;IACX;GACD;;AAEF,QAAO;EACN,MAAM;EACN;EACA;EACA;EACA;;;;;AAKF,gBAAgB,kBAAkB,UAAU;AAC3C,KAAI,CAAC,SAAS,KAAM;CACpB,MAAM,SAAS,SAAS,KAAK,WAAW;CACxC,MAAM,UAAU,IAAI,aAAa;CACjC,IAAI,SAAS;AACb,KAAI;AACH,SAAO,MAAM;GACZ,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM;AAC3C,OAAI,KAAM;AACV,aAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,MAAM,CAAC;GACjD,MAAM,QAAQ,OAAO,MAAM,KAAK;AAChC,YAAS,MAAM,KAAK,IAAI;AACxB,QAAK,MAAM,QAAQ,MAAO,KAAI,KAAK,MAAM,CAAE,OAAM,KAAK,MAAM,KAAK;;AAElE,MAAI,OAAO,MAAM,CAAE,OAAM,KAAK,MAAM,OAAO;WAClC;AACT,SAAO,aAAa"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
//#region ../fragno/dist/api/internal/response-stream.js
|
|
2
|
-
var ResponseStream = class {
|
|
3
|
-
#writer;
|
|
4
|
-
#encoder;
|
|
5
|
-
#abortSubscribers = [];
|
|
6
|
-
#responseReadable;
|
|
7
|
-
#aborted = false;
|
|
8
|
-
#closed = false;
|
|
9
|
-
/**
|
|
10
|
-
* Whether the stream has been aborted.
|
|
11
|
-
*/
|
|
12
|
-
get aborted() {
|
|
13
|
-
return this.#aborted;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Whether the stream has been closed normally.
|
|
17
|
-
*/
|
|
18
|
-
get closed() {
|
|
19
|
-
return this.#closed;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* The readable stream that the response is piped to.
|
|
23
|
-
*/
|
|
24
|
-
get responseReadable() {
|
|
25
|
-
return this.#responseReadable;
|
|
26
|
-
}
|
|
27
|
-
constructor(writable, readable) {
|
|
28
|
-
this.#writer = writable.getWriter();
|
|
29
|
-
this.#encoder = new TextEncoder();
|
|
30
|
-
const reader = readable.getReader();
|
|
31
|
-
this.#abortSubscribers.push(async () => {
|
|
32
|
-
await reader.cancel();
|
|
33
|
-
});
|
|
34
|
-
this.#responseReadable = new ReadableStream({
|
|
35
|
-
async pull(controller) {
|
|
36
|
-
const { done, value } = await reader.read();
|
|
37
|
-
if (done) controller.close();
|
|
38
|
-
else controller.enqueue(value);
|
|
39
|
-
},
|
|
40
|
-
cancel: () => {
|
|
41
|
-
this.abort();
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
async writeRaw(input) {
|
|
46
|
-
try {
|
|
47
|
-
if (typeof input === "string") input = this.#encoder.encode(input);
|
|
48
|
-
await this.#writer.write(input);
|
|
49
|
-
} catch {}
|
|
50
|
-
}
|
|
51
|
-
write(input) {
|
|
52
|
-
return this.writeRaw(JSON.stringify(input) + "\n");
|
|
53
|
-
}
|
|
54
|
-
sleep(ms) {
|
|
55
|
-
return new Promise((res) => setTimeout(res, ms));
|
|
56
|
-
}
|
|
57
|
-
async close() {
|
|
58
|
-
try {
|
|
59
|
-
await this.#writer.close();
|
|
60
|
-
} catch {} finally {
|
|
61
|
-
this.#closed = true;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
onAbort(listener) {
|
|
65
|
-
this.#abortSubscribers.push(listener);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Abort the stream.
|
|
69
|
-
* You can call this method when stream is aborted by external event.
|
|
70
|
-
*/
|
|
71
|
-
abort() {
|
|
72
|
-
if (!this.aborted) {
|
|
73
|
-
this.#aborted = true;
|
|
74
|
-
this.#abortSubscribers.forEach((subscriber) => subscriber());
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
//#endregion
|
|
80
|
-
export { ResponseStream };
|
|
81
|
-
//# sourceMappingURL=response-stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"response-stream.js","names":["#aborted","#closed","#responseReadable","#writer","#encoder","#abortSubscribers"],"sources":["../../../../../../../fragno/dist/api/internal/response-stream.js"],"sourcesContent":["//#region src/api/internal/response-stream.ts\nvar ResponseStream = class {\n\t#writer;\n\t#encoder;\n\t#abortSubscribers = [];\n\t#responseReadable;\n\t#aborted = false;\n\t#closed = false;\n\t/**\n\t* Whether the stream has been aborted.\n\t*/\n\tget aborted() {\n\t\treturn this.#aborted;\n\t}\n\t/**\n\t* Whether the stream has been closed normally.\n\t*/\n\tget closed() {\n\t\treturn this.#closed;\n\t}\n\t/**\n\t* The readable stream that the response is piped to.\n\t*/\n\tget responseReadable() {\n\t\treturn this.#responseReadable;\n\t}\n\tconstructor(writable, readable) {\n\t\tthis.#writer = writable.getWriter();\n\t\tthis.#encoder = new TextEncoder();\n\t\tconst reader = readable.getReader();\n\t\tthis.#abortSubscribers.push(async () => {\n\t\t\tawait reader.cancel();\n\t\t});\n\t\tthis.#responseReadable = new ReadableStream({\n\t\t\tasync pull(controller) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) controller.close();\n\t\t\t\telse controller.enqueue(value);\n\t\t\t},\n\t\t\tcancel: () => {\n\t\t\t\tthis.abort();\n\t\t\t}\n\t\t});\n\t}\n\tasync writeRaw(input) {\n\t\ttry {\n\t\t\tif (typeof input === \"string\") input = this.#encoder.encode(input);\n\t\t\tawait this.#writer.write(input);\n\t\t} catch {}\n\t}\n\twrite(input) {\n\t\treturn this.writeRaw(JSON.stringify(input) + \"\\n\");\n\t}\n\tsleep(ms) {\n\t\treturn new Promise((res) => setTimeout(res, ms));\n\t}\n\tasync close() {\n\t\ttry {\n\t\t\tawait this.#writer.close();\n\t\t} catch {} finally {\n\t\t\tthis.#closed = true;\n\t\t}\n\t}\n\tonAbort(listener) {\n\t\tthis.#abortSubscribers.push(listener);\n\t}\n\t/**\n\t* Abort the stream.\n\t* You can call this method when stream is aborted by external event.\n\t*/\n\tabort() {\n\t\tif (!this.aborted) {\n\t\t\tthis.#aborted = true;\n\t\t\tthis.#abortSubscribers.forEach((subscriber) => subscriber());\n\t\t}\n\t}\n};\n\n//#endregion\nexport { ResponseStream };\n//# sourceMappingURL=response-stream.js.map"],"mappings":";AACA,IAAI,iBAAiB,MAAM;CAC1B;CACA;CACA,oBAAoB,EAAE;CACtB;CACA,WAAW;CACX,UAAU;;;;CAIV,IAAI,UAAU;AACb,SAAO,MAAKA;;;;;CAKb,IAAI,SAAS;AACZ,SAAO,MAAKC;;;;;CAKb,IAAI,mBAAmB;AACtB,SAAO,MAAKC;;CAEb,YAAY,UAAU,UAAU;AAC/B,QAAKC,SAAU,SAAS,WAAW;AACnC,QAAKC,UAAW,IAAI,aAAa;EACjC,MAAM,SAAS,SAAS,WAAW;AACnC,QAAKC,iBAAkB,KAAK,YAAY;AACvC,SAAM,OAAO,QAAQ;IACpB;AACF,QAAKH,mBAAoB,IAAI,eAAe;GAC3C,MAAM,KAAK,YAAY;IACtB,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM;AAC3C,QAAI,KAAM,YAAW,OAAO;QACvB,YAAW,QAAQ,MAAM;;GAE/B,cAAc;AACb,SAAK,OAAO;;GAEb,CAAC;;CAEH,MAAM,SAAS,OAAO;AACrB,MAAI;AACH,OAAI,OAAO,UAAU,SAAU,SAAQ,MAAKE,QAAS,OAAO,MAAM;AAClE,SAAM,MAAKD,OAAQ,MAAM,MAAM;UACxB;;CAET,MAAM,OAAO;AACZ,SAAO,KAAK,SAAS,KAAK,UAAU,MAAM,GAAG,KAAK;;CAEnD,MAAM,IAAI;AACT,SAAO,IAAI,SAAS,QAAQ,WAAW,KAAK,GAAG,CAAC;;CAEjD,MAAM,QAAQ;AACb,MAAI;AACH,SAAM,MAAKA,OAAQ,OAAO;UACnB,WAAW;AAClB,SAAKF,SAAU;;;CAGjB,QAAQ,UAAU;AACjB,QAAKI,iBAAkB,KAAK,SAAS;;;;;;CAMtC,QAAQ;AACP,MAAI,CAAC,KAAK,SAAS;AAClB,SAAKL,UAAW;AAChB,SAAKK,iBAAkB,SAAS,eAAe,YAAY,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
//#region ../fragno/dist/api/internal/route.js
|
|
2
|
-
function getMountRoute(opts) {
|
|
3
|
-
const mountRoute = opts.mountRoute ?? `/api/${opts.name}`;
|
|
4
|
-
if (mountRoute.endsWith("/")) return mountRoute.slice(0, -1);
|
|
5
|
-
return mountRoute;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
//#endregion
|
|
9
|
-
export { getMountRoute };
|
|
10
|
-
//# sourceMappingURL=route.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","names":[],"sources":["../../../../../../../fragno/dist/api/internal/route.js"],"sourcesContent":["//#region src/api/internal/route.ts\nfunction getMountRoute(opts) {\n\tconst mountRoute = opts.mountRoute ?? `/api/${opts.name}`;\n\tif (mountRoute.endsWith(\"/\")) return mountRoute.slice(0, -1);\n\treturn mountRoute;\n}\n\n//#endregion\nexport { getMountRoute };\n//# sourceMappingURL=route.js.map"],"mappings":";AACA,SAAS,cAAc,MAAM;CAC5B,MAAM,aAAa,KAAK,cAAc,QAAQ,KAAK;AACnD,KAAI,WAAW,SAAS,IAAI,CAAE,QAAO,WAAW,MAAM,GAAG,GAAG;AAC5D,QAAO"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
//#region ../fragno/dist/api/mutable-request-state.js
|
|
2
|
-
/**
|
|
3
|
-
* Holds mutable request state that can be modified by middleware and consumed by handlers.
|
|
4
|
-
*
|
|
5
|
-
* This class provides a structural way for middleware to modify request data:
|
|
6
|
-
* - Path parameters can be modified
|
|
7
|
-
* - Query/search parameters can be modified
|
|
8
|
-
* - Request body can be overridden
|
|
9
|
-
* - Request headers can be modified
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* // In middleware
|
|
14
|
-
* const state = new MutableRequestState({
|
|
15
|
-
* pathParams: { id: "123" },
|
|
16
|
-
* searchParams: new URLSearchParams("?role=user"),
|
|
17
|
-
* body: { name: "John" },
|
|
18
|
-
* headers: new Headers()
|
|
19
|
-
* });
|
|
20
|
-
*
|
|
21
|
-
* // Modify query parameters
|
|
22
|
-
* state.searchParams.set("role", "admin");
|
|
23
|
-
*
|
|
24
|
-
* // Override body
|
|
25
|
-
* state.setBody({ name: "Jane" });
|
|
26
|
-
*
|
|
27
|
-
* // Modify headers
|
|
28
|
-
* state.headers.set("X-Custom", "value");
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
var MutableRequestState = class {
|
|
32
|
-
#pathParams;
|
|
33
|
-
#searchParams;
|
|
34
|
-
#headers;
|
|
35
|
-
#initialBody;
|
|
36
|
-
#bodyOverride;
|
|
37
|
-
constructor(config) {
|
|
38
|
-
this.#pathParams = config.pathParams;
|
|
39
|
-
this.#searchParams = config.searchParams;
|
|
40
|
-
this.#headers = config.headers;
|
|
41
|
-
this.#initialBody = config.body;
|
|
42
|
-
this.#bodyOverride = void 0;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Path parameters extracted from the route.
|
|
46
|
-
* Can be modified directly (e.g., `state.pathParams.id = "456"`).
|
|
47
|
-
*/
|
|
48
|
-
get pathParams() {
|
|
49
|
-
return this.#pathParams;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* URLSearchParams for query parameters.
|
|
53
|
-
* Can be modified using URLSearchParams API (e.g., `state.searchParams.set("key", "value")`).
|
|
54
|
-
*/
|
|
55
|
-
get searchParams() {
|
|
56
|
-
return this.#searchParams;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Request headers.
|
|
60
|
-
* Can be modified using Headers API (e.g., `state.headers.set("X-Custom", "value")`).
|
|
61
|
-
*/
|
|
62
|
-
get headers() {
|
|
63
|
-
return this.#headers;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get the current body value.
|
|
67
|
-
* Returns the override if set, otherwise the initial body.
|
|
68
|
-
*/
|
|
69
|
-
get body() {
|
|
70
|
-
return this.#bodyOverride !== void 0 ? this.#bodyOverride : this.#initialBody;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Override the request body.
|
|
74
|
-
* This allows middleware to replace the body that will be seen by the handler.
|
|
75
|
-
*
|
|
76
|
-
* @param body - The new body value
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* ```typescript
|
|
80
|
-
* // In middleware
|
|
81
|
-
* state.setBody({ modifiedField: "new value" });
|
|
82
|
-
* ```
|
|
83
|
-
*/
|
|
84
|
-
setBody(body) {
|
|
85
|
-
this.#bodyOverride = body;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Check if the body has been overridden by middleware.
|
|
89
|
-
*/
|
|
90
|
-
get hasBodyOverride() {
|
|
91
|
-
return this.#bodyOverride !== void 0;
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
//#endregion
|
|
96
|
-
export { MutableRequestState };
|
|
97
|
-
//# sourceMappingURL=mutable-request-state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutable-request-state.js","names":["#pathParams","#searchParams","#headers","#initialBody","#bodyOverride"],"sources":["../../../../../../fragno/dist/api/mutable-request-state.js"],"sourcesContent":["//#region src/api/mutable-request-state.ts\n/**\n* Holds mutable request state that can be modified by middleware and consumed by handlers.\n*\n* This class provides a structural way for middleware to modify request data:\n* - Path parameters can be modified\n* - Query/search parameters can be modified\n* - Request body can be overridden\n* - Request headers can be modified\n*\n* @example\n* ```typescript\n* // In middleware\n* const state = new MutableRequestState({\n* pathParams: { id: \"123\" },\n* searchParams: new URLSearchParams(\"?role=user\"),\n* body: { name: \"John\" },\n* headers: new Headers()\n* });\n*\n* // Modify query parameters\n* state.searchParams.set(\"role\", \"admin\");\n*\n* // Override body\n* state.setBody({ name: \"Jane\" });\n*\n* // Modify headers\n* state.headers.set(\"X-Custom\", \"value\");\n* ```\n*/\nvar MutableRequestState = class {\n\t#pathParams;\n\t#searchParams;\n\t#headers;\n\t#initialBody;\n\t#bodyOverride;\n\tconstructor(config) {\n\t\tthis.#pathParams = config.pathParams;\n\t\tthis.#searchParams = config.searchParams;\n\t\tthis.#headers = config.headers;\n\t\tthis.#initialBody = config.body;\n\t\tthis.#bodyOverride = void 0;\n\t}\n\t/**\n\t* Path parameters extracted from the route.\n\t* Can be modified directly (e.g., `state.pathParams.id = \"456\"`).\n\t*/\n\tget pathParams() {\n\t\treturn this.#pathParams;\n\t}\n\t/**\n\t* URLSearchParams for query parameters.\n\t* Can be modified using URLSearchParams API (e.g., `state.searchParams.set(\"key\", \"value\")`).\n\t*/\n\tget searchParams() {\n\t\treturn this.#searchParams;\n\t}\n\t/**\n\t* Request headers.\n\t* Can be modified using Headers API (e.g., `state.headers.set(\"X-Custom\", \"value\")`).\n\t*/\n\tget headers() {\n\t\treturn this.#headers;\n\t}\n\t/**\n\t* Get the current body value.\n\t* Returns the override if set, otherwise the initial body.\n\t*/\n\tget body() {\n\t\treturn this.#bodyOverride !== void 0 ? this.#bodyOverride : this.#initialBody;\n\t}\n\t/**\n\t* Override the request body.\n\t* This allows middleware to replace the body that will be seen by the handler.\n\t*\n\t* @param body - The new body value\n\t*\n\t* @example\n\t* ```typescript\n\t* // In middleware\n\t* state.setBody({ modifiedField: \"new value\" });\n\t* ```\n\t*/\n\tsetBody(body) {\n\t\tthis.#bodyOverride = body;\n\t}\n\t/**\n\t* Check if the body has been overridden by middleware.\n\t*/\n\tget hasBodyOverride() {\n\t\treturn this.#bodyOverride !== void 0;\n\t}\n};\n\n//#endregion\nexport { MutableRequestState };\n//# sourceMappingURL=mutable-request-state.js.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,IAAI,sBAAsB,MAAM;CAC/B;CACA;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,QAAKA,aAAc,OAAO;AAC1B,QAAKC,eAAgB,OAAO;AAC5B,QAAKC,UAAW,OAAO;AACvB,QAAKC,cAAe,OAAO;AAC3B,QAAKC,eAAgB,KAAK;;;;;;CAM3B,IAAI,aAAa;AAChB,SAAO,MAAKJ;;;;;;CAMb,IAAI,eAAe;AAClB,SAAO,MAAKC;;;;;;CAMb,IAAI,UAAU;AACb,SAAO,MAAKC;;;;;;CAMb,IAAI,OAAO;AACV,SAAO,MAAKE,iBAAkB,KAAK,IAAI,MAAKA,eAAgB,MAAKD;;;;;;;;;;;;;;CAclE,QAAQ,MAAM;AACb,QAAKC,eAAgB;;;;;CAKtB,IAAI,kBAAkB;AACrB,SAAO,MAAKA,iBAAkB,KAAK"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
|
|
3
|
-
//#region ../fragno/dist/api/request-context-storage.js
|
|
4
|
-
/**
|
|
5
|
-
* Typed wrapper around AsyncLocalStorage for managing per-request data storage.
|
|
6
|
-
* Each fragment instance has its own storage to ensure proper isolation.
|
|
7
|
-
*
|
|
8
|
-
* TRequestStorage represents the type of data stored per-request (e.g., { userId: string, requestId: number })
|
|
9
|
-
*
|
|
10
|
-
* Note: The data stored should be an object that can be mutated during the request lifecycle.
|
|
11
|
-
* For example, you can store { uow: UnitOfWork } and modify properties on that object.
|
|
12
|
-
*
|
|
13
|
-
* @internal - Used by @fragno-dev/db, not part of public API
|
|
14
|
-
*/
|
|
15
|
-
var RequestContextStorage = class {
|
|
16
|
-
#storage;
|
|
17
|
-
constructor() {
|
|
18
|
-
this.#storage = new AsyncLocalStorage();
|
|
19
|
-
}
|
|
20
|
-
run(data, callback) {
|
|
21
|
-
return this.#storage.run(data, callback);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get the current stored data from AsyncLocalStorage.
|
|
25
|
-
* @throws an error if called outside of a run() callback.
|
|
26
|
-
*
|
|
27
|
-
* Note: The returned object can be mutated. Changes will be visible to all code
|
|
28
|
-
* running within the same async context.
|
|
29
|
-
*/
|
|
30
|
-
getStore() {
|
|
31
|
-
const store = this.#storage.getStore();
|
|
32
|
-
if (!store) throw new Error("No storage found in RequestContextStorage. Service must be called within a route handler OR using `inContext`.");
|
|
33
|
-
return store;
|
|
34
|
-
}
|
|
35
|
-
runWithInitializer(initializer, callback) {
|
|
36
|
-
const data = initializer();
|
|
37
|
-
return this.#storage.run(data, callback);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
//#endregion
|
|
42
|
-
export { RequestContextStorage };
|
|
43
|
-
//# sourceMappingURL=request-context-storage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-context-storage.js","names":["#storage"],"sources":["../../../../../../fragno/dist/api/request-context-storage.js"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\n//#region src/api/request-context-storage.ts\n/**\n* Typed wrapper around AsyncLocalStorage for managing per-request data storage.\n* Each fragment instance has its own storage to ensure proper isolation.\n*\n* TRequestStorage represents the type of data stored per-request (e.g., { userId: string, requestId: number })\n*\n* Note: The data stored should be an object that can be mutated during the request lifecycle.\n* For example, you can store { uow: UnitOfWork } and modify properties on that object.\n*\n* @internal - Used by @fragno-dev/db, not part of public API\n*/\nvar RequestContextStorage = class {\n\t#storage;\n\tconstructor() {\n\t\tthis.#storage = new AsyncLocalStorage();\n\t}\n\trun(data, callback) {\n\t\treturn this.#storage.run(data, callback);\n\t}\n\t/**\n\t* Get the current stored data from AsyncLocalStorage.\n\t* @throws an error if called outside of a run() callback.\n\t*\n\t* Note: The returned object can be mutated. Changes will be visible to all code\n\t* running within the same async context.\n\t*/\n\tgetStore() {\n\t\tconst store = this.#storage.getStore();\n\t\tif (!store) throw new Error(\"No storage found in RequestContextStorage. Service must be called within a route handler OR using `inContext`.\");\n\t\treturn store;\n\t}\n\trunWithInitializer(initializer, callback) {\n\t\tconst data = initializer();\n\t\treturn this.#storage.run(data, callback);\n\t}\n};\n\n//#endregion\nexport { RequestContextStorage };\n//# sourceMappingURL=request-context-storage.js.map"],"mappings":";;;;;;;;;;;;;;AAcA,IAAI,wBAAwB,MAAM;CACjC;CACA,cAAc;AACb,QAAKA,UAAW,IAAI,mBAAmB;;CAExC,IAAI,MAAM,UAAU;AACnB,SAAO,MAAKA,QAAS,IAAI,MAAM,SAAS;;;;;;;;;CASzC,WAAW;EACV,MAAM,QAAQ,MAAKA,QAAS,UAAU;AACtC,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,iHAAiH;AAC7I,SAAO;;CAER,mBAAmB,aAAa,UAAU;EACzC,MAAM,OAAO,aAAa;AAC1B,SAAO,MAAKA,QAAS,IAAI,MAAM,SAAS"}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { FragnoApiValidationError } from "./error.js";
|
|
2
|
-
|
|
3
|
-
//#region ../fragno/dist/api/request-input-context.js
|
|
4
|
-
var RequestInputContext = class RequestInputContext$1 {
|
|
5
|
-
#path;
|
|
6
|
-
#method;
|
|
7
|
-
#pathParams;
|
|
8
|
-
#searchParams;
|
|
9
|
-
#headers;
|
|
10
|
-
#body;
|
|
11
|
-
#parsedBody;
|
|
12
|
-
#inputSchema;
|
|
13
|
-
#shouldValidateInput;
|
|
14
|
-
constructor(config) {
|
|
15
|
-
this.#path = config.path;
|
|
16
|
-
this.#method = config.method;
|
|
17
|
-
this.#pathParams = config.pathParams;
|
|
18
|
-
this.#searchParams = config.searchParams;
|
|
19
|
-
this.#headers = config.headers;
|
|
20
|
-
this.#body = config.rawBody;
|
|
21
|
-
this.#parsedBody = config.parsedBody;
|
|
22
|
-
this.#inputSchema = config.inputSchema;
|
|
23
|
-
this.#shouldValidateInput = config.shouldValidateInput ?? true;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Create a RequestContext from a Request object for server-side handling
|
|
27
|
-
*/
|
|
28
|
-
static async fromRequest(config) {
|
|
29
|
-
return new RequestInputContext$1({
|
|
30
|
-
method: config.method,
|
|
31
|
-
path: config.path,
|
|
32
|
-
pathParams: config.state.pathParams,
|
|
33
|
-
searchParams: config.state.searchParams,
|
|
34
|
-
headers: config.state.headers,
|
|
35
|
-
parsedBody: config.state.body,
|
|
36
|
-
rawBody: config.rawBody,
|
|
37
|
-
inputSchema: config.inputSchema,
|
|
38
|
-
shouldValidateInput: config.shouldValidateInput
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Create a RequestContext for server-side rendering contexts (no Request object)
|
|
43
|
-
*/
|
|
44
|
-
static fromSSRContext(config) {
|
|
45
|
-
return new RequestInputContext$1({
|
|
46
|
-
method: config.method,
|
|
47
|
-
path: config.path,
|
|
48
|
-
pathParams: config.pathParams,
|
|
49
|
-
searchParams: config.searchParams ?? new URLSearchParams(),
|
|
50
|
-
headers: config.headers ?? new Headers(),
|
|
51
|
-
parsedBody: "body" in config ? config.body : void 0,
|
|
52
|
-
inputSchema: "inputSchema" in config ? config.inputSchema : void 0,
|
|
53
|
-
shouldValidateInput: false
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* The HTTP method as string (e.g., `GET`, `POST`)
|
|
58
|
-
*/
|
|
59
|
-
get method() {
|
|
60
|
-
return this.#method;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* The matched route path (e.g., `/users/:id`)
|
|
64
|
-
* @remarks `string`
|
|
65
|
-
*/
|
|
66
|
-
get path() {
|
|
67
|
-
return this.#path;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Extracted path parameters as object (e.g., `{ id: '123' }`)
|
|
71
|
-
* @remarks `Record<string, string>`
|
|
72
|
-
*/
|
|
73
|
-
get pathParams() {
|
|
74
|
-
return this.#pathParams;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object for query parameters
|
|
78
|
-
* @remarks `URLSearchParams`
|
|
79
|
-
*/
|
|
80
|
-
get query() {
|
|
81
|
-
return this.#searchParams;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object for request headers
|
|
85
|
-
* @remarks `Headers`
|
|
86
|
-
*/
|
|
87
|
-
get headers() {
|
|
88
|
-
return this.#headers;
|
|
89
|
-
}
|
|
90
|
-
get rawBody() {
|
|
91
|
-
return this.#body;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Access the request body as FormData.
|
|
95
|
-
*
|
|
96
|
-
* Use this method when handling file uploads or multipart form submissions.
|
|
97
|
-
* The request must have been sent with Content-Type: multipart/form-data.
|
|
98
|
-
*
|
|
99
|
-
* @throws Error if the request body is not FormData
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
* ```typescript
|
|
103
|
-
* defineRoute({
|
|
104
|
-
* method: "POST",
|
|
105
|
-
* path: "/upload",
|
|
106
|
-
* async handler(ctx, res) {
|
|
107
|
-
* const formData = ctx.formData();
|
|
108
|
-
* const file = formData.get("file") as File;
|
|
109
|
-
* const description = formData.get("description") as string;
|
|
110
|
-
* // ... process file
|
|
111
|
-
* }
|
|
112
|
-
* });
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
formData() {
|
|
116
|
-
if (!(this.#parsedBody instanceof FormData)) throw new Error("Request body is not FormData. Ensure the request was sent with Content-Type: multipart/form-data.");
|
|
117
|
-
return this.#parsedBody;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Check if the request body is FormData.
|
|
121
|
-
*
|
|
122
|
-
* Useful for routes that accept both JSON and FormData payloads.
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* ```typescript
|
|
126
|
-
* defineRoute({
|
|
127
|
-
* method: "POST",
|
|
128
|
-
* path: "/upload",
|
|
129
|
-
* async handler(ctx, res) {
|
|
130
|
-
* if (ctx.isFormData()) {
|
|
131
|
-
* const formData = ctx.formData();
|
|
132
|
-
* // handle file upload
|
|
133
|
-
* } else {
|
|
134
|
-
* const json = await ctx.input.valid();
|
|
135
|
-
* // handle JSON payload
|
|
136
|
-
* }
|
|
137
|
-
* }
|
|
138
|
-
* });
|
|
139
|
-
* ```
|
|
140
|
-
*/
|
|
141
|
-
isFormData() {
|
|
142
|
-
return this.#parsedBody instanceof FormData;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Access the request body as a ReadableStream (application/octet-stream).
|
|
146
|
-
*
|
|
147
|
-
* @throws Error if the request body is not a ReadableStream
|
|
148
|
-
*/
|
|
149
|
-
bodyStream() {
|
|
150
|
-
if (!(this.#parsedBody instanceof ReadableStream)) throw new Error("Request body is not a ReadableStream. Ensure the request was sent with Content-Type: application/octet-stream.");
|
|
151
|
-
return this.#parsedBody;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Check if the request body is a ReadableStream.
|
|
155
|
-
*/
|
|
156
|
-
isBodyStream() {
|
|
157
|
-
return this.#parsedBody instanceof ReadableStream;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Input validation context (only if inputSchema is defined)
|
|
161
|
-
* @remarks `InputContext`
|
|
162
|
-
*/
|
|
163
|
-
get input() {
|
|
164
|
-
if (!this.#inputSchema) return;
|
|
165
|
-
return {
|
|
166
|
-
schema: this.#inputSchema,
|
|
167
|
-
valid: async () => {
|
|
168
|
-
if (!this.#shouldValidateInput) return this.#parsedBody;
|
|
169
|
-
return this.#validateInput();
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
async #validateInput() {
|
|
174
|
-
if (!this.#inputSchema) throw new Error("No input schema defined for this route");
|
|
175
|
-
if (this.#parsedBody instanceof FormData || this.#parsedBody instanceof Blob) throw new Error("Schema validation is only supported for JSON data, not FormData or Blob");
|
|
176
|
-
if (this.#parsedBody instanceof ReadableStream) throw new Error("Schema validation is only supported for JSON data, not FormData, Blob, or ReadableStream");
|
|
177
|
-
const result = await this.#inputSchema["~standard"].validate(this.#parsedBody);
|
|
178
|
-
if (result.issues) throw new FragnoApiValidationError("Validation failed", result.issues);
|
|
179
|
-
return result.value;
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
//#endregion
|
|
184
|
-
export { RequestInputContext };
|
|
185
|
-
//# sourceMappingURL=request-input-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-input-context.js","names":["RequestInputContext","#path","#method","#pathParams","#searchParams","#headers","#body","#parsedBody","#inputSchema","#shouldValidateInput","#validateInput"],"sources":["../../../../../../fragno/dist/api/request-input-context.js"],"sourcesContent":["import { FragnoApiValidationError } from \"./error.js\";\n\n//#region src/api/request-input-context.ts\nvar RequestInputContext = class RequestInputContext {\n\t#path;\n\t#method;\n\t#pathParams;\n\t#searchParams;\n\t#headers;\n\t#body;\n\t#parsedBody;\n\t#inputSchema;\n\t#shouldValidateInput;\n\tconstructor(config) {\n\t\tthis.#path = config.path;\n\t\tthis.#method = config.method;\n\t\tthis.#pathParams = config.pathParams;\n\t\tthis.#searchParams = config.searchParams;\n\t\tthis.#headers = config.headers;\n\t\tthis.#body = config.rawBody;\n\t\tthis.#parsedBody = config.parsedBody;\n\t\tthis.#inputSchema = config.inputSchema;\n\t\tthis.#shouldValidateInput = config.shouldValidateInput ?? true;\n\t}\n\t/**\n\t* Create a RequestContext from a Request object for server-side handling\n\t*/\n\tstatic async fromRequest(config) {\n\t\treturn new RequestInputContext({\n\t\t\tmethod: config.method,\n\t\t\tpath: config.path,\n\t\t\tpathParams: config.state.pathParams,\n\t\t\tsearchParams: config.state.searchParams,\n\t\t\theaders: config.state.headers,\n\t\t\tparsedBody: config.state.body,\n\t\t\trawBody: config.rawBody,\n\t\t\tinputSchema: config.inputSchema,\n\t\t\tshouldValidateInput: config.shouldValidateInput\n\t\t});\n\t}\n\t/**\n\t* Create a RequestContext for server-side rendering contexts (no Request object)\n\t*/\n\tstatic fromSSRContext(config) {\n\t\treturn new RequestInputContext({\n\t\t\tmethod: config.method,\n\t\t\tpath: config.path,\n\t\t\tpathParams: config.pathParams,\n\t\t\tsearchParams: config.searchParams ?? new URLSearchParams(),\n\t\t\theaders: config.headers ?? new Headers(),\n\t\t\tparsedBody: \"body\" in config ? config.body : void 0,\n\t\t\tinputSchema: \"inputSchema\" in config ? config.inputSchema : void 0,\n\t\t\tshouldValidateInput: false\n\t\t});\n\t}\n\t/**\n\t* The HTTP method as string (e.g., `GET`, `POST`)\n\t*/\n\tget method() {\n\t\treturn this.#method;\n\t}\n\t/**\n\t* The matched route path (e.g., `/users/:id`)\n\t* @remarks `string`\n\t*/\n\tget path() {\n\t\treturn this.#path;\n\t}\n\t/**\n\t* Extracted path parameters as object (e.g., `{ id: '123' }`)\n\t* @remarks `Record<string, string>`\n\t*/\n\tget pathParams() {\n\t\treturn this.#pathParams;\n\t}\n\t/**\n\t* [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object for query parameters\n\t* @remarks `URLSearchParams`\n\t*/\n\tget query() {\n\t\treturn this.#searchParams;\n\t}\n\t/**\n\t* [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object for request headers\n\t* @remarks `Headers`\n\t*/\n\tget headers() {\n\t\treturn this.#headers;\n\t}\n\tget rawBody() {\n\t\treturn this.#body;\n\t}\n\t/**\n\t* Access the request body as FormData.\n\t*\n\t* Use this method when handling file uploads or multipart form submissions.\n\t* The request must have been sent with Content-Type: multipart/form-data.\n\t*\n\t* @throws Error if the request body is not FormData\n\t*\n\t* @example\n\t* ```typescript\n\t* defineRoute({\n\t* method: \"POST\",\n\t* path: \"/upload\",\n\t* async handler(ctx, res) {\n\t* const formData = ctx.formData();\n\t* const file = formData.get(\"file\") as File;\n\t* const description = formData.get(\"description\") as string;\n\t* // ... process file\n\t* }\n\t* });\n\t* ```\n\t*/\n\tformData() {\n\t\tif (!(this.#parsedBody instanceof FormData)) throw new Error(\"Request body is not FormData. Ensure the request was sent with Content-Type: multipart/form-data.\");\n\t\treturn this.#parsedBody;\n\t}\n\t/**\n\t* Check if the request body is FormData.\n\t*\n\t* Useful for routes that accept both JSON and FormData payloads.\n\t*\n\t* @example\n\t* ```typescript\n\t* defineRoute({\n\t* method: \"POST\",\n\t* path: \"/upload\",\n\t* async handler(ctx, res) {\n\t* if (ctx.isFormData()) {\n\t* const formData = ctx.formData();\n\t* // handle file upload\n\t* } else {\n\t* const json = await ctx.input.valid();\n\t* // handle JSON payload\n\t* }\n\t* }\n\t* });\n\t* ```\n\t*/\n\tisFormData() {\n\t\treturn this.#parsedBody instanceof FormData;\n\t}\n\t/**\n\t* Access the request body as a ReadableStream (application/octet-stream).\n\t*\n\t* @throws Error if the request body is not a ReadableStream\n\t*/\n\tbodyStream() {\n\t\tif (!(this.#parsedBody instanceof ReadableStream)) throw new Error(\"Request body is not a ReadableStream. Ensure the request was sent with Content-Type: application/octet-stream.\");\n\t\treturn this.#parsedBody;\n\t}\n\t/**\n\t* Check if the request body is a ReadableStream.\n\t*/\n\tisBodyStream() {\n\t\treturn this.#parsedBody instanceof ReadableStream;\n\t}\n\t/**\n\t* Input validation context (only if inputSchema is defined)\n\t* @remarks `InputContext`\n\t*/\n\tget input() {\n\t\tif (!this.#inputSchema) return;\n\t\treturn {\n\t\t\tschema: this.#inputSchema,\n\t\t\tvalid: async () => {\n\t\t\t\tif (!this.#shouldValidateInput) return this.#parsedBody;\n\t\t\t\treturn this.#validateInput();\n\t\t\t}\n\t\t};\n\t}\n\tasync #validateInput() {\n\t\tif (!this.#inputSchema) throw new Error(\"No input schema defined for this route\");\n\t\tif (this.#parsedBody instanceof FormData || this.#parsedBody instanceof Blob) throw new Error(\"Schema validation is only supported for JSON data, not FormData or Blob\");\n\t\tif (this.#parsedBody instanceof ReadableStream) throw new Error(\"Schema validation is only supported for JSON data, not FormData, Blob, or ReadableStream\");\n\t\tconst result = await this.#inputSchema[\"~standard\"].validate(this.#parsedBody);\n\t\tif (result.issues) throw new FragnoApiValidationError(\"Validation failed\", result.issues);\n\t\treturn result.value;\n\t}\n};\n\n//#endregion\nexport { RequestInputContext };\n//# sourceMappingURL=request-input-context.js.map"],"mappings":";;;AAGA,IAAI,sBAAsB,MAAMA,sBAAoB;CACnD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,QAAKC,OAAQ,OAAO;AACpB,QAAKC,SAAU,OAAO;AACtB,QAAKC,aAAc,OAAO;AAC1B,QAAKC,eAAgB,OAAO;AAC5B,QAAKC,UAAW,OAAO;AACvB,QAAKC,OAAQ,OAAO;AACpB,QAAKC,aAAc,OAAO;AAC1B,QAAKC,cAAe,OAAO;AAC3B,QAAKC,sBAAuB,OAAO,uBAAuB;;;;;CAK3D,aAAa,YAAY,QAAQ;AAChC,SAAO,IAAIT,sBAAoB;GAC9B,QAAQ,OAAO;GACf,MAAM,OAAO;GACb,YAAY,OAAO,MAAM;GACzB,cAAc,OAAO,MAAM;GAC3B,SAAS,OAAO,MAAM;GACtB,YAAY,OAAO,MAAM;GACzB,SAAS,OAAO;GAChB,aAAa,OAAO;GACpB,qBAAqB,OAAO;GAC5B,CAAC;;;;;CAKH,OAAO,eAAe,QAAQ;AAC7B,SAAO,IAAIA,sBAAoB;GAC9B,QAAQ,OAAO;GACf,MAAM,OAAO;GACb,YAAY,OAAO;GACnB,cAAc,OAAO,gBAAgB,IAAI,iBAAiB;GAC1D,SAAS,OAAO,WAAW,IAAI,SAAS;GACxC,YAAY,UAAU,SAAS,OAAO,OAAO,KAAK;GAClD,aAAa,iBAAiB,SAAS,OAAO,cAAc,KAAK;GACjE,qBAAqB;GACrB,CAAC;;;;;CAKH,IAAI,SAAS;AACZ,SAAO,MAAKE;;;;;;CAMb,IAAI,OAAO;AACV,SAAO,MAAKD;;;;;;CAMb,IAAI,aAAa;AAChB,SAAO,MAAKE;;;;;;CAMb,IAAI,QAAQ;AACX,SAAO,MAAKC;;;;;;CAMb,IAAI,UAAU;AACb,SAAO,MAAKC;;CAEb,IAAI,UAAU;AACb,SAAO,MAAKC;;;;;;;;;;;;;;;;;;;;;;;;CAwBb,WAAW;AACV,MAAI,EAAE,MAAKC,sBAAuB,UAAW,OAAM,IAAI,MAAM,oGAAoG;AACjK,SAAO,MAAKA;;;;;;;;;;;;;;;;;;;;;;;;CAwBb,aAAa;AACZ,SAAO,MAAKA,sBAAuB;;;;;;;CAOpC,aAAa;AACZ,MAAI,EAAE,MAAKA,sBAAuB,gBAAiB,OAAM,IAAI,MAAM,iHAAiH;AACpL,SAAO,MAAKA;;;;;CAKb,eAAe;AACd,SAAO,MAAKA,sBAAuB;;;;;;CAMpC,IAAI,QAAQ;AACX,MAAI,CAAC,MAAKC,YAAc;AACxB,SAAO;GACN,QAAQ,MAAKA;GACb,OAAO,YAAY;AAClB,QAAI,CAAC,MAAKC,oBAAsB,QAAO,MAAKF;AAC5C,WAAO,MAAKG,eAAgB;;GAE7B;;CAEF,OAAMA,gBAAiB;AACtB,MAAI,CAAC,MAAKF,YAAc,OAAM,IAAI,MAAM,yCAAyC;AACjF,MAAI,MAAKD,sBAAuB,YAAY,MAAKA,sBAAuB,KAAM,OAAM,IAAI,MAAM,0EAA0E;AACxK,MAAI,MAAKA,sBAAuB,eAAgB,OAAM,IAAI,MAAM,2FAA2F;EAC3J,MAAM,SAAS,MAAM,MAAKC,YAAa,aAAa,SAAS,MAAKD,WAAY;AAC9E,MAAI,OAAO,OAAQ,OAAM,IAAI,yBAAyB,qBAAqB,OAAO,OAAO;AACzF,SAAO,OAAO"}
|