@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,621 @@
|
|
|
1
|
+
import { databaseDialectForConnection } from './dialects/index.js';
|
|
2
|
+
import { RecordValidationError, } from './FieldType.js';
|
|
3
|
+
import { RecordNotFoundError } from './errors.js';
|
|
4
|
+
import { EntityRef, LinkField, } from './fields/LinkField.js';
|
|
5
|
+
import { VectorField } from './fields/VectorField.js';
|
|
6
|
+
import { getSoftDeleteField, getSoftDeleteWriteData, requireSoftDeleteField, } from './SoftDeletes.js';
|
|
7
|
+
/**
|
|
8
|
+
* Field-aware query builder that wraps Knex.
|
|
9
|
+
*
|
|
10
|
+
* Add wrapper methods as you need them. `toKnex()` is the escape hatch for raw
|
|
11
|
+
* Knex operations.
|
|
12
|
+
*/
|
|
13
|
+
export class ActiveQueryBuilder {
|
|
14
|
+
Model;
|
|
15
|
+
db;
|
|
16
|
+
qb;
|
|
17
|
+
includedFields = new Set();
|
|
18
|
+
includedRelations = new Set();
|
|
19
|
+
selectedFields = null;
|
|
20
|
+
softDeleteScope = 'without';
|
|
21
|
+
constructor(Model, db) {
|
|
22
|
+
this.Model = Model;
|
|
23
|
+
this.db = db;
|
|
24
|
+
this.qb = db(Model.table);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Includes soft-deleted rows in query results and write operations.
|
|
28
|
+
*/
|
|
29
|
+
withTrashed() {
|
|
30
|
+
requireSoftDeleteField(this.Model);
|
|
31
|
+
this.softDeleteScope = 'with';
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Restricts the query to soft-deleted rows only.
|
|
36
|
+
*/
|
|
37
|
+
onlyTrashed() {
|
|
38
|
+
requireSoftDeleteField(this.Model);
|
|
39
|
+
this.softDeleteScope = 'only';
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Restricts the query to rows that have not been soft deleted.
|
|
44
|
+
*/
|
|
45
|
+
withoutTrashed() {
|
|
46
|
+
requireSoftDeleteField(this.Model);
|
|
47
|
+
this.softDeleteScope = 'without';
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Includes an opt-in field that normal fetches omit by default.
|
|
52
|
+
*/
|
|
53
|
+
withField(fieldName) {
|
|
54
|
+
this.getField(fieldName);
|
|
55
|
+
this.includedFields.add(fieldName);
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Eager-loads a link field and serializes it as nested model JSON.
|
|
60
|
+
*
|
|
61
|
+
* The relation name may be the logical link field name, the target model table
|
|
62
|
+
* name, or the target model class name. Prefer the field name when a model has
|
|
63
|
+
* more than one link to the same table.
|
|
64
|
+
*/
|
|
65
|
+
with(relationName) {
|
|
66
|
+
const [fieldName] = this.getRelationField(relationName);
|
|
67
|
+
this.includedRelations.add(fieldName);
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Restricts hydrated query results to the requested logical model fields.
|
|
72
|
+
*
|
|
73
|
+
* This is intended for bounded read models and polling endpoints that should
|
|
74
|
+
* not load large model columns they do not render.
|
|
75
|
+
*
|
|
76
|
+
* @param fieldNames - Logical model field names to select.
|
|
77
|
+
* @returns This query builder.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* const pages = await WebsitePage
|
|
81
|
+
* .where('website', websiteId)
|
|
82
|
+
* .select('analyzeStatus', 'analyzeData')
|
|
83
|
+
* .all();
|
|
84
|
+
*/
|
|
85
|
+
select(...fieldNames) {
|
|
86
|
+
if (fieldNames.length === 0) {
|
|
87
|
+
throw new Error('At least one select field is required.');
|
|
88
|
+
}
|
|
89
|
+
for (const fieldName of fieldNames) {
|
|
90
|
+
this.getField(fieldName);
|
|
91
|
+
}
|
|
92
|
+
this.selectedFields = new Set(fieldNames);
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
where(fieldNameOrCriteria, operatorOrValue, value) {
|
|
96
|
+
if (isWhereCriteria(fieldNameOrCriteria)) {
|
|
97
|
+
const entries = Object.entries(fieldNameOrCriteria);
|
|
98
|
+
if (entries.length === 0) {
|
|
99
|
+
throw new Error('At least one where field is required.');
|
|
100
|
+
}
|
|
101
|
+
for (const [fieldName, fieldValue] of entries) {
|
|
102
|
+
this.where(fieldName, fieldValue);
|
|
103
|
+
}
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
const hasExplicitOperator = arguments.length === 3;
|
|
107
|
+
const operator = hasExplicitOperator ? String(operatorOrValue) : '=';
|
|
108
|
+
const rawValue = hasExplicitOperator ? value : operatorOrValue;
|
|
109
|
+
const field = this.getField(fieldNameOrCriteria);
|
|
110
|
+
this.qb.where(this.qualifiedColumn(field), operator, field.getQueryValue(rawValue));
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Adds a primary-key equality condition.
|
|
115
|
+
*/
|
|
116
|
+
wherePk(id) {
|
|
117
|
+
return this.where(this.Model.primaryKey, id);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Adds a field-aware `where in (...)` condition.
|
|
121
|
+
*/
|
|
122
|
+
whereIn(fieldName, values) {
|
|
123
|
+
const field = this.getField(fieldName);
|
|
124
|
+
this.qb.whereIn(this.qualifiedColumn(field), values.map(value => {
|
|
125
|
+
return field.getQueryValue(value);
|
|
126
|
+
}));
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Adds a field-aware `where column is null` condition.
|
|
131
|
+
*/
|
|
132
|
+
whereNull(fieldName) {
|
|
133
|
+
const field = this.getField(fieldName);
|
|
134
|
+
this.qb.whereNull(this.qualifiedColumn(field));
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Adds a field-aware `where column is not null` condition.
|
|
139
|
+
*/
|
|
140
|
+
whereNotNull(fieldName) {
|
|
141
|
+
const field = this.getField(fieldName);
|
|
142
|
+
this.qb.whereNotNull(this.qualifiedColumn(field));
|
|
143
|
+
return this;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Adds a raw where clause.
|
|
147
|
+
*
|
|
148
|
+
* Prefer field-aware methods where possible. Use parameter bindings to avoid
|
|
149
|
+
* SQL injection when using raw SQL.
|
|
150
|
+
*/
|
|
151
|
+
whereRaw(sql, bindings) {
|
|
152
|
+
this.qb.whereRaw(sql, bindings);
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Adds a dialect-aware vector similarity projection, optional distance filter,
|
|
157
|
+
* and closest-first ordering for a vector field.
|
|
158
|
+
*
|
|
159
|
+
* @param fieldName - Logical vector field name.
|
|
160
|
+
* @param vector - Query vector to compare against the stored field.
|
|
161
|
+
* @param options - Projection alias, optional distance threshold, and ordering.
|
|
162
|
+
* @returns This query builder.
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* WebsiteEmbedding
|
|
166
|
+
* .query()
|
|
167
|
+
* .where('website', websiteId)
|
|
168
|
+
* .whereVectorSimilarTo('embedding', queryVector)
|
|
169
|
+
* .limit(10)
|
|
170
|
+
* .toKnex()
|
|
171
|
+
*/
|
|
172
|
+
whereVectorSimilarTo(fieldName, vector, options = {}) {
|
|
173
|
+
const field = this.getVectorField(fieldName);
|
|
174
|
+
const alias = sqlAlias(options.as ?? 'distance');
|
|
175
|
+
const distance = this.vectorDistanceSql(field, vector);
|
|
176
|
+
this.qb.select(this.db.raw(`${distance.expression} as ${alias}`, distance.bindings));
|
|
177
|
+
if (options.maxDistance !== undefined) {
|
|
178
|
+
assertVectorDistance(options.maxDistance);
|
|
179
|
+
this.qb.whereRaw(`${distance.expression} <= ?`, [...distance.bindings, options.maxDistance]);
|
|
180
|
+
}
|
|
181
|
+
if (options.orderBy !== false) {
|
|
182
|
+
this.qb.orderBy(alias, options.orderBy ?? 'asc');
|
|
183
|
+
}
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Returns whether the active database dialect can run vector similarity search.
|
|
188
|
+
*
|
|
189
|
+
* @returns True when `whereVectorSimilarTo()` can build SQL for this connection.
|
|
190
|
+
*/
|
|
191
|
+
supportsVectorSimilaritySearch() {
|
|
192
|
+
return this.vectorDistanceDialect() !== null;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Returns a model-visible message for unsupported vector similarity dialects.
|
|
196
|
+
*
|
|
197
|
+
* @returns Readable unsupported-dialect message.
|
|
198
|
+
*/
|
|
199
|
+
vectorSimilarityUnsupportedMessage() {
|
|
200
|
+
const dialect = databaseDialectForConnection(this.db);
|
|
201
|
+
return `Vector similarity search is not supported for the ${dialect.name} database dialect yet.`;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Adds field-aware ordering.
|
|
205
|
+
*/
|
|
206
|
+
orderBy(fieldName, direction = 'asc') {
|
|
207
|
+
const field = this.getField(fieldName);
|
|
208
|
+
this.qb.orderBy(this.qualifiedColumn(field), direction);
|
|
209
|
+
return this;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Limits the number of returned records.
|
|
213
|
+
*/
|
|
214
|
+
limit(count) {
|
|
215
|
+
this.qb.limit(count);
|
|
216
|
+
return this;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Offsets returned records.
|
|
220
|
+
*/
|
|
221
|
+
offset(count) {
|
|
222
|
+
this.qb.offset(count);
|
|
223
|
+
return this;
|
|
224
|
+
}
|
|
225
|
+
whereColumn(column, operatorOrValue, value) {
|
|
226
|
+
const hasExplicitOperator = arguments.length === 3;
|
|
227
|
+
if (hasExplicitOperator) {
|
|
228
|
+
this.qb.where(column, String(operatorOrValue), value);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
this.qb.where(column, operatorOrValue);
|
|
232
|
+
}
|
|
233
|
+
return this;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Executes the query and returns the first hydrated record, or null.
|
|
237
|
+
*/
|
|
238
|
+
async first() {
|
|
239
|
+
const row = await this.applySoftDeleteScope(this.qb.clone())
|
|
240
|
+
.select(this.selectedColumns())
|
|
241
|
+
.first();
|
|
242
|
+
if (!row) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
const record = this.Model.fromDb(row, this.db);
|
|
246
|
+
await this.loadIncludedRelations([record]);
|
|
247
|
+
return record;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Executes the query and returns the first hydrated record.
|
|
251
|
+
*
|
|
252
|
+
* @returns First matching record.
|
|
253
|
+
* @throws {RecordNotFoundError} When the query has no matching rows.
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* const user = await User
|
|
257
|
+
* .where('email', email)
|
|
258
|
+
* .firstOrFail();
|
|
259
|
+
*/
|
|
260
|
+
async firstOrFail() {
|
|
261
|
+
const record = await this.first();
|
|
262
|
+
if (!record) {
|
|
263
|
+
throw new RecordNotFoundError(this.Model.name);
|
|
264
|
+
}
|
|
265
|
+
return record;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Executes the query and returns hydrated records.
|
|
269
|
+
*/
|
|
270
|
+
async all() {
|
|
271
|
+
const rows = await this.applySoftDeleteScope(this.qb.clone())
|
|
272
|
+
.select(this.selectedColumns());
|
|
273
|
+
const records = rows.map(row => this.Model.fromDb(row, this.db));
|
|
274
|
+
await this.loadIncludedRelations(records);
|
|
275
|
+
return records;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Counts matching records without hydrating or transferring model rows.
|
|
279
|
+
*
|
|
280
|
+
* @param fieldName - Optional logical field whose non-null values should be counted.
|
|
281
|
+
* @returns Number of matching records or non-null field values.
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* const keywordCount = await Keywords
|
|
285
|
+
* .where('website', websiteId)
|
|
286
|
+
* .count();
|
|
287
|
+
*/
|
|
288
|
+
async count(fieldName) {
|
|
289
|
+
const column = fieldName
|
|
290
|
+
? this.qualifiedColumn(this.getField(fieldName))
|
|
291
|
+
: '*';
|
|
292
|
+
const row = await this.applySoftDeleteScope(this.qb.clone())
|
|
293
|
+
.count({
|
|
294
|
+
recordCount: column,
|
|
295
|
+
})
|
|
296
|
+
.first();
|
|
297
|
+
return numericAggregate(row?.recordCount);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Updates matching rows using field-aware assignment/conversion.
|
|
301
|
+
*
|
|
302
|
+
* This does not load records before updating them.
|
|
303
|
+
*/
|
|
304
|
+
async patch(input) {
|
|
305
|
+
const record = new this.Model(input, {
|
|
306
|
+
db: this.db,
|
|
307
|
+
persisted: true,
|
|
308
|
+
});
|
|
309
|
+
const valid = await record.validate({ onlyDirty: true });
|
|
310
|
+
if (!valid) {
|
|
311
|
+
throw new RecordValidationError(record.getErrors());
|
|
312
|
+
}
|
|
313
|
+
const row = await record.getDataForDb({
|
|
314
|
+
isInsert: false,
|
|
315
|
+
onlyDirty: true,
|
|
316
|
+
valueOptions: {
|
|
317
|
+
db: this.db,
|
|
318
|
+
dialect: databaseDialectForConnection(this.db),
|
|
319
|
+
},
|
|
320
|
+
});
|
|
321
|
+
if (Object.keys(row).length === 0) {
|
|
322
|
+
return 0;
|
|
323
|
+
}
|
|
324
|
+
const count = await this.applySoftDeleteScope(this.qb.clone()).update(row);
|
|
325
|
+
return Number(count);
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Deletes matching rows, using soft deletes when the model opts in.
|
|
329
|
+
*/
|
|
330
|
+
async delete() {
|
|
331
|
+
if (getSoftDeleteField(this.Model)) {
|
|
332
|
+
const deletedAt = new Date();
|
|
333
|
+
const count = await this.applySoftDeleteScope(this.qb.clone()).update(getSoftDeleteWriteData(this.Model, deletedAt, deletedAt));
|
|
334
|
+
return Number(count);
|
|
335
|
+
}
|
|
336
|
+
return this.forceDelete();
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Physically deletes matching rows, bypassing soft delete behavior.
|
|
340
|
+
*/
|
|
341
|
+
async forceDelete() {
|
|
342
|
+
const count = await this.applySoftDeleteScope(this.qb.clone()).delete();
|
|
343
|
+
return Number(count);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Restores matching soft-deleted rows by clearing their delete timestamp.
|
|
347
|
+
*/
|
|
348
|
+
async restore() {
|
|
349
|
+
const softDeleteField = requireSoftDeleteField(this.Model);
|
|
350
|
+
const count = await this.qb
|
|
351
|
+
.clone()
|
|
352
|
+
.whereNotNull(softDeleteField.column)
|
|
353
|
+
.update(getSoftDeleteWriteData(this.Model, null));
|
|
354
|
+
return Number(count);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Returns a scoped clone of the underlying Knex query builder.
|
|
358
|
+
*
|
|
359
|
+
* After calling this, you are outside the ActiveRecord hydration layer. Raw
|
|
360
|
+
* Knex results will not automatically become model instances.
|
|
361
|
+
*/
|
|
362
|
+
toKnex() {
|
|
363
|
+
const query = this.applySoftDeleteScope(this.qb.clone());
|
|
364
|
+
if (this.selectedFields) {
|
|
365
|
+
query.select(this.selectedColumns());
|
|
366
|
+
}
|
|
367
|
+
return query;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Looks up a field by logical model field name.
|
|
371
|
+
*/
|
|
372
|
+
getField(fieldName) {
|
|
373
|
+
return this.Model.getField(fieldName);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Looks up a field and requires it to be a native vector field.
|
|
377
|
+
*
|
|
378
|
+
* @param fieldName - Logical model field name.
|
|
379
|
+
* @returns Native vector field instance.
|
|
380
|
+
*/
|
|
381
|
+
getVectorField(fieldName) {
|
|
382
|
+
const field = this.getField(fieldName);
|
|
383
|
+
if (!(field instanceof VectorField)) {
|
|
384
|
+
throw new Error(`Field "${fieldName}" is not a vector field.`);
|
|
385
|
+
}
|
|
386
|
+
return field;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Builds a dialect-aware vector distance expression for a vector field.
|
|
390
|
+
*
|
|
391
|
+
* @param field - Vector field being compared.
|
|
392
|
+
* @param vector - Query vector to compare against.
|
|
393
|
+
* @returns SQL expression and bindings for the active dialect.
|
|
394
|
+
*/
|
|
395
|
+
vectorDistanceSql(field, vector) {
|
|
396
|
+
validateVectorSimilarityVector(vector);
|
|
397
|
+
const dialect = this.vectorDistanceDialect();
|
|
398
|
+
const column = this.qualifiedColumn(field);
|
|
399
|
+
const vectorText = JSON.stringify(vector);
|
|
400
|
+
if (dialect === 'mariadb') {
|
|
401
|
+
return {
|
|
402
|
+
expression: 'VEC_DISTANCE_COSINE(??, VEC_FromText(?))',
|
|
403
|
+
bindings: [column, vectorText],
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
if (dialect === 'postgres') {
|
|
407
|
+
return {
|
|
408
|
+
expression: '?? <=> ?::vector',
|
|
409
|
+
bindings: [column, vectorText],
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
throw new Error(this.vectorSimilarityUnsupportedMessage());
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Returns the supported vector-search dialect name for this query connection.
|
|
416
|
+
*
|
|
417
|
+
* @returns Supported dialect name, or null when not supported.
|
|
418
|
+
*/
|
|
419
|
+
vectorDistanceDialect() {
|
|
420
|
+
const dialect = databaseDialectForConnection(this.db);
|
|
421
|
+
if (dialect.name === 'mariadb' || dialect.name === 'postgres') {
|
|
422
|
+
return dialect.name;
|
|
423
|
+
}
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Returns a model-table-qualified database column name for field-aware clauses.
|
|
428
|
+
*
|
|
429
|
+
* @param field - Model field or metadata whose storage column should be referenced.
|
|
430
|
+
* @returns Column qualified with the ActiveRecord model table.
|
|
431
|
+
*/
|
|
432
|
+
qualifiedColumn(field) {
|
|
433
|
+
return `${this.Model.table}.${field.column}`;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Looks up a requested relation and requires it to resolve to one link field.
|
|
437
|
+
*/
|
|
438
|
+
getRelationField(relationName) {
|
|
439
|
+
const exactField = this.Model.getFields()[relationName];
|
|
440
|
+
if (exactField) {
|
|
441
|
+
if (exactField instanceof LinkField) {
|
|
442
|
+
return [relationName, exactField];
|
|
443
|
+
}
|
|
444
|
+
throw new Error(`Field "${relationName}" is not a link relation.`);
|
|
445
|
+
}
|
|
446
|
+
const matches = Object.entries(this.Model.getFields())
|
|
447
|
+
.filter(([, field]) => {
|
|
448
|
+
if (!(field instanceof LinkField))
|
|
449
|
+
return false;
|
|
450
|
+
const Target = field.config.target();
|
|
451
|
+
return relationName === Target.table
|
|
452
|
+
|| relationName === Target.name
|
|
453
|
+
|| relationName === Target.name.toLowerCase();
|
|
454
|
+
});
|
|
455
|
+
if (matches.length === 1) {
|
|
456
|
+
return matches[0];
|
|
457
|
+
}
|
|
458
|
+
if (matches.length > 1) {
|
|
459
|
+
throw new Error(`Relation "${relationName}" matched multiple link fields. Use the logical field name instead.`);
|
|
460
|
+
}
|
|
461
|
+
throw new Error(`Unknown link relation "${relationName}".`);
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Loads included link records in batches and attaches them to each record.
|
|
465
|
+
*/
|
|
466
|
+
async loadIncludedRelations(records) {
|
|
467
|
+
if (records.length === 0 || this.includedRelations.size === 0)
|
|
468
|
+
return;
|
|
469
|
+
for (const fieldName of this.includedRelations) {
|
|
470
|
+
await this.loadIncludedRelation(records, fieldName);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Loads one included link relation for all hydrated records.
|
|
475
|
+
*/
|
|
476
|
+
async loadIncludedRelation(records, fieldName) {
|
|
477
|
+
const [, field] = this.getRelationField(fieldName);
|
|
478
|
+
const Target = field.config.target();
|
|
479
|
+
const ids = uniqueRelationIds(records.flatMap(record => {
|
|
480
|
+
const ref = record.get(fieldName);
|
|
481
|
+
return ref instanceof EntityRef && ref.id !== null && ref.id !== undefined
|
|
482
|
+
? [ref.id]
|
|
483
|
+
: [];
|
|
484
|
+
}));
|
|
485
|
+
if (ids.length === 0) {
|
|
486
|
+
this.attachLoadedRelation(records, fieldName, new Map());
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
const relatedRecords = await Target
|
|
490
|
+
.query(this.db)
|
|
491
|
+
.whereIn(Target.primaryKey, ids)
|
|
492
|
+
.all();
|
|
493
|
+
const relatedById = new Map();
|
|
494
|
+
for (const relatedRecord of relatedRecords) {
|
|
495
|
+
relatedById.set(relatedRecord.get(Target.primaryKey), relatedRecord);
|
|
496
|
+
}
|
|
497
|
+
this.attachLoadedRelation(records, fieldName, relatedById);
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Attaches loaded relation records to the bound link fields.
|
|
501
|
+
*/
|
|
502
|
+
attachLoadedRelation(records, fieldName, relatedById) {
|
|
503
|
+
for (const record of records) {
|
|
504
|
+
const ref = record.get(fieldName);
|
|
505
|
+
const field = record.getBoundField(fieldName);
|
|
506
|
+
if (!(ref instanceof EntityRef) || !(field instanceof LinkField))
|
|
507
|
+
continue;
|
|
508
|
+
field.setBoundLoadedRecord(relatedById.get(ref.id) ?? null);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Returns table-qualified columns for fields included in model hydration.
|
|
513
|
+
*/
|
|
514
|
+
selectedColumns() {
|
|
515
|
+
const columns = new Set();
|
|
516
|
+
for (const [fieldName, field] of Object.entries(this.Model.getFields())) {
|
|
517
|
+
if (!this.shouldSelectField(fieldName, field))
|
|
518
|
+
continue;
|
|
519
|
+
const schemaColumns = field
|
|
520
|
+
.getDbSchemaFor(this.Model, fieldName)
|
|
521
|
+
.columns
|
|
522
|
+
?.map(column => column.name);
|
|
523
|
+
for (const column of schemaColumns ?? [field.getColumnFor(this.Model, fieldName)]) {
|
|
524
|
+
columns.add(`${this.Model.table}.${column}`);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
return [...columns];
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Returns true when a field should be included in hydrated query results.
|
|
531
|
+
*/
|
|
532
|
+
shouldSelectField(fieldName, field) {
|
|
533
|
+
if (this.selectedFields) {
|
|
534
|
+
return this.selectedFields.has(fieldName)
|
|
535
|
+
|| this.includedFields.has(fieldName)
|
|
536
|
+
|| this.includedRelations.has(fieldName);
|
|
537
|
+
}
|
|
538
|
+
return field.config.selectedByDefault !== false
|
|
539
|
+
|| this.includedFields.has(fieldName)
|
|
540
|
+
|| this.includedRelations.has(fieldName);
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Applies the current soft-delete scope to a Knex query clone.
|
|
544
|
+
*/
|
|
545
|
+
applySoftDeleteScope(query) {
|
|
546
|
+
const softDeleteField = getSoftDeleteField(this.Model);
|
|
547
|
+
if (!softDeleteField) {
|
|
548
|
+
return query;
|
|
549
|
+
}
|
|
550
|
+
if (this.softDeleteScope === 'only') {
|
|
551
|
+
return query.whereNotNull(this.qualifiedColumn(softDeleteField));
|
|
552
|
+
}
|
|
553
|
+
if (this.softDeleteScope === 'without') {
|
|
554
|
+
return query.whereNull(this.qualifiedColumn(softDeleteField));
|
|
555
|
+
}
|
|
556
|
+
return query;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Validates and returns a safe SQL alias for a computed select expression.
|
|
561
|
+
*
|
|
562
|
+
* @param alias - Requested SQL result alias.
|
|
563
|
+
* @returns Alias when it is safe to embed as an identifier.
|
|
564
|
+
*/
|
|
565
|
+
function sqlAlias(alias) {
|
|
566
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(alias)) {
|
|
567
|
+
throw new Error(`Invalid SQL alias "${alias}".`);
|
|
568
|
+
}
|
|
569
|
+
return alias;
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Validates a maximum vector-distance threshold.
|
|
573
|
+
*
|
|
574
|
+
* @param value - Maximum accepted vector distance.
|
|
575
|
+
*/
|
|
576
|
+
function assertVectorDistance(value) {
|
|
577
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
|
|
578
|
+
throw new Error('Vector similarity maxDistance must be a finite non-negative number.');
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Validates a query vector before it is serialized into a raw SQL binding.
|
|
583
|
+
*
|
|
584
|
+
* @param vector - Query vector to validate.
|
|
585
|
+
*/
|
|
586
|
+
function validateVectorSimilarityVector(vector) {
|
|
587
|
+
if (!Array.isArray(vector) || vector.length === 0) {
|
|
588
|
+
throw new Error('Vector similarity search requires a non-empty vector.');
|
|
589
|
+
}
|
|
590
|
+
for (let index = 0; index < vector.length; index += 1) {
|
|
591
|
+
const value = vector[index];
|
|
592
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
593
|
+
throw new Error(`Vector similarity value at index ${index} must be a finite number.`);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
/**
|
|
598
|
+
* Returns true when input is an object-style where criteria map.
|
|
599
|
+
*/
|
|
600
|
+
function isWhereCriteria(input) {
|
|
601
|
+
return typeof input === 'object'
|
|
602
|
+
&& input !== null
|
|
603
|
+
&& !Array.isArray(input)
|
|
604
|
+
&& !(input instanceof Date);
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Returns relation ids once while preserving query order.
|
|
608
|
+
*/
|
|
609
|
+
function uniqueRelationIds(ids) {
|
|
610
|
+
return [...new Set(ids)];
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Normalizes database aggregate values returned as numbers, bigints, or strings.
|
|
614
|
+
*
|
|
615
|
+
* @param value - Aggregate value returned by the active database driver.
|
|
616
|
+
* @returns Finite numeric value, or zero when the driver value is unavailable.
|
|
617
|
+
*/
|
|
618
|
+
function numericAggregate(value) {
|
|
619
|
+
const count = Number(value ?? 0);
|
|
620
|
+
return Number.isFinite(count) ? count : 0;
|
|
621
|
+
}
|