@alpha.consultings/eloquent-orm.js 1.0.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/CHANGELOG.md +73 -0
- package/README.md +215 -0
- package/dist/Model.d.ts +2 -0
- package/dist/Model.d.ts.map +1 -0
- package/dist/Model.js +7 -0
- package/dist/Model.js.map +1 -0
- package/dist/cli/commands/cacheClear.d.ts +2 -0
- package/dist/cli/commands/cacheClear.d.ts.map +1 -0
- package/dist/cli/commands/cacheClear.js +69 -0
- package/dist/cli/commands/cacheClear.js.map +1 -0
- package/dist/cli/commands/cacheStats.d.ts +2 -0
- package/dist/cli/commands/cacheStats.d.ts.map +1 -0
- package/dist/cli/commands/cacheStats.js +55 -0
- package/dist/cli/commands/cacheStats.js.map +1 -0
- package/dist/cli/commands/dbSeed.d.ts +16 -0
- package/dist/cli/commands/dbSeed.d.ts.map +1 -0
- package/dist/cli/commands/dbSeed.js +201 -0
- package/dist/cli/commands/dbSeed.js.map +1 -0
- package/dist/cli/commands/dbSeedBootstrapPrecheck.d.ts +3 -0
- package/dist/cli/commands/dbSeedBootstrapPrecheck.d.ts.map +1 -0
- package/dist/cli/commands/dbSeedBootstrapPrecheck.js +8 -0
- package/dist/cli/commands/dbSeedBootstrapPrecheck.js.map +1 -0
- package/dist/cli/commands/dbSeedFresh.d.ts +14 -0
- package/dist/cli/commands/dbSeedFresh.d.ts.map +1 -0
- package/dist/cli/commands/dbSeedFresh.js +81 -0
- package/dist/cli/commands/dbSeedFresh.js.map +1 -0
- package/dist/cli/commands/demoScenario.d.ts +9 -0
- package/dist/cli/commands/demoScenario.d.ts.map +1 -0
- package/dist/cli/commands/demoScenario.js +185 -0
- package/dist/cli/commands/demoScenario.js.map +1 -0
- package/dist/cli/commands/factoryStatus.d.ts +9 -0
- package/dist/cli/commands/factoryStatus.d.ts.map +1 -0
- package/dist/cli/commands/factoryStatus.js +103 -0
- package/dist/cli/commands/factoryStatus.js.map +1 -0
- package/dist/cli/commands/makeController.d.ts +11 -0
- package/dist/cli/commands/makeController.d.ts.map +1 -0
- package/dist/cli/commands/makeController.js +61 -0
- package/dist/cli/commands/makeController.js.map +1 -0
- package/dist/cli/commands/makeFactory.d.ts +14 -0
- package/dist/cli/commands/makeFactory.d.ts.map +1 -0
- package/dist/cli/commands/makeFactory.js +183 -0
- package/dist/cli/commands/makeFactory.js.map +1 -0
- package/dist/cli/commands/makeMigration.d.ts +18 -0
- package/dist/cli/commands/makeMigration.d.ts.map +1 -0
- package/dist/cli/commands/makeMigration.js +496 -0
- package/dist/cli/commands/makeMigration.js.map +1 -0
- package/dist/cli/commands/makeModel.d.ts +20 -0
- package/dist/cli/commands/makeModel.d.ts.map +1 -0
- package/dist/cli/commands/makeModel.js +360 -0
- package/dist/cli/commands/makeModel.js.map +1 -0
- package/dist/cli/commands/makeRegistry.d.ts +7 -0
- package/dist/cli/commands/makeRegistry.d.ts.map +1 -0
- package/dist/cli/commands/makeRegistry.js +88 -0
- package/dist/cli/commands/makeRegistry.js.map +1 -0
- package/dist/cli/commands/makeScenario.d.ts +12 -0
- package/dist/cli/commands/makeScenario.d.ts.map +1 -0
- package/dist/cli/commands/makeScenario.js +639 -0
- package/dist/cli/commands/makeScenario.js.map +1 -0
- package/dist/cli/commands/makeSeed.d.ts +11 -0
- package/dist/cli/commands/makeSeed.d.ts.map +1 -0
- package/dist/cli/commands/makeSeed.js +47 -0
- package/dist/cli/commands/makeSeed.js.map +1 -0
- package/dist/cli/commands/makeService.d.ts +5 -0
- package/dist/cli/commands/makeService.d.ts.map +1 -0
- package/dist/cli/commands/makeService.js +31 -0
- package/dist/cli/commands/makeService.js.map +1 -0
- package/dist/cli/commands/migrateFresh.d.ts +14 -0
- package/dist/cli/commands/migrateFresh.d.ts.map +1 -0
- package/dist/cli/commands/migrateFresh.js +150 -0
- package/dist/cli/commands/migrateFresh.js.map +1 -0
- package/dist/cli/commands/migrateReset.d.ts +12 -0
- package/dist/cli/commands/migrateReset.d.ts.map +1 -0
- package/dist/cli/commands/migrateReset.js +28 -0
- package/dist/cli/commands/migrateReset.js.map +1 -0
- package/dist/cli/commands/migrateRollback.d.ts +10 -0
- package/dist/cli/commands/migrateRollback.d.ts.map +1 -0
- package/dist/cli/commands/migrateRollback.js +303 -0
- package/dist/cli/commands/migrateRollback.js.map +1 -0
- package/dist/cli/commands/migrateRun.d.ts +10 -0
- package/dist/cli/commands/migrateRun.d.ts.map +1 -0
- package/dist/cli/commands/migrateRun.js +301 -0
- package/dist/cli/commands/migrateRun.js.map +1 -0
- package/dist/cli/commands/migrateStatus.d.ts +8 -0
- package/dist/cli/commands/migrateStatus.d.ts.map +1 -0
- package/dist/cli/commands/migrateStatus.js +118 -0
- package/dist/cli/commands/migrateStatus.js.map +1 -0
- package/dist/cli/eloquent.d.ts +18 -0
- package/dist/cli/eloquent.d.ts.map +1 -0
- package/dist/cli/eloquent.js +187 -0
- package/dist/cli/eloquent.js.map +1 -0
- package/dist/cli/utils/ArtifactCompatibility.d.ts +10 -0
- package/dist/cli/utils/ArtifactCompatibility.d.ts.map +1 -0
- package/dist/cli/utils/ArtifactCompatibility.js +60 -0
- package/dist/cli/utils/ArtifactCompatibility.js.map +1 -0
- package/dist/cli/utils/ArtifactRoutingReport.d.ts +10 -0
- package/dist/cli/utils/ArtifactRoutingReport.d.ts.map +1 -0
- package/dist/cli/utils/ArtifactRoutingReport.js +25 -0
- package/dist/cli/utils/ArtifactRoutingReport.js.map +1 -0
- package/dist/cli/utils/ArtifactStorage.d.ts +10 -0
- package/dist/cli/utils/ArtifactStorage.d.ts.map +1 -0
- package/dist/cli/utils/ArtifactStorage.js +193 -0
- package/dist/cli/utils/ArtifactStorage.js.map +1 -0
- package/dist/cli/utils/AuditTrail.d.ts +25 -0
- package/dist/cli/utils/AuditTrail.d.ts.map +1 -0
- package/dist/cli/utils/AuditTrail.js +74 -0
- package/dist/cli/utils/AuditTrail.js.map +1 -0
- package/dist/cli/utils/CliActionRuntime.d.ts +5 -0
- package/dist/cli/utils/CliActionRuntime.d.ts.map +1 -0
- package/dist/cli/utils/CliActionRuntime.js +22 -0
- package/dist/cli/utils/CliActionRuntime.js.map +1 -0
- package/dist/cli/utils/CliBootstrapSupport.d.ts +13 -0
- package/dist/cli/utils/CliBootstrapSupport.d.ts.map +1 -0
- package/dist/cli/utils/CliBootstrapSupport.js +55 -0
- package/dist/cli/utils/CliBootstrapSupport.js.map +1 -0
- package/dist/cli/utils/CliCommandCatalog.d.ts +6 -0
- package/dist/cli/utils/CliCommandCatalog.d.ts.map +1 -0
- package/dist/cli/utils/CliCommandCatalog.js +78 -0
- package/dist/cli/utils/CliCommandCatalog.js.map +1 -0
- package/dist/cli/utils/CliCommandTargets.d.ts +8 -0
- package/dist/cli/utils/CliCommandTargets.d.ts.map +1 -0
- package/dist/cli/utils/CliCommandTargets.js +19 -0
- package/dist/cli/utils/CliCommandTargets.js.map +1 -0
- package/dist/cli/utils/CliMakeArtifactCommandRegistration.d.ts +3 -0
- package/dist/cli/utils/CliMakeArtifactCommandRegistration.d.ts.map +1 -0
- package/dist/cli/utils/CliMakeArtifactCommandRegistration.js +94 -0
- package/dist/cli/utils/CliMakeArtifactCommandRegistration.js.map +1 -0
- package/dist/cli/utils/CliMigrationCommandRegistration.d.ts +3 -0
- package/dist/cli/utils/CliMigrationCommandRegistration.d.ts.map +1 -0
- package/dist/cli/utils/CliMigrationCommandRegistration.js +195 -0
- package/dist/cli/utils/CliMigrationCommandRegistration.js.map +1 -0
- package/dist/cli/utils/CliPresentation.d.ts +2 -0
- package/dist/cli/utils/CliPresentation.d.ts.map +1 -0
- package/dist/cli/utils/CliPresentation.js +13 -0
- package/dist/cli/utils/CliPresentation.js.map +1 -0
- package/dist/cli/utils/CliProductionGuards.d.ts +11 -0
- package/dist/cli/utils/CliProductionGuards.d.ts.map +1 -0
- package/dist/cli/utils/CliProductionGuards.js +34 -0
- package/dist/cli/utils/CliProductionGuards.js.map +1 -0
- package/dist/cli/utils/CliScaffoldCommandRegistration.d.ts +3 -0
- package/dist/cli/utils/CliScaffoldCommandRegistration.d.ts.map +1 -0
- package/dist/cli/utils/CliScaffoldCommandRegistration.js +89 -0
- package/dist/cli/utils/CliScaffoldCommandRegistration.js.map +1 -0
- package/dist/cli/utils/CliSeedScenarioCommandRegistration.d.ts +3 -0
- package/dist/cli/utils/CliSeedScenarioCommandRegistration.d.ts.map +1 -0
- package/dist/cli/utils/CliSeedScenarioCommandRegistration.js +123 -0
- package/dist/cli/utils/CliSeedScenarioCommandRegistration.js.map +1 -0
- package/dist/cli/utils/CliSupportCommandRegistration.d.ts +3 -0
- package/dist/cli/utils/CliSupportCommandRegistration.d.ts.map +1 -0
- package/dist/cli/utils/CliSupportCommandRegistration.js +44 -0
- package/dist/cli/utils/CliSupportCommandRegistration.js.map +1 -0
- package/dist/cli/utils/ConsoleSilencer.d.ts +6 -0
- package/dist/cli/utils/ConsoleSilencer.d.ts.map +1 -0
- package/dist/cli/utils/ConsoleSilencer.js +25 -0
- package/dist/cli/utils/ConsoleSilencer.js.map +1 -0
- package/dist/cli/utils/ImportResolver.d.ts +16 -0
- package/dist/cli/utils/ImportResolver.d.ts.map +1 -0
- package/dist/cli/utils/ImportResolver.js +57 -0
- package/dist/cli/utils/ImportResolver.js.map +1 -0
- package/dist/cli/utils/ModelIntrospector.d.ts +33 -0
- package/dist/cli/utils/ModelIntrospector.d.ts.map +1 -0
- package/dist/cli/utils/ModelIntrospector.js +76 -0
- package/dist/cli/utils/ModelIntrospector.js.map +1 -0
- package/dist/cli/utils/PathMap.d.ts +58 -0
- package/dist/cli/utils/PathMap.d.ts.map +1 -0
- package/dist/cli/utils/PathMap.js +132 -0
- package/dist/cli/utils/PathMap.js.map +1 -0
- package/dist/cli/utils/ProductionSafety.d.ts +25 -0
- package/dist/cli/utils/ProductionSafety.d.ts.map +1 -0
- package/dist/cli/utils/ProductionSafety.js +61 -0
- package/dist/cli/utils/ProductionSafety.js.map +1 -0
- package/dist/cli/utils/ScaffoldGeneratorSupport.d.ts +16 -0
- package/dist/cli/utils/ScaffoldGeneratorSupport.d.ts.map +1 -0
- package/dist/cli/utils/ScaffoldGeneratorSupport.js +66 -0
- package/dist/cli/utils/ScaffoldGeneratorSupport.js.map +1 -0
- package/dist/cli/utils/ScenarioMorphAliasRouting.d.ts +14 -0
- package/dist/cli/utils/ScenarioMorphAliasRouting.d.ts.map +1 -0
- package/dist/cli/utils/ScenarioMorphAliasRouting.js +62 -0
- package/dist/cli/utils/ScenarioMorphAliasRouting.js.map +1 -0
- package/dist/cli/utils/SeedBootstrapPrecheck.d.ts +20 -0
- package/dist/cli/utils/SeedBootstrapPrecheck.d.ts.map +1 -0
- package/dist/cli/utils/SeedBootstrapPrecheck.js +133 -0
- package/dist/cli/utils/SeedBootstrapPrecheck.js.map +1 -0
- package/dist/cli/utils/StructuredLogger.d.ts +11 -0
- package/dist/cli/utils/StructuredLogger.d.ts.map +1 -0
- package/dist/cli/utils/StructuredLogger.js +53 -0
- package/dist/cli/utils/StructuredLogger.js.map +1 -0
- package/dist/cli/utils/TemplateEngine.d.ts +30 -0
- package/dist/cli/utils/TemplateEngine.d.ts.map +1 -0
- package/dist/cli/utils/TemplateEngine.js +165 -0
- package/dist/cli/utils/TemplateEngine.js.map +1 -0
- package/dist/cli/utils/factories/Factory.d.ts +61 -0
- package/dist/cli/utils/factories/Factory.d.ts.map +1 -0
- package/dist/cli/utils/factories/Factory.js +140 -0
- package/dist/cli/utils/factories/Factory.js.map +1 -0
- package/dist/cli/utils/factories/FactoryDisplay.d.ts +6 -0
- package/dist/cli/utils/factories/FactoryDisplay.d.ts.map +1 -0
- package/dist/cli/utils/factories/FactoryDisplay.js +26 -0
- package/dist/cli/utils/factories/FactoryDisplay.js.map +1 -0
- package/dist/cli/utils/factories/FactoryGraph.d.ts +6 -0
- package/dist/cli/utils/factories/FactoryGraph.d.ts.map +1 -0
- package/dist/cli/utils/factories/FactoryGraph.js +72 -0
- package/dist/cli/utils/factories/FactoryGraph.js.map +1 -0
- package/dist/cli/utils/factories/FactoryLoader.d.ts +16 -0
- package/dist/cli/utils/factories/FactoryLoader.d.ts.map +1 -0
- package/dist/cli/utils/factories/FactoryLoader.js +35 -0
- package/dist/cli/utils/factories/FactoryLoader.js.map +1 -0
- package/dist/cli/utils/factories/FactoryRegistry.d.ts +16 -0
- package/dist/cli/utils/factories/FactoryRegistry.d.ts.map +1 -0
- package/dist/cli/utils/factories/FactoryRegistry.js +87 -0
- package/dist/cli/utils/factories/FactoryRegistry.js.map +1 -0
- package/dist/cli/utils/fileWriter.d.ts +7 -0
- package/dist/cli/utils/fileWriter.d.ts.map +1 -0
- package/dist/cli/utils/fileWriter.js +61 -0
- package/dist/cli/utils/fileWriter.js.map +1 -0
- package/dist/cli/utils/migrations/MigrationLockStrategy.d.ts +21 -0
- package/dist/cli/utils/migrations/MigrationLockStrategy.d.ts.map +1 -0
- package/dist/cli/utils/migrations/MigrationLockStrategy.js +129 -0
- package/dist/cli/utils/migrations/MigrationLockStrategy.js.map +1 -0
- package/dist/cli/utils/migrations/MigrationTracker.d.ts +25 -0
- package/dist/cli/utils/migrations/MigrationTracker.d.ts.map +1 -0
- package/dist/cli/utils/migrations/MigrationTracker.js +279 -0
- package/dist/cli/utils/migrations/MigrationTracker.js.map +1 -0
- package/dist/cli/utils/migrations/MongoMigrationTracker.d.ts +18 -0
- package/dist/cli/utils/migrations/MongoMigrationTracker.d.ts.map +1 -0
- package/dist/cli/utils/migrations/MongoMigrationTracker.js +276 -0
- package/dist/cli/utils/migrations/MongoMigrationTracker.js.map +1 -0
- package/dist/cli/utils/resolveConnectionFlags.d.ts +14 -0
- package/dist/cli/utils/resolveConnectionFlags.d.ts.map +1 -0
- package/dist/cli/utils/resolveConnectionFlags.js +42 -0
- package/dist/cli/utils/resolveConnectionFlags.js.map +1 -0
- package/dist/cli/utils/resolveSqlConnectionFlags.d.ts +9 -0
- package/dist/cli/utils/resolveSqlConnectionFlags.d.ts.map +1 -0
- package/dist/cli/utils/resolveSqlConnectionFlags.js +23 -0
- package/dist/cli/utils/resolveSqlConnectionFlags.js.map +1 -0
- package/dist/cli/utils/typescript/BaseCommand.d.ts +15 -0
- package/dist/cli/utils/typescript/BaseCommand.d.ts.map +1 -0
- package/dist/cli/utils/typescript/BaseCommand.js +36 -0
- package/dist/cli/utils/typescript/BaseCommand.js.map +1 -0
- package/dist/cli/utils/typescript/RuntimeDetector.d.ts +16 -0
- package/dist/cli/utils/typescript/RuntimeDetector.d.ts.map +1 -0
- package/dist/cli/utils/typescript/RuntimeDetector.js +45 -0
- package/dist/cli/utils/typescript/RuntimeDetector.js.map +1 -0
- package/dist/cli/utils/typescript/TypeScriptCompiler.d.ts +25 -0
- package/dist/cli/utils/typescript/TypeScriptCompiler.d.ts.map +1 -0
- package/dist/cli/utils/typescript/TypeScriptCompiler.js +109 -0
- package/dist/cli/utils/typescript/TypeScriptCompiler.js.map +1 -0
- package/dist/cli/utils/typescript/tsRuntime.d.ts +12 -0
- package/dist/cli/utils/typescript/tsRuntime.d.ts.map +1 -0
- package/dist/cli/utils/typescript/tsRuntime.js +189 -0
- package/dist/cli/utils/typescript/tsRuntime.js.map +1 -0
- package/dist/config/database.d.ts +58 -0
- package/dist/config/database.d.ts.map +1 -0
- package/dist/config/database.js +106 -0
- package/dist/config/database.js.map +1 -0
- package/dist/config/dbRoleEnv.d.ts +31 -0
- package/dist/config/dbRoleEnv.d.ts.map +1 -0
- package/dist/config/dbRoleEnv.js +171 -0
- package/dist/config/dbRoleEnv.js.map +1 -0
- package/dist/core/cache/CacheAnalytics.d.ts +47 -0
- package/dist/core/cache/CacheAnalytics.d.ts.map +1 -0
- package/dist/core/cache/CacheAnalytics.js +113 -0
- package/dist/core/cache/CacheAnalytics.js.map +1 -0
- package/dist/core/cache/CacheDriver.d.ts +19 -0
- package/dist/core/cache/CacheDriver.d.ts.map +1 -0
- package/dist/core/cache/CacheDriver.js +8 -0
- package/dist/core/cache/CacheDriver.js.map +1 -0
- package/dist/core/cache/CacheFallbackManager.d.ts +35 -0
- package/dist/core/cache/CacheFallbackManager.d.ts.map +1 -0
- package/dist/core/cache/CacheFallbackManager.js +118 -0
- package/dist/core/cache/CacheFallbackManager.js.map +1 -0
- package/dist/core/cache/CacheManager.d.ts +11 -0
- package/dist/core/cache/CacheManager.d.ts.map +1 -0
- package/dist/core/cache/CacheManager.js +27 -0
- package/dist/core/cache/CacheManager.js.map +1 -0
- package/dist/core/cache/CacheRegistry.d.ts +49 -0
- package/dist/core/cache/CacheRegistry.d.ts.map +1 -0
- package/dist/core/cache/CacheRegistry.js +117 -0
- package/dist/core/cache/CacheRegistry.js.map +1 -0
- package/dist/core/cache/drivers/FileCacheDriver.d.ts +11 -0
- package/dist/core/cache/drivers/FileCacheDriver.d.ts.map +1 -0
- package/dist/core/cache/drivers/FileCacheDriver.js +54 -0
- package/dist/core/cache/drivers/FileCacheDriver.js.map +1 -0
- package/dist/core/cache/drivers/MemcachedCacheDriver.d.ts +15 -0
- package/dist/core/cache/drivers/MemcachedCacheDriver.d.ts.map +1 -0
- package/dist/core/cache/drivers/MemcachedCacheDriver.js +60 -0
- package/dist/core/cache/drivers/MemcachedCacheDriver.js.map +1 -0
- package/dist/core/cache/drivers/MemoryCacheDriver.d.ts +9 -0
- package/dist/core/cache/drivers/MemoryCacheDriver.d.ts.map +1 -0
- package/dist/core/cache/drivers/MemoryCacheDriver.js +33 -0
- package/dist/core/cache/drivers/MemoryCacheDriver.js.map +1 -0
- package/dist/core/cache/setupCache.d.ts +2 -0
- package/dist/core/cache/setupCache.d.ts.map +1 -0
- package/dist/core/cache/setupCache.js +38 -0
- package/dist/core/cache/setupCache.js.map +1 -0
- package/dist/core/connection/BetterSqliteConnection.d.ts +23 -0
- package/dist/core/connection/BetterSqliteConnection.d.ts.map +1 -0
- package/dist/core/connection/BetterSqliteConnection.js +33 -0
- package/dist/core/connection/BetterSqliteConnection.js.map +1 -0
- package/dist/core/connection/ConnectionFactory.d.ts +18 -0
- package/dist/core/connection/ConnectionFactory.d.ts.map +1 -0
- package/dist/core/connection/ConnectionFactory.js +111 -0
- package/dist/core/connection/ConnectionFactory.js.map +1 -0
- package/dist/core/connection/DatabaseConnection.d.ts +49 -0
- package/dist/core/connection/DatabaseConnection.d.ts.map +1 -0
- package/dist/core/connection/DatabaseConnection.js +120 -0
- package/dist/core/connection/DatabaseConnection.js.map +1 -0
- package/dist/core/connection/DriverAdapter.d.ts +23 -0
- package/dist/core/connection/DriverAdapter.d.ts.map +1 -0
- package/dist/core/connection/DriverAdapter.js +145 -0
- package/dist/core/connection/DriverAdapter.js.map +1 -0
- package/dist/core/connection/resolveConnectionName.d.ts +17 -0
- package/dist/core/connection/resolveConnectionName.d.ts.map +1 -0
- package/dist/core/connection/resolveConnectionName.js +47 -0
- package/dist/core/connection/resolveConnectionName.js.map +1 -0
- package/dist/core/model/BaseModel.d.ts +247 -0
- package/dist/core/model/BaseModel.d.ts.map +1 -0
- package/dist/core/model/BaseModel.js +165 -0
- package/dist/core/model/BaseModel.js.map +1 -0
- package/dist/core/model/BaseModelSafeFinderStatics.d.ts +33 -0
- package/dist/core/model/BaseModelSafeFinderStatics.d.ts.map +1 -0
- package/dist/core/model/BaseModelSafeFinderStatics.js +87 -0
- package/dist/core/model/BaseModelSafeFinderStatics.js.map +1 -0
- package/dist/core/model/CoreModel.d.ts +134 -0
- package/dist/core/model/CoreModel.d.ts.map +1 -0
- package/dist/core/model/CoreModel.js +541 -0
- package/dist/core/model/CoreModel.js.map +1 -0
- package/dist/core/model/CoreModelPersistenceState.d.ts +36 -0
- package/dist/core/model/CoreModelPersistenceState.d.ts.map +1 -0
- package/dist/core/model/CoreModelPersistenceState.js +141 -0
- package/dist/core/model/CoreModelPersistenceState.js.map +1 -0
- package/dist/core/model/CoreModelSafeFinderSupport.d.ts +5 -0
- package/dist/core/model/CoreModelSafeFinderSupport.d.ts.map +1 -0
- package/dist/core/model/CoreModelSafeFinderSupport.js +15 -0
- package/dist/core/model/CoreModelSafeFinderSupport.js.map +1 -0
- package/dist/core/model/CoreModelValidationEvents.d.ts +24 -0
- package/dist/core/model/CoreModelValidationEvents.d.ts.map +1 -0
- package/dist/core/model/CoreModelValidationEvents.js +45 -0
- package/dist/core/model/CoreModelValidationEvents.js.map +1 -0
- package/dist/core/model/SafeFinder.d.ts +46 -0
- package/dist/core/model/SafeFinder.d.ts.map +1 -0
- package/dist/core/model/SafeFinder.js +223 -0
- package/dist/core/model/SafeFinder.js.map +1 -0
- package/dist/core/orm/Relation.d.ts +47 -0
- package/dist/core/orm/Relation.d.ts.map +1 -0
- package/dist/core/orm/Relation.js +62 -0
- package/dist/core/orm/Relation.js.map +1 -0
- package/dist/core/orm/mixins/CastsMixin.d.ts +18 -0
- package/dist/core/orm/mixins/CastsMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/CastsMixin.js +125 -0
- package/dist/core/orm/mixins/CastsMixin.js.map +1 -0
- package/dist/core/orm/mixins/EagerLoadingMixin.d.ts +19 -0
- package/dist/core/orm/mixins/EagerLoadingMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/EagerLoadingMixin.js +137 -0
- package/dist/core/orm/mixins/EagerLoadingMixin.js.map +1 -0
- package/dist/core/orm/mixins/HooksMixin.d.ts +16 -0
- package/dist/core/orm/mixins/HooksMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/HooksMixin.js +95 -0
- package/dist/core/orm/mixins/HooksMixin.js.map +1 -0
- package/dist/core/orm/mixins/MorphRegistry.d.ts +47 -0
- package/dist/core/orm/mixins/MorphRegistry.d.ts.map +1 -0
- package/dist/core/orm/mixins/MorphRegistry.js +67 -0
- package/dist/core/orm/mixins/MorphRegistry.js.map +1 -0
- package/dist/core/orm/mixins/MorphableMixin.d.ts +29 -0
- package/dist/core/orm/mixins/MorphableMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/MorphableMixin.js +93 -0
- package/dist/core/orm/mixins/MorphableMixin.js.map +1 -0
- package/dist/core/orm/mixins/PivotHelperMixin.d.ts +26 -0
- package/dist/core/orm/mixins/PivotHelperMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/PivotHelperMixin.js +102 -0
- package/dist/core/orm/mixins/PivotHelperMixin.js.map +1 -0
- package/dist/core/orm/mixins/QueryCacheMixin.d.ts +23 -0
- package/dist/core/orm/mixins/QueryCacheMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/QueryCacheMixin.js +172 -0
- package/dist/core/orm/mixins/QueryCacheMixin.js.map +1 -0
- package/dist/core/orm/mixins/ScopeMixin.d.ts +20 -0
- package/dist/core/orm/mixins/ScopeMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/ScopeMixin.js +72 -0
- package/dist/core/orm/mixins/ScopeMixin.js.map +1 -0
- package/dist/core/orm/mixins/SerializeMixin.d.ts +44 -0
- package/dist/core/orm/mixins/SerializeMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/SerializeMixin.js +80 -0
- package/dist/core/orm/mixins/SerializeMixin.js.map +1 -0
- package/dist/core/orm/mixins/SoftDeletesMixin.d.ts +22 -0
- package/dist/core/orm/mixins/SoftDeletesMixin.d.ts.map +1 -0
- package/dist/core/orm/mixins/SoftDeletesMixin.js +146 -0
- package/dist/core/orm/mixins/SoftDeletesMixin.js.map +1 -0
- package/dist/core/orm/mixins/utils/BaseMethodResolver.d.ts +8 -0
- package/dist/core/orm/mixins/utils/BaseMethodResolver.d.ts.map +1 -0
- package/dist/core/orm/mixins/utils/BaseMethodResolver.js +26 -0
- package/dist/core/orm/mixins/utils/BaseMethodResolver.js.map +1 -0
- package/dist/core/orm/mixins/utils/HookStore.d.ts +26 -0
- package/dist/core/orm/mixins/utils/HookStore.d.ts.map +1 -0
- package/dist/core/orm/mixins/utils/HookStore.js +78 -0
- package/dist/core/orm/mixins/utils/HookStore.js.map +1 -0
- package/dist/core/orm/mixins/utils/ModelRegistry.d.ts +33 -0
- package/dist/core/orm/mixins/utils/ModelRegistry.d.ts.map +1 -0
- package/dist/core/orm/mixins/utils/ModelRegistry.js +87 -0
- package/dist/core/orm/mixins/utils/ModelRegistry.js.map +1 -0
- package/dist/core/orm/mixins/utils/modelRegistration.d.ts +9 -0
- package/dist/core/orm/mixins/utils/modelRegistration.d.ts.map +1 -0
- package/dist/core/orm/mixins/utils/modelRegistration.js +26 -0
- package/dist/core/orm/mixins/utils/modelRegistration.js.map +1 -0
- package/dist/core/orm/relations/BelongsTo.d.ts +6 -0
- package/dist/core/orm/relations/BelongsTo.d.ts.map +1 -0
- package/dist/core/orm/relations/BelongsTo.js +70 -0
- package/dist/core/orm/relations/BelongsTo.js.map +1 -0
- package/dist/core/orm/relations/BelongsToMany.d.ts +14 -0
- package/dist/core/orm/relations/BelongsToMany.d.ts.map +1 -0
- package/dist/core/orm/relations/BelongsToMany.js +245 -0
- package/dist/core/orm/relations/BelongsToMany.js.map +1 -0
- package/dist/core/orm/relations/HasMany.d.ts +6 -0
- package/dist/core/orm/relations/HasMany.d.ts.map +1 -0
- package/dist/core/orm/relations/HasMany.js +75 -0
- package/dist/core/orm/relations/HasMany.js.map +1 -0
- package/dist/core/orm/relations/HasOne.d.ts +6 -0
- package/dist/core/orm/relations/HasOne.d.ts.map +1 -0
- package/dist/core/orm/relations/HasOne.js +71 -0
- package/dist/core/orm/relations/HasOne.js.map +1 -0
- package/dist/core/orm/relations/MorphMany.d.ts +9 -0
- package/dist/core/orm/relations/MorphMany.d.ts.map +1 -0
- package/dist/core/orm/relations/MorphMany.js +107 -0
- package/dist/core/orm/relations/MorphMany.js.map +1 -0
- package/dist/core/orm/relations/MorphOne.d.ts +9 -0
- package/dist/core/orm/relations/MorphOne.d.ts.map +1 -0
- package/dist/core/orm/relations/MorphOne.js +101 -0
- package/dist/core/orm/relations/MorphOne.js.map +1 -0
- package/dist/core/orm/relations/MorphTo.d.ts +9 -0
- package/dist/core/orm/relations/MorphTo.d.ts.map +1 -0
- package/dist/core/orm/relations/MorphTo.js +85 -0
- package/dist/core/orm/relations/MorphTo.js.map +1 -0
- package/dist/core/schema/SQLDialect.d.ts +22 -0
- package/dist/core/schema/SQLDialect.d.ts.map +1 -0
- package/dist/core/schema/SQLDialect.js +38 -0
- package/dist/core/schema/SQLDialect.js.map +1 -0
- package/dist/core/schema/SchemaBlueprint.d.ts +61 -0
- package/dist/core/schema/SchemaBlueprint.d.ts.map +1 -0
- package/dist/core/schema/SchemaBlueprint.js +62 -0
- package/dist/core/schema/SchemaBlueprint.js.map +1 -0
- package/dist/core/schema/SchemaBuilder.d.ts +29 -0
- package/dist/core/schema/SchemaBuilder.d.ts.map +1 -0
- package/dist/core/schema/SchemaBuilder.js +661 -0
- package/dist/core/schema/SchemaBuilder.js.map +1 -0
- package/dist/core/schema/SchemaValidator.d.ts +23 -0
- package/dist/core/schema/SchemaValidator.d.ts.map +1 -0
- package/dist/core/schema/SchemaValidator.js +75 -0
- package/dist/core/schema/SchemaValidator.js.map +1 -0
- package/dist/core/security/AbstractSecurity.d.ts +24 -0
- package/dist/core/security/AbstractSecurity.d.ts.map +1 -0
- package/dist/core/security/AbstractSecurity.js +58 -0
- package/dist/core/security/AbstractSecurity.js.map +1 -0
- package/dist/core/security/EnvKeySecurity.d.ts +11 -0
- package/dist/core/security/EnvKeySecurity.d.ts.map +1 -0
- package/dist/core/security/EnvKeySecurity.js +46 -0
- package/dist/core/security/EnvKeySecurity.js.map +1 -0
- package/dist/core/security/NoSecurity.d.ts +10 -0
- package/dist/core/security/NoSecurity.d.ts.map +1 -0
- package/dist/core/security/NoSecurity.js +18 -0
- package/dist/core/security/NoSecurity.js.map +1 -0
- package/dist/core/security/SecretRedactor.d.ts +4 -0
- package/dist/core/security/SecretRedactor.d.ts.map +1 -0
- package/dist/core/security/SecretRedactor.js +60 -0
- package/dist/core/security/SecretRedactor.js.map +1 -0
- package/dist/core/security/SecurityContract.d.ts +13 -0
- package/dist/core/security/SecurityContract.d.ts.map +1 -0
- package/dist/core/security/SecurityContract.js +3 -0
- package/dist/core/security/SecurityContract.js.map +1 -0
- package/dist/core/security/SecurityFactory.d.ts +9 -0
- package/dist/core/security/SecurityFactory.d.ts.map +1 -0
- package/dist/core/security/SecurityFactory.js +29 -0
- package/dist/core/security/SecurityFactory.js.map +1 -0
- package/dist/core/security/index.d.ts +6 -0
- package/dist/core/security/index.d.ts.map +1 -0
- package/dist/core/security/index.js +22 -0
- package/dist/core/security/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/package.json +104 -0
- package/src/cli/templates/controller.tpl +80 -0
- package/src/cli/templates/factory.tpl +14 -0
- package/src/cli/templates/migration.tpl +36 -0
- package/src/cli/templates/model-registry.tpl +16 -0
- package/src/cli/templates/model.tpl +95 -0
- package/src/cli/templates/pivot-factory.tpl +85 -0
- package/src/cli/templates/seed.tpl +20 -0
- package/src/cli/templates/service.tpl +40 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for all morphable ORM models.
|
|
3
|
+
*/
|
|
4
|
+
export interface MorphableBaseModel {
|
|
5
|
+
find?(id: number | string): Promise<MorphableBaseModel | null>;
|
|
6
|
+
query?(): ORMQuery<this>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Type for ORM-like query builders.
|
|
10
|
+
*/
|
|
11
|
+
export interface ORMQuery<T> {
|
|
12
|
+
where(field: string, value: unknown): ORMQuery<T>;
|
|
13
|
+
first(): Promise<T | null>;
|
|
14
|
+
get(): Promise<T[]>;
|
|
15
|
+
}
|
|
16
|
+
/** Generic constructor helper for mixins. */
|
|
17
|
+
type Constructor<T = object> = abstract new (...args: any[]) => T;
|
|
18
|
+
/**
|
|
19
|
+
* MorphableMixin
|
|
20
|
+
* Adds polymorphic relationship helpers:
|
|
21
|
+
* - morphTo()
|
|
22
|
+
* - morphOne()
|
|
23
|
+
* - morphMany()
|
|
24
|
+
*
|
|
25
|
+
* Auto-registers every extended model into MorphRegistry.
|
|
26
|
+
*/
|
|
27
|
+
export declare function MorphableMixin<TBase extends Constructor>(Base: TBase): Constructor<MorphableBaseModel> & TBase;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=MorphableMixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MorphableMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/MorphableMixin.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CACrB;AAqCD,6CAA6C;AAC7C,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,GAuEpC,WAAW,CAAC,kBAAkB,CAAC,GAAG,KAAK,CACvE"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MorphableMixin = MorphableMixin;
|
|
4
|
+
// src/core/orm/mixins/MorphableMixin.ts
|
|
5
|
+
const MorphRegistry_1 = require("./MorphRegistry");
|
|
6
|
+
function assertSafeRelationName(relationName) {
|
|
7
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(relationName)) {
|
|
8
|
+
throw new Error(`Unsafe relation name: ${relationName}`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function resolveQueryable(RelatedModel) {
|
|
12
|
+
if (typeof RelatedModel.query === "function") {
|
|
13
|
+
return RelatedModel.query();
|
|
14
|
+
}
|
|
15
|
+
if (typeof RelatedModel.where === "function") {
|
|
16
|
+
let current = null;
|
|
17
|
+
return {
|
|
18
|
+
where(field, value) {
|
|
19
|
+
current = current ? current.where(field, value) : RelatedModel.where(field, value);
|
|
20
|
+
return this;
|
|
21
|
+
},
|
|
22
|
+
async first() {
|
|
23
|
+
return current.first();
|
|
24
|
+
},
|
|
25
|
+
async get() {
|
|
26
|
+
return current.get();
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
throw new Error(`ERROR: Model '${RelatedModel.name || "AnonymousModel"}' does not implement query()/where().`);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* MorphableMixin
|
|
34
|
+
* Adds polymorphic relationship helpers:
|
|
35
|
+
* - morphTo()
|
|
36
|
+
* - morphOne()
|
|
37
|
+
* - morphMany()
|
|
38
|
+
*
|
|
39
|
+
* Auto-registers every extended model into MorphRegistry.
|
|
40
|
+
*/
|
|
41
|
+
function MorphableMixin(Base) {
|
|
42
|
+
class Morphable extends Base {
|
|
43
|
+
constructor(...args) {
|
|
44
|
+
super(...args);
|
|
45
|
+
// Auto-register this class in MorphRegistry once per subclass.
|
|
46
|
+
const ctor = this.constructor;
|
|
47
|
+
const alias = ctor.morphAlias || ctor.name;
|
|
48
|
+
if (!MorphRegistry_1.MorphRegistry.has(alias)) {
|
|
49
|
+
MorphRegistry_1.MorphRegistry.register(alias, ctor);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** morphTo('commentable') */
|
|
53
|
+
async morphTo(relationName) {
|
|
54
|
+
assertSafeRelationName(relationName);
|
|
55
|
+
const record = this;
|
|
56
|
+
const type = record[`${relationName}_type`];
|
|
57
|
+
const id = record[`${relationName}_id`];
|
|
58
|
+
if (!type || id === undefined)
|
|
59
|
+
return null;
|
|
60
|
+
const ModelClass = MorphRegistry_1.MorphRegistry.resolve(type);
|
|
61
|
+
if (typeof ModelClass.prototype.find !== "function") {
|
|
62
|
+
throw new Error(`ERROR: Model '${type}' does not implement find().`);
|
|
63
|
+
}
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
65
|
+
const findFn = ModelClass.prototype.find;
|
|
66
|
+
return await findFn.call(new ModelClass(), id);
|
|
67
|
+
}
|
|
68
|
+
/** morphOne(RelatedModel, 'commentable') */
|
|
69
|
+
async morphOne(RelatedModel, relationName) {
|
|
70
|
+
assertSafeRelationName(relationName);
|
|
71
|
+
const self = this;
|
|
72
|
+
const modelName = typeof self.getMorphClass === "function" ? self.getMorphClass() : this.constructor.name;
|
|
73
|
+
const modelId = this.id;
|
|
74
|
+
return await resolveQueryable(RelatedModel)
|
|
75
|
+
.where(`${relationName}_type`, modelName)
|
|
76
|
+
.where(`${relationName}_id`, modelId)
|
|
77
|
+
.first();
|
|
78
|
+
}
|
|
79
|
+
/** morphMany(RelatedModel, 'commentable') */
|
|
80
|
+
async morphMany(RelatedModel, relationName) {
|
|
81
|
+
assertSafeRelationName(relationName);
|
|
82
|
+
const self = this;
|
|
83
|
+
const modelName = typeof self.getMorphClass === "function" ? self.getMorphClass() : this.constructor.name;
|
|
84
|
+
const modelId = this.id;
|
|
85
|
+
return await resolveQueryable(RelatedModel)
|
|
86
|
+
.where(`${relationName}_type`, modelName)
|
|
87
|
+
.where(`${relationName}_id`, modelId)
|
|
88
|
+
.get();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return Morphable;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=MorphableMixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MorphableMixin.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/MorphableMixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ًں”— PivotHelperMixin
|
|
3
|
+
* Adds helpers for managing many-to-many pivot tables (attach, detach, sync)
|
|
4
|
+
* ✅ Type-safe, constructor-compliant, and works with SQL & Mongo drivers
|
|
5
|
+
*/
|
|
6
|
+
export interface DatabaseConnection {
|
|
7
|
+
collection?(name: string): {
|
|
8
|
+
insertMany(docs: Record<string, unknown>[]): Promise<void>;
|
|
9
|
+
deleteMany(filter: Record<string, unknown>): Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface PivotCapableModel {
|
|
13
|
+
tableName: string;
|
|
14
|
+
connectionName: string;
|
|
15
|
+
getDB(): Promise<unknown>;
|
|
16
|
+
}
|
|
17
|
+
/** Constructor helper */
|
|
18
|
+
type Constructor<T = object> = abstract new (...args: any[]) => T;
|
|
19
|
+
/**
|
|
20
|
+
* ✅ Updated PivotHelperMixin
|
|
21
|
+
* - Adds a type stub for getDB() so TS is satisfied
|
|
22
|
+
* - Properly casts dynamic `this` when accessing DB
|
|
23
|
+
*/
|
|
24
|
+
export declare function PivotHelperMixin<TBase extends Constructor>(Base: TBase): TBase & (abstract new (...args: any[]) => PivotCapableModel);
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=PivotHelperMixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PivotHelperMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/PivotHelperMixin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG;QACzB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3D,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5D,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3B;AAED,yBAAyB;AACzB,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,GAwHpC,KAAK,GAAG,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,iBAAiB,CAAC,CAC9F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ًں”— PivotHelperMixin
|
|
4
|
+
* Adds helpers for managing many-to-many pivot tables (attach, detach, sync)
|
|
5
|
+
* ✅ Type-safe, constructor-compliant, and works with SQL & Mongo drivers
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.PivotHelperMixin = PivotHelperMixin;
|
|
9
|
+
const database_1 = require("../../../config/database");
|
|
10
|
+
/**
|
|
11
|
+
* ✅ Updated PivotHelperMixin
|
|
12
|
+
* - Adds a type stub for getDB() so TS is satisfied
|
|
13
|
+
* - Properly casts dynamic `this` when accessing DB
|
|
14
|
+
*/
|
|
15
|
+
function PivotHelperMixin(Base) {
|
|
16
|
+
class PivotHelper extends Base {
|
|
17
|
+
constructor(...args) {
|
|
18
|
+
super(...args);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* â• Attach related records to a pivot table
|
|
22
|
+
*/
|
|
23
|
+
async attach(pivotTable, foreignKey, relatedKey, id, relatedIds) {
|
|
24
|
+
const db = await this.getDB();
|
|
25
|
+
const rows = relatedIds.map((rid) => ({ [foreignKey]: id, [relatedKey]: rid }));
|
|
26
|
+
if (rows.length === 0)
|
|
27
|
+
return;
|
|
28
|
+
const conn = this.connectionName;
|
|
29
|
+
const key = conn;
|
|
30
|
+
const driver = database_1.dbConfig.connections[key]?.driver ?? conn;
|
|
31
|
+
switch (driver) {
|
|
32
|
+
case "sqlite":
|
|
33
|
+
case "mysql":
|
|
34
|
+
case "pg": {
|
|
35
|
+
const adapter = db;
|
|
36
|
+
const keys = Object.keys(rows[0]);
|
|
37
|
+
const table = adapter.wrapId(pivotTable);
|
|
38
|
+
const columns = keys.map((key) => adapter.wrapId(key)).join(", ");
|
|
39
|
+
const sql = `INSERT INTO ${table} (${columns}) VALUES (${adapter.placeholders(keys.length)})`;
|
|
40
|
+
for (const row of rows) {
|
|
41
|
+
const values = keys.map((key) => row[key]);
|
|
42
|
+
await adapter.execute(sql, values);
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case "mongo": {
|
|
47
|
+
const mongo = db;
|
|
48
|
+
if (typeof mongo.collection !== "function") {
|
|
49
|
+
throw new Error("⌠MongoDB driver not available for pivot operations.");
|
|
50
|
+
}
|
|
51
|
+
await mongo.collection(pivotTable).insertMany(rows);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
default:
|
|
55
|
+
throw new Error(`⌠Unsupported connection type: ${driver}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* â– Detach related records from a pivot table
|
|
60
|
+
*/
|
|
61
|
+
async detach(pivotTable, foreignKey, id) {
|
|
62
|
+
const db = await this.getDB();
|
|
63
|
+
const conn = this.connectionName;
|
|
64
|
+
const key = conn;
|
|
65
|
+
const driver = database_1.dbConfig.connections[key]?.driver ?? conn;
|
|
66
|
+
switch (driver) {
|
|
67
|
+
case "sqlite":
|
|
68
|
+
case "mysql":
|
|
69
|
+
case "pg": {
|
|
70
|
+
const adapter = db;
|
|
71
|
+
const table = adapter.wrapId(pivotTable);
|
|
72
|
+
const fk = adapter.wrapId(foreignKey);
|
|
73
|
+
const sql = `DELETE FROM ${table} WHERE ${fk} = ${adapter.placeholder(1)}`;
|
|
74
|
+
await adapter.execute(sql, [id]);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "mongo": {
|
|
78
|
+
const mongo = db;
|
|
79
|
+
if (typeof mongo.collection !== "function") {
|
|
80
|
+
throw new Error("⌠MongoDB driver not available for pivot operations.");
|
|
81
|
+
}
|
|
82
|
+
await mongo.collection(pivotTable).deleteMany({ [foreignKey]: id });
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
default:
|
|
86
|
+
throw new Error(`⌠Unsupported connection type: ${driver}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* ًں”„ Sync related records — clears old ones and attaches the new set
|
|
91
|
+
*/
|
|
92
|
+
async sync(pivotTable, foreignKey, relatedKey, id, relatedIds) {
|
|
93
|
+
await this.detach(pivotTable, foreignKey, id);
|
|
94
|
+
if (relatedIds.length > 0) {
|
|
95
|
+
await this.attach(pivotTable, foreignKey, relatedKey, id, relatedIds);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ًں‘‡ Important: cast ensures TS knows result = Base + PivotCapableModel
|
|
100
|
+
return PivotHelper;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=PivotHelperMixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PivotHelperMixin.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/PivotHelperMixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type CacheOptions = {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
ttl: number;
|
|
4
|
+
};
|
|
5
|
+
export interface CacheInterface {
|
|
6
|
+
get<T>(key: string): Promise<T | null>;
|
|
7
|
+
set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
8
|
+
delete(key: string): Promise<void>;
|
|
9
|
+
clear(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export interface CacheableModel {
|
|
12
|
+
invalidateModelCache(): Promise<void>;
|
|
13
|
+
invalidateCacheGroup(group: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface CacheableConstructor {
|
|
16
|
+
defaultCacheTTL?: number;
|
|
17
|
+
cacheTTL?: Record<string, number>;
|
|
18
|
+
cacheStrategy?: (payload: unknown, group?: string) => number;
|
|
19
|
+
}
|
|
20
|
+
type Constructor<T = object> = abstract new (...args: any[]) => T;
|
|
21
|
+
export declare function QueryCacheMixin<TBase extends Constructor>(Base: TBase): TBase & (abstract new (...args: any[]) => CacheableModel) & CacheableConstructor;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=QueryCacheMixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryCacheMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/QueryCacheMixin.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9D;AAED,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAIlE,wBAAgB,eAAe,CAAC,KAAK,SAAS,WAAW,EAAE,IAAI,EAAE,KAAK,GAwJnC,KAAK,GACpC,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC,GACjD,oBAAoB,CACvB"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.QueryCacheMixin = QueryCacheMixin;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const CacheManager_1 = require("../../cache/CacheManager");
|
|
39
|
+
const CacheRegistry_1 = require("../../cache/CacheRegistry");
|
|
40
|
+
const CacheFallbackManager_1 = require("../../cache/CacheFallbackManager");
|
|
41
|
+
const CacheAnalytics_1 = require("../../cache/CacheAnalytics");
|
|
42
|
+
const HookStore_1 = require("./utils/HookStore");
|
|
43
|
+
const ModelRegistry_1 = require("./utils/ModelRegistry");
|
|
44
|
+
const CACHE_INVALIDATION_EVENTS = ["created", "updated", "deleted"];
|
|
45
|
+
function QueryCacheMixin(Base) {
|
|
46
|
+
const cacheHooksRegistered = new WeakSet();
|
|
47
|
+
class CachedModel extends Base {
|
|
48
|
+
constructor(...args) {
|
|
49
|
+
super(...args);
|
|
50
|
+
this.__cache = { enabled: false, ttl: 60 };
|
|
51
|
+
try {
|
|
52
|
+
this.ensureCacheInvalidationHooks();
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.warn("[QueryCacheMixin] Failed to register cache invalidation hooks:", err);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
ensureCacheInvalidationHooks() {
|
|
59
|
+
const modelCtor = this.constructor;
|
|
60
|
+
if (!ModelRegistry_1.ModelRegistry.isGranted(modelCtor) && ModelRegistry_1.ModelRegistry.isStrictMode()) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (cacheHooksRegistered.has(modelCtor)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const modelName = this.constructor.name || "Model";
|
|
67
|
+
const clearModelCache = async () => {
|
|
68
|
+
await CacheRegistry_1.CacheRegistry.clearModel(modelName);
|
|
69
|
+
};
|
|
70
|
+
for (const event of CACHE_INVALIDATION_EVENTS) {
|
|
71
|
+
HookStore_1.HookStore.add(modelCtor, event, clearModelCache);
|
|
72
|
+
}
|
|
73
|
+
cacheHooksRegistered.add(modelCtor);
|
|
74
|
+
}
|
|
75
|
+
cache(ttl = 60) {
|
|
76
|
+
this.__cache = { enabled: true, ttl };
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
withoutCache() {
|
|
80
|
+
this.__cache = { enabled: false, ttl: 0 };
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
generateCacheKey(payload) {
|
|
84
|
+
const normalized = JSON.stringify(payload, (_key, value) => {
|
|
85
|
+
if (value instanceof Date)
|
|
86
|
+
return value.toISOString();
|
|
87
|
+
if (typeof value === "function")
|
|
88
|
+
return undefined;
|
|
89
|
+
return value;
|
|
90
|
+
});
|
|
91
|
+
return crypto.createHash("sha256").update(normalized).digest("hex");
|
|
92
|
+
}
|
|
93
|
+
get cacheAPI() {
|
|
94
|
+
try {
|
|
95
|
+
const fallbackActive = typeof CacheFallbackManager_1.CacheFallbackManager?.getActiveDriver === "function" &&
|
|
96
|
+
CacheFallbackManager_1.CacheFallbackManager.getActiveDriver();
|
|
97
|
+
return fallbackActive
|
|
98
|
+
? CacheFallbackManager_1.CacheFallbackManager
|
|
99
|
+
: CacheManager_1.CacheManager;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return CacheManager_1.CacheManager;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
resolveTTL(payload, group) {
|
|
106
|
+
const cls = this.constructor;
|
|
107
|
+
if (this.__cache.enabled && this.__cache.ttl > 0)
|
|
108
|
+
return this.__cache.ttl;
|
|
109
|
+
if (typeof cls.cacheStrategy === "function") {
|
|
110
|
+
try {
|
|
111
|
+
const dynamic = cls.cacheStrategy(payload, group);
|
|
112
|
+
if (typeof dynamic === "number" && dynamic >= 0)
|
|
113
|
+
return dynamic;
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
console.warn("[QueryCacheMixin] cacheStrategy() failed:", err);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (cls.cacheTTL && typeof cls.cacheTTL[group] === "number")
|
|
120
|
+
return cls.cacheTTL[group];
|
|
121
|
+
if (typeof cls.defaultCacheTTL === "number")
|
|
122
|
+
return cls.defaultCacheTTL;
|
|
123
|
+
return 60;
|
|
124
|
+
}
|
|
125
|
+
async runWithCache(payload, executeFn, group = "default") {
|
|
126
|
+
const cls = this.constructor;
|
|
127
|
+
const hasModelDefaults = typeof cls.defaultCacheTTL === "number" ||
|
|
128
|
+
typeof cls.cacheStrategy === "function" ||
|
|
129
|
+
(cls.cacheTTL && Object.keys(cls.cacheTTL).length > 0);
|
|
130
|
+
if (!this.__cache.enabled && !hasModelDefaults)
|
|
131
|
+
return executeFn();
|
|
132
|
+
const modelName = cls.name || this.constructor?.name || "Model";
|
|
133
|
+
const hashKey = this.generateCacheKey(payload);
|
|
134
|
+
const key = `${modelName}:${group}:${hashKey}`;
|
|
135
|
+
const ttl = this.resolveTTL(payload, group);
|
|
136
|
+
try {
|
|
137
|
+
const cached = await this.cacheAPI.get(key);
|
|
138
|
+
if (cached !== null && typeof cached !== "undefined") {
|
|
139
|
+
try {
|
|
140
|
+
CacheAnalytics_1.CacheAnalytics.hit(modelName, ttl);
|
|
141
|
+
}
|
|
142
|
+
catch { }
|
|
143
|
+
return cached;
|
|
144
|
+
}
|
|
145
|
+
CacheAnalytics_1.CacheAnalytics.miss(modelName, ttl);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
console.warn(`[Cache] Read failed for ${key}:`, err);
|
|
149
|
+
CacheAnalytics_1.CacheAnalytics.miss(modelName, ttl);
|
|
150
|
+
}
|
|
151
|
+
const result = await executeFn();
|
|
152
|
+
try {
|
|
153
|
+
await this.cacheAPI.set(key, result, ttl);
|
|
154
|
+
await CacheRegistry_1.CacheRegistry.addKey(modelName, group, key);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
console.warn(`[Cache] Write failed for ${key}:`, err);
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
async invalidateModelCache() {
|
|
162
|
+
const modelName = this.constructor.name || "Model";
|
|
163
|
+
await CacheRegistry_1.CacheRegistry.clearModel(modelName);
|
|
164
|
+
}
|
|
165
|
+
async invalidateCacheGroup(group) {
|
|
166
|
+
const modelName = this.constructor.name || "Model";
|
|
167
|
+
await CacheRegistry_1.CacheRegistry.clearGroup(modelName, group);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return CachedModel;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=QueryCacheMixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryCacheMixin.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/QueryCacheMixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ًںŒچ ScopeMixin
|
|
3
|
+
* Adds support for global model scopes (auto-filters)
|
|
4
|
+
* ✅ Type-safe, chain-compatible, and compliant with all previous mixins
|
|
5
|
+
*/
|
|
6
|
+
export interface ScopableModel<TRecord extends Record<string, unknown> = Record<string, unknown>> {
|
|
7
|
+
all(): Promise<TRecord[]>;
|
|
8
|
+
find(id: number | string, pk?: string): Promise<TRecord | null>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* ًں§© A single global scope callback
|
|
12
|
+
*/
|
|
13
|
+
export type ScopeCallback<TRecord> = (records: TRecord[]) => TRecord[] | void;
|
|
14
|
+
/**
|
|
15
|
+
* ًں§ Constructor helper for mixins
|
|
16
|
+
*/
|
|
17
|
+
type Constructor<T = object> = abstract new (...args: any[]) => T;
|
|
18
|
+
export declare function ScopeMixin<TBase extends Constructor, TRecord extends Record<string, unknown> = Record<string, unknown>>(Base: TBase): TBase & (abstract new (...args: any[]) => ScopableModel<TRecord>);
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ScopeMixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/ScopeMixin.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9F,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,GAAG,IAAI,CAAC;AAE9E;;GAEG;AACH,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAElE,wBAAgB,UAAU,CACxB,KAAK,SAAS,WAAW,EACzB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,EAAE,KAAK,GAmFsB,KAAK,GAAG,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,CACnG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScopeMixin = ScopeMixin;
|
|
4
|
+
const BaseMethodResolver_1 = require("./utils/BaseMethodResolver");
|
|
5
|
+
function ScopeMixin(Base) {
|
|
6
|
+
const resolveBaseMethod = (0, BaseMethodResolver_1.createBaseMethodResolver)(Base);
|
|
7
|
+
class ScopedModel extends Base {
|
|
8
|
+
constructor(...args) {
|
|
9
|
+
super(...args);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* â• Add a global scope to the model.
|
|
13
|
+
* Example:
|
|
14
|
+
* User.addGlobalScope("active", records => records.filter(r => r.active))
|
|
15
|
+
*/
|
|
16
|
+
static addGlobalScope(name, callback) {
|
|
17
|
+
this.globalScopes[name] = callback;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* ًںڑ« Remove a global scope by name.
|
|
21
|
+
*/
|
|
22
|
+
static removeGlobalScope(name) {
|
|
23
|
+
delete this.globalScopes[name];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* ًں§ Apply all global scopes to a result set.
|
|
27
|
+
*/
|
|
28
|
+
applyScopes(records) {
|
|
29
|
+
const cls = this.constructor;
|
|
30
|
+
const scopes = cls.globalScopes;
|
|
31
|
+
let filtered = records;
|
|
32
|
+
for (const scopeFn of Object.values(scopes)) {
|
|
33
|
+
if (typeof scopeFn === "function") {
|
|
34
|
+
const res = scopeFn(filtered);
|
|
35
|
+
if (Array.isArray(res))
|
|
36
|
+
filtered = res;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return filtered;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* ًں“‹ Override all() to apply global scopes automatically.
|
|
43
|
+
*/
|
|
44
|
+
async all() {
|
|
45
|
+
const baseAll = resolveBaseMethod(this, "all");
|
|
46
|
+
if (typeof baseAll !== "function") {
|
|
47
|
+
throw new Error("Base 'all' method not found in ScopeMixin chain.");
|
|
48
|
+
}
|
|
49
|
+
const records = await baseAll();
|
|
50
|
+
return this.applyScopes(records);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* ًں”چ Override find() to apply scopes to single record results.
|
|
54
|
+
*/
|
|
55
|
+
async find(id, pk = "id") {
|
|
56
|
+
const baseFind = resolveBaseMethod(this, "find");
|
|
57
|
+
if (typeof baseFind !== "function") {
|
|
58
|
+
throw new Error("Base 'find' method not found in ScopeMixin chain.");
|
|
59
|
+
}
|
|
60
|
+
const record = await baseFind(id, pk);
|
|
61
|
+
if (!record)
|
|
62
|
+
return null;
|
|
63
|
+
const filtered = this.applyScopes([record]);
|
|
64
|
+
return filtered.length > 0 ? filtered[0] : null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** ًں§± Static global scope registry */
|
|
68
|
+
ScopedModel.globalScopes = {};
|
|
69
|
+
// ✅ Return merged type for correct inference
|
|
70
|
+
return ScopedModel;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ScopeMixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeMixin.js","sourceRoot":"","sources":["../../../../src/core/orm/mixins/ScopeMixin.ts"],"names":[],"mappings":";;AAuBA,gCAuFC;AA9GD,mEAAsE;AAuBtE,SAAgB,UAAU,CAGxB,IAAW;IACX,MAAM,iBAAiB,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,CAAC;IAEzD,MAAe,WAAY,SAAQ,IAAI;QAIrC,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACjB,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,cAAc,CAEnB,IAAY,EACZ,QAA6B;YAE7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QACrC,CAAC;QAED;;WAEG;QACH,MAAM,CAAC,iBAAiB,CAEtB,IAAY;YAEZ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED;;WAEG;QACO,WAAW,CAAC,OAAkB;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAiC,CAAC;YACnD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAsD,CAAC;YAC1E,IAAI,QAAQ,GAAG,OAAO,CAAC;YAEvB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;oBAClC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;wBAAE,QAAQ,GAAG,GAAG,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,GAAG;YACP,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAoB,CAAC,CAAC;QAChD,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,IAAI,CAAC,EAAmB,EAAE,KAAa,IAAI;YAC/C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,MAAiB,CAAC,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;;IA3ED,wCAAwC;IACjC,wBAAY,GAAuC,EAAE,CAAC;IA6E/D,+CAA+C;IAC/C,OAAO,WAA2F,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🧩 SerializeMixin
|
|
3
|
+
* Adds toJSON() and toObject() serialization logic.
|
|
4
|
+
* ✅ Type-safe, mixin-compliant, and compatible with nested models and arrays.
|
|
5
|
+
*/
|
|
6
|
+
export interface SerializableModel {
|
|
7
|
+
all(): Promise<unknown[]>;
|
|
8
|
+
find(id: number | string, pk?: string): Promise<unknown | null>;
|
|
9
|
+
toObject?(): Record<string, unknown>;
|
|
10
|
+
toJSON?(): string;
|
|
11
|
+
}
|
|
12
|
+
/** Generic abstract constructor used by all mixins */
|
|
13
|
+
type Constructor<T = object> = abstract new (...args: any[]) => T;
|
|
14
|
+
export declare function SerializeMixin<TBase extends Constructor<SerializableModel>>(Base: TBase): (abstract new (...args: any[]) => {
|
|
15
|
+
/**
|
|
16
|
+
* 🕵️♂️ Attributes to hide during serialization
|
|
17
|
+
* Example: ['password', 'api_token']
|
|
18
|
+
*/
|
|
19
|
+
hidden: string[];
|
|
20
|
+
/**
|
|
21
|
+
* 🌟 Computed attributes to append to output
|
|
22
|
+
* Example: ['full_name', 'profile_url']
|
|
23
|
+
*/
|
|
24
|
+
appends: string[];
|
|
25
|
+
/**
|
|
26
|
+
* 🚀 Convert model instance into a plain JS object
|
|
27
|
+
* - Removes hidden/private fields
|
|
28
|
+
* - Appends computed attributes
|
|
29
|
+
* - Recursively serializes nested models/arrays
|
|
30
|
+
*/
|
|
31
|
+
toObject(): Record<string, unknown>;
|
|
32
|
+
/**
|
|
33
|
+
* 🧠 Convert model to JSON string
|
|
34
|
+
*/
|
|
35
|
+
toJSON(): string;
|
|
36
|
+
/**
|
|
37
|
+
* ♻️ Recursively serialize nested models, arrays, or plain objects
|
|
38
|
+
*/
|
|
39
|
+
serializeValue(value: unknown): unknown;
|
|
40
|
+
all(): Promise<unknown[]>;
|
|
41
|
+
find(id: number | string, pk?: string): Promise<unknown | null>;
|
|
42
|
+
}) & TBase;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=SerializeMixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SerializeMixin.d.ts","sourceRoot":"","sources":["../../../../src/core/orm/mixins/SerializeMixin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,MAAM,CAAC;CACnB;AAED,sDAAsD;AACtD,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAGlE,wBAAgB,cAAc,CAAC,KAAK,SAAS,WAAW,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,2BAc/D,GAAG,EAAE;IAZ1B;;;OAGG;YACY,MAAM,EAAE;IAEvB;;;OAGG;aACa,MAAM,EAAE;IAMxB;;;;;OAKG;gBACS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAuBnC;;OAEG;cACO,MAAM;IAIhB;;OAEG;0BAC0B,OAAO,GAAG,OAAO;WAnEzC,OAAO,CAAC,OAAO,EAAE,CAAC;aAChB,MAAM,GAAG,MAAM,OAAO,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;WAyFhE"}
|