@db3.ai/app 0.1.0-beta.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/LICENSE +31 -0
- package/README.md +241 -0
- package/agent-instructions.md +69 -0
- package/bin/db3-agents.mjs +140 -0
- package/bin/db3.mjs +11 -0
- package/dist/ai/AIErrors.d.ts +33 -0
- package/dist/ai/AIErrors.js +43 -0
- package/dist/ai/AIFailover.d.ts +25 -0
- package/dist/ai/AIFailover.js +96 -0
- package/dist/ai/AIProviders.d.ts +35 -0
- package/dist/ai/AIProviders.js +197 -0
- package/dist/ai/AIQuotaDeferredError.d.ts +19 -0
- package/dist/ai/AIQuotaDeferredError.js +25 -0
- package/dist/ai/AIRateLimiter.d.ts +103 -0
- package/dist/ai/AIRateLimiter.js +690 -0
- package/dist/ai/Agent.d.ts +633 -0
- package/dist/ai/Agent.js +2976 -0
- package/dist/ai/AgentHistory.d.ts +11 -0
- package/dist/ai/AgentHistory.js +495 -0
- package/dist/ai/AgentRunJob.d.ts +21 -0
- package/dist/ai/AgentRunJob.js +53 -0
- package/dist/ai/Ai.d.ts +375 -0
- package/dist/ai/Ai.js +1771 -0
- package/dist/ai/AiConversation.d.ts +17 -0
- package/dist/ai/AiConversation.js +38 -0
- package/dist/ai/AiExecutionContext.d.ts +7 -0
- package/dist/ai/AiExecutionContext.js +16 -0
- package/dist/ai/AiMessage.d.ts +43 -0
- package/dist/ai/AiMessage.js +105 -0
- package/dist/ai/AiRateLimitBucket.d.ts +69 -0
- package/dist/ai/AiRateLimitBucket.js +138 -0
- package/dist/ai/AiRateLimitReservation.d.ts +56 -0
- package/dist/ai/AiRateLimitReservation.js +101 -0
- package/dist/ai/AiRequest.d.ts +78 -0
- package/dist/ai/AiRequest.js +384 -0
- package/dist/ai/Estimates.d.ts +26 -0
- package/dist/ai/Estimates.js +34 -0
- package/dist/ai/Models.d.ts +88 -0
- package/dist/ai/Models.js +328 -0
- package/dist/ai/OpenAIProviderError.d.ts +30 -0
- package/dist/ai/OpenAIProviderError.js +77 -0
- package/dist/ai/OpenAIQuotaRetry.d.ts +27 -0
- package/dist/ai/OpenAIQuotaRetry.js +144 -0
- package/dist/ai/ProviderCosts.d.ts +55 -0
- package/dist/ai/ProviderCosts.js +108 -0
- package/dist/ai/ResponsesProviderCall.d.ts +13 -0
- package/dist/ai/ResponsesProviderCall.js +29 -0
- package/dist/ai/agentCitations.d.ts +27 -0
- package/dist/ai/agentCitations.js +153 -0
- package/dist/ai/contracts/AI.d.ts +347 -0
- package/dist/ai/contracts/AI.js +13 -0
- package/dist/ai/contracts/Agent.d.ts +476 -0
- package/dist/ai/contracts/Agent.js +1 -0
- package/dist/ai/contracts/AiRequestRunCostSummary.d.ts +31 -0
- package/dist/ai/contracts/AiRequestRunCostSummary.js +1 -0
- package/dist/ai/contracts/Pricing.d.ts +88 -0
- package/dist/ai/contracts/Pricing.js +1 -0
- package/dist/ai/contracts/Providers.d.ts +68 -0
- package/dist/ai/contracts/Providers.js +1 -0
- package/dist/ai/contracts/QuotaRetry.d.ts +38 -0
- package/dist/ai/contracts/QuotaRetry.js +1 -0
- package/dist/ai/contracts/RateLimits.d.ts +45 -0
- package/dist/ai/contracts/RateLimits.js +1 -0
- package/dist/ai/contracts/ResponsesProviderCall.d.ts +28 -0
- package/dist/ai/contracts/ResponsesProviderCall.js +1 -0
- package/dist/ai/contracts/index.d.ts +8 -0
- package/dist/ai/contracts/index.js +8 -0
- package/dist/ai/index.d.ts +27 -0
- package/dist/ai/index.js +27 -0
- package/dist/ai/registry.d.ts +28 -0
- package/dist/ai/registry.js +49 -0
- package/dist/ai/sdkNodeCompatibility.d.ts +76 -0
- package/dist/ai/toolCallRecovery.d.ts +16 -0
- package/dist/ai/toolCallRecovery.js +71 -0
- package/dist/ai/toolHelpers.d.ts +65 -0
- package/dist/ai/toolHelpers.js +106 -0
- package/dist/auth/Auth.d.ts +641 -0
- package/dist/auth/Auth.js +927 -0
- package/dist/auth/AuthProvider.d.ts +104 -0
- package/dist/auth/AuthProvider.js +185 -0
- package/dist/auth/AuthToken.d.ts +123 -0
- package/dist/auth/AuthToken.js +156 -0
- package/dist/auth/PasswordResetToken.d.ts +33 -0
- package/dist/auth/PasswordResetToken.js +64 -0
- package/dist/auth/UserIdentity.d.ts +46 -0
- package/dist/auth/UserIdentity.js +72 -0
- package/dist/auth/contracts/AuthProviderDriver.d.ts +94 -0
- package/dist/auth/contracts/AuthProviderDriver.js +1 -0
- package/dist/auth/contracts/index.d.ts +1 -0
- package/dist/auth/contracts/index.js +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/passwordHash.d.ts +26 -0
- package/dist/auth/passwordHash.js +96 -0
- package/dist/auth/providers/GoogleAuthProvider.d.ts +135 -0
- package/dist/auth/providers/GoogleAuthProvider.js +305 -0
- package/dist/auth/providers/PasswordAuthProvider.d.ts +115 -0
- package/dist/auth/providers/PasswordAuthProvider.js +195 -0
- package/dist/auth/providers/index.d.ts +3 -0
- package/dist/auth/providers/index.js +3 -0
- package/dist/auth/providers/resolveAuthProviders.d.ts +29 -0
- package/dist/auth/providers/resolveAuthProviders.js +111 -0
- package/dist/cache/Cache.d.ts +67 -0
- package/dist/cache/Cache.js +115 -0
- package/dist/cache/contracts/CacheDriver.d.ts +10 -0
- package/dist/cache/contracts/CacheDriver.js +1 -0
- package/dist/cache/contracts/CacheOperations.d.ts +26 -0
- package/dist/cache/contracts/CacheOperations.js +1 -0
- package/dist/cache/contracts/CacheOptions.d.ts +51 -0
- package/dist/cache/contracts/CacheOptions.js +1 -0
- package/dist/cache/contracts/CacheRepository.d.ts +45 -0
- package/dist/cache/contracts/CacheRepository.js +1 -0
- package/dist/cache/contracts/index.d.ts +4 -0
- package/dist/cache/contracts/index.js +4 -0
- package/dist/cache/drivers/CacheManagerDriver.d.ts +55 -0
- package/dist/cache/drivers/CacheManagerDriver.js +68 -0
- package/dist/cache/drivers/createCacheDriver.d.ts +8 -0
- package/dist/cache/drivers/createCacheDriver.js +147 -0
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.js +2 -0
- package/dist/cli/Cli.d.ts +17 -0
- package/dist/cli/Cli.js +120 -0
- package/dist/cli/commands/repl.d.ts +9 -0
- package/dist/cli/commands/repl.js +27 -0
- package/dist/cli/contracts/CliCommand.d.ts +30 -0
- package/dist/cli/contracts/CliCommand.js +1 -0
- package/dist/cli/contracts/CliConfig.d.ts +9 -0
- package/dist/cli/contracts/CliConfig.js +1 -0
- package/dist/cli/contracts/CliOptions.d.ts +13 -0
- package/dist/cli/contracts/CliOptions.js +1 -0
- package/dist/cli/contracts/CommandDefinition.d.ts +18 -0
- package/dist/cli/contracts/CommandDefinition.js +1 -0
- package/dist/cli/contracts/ReplOptions.d.ts +11 -0
- package/dist/cli/contracts/ReplOptions.js +1 -0
- package/dist/cli/contracts/index.d.ts +5 -0
- package/dist/cli/contracts/index.js +1 -0
- package/dist/cli/defineCommand.d.ts +10 -0
- package/dist/cli/defineCommand.js +25 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/runDb3.d.ts +11 -0
- package/dist/cli/runDb3.js +70 -0
- package/dist/cli/runRepl.d.ts +12 -0
- package/dist/cli/runRepl.js +54 -0
- package/dist/config/Config.d.ts +48 -0
- package/dist/config/Config.js +80 -0
- package/dist/config/env.d.ts +26 -0
- package/dist/config/env.js +117 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +2 -0
- package/dist/db/ActiveProjection.d.ts +90 -0
- package/dist/db/ActiveProjection.js +134 -0
- package/dist/db/ActiveQueryBuilder.d.ts +268 -0
- package/dist/db/ActiveQueryBuilder.js +621 -0
- package/dist/db/ActiveRecord.d.ts +483 -0
- package/dist/db/ActiveRecord.js +765 -0
- package/dist/db/Database.d.ts +277 -0
- package/dist/db/Database.js +827 -0
- package/dist/db/FieldType.d.ts +540 -0
- package/dist/db/FieldType.js +706 -0
- package/dist/db/SoftDeletes.d.ts +30 -0
- package/dist/db/SoftDeletes.js +93 -0
- package/dist/db/commands/check.d.ts +6 -0
- package/dist/db/commands/check.js +8 -0
- package/dist/db/commands/index.d.ts +6 -0
- package/dist/db/commands/index.js +17 -0
- package/dist/db/commands/makeMigration.d.ts +7 -0
- package/dist/db/commands/makeMigration.js +9 -0
- package/dist/db/commands/migrate.d.ts +6 -0
- package/dist/db/commands/migrate.js +8 -0
- package/dist/db/connection.d.ts +10 -0
- package/dist/db/connection.js +55 -0
- package/dist/db/contracts/ActiveRecordDefinition.d.ts +64 -0
- package/dist/db/contracts/ActiveRecordDefinition.js +1 -0
- package/dist/db/contracts/DatabaseBackup.d.ts +7 -0
- package/dist/db/contracts/DatabaseBackup.js +1 -0
- package/dist/db/contracts/DatabaseMigrationsConfig.d.ts +9 -0
- package/dist/db/contracts/DatabaseMigrationsConfig.js +1 -0
- package/dist/db/contracts/index.d.ts +3 -0
- package/dist/db/contracts/index.js +3 -0
- package/dist/db/dialects/columnTypes.d.ts +20 -0
- package/dist/db/dialects/columnTypes.js +67 -0
- package/dist/db/dialects/index.d.ts +6 -0
- package/dist/db/dialects/index.js +6 -0
- package/dist/db/dialects/mariadb.d.ts +7 -0
- package/dist/db/dialects/mariadb.js +35 -0
- package/dist/db/dialects/mysql.d.ts +14 -0
- package/dist/db/dialects/mysql.js +203 -0
- package/dist/db/dialects/postgres.d.ts +5 -0
- package/dist/db/dialects/postgres.js +106 -0
- package/dist/db/dialects/resolveDialect.d.ts +14 -0
- package/dist/db/dialects/resolveDialect.js +57 -0
- package/dist/db/dialects/types.d.ts +44 -0
- package/dist/db/dialects/types.js +1 -0
- package/dist/db/errors.d.ts +15 -0
- package/dist/db/errors.js +20 -0
- package/dist/db/fields/BooleanField.d.ts +29 -0
- package/dist/db/fields/BooleanField.js +89 -0
- package/dist/db/fields/CharUuidField.d.ts +29 -0
- package/dist/db/fields/CharUuidField.js +63 -0
- package/dist/db/fields/ChoiceStringField.d.ts +25 -0
- package/dist/db/fields/ChoiceStringField.js +58 -0
- package/dist/db/fields/DecimalField.d.ts +20 -0
- package/dist/db/fields/DecimalField.js +105 -0
- package/dist/db/fields/EmailField.d.ts +31 -0
- package/dist/db/fields/EmailField.js +52 -0
- package/dist/db/fields/EncryptedJsonField.d.ts +82 -0
- package/dist/db/fields/EncryptedJsonField.js +169 -0
- package/dist/db/fields/IntegerField.d.ts +35 -0
- package/dist/db/fields/IntegerField.js +139 -0
- package/dist/db/fields/JsonField.d.ts +40 -0
- package/dist/db/fields/JsonField.js +79 -0
- package/dist/db/fields/JsonStringField.d.ts +21 -0
- package/dist/db/fields/JsonStringField.js +41 -0
- package/dist/db/fields/LinkField.d.ts +180 -0
- package/dist/db/fields/LinkField.js +359 -0
- package/dist/db/fields/PasswordField.d.ts +93 -0
- package/dist/db/fields/PasswordField.js +180 -0
- package/dist/db/fields/StringField.d.ts +43 -0
- package/dist/db/fields/StringField.js +102 -0
- package/dist/db/fields/StringListField.d.ts +54 -0
- package/dist/db/fields/StringListField.js +124 -0
- package/dist/db/fields/TextField.d.ts +25 -0
- package/dist/db/fields/TextField.js +44 -0
- package/dist/db/fields/TimestampField.d.ts +47 -0
- package/dist/db/fields/TimestampField.js +97 -0
- package/dist/db/fields/UlidField.d.ts +69 -0
- package/dist/db/fields/UlidField.js +114 -0
- package/dist/db/fields/UrlField.d.ts +30 -0
- package/dist/db/fields/UrlField.js +61 -0
- package/dist/db/fields/VectorField.d.ts +64 -0
- package/dist/db/fields/VectorField.js +180 -0
- package/dist/db/fields/createField.d.ts +2 -0
- package/dist/db/fields/createField.js +13 -0
- package/dist/db/fields/field.d.ts +36 -0
- package/dist/db/fields/field.js +101 -0
- package/dist/db/fields/index.d.ts +18 -0
- package/dist/db/fields/index.js +18 -0
- package/dist/db/fields/resolveFields.d.ts +17 -0
- package/dist/db/fields/resolveFields.js +38 -0
- package/dist/db/index.d.ts +13 -0
- package/dist/db/index.js +13 -0
- package/dist/db/migrations/DatabaseMigrationManager.d.ts +57 -0
- package/dist/db/migrations/DatabaseMigrationManager.js +589 -0
- package/dist/db/migrations/DatabaseSchemaInspector.d.ts +19 -0
- package/dist/db/migrations/DatabaseSchemaInspector.js +384 -0
- package/dist/db/migrations/KnexMigrationRenderer.d.ts +11 -0
- package/dist/db/migrations/KnexMigrationRenderer.js +390 -0
- package/dist/db/migrations/ModelSchemaCollector.d.ts +29 -0
- package/dist/db/migrations/ModelSchemaCollector.js +183 -0
- package/dist/db/migrations/SchemaDiffer.d.ts +13 -0
- package/dist/db/migrations/SchemaDiffer.js +427 -0
- package/dist/db/migrations/SchemaNames.d.ts +27 -0
- package/dist/db/migrations/SchemaNames.js +46 -0
- package/dist/db/migrations/SchemaSnapshotSerializer.d.ts +30 -0
- package/dist/db/migrations/SchemaSnapshotSerializer.js +49 -0
- package/dist/db/migrations/contracts/DatabaseMigration.d.ts +118 -0
- package/dist/db/migrations/contracts/DatabaseMigration.js +1 -0
- package/dist/db/migrations/contracts/SchemaChange.d.ts +83 -0
- package/dist/db/migrations/contracts/SchemaChange.js +1 -0
- package/dist/db/migrations/contracts/SchemaSnapshot.d.ts +94 -0
- package/dist/db/migrations/contracts/SchemaSnapshot.js +1 -0
- package/dist/db/migrations/contracts/index.d.ts +3 -0
- package/dist/db/migrations/contracts/index.js +3 -0
- package/dist/db/migrations/errors.d.ts +35 -0
- package/dist/db/migrations/errors.js +45 -0
- package/dist/db/migrations/index.d.ts +10 -0
- package/dist/db/migrations/index.js +10 -0
- package/dist/db/migrations/promoteDestructiveSchemaChanges.d.ts +19 -0
- package/dist/db/migrations/promoteDestructiveSchemaChanges.js +102 -0
- package/dist/db/queryMonitor.d.ts +142 -0
- package/dist/db/queryMonitor.js +357 -0
- package/dist/db/sqlErrors.d.ts +11 -0
- package/dist/db/sqlErrors.js +17 -0
- package/dist/db/test/db.d.ts +11 -0
- package/dist/db/test/db.js +109 -0
- package/dist/devtools/HttpEventDispatcher.d.ts +19 -0
- package/dist/devtools/HttpEventDispatcher.js +180 -0
- package/dist/devtools/contracts/DevtoolsEventDispatcher.d.ts +53 -0
- package/dist/devtools/contracts/DevtoolsEventDispatcher.js +1 -0
- package/dist/devtools/contracts/index.d.ts +1 -0
- package/dist/devtools/contracts/index.js +1 -0
- package/dist/devtools/environment.d.ts +10 -0
- package/dist/devtools/environment.js +14 -0
- package/dist/devtools/index.d.ts +3 -0
- package/dist/devtools/index.js +3 -0
- package/dist/events/Events.d.ts +70 -0
- package/dist/events/Events.js +126 -0
- package/dist/events/contracts/EventConstructor.d.ts +12 -0
- package/dist/events/contracts/EventConstructor.js +1 -0
- package/dist/events/contracts/EventListener.d.ts +6 -0
- package/dist/events/contracts/EventListener.js +1 -0
- package/dist/events/contracts/EventUnsubscribe.d.ts +4 -0
- package/dist/events/contracts/EventUnsubscribe.js +1 -0
- package/dist/events/contracts/index.d.ts +3 -0
- package/dist/events/contracts/index.js +3 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.js +2 -0
- package/dist/flows/FlowBlockRegistry.d.ts +39 -0
- package/dist/flows/FlowBlockRegistry.js +66 -0
- package/dist/flows/FlowCompiler.d.ts +26 -0
- package/dist/flows/FlowCompiler.js +488 -0
- package/dist/flows/FlowDefinitionError.d.ts +21 -0
- package/dist/flows/FlowDefinitionError.js +16 -0
- package/dist/flows/FlowStepJob.d.ts +28 -0
- package/dist/flows/FlowStepJob.js +31 -0
- package/dist/flows/FlowValueValidator.d.ts +32 -0
- package/dist/flows/FlowValueValidator.js +105 -0
- package/dist/flows/Flows.d.ts +102 -0
- package/dist/flows/Flows.js +871 -0
- package/dist/flows/blocks/FlowInput.d.ts +10 -0
- package/dist/flows/blocks/FlowInput.js +29 -0
- package/dist/flows/blocks/FlowOutput.d.ts +10 -0
- package/dist/flows/blocks/FlowOutput.js +29 -0
- package/dist/flows/blocks/Subflow.d.ts +10 -0
- package/dist/flows/blocks/Subflow.js +21 -0
- package/dist/flows/blocks/index.d.ts +6 -0
- package/dist/flows/blocks/index.js +8 -0
- package/dist/flows/constants.d.ts +55 -0
- package/dist/flows/constants.js +47 -0
- package/dist/flows/contracts/FlowBlock.d.ts +64 -0
- package/dist/flows/contracts/FlowBlock.js +1 -0
- package/dist/flows/contracts/FlowCompiler.d.ts +30 -0
- package/dist/flows/contracts/FlowCompiler.js +1 -0
- package/dist/flows/contracts/FlowDefinition.d.ts +118 -0
- package/dist/flows/contracts/FlowDefinition.js +1 -0
- package/dist/flows/contracts/FlowDefinitionStore.d.ts +47 -0
- package/dist/flows/contracts/FlowDefinitionStore.js +1 -0
- package/dist/flows/contracts/FlowRun.d.ts +40 -0
- package/dist/flows/contracts/FlowRun.js +1 -0
- package/dist/flows/contracts/FlowValue.d.ts +49 -0
- package/dist/flows/contracts/FlowValue.js +1 -0
- package/dist/flows/contracts/FlowsService.d.ts +37 -0
- package/dist/flows/contracts/FlowsService.js +1 -0
- package/dist/flows/contracts/index.d.ts +7 -0
- package/dist/flows/contracts/index.js +7 -0
- package/dist/flows/defineBlock.d.ts +18 -0
- package/dist/flows/defineBlock.js +19 -0
- package/dist/flows/drivers/FileFlowDefinitionStore.d.ts +53 -0
- package/dist/flows/drivers/FileFlowDefinitionStore.js +313 -0
- package/dist/flows/drivers/index.d.ts +1 -0
- package/dist/flows/drivers/index.js +1 -0
- package/dist/flows/errors.d.ts +8 -0
- package/dist/flows/errors.js +19 -0
- package/dist/flows/index.d.ts +13 -0
- package/dist/flows/index.js +13 -0
- package/dist/flows/models/FlowRun.d.ts +55 -0
- package/dist/flows/models/FlowRun.js +126 -0
- package/dist/flows/models/FlowRunEvent.d.ts +41 -0
- package/dist/flows/models/FlowRunEvent.js +85 -0
- package/dist/flows/models/FlowStepRun.d.ts +56 -0
- package/dist/flows/models/FlowStepRun.js +137 -0
- package/dist/flows/models/index.d.ts +10 -0
- package/dist/flows/models/index.js +14 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +16 -0
- package/dist/logging/Log.d.ts +66 -0
- package/dist/logging/Log.js +79 -0
- package/dist/logging/contracts/HttpExchange.d.ts +50 -0
- package/dist/logging/contracts/HttpExchange.js +1 -0
- package/dist/logging/contracts/Logger.d.ts +41 -0
- package/dist/logging/contracts/Logger.js +1 -0
- package/dist/logging/contracts/LoggerDriver.d.ts +16 -0
- package/dist/logging/contracts/LoggerDriver.js +1 -0
- package/dist/logging/contracts/LoggingOptions.d.ts +49 -0
- package/dist/logging/contracts/LoggingOptions.js +1 -0
- package/dist/logging/contracts/index.d.ts +4 -0
- package/dist/logging/contracts/index.js +4 -0
- package/dist/logging/drivers/PinoLoggerDriver.d.ts +24 -0
- package/dist/logging/drivers/PinoLoggerDriver.js +291 -0
- package/dist/logging/drivers/index.d.ts +1 -0
- package/dist/logging/drivers/index.js +1 -0
- package/dist/logging/index.d.ts +3 -0
- package/dist/logging/index.js +3 -0
- package/dist/logging/transports/DevtoolsLogTransport.d.ts +35 -0
- package/dist/logging/transports/DevtoolsLogTransport.js +96 -0
- package/dist/mail/Mail.d.ts +62 -0
- package/dist/mail/Mail.js +98 -0
- package/dist/mail/index.d.ts +4 -0
- package/dist/mail/index.js +4 -0
- package/dist/mail/transports/FileMailTransport.d.ts +12 -0
- package/dist/mail/transports/FileMailTransport.js +41 -0
- package/dist/mail/transports/MailgunTransport.d.ts +22 -0
- package/dist/mail/transports/MailgunTransport.js +57 -0
- package/dist/mail/transports/ResendTransport.d.ts +14 -0
- package/dist/mail/transports/ResendTransport.js +55 -0
- package/dist/media/MediaFile.d.ts +48 -0
- package/dist/media/MediaFile.js +104 -0
- package/dist/media/MediaItem.d.ts +47 -0
- package/dist/media/MediaItem.js +106 -0
- package/dist/media/MediaLibrary.d.ts +42 -0
- package/dist/media/MediaLibrary.js +94 -0
- package/dist/media/MediaManager.d.ts +159 -0
- package/dist/media/MediaManager.js +754 -0
- package/dist/media/constants.d.ts +27 -0
- package/dist/media/constants.js +19 -0
- package/dist/media/contracts/MediaOptions.d.ts +8 -0
- package/dist/media/contracts/MediaOptions.js +1 -0
- package/dist/media/contracts/index.d.ts +1 -0
- package/dist/media/contracts/index.js +1 -0
- package/dist/media/image/ImageReconstructionError.d.ts +15 -0
- package/dist/media/image/ImageReconstructionError.js +18 -0
- package/dist/media/image/ImageVariantRenderer.d.ts +44 -0
- package/dist/media/image/ImageVariantRenderer.js +337 -0
- package/dist/media/image/ImageVariantRequest.d.ts +28 -0
- package/dist/media/image/ImageVariantRequest.js +55 -0
- package/dist/media/image/contracts/ImageProcessor.d.ts +46 -0
- package/dist/media/image/contracts/ImageProcessor.js +1 -0
- package/dist/media/image/contracts/ImageVariant.d.ts +31 -0
- package/dist/media/image/contracts/ImageVariant.js +7 -0
- package/dist/media/image/contracts/ImageVariantCacheOptions.d.ts +20 -0
- package/dist/media/image/contracts/ImageVariantCacheOptions.js +1 -0
- package/dist/media/image/contracts/index.d.ts +3 -0
- package/dist/media/image/contracts/index.js +3 -0
- package/dist/media/image/index.d.ts +5 -0
- package/dist/media/image/index.js +5 -0
- package/dist/media/image/processors/SharpImageProcessor.d.ts +25 -0
- package/dist/media/image/processors/SharpImageProcessor.js +112 -0
- package/dist/media/image/processors/index.d.ts +1 -0
- package/dist/media/image/processors/index.js +1 -0
- package/dist/media/index.d.ts +8 -0
- package/dist/media/index.js +8 -0
- package/dist/media/types.d.ts +129 -0
- package/dist/media/types.js +1 -0
- package/dist/queue/FailedJob.d.ts +31 -0
- package/dist/queue/FailedJob.js +41 -0
- package/dist/queue/Queue.d.ts +208 -0
- package/dist/queue/Queue.js +685 -0
- package/dist/queue/QueueEvents.d.ts +31 -0
- package/dist/queue/QueueEvents.js +49 -0
- package/dist/queue/QueueRetryLaterError.d.ts +23 -0
- package/dist/queue/QueueRetryLaterError.js +34 -0
- package/dist/queue/QueueWorker.d.ts +72 -0
- package/dist/queue/QueueWorker.js +236 -0
- package/dist/queue/QueueableJob.d.ts +109 -0
- package/dist/queue/QueueableJob.js +137 -0
- package/dist/queue/QueuedJob.d.ts +31 -0
- package/dist/queue/QueuedJob.js +52 -0
- package/dist/queue/RetryPolicy.d.ts +51 -0
- package/dist/queue/RetryPolicy.js +84 -0
- package/dist/queue/commands/index.d.ts +4 -0
- package/dist/queue/commands/index.js +11 -0
- package/dist/queue/commands/makeJob.d.ts +7 -0
- package/dist/queue/commands/makeJob.js +9 -0
- package/dist/queue/console.d.ts +60 -0
- package/dist/queue/console.js +348 -0
- package/dist/queue/contracts/CreateJob.d.ts +12 -0
- package/dist/queue/contracts/CreateJob.js +1 -0
- package/dist/queue/contracts/QueueDriver.d.ts +122 -0
- package/dist/queue/contracts/QueueDriver.js +1 -0
- package/dist/queue/contracts/QueueEvents.d.ts +61 -0
- package/dist/queue/contracts/QueueEvents.js +1 -0
- package/dist/queue/contracts/QueuePayload.d.ts +136 -0
- package/dist/queue/contracts/QueuePayload.js +1 -0
- package/dist/queue/contracts/QueueRetry.d.ts +43 -0
- package/dist/queue/contracts/QueueRetry.js +1 -0
- package/dist/queue/contracts/QueueService.d.ts +199 -0
- package/dist/queue/contracts/QueueService.js +1 -0
- package/dist/queue/contracts/QueueWorkerLifecycle.d.ts +65 -0
- package/dist/queue/contracts/QueueWorkerLifecycle.js +1 -0
- package/dist/queue/contracts/QueueableJob.d.ts +50 -0
- package/dist/queue/contracts/QueueableJob.js +1 -0
- package/dist/queue/contracts/RedisQueueDriver.d.ts +37 -0
- package/dist/queue/contracts/RedisQueueDriver.js +1 -0
- package/dist/queue/contracts/index.d.ts +9 -0
- package/dist/queue/contracts/index.js +9 -0
- package/dist/queue/createJob.d.ts +18 -0
- package/dist/queue/createJob.js +52 -0
- package/dist/queue/drivers/DatabaseQueueDriver.d.ts +83 -0
- package/dist/queue/drivers/DatabaseQueueDriver.js +393 -0
- package/dist/queue/drivers/RedisQueueDriver.d.ts +102 -0
- package/dist/queue/drivers/RedisQueueDriver.js +641 -0
- package/dist/queue/index.d.ts +13 -0
- package/dist/queue/index.js +13 -0
- package/dist/queue/queueMonitor.d.ts +133 -0
- package/dist/queue/queueMonitor.js +238 -0
- package/dist/scheduler/ScheduledCall.d.ts +25 -0
- package/dist/scheduler/ScheduledCall.js +31 -0
- package/dist/scheduler/ScheduledEvent.d.ts +74 -0
- package/dist/scheduler/ScheduledEvent.js +115 -0
- package/dist/scheduler/ScheduledJob.d.ts +34 -0
- package/dist/scheduler/ScheduledJob.js +50 -0
- package/dist/scheduler/ScheduledOccurrence.d.ts +74 -0
- package/dist/scheduler/ScheduledOccurrence.js +194 -0
- package/dist/scheduler/ScheduledOccurrenceRecorder.d.ts +34 -0
- package/dist/scheduler/ScheduledOccurrenceRecorder.js +106 -0
- package/dist/scheduler/Scheduler.d.ts +76 -0
- package/dist/scheduler/Scheduler.js +186 -0
- package/dist/scheduler/SchedulerWorker.d.ts +37 -0
- package/dist/scheduler/SchedulerWorker.js +119 -0
- package/dist/scheduler/console.d.ts +18 -0
- package/dist/scheduler/console.js +288 -0
- package/dist/scheduler/constants.d.ts +13 -0
- package/dist/scheduler/constants.js +23 -0
- package/dist/scheduler/contracts/Scheduler.d.ts +104 -0
- package/dist/scheduler/contracts/Scheduler.js +1 -0
- package/dist/scheduler/contracts/SchedulerConsole.d.ts +37 -0
- package/dist/scheduler/contracts/SchedulerConsole.js +1 -0
- package/dist/scheduler/contracts/SchedulerWorker.d.ts +18 -0
- package/dist/scheduler/contracts/SchedulerWorker.js +1 -0
- package/dist/scheduler/contracts/index.d.ts +3 -0
- package/dist/scheduler/contracts/index.js +3 -0
- package/dist/scheduler/index.d.ts +9 -0
- package/dist/scheduler/index.js +9 -0
- package/dist/scheduler/scheduleTime.d.ts +30 -0
- package/dist/scheduler/scheduleTime.js +64 -0
- package/dist/security/Security.d.ts +60 -0
- package/dist/security/Security.js +252 -0
- package/dist/security/SecurityError.d.ts +13 -0
- package/dist/security/SecurityError.js +16 -0
- package/dist/security/contracts/SecurityOptions.d.ts +17 -0
- package/dist/security/contracts/SecurityOptions.js +1 -0
- package/dist/security/contracts/SecurityPayload.d.ts +13 -0
- package/dist/security/contracts/SecurityPayload.js +1 -0
- package/dist/security/contracts/index.d.ts +2 -0
- package/dist/security/contracts/index.js +2 -0
- package/dist/security/ensureAppKey.d.ts +16 -0
- package/dist/security/ensureAppKey.js +69 -0
- package/dist/security/index.d.ts +4 -0
- package/dist/security/index.js +4 -0
- package/dist/serialization/Serializable.d.ts +17 -0
- package/dist/serialization/Serializable.js +1 -0
- package/dist/serialization/SerializationError.d.ts +40 -0
- package/dist/serialization/SerializationError.js +42 -0
- package/dist/serialization/SerializationRegistry.d.ts +76 -0
- package/dist/serialization/SerializationRegistry.js +153 -0
- package/dist/serialization/SerializationRegistryError.d.ts +18 -0
- package/dist/serialization/SerializationRegistryError.js +18 -0
- package/dist/serialization/Serializer.d.ts +37 -0
- package/dist/serialization/Serializer.js +477 -0
- package/dist/serialization/contracts/SerializableClass.d.ts +20 -0
- package/dist/serialization/contracts/SerializableClass.js +1 -0
- package/dist/serialization/contracts/SerializedValue.d.ts +59 -0
- package/dist/serialization/contracts/SerializedValue.js +19 -0
- package/dist/serialization/contracts/SerializerOptions.d.ts +17 -0
- package/dist/serialization/contracts/SerializerOptions.js +1 -0
- package/dist/serialization/contracts/SerializerService.d.ts +26 -0
- package/dist/serialization/contracts/SerializerService.js +1 -0
- package/dist/serialization/contracts/index.d.ts +4 -0
- package/dist/serialization/contracts/index.js +4 -0
- package/dist/serialization/index.d.ts +6 -0
- package/dist/serialization/index.js +6 -0
- package/dist/server/App.d.ts +141 -0
- package/dist/server/App.js +225 -0
- package/dist/server/RequestContext.d.ts +42 -0
- package/dist/server/RequestContext.js +95 -0
- package/dist/server/appContext.d.ts +34 -0
- package/dist/server/appContext.js +42 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +3 -0
- package/dist/ssr/constants.d.ts +6 -0
- package/dist/ssr/constants.js +6 -0
- package/dist/ssr/contracts/DocumentHead.d.ts +32 -0
- package/dist/ssr/contracts/DocumentHead.js +1 -0
- package/dist/ssr/contracts/SsrRenderContext.d.ts +23 -0
- package/dist/ssr/contracts/SsrRenderContext.js +1 -0
- package/dist/ssr/contracts/SsrRenderResult.d.ts +21 -0
- package/dist/ssr/contracts/SsrRenderResult.js +1 -0
- package/dist/ssr/contracts/SsrRenderer.d.ts +9 -0
- package/dist/ssr/contracts/SsrRenderer.js +1 -0
- package/dist/ssr/contracts/SsrRequest.d.ts +16 -0
- package/dist/ssr/contracts/SsrRequest.js +1 -0
- package/dist/ssr/contracts/index.d.ts +5 -0
- package/dist/ssr/contracts/index.js +1 -0
- package/dist/ssr/createSsrRenderContext.d.ts +9 -0
- package/dist/ssr/createSsrRenderContext.js +20 -0
- package/dist/ssr/fastify/contracts/FastifySsrOptions.d.ts +21 -0
- package/dist/ssr/fastify/contracts/FastifySsrOptions.js +1 -0
- package/dist/ssr/fastify/contracts/index.d.ts +1 -0
- package/dist/ssr/fastify/contracts/index.js +1 -0
- package/dist/ssr/fastify/fastifySsr.d.ts +25 -0
- package/dist/ssr/fastify/fastifySsr.js +89 -0
- package/dist/ssr/fastify/index.d.ts +2 -0
- package/dist/ssr/fastify/index.js +1 -0
- package/dist/ssr/index.d.ts +6 -0
- package/dist/ssr/index.js +5 -0
- package/dist/ssr/renderDocumentHead.d.ts +8 -0
- package/dist/ssr/renderDocumentHead.js +62 -0
- package/dist/ssr/renderSsrDocument.d.ts +14 -0
- package/dist/ssr/renderSsrDocument.js +28 -0
- package/dist/ssr/serializeSsrState.d.ts +10 -0
- package/dist/ssr/serializeSsrState.js +18 -0
- package/dist/ssr/vite/contracts/ViteSsrOptions.d.ts +45 -0
- package/dist/ssr/vite/contracts/ViteSsrOptions.js +1 -0
- package/dist/ssr/vite/contracts/index.d.ts +1 -0
- package/dist/ssr/vite/contracts/index.js +1 -0
- package/dist/ssr/vite/fastifyViteSsr.d.ts +24 -0
- package/dist/ssr/vite/fastifyViteSsr.js +213 -0
- package/dist/ssr/vite/index.d.ts +4 -0
- package/dist/ssr/vite/index.js +2 -0
- package/dist/ssr/vite/viteSsrManifest.d.ts +16 -0
- package/dist/ssr/vite/viteSsrManifest.js +63 -0
- package/dist/storage/Storage.d.ts +244 -0
- package/dist/storage/Storage.js +348 -0
- package/dist/storage/contents.d.ts +8 -0
- package/dist/storage/contents.js +18 -0
- package/dist/storage/contracts/StorageListing.d.ts +50 -0
- package/dist/storage/contracts/StorageListing.js +1 -0
- package/dist/storage/contracts/index.d.ts +1 -0
- package/dist/storage/contracts/index.js +1 -0
- package/dist/storage/drivers/FlystorageDisk.d.ts +185 -0
- package/dist/storage/drivers/FlystorageDisk.js +250 -0
- package/dist/storage/drivers/FlystorageListing.d.ts +27 -0
- package/dist/storage/drivers/FlystorageListing.js +69 -0
- package/dist/storage/drivers/LocalStorageDisk.d.ts +25 -0
- package/dist/storage/drivers/LocalStorageDisk.js +38 -0
- package/dist/storage/drivers/S3StorageDisk.d.ts +17 -0
- package/dist/storage/drivers/S3StorageDisk.js +102 -0
- package/dist/storage/drivers/index.d.ts +3 -0
- package/dist/storage/drivers/index.js +3 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/mime.d.ts +7 -0
- package/dist/storage/mime.js +28 -0
- package/dist/storage/path.d.ts +22 -0
- package/dist/storage/path.js +61 -0
- package/dist/storage/types.d.ts +218 -0
- package/dist/storage/types.js +1 -0
- package/dist/url/UrlGenerator.d.ts +32 -0
- package/dist/url/UrlGenerator.js +61 -0
- package/dist/url/contracts/UrlGeneratorOptions.d.ts +13 -0
- package/dist/url/contracts/UrlGeneratorOptions.js +1 -0
- package/dist/url/contracts/index.d.ts +1 -0
- package/dist/url/contracts/index.js +1 -0
- package/dist/url/index.d.ts +2 -0
- package/dist/url/index.js +2 -0
- package/dist/validation/index.d.ts +28 -0
- package/dist/validation/index.js +260 -0
- package/package.json +290 -0
- package/src/ai/AIErrors.ts +46 -0
- package/src/ai/AIFailover.ts +101 -0
- package/src/ai/AIProviders.ts +228 -0
- package/src/ai/AIQuotaDeferredError.ts +26 -0
- package/src/ai/AIRateLimiter.ts +880 -0
- package/src/ai/Agent.ts +3630 -0
- package/src/ai/AgentHistory.ts +576 -0
- package/src/ai/AgentRunJob.ts +65 -0
- package/src/ai/Ai.ts +2176 -0
- package/src/ai/AiConversation.ts +49 -0
- package/src/ai/AiExecutionContext.ts +19 -0
- package/src/ai/AiMessage.ts +131 -0
- package/src/ai/AiRateLimitBucket.ts +163 -0
- package/src/ai/AiRateLimitReservation.ts +117 -0
- package/src/ai/AiRequest.ts +466 -0
- package/src/ai/Estimates.ts +36 -0
- package/src/ai/Models.ts +373 -0
- package/src/ai/OpenAIProviderError.ts +98 -0
- package/src/ai/OpenAIQuotaRetry.ts +183 -0
- package/src/ai/ProviderCosts.ts +156 -0
- package/src/ai/README.md +187 -0
- package/src/ai/ResponsesProviderCall.ts +34 -0
- package/src/ai/agentCitations.ts +186 -0
- package/src/ai/contracts/AI.ts +380 -0
- package/src/ai/contracts/Agent.ts +539 -0
- package/src/ai/contracts/AiRequestRunCostSummary.ts +31 -0
- package/src/ai/contracts/Pricing.ts +95 -0
- package/src/ai/contracts/Providers.ts +73 -0
- package/src/ai/contracts/QuotaRetry.ts +39 -0
- package/src/ai/contracts/RateLimits.ts +49 -0
- package/src/ai/contracts/ResponsesProviderCall.ts +30 -0
- package/src/ai/contracts/index.ts +8 -0
- package/src/ai/examples/Conversation.ts +12 -0
- package/src/ai/examples/HelpAgent.ts +27 -0
- package/src/ai/examples/createHelpImage.ts +13 -0
- package/src/ai/index.ts +27 -0
- package/src/ai/registry.ts +70 -0
- package/src/ai/sdkNodeCompatibility.d.ts +76 -0
- package/src/ai/toolCallRecovery.ts +82 -0
- package/src/ai/toolHelpers.ts +145 -0
- package/src/auth/Auth.ts +1422 -0
- package/src/auth/AuthProvider.ts +251 -0
- package/src/auth/AuthToken.ts +239 -0
- package/src/auth/PasswordResetToken.ts +93 -0
- package/src/auth/README.md +396 -0
- package/src/auth/UserIdentity.ts +112 -0
- package/src/auth/contracts/AuthProviderDriver.ts +114 -0
- package/src/auth/contracts/index.ts +1 -0
- package/src/auth/examples/runPasswordAuth.ts +45 -0
- package/src/auth/index.ts +8 -0
- package/src/auth/passwordHash.ts +160 -0
- package/src/auth/providers/GoogleAuthProvider.ts +470 -0
- package/src/auth/providers/PasswordAuthProvider.ts +256 -0
- package/src/auth/providers/index.ts +3 -0
- package/src/auth/providers/resolveAuthProviders.ts +166 -0
- package/src/cache/Cache.ts +151 -0
- package/src/cache/README.md +137 -0
- package/src/cache/contracts/CacheDriver.ts +11 -0
- package/src/cache/contracts/CacheOperations.ts +28 -0
- package/src/cache/contracts/CacheOptions.ts +56 -0
- package/src/cache/contracts/CacheRepository.ts +62 -0
- package/src/cache/contracts/index.ts +4 -0
- package/src/cache/drivers/CacheManagerDriver.ts +84 -0
- package/src/cache/drivers/createCacheDriver.ts +191 -0
- package/src/cache/examples/runNoteCache.ts +37 -0
- package/src/cache/index.ts +2 -0
- package/src/cli/Cli.ts +110 -0
- package/src/cli/README.md +164 -0
- package/src/cli/commands/repl.ts +29 -0
- package/src/cli/contracts/CliCommand.ts +33 -0
- package/src/cli/contracts/CliConfig.ts +10 -0
- package/src/cli/contracts/CliOptions.ts +13 -0
- package/src/cli/contracts/CommandDefinition.ts +19 -0
- package/src/cli/contracts/ReplOptions.ts +11 -0
- package/src/cli/contracts/index.ts +5 -0
- package/src/cli/defineCommand.ts +25 -0
- package/src/cli/index.ts +5 -0
- package/src/cli/runDb3.ts +63 -0
- package/src/cli/runRepl.ts +55 -0
- package/src/config/Config.ts +110 -0
- package/src/config/README.md +142 -0
- package/src/config/env.ts +164 -0
- package/src/config/examples/loadNotesConfig.ts +29 -0
- package/src/config/examples/runConfig.ts +40 -0
- package/src/config/index.ts +2 -0
- package/src/db/ActiveProjection.ts +311 -0
- package/src/db/ActiveQueryBuilder.ts +831 -0
- package/src/db/ActiveRecord.ts +1317 -0
- package/src/db/Database.ts +1283 -0
- package/src/db/FieldType.ts +1243 -0
- package/src/db/README.md +508 -0
- package/src/db/SoftDeletes.ts +158 -0
- package/src/db/commands/check.ts +10 -0
- package/src/db/commands/index.ts +19 -0
- package/src/db/commands/makeMigration.ts +11 -0
- package/src/db/commands/migrate.ts +10 -0
- package/src/db/connection.ts +68 -0
- package/src/db/contracts/ActiveRecordDefinition.ts +69 -0
- package/src/db/contracts/DatabaseBackup.ts +7 -0
- package/src/db/contracts/DatabaseMigrationsConfig.ts +10 -0
- package/src/db/contracts/index.ts +3 -0
- package/src/db/dialects/columnTypes.ts +103 -0
- package/src/db/dialects/index.ts +6 -0
- package/src/db/dialects/mariadb.ts +51 -0
- package/src/db/dialects/mysql.ts +277 -0
- package/src/db/dialects/postgres.ts +143 -0
- package/src/db/dialects/resolveDialect.ts +88 -0
- package/src/db/dialects/types.ts +59 -0
- package/src/db/errors.ts +22 -0
- package/src/db/examples/DefinedUser.ts +20 -0
- package/src/db/examples/FieldNote.ts +27 -0
- package/src/db/examples/KnowledgeNote.ts +29 -0
- package/src/db/examples/NoteCodeField.ts +9 -0
- package/src/db/examples/createNotesTogether.ts +24 -0
- package/src/db/examples/outputs/workspace-notes.json +9 -0
- package/src/db/examples/runFieldNotes.ts +51 -0
- package/src/db/examples/runNoteMigrations.ts +64 -0
- package/src/db/examples/runWorkspaceNotes.ts +86 -0
- package/src/db/examples/workspaceNotes.ts +57 -0
- package/src/db/fields/BooleanField.ts +128 -0
- package/src/db/fields/CharUuidField.ts +91 -0
- package/src/db/fields/ChoiceStringField.ts +97 -0
- package/src/db/fields/DecimalField.ts +157 -0
- package/src/db/fields/EmailField.ts +79 -0
- package/src/db/fields/EncryptedJsonField.ts +211 -0
- package/src/db/fields/IntegerField.ts +200 -0
- package/src/db/fields/JsonField.ts +108 -0
- package/src/db/fields/JsonStringField.ts +63 -0
- package/src/db/fields/LinkField.ts +502 -0
- package/src/db/fields/PasswordField.ts +294 -0
- package/src/db/fields/StringField.ts +154 -0
- package/src/db/fields/StringListField.ts +179 -0
- package/src/db/fields/TextField.ts +71 -0
- package/src/db/fields/TimestampField.ts +164 -0
- package/src/db/fields/UlidField.ts +189 -0
- package/src/db/fields/UrlField.ts +97 -0
- package/src/db/fields/VectorField.ts +266 -0
- package/src/db/fields/createField.ts +22 -0
- package/src/db/fields/field.ts +209 -0
- package/src/db/fields/index.ts +76 -0
- package/src/db/fields/resolveFields.ts +69 -0
- package/src/db/index.ts +13 -0
- package/src/db/migrations/DatabaseMigrationManager.ts +756 -0
- package/src/db/migrations/DatabaseSchemaInspector.ts +541 -0
- package/src/db/migrations/KnexMigrationRenderer.ts +490 -0
- package/src/db/migrations/ModelSchemaCollector.ts +240 -0
- package/src/db/migrations/SchemaDiffer.ts +541 -0
- package/src/db/migrations/SchemaNames.ts +62 -0
- package/src/db/migrations/SchemaSnapshotSerializer.ts +59 -0
- package/src/db/migrations/contracts/DatabaseMigration.ts +143 -0
- package/src/db/migrations/contracts/SchemaChange.ts +113 -0
- package/src/db/migrations/contracts/SchemaSnapshot.ts +122 -0
- package/src/db/migrations/contracts/index.ts +3 -0
- package/src/db/migrations/errors.ts +45 -0
- package/src/db/migrations/index.ts +10 -0
- package/src/db/migrations/promoteDestructiveSchemaChanges.ts +120 -0
- package/src/db/queryMonitor.ts +549 -0
- package/src/db/sqlErrors.ts +36 -0
- package/src/db/test/db.ts +159 -0
- package/src/devtools/HttpEventDispatcher.ts +214 -0
- package/src/devtools/contracts/DevtoolsEventDispatcher.ts +57 -0
- package/src/devtools/contracts/index.ts +1 -0
- package/src/devtools/environment.ts +18 -0
- package/src/devtools/index.ts +3 -0
- package/src/events/Events.ts +165 -0
- package/src/events/README.md +106 -0
- package/src/events/contracts/EventConstructor.ts +12 -0
- package/src/events/contracts/EventListener.ts +8 -0
- package/src/events/contracts/EventUnsubscribe.ts +4 -0
- package/src/events/contracts/index.ts +3 -0
- package/src/events/examples/NoteSaved.ts +9 -0
- package/src/events/examples/runNoteEvents.ts +31 -0
- package/src/events/index.ts +2 -0
- package/src/flows/FlowBlockRegistry.ts +79 -0
- package/src/flows/FlowCompiler.ts +624 -0
- package/src/flows/FlowDefinitionError.ts +24 -0
- package/src/flows/FlowStepJob.ts +54 -0
- package/src/flows/FlowValueValidator.ts +120 -0
- package/src/flows/Flows.ts +1118 -0
- package/src/flows/README.md +144 -0
- package/src/flows/blocks/FlowInput.ts +32 -0
- package/src/flows/blocks/FlowOutput.ts +32 -0
- package/src/flows/blocks/Subflow.ts +24 -0
- package/src/flows/blocks/index.ts +11 -0
- package/src/flows/constants.ts +62 -0
- package/src/flows/contracts/FlowBlock.ts +73 -0
- package/src/flows/contracts/FlowCompiler.ts +32 -0
- package/src/flows/contracts/FlowDefinition.ts +126 -0
- package/src/flows/contracts/FlowDefinitionStore.ts +52 -0
- package/src/flows/contracts/FlowRun.ts +44 -0
- package/src/flows/contracts/FlowValue.ts +54 -0
- package/src/flows/contracts/FlowsService.ts +39 -0
- package/src/flows/contracts/index.ts +7 -0
- package/src/flows/defineBlock.ts +25 -0
- package/src/flows/drivers/FileFlowDefinitionStore.ts +372 -0
- package/src/flows/drivers/index.ts +1 -0
- package/src/flows/errors.ts +22 -0
- package/src/flows/examples/FlowExampleApp.ts +15 -0
- package/src/flows/examples/createTextFlow.ts +14 -0
- package/src/flows/examples/normalizeTextBlock.ts +15 -0
- package/src/flows/examples/runTextFlow.ts +46 -0
- package/src/flows/examples/uppercaseTextBlock.ts +11 -0
- package/src/flows/index.ts +13 -0
- package/src/flows/models/FlowRun.ts +164 -0
- package/src/flows/models/FlowRunEvent.ts +108 -0
- package/src/flows/models/FlowStepRun.ts +176 -0
- package/src/flows/models/index.ts +16 -0
- package/src/index.ts +40 -0
- package/src/logging/Log.ts +100 -0
- package/src/logging/README.md +139 -0
- package/src/logging/contracts/HttpExchange.ts +53 -0
- package/src/logging/contracts/Logger.ts +45 -0
- package/src/logging/contracts/LoggerDriver.ts +19 -0
- package/src/logging/contracts/LoggingOptions.ts +51 -0
- package/src/logging/contracts/index.ts +4 -0
- package/src/logging/drivers/PinoLoggerDriver.ts +376 -0
- package/src/logging/drivers/index.ts +1 -0
- package/src/logging/examples/runNoteLogs.ts +38 -0
- package/src/logging/index.ts +3 -0
- package/src/logging/transports/DevtoolsLogTransport.ts +142 -0
- package/src/mail/Mail.ts +188 -0
- package/src/mail/README.md +206 -0
- package/src/mail/examples/runMailPreview.ts +44 -0
- package/src/mail/examples/welcomeMessage.ts +26 -0
- package/src/mail/index.ts +4 -0
- package/src/mail/transports/FileMailTransport.ts +58 -0
- package/src/mail/transports/MailgunTransport.ts +85 -0
- package/src/mail/transports/ResendTransport.ts +80 -0
- package/src/media/MediaFile.ts +132 -0
- package/src/media/MediaItem.ts +132 -0
- package/src/media/MediaLibrary.ts +117 -0
- package/src/media/MediaManager.ts +874 -0
- package/src/media/README.md +358 -0
- package/src/media/constants.ts +31 -0
- package/src/media/contracts/MediaOptions.ts +9 -0
- package/src/media/contracts/index.ts +1 -0
- package/src/media/examples/createPrivateFileServer.ts +55 -0
- package/src/media/examples/runPrivateFiles.ts +45 -0
- package/src/media/examples/runProjectMedia.ts +46 -0
- package/src/media/image/ImageReconstructionError.ts +18 -0
- package/src/media/image/ImageVariantRenderer.ts +386 -0
- package/src/media/image/ImageVariantRequest.ts +65 -0
- package/src/media/image/contracts/ImageProcessor.ts +53 -0
- package/src/media/image/contracts/ImageVariant.ts +37 -0
- package/src/media/image/contracts/ImageVariantCacheOptions.ts +21 -0
- package/src/media/image/contracts/index.ts +3 -0
- package/src/media/image/index.ts +5 -0
- package/src/media/image/processors/SharpImageProcessor.ts +121 -0
- package/src/media/image/processors/index.ts +1 -0
- package/src/media/index.ts +8 -0
- package/src/media/types.ts +168 -0
- package/src/queue/FailedJob.ts +58 -0
- package/src/queue/Queue.ts +938 -0
- package/src/queue/QueueEvents.ts +57 -0
- package/src/queue/QueueRetryLaterError.ts +40 -0
- package/src/queue/QueueWorker.ts +296 -0
- package/src/queue/QueueableJob.ts +167 -0
- package/src/queue/QueuedJob.ts +69 -0
- package/src/queue/README.md +368 -0
- package/src/queue/RetryPolicy.ts +129 -0
- package/src/queue/commands/index.ts +13 -0
- package/src/queue/commands/makeJob.ts +11 -0
- package/src/queue/console.ts +518 -0
- package/src/queue/contracts/CreateJob.ts +13 -0
- package/src/queue/contracts/QueueDriver.ts +135 -0
- package/src/queue/contracts/QueueEvents.ts +77 -0
- package/src/queue/contracts/QueuePayload.ts +150 -0
- package/src/queue/contracts/QueueRetry.ts +47 -0
- package/src/queue/contracts/QueueService.ts +219 -0
- package/src/queue/contracts/QueueWorkerLifecycle.ts +71 -0
- package/src/queue/contracts/QueueableJob.ts +56 -0
- package/src/queue/contracts/RedisQueueDriver.ts +37 -0
- package/src/queue/contracts/index.ts +9 -0
- package/src/queue/createJob.ts +54 -0
- package/src/queue/drivers/DatabaseQueueDriver.ts +449 -0
- package/src/queue/drivers/RedisQueueDriver.ts +733 -0
- package/src/queue/examples/DeferredReportJob.ts +25 -0
- package/src/queue/examples/GenerateReportJob.ts +37 -0
- package/src/queue/examples/WriteReportJob.ts +37 -0
- package/src/queue/examples/createAndProcessReportJob.ts +29 -0
- package/src/queue/examples/dispatchReportWorkflows.ts +40 -0
- package/src/queue/examples/manageReportRetries.ts +47 -0
- package/src/queue/examples/outputs/create-and-process-report-job.json +6 -0
- package/src/queue/examples/outputs/dispatch-report-workflows.json +14 -0
- package/src/queue/examples/outputs/manage-report-retries.json +24 -0
- package/src/queue/examples/outputs/queue-reports.json +11 -0
- package/src/queue/examples/reportConsole.ts +47 -0
- package/src/queue/examples/runBackpressure.ts +27 -0
- package/src/queue/examples/runQueueReports.ts +80 -0
- package/src/queue/examples/runQueueWorkflows.ts +43 -0
- package/src/queue/index.ts +13 -0
- package/src/queue/queueMonitor.ts +368 -0
- package/src/scheduler/README.md +139 -0
- package/src/scheduler/ScheduledCall.ts +36 -0
- package/src/scheduler/ScheduledEvent.ts +149 -0
- package/src/scheduler/ScheduledJob.ts +58 -0
- package/src/scheduler/ScheduledOccurrence.ts +250 -0
- package/src/scheduler/ScheduledOccurrenceRecorder.ts +125 -0
- package/src/scheduler/Scheduler.ts +225 -0
- package/src/scheduler/SchedulerWorker.ts +151 -0
- package/src/scheduler/console.ts +368 -0
- package/src/scheduler/constants.ts +27 -0
- package/src/scheduler/contracts/Scheduler.ts +123 -0
- package/src/scheduler/contracts/SchedulerConsole.ts +40 -0
- package/src/scheduler/contracts/SchedulerWorker.ts +23 -0
- package/src/scheduler/contracts/index.ts +3 -0
- package/src/scheduler/examples/RecoverableSummaryJob.ts +18 -0
- package/src/scheduler/examples/WriteDailySummaryJob.ts +17 -0
- package/src/scheduler/examples/registerDailySummary.ts +13 -0
- package/src/scheduler/examples/runDailySummary.ts +46 -0
- package/src/scheduler/examples/runScheduledReplay.ts +60 -0
- package/src/scheduler/index.ts +9 -0
- package/src/scheduler/scheduleTime.ts +78 -0
- package/src/security/README.md +130 -0
- package/src/security/Security.ts +346 -0
- package/src/security/SecurityError.ts +16 -0
- package/src/security/contracts/SecurityOptions.ts +20 -0
- package/src/security/contracts/SecurityPayload.ts +14 -0
- package/src/security/contracts/index.ts +2 -0
- package/src/security/ensureAppKey.ts +82 -0
- package/src/security/examples/runSecretRoundTrip.ts +42 -0
- package/src/security/index.ts +4 -0
- package/src/serialization/README.md +169 -0
- package/src/serialization/Serializable.ts +17 -0
- package/src/serialization/SerializationError.ts +91 -0
- package/src/serialization/SerializationRegistry.ts +208 -0
- package/src/serialization/SerializationRegistryError.ts +24 -0
- package/src/serialization/Serializer.ts +793 -0
- package/src/serialization/contracts/SerializableClass.ts +26 -0
- package/src/serialization/contracts/SerializedValue.ts +71 -0
- package/src/serialization/contracts/SerializerOptions.ts +19 -0
- package/src/serialization/contracts/SerializerService.ts +29 -0
- package/src/serialization/contracts/index.ts +4 -0
- package/src/serialization/examples/ExportRequest.ts +25 -0
- package/src/serialization/examples/runExportSerialization.ts +24 -0
- package/src/serialization/index.ts +6 -0
- package/src/server/App.ts +326 -0
- package/src/server/README.md +219 -0
- package/src/server/RequestContext.ts +122 -0
- package/src/server/appContext.ts +59 -0
- package/src/server/examples/createFirstServer.ts +25 -0
- package/src/server/examples/startFirstServer.ts +19 -0
- package/src/server/index.ts +16 -0
- package/src/ssr/README.md +158 -0
- package/src/ssr/constants.ts +8 -0
- package/src/ssr/contracts/DocumentHead.ts +35 -0
- package/src/ssr/contracts/SsrRenderContext.ts +25 -0
- package/src/ssr/contracts/SsrRenderResult.ts +23 -0
- package/src/ssr/contracts/SsrRenderer.ts +12 -0
- package/src/ssr/contracts/SsrRequest.ts +17 -0
- package/src/ssr/contracts/index.ts +19 -0
- package/src/ssr/createSsrRenderContext.ts +25 -0
- package/src/ssr/examples/createPublicPageServer.ts +32 -0
- package/src/ssr/examples/runPublicPages.ts +25 -0
- package/src/ssr/fastify/contracts/FastifySsrOptions.ts +24 -0
- package/src/ssr/fastify/contracts/index.ts +5 -0
- package/src/ssr/fastify/fastifySsr.ts +110 -0
- package/src/ssr/fastify/index.ts +2 -0
- package/src/ssr/index.ts +10 -0
- package/src/ssr/renderDocumentHead.ts +72 -0
- package/src/ssr/renderSsrDocument.ts +35 -0
- package/src/ssr/serializeSsrState.ts +19 -0
- package/src/ssr/vite/contracts/ViteSsrOptions.ts +52 -0
- package/src/ssr/vite/contracts/index.ts +6 -0
- package/src/ssr/vite/fastifyViteSsr.ts +279 -0
- package/src/ssr/vite/index.ts +4 -0
- package/src/ssr/vite/viteSsrManifest.ts +92 -0
- package/src/storage/README.md +310 -0
- package/src/storage/Storage.ts +392 -0
- package/src/storage/contents.ts +23 -0
- package/src/storage/contracts/StorageListing.ts +55 -0
- package/src/storage/contracts/index.ts +1 -0
- package/src/storage/drivers/FlystorageDisk.ts +295 -0
- package/src/storage/drivers/FlystorageListing.ts +78 -0
- package/src/storage/drivers/LocalStorageDisk.ts +45 -0
- package/src/storage/drivers/S3StorageDisk.ts +114 -0
- package/src/storage/drivers/index.ts +3 -0
- package/src/storage/examples/runStorage.ts +37 -0
- package/src/storage/examples/runStreamExport.ts +41 -0
- package/src/storage/examples/writeCsvExport.ts +45 -0
- package/src/storage/index.ts +7 -0
- package/src/storage/mime.ts +30 -0
- package/src/storage/path.ts +76 -0
- package/src/storage/types.ts +251 -0
- package/src/url/README.md +41 -0
- package/src/url/UrlGenerator.ts +72 -0
- package/src/url/contracts/UrlGeneratorOptions.ts +14 -0
- package/src/url/contracts/index.ts +1 -0
- package/src/url/examples/runApplicationLinks.ts +33 -0
- package/src/url/index.ts +2 -0
- package/src/validation/README.md +433 -0
- package/src/validation/examples/runNoteValidation.ts +18 -0
- package/src/validation/examples/validateNoteInput.ts +31 -0
- package/src/validation/index.ts +398 -0
- package/templates/AGENTS.md +15 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
Read settings once at boot. Parse environment values, validate what your
|
|
4
|
+
application needs and pass the result into the services that use it.
|
|
5
|
+
`@db3.ai/app/config` supplies `Config`, `defineConfig()`, `env` and `createEnv()`.
|
|
6
|
+
It does not discover configuration files or load `.env` for you.
|
|
7
|
+
|
|
8
|
+
## Run the notes configuration example
|
|
9
|
+
|
|
10
|
+
Complete the [installation guide](https://db3.ai/docs/installation), including
|
|
11
|
+
`tsx`, TypeScript and Vitest. From that independent app directory:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
mkdir -p examples
|
|
15
|
+
cp -R node_modules/@db3.ai/app/src/config/examples/. examples/
|
|
16
|
+
npx tsx examples/runConfig.ts
|
|
17
|
+
APP_PORT=3100 NOTES_PAGE_SIZE=50 APP_DEBUG=yes npx tsx examples/runConfig.ts
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The default run prints `My notes`, port `3000`, page size `20` and debug `false`.
|
|
21
|
+
The override uses port `3100`, page size `50` and debug `true`. A generated URL is
|
|
22
|
+
only a value: this lab does not start HTTP, open SQL or contact a provider.
|
|
23
|
+
The runner loads `.env` through `dotenv/config`; existing environment variables
|
|
24
|
+
take precedence. Keep `.env` out of Git.
|
|
25
|
+
|
|
26
|
+
Now try an invalid setting:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
APP_PORT=abc npx tsx examples/runConfig.ts
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
It fails with an error naming `APP_PORT` before constructing App. Correct the
|
|
33
|
+
value and repeat the command. No partial service startup needs cleaning up.
|
|
34
|
+
|
|
35
|
+
## Own the application settings
|
|
36
|
+
|
|
37
|
+
The shipped [loadNotesConfig.ts](./examples/loadNotesConfig.ts) uses
|
|
38
|
+
`createEnv(source)` so tests can provide an ordinary object. It validates a
|
|
39
|
+
port and page size after parsing them. An integer parser does not know whether
|
|
40
|
+
`0` is a valid application port or `100000` is a sensible page size.
|
|
41
|
+
|
|
42
|
+
Only call `env.required()` when the owning feature needs the value. The example
|
|
43
|
+
requires `WEBHOOK_KEY` only when `WEBHOOK_ENABLED` is true. It does not send a
|
|
44
|
+
webhook, and it never includes the key in its printed result.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import { createEnv, defineConfig } from '@db3.ai/app/config';
|
|
48
|
+
|
|
49
|
+
const env = createEnv({ APP_DEBUG: 'yes', NOTES_PAGE_SIZE: '20' });
|
|
50
|
+
const notes = defineConfig({
|
|
51
|
+
debug: env.boolean('APP_DEBUG', false),
|
|
52
|
+
pageSize: env.integer('NOTES_PAGE_SIZE', 20),
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`defineConfig()` preserves inferred types and returns the same object. It does
|
|
57
|
+
not validate, freeze or clone it. Import configuration files explicitly; there
|
|
58
|
+
is no directory discovery or automatic merge order.
|
|
59
|
+
|
|
60
|
+
## Wire services explicitly
|
|
61
|
+
|
|
62
|
+
The shipped [runConfig.ts](./examples/runConfig.ts) passes the settings into
|
|
63
|
+
`new App({ config: { notes } })`. The repository becomes `application.config`.
|
|
64
|
+
It passes URL settings separately through the supported `url` option.
|
|
65
|
+
Putting a value under `config.url` would not configure the URL service.
|
|
66
|
+
|
|
67
|
+
Use the typed settings object directly where practical. At service boundaries:
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
const pageSize = application.config.get<number>('notes.pageSize');
|
|
71
|
+
const label = application.config.get('notes.missing', 'fallback');
|
|
72
|
+
const present = application.config.has('notes.webhook');
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The generic in `get<number>()` is a TypeScript assertion, not runtime validation
|
|
76
|
+
or checked path autocomplete. See the [App/config guide](https://db3.ai/docs/app-config)
|
|
77
|
+
for the distinction between configuration data, service construction and process
|
|
78
|
+
startup.
|
|
79
|
+
|
|
80
|
+
## Presence and defaults
|
|
81
|
+
|
|
82
|
+
`get(path, fallback)` uses the fallback only when the property is absent.
|
|
83
|
+
Existing `null`, `undefined`, `false`, zero and empty strings are preserved.
|
|
84
|
+
`has()` checks property presence, not whether the value is truthy.
|
|
85
|
+
|
|
86
|
+
Paths traverse own object properties. They do not index arrays: retrieve the
|
|
87
|
+
whole array and work with it normally. Empty paths and empty path segments such
|
|
88
|
+
as `notes..title` throw. A missing intermediate object uses the fallback.
|
|
89
|
+
|
|
90
|
+
`all()` exposes the original object. Treat configuration as read-only, and never
|
|
91
|
+
return `all()` from an endpoint, log it or put it in browser hydration data.
|
|
92
|
+
|
|
93
|
+
## Environment parsers
|
|
94
|
+
|
|
95
|
+
| Reader | Behaviour |
|
|
96
|
+
| --- | --- |
|
|
97
|
+
| `env()` / `env.string()` | Raw string, including an empty string. Fallback applies only to `undefined`. |
|
|
98
|
+
| `env.required()` | Rejects missing or exactly empty values. It does not trim whitespace; add domain validation when needed. |
|
|
99
|
+
| `env.boolean()` | Case-insensitive `1/true/yes/on` or `0/false/no/off`; rejects other nonempty values. |
|
|
100
|
+
| `env.number()` | Converts to a finite number; rejects invalid or non-finite values. |
|
|
101
|
+
| `env.integer()` | Also rejects fractional values. Validate application ranges separately. |
|
|
102
|
+
| `env.array()` | Comma-separated, trimmed, nonempty entries. |
|
|
103
|
+
| `env.json<T>()` | Parses JSON, not a schema. `T` does not validate the parsed shape. |
|
|
104
|
+
|
|
105
|
+
Typed boolean/number/integer/array/JSON readers trim strings and return their
|
|
106
|
+
fallback for missing or empty values. With no fallback the result is
|
|
107
|
+
`undefined`. Invalid nonempty input throws rather than silently using a default.
|
|
108
|
+
|
|
109
|
+
`createEnv()` reads its supplied object on each call. The exported `env` reads
|
|
110
|
+
`process.env`. A constructed config object is a snapshot of the values read at
|
|
111
|
+
boot; changing environment variables does not recreate an initialized service.
|
|
112
|
+
Restart the process after changing settings.
|
|
113
|
+
|
|
114
|
+
## Testing and cleanup
|
|
115
|
+
|
|
116
|
+
The website's [Config guide](https://db3.ai/docs/config#testing) supplies the exact
|
|
117
|
+
three-test file. Save it as `tests/config/runConfig.test.ts`, keeping the copied
|
|
118
|
+
examples in `examples/`, then run:
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
npx vitest run tests/config/runConfig.test.ts
|
|
122
|
+
npx tsc --noEmit --target ES2022 --module ESNext --moduleResolution Bundler --types node --skipLibCheck examples/*.ts
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
It checks defaults, overrides, public output, malformed values, range limits,
|
|
126
|
+
optional credentials, fallback/presence and raw versus parsed values. The tests
|
|
127
|
+
do not mutate `process.env` or mock framework services. The runner closes App
|
|
128
|
+
in `finally`; Config itself owns no handles.
|
|
129
|
+
|
|
130
|
+
For framework maintainers, the service suite is
|
|
131
|
+
`npm run test:service --workspace packages/app -- config --maxWorkers=1`.
|
|
132
|
+
|
|
133
|
+
## Coverage and advanced reference
|
|
134
|
+
|
|
135
|
+
The walkthrough exercises typed boot settings, validation, App integration,
|
|
136
|
+
Config reuse, safe output and the common parsers. Existing service tests cover
|
|
137
|
+
the remaining malformed parser inputs. There is no automatic hot reload,
|
|
138
|
+
schema validation, config discovery or secret manager.
|
|
139
|
+
|
|
140
|
+
The [Config API reference](https://db3.ai/docs/config-api) renders the exact
|
|
141
|
+
emitted repository methods and environment-reader overloads from the staged
|
|
142
|
+
package. Application types and permissions remain in your app.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
export type EnvSource = Record<string, string | undefined>;
|
|
2
|
+
|
|
3
|
+
export interface EnvReader {
|
|
4
|
+
(name: string): string | undefined;
|
|
5
|
+
<TDefault>(name: string, fallback: TDefault): string | TDefault;
|
|
6
|
+
required(name: string): string;
|
|
7
|
+
string(name: string): string | undefined;
|
|
8
|
+
string<TDefault>(name: string, fallback: TDefault): string | TDefault;
|
|
9
|
+
boolean(name: string): boolean | undefined;
|
|
10
|
+
boolean<TDefault>(name: string, fallback: TDefault): boolean | TDefault;
|
|
11
|
+
number(name: string): number | undefined;
|
|
12
|
+
number<TDefault>(name: string, fallback: TDefault): number | TDefault;
|
|
13
|
+
integer(name: string): number | undefined;
|
|
14
|
+
integer<TDefault>(name: string, fallback: TDefault): number | TDefault;
|
|
15
|
+
array(name: string): string[] | undefined;
|
|
16
|
+
array<TDefault>(name: string, fallback: TDefault): string[] | TDefault;
|
|
17
|
+
json<TValue = unknown>(name: string): TValue | undefined;
|
|
18
|
+
json<TValue = unknown, TDefault = TValue>(name: string, fallback: TDefault): TValue | TDefault;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates an env reader over a supplied source object.
|
|
23
|
+
*
|
|
24
|
+
* @param source - Environment-like key/value source.
|
|
25
|
+
* @returns Callable env reader with typed parsing helpers.
|
|
26
|
+
*/
|
|
27
|
+
export function createEnv(source: EnvSource = process.env): EnvReader {
|
|
28
|
+
const reader = (<TDefault>(name: string, fallback?: TDefault) => {
|
|
29
|
+
const value = source[name];
|
|
30
|
+
|
|
31
|
+
return value === undefined ? fallback : value;
|
|
32
|
+
}) as EnvReader;
|
|
33
|
+
|
|
34
|
+
reader.required = (name: string): string => {
|
|
35
|
+
const value = source[name];
|
|
36
|
+
|
|
37
|
+
if (value === undefined || value === '') {
|
|
38
|
+
throw new Error(`Environment variable "${name}" is required.`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return value;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
reader.string = (<TDefault>(name: string, fallback?: TDefault) => {
|
|
45
|
+
const value = source[name];
|
|
46
|
+
|
|
47
|
+
return value === undefined ? fallback : value;
|
|
48
|
+
}) as EnvReader['string'];
|
|
49
|
+
|
|
50
|
+
reader.boolean = (<TDefault>(name: string, fallback?: TDefault) => {
|
|
51
|
+
const value = optionalEnvValue(source, name);
|
|
52
|
+
|
|
53
|
+
if (value === undefined) return fallback;
|
|
54
|
+
|
|
55
|
+
return parseEnvBoolean(name, value);
|
|
56
|
+
}) as EnvReader['boolean'];
|
|
57
|
+
|
|
58
|
+
reader.number = (<TDefault>(name: string, fallback?: TDefault) => {
|
|
59
|
+
const value = optionalEnvValue(source, name);
|
|
60
|
+
|
|
61
|
+
if (value === undefined) return fallback;
|
|
62
|
+
|
|
63
|
+
return parseEnvNumber(name, value);
|
|
64
|
+
}) as EnvReader['number'];
|
|
65
|
+
|
|
66
|
+
reader.integer = (<TDefault>(name: string, fallback?: TDefault) => {
|
|
67
|
+
const value = optionalEnvValue(source, name);
|
|
68
|
+
|
|
69
|
+
if (value === undefined) return fallback;
|
|
70
|
+
|
|
71
|
+
const parsed = parseEnvNumber(name, value);
|
|
72
|
+
|
|
73
|
+
if (!Number.isInteger(parsed)) {
|
|
74
|
+
throw new Error(`Environment variable "${name}" must be an integer.`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return parsed;
|
|
78
|
+
}) as EnvReader['integer'];
|
|
79
|
+
|
|
80
|
+
reader.array = (<TDefault>(name: string, fallback?: TDefault) => {
|
|
81
|
+
const value = optionalEnvValue(source, name);
|
|
82
|
+
|
|
83
|
+
if (value === undefined) return fallback;
|
|
84
|
+
|
|
85
|
+
return value
|
|
86
|
+
.split(',')
|
|
87
|
+
.map(item => item.trim())
|
|
88
|
+
.filter(item => item.length > 0);
|
|
89
|
+
}) as EnvReader['array'];
|
|
90
|
+
|
|
91
|
+
reader.json = (<TValue = unknown, TDefault = TValue>(name: string, fallback?: TDefault) => {
|
|
92
|
+
const value = optionalEnvValue(source, name);
|
|
93
|
+
|
|
94
|
+
if (value === undefined) return fallback;
|
|
95
|
+
|
|
96
|
+
try {
|
|
97
|
+
return JSON.parse(value) as TValue;
|
|
98
|
+
} catch (error) {
|
|
99
|
+
throw new Error(`Environment variable "${name}" must contain valid JSON.`, {
|
|
100
|
+
cause: error,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}) as EnvReader['json'];
|
|
104
|
+
|
|
105
|
+
return reader;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export const env = createEnv();
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Returns a normalized optional env value for typed parsers.
|
|
112
|
+
*
|
|
113
|
+
* @param source - Environment-like source object.
|
|
114
|
+
* @param name - Environment variable name.
|
|
115
|
+
* @returns Trimmed string value or undefined when absent or empty.
|
|
116
|
+
*/
|
|
117
|
+
function optionalEnvValue(source: EnvSource, name: string): string | undefined {
|
|
118
|
+
const value = source[name]?.trim();
|
|
119
|
+
|
|
120
|
+
return value === '' ? undefined : value;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Parses a boolean environment variable.
|
|
125
|
+
*
|
|
126
|
+
* @param name - Environment variable name for error messages.
|
|
127
|
+
* @param value - Raw environment variable value.
|
|
128
|
+
* @returns Parsed boolean value.
|
|
129
|
+
*/
|
|
130
|
+
function parseEnvBoolean(name: string, value: string): boolean {
|
|
131
|
+
switch (value.toLowerCase()) {
|
|
132
|
+
case '1':
|
|
133
|
+
case 'true':
|
|
134
|
+
case 'yes':
|
|
135
|
+
case 'on':
|
|
136
|
+
return true;
|
|
137
|
+
|
|
138
|
+
case '0':
|
|
139
|
+
case 'false':
|
|
140
|
+
case 'no':
|
|
141
|
+
case 'off':
|
|
142
|
+
return false;
|
|
143
|
+
|
|
144
|
+
default:
|
|
145
|
+
throw new Error(`Environment variable "${name}" must be a boolean.`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Parses a finite number environment variable.
|
|
151
|
+
*
|
|
152
|
+
* @param name - Environment variable name for error messages.
|
|
153
|
+
* @param value - Raw environment variable value.
|
|
154
|
+
* @returns Parsed number.
|
|
155
|
+
*/
|
|
156
|
+
function parseEnvNumber(name: string, value: string): number {
|
|
157
|
+
const parsed = Number(value);
|
|
158
|
+
|
|
159
|
+
if (!Number.isFinite(parsed)) {
|
|
160
|
+
throw new Error(`Environment variable "${name}" must be a number.`);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return parsed;
|
|
164
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createEnv, defineConfig, type EnvSource } from '@db3.ai/app/config';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Reads application settings once at boot, before constructing services.
|
|
5
|
+
*
|
|
6
|
+
* Parsing a number does not establish its business range. Optional integration
|
|
7
|
+
* credentials are required only when that integration is explicitly enabled.
|
|
8
|
+
*
|
|
9
|
+
* @param source - Environment values; inject a plain object in application tests.
|
|
10
|
+
* @returns Validated, typed settings owned by this notes application.
|
|
11
|
+
*/
|
|
12
|
+
export function loadNotesConfig(source: EnvSource = process.env) {
|
|
13
|
+
const env = createEnv(source);
|
|
14
|
+
const port = env.integer('APP_PORT', 3000);
|
|
15
|
+
const pageSize = env.integer('NOTES_PAGE_SIZE', 20);
|
|
16
|
+
if (port < 1 || port > 65_535) throw new Error('APP_PORT must be between 1 and 65535.');
|
|
17
|
+
if (pageSize < 1 || pageSize > 100) throw new Error('NOTES_PAGE_SIZE must be between 1 and 100.');
|
|
18
|
+
const webhookEnabled = env.boolean('WEBHOOK_ENABLED', false);
|
|
19
|
+
const webhookKey = webhookEnabled ? env.required('WEBHOOK_KEY') : undefined;
|
|
20
|
+
if (webhookEnabled && !webhookKey?.trim()) throw new Error('WEBHOOK_KEY cannot contain only whitespace.');
|
|
21
|
+
return defineConfig({
|
|
22
|
+
name: env('APP_NAME', 'My notes'),
|
|
23
|
+
port,
|
|
24
|
+
pageSize,
|
|
25
|
+
debug: env.boolean('APP_DEBUG', false),
|
|
26
|
+
allowedOrigins: env.array('ALLOWED_ORIGINS', []),
|
|
27
|
+
webhook: { enabled: webhookEnabled, key: webhookKey },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import type { EnvSource } from '@db3.ai/app/config';
|
|
4
|
+
import { App } from '@db3.ai/app/server';
|
|
5
|
+
import { loadNotesConfig } from './loadNotesConfig';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Boots configuration and URL generation without opening HTTP or SQL connections.
|
|
9
|
+
*
|
|
10
|
+
* @param source - App settings; no process-global environment changes are needed.
|
|
11
|
+
* @returns A deliberately selected public summary, never the complete config.
|
|
12
|
+
*/
|
|
13
|
+
export async function runConfig(source: EnvSource = process.env) {
|
|
14
|
+
const notes = loadNotesConfig(source);
|
|
15
|
+
const application = new App({
|
|
16
|
+
config: { notes },
|
|
17
|
+
url: { baseUrl: `http://localhost:${notes.port}` },
|
|
18
|
+
dbOptions: { syncColumns: false },
|
|
19
|
+
});
|
|
20
|
+
try {
|
|
21
|
+
return {
|
|
22
|
+
name: application.config.get<string>('notes.name'),
|
|
23
|
+
port: notes.port,
|
|
24
|
+
notesUrl: application.url.to('/notes'),
|
|
25
|
+
pageSize: notes.pageSize,
|
|
26
|
+
debug: notes.debug,
|
|
27
|
+
allowedOrigins: notes.allowedOrigins,
|
|
28
|
+
missingValue: application.config.get('notes.missing', 'fallback'),
|
|
29
|
+
hasWebhook: application.config.has('notes.webhook'),
|
|
30
|
+
webhookEnabled: notes.webhook.enabled,
|
|
31
|
+
configReused: application.config === application.config,
|
|
32
|
+
};
|
|
33
|
+
} finally {
|
|
34
|
+
await application.close();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
39
|
+
console.log(JSON.stringify(await runConfig(), null, 2));
|
|
40
|
+
}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DbRow,
|
|
3
|
+
FieldConfig,
|
|
4
|
+
type FieldClass,
|
|
5
|
+
type FieldDbValue,
|
|
6
|
+
type FieldDefinition,
|
|
7
|
+
type FieldDisplayValue,
|
|
8
|
+
type FieldInputMap,
|
|
9
|
+
type FieldInputValue,
|
|
10
|
+
type FieldMap,
|
|
11
|
+
FieldType,
|
|
12
|
+
type FieldValue,
|
|
13
|
+
} from './FieldType';
|
|
14
|
+
import type {
|
|
15
|
+
ActiveRecordClass,
|
|
16
|
+
} from './ActiveRecord';
|
|
17
|
+
import {
|
|
18
|
+
field,
|
|
19
|
+
type FieldBuilder,
|
|
20
|
+
} from './fields/field';
|
|
21
|
+
|
|
22
|
+
export interface ProjectionSourceFieldOptions {
|
|
23
|
+
/** Row key used when a query aliases the source column. */
|
|
24
|
+
alias?: string;
|
|
25
|
+
|
|
26
|
+
/** Explicit row key. Defaults to `alias`, then the source field's DB column. */
|
|
27
|
+
column?: string;
|
|
28
|
+
|
|
29
|
+
/** Projection-only default used when the row omits the projected column. */
|
|
30
|
+
default?: FieldConfig['default'];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface ProjectionFromModelOptions {
|
|
34
|
+
/** Optional logical fields to include from the source model. Defaults to all fields. */
|
|
35
|
+
fields?: readonly string[];
|
|
36
|
+
|
|
37
|
+
/** Optional logical fields to omit from the source model. */
|
|
38
|
+
except?: readonly string[];
|
|
39
|
+
|
|
40
|
+
/** Prefix for projected logical field names. */
|
|
41
|
+
prefix?: string;
|
|
42
|
+
|
|
43
|
+
/** Per-field aliases used by the query row. */
|
|
44
|
+
aliases?: Record<string, string>;
|
|
45
|
+
|
|
46
|
+
/** Per-field projection defaults. */
|
|
47
|
+
defaults?: Record<string, FieldConfig['default']>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface ProjectionFieldBuilder extends FieldBuilder {
|
|
51
|
+
from<
|
|
52
|
+
TModel extends { fields(field: FieldBuilder): FieldInputMap } & ActiveRecordClass,
|
|
53
|
+
TFieldName extends keyof ModelFieldInputs<TModel> & string,
|
|
54
|
+
>(
|
|
55
|
+
Model: TModel,
|
|
56
|
+
fieldName: TFieldName,
|
|
57
|
+
options?: ProjectionSourceFieldOptions,
|
|
58
|
+
): ResolvedFieldInput<ModelFieldInputs<TModel>[TFieldName]>;
|
|
59
|
+
|
|
60
|
+
fromModel<TModel extends ActiveRecordClass>(
|
|
61
|
+
Model: TModel,
|
|
62
|
+
options?: ProjectionFromModelOptions,
|
|
63
|
+
): FieldInputMap;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type ActiveProjectionConstructor<TProjection extends ActiveProjection = ActiveProjection> = {
|
|
67
|
+
new(row?: DbRow): TProjection;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export type ActiveProjectionClass<TProjection extends ActiveProjection = ActiveProjection> =
|
|
71
|
+
ActiveProjectionConstructor<TProjection> & {
|
|
72
|
+
readonly name: string;
|
|
73
|
+
table: string;
|
|
74
|
+
primaryKey: string;
|
|
75
|
+
fields(field: ProjectionFieldBuilder): FieldInputMap;
|
|
76
|
+
getFields(): FieldMap;
|
|
77
|
+
fromDb<TClass extends ActiveProjectionConstructor>(
|
|
78
|
+
this: TClass,
|
|
79
|
+
row: DbRow,
|
|
80
|
+
): InstanceType<TClass>;
|
|
81
|
+
fromDbRows<TClass extends ActiveProjectionConstructor>(
|
|
82
|
+
this: TClass,
|
|
83
|
+
rows: readonly DbRow[],
|
|
84
|
+
): InstanceType<TClass>[];
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const resolvedProjectionFields = new WeakMap<ActiveProjectionClass, FieldMap>();
|
|
88
|
+
|
|
89
|
+
export abstract class ActiveProjection {
|
|
90
|
+
static table = 'projection';
|
|
91
|
+
static primaryKey = 'id';
|
|
92
|
+
|
|
93
|
+
static fields(_field: ProjectionFieldBuilder): FieldInputMap {
|
|
94
|
+
return {};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private readonly $fields: Record<string, FieldType<any, any, any, any, any>> = {};
|
|
98
|
+
|
|
99
|
+
constructor(row: DbRow = {}) {
|
|
100
|
+
const Projection = this.$projection();
|
|
101
|
+
|
|
102
|
+
for (const [fieldName, field] of Object.entries(Projection.getFields())) {
|
|
103
|
+
const liveField = field.clone().bindToRecord(Projection, this, fieldName);
|
|
104
|
+
|
|
105
|
+
this.$fields[fieldName] = liveField;
|
|
106
|
+
this.$installAccessor(fieldName);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
this.setFromDb(row);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
static getFields<TProjection extends ActiveProjection>(
|
|
113
|
+
this: ActiveProjectionClass<TProjection>,
|
|
114
|
+
): FieldMap {
|
|
115
|
+
const cached = resolvedProjectionFields.get(this);
|
|
116
|
+
|
|
117
|
+
if (cached) {
|
|
118
|
+
return cached;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const fields: FieldMap = {};
|
|
122
|
+
|
|
123
|
+
for (const [fieldName, fieldInput] of Object.entries(this.fields(projectionField))) {
|
|
124
|
+
fields[fieldName] = resolveProjectionFieldInput(fieldInput).bindToModel(
|
|
125
|
+
this,
|
|
126
|
+
fieldName,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
resolvedProjectionFields.set(this, fields);
|
|
131
|
+
|
|
132
|
+
return fields;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
static fromDb<TClass extends ActiveProjectionConstructor>(
|
|
136
|
+
this: TClass,
|
|
137
|
+
row: DbRow,
|
|
138
|
+
): InstanceType<TClass> {
|
|
139
|
+
return new this(row) as InstanceType<TClass>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
static fromDbRows<TClass extends ActiveProjectionConstructor>(
|
|
143
|
+
this: TClass,
|
|
144
|
+
rows: readonly DbRow[],
|
|
145
|
+
): InstanceType<TClass>[] {
|
|
146
|
+
return rows.map(row => new this(row) as InstanceType<TClass>);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
setFromDb(row: DbRow): this {
|
|
150
|
+
for (const field of Object.values(this.$fields)) {
|
|
151
|
+
field.hydrate(row);
|
|
152
|
+
field.markBoundClean();
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
get(fieldName: string): unknown {
|
|
159
|
+
return this.$field(fieldName).value;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
toAppData(): Record<string, unknown> {
|
|
163
|
+
const data: Record<string, unknown> = {};
|
|
164
|
+
|
|
165
|
+
for (const [fieldName, field] of Object.entries(this.$fields)) {
|
|
166
|
+
if (field.config.hidden) continue;
|
|
167
|
+
|
|
168
|
+
data[fieldName] = field.value;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return data;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
toDisplayData(): Record<string, unknown> {
|
|
175
|
+
const data: Record<string, unknown> = {};
|
|
176
|
+
|
|
177
|
+
for (const [fieldName, field] of Object.entries(this.$fields)) {
|
|
178
|
+
const value = field.getBoundDisplayValue();
|
|
179
|
+
|
|
180
|
+
if (value !== undefined) {
|
|
181
|
+
data[fieldName] = value;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return data;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
toJSON(): Record<string, unknown> {
|
|
189
|
+
return this.toDisplayData();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
protected $field(fieldName: string): FieldType<any, any, any, any, any> {
|
|
193
|
+
const field = this.$fields[fieldName];
|
|
194
|
+
|
|
195
|
+
if (!field) {
|
|
196
|
+
throw new Error(`Unknown projection field "${fieldName}"`);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return field;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private $projection<TProjection extends ActiveProjection>(): ActiveProjectionClass<TProjection> {
|
|
203
|
+
return this.constructor as ActiveProjectionClass<TProjection>;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
private $installAccessor(fieldName: string): void {
|
|
207
|
+
if (Object.prototype.hasOwnProperty.call(this, fieldName)) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
Object.defineProperty(this, fieldName, {
|
|
212
|
+
enumerable: true,
|
|
213
|
+
configurable: true,
|
|
214
|
+
|
|
215
|
+
get: () => this.get(fieldName),
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export const projectionField: ProjectionFieldBuilder = {
|
|
221
|
+
...field,
|
|
222
|
+
|
|
223
|
+
from(Model, fieldName, options = {}) {
|
|
224
|
+
const source = Model.getField(fieldName);
|
|
225
|
+
const column = options.column
|
|
226
|
+
?? options.alias
|
|
227
|
+
?? source.getColumnFor(Model, fieldName);
|
|
228
|
+
|
|
229
|
+
return source.withConfig({
|
|
230
|
+
column,
|
|
231
|
+
default: options.default ?? source.config.default,
|
|
232
|
+
}) as ResolvedFieldInput<ModelFieldInputs<typeof Model>[typeof fieldName]>;
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
fromModel(Model, options = {}) {
|
|
236
|
+
const fields: FieldInputMap = {};
|
|
237
|
+
const included = options.fields ? new Set(options.fields) : null;
|
|
238
|
+
const excluded = new Set(options.except ?? []);
|
|
239
|
+
|
|
240
|
+
for (const fieldName of Object.keys(Model.getFields())) {
|
|
241
|
+
if (included && !included.has(fieldName)) continue;
|
|
242
|
+
if (excluded.has(fieldName)) continue;
|
|
243
|
+
|
|
244
|
+
const projectedName = options.prefix
|
|
245
|
+
? `${options.prefix}${fieldName.slice(0, 1).toUpperCase()}${fieldName.slice(1)}`
|
|
246
|
+
: fieldName;
|
|
247
|
+
|
|
248
|
+
fields[projectedName] = projectionField.from(Model, fieldName, {
|
|
249
|
+
alias: options.aliases?.[fieldName],
|
|
250
|
+
default: options.defaults?.[fieldName],
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
return fields;
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
function resolveProjectionFieldInput<TField extends FieldType<any, any, any, any, any>>(
|
|
259
|
+
input: FieldClass<TField> | FieldDefinition<TField> | TField,
|
|
260
|
+
): TField {
|
|
261
|
+
if (typeof input === 'function') {
|
|
262
|
+
return new input();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (input instanceof FieldType) {
|
|
266
|
+
return input.clone() as TField;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (input && typeof input === 'object' && 'type' in input) {
|
|
270
|
+
return new input.type(input.config);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
throw new Error('Invalid projection field definition.');
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
type ResolvedFieldInput<TInput> =
|
|
277
|
+
TInput extends FieldType<any, any, any, any, any>
|
|
278
|
+
? TInput
|
|
279
|
+
: TInput extends FieldClass<infer TField>
|
|
280
|
+
? TField
|
|
281
|
+
: TInput extends FieldDefinition<infer TField>
|
|
282
|
+
? TField
|
|
283
|
+
: never;
|
|
284
|
+
|
|
285
|
+
type ModelFieldInputs<TModel extends { fields(field: FieldBuilder): FieldInputMap }> =
|
|
286
|
+
ReturnType<TModel['fields']>;
|
|
287
|
+
|
|
288
|
+
type ProjectionFieldInputs<TProjection extends { fields(field: ProjectionFieldBuilder): FieldInputMap }> =
|
|
289
|
+
ReturnType<TProjection['fields']>;
|
|
290
|
+
|
|
291
|
+
export namespace ActiveProjection {
|
|
292
|
+
export type InferInput<TProjection extends { fields(field: ProjectionFieldBuilder): FieldInputMap }> = {
|
|
293
|
+
[fieldName in keyof ProjectionFieldInputs<TProjection>]:
|
|
294
|
+
FieldInputValue<ResolvedFieldInput<ProjectionFieldInputs<TProjection>[fieldName]>>;
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
export type InferValue<TProjection extends { fields(field: ProjectionFieldBuilder): FieldInputMap }> = {
|
|
298
|
+
[fieldName in keyof ProjectionFieldInputs<TProjection>]:
|
|
299
|
+
FieldValue<ResolvedFieldInput<ProjectionFieldInputs<TProjection>[fieldName]>>;
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
export type InferDbRow<TProjection extends { fields(field: ProjectionFieldBuilder): FieldInputMap }> = {
|
|
303
|
+
[fieldName in keyof ProjectionFieldInputs<TProjection>]:
|
|
304
|
+
FieldDbValue<ResolvedFieldInput<ProjectionFieldInputs<TProjection>[fieldName]>>;
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
export type InferDisplay<TProjection extends { fields(field: ProjectionFieldBuilder): FieldInputMap }> = {
|
|
308
|
+
[fieldName in keyof ProjectionFieldInputs<TProjection>]:
|
|
309
|
+
FieldDisplayValue<ResolvedFieldInput<ProjectionFieldInputs<TProjection>[fieldName]>>;
|
|
310
|
+
};
|
|
311
|
+
}
|