@orchestr-sh/orchestr 1.11.1 → 1.11.2
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 +2 -0
- package/dist/Cache/CacheManager.cjs +1 -1
- package/dist/Cache/CacheManager.mjs +1 -1
- package/dist/Cache/CacheManager.mjs.map +1 -1
- package/dist/Cache/Events/CacheFlushed.cjs +1 -1
- package/dist/Cache/Events/CacheFlushed.mjs +1 -1
- package/dist/Cache/Events/CacheFlushed.mjs.map +1 -1
- package/dist/Cache/Events/CacheHit.cjs +1 -1
- package/dist/Cache/Events/CacheHit.mjs +1 -1
- package/dist/Cache/Events/CacheHit.mjs.map +1 -1
- package/dist/Cache/Events/CacheMissed.cjs +1 -1
- package/dist/Cache/Events/CacheMissed.mjs +1 -1
- package/dist/Cache/Events/CacheMissed.mjs.map +1 -1
- package/dist/Cache/Events/KeyForgotten.cjs +1 -1
- package/dist/Cache/Events/KeyForgotten.mjs +1 -1
- package/dist/Cache/Events/KeyForgotten.mjs.map +1 -1
- package/dist/Cache/Events/KeyWritten.cjs +1 -1
- package/dist/Cache/Events/KeyWritten.mjs +1 -1
- package/dist/Cache/Events/KeyWritten.mjs.map +1 -1
- package/dist/Cache/Locks/CacheLock.cjs +1 -1
- package/dist/Cache/Locks/CacheLock.mjs +1 -1
- package/dist/Cache/Locks/CacheLock.mjs.map +1 -1
- package/dist/Cache/Locks/Lock.cjs +1 -1
- package/dist/Cache/Locks/Lock.mjs +1 -1
- package/dist/Cache/Locks/Lock.mjs.map +1 -1
- package/dist/Cache/Repository.cjs +1 -1
- package/dist/Cache/Repository.mjs +1 -1
- package/dist/Cache/Repository.mjs.map +1 -1
- package/dist/Cache/Stores/ArrayStore.cjs +1 -1
- package/dist/Cache/Stores/ArrayStore.mjs +1 -1
- package/dist/Cache/Stores/ArrayStore.mjs.map +1 -1
- package/dist/Cache/Stores/DatabaseStore.cjs +1 -1
- package/dist/Cache/Stores/DatabaseStore.mjs +1 -1
- package/dist/Cache/Stores/DatabaseStore.mjs.map +1 -1
- package/dist/Cache/Stores/FileStore.cjs +1 -1
- package/dist/Cache/Stores/FileStore.mjs +1 -1
- package/dist/Cache/Stores/FileStore.mjs.map +1 -1
- package/dist/Cache/Tags/TagSet.cjs +1 -1
- package/dist/Cache/Tags/TagSet.mjs +1 -1
- package/dist/Cache/Tags/TagSet.mjs.map +1 -1
- package/dist/Cache/Tags/TaggedCache.cjs +1 -1
- package/dist/Cache/Tags/TaggedCache.mjs +1 -1
- package/dist/Cache/Tags/TaggedCache.mjs.map +1 -1
- package/dist/Console/Commands/CacheClearCommand.cjs +1 -1
- package/dist/Console/Commands/CacheClearCommand.mjs +1 -1
- package/dist/Console/Commands/CacheClearCommand.mjs.map +1 -1
- package/dist/Console/Commands/CacheForgetCommand.cjs +1 -1
- package/dist/Console/Commands/CacheForgetCommand.mjs +1 -1
- package/dist/Console/Commands/CacheForgetCommand.mjs.map +1 -1
- package/dist/Console/Commands/CacheTableCommand.cjs +1 -1
- package/dist/Console/Commands/CacheTableCommand.mjs +1 -1
- package/dist/Console/Commands/CacheTableCommand.mjs.map +1 -1
- package/dist/Console/Commands/DeployCommand.mjs.map +1 -1
- package/dist/Console/Commands/DeployEnvCommand.mjs.map +1 -1
- package/dist/Console/Commands/DeployInitCommand.mjs.map +1 -1
- package/dist/Console/Commands/DeployProvisionCommand.mjs.map +1 -1
- package/dist/Console/Commands/DeployRollbackCommand.mjs.map +1 -1
- package/dist/Console/Commands/DeployServerCommand.mjs.map +1 -1
- package/dist/Console/Commands/DeployStatusCommand.mjs.map +1 -1
- package/dist/Console/Commands/EventCacheCommand.cjs +1 -1
- package/dist/Console/Commands/EventCacheCommand.mjs +1 -1
- package/dist/Console/Commands/EventCacheCommand.mjs.map +1 -1
- package/dist/Console/Commands/EventClearCommand.cjs +1 -1
- package/dist/Console/Commands/EventClearCommand.mjs +1 -1
- package/dist/Console/Commands/EventClearCommand.mjs.map +1 -1
- package/dist/Console/Commands/EventListCommand.cjs +1 -1
- package/dist/Console/Commands/EventListCommand.mjs +1 -1
- package/dist/Console/Commands/EventListCommand.mjs.map +1 -1
- package/dist/Console/Commands/MakeControllerCommand.cjs +1 -1
- package/dist/Console/Commands/MakeControllerCommand.mjs +1 -1
- package/dist/Console/Commands/MakeControllerCommand.mjs.map +1 -1
- package/dist/Console/Commands/MakeEventCommand.cjs +1 -1
- package/dist/Console/Commands/MakeEventCommand.mjs +1 -1
- package/dist/Console/Commands/MakeEventCommand.mjs.map +1 -1
- package/dist/Console/Commands/MakeJobCommand.cjs +1 -1
- package/dist/Console/Commands/MakeJobCommand.mjs +1 -1
- package/dist/Console/Commands/MakeJobCommand.mjs.map +1 -1
- package/dist/Console/Commands/MakeListenerCommand.cjs +1 -1
- package/dist/Console/Commands/MakeListenerCommand.mjs +1 -1
- package/dist/Console/Commands/MakeListenerCommand.mjs.map +1 -1
- package/dist/Console/Commands/MakeMigrationCommand.cjs +1 -1
- package/dist/Console/Commands/MakeMigrationCommand.mjs +1 -1
- package/dist/Console/Commands/MakeMigrationCommand.mjs.map +1 -1
- package/dist/Console/Commands/MakeSeederCommand.cjs +1 -1
- package/dist/Console/Commands/MakeSeederCommand.mjs +1 -1
- package/dist/Console/Commands/MakeSeederCommand.mjs.map +1 -1
- package/dist/Console/Commands/MakeViewCommand.cjs +1 -1
- package/dist/Console/Commands/MakeViewCommand.mjs +1 -1
- package/dist/Console/Commands/MakeViewCommand.mjs.map +1 -1
- package/dist/Console/Commands/MigrateCommand.cjs +1 -1
- package/dist/Console/Commands/MigrateCommand.mjs +1 -1
- package/dist/Console/Commands/MigrateCommand.mjs.map +1 -1
- package/dist/Console/Commands/MigrateFreshCommand.cjs +1 -1
- package/dist/Console/Commands/MigrateFreshCommand.mjs +1 -1
- package/dist/Console/Commands/MigrateFreshCommand.mjs.map +1 -1
- package/dist/Console/Commands/MigrateRefreshCommand.cjs +1 -1
- package/dist/Console/Commands/MigrateRefreshCommand.mjs +1 -1
- package/dist/Console/Commands/MigrateRefreshCommand.mjs.map +1 -1
- package/dist/Console/Commands/MigrateResetCommand.cjs +1 -1
- package/dist/Console/Commands/MigrateResetCommand.mjs +1 -1
- package/dist/Console/Commands/MigrateResetCommand.mjs.map +1 -1
- package/dist/Console/Commands/MigrateRollbackCommand.cjs +1 -1
- package/dist/Console/Commands/MigrateRollbackCommand.mjs +1 -1
- package/dist/Console/Commands/MigrateRollbackCommand.mjs.map +1 -1
- package/dist/Console/Commands/MigrateStatusCommand.cjs +1 -1
- package/dist/Console/Commands/MigrateStatusCommand.mjs +1 -1
- package/dist/Console/Commands/MigrateStatusCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueBatchesTableCommand.cjs +1 -1
- package/dist/Console/Commands/QueueBatchesTableCommand.mjs +1 -1
- package/dist/Console/Commands/QueueBatchesTableCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueClearCommand.cjs +1 -1
- package/dist/Console/Commands/QueueClearCommand.mjs +1 -1
- package/dist/Console/Commands/QueueClearCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueFailedCommand.cjs +1 -1
- package/dist/Console/Commands/QueueFailedCommand.mjs +1 -1
- package/dist/Console/Commands/QueueFailedCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueFailedTableCommand.cjs +1 -1
- package/dist/Console/Commands/QueueFailedTableCommand.mjs +1 -1
- package/dist/Console/Commands/QueueFailedTableCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueFlushCommand.cjs +1 -1
- package/dist/Console/Commands/QueueFlushCommand.mjs +1 -1
- package/dist/Console/Commands/QueueFlushCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueForgetCommand.cjs +1 -1
- package/dist/Console/Commands/QueueForgetCommand.mjs +1 -1
- package/dist/Console/Commands/QueueForgetCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueMonitorCommand.cjs +1 -1
- package/dist/Console/Commands/QueueMonitorCommand.mjs +1 -1
- package/dist/Console/Commands/QueueMonitorCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueuePruneBatchesCommand.cjs +1 -1
- package/dist/Console/Commands/QueuePruneBatchesCommand.mjs +1 -1
- package/dist/Console/Commands/QueuePruneBatchesCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueuePruneFailedCommand.cjs +1 -1
- package/dist/Console/Commands/QueuePruneFailedCommand.mjs +1 -1
- package/dist/Console/Commands/QueuePruneFailedCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueRestartCommand.cjs +1 -1
- package/dist/Console/Commands/QueueRestartCommand.mjs +1 -1
- package/dist/Console/Commands/QueueRestartCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueRetryCommand.cjs +1 -1
- package/dist/Console/Commands/QueueRetryCommand.mjs +1 -1
- package/dist/Console/Commands/QueueRetryCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueTableCommand.cjs +1 -1
- package/dist/Console/Commands/QueueTableCommand.mjs +1 -1
- package/dist/Console/Commands/QueueTableCommand.mjs.map +1 -1
- package/dist/Console/Commands/QueueWorkCommand.cjs +1 -1
- package/dist/Console/Commands/QueueWorkCommand.mjs +1 -1
- package/dist/Console/Commands/QueueWorkCommand.mjs.map +1 -1
- package/dist/Console/Commands/SeedCommand.cjs +1 -1
- package/dist/Console/Commands/SeedCommand.mjs +1 -1
- package/dist/Console/Commands/SeedCommand.mjs.map +1 -1
- package/dist/Console/ConsoleKernel.cjs +1 -1
- package/dist/Console/ConsoleKernel.mjs +1 -1
- package/dist/Console/ConsoleKernel.mjs.map +1 -1
- package/dist/Console/orchestr.mjs.map +1 -1
- package/dist/Container/Container.mjs.map +1 -1
- package/dist/Database/Adapters/DrizzleAdapter.cjs +1 -1
- package/dist/Database/Adapters/DrizzleAdapter.mjs +1 -1
- package/dist/Database/Adapters/DrizzleAdapter.mjs.map +1 -1
- package/dist/Database/Connection.cjs +1 -1
- package/dist/Database/Connection.mjs +1 -1
- package/dist/Database/Connection.mjs.map +1 -1
- package/dist/Database/DatabaseManager.cjs +1 -1
- package/dist/Database/DatabaseManager.mjs +1 -1
- package/dist/Database/DatabaseManager.mjs.map +1 -1
- package/dist/Database/Ensemble/Ensemble.mjs.map +1 -1
- package/dist/Database/Ensemble/EnsembleBuilder.mjs.map +1 -1
- package/dist/Database/Ensemble/EnsembleCollection.cjs +1 -1
- package/dist/Database/Ensemble/EnsembleCollection.mjs +1 -1
- package/dist/Database/Ensemble/EnsembleCollection.mjs.map +1 -1
- package/dist/Database/Ensemble/Relations/BelongsTo.mjs.map +1 -1
- package/dist/Database/Ensemble/Relations/BelongsToMany.cjs +1 -1
- package/dist/Database/Ensemble/Relations/BelongsToMany.mjs +1 -1
- package/dist/Database/Ensemble/Relations/BelongsToMany.mjs.map +1 -1
- package/dist/Database/Ensemble/Relations/HasMany.mjs.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphTo.mjs.map +1 -1
- package/dist/Database/Ensemble/Relations/MorphToMany.mjs.map +1 -1
- package/dist/Database/Migrations/Blueprint.cjs +1 -1
- package/dist/Database/Migrations/Blueprint.mjs +1 -1
- package/dist/Database/Migrations/Blueprint.mjs.map +1 -1
- package/dist/Database/Migrations/MigrationCreator.cjs +1 -1
- package/dist/Database/Migrations/MigrationCreator.mjs +1 -1
- package/dist/Database/Migrations/MigrationCreator.mjs.map +1 -1
- package/dist/Database/Migrations/MigrationRepository.cjs +1 -1
- package/dist/Database/Migrations/MigrationRepository.mjs +1 -1
- package/dist/Database/Migrations/MigrationRepository.mjs.map +1 -1
- package/dist/Database/Migrations/Migrator.cjs +1 -1
- package/dist/Database/Migrations/Migrator.mjs +1 -1
- package/dist/Database/Migrations/Migrator.mjs.map +1 -1
- package/dist/Database/Migrations/SchemaBuilder.cjs +1 -1
- package/dist/Database/Migrations/SchemaBuilder.mjs +1 -1
- package/dist/Database/Migrations/SchemaBuilder.mjs.map +1 -1
- package/dist/Database/Query/Builder.cjs +1 -1
- package/dist/Database/Query/Builder.mjs +1 -1
- package/dist/Database/Query/Builder.mjs.map +1 -1
- package/dist/Database/Query/Expression.cjs +1 -1
- package/dist/Database/Query/Expression.mjs +1 -1
- package/dist/Database/Query/Expression.mjs.map +1 -1
- package/dist/Database/Seeders/SeederRunner.cjs +1 -1
- package/dist/Database/Seeders/SeederRunner.mjs +1 -1
- package/dist/Database/Seeders/SeederRunner.mjs.map +1 -1
- package/dist/Deploy/Deployer.cjs +1 -1
- package/dist/Deploy/Deployer.mjs +1 -1
- package/dist/Deploy/Deployer.mjs.map +1 -1
- package/dist/Deploy/ProjectConfig.mjs.map +1 -1
- package/dist/Deploy/Provisioner.cjs +1 -1
- package/dist/Deploy/Provisioner.mjs +1 -1
- package/dist/Deploy/Provisioner.mjs.map +1 -1
- package/dist/Deploy/SSHConnection.mjs.map +1 -1
- package/dist/Deploy/SymphonyClient.cjs +1 -1
- package/dist/Deploy/SymphonyClient.mjs +1 -1
- package/dist/Deploy/SymphonyClient.mjs.map +1 -1
- package/dist/Deploy/TarBuilder.mjs.map +1 -1
- package/dist/Deploy/prompt.mjs.map +1 -1
- package/dist/Events/Dispatcher.cjs +1 -1
- package/dist/Events/Dispatcher.mjs +1 -1
- package/dist/Events/Dispatcher.mjs.map +1 -1
- package/dist/Events/EventServiceProvider.cjs +1 -1
- package/dist/Events/EventServiceProvider.mjs.map +1 -1
- package/dist/Facades/Bus.mjs.map +1 -1
- package/dist/Facades/Cache.mjs.map +1 -1
- package/dist/Facades/Config.mjs.map +1 -1
- package/dist/Facades/DB.mjs.map +1 -1
- package/dist/Facades/Event.mjs.map +1 -1
- package/dist/Facades/Queue.mjs.map +1 -1
- package/dist/Facades/Route.mjs.map +1 -1
- package/dist/Facades/View.mjs.map +1 -1
- package/dist/Foundation/Application.mjs.map +1 -1
- package/dist/Foundation/Http/FormRequest.mjs.map +1 -1
- package/dist/Foundation/Http/Rules/AnyOfRule.mjs.map +1 -1
- package/dist/Foundation/Http/Rules/ImageFileRule.mjs.map +1 -1
- package/dist/Foundation/Http/Validator.mjs.map +1 -1
- package/dist/Queue/Batching/Batch.cjs +1 -1
- package/dist/Queue/Batching/Batch.mjs +1 -1
- package/dist/Queue/Batching/Batch.mjs.map +1 -1
- package/dist/Queue/Batching/PendingBatch.cjs +1 -1
- package/dist/Queue/Batching/PendingBatch.mjs +1 -1
- package/dist/Queue/Batching/PendingBatch.mjs.map +1 -1
- package/dist/Queue/Concerns/Dispatchable.mjs.map +1 -1
- package/dist/Queue/Drivers/DatabaseDriver.cjs +1 -1
- package/dist/Queue/Drivers/DatabaseDriver.mjs +1 -1
- package/dist/Queue/Drivers/DatabaseDriver.mjs.map +1 -1
- package/dist/Queue/Drivers/NullDriver.cjs +1 -1
- package/dist/Queue/Drivers/NullDriver.mjs +1 -1
- package/dist/Queue/Drivers/NullDriver.mjs.map +1 -1
- package/dist/Queue/Drivers/SyncDriver.cjs +1 -1
- package/dist/Queue/Drivers/SyncDriver.mjs +1 -1
- package/dist/Queue/Drivers/SyncDriver.mjs.map +1 -1
- package/dist/Queue/Events/JobExceptionOccurred.cjs +1 -1
- package/dist/Queue/Events/JobExceptionOccurred.mjs +1 -1
- package/dist/Queue/Events/JobExceptionOccurred.mjs.map +1 -1
- package/dist/Queue/Events/JobFailed.cjs +1 -1
- package/dist/Queue/Events/JobFailed.mjs +1 -1
- package/dist/Queue/Events/JobFailed.mjs.map +1 -1
- package/dist/Queue/Events/JobProcessed.cjs +1 -1
- package/dist/Queue/Events/JobProcessed.mjs +1 -1
- package/dist/Queue/Events/JobProcessed.mjs.map +1 -1
- package/dist/Queue/Events/JobProcessing.cjs +1 -1
- package/dist/Queue/Events/JobProcessing.mjs +1 -1
- package/dist/Queue/Events/JobProcessing.mjs.map +1 -1
- package/dist/Queue/Events/JobQueued.cjs +1 -1
- package/dist/Queue/Events/JobQueued.mjs +1 -1
- package/dist/Queue/Events/JobQueued.mjs.map +1 -1
- package/dist/Queue/Events/JobRetryRequested.cjs +1 -1
- package/dist/Queue/Events/JobRetryRequested.mjs +1 -1
- package/dist/Queue/Events/JobRetryRequested.mjs.map +1 -1
- package/dist/Queue/Events/WorkerStopping.cjs +1 -1
- package/dist/Queue/Events/WorkerStopping.mjs +1 -1
- package/dist/Queue/Events/WorkerStopping.mjs.map +1 -1
- package/dist/Queue/Failed/DatabaseFailedJobProvider.cjs +1 -1
- package/dist/Queue/Failed/DatabaseFailedJobProvider.mjs +1 -1
- package/dist/Queue/Failed/DatabaseFailedJobProvider.mjs.map +1 -1
- package/dist/Queue/Middleware/RateLimited.cjs +1 -1
- package/dist/Queue/Middleware/RateLimited.mjs +1 -1
- package/dist/Queue/Middleware/RateLimited.mjs.map +1 -1
- package/dist/Queue/Middleware/ThrottlesExceptions.cjs +1 -1
- package/dist/Queue/Middleware/ThrottlesExceptions.mjs +1 -1
- package/dist/Queue/Middleware/ThrottlesExceptions.mjs.map +1 -1
- package/dist/Queue/Middleware/WithoutOverlapping.cjs +1 -1
- package/dist/Queue/Middleware/WithoutOverlapping.mjs +1 -1
- package/dist/Queue/Middleware/WithoutOverlapping.mjs.map +1 -1
- package/dist/Queue/PendingChain.cjs +1 -1
- package/dist/Queue/PendingChain.mjs +1 -1
- package/dist/Queue/PendingChain.mjs.map +1 -1
- package/dist/Queue/PendingDispatch.cjs +1 -1
- package/dist/Queue/PendingDispatch.mjs +1 -1
- package/dist/Queue/PendingDispatch.mjs.map +1 -1
- package/dist/Queue/QueueManager.cjs +1 -1
- package/dist/Queue/QueueManager.mjs +1 -1
- package/dist/Queue/QueueManager.mjs.map +1 -1
- package/dist/Queue/QueueServiceProvider.mjs.map +1 -1
- package/dist/Queue/Workers/Worker.cjs +1 -1
- package/dist/Queue/Workers/Worker.mjs +1 -1
- package/dist/Queue/Workers/Worker.mjs.map +1 -1
- package/dist/Routing/Request.mjs.map +1 -1
- package/dist/Routing/Response.mjs.map +1 -1
- package/dist/Support/EventDiscovery.cjs +1 -1
- package/dist/Support/EventDiscovery.mjs +1 -1
- package/dist/Support/EventDiscovery.mjs.map +1 -1
- package/dist/Support/Testing/Fakes/EventFake.cjs +1 -1
- package/dist/Support/Testing/Fakes/EventFake.mjs +1 -1
- package/dist/Support/Testing/Fakes/EventFake.mjs.map +1 -1
- package/dist/Support/helpers.mjs.map +1 -1
- package/dist/View/Engines/TemplateEngine.mjs.map +1 -1
- package/package.json +17 -17
package/CHANGELOG.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./Repository.cjs`);var t=class{stores=new Map;driverFactories=new Map;constructor(e){this.config=e}registerDriver(e,t){this.driverFactories.set(e,t)}store(e){let t=e||this.config.default;if(this.stores.has(t))return this.stores.get(t);let n=this.createStore(t);return this.stores.set(t,n),n}createStore(t){let n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);let r=this.driverFactories.get(n.driver);if(!r)throw Error(`Cache driver [${n.driver}] not registered. Available drivers: ${Array.from(this.driverFactories.keys()).join(`, `)}`);let i=new e.Repository(r(n),n);return i.setStoreName(t),i}extend(e,t){this.registerDriver(e,t)}getDefaultDriver(){return this.config.default}setDefaultDriver(e){this.config.default=e}getPrefix(){return this.config.prefix}getStoreNames(){return Object.keys(this.config.stores)}getStoreConfig(e){let t=e||this.config.default,n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);return n}getConfig(){return this.config}purge(e){let t=e||this.config.default;this.stores.delete(t)}purgeAll(){this.stores.clear()}async get(e,t){return this.store().get(e,t)}async put(e,t,n){return this.store().put(e,t,n)}async has(e){return this.store().has(e)}async forget(e){return this.store().forget(e)}async flush(){return this.store().flush()}async remember(e,t,n){return this.store().remember(e,t,n)}async rememberForever(e,t){return this.store().rememberForever(e,t)}async forever(e,t){return this.store().forever(e,t)}async pull(e,t){return this.store().pull(e,t)}async many(e){return this.store().many(e)}async putMany(e,t){return this.store().putMany(e,t)}async increment(e,t){return this.store().increment(e,t)}async decrement(e,t){return this.store().decrement(e,t)}async add(e,t,n){return this.store().add(e,t,n)}};exports.CacheManager=t;
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./Repository.cjs`);var t=class{config;stores=new Map;driverFactories=new Map;constructor(e){this.config=e}registerDriver(e,t){this.driverFactories.set(e,t)}store(e){let t=e||this.config.default;if(this.stores.has(t))return this.stores.get(t);let n=this.createStore(t);return this.stores.set(t,n),n}createStore(t){let n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);let r=this.driverFactories.get(n.driver);if(!r)throw Error(`Cache driver [${n.driver}] not registered. Available drivers: ${Array.from(this.driverFactories.keys()).join(`, `)}`);let i=new e.Repository(r(n),n);return i.setStoreName(t),i}extend(e,t){this.registerDriver(e,t)}getDefaultDriver(){return this.config.default}setDefaultDriver(e){this.config.default=e}getPrefix(){return this.config.prefix}getStoreNames(){return Object.keys(this.config.stores)}getStoreConfig(e){let t=e||this.config.default,n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);return n}getConfig(){return this.config}purge(e){let t=e||this.config.default;this.stores.delete(t)}purgeAll(){this.stores.clear()}async get(e,t){return this.store().get(e,t)}async put(e,t,n){return this.store().put(e,t,n)}async has(e){return this.store().has(e)}async forget(e){return this.store().forget(e)}async flush(){return this.store().flush()}async remember(e,t,n){return this.store().remember(e,t,n)}async rememberForever(e,t){return this.store().rememberForever(e,t)}async forever(e,t){return this.store().forever(e,t)}async pull(e,t){return this.store().pull(e,t)}async many(e){return this.store().many(e)}async putMany(e,t){return this.store().putMany(e,t)}async increment(e,t){return this.store().increment(e,t)}async decrement(e,t){return this.store().decrement(e,t)}async add(e,t,n){return this.store().add(e,t,n)}};exports.CacheManager=t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Repository as e}from"./Repository.mjs";var t=class{stores=new Map;driverFactories=new Map;constructor(e){this.config=e}registerDriver(e,t){this.driverFactories.set(e,t)}store(e){let t=e||this.config.default;if(this.stores.has(t))return this.stores.get(t);let n=this.createStore(t);return this.stores.set(t,n),n}createStore(t){let n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);let r=this.driverFactories.get(n.driver);if(!r)throw Error(`Cache driver [${n.driver}] not registered. Available drivers: ${Array.from(this.driverFactories.keys()).join(`, `)}`);let i=new e(r(n),n);return i.setStoreName(t),i}extend(e,t){this.registerDriver(e,t)}getDefaultDriver(){return this.config.default}setDefaultDriver(e){this.config.default=e}getPrefix(){return this.config.prefix}getStoreNames(){return Object.keys(this.config.stores)}getStoreConfig(e){let t=e||this.config.default,n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);return n}getConfig(){return this.config}purge(e){let t=e||this.config.default;this.stores.delete(t)}purgeAll(){this.stores.clear()}async get(e,t){return this.store().get(e,t)}async put(e,t,n){return this.store().put(e,t,n)}async has(e){return this.store().has(e)}async forget(e){return this.store().forget(e)}async flush(){return this.store().flush()}async remember(e,t,n){return this.store().remember(e,t,n)}async rememberForever(e,t){return this.store().rememberForever(e,t)}async forever(e,t){return this.store().forever(e,t)}async pull(e,t){return this.store().pull(e,t)}async many(e){return this.store().many(e)}async putMany(e,t){return this.store().putMany(e,t)}async increment(e,t){return this.store().increment(e,t)}async decrement(e,t){return this.store().decrement(e,t)}async add(e,t,n){return this.store().add(e,t,n)}};export{t as CacheManager};
|
|
1
|
+
import{Repository as e}from"./Repository.mjs";var t=class{config;stores=new Map;driverFactories=new Map;constructor(e){this.config=e}registerDriver(e,t){this.driverFactories.set(e,t)}store(e){let t=e||this.config.default;if(this.stores.has(t))return this.stores.get(t);let n=this.createStore(t);return this.stores.set(t,n),n}createStore(t){let n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);let r=this.driverFactories.get(n.driver);if(!r)throw Error(`Cache driver [${n.driver}] not registered. Available drivers: ${Array.from(this.driverFactories.keys()).join(`, `)}`);let i=new e(r(n),n);return i.setStoreName(t),i}extend(e,t){this.registerDriver(e,t)}getDefaultDriver(){return this.config.default}setDefaultDriver(e){this.config.default=e}getPrefix(){return this.config.prefix}getStoreNames(){return Object.keys(this.config.stores)}getStoreConfig(e){let t=e||this.config.default,n=this.config.stores[t];if(!n)throw Error(`Cache store [${t}] not configured.`);return n}getConfig(){return this.config}purge(e){let t=e||this.config.default;this.stores.delete(t)}purgeAll(){this.stores.clear()}async get(e,t){return this.store().get(e,t)}async put(e,t,n){return this.store().put(e,t,n)}async has(e){return this.store().has(e)}async forget(e){return this.store().forget(e)}async flush(){return this.store().flush()}async remember(e,t,n){return this.store().remember(e,t,n)}async rememberForever(e,t){return this.store().rememberForever(e,t)}async forever(e,t){return this.store().forever(e,t)}async pull(e,t){return this.store().pull(e,t)}async many(e){return this.store().many(e)}async putMany(e,t){return this.store().putMany(e,t)}async increment(e,t){return this.store().increment(e,t)}async decrement(e,t){return this.store().decrement(e,t)}async add(e,t,n){return this.store().add(e,t,n)}};export{t as CacheManager};
|
|
2
2
|
//# sourceMappingURL=CacheManager.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheManager.mjs","names":[],"sources":["../../src/Cache/CacheManager.ts"],"sourcesContent":["/**\n * CacheManager\n *\n * Manages multiple cache store connections.\n * Follows the Manager pattern established by DatabaseManager and QueueManager.\n *\n * Mirrors Laravel's Illuminate\\Cache\\CacheManager.\n *\n * @example\n * ```typescript\n * const manager = new CacheManager({\n * default: 'file',\n * prefix: 'app_',\n * stores: {\n * file: { driver: 'file', path: 'storage/cache' },\n * array: { driver: 'array' },\n * database: { driver: 'database', table: 'cache' },\n * },\n * });\n *\n * // Use default store\n * const repo = manager.store();\n * await repo.put('key', 'value', 3600);\n *\n * // Use specific store\n * const redis = manager.store('redis');\n * ```\n */\n\nimport type { Store } from './Contracts/Store';\nimport { Repository } from './Repository';\n\nexport interface StoreConfig {\n driver: string;\n [key: string]: any;\n}\n\nexport interface CacheConfig {\n default: string;\n prefix: string;\n stores: Record<string, StoreConfig>;\n}\n\nexport type StoreFactory = (config: StoreConfig) => Store;\n\nexport class CacheManager {\n protected stores: Map<string, Repository> = new Map();\n protected driverFactories: Map<string, StoreFactory> = new Map();\n\n constructor(protected config: CacheConfig) {}\n\n /**\n * Register a cache store driver factory\n */\n registerDriver(name: string, factory: StoreFactory): void {\n this.driverFactories.set(name, factory);\n }\n\n /**\n * Get a cache store instance by name\n */\n store(name?: string): Repository {\n const storeName = name || this.config.default;\n\n if (this.stores.has(storeName)) {\n return this.stores.get(storeName)!;\n }\n\n const repository = this.createStore(storeName);\n this.stores.set(storeName, repository);\n\n return repository;\n }\n\n /**\n * Create a new cache store instance\n */\n protected createStore(name: string): Repository {\n const storeConfig = this.config.stores[name];\n\n if (!storeConfig) {\n throw new Error(`Cache store [${name}] not configured.`);\n }\n\n const factory = this.driverFactories.get(storeConfig.driver);\n\n if (!factory) {\n throw new Error(\n `Cache driver [${storeConfig.driver}] not registered. ` +\n `Available drivers: ${Array.from(this.driverFactories.keys()).join(', ')}`\n );\n }\n\n const store = factory(storeConfig);\n const repository = new Repository(store, storeConfig);\n repository.setStoreName(name);\n\n return repository;\n }\n\n /**\n * Extend the manager with a custom driver\n */\n extend(driver: string, factory: StoreFactory): void {\n this.registerDriver(driver, factory);\n }\n\n /**\n * Get the default store name\n */\n getDefaultDriver(): string {\n return this.config.default;\n }\n\n /**\n * Set the default store name\n */\n setDefaultDriver(name: string): void {\n this.config.default = name;\n }\n\n /**\n * Get the cache prefix\n */\n getPrefix(): string {\n return this.config.prefix;\n }\n\n /**\n * Get all configured store names\n */\n getStoreNames(): string[] {\n return Object.keys(this.config.stores);\n }\n\n /**\n * Get the store configuration\n */\n getStoreConfig(name?: string): StoreConfig {\n const storeName = name || this.config.default;\n const config = this.config.stores[storeName];\n\n if (!config) {\n throw new Error(`Cache store [${storeName}] not configured.`);\n }\n\n return config;\n }\n\n /**\n * Get the full configuration\n */\n getConfig(): CacheConfig {\n return this.config;\n }\n\n /**\n * Purge a store from the cache (remove the cached instance)\n */\n purge(name?: string): void {\n const storeName = name || this.config.default;\n this.stores.delete(storeName);\n }\n\n /**\n * Purge all cached store instances\n */\n purgeAll(): void {\n this.stores.clear();\n }\n\n // --- Proxy methods to default store for convenience ---\n\n async get<T = any>(key: string, defaultValue?: T | (() => T)): Promise<T | null> {\n return this.store().get<T>(key, defaultValue);\n }\n\n async put<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n return this.store().put<T>(key, value, ttl);\n }\n\n async has(key: string): Promise<boolean> {\n return this.store().has(key);\n }\n\n async forget(key: string): Promise<boolean> {\n return this.store().forget(key);\n }\n\n async flush(): Promise<boolean> {\n return this.store().flush();\n }\n\n async remember<T = any>(key: string, ttl: number | Date, callback: () => T | Promise<T>): Promise<T> {\n return this.store().remember<T>(key, ttl, callback);\n }\n\n async rememberForever<T = any>(key: string, callback: () => T | Promise<T>): Promise<T> {\n return this.store().rememberForever<T>(key, callback);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.store().forever<T>(key, value);\n }\n\n async pull<T = any>(key: string, defaultValue?: T): Promise<T | null> {\n return this.store().pull<T>(key, defaultValue);\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n return this.store().many<T>(keys);\n }\n\n async putMany<T = any>(values: Record<string, T>, ttl?: number | Date): Promise<boolean> {\n return this.store().putMany<T>(values, ttl);\n }\n\n async increment(key: string, value?: number): Promise<number | boolean> {\n return this.store().increment(key, value);\n }\n\n async decrement(key: string, value?: number): Promise<number | boolean> {\n return this.store().decrement(key, value);\n }\n\n async add<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n return this.store().add<T>(key, value, ttl);\n }\n}\n"],"mappings":"8CA6CA,IAAa,EAAb,KAA0B,
|
|
1
|
+
{"version":3,"file":"CacheManager.mjs","names":[],"sources":["../../src/Cache/CacheManager.ts"],"sourcesContent":["/**\n * CacheManager\n *\n * Manages multiple cache store connections.\n * Follows the Manager pattern established by DatabaseManager and QueueManager.\n *\n * Mirrors Laravel's Illuminate\\Cache\\CacheManager.\n *\n * @example\n * ```typescript\n * const manager = new CacheManager({\n * default: 'file',\n * prefix: 'app_',\n * stores: {\n * file: { driver: 'file', path: 'storage/cache' },\n * array: { driver: 'array' },\n * database: { driver: 'database', table: 'cache' },\n * },\n * });\n *\n * // Use default store\n * const repo = manager.store();\n * await repo.put('key', 'value', 3600);\n *\n * // Use specific store\n * const redis = manager.store('redis');\n * ```\n */\n\nimport type { Store } from './Contracts/Store';\nimport { Repository } from './Repository';\n\nexport interface StoreConfig {\n driver: string;\n [key: string]: any;\n}\n\nexport interface CacheConfig {\n default: string;\n prefix: string;\n stores: Record<string, StoreConfig>;\n}\n\nexport type StoreFactory = (config: StoreConfig) => Store;\n\nexport class CacheManager {\n protected stores: Map<string, Repository> = new Map();\n protected driverFactories: Map<string, StoreFactory> = new Map();\n\n constructor(protected config: CacheConfig) {}\n\n /**\n * Register a cache store driver factory\n */\n registerDriver(name: string, factory: StoreFactory): void {\n this.driverFactories.set(name, factory);\n }\n\n /**\n * Get a cache store instance by name\n */\n store(name?: string): Repository {\n const storeName = name || this.config.default;\n\n if (this.stores.has(storeName)) {\n return this.stores.get(storeName)!;\n }\n\n const repository = this.createStore(storeName);\n this.stores.set(storeName, repository);\n\n return repository;\n }\n\n /**\n * Create a new cache store instance\n */\n protected createStore(name: string): Repository {\n const storeConfig = this.config.stores[name];\n\n if (!storeConfig) {\n throw new Error(`Cache store [${name}] not configured.`);\n }\n\n const factory = this.driverFactories.get(storeConfig.driver);\n\n if (!factory) {\n throw new Error(\n `Cache driver [${storeConfig.driver}] not registered. ` +\n `Available drivers: ${Array.from(this.driverFactories.keys()).join(', ')}`\n );\n }\n\n const store = factory(storeConfig);\n const repository = new Repository(store, storeConfig);\n repository.setStoreName(name);\n\n return repository;\n }\n\n /**\n * Extend the manager with a custom driver\n */\n extend(driver: string, factory: StoreFactory): void {\n this.registerDriver(driver, factory);\n }\n\n /**\n * Get the default store name\n */\n getDefaultDriver(): string {\n return this.config.default;\n }\n\n /**\n * Set the default store name\n */\n setDefaultDriver(name: string): void {\n this.config.default = name;\n }\n\n /**\n * Get the cache prefix\n */\n getPrefix(): string {\n return this.config.prefix;\n }\n\n /**\n * Get all configured store names\n */\n getStoreNames(): string[] {\n return Object.keys(this.config.stores);\n }\n\n /**\n * Get the store configuration\n */\n getStoreConfig(name?: string): StoreConfig {\n const storeName = name || this.config.default;\n const config = this.config.stores[storeName];\n\n if (!config) {\n throw new Error(`Cache store [${storeName}] not configured.`);\n }\n\n return config;\n }\n\n /**\n * Get the full configuration\n */\n getConfig(): CacheConfig {\n return this.config;\n }\n\n /**\n * Purge a store from the cache (remove the cached instance)\n */\n purge(name?: string): void {\n const storeName = name || this.config.default;\n this.stores.delete(storeName);\n }\n\n /**\n * Purge all cached store instances\n */\n purgeAll(): void {\n this.stores.clear();\n }\n\n // --- Proxy methods to default store for convenience ---\n\n async get<T = any>(key: string, defaultValue?: T | (() => T)): Promise<T | null> {\n return this.store().get<T>(key, defaultValue);\n }\n\n async put<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n return this.store().put<T>(key, value, ttl);\n }\n\n async has(key: string): Promise<boolean> {\n return this.store().has(key);\n }\n\n async forget(key: string): Promise<boolean> {\n return this.store().forget(key);\n }\n\n async flush(): Promise<boolean> {\n return this.store().flush();\n }\n\n async remember<T = any>(key: string, ttl: number | Date, callback: () => T | Promise<T>): Promise<T> {\n return this.store().remember<T>(key, ttl, callback);\n }\n\n async rememberForever<T = any>(key: string, callback: () => T | Promise<T>): Promise<T> {\n return this.store().rememberForever<T>(key, callback);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.store().forever<T>(key, value);\n }\n\n async pull<T = any>(key: string, defaultValue?: T): Promise<T | null> {\n return this.store().pull<T>(key, defaultValue);\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n return this.store().many<T>(keys);\n }\n\n async putMany<T = any>(values: Record<string, T>, ttl?: number | Date): Promise<boolean> {\n return this.store().putMany<T>(values, ttl);\n }\n\n async increment(key: string, value?: number): Promise<number | boolean> {\n return this.store().increment(key, value);\n }\n\n async decrement(key: string, value?: number): Promise<number | boolean> {\n return this.store().decrement(key, value);\n }\n\n async add<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n return this.store().add<T>(key, value, ttl);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{constructor(e,t=[]){this.storeName=e,this.tags=t}};exports.CacheFlushed=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{storeName;tags;constructor(e,t=[]){this.storeName=e,this.tags=t}};exports.CacheFlushed=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{constructor(e,t=[]){this.storeName=e,this.tags=t}};export{e as CacheFlushed};
|
|
1
|
+
var e=class{storeName;tags;constructor(e,t=[]){this.storeName=e,this.tags=t}};export{e as CacheFlushed};
|
|
2
2
|
//# sourceMappingURL=CacheFlushed.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheFlushed.mjs","names":[],"sources":["../../../src/Cache/Events/CacheFlushed.ts"],"sourcesContent":["/**\n * CacheFlushed Event\n *\n * Dispatched after all items have been flushed from the cache.\n */\nexport class CacheFlushed {\n constructor(\n public readonly storeName: string,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAA0B,
|
|
1
|
+
{"version":3,"file":"CacheFlushed.mjs","names":[],"sources":["../../../src/Cache/Events/CacheFlushed.ts"],"sourcesContent":["/**\n * CacheFlushed Event\n *\n * Dispatched after all items have been flushed from the cache.\n */\nexport class CacheFlushed {\n constructor(\n public readonly storeName: string,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAA0B,CAEN,UACA,KAFlB,YACE,EACA,EAAiC,EAAE,CACnC,CAFgB,KAAA,UAAA,EACA,KAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{constructor(e,t,n,r=[]){this.storeName=e,this.key=t,this.value=n,this.tags=r}};exports.CacheHit=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{storeName;key;value;tags;constructor(e,t,n,r=[]){this.storeName=e,this.key=t,this.value=n,this.tags=r}};exports.CacheHit=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{constructor(e,t,n,r=[]){this.storeName=e,this.key=t,this.value=n,this.tags=r}};export{e as CacheHit};
|
|
1
|
+
var e=class{storeName;key;value;tags;constructor(e,t,n,r=[]){this.storeName=e,this.key=t,this.value=n,this.tags=r}};export{e as CacheHit};
|
|
2
2
|
//# sourceMappingURL=CacheHit.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheHit.mjs","names":[],"sources":["../../../src/Cache/Events/CacheHit.ts"],"sourcesContent":["/**\n * CacheHit Event\n *\n * Dispatched when a cache key is found.\n */\nexport class CacheHit {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly value: any,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAAsB,
|
|
1
|
+
{"version":3,"file":"CacheHit.mjs","names":[],"sources":["../../../src/Cache/Events/CacheHit.ts"],"sourcesContent":["/**\n * CacheHit Event\n *\n * Dispatched when a cache key is found.\n */\nexport class CacheHit {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly value: any,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAAsB,CAEF,UACA,IACA,MACA,KAJlB,YACE,EACA,EACA,EACA,EAAiC,EAAE,CACnC,CAJgB,KAAA,UAAA,EACA,KAAA,IAAA,EACA,KAAA,MAAA,EACA,KAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};exports.CacheMissed=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{storeName;key;tags;constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};exports.CacheMissed=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};export{e as CacheMissed};
|
|
1
|
+
var e=class{storeName;key;tags;constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};export{e as CacheMissed};
|
|
2
2
|
//# sourceMappingURL=CacheMissed.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheMissed.mjs","names":[],"sources":["../../../src/Cache/Events/CacheMissed.ts"],"sourcesContent":["/**\n * CacheMissed Event\n *\n * Dispatched when a cache key is not found.\n */\nexport class CacheMissed {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAAyB,
|
|
1
|
+
{"version":3,"file":"CacheMissed.mjs","names":[],"sources":["../../../src/Cache/Events/CacheMissed.ts"],"sourcesContent":["/**\n * CacheMissed Event\n *\n * Dispatched when a cache key is not found.\n */\nexport class CacheMissed {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAAyB,CAEL,UACA,IACA,KAHlB,YACE,EACA,EACA,EAAiC,EAAE,CACnC,CAHgB,KAAA,UAAA,EACA,KAAA,IAAA,EACA,KAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};exports.KeyForgotten=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{storeName;key;tags;constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};exports.KeyForgotten=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};export{e as KeyForgotten};
|
|
1
|
+
var e=class{storeName;key;tags;constructor(e,t,n=[]){this.storeName=e,this.key=t,this.tags=n}};export{e as KeyForgotten};
|
|
2
2
|
//# sourceMappingURL=KeyForgotten.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyForgotten.mjs","names":[],"sources":["../../../src/Cache/Events/KeyForgotten.ts"],"sourcesContent":["/**\n * KeyForgotten Event\n *\n * Dispatched when a key is removed from the cache.\n */\nexport class KeyForgotten {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAA0B,
|
|
1
|
+
{"version":3,"file":"KeyForgotten.mjs","names":[],"sources":["../../../src/Cache/Events/KeyForgotten.ts"],"sourcesContent":["/**\n * KeyForgotten Event\n *\n * Dispatched when a key is removed from the cache.\n */\nexport class KeyForgotten {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAA0B,CAEN,UACA,IACA,KAHlB,YACE,EACA,EACA,EAAiC,EAAE,CACnC,CAHgB,KAAA,UAAA,EACA,KAAA,IAAA,EACA,KAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{constructor(e,t,n,r,i=[]){this.storeName=e,this.key=t,this.value=n,this.seconds=r,this.tags=i}};exports.KeyWritten=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{storeName;key;value;seconds;tags;constructor(e,t,n,r,i=[]){this.storeName=e,this.key=t,this.value=n,this.seconds=r,this.tags=i}};exports.KeyWritten=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{constructor(e,t,n,r,i=[]){this.storeName=e,this.key=t,this.value=n,this.seconds=r,this.tags=i}};export{e as KeyWritten};
|
|
1
|
+
var e=class{storeName;key;value;seconds;tags;constructor(e,t,n,r,i=[]){this.storeName=e,this.key=t,this.value=n,this.seconds=r,this.tags=i}};export{e as KeyWritten};
|
|
2
2
|
//# sourceMappingURL=KeyWritten.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyWritten.mjs","names":[],"sources":["../../../src/Cache/Events/KeyWritten.ts"],"sourcesContent":["/**\n * KeyWritten Event\n *\n * Dispatched when a value is written to the cache.\n */\nexport class KeyWritten {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly value: any,\n public readonly seconds: number | null,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAAwB,
|
|
1
|
+
{"version":3,"file":"KeyWritten.mjs","names":[],"sources":["../../../src/Cache/Events/KeyWritten.ts"],"sourcesContent":["/**\n * KeyWritten Event\n *\n * Dispatched when a value is written to the cache.\n */\nexport class KeyWritten {\n constructor(\n public readonly storeName: string,\n public readonly key: string,\n public readonly value: any,\n public readonly seconds: number | null,\n public readonly tags: string[] = []\n ) {}\n}\n"],"mappings":"AAKA,IAAa,EAAb,KAAwB,CAEJ,UACA,IACA,MACA,QACA,KALlB,YACE,EACA,EACA,EACA,EACA,EAAiC,EAAE,CACnC,CALgB,KAAA,UAAA,EACA,KAAA,IAAA,EACA,KAAA,MAAA,EACA,KAAA,QAAA,EACA,KAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./Lock.cjs`);var t=class extends e.Lock{constructor(e,t,n=0,r){super(t,n,r),this.store=e}async acquire(){let e=await this.store.get(this.name);return e===null?this.seconds>0?this.store.put(this.name,this.ownerValue,this.seconds):this.store.forever(this.name,this.ownerValue):e===this.ownerValue}async release(){return await this.isOwnedByCurrentProcess()?this.store.forget(this.name):!1}async forceRelease(){return this.store.forget(this.name)}async getCurrentOwner(){return this.store.get(this.name)}};exports.CacheLock=t;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./Lock.cjs`);var t=class extends e.Lock{store;constructor(e,t,n=0,r){super(t,n,r),this.store=e}async acquire(){let e=await this.store.get(this.name);return e===null?this.seconds>0?this.store.put(this.name,this.ownerValue,this.seconds):this.store.forever(this.name,this.ownerValue):e===this.ownerValue}async release(){return await this.isOwnedByCurrentProcess()?this.store.forget(this.name):!1}async forceRelease(){return this.store.forget(this.name)}async getCurrentOwner(){return this.store.get(this.name)}};exports.CacheLock=t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Lock as e}from"./Lock.mjs";var t=class extends e{constructor(e,t,n=0,r){super(t,n,r),this.store=e}async acquire(){let e=await this.store.get(this.name);return e===null?this.seconds>0?this.store.put(this.name,this.ownerValue,this.seconds):this.store.forever(this.name,this.ownerValue):e===this.ownerValue}async release(){return await this.isOwnedByCurrentProcess()?this.store.forget(this.name):!1}async forceRelease(){return this.store.forget(this.name)}async getCurrentOwner(){return this.store.get(this.name)}};export{t as CacheLock};
|
|
1
|
+
import{Lock as e}from"./Lock.mjs";var t=class extends e{store;constructor(e,t,n=0,r){super(t,n,r),this.store=e}async acquire(){let e=await this.store.get(this.name);return e===null?this.seconds>0?this.store.put(this.name,this.ownerValue,this.seconds):this.store.forever(this.name,this.ownerValue):e===this.ownerValue}async release(){return await this.isOwnedByCurrentProcess()?this.store.forget(this.name):!1}async forceRelease(){return this.store.forget(this.name)}async getCurrentOwner(){return this.store.get(this.name)}};export{t as CacheLock};
|
|
2
2
|
//# sourceMappingURL=CacheLock.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheLock.mjs","names":[],"sources":["../../../src/Cache/Locks/CacheLock.ts"],"sourcesContent":["/**\n * CacheLock\n *\n * Cache store-backed atomic lock implementation.\n * Uses the cache store's add/forget methods for locking.\n *\n * Mirrors Laravel's Illuminate\\Cache\\CacheLock.\n */\n\nimport type { Store } from '@/Cache/Contracts/Store';\nimport { Lock } from './Lock';\n\nexport class CacheLock extends Lock {\n constructor(\n protected store: Store,\n name: string,\n seconds: number = 0,\n owner?: string\n ) {\n super(name, seconds, owner);\n }\n\n protected async acquire(): Promise<boolean> {\n // Check if already locked\n const existing = await this.store.get(this.name);\n\n if (existing !== null) {\n // Already locked - check if it's us\n if (existing === this.ownerValue) {\n return true;\n }\n return false;\n }\n\n // Acquire the lock\n if (this.seconds > 0) {\n return this.store.put(this.name, this.ownerValue, this.seconds);\n }\n\n return this.store.forever(this.name, this.ownerValue);\n }\n\n async release(): Promise<boolean> {\n if (await this.isOwnedByCurrentProcess()) {\n return this.store.forget(this.name);\n }\n return false;\n }\n\n async forceRelease(): Promise<boolean> {\n return this.store.forget(this.name);\n }\n\n protected async getCurrentOwner(): Promise<string | null> {\n return this.store.get(this.name);\n }\n}\n"],"mappings":"kCAYA,IAAa,EAAb,cAA+B,CAAK,
|
|
1
|
+
{"version":3,"file":"CacheLock.mjs","names":[],"sources":["../../../src/Cache/Locks/CacheLock.ts"],"sourcesContent":["/**\n * CacheLock\n *\n * Cache store-backed atomic lock implementation.\n * Uses the cache store's add/forget methods for locking.\n *\n * Mirrors Laravel's Illuminate\\Cache\\CacheLock.\n */\n\nimport type { Store } from '@/Cache/Contracts/Store';\nimport { Lock } from './Lock';\n\nexport class CacheLock extends Lock {\n constructor(\n protected store: Store,\n name: string,\n seconds: number = 0,\n owner?: string\n ) {\n super(name, seconds, owner);\n }\n\n protected async acquire(): Promise<boolean> {\n // Check if already locked\n const existing = await this.store.get(this.name);\n\n if (existing !== null) {\n // Already locked - check if it's us\n if (existing === this.ownerValue) {\n return true;\n }\n return false;\n }\n\n // Acquire the lock\n if (this.seconds > 0) {\n return this.store.put(this.name, this.ownerValue, this.seconds);\n }\n\n return this.store.forever(this.name, this.ownerValue);\n }\n\n async release(): Promise<boolean> {\n if (await this.isOwnedByCurrentProcess()) {\n return this.store.forget(this.name);\n }\n return false;\n }\n\n async forceRelease(): Promise<boolean> {\n return this.store.forget(this.name);\n }\n\n protected async getCurrentOwner(): Promise<string | null> {\n return this.store.get(this.name);\n }\n}\n"],"mappings":"kCAYA,IAAa,EAAb,cAA+B,CAAK,CAEtB,MADZ,YACE,EACA,EACA,EAAkB,EAClB,EACA,CACA,MAAM,EAAM,EAAS,EAAM,CALjB,KAAA,MAAA,EAQZ,MAAgB,SAA4B,CAE1C,IAAM,EAAW,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,CAehD,OAbI,IAAa,KASb,KAAK,QAAU,EACV,KAAK,MAAM,IAAI,KAAK,KAAM,KAAK,WAAY,KAAK,QAAQ,CAG1D,KAAK,MAAM,QAAQ,KAAK,KAAM,KAAK,WAAW,CAX/C,IAAa,KAAK,WAc1B,MAAM,SAA4B,CAIhC,OAHI,MAAM,KAAK,yBAAyB,CAC/B,KAAK,MAAM,OAAO,KAAK,KAAK,CAE9B,GAGT,MAAM,cAAiC,CACrC,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK,CAGrC,MAAgB,iBAA0C,CACxD,OAAO,KAAK,MAAM,IAAI,KAAK,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./LockTimeoutException.cjs`);let t=require(`crypto`);var n=class{ownerValue;constructor(e,n=0,r){this.name=e,this.seconds=n,this.ownerValue=r||(0,t.randomUUID)()}async get(e){if(!await this.acquire())return!1;if(e)try{return await e()}finally{await this.release()}return!0}async block(t,n){let r=Date.now(),i=t*1e3;for(;Date.now()-r<i;){if(await this.acquire()){if(n)try{return await n()}finally{await this.release()}return!0}await this.sleep(250)}throw new e.LockTimeoutException(`Unable to acquire lock [${this.name}] within ${t} second(s).`)}owner(){return this.ownerValue}async isOwnedByCurrentProcess(){return await this.getCurrentOwner()===this.ownerValue}sleep(e){return new Promise(t=>setTimeout(t,e))}};exports.Lock=n;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./LockTimeoutException.cjs`);let t=require(`crypto`);var n=class{name;seconds;ownerValue;constructor(e,n=0,r){this.name=e,this.seconds=n,this.ownerValue=r||(0,t.randomUUID)()}async get(e){if(!await this.acquire())return!1;if(e)try{return await e()}finally{await this.release()}return!0}async block(t,n){let r=Date.now(),i=t*1e3;for(;Date.now()-r<i;){if(await this.acquire()){if(n)try{return await n()}finally{await this.release()}return!0}await this.sleep(250)}throw new e.LockTimeoutException(`Unable to acquire lock [${this.name}] within ${t} second(s).`)}owner(){return this.ownerValue}async isOwnedByCurrentProcess(){return await this.getCurrentOwner()===this.ownerValue}sleep(e){return new Promise(t=>setTimeout(t,e))}};exports.Lock=n;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{LockTimeoutException as e}from"./LockTimeoutException.mjs";import{randomUUID as t}from"crypto";var n=class{ownerValue;constructor(e,n=0,r){this.name=e,this.seconds=n,this.ownerValue=r||t()}async get(e){if(!await this.acquire())return!1;if(e)try{return await e()}finally{await this.release()}return!0}async block(t,n){let r=Date.now(),i=t*1e3;for(;Date.now()-r<i;){if(await this.acquire()){if(n)try{return await n()}finally{await this.release()}return!0}await this.sleep(250)}throw new e(`Unable to acquire lock [${this.name}] within ${t} second(s).`)}owner(){return this.ownerValue}async isOwnedByCurrentProcess(){return await this.getCurrentOwner()===this.ownerValue}sleep(e){return new Promise(t=>setTimeout(t,e))}};export{n as Lock};
|
|
1
|
+
import{LockTimeoutException as e}from"./LockTimeoutException.mjs";import{randomUUID as t}from"crypto";var n=class{name;seconds;ownerValue;constructor(e,n=0,r){this.name=e,this.seconds=n,this.ownerValue=r||t()}async get(e){if(!await this.acquire())return!1;if(e)try{return await e()}finally{await this.release()}return!0}async block(t,n){let r=Date.now(),i=t*1e3;for(;Date.now()-r<i;){if(await this.acquire()){if(n)try{return await n()}finally{await this.release()}return!0}await this.sleep(250)}throw new e(`Unable to acquire lock [${this.name}] within ${t} second(s).`)}owner(){return this.ownerValue}async isOwnedByCurrentProcess(){return await this.getCurrentOwner()===this.ownerValue}sleep(e){return new Promise(t=>setTimeout(t,e))}};export{n as Lock};
|
|
2
2
|
//# sourceMappingURL=Lock.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lock.mjs","names":[],"sources":["../../../src/Cache/Locks/Lock.ts"],"sourcesContent":["/**\n * Lock Base Class\n *\n * Abstract base class for atomic lock implementations.\n * Provides the shared logic for acquiring, blocking, and releasing locks.\n *\n * Mirrors Laravel's Illuminate\\Cache\\Lock.\n */\n\nimport { randomUUID } from 'crypto';\nimport type { LockContract } from '@/Cache/Contracts/Lock';\nimport { LockTimeoutException } from './LockTimeoutException';\n\nexport abstract class Lock implements LockContract {\n protected ownerValue: string;\n\n constructor(\n protected name: string,\n protected seconds: number = 0,\n owner?: string\n ) {\n this.ownerValue = owner || randomUUID();\n }\n\n /**\n * Attempt to acquire the lock at the driver level\n */\n protected abstract acquire(): Promise<boolean>;\n\n /**\n * Release the lock at the driver level\n */\n abstract release(): Promise<boolean>;\n\n /**\n * Force release the lock regardless of ownership\n */\n abstract forceRelease(): Promise<boolean>;\n\n /**\n * Get the current owner of the lock from the store\n */\n protected abstract getCurrentOwner(): Promise<string | null>;\n\n /**\n * Attempt to acquire the lock.\n * If a callback is provided, execute it and auto-release.\n */\n async get(): Promise<boolean>;\n async get<T = any>(callback: () => Promise<T> | T): Promise<T>;\n async get<T = any>(callback?: () => Promise<T> | T): Promise<boolean | T> {\n const acquired = await this.acquire();\n\n if (!acquired) {\n return false;\n }\n\n if (callback) {\n try {\n return await callback();\n } finally {\n await this.release();\n }\n }\n\n return true;\n }\n\n /**\n * Block until the lock is acquired or timeout expires.\n * If a callback is provided, execute it and auto-release.\n */\n async block(seconds: number): Promise<boolean>;\n async block<T = any>(seconds: number, callback: () => Promise<T> | T): Promise<T>;\n async block<T = any>(seconds: number, callback?: () => Promise<T> | T): Promise<boolean | T> {\n const startTime = Date.now();\n const timeoutMs = seconds * 1000;\n\n while (Date.now() - startTime < timeoutMs) {\n if (await this.acquire()) {\n if (callback) {\n try {\n return await callback();\n } finally {\n await this.release();\n }\n }\n return true;\n }\n\n await this.sleep(250);\n }\n\n throw new LockTimeoutException(`Unable to acquire lock [${this.name}] within ${seconds} second(s).`);\n }\n\n /**\n * Returns the lock owner identifier\n */\n owner(): string {\n return this.ownerValue;\n }\n\n /**\n * Check if the lock is owned by the current process\n */\n async isOwnedByCurrentProcess(): Promise<boolean> {\n const currentOwner = await this.getCurrentOwner();\n return currentOwner === this.ownerValue;\n }\n\n protected sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n"],"mappings":"sGAaA,IAAsB,EAAtB,KAAmD,
|
|
1
|
+
{"version":3,"file":"Lock.mjs","names":[],"sources":["../../../src/Cache/Locks/Lock.ts"],"sourcesContent":["/**\n * Lock Base Class\n *\n * Abstract base class for atomic lock implementations.\n * Provides the shared logic for acquiring, blocking, and releasing locks.\n *\n * Mirrors Laravel's Illuminate\\Cache\\Lock.\n */\n\nimport { randomUUID } from 'crypto';\nimport type { LockContract } from '@/Cache/Contracts/Lock';\nimport { LockTimeoutException } from './LockTimeoutException';\n\nexport abstract class Lock implements LockContract {\n protected ownerValue: string;\n\n constructor(\n protected name: string,\n protected seconds: number = 0,\n owner?: string\n ) {\n this.ownerValue = owner || randomUUID();\n }\n\n /**\n * Attempt to acquire the lock at the driver level\n */\n protected abstract acquire(): Promise<boolean>;\n\n /**\n * Release the lock at the driver level\n */\n abstract release(): Promise<boolean>;\n\n /**\n * Force release the lock regardless of ownership\n */\n abstract forceRelease(): Promise<boolean>;\n\n /**\n * Get the current owner of the lock from the store\n */\n protected abstract getCurrentOwner(): Promise<string | null>;\n\n /**\n * Attempt to acquire the lock.\n * If a callback is provided, execute it and auto-release.\n */\n async get(): Promise<boolean>;\n async get<T = any>(callback: () => Promise<T> | T): Promise<T>;\n async get<T = any>(callback?: () => Promise<T> | T): Promise<boolean | T> {\n const acquired = await this.acquire();\n\n if (!acquired) {\n return false;\n }\n\n if (callback) {\n try {\n return await callback();\n } finally {\n await this.release();\n }\n }\n\n return true;\n }\n\n /**\n * Block until the lock is acquired or timeout expires.\n * If a callback is provided, execute it and auto-release.\n */\n async block(seconds: number): Promise<boolean>;\n async block<T = any>(seconds: number, callback: () => Promise<T> | T): Promise<T>;\n async block<T = any>(seconds: number, callback?: () => Promise<T> | T): Promise<boolean | T> {\n const startTime = Date.now();\n const timeoutMs = seconds * 1000;\n\n while (Date.now() - startTime < timeoutMs) {\n if (await this.acquire()) {\n if (callback) {\n try {\n return await callback();\n } finally {\n await this.release();\n }\n }\n return true;\n }\n\n await this.sleep(250);\n }\n\n throw new LockTimeoutException(`Unable to acquire lock [${this.name}] within ${seconds} second(s).`);\n }\n\n /**\n * Returns the lock owner identifier\n */\n owner(): string {\n return this.ownerValue;\n }\n\n /**\n * Check if the lock is owned by the current process\n */\n async isOwnedByCurrentProcess(): Promise<boolean> {\n const currentOwner = await this.getCurrentOwner();\n return currentOwner === this.ownerValue;\n }\n\n protected sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n"],"mappings":"sGAaA,IAAsB,EAAtB,KAAmD,CAIrC,KACA,QAJZ,WAEA,YACE,EACA,EAA4B,EAC5B,EACA,CAHU,KAAA,KAAA,EACA,KAAA,QAAA,EAGV,KAAK,WAAa,GAAS,GAAY,CA6BzC,MAAM,IAAa,EAAuD,CAGxE,GAAI,CAAC,MAFkB,KAAK,SAAS,CAGnC,MAAO,GAGT,GAAI,EACF,GAAI,CACF,OAAO,MAAM,GAAU,QACf,CACR,MAAM,KAAK,SAAS,CAIxB,MAAO,GAST,MAAM,MAAe,EAAiB,EAAuD,CAC3F,IAAM,EAAY,KAAK,KAAK,CACtB,EAAY,EAAU,IAE5B,KAAO,KAAK,KAAK,CAAG,EAAY,GAAW,CACzC,GAAI,MAAM,KAAK,SAAS,CAAE,CACxB,GAAI,EACF,GAAI,CACF,OAAO,MAAM,GAAU,QACf,CACR,MAAM,KAAK,SAAS,CAGxB,MAAO,GAGT,MAAM,KAAK,MAAM,IAAI,CAGvB,MAAM,IAAI,EAAqB,2BAA2B,KAAK,KAAK,WAAW,EAAQ,aAAa,CAMtG,OAAgB,CACd,OAAO,KAAK,WAMd,MAAM,yBAA4C,CAEhD,OAAO,MADoB,KAAK,iBAAiB,GACzB,KAAK,WAG/B,MAAgB,EAA2B,CACzC,OAAO,IAAI,QAAS,GAAY,WAAW,EAAS,EAAG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./Locks/CacheLock.cjs`),t=require(`./Tags/TaggedCache.cjs`),n=require(`./Tags/TagSet.cjs`);var r=class{defaultCacheTime=null;storeName=``;constructor(e,t={}){this.store=e,this.config=t}setStoreName(e){return this.storeName=e,this}async get(e,t){return await this.store.get(e)??(typeof t==`function`?t():t??null)}async many(e){return this.store.many(e)}async put(e,t,n){let r=this.getSeconds(n);return r===null?this.forever(e,t):r<=0?this.forget(e):this.store.put(e,t,r)}async putMany(e,t){let n=this.getSeconds(t)??0;return this.store.putMany(e,n)}async increment(e,t=1){return this.store.increment(e,t)}async decrement(e,t=1){return this.store.decrement(e,t)}async forever(e,t){return this.store.forever(e,t)}async forget(e){return this.store.forget(e)}async flush(){return this.store.flush()}getPrefix(){return this.store.getPrefix()}async has(e){return await this.store.get(e)!=null}async missing(e){return!await this.has(e)}async pull(e,t){let n=await this.get(e,t);return n!=null&&n!==t&&await this.forget(e),n}async add(e,t,n){return await this.has(e)?!1:this.put(e,t,n)}async remember(e,t,n){let r=await this.store.get(e);if(r!=null)return r;let i=await n(),a=this.getSeconds(t);return a!==null&&a>0?await this.store.put(e,i,a):await this.store.forever(e,i),i}async rememberForever(e,t){let n=await this.store.get(e);if(n!=null)return n;let r=await t();return await this.store.forever(e,r),r}async flexible(e,t,n){let[r,i]=t,a=`${e}:flexible_meta`,o=await this.store.get(e),s=await this.store.get(a);if(o!=null&&s&&typeof s==`object`&&s.freshUntil)return Math.floor(Date.now()/1e3)<s.freshUntil||setImmediate(async()=>{try{let t=await n(),o=Math.floor(Date.now()/1e3)+r;await this.store.put(e,t,i),await this.store.put(a,{freshUntil:o},i)}catch{}}),o;let c=await n(),l=Math.floor(Date.now()/1e3)+r;return await this.store.put(e,c,i),await this.store.put(a,{freshUntil:l},i),c}lock(t,n=0,r){return new e.CacheLock(this.store,t,n,r)}restoreLock(t,n){return new e.CacheLock(this.store,t,0,n)}tags(e){let r=Array.isArray(e)?e:[e],i=new n.TagSet(this.store,r);return new t.TaggedCache(this.store,i)}getStore(){return this.store}getDefaultCacheTime(){return this.defaultCacheTime}setDefaultCacheTime(e){return this.defaultCacheTime=e,this}getSeconds(e){if(e==null)return this.defaultCacheTime;if(e instanceof Date){let t=Math.floor((e.getTime()-Date.now())/1e3);return Math.max(0,t)}return e}};exports.Repository=r;
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./Locks/CacheLock.cjs`),t=require(`./Tags/TaggedCache.cjs`),n=require(`./Tags/TagSet.cjs`);var r=class{store;config;defaultCacheTime=null;storeName=``;constructor(e,t={}){this.store=e,this.config=t}setStoreName(e){return this.storeName=e,this}async get(e,t){return await this.store.get(e)??(typeof t==`function`?t():t??null)}async many(e){return this.store.many(e)}async put(e,t,n){let r=this.getSeconds(n);return r===null?this.forever(e,t):r<=0?this.forget(e):this.store.put(e,t,r)}async putMany(e,t){let n=this.getSeconds(t)??0;return this.store.putMany(e,n)}async increment(e,t=1){return this.store.increment(e,t)}async decrement(e,t=1){return this.store.decrement(e,t)}async forever(e,t){return this.store.forever(e,t)}async forget(e){return this.store.forget(e)}async flush(){return this.store.flush()}getPrefix(){return this.store.getPrefix()}async has(e){return await this.store.get(e)!=null}async missing(e){return!await this.has(e)}async pull(e,t){let n=await this.get(e,t);return n!=null&&n!==t&&await this.forget(e),n}async add(e,t,n){return await this.has(e)?!1:this.put(e,t,n)}async remember(e,t,n){let r=await this.store.get(e);if(r!=null)return r;let i=await n(),a=this.getSeconds(t);return a!==null&&a>0?await this.store.put(e,i,a):await this.store.forever(e,i),i}async rememberForever(e,t){let n=await this.store.get(e);if(n!=null)return n;let r=await t();return await this.store.forever(e,r),r}async flexible(e,t,n){let[r,i]=t,a=`${e}:flexible_meta`,o=await this.store.get(e),s=await this.store.get(a);if(o!=null&&s&&typeof s==`object`&&s.freshUntil)return Math.floor(Date.now()/1e3)<s.freshUntil||setImmediate(async()=>{try{let t=await n(),o=Math.floor(Date.now()/1e3)+r;await this.store.put(e,t,i),await this.store.put(a,{freshUntil:o},i)}catch{}}),o;let c=await n(),l=Math.floor(Date.now()/1e3)+r;return await this.store.put(e,c,i),await this.store.put(a,{freshUntil:l},i),c}lock(t,n=0,r){return new e.CacheLock(this.store,t,n,r)}restoreLock(t,n){return new e.CacheLock(this.store,t,0,n)}tags(e){let r=Array.isArray(e)?e:[e],i=new n.TagSet(this.store,r);return new t.TaggedCache(this.store,i)}getStore(){return this.store}getDefaultCacheTime(){return this.defaultCacheTime}setDefaultCacheTime(e){return this.defaultCacheTime=e,this}getSeconds(e){if(e==null)return this.defaultCacheTime;if(e instanceof Date){let t=Math.floor((e.getTime()-Date.now())/1e3);return Math.max(0,t)}return e}};exports.Repository=r;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CacheLock as e}from"./Locks/CacheLock.mjs";import{TaggedCache as t}from"./Tags/TaggedCache.mjs";import{TagSet as n}from"./Tags/TagSet.mjs";var r=class{defaultCacheTime=null;storeName=``;constructor(e,t={}){this.store=e,this.config=t}setStoreName(e){return this.storeName=e,this}async get(e,t){return await this.store.get(e)??(typeof t==`function`?t():t??null)}async many(e){return this.store.many(e)}async put(e,t,n){let r=this.getSeconds(n);return r===null?this.forever(e,t):r<=0?this.forget(e):this.store.put(e,t,r)}async putMany(e,t){let n=this.getSeconds(t)??0;return this.store.putMany(e,n)}async increment(e,t=1){return this.store.increment(e,t)}async decrement(e,t=1){return this.store.decrement(e,t)}async forever(e,t){return this.store.forever(e,t)}async forget(e){return this.store.forget(e)}async flush(){return this.store.flush()}getPrefix(){return this.store.getPrefix()}async has(e){return await this.store.get(e)!=null}async missing(e){return!await this.has(e)}async pull(e,t){let n=await this.get(e,t);return n!=null&&n!==t&&await this.forget(e),n}async add(e,t,n){return await this.has(e)?!1:this.put(e,t,n)}async remember(e,t,n){let r=await this.store.get(e);if(r!=null)return r;let i=await n(),a=this.getSeconds(t);return a!==null&&a>0?await this.store.put(e,i,a):await this.store.forever(e,i),i}async rememberForever(e,t){let n=await this.store.get(e);if(n!=null)return n;let r=await t();return await this.store.forever(e,r),r}async flexible(e,t,n){let[r,i]=t,a=`${e}:flexible_meta`,o=await this.store.get(e),s=await this.store.get(a);if(o!=null&&s&&typeof s==`object`&&s.freshUntil)return Math.floor(Date.now()/1e3)<s.freshUntil||setImmediate(async()=>{try{let t=await n(),o=Math.floor(Date.now()/1e3)+r;await this.store.put(e,t,i),await this.store.put(a,{freshUntil:o},i)}catch{}}),o;let c=await n(),l=Math.floor(Date.now()/1e3)+r;return await this.store.put(e,c,i),await this.store.put(a,{freshUntil:l},i),c}lock(t,n=0,r){return new e(this.store,t,n,r)}restoreLock(t,n){return new e(this.store,t,0,n)}tags(e){let r=Array.isArray(e)?e:[e],i=new n(this.store,r);return new t(this.store,i)}getStore(){return this.store}getDefaultCacheTime(){return this.defaultCacheTime}setDefaultCacheTime(e){return this.defaultCacheTime=e,this}getSeconds(e){if(e==null)return this.defaultCacheTime;if(e instanceof Date){let t=Math.floor((e.getTime()-Date.now())/1e3);return Math.max(0,t)}return e}};export{r as Repository};
|
|
1
|
+
import{CacheLock as e}from"./Locks/CacheLock.mjs";import{TaggedCache as t}from"./Tags/TaggedCache.mjs";import{TagSet as n}from"./Tags/TagSet.mjs";var r=class{store;config;defaultCacheTime=null;storeName=``;constructor(e,t={}){this.store=e,this.config=t}setStoreName(e){return this.storeName=e,this}async get(e,t){return await this.store.get(e)??(typeof t==`function`?t():t??null)}async many(e){return this.store.many(e)}async put(e,t,n){let r=this.getSeconds(n);return r===null?this.forever(e,t):r<=0?this.forget(e):this.store.put(e,t,r)}async putMany(e,t){let n=this.getSeconds(t)??0;return this.store.putMany(e,n)}async increment(e,t=1){return this.store.increment(e,t)}async decrement(e,t=1){return this.store.decrement(e,t)}async forever(e,t){return this.store.forever(e,t)}async forget(e){return this.store.forget(e)}async flush(){return this.store.flush()}getPrefix(){return this.store.getPrefix()}async has(e){return await this.store.get(e)!=null}async missing(e){return!await this.has(e)}async pull(e,t){let n=await this.get(e,t);return n!=null&&n!==t&&await this.forget(e),n}async add(e,t,n){return await this.has(e)?!1:this.put(e,t,n)}async remember(e,t,n){let r=await this.store.get(e);if(r!=null)return r;let i=await n(),a=this.getSeconds(t);return a!==null&&a>0?await this.store.put(e,i,a):await this.store.forever(e,i),i}async rememberForever(e,t){let n=await this.store.get(e);if(n!=null)return n;let r=await t();return await this.store.forever(e,r),r}async flexible(e,t,n){let[r,i]=t,a=`${e}:flexible_meta`,o=await this.store.get(e),s=await this.store.get(a);if(o!=null&&s&&typeof s==`object`&&s.freshUntil)return Math.floor(Date.now()/1e3)<s.freshUntil||setImmediate(async()=>{try{let t=await n(),o=Math.floor(Date.now()/1e3)+r;await this.store.put(e,t,i),await this.store.put(a,{freshUntil:o},i)}catch{}}),o;let c=await n(),l=Math.floor(Date.now()/1e3)+r;return await this.store.put(e,c,i),await this.store.put(a,{freshUntil:l},i),c}lock(t,n=0,r){return new e(this.store,t,n,r)}restoreLock(t,n){return new e(this.store,t,0,n)}tags(e){let r=Array.isArray(e)?e:[e],i=new n(this.store,r);return new t(this.store,i)}getStore(){return this.store}getDefaultCacheTime(){return this.defaultCacheTime}setDefaultCacheTime(e){return this.defaultCacheTime=e,this}getSeconds(e){if(e==null)return this.defaultCacheTime;if(e instanceof Date){let t=Math.floor((e.getTime()-Date.now())/1e3);return Math.max(0,t)}return e}};export{r as Repository};
|
|
2
2
|
//# sourceMappingURL=Repository.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repository.mjs","names":[],"sources":["../../src/Cache/Repository.ts"],"sourcesContent":["/**\n * Repository\n *\n * High-level cache API that wraps a Store implementation.\n * Provides convenience methods like remember(), pull(), has(),\n * lock(), tags(), and TTL normalization.\n *\n * Mirrors Laravel's Illuminate\\Cache\\Repository.\n *\n * @example\n * ```typescript\n * const repo = new Repository(new ArrayStore());\n *\n * await repo.put('key', 'value', 3600);\n * const value = await repo.get('key', 'default');\n *\n * const user = await repo.remember('user:1', 3600, async () => {\n * return await fetchUser(1);\n * });\n * ```\n */\n\nimport type { LockContract } from './Contracts/Lock';\nimport type { RepositoryContract } from './Contracts/Repository';\nimport type { Store } from './Contracts/Store';\nimport { CacheLock } from './Locks/CacheLock';\nimport { TaggedCache } from './Tags/TaggedCache';\nimport { TagSet } from './Tags/TagSet';\n\nexport class Repository implements RepositoryContract {\n protected defaultCacheTime: number | null = null;\n protected storeName: string = '';\n\n constructor(\n protected store: Store,\n protected config: Record<string, any> = {}\n ) {}\n\n /**\n * Set the store name (used for events)\n */\n setStoreName(name: string): this {\n this.storeName = name;\n return this;\n }\n\n async get<T = any>(key: string, defaultValue?: T | (() => T)): Promise<T | null> {\n const value = await this.store.get(key);\n\n if (value !== null && value !== undefined) {\n return value;\n }\n\n if (typeof defaultValue === 'function') {\n return (defaultValue as () => T)();\n }\n\n return defaultValue ?? null;\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n return this.store.many(keys);\n }\n\n async put<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n const seconds = this.getSeconds(ttl);\n\n if (seconds === null) {\n return this.forever(key, value);\n }\n\n if (seconds <= 0) {\n return this.forget(key);\n }\n\n return this.store.put(key, value, seconds);\n }\n\n async putMany<T = any>(values: Record<string, T>, ttl?: number | Date): Promise<boolean> {\n const seconds = this.getSeconds(ttl) ?? 0;\n return this.store.putMany(values, seconds);\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n return this.store.increment(key, value);\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.store.decrement(key, value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.store.forever(key, value);\n }\n\n async forget(key: string): Promise<boolean> {\n return this.store.forget(key);\n }\n\n async flush(): Promise<boolean> {\n return this.store.flush();\n }\n\n getPrefix(): string {\n return this.store.getPrefix();\n }\n\n // --- High-level Repository methods ---\n\n async has(key: string): Promise<boolean> {\n const value = await this.store.get(key);\n return value !== null && value !== undefined;\n }\n\n async missing(key: string): Promise<boolean> {\n return !(await this.has(key));\n }\n\n async pull<T = any>(key: string, defaultValue?: T): Promise<T | null> {\n const value = await this.get(key, defaultValue);\n\n if (value !== null && value !== undefined && value !== defaultValue) {\n await this.forget(key);\n }\n\n return value;\n }\n\n async add<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n if (await this.has(key)) {\n return false;\n }\n\n return this.put(key, value, ttl);\n }\n\n async remember<T = any>(key: string, ttl: number | Date, callback: () => T | Promise<T>): Promise<T> {\n const value = await this.store.get(key);\n\n if (value !== null && value !== undefined) {\n return value;\n }\n\n const result = await callback();\n const seconds = this.getSeconds(ttl);\n\n if (seconds !== null && seconds > 0) {\n await this.store.put(key, result, seconds);\n } else {\n await this.store.forever(key, result);\n }\n\n return result;\n }\n\n async rememberForever<T = any>(key: string, callback: () => T | Promise<T>): Promise<T> {\n const value = await this.store.get(key);\n\n if (value !== null && value !== undefined) {\n return value;\n }\n\n const result = await callback();\n await this.store.forever(key, result);\n\n return result;\n }\n\n async flexible<T = any>(key: string, ttl: [number, number], callback: () => T | Promise<T>): Promise<T> {\n const [freshTtl, staleTtl] = ttl;\n\n // Try to get the cached value with its freshness\n const metaKey = `${key}:flexible_meta`;\n const value = await this.store.get(key);\n const meta = await this.store.get(metaKey);\n\n if (value !== null && value !== undefined) {\n // Check if still fresh\n if (meta && typeof meta === 'object' && meta.freshUntil) {\n const now = Math.floor(Date.now() / 1000);\n if (now < meta.freshUntil) {\n // Still fresh\n return value;\n }\n // Stale but within total TTL - revalidate in background\n setImmediate(async () => {\n try {\n const newValue = await callback();\n const freshUntil = Math.floor(Date.now() / 1000) + freshTtl;\n await this.store.put(key, newValue, staleTtl);\n await this.store.put(metaKey, { freshUntil }, staleTtl);\n } catch {\n // Silently fail background refresh\n }\n });\n return value;\n }\n }\n\n // Cache miss - fetch and store\n const result = await callback();\n const freshUntil = Math.floor(Date.now() / 1000) + freshTtl;\n await this.store.put(key, result, staleTtl);\n await this.store.put(metaKey, { freshUntil }, staleTtl);\n\n return result;\n }\n\n // --- Locks ---\n\n lock(name: string, seconds: number = 0, owner?: string): LockContract {\n return new CacheLock(this.store, name, seconds, owner);\n }\n\n restoreLock(name: string, owner: string): LockContract {\n return new CacheLock(this.store, name, 0, owner);\n }\n\n // --- Tags ---\n\n tags(names: string | string[]): TaggedCache {\n const tagNames = Array.isArray(names) ? names : [names];\n const tagSet = new TagSet(this.store, tagNames);\n return new TaggedCache(this.store, tagSet);\n }\n\n // --- Accessors ---\n\n getStore(): Store {\n return this.store;\n }\n\n getDefaultCacheTime(): number | null {\n return this.defaultCacheTime;\n }\n\n setDefaultCacheTime(seconds: number | null): this {\n this.defaultCacheTime = seconds;\n return this;\n }\n\n // --- TTL helpers ---\n\n protected getSeconds(ttl?: number | Date | null): number | null {\n if (ttl === undefined || ttl === null) {\n return this.defaultCacheTime;\n }\n\n if (ttl instanceof Date) {\n const seconds = Math.floor((ttl.getTime() - Date.now()) / 1000);\n return Math.max(0, seconds);\n }\n\n return ttl;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Repository.mjs","names":[],"sources":["../../src/Cache/Repository.ts"],"sourcesContent":["/**\n * Repository\n *\n * High-level cache API that wraps a Store implementation.\n * Provides convenience methods like remember(), pull(), has(),\n * lock(), tags(), and TTL normalization.\n *\n * Mirrors Laravel's Illuminate\\Cache\\Repository.\n *\n * @example\n * ```typescript\n * const repo = new Repository(new ArrayStore());\n *\n * await repo.put('key', 'value', 3600);\n * const value = await repo.get('key', 'default');\n *\n * const user = await repo.remember('user:1', 3600, async () => {\n * return await fetchUser(1);\n * });\n * ```\n */\n\nimport type { LockContract } from './Contracts/Lock';\nimport type { RepositoryContract } from './Contracts/Repository';\nimport type { Store } from './Contracts/Store';\nimport { CacheLock } from './Locks/CacheLock';\nimport { TaggedCache } from './Tags/TaggedCache';\nimport { TagSet } from './Tags/TagSet';\n\nexport class Repository implements RepositoryContract {\n protected defaultCacheTime: number | null = null;\n protected storeName: string = '';\n\n constructor(\n protected store: Store,\n protected config: Record<string, any> = {}\n ) {}\n\n /**\n * Set the store name (used for events)\n */\n setStoreName(name: string): this {\n this.storeName = name;\n return this;\n }\n\n async get<T = any>(key: string, defaultValue?: T | (() => T)): Promise<T | null> {\n const value = await this.store.get(key);\n\n if (value !== null && value !== undefined) {\n return value;\n }\n\n if (typeof defaultValue === 'function') {\n return (defaultValue as () => T)();\n }\n\n return defaultValue ?? null;\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n return this.store.many(keys);\n }\n\n async put<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n const seconds = this.getSeconds(ttl);\n\n if (seconds === null) {\n return this.forever(key, value);\n }\n\n if (seconds <= 0) {\n return this.forget(key);\n }\n\n return this.store.put(key, value, seconds);\n }\n\n async putMany<T = any>(values: Record<string, T>, ttl?: number | Date): Promise<boolean> {\n const seconds = this.getSeconds(ttl) ?? 0;\n return this.store.putMany(values, seconds);\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n return this.store.increment(key, value);\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.store.decrement(key, value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.store.forever(key, value);\n }\n\n async forget(key: string): Promise<boolean> {\n return this.store.forget(key);\n }\n\n async flush(): Promise<boolean> {\n return this.store.flush();\n }\n\n getPrefix(): string {\n return this.store.getPrefix();\n }\n\n // --- High-level Repository methods ---\n\n async has(key: string): Promise<boolean> {\n const value = await this.store.get(key);\n return value !== null && value !== undefined;\n }\n\n async missing(key: string): Promise<boolean> {\n return !(await this.has(key));\n }\n\n async pull<T = any>(key: string, defaultValue?: T): Promise<T | null> {\n const value = await this.get(key, defaultValue);\n\n if (value !== null && value !== undefined && value !== defaultValue) {\n await this.forget(key);\n }\n\n return value;\n }\n\n async add<T = any>(key: string, value: T, ttl?: number | Date): Promise<boolean> {\n if (await this.has(key)) {\n return false;\n }\n\n return this.put(key, value, ttl);\n }\n\n async remember<T = any>(key: string, ttl: number | Date, callback: () => T | Promise<T>): Promise<T> {\n const value = await this.store.get(key);\n\n if (value !== null && value !== undefined) {\n return value;\n }\n\n const result = await callback();\n const seconds = this.getSeconds(ttl);\n\n if (seconds !== null && seconds > 0) {\n await this.store.put(key, result, seconds);\n } else {\n await this.store.forever(key, result);\n }\n\n return result;\n }\n\n async rememberForever<T = any>(key: string, callback: () => T | Promise<T>): Promise<T> {\n const value = await this.store.get(key);\n\n if (value !== null && value !== undefined) {\n return value;\n }\n\n const result = await callback();\n await this.store.forever(key, result);\n\n return result;\n }\n\n async flexible<T = any>(key: string, ttl: [number, number], callback: () => T | Promise<T>): Promise<T> {\n const [freshTtl, staleTtl] = ttl;\n\n // Try to get the cached value with its freshness\n const metaKey = `${key}:flexible_meta`;\n const value = await this.store.get(key);\n const meta = await this.store.get(metaKey);\n\n if (value !== null && value !== undefined) {\n // Check if still fresh\n if (meta && typeof meta === 'object' && meta.freshUntil) {\n const now = Math.floor(Date.now() / 1000);\n if (now < meta.freshUntil) {\n // Still fresh\n return value;\n }\n // Stale but within total TTL - revalidate in background\n setImmediate(async () => {\n try {\n const newValue = await callback();\n const freshUntil = Math.floor(Date.now() / 1000) + freshTtl;\n await this.store.put(key, newValue, staleTtl);\n await this.store.put(metaKey, { freshUntil }, staleTtl);\n } catch {\n // Silently fail background refresh\n }\n });\n return value;\n }\n }\n\n // Cache miss - fetch and store\n const result = await callback();\n const freshUntil = Math.floor(Date.now() / 1000) + freshTtl;\n await this.store.put(key, result, staleTtl);\n await this.store.put(metaKey, { freshUntil }, staleTtl);\n\n return result;\n }\n\n // --- Locks ---\n\n lock(name: string, seconds: number = 0, owner?: string): LockContract {\n return new CacheLock(this.store, name, seconds, owner);\n }\n\n restoreLock(name: string, owner: string): LockContract {\n return new CacheLock(this.store, name, 0, owner);\n }\n\n // --- Tags ---\n\n tags(names: string | string[]): TaggedCache {\n const tagNames = Array.isArray(names) ? names : [names];\n const tagSet = new TagSet(this.store, tagNames);\n return new TaggedCache(this.store, tagSet);\n }\n\n // --- Accessors ---\n\n getStore(): Store {\n return this.store;\n }\n\n getDefaultCacheTime(): number | null {\n return this.defaultCacheTime;\n }\n\n setDefaultCacheTime(seconds: number | null): this {\n this.defaultCacheTime = seconds;\n return this;\n }\n\n // --- TTL helpers ---\n\n protected getSeconds(ttl?: number | Date | null): number | null {\n if (ttl === undefined || ttl === null) {\n return this.defaultCacheTime;\n }\n\n if (ttl instanceof Date) {\n const seconds = Math.floor((ttl.getTime() - Date.now()) / 1000);\n return Math.max(0, seconds);\n }\n\n return ttl;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{storage=new Map;shouldSerialize;constructor(e={},t=``){this.config=e,this.prefix=t,this.shouldSerialize=e.serialize!==!1}async get(e){let t=this.prefixedKey(e),n=this.storage.get(t);return n?this.isExpired(n.expiration)?(this.storage.delete(t),null):this.shouldSerialize?this.unserialize(n.value):n.value:null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.shouldSerialize?this.serialize(t):t;return this.storage.set(r,{value:i,expiration:n>0?this.currentTime()+n:0}),!0}async putMany(e,t){for(let[n,r]of Object.entries(e))await this.put(n,r,t);return!0}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.storage.get(i),o=a?a.expiration:0;return this.storage.set(i,{value:this.shouldSerialize?this.serialize(r):r,expiration:o}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e);return this.storage.delete(t)}async flush(){return this.storage.clear(),!0}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}isExpired(e){return e===0?!1:this.currentTime()>=e}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};exports.ArrayStore=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{config;prefix;storage=new Map;shouldSerialize;constructor(e={},t=``){this.config=e,this.prefix=t,this.shouldSerialize=e.serialize!==!1}async get(e){let t=this.prefixedKey(e),n=this.storage.get(t);return n?this.isExpired(n.expiration)?(this.storage.delete(t),null):this.shouldSerialize?this.unserialize(n.value):n.value:null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.shouldSerialize?this.serialize(t):t;return this.storage.set(r,{value:i,expiration:n>0?this.currentTime()+n:0}),!0}async putMany(e,t){for(let[n,r]of Object.entries(e))await this.put(n,r,t);return!0}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.storage.get(i),o=a?a.expiration:0;return this.storage.set(i,{value:this.shouldSerialize?this.serialize(r):r,expiration:o}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e);return this.storage.delete(t)}async flush(){return this.storage.clear(),!0}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}isExpired(e){return e===0?!1:this.currentTime()>=e}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};exports.ArrayStore=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{storage=new Map;shouldSerialize;constructor(e={},t=``){this.config=e,this.prefix=t,this.shouldSerialize=e.serialize!==!1}async get(e){let t=this.prefixedKey(e),n=this.storage.get(t);return n?this.isExpired(n.expiration)?(this.storage.delete(t),null):this.shouldSerialize?this.unserialize(n.value):n.value:null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.shouldSerialize?this.serialize(t):t;return this.storage.set(r,{value:i,expiration:n>0?this.currentTime()+n:0}),!0}async putMany(e,t){for(let[n,r]of Object.entries(e))await this.put(n,r,t);return!0}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.storage.get(i),o=a?a.expiration:0;return this.storage.set(i,{value:this.shouldSerialize?this.serialize(r):r,expiration:o}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e);return this.storage.delete(t)}async flush(){return this.storage.clear(),!0}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}isExpired(e){return e===0?!1:this.currentTime()>=e}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};export{e as ArrayStore};
|
|
1
|
+
var e=class{config;prefix;storage=new Map;shouldSerialize;constructor(e={},t=``){this.config=e,this.prefix=t,this.shouldSerialize=e.serialize!==!1}async get(e){let t=this.prefixedKey(e),n=this.storage.get(t);return n?this.isExpired(n.expiration)?(this.storage.delete(t),null):this.shouldSerialize?this.unserialize(n.value):n.value:null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.shouldSerialize?this.serialize(t):t;return this.storage.set(r,{value:i,expiration:n>0?this.currentTime()+n:0}),!0}async putMany(e,t){for(let[n,r]of Object.entries(e))await this.put(n,r,t);return!0}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.storage.get(i),o=a?a.expiration:0;return this.storage.set(i,{value:this.shouldSerialize?this.serialize(r):r,expiration:o}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e);return this.storage.delete(t)}async flush(){return this.storage.clear(),!0}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}isExpired(e){return e===0?!1:this.currentTime()>=e}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};export{e as ArrayStore};
|
|
2
2
|
//# sourceMappingURL=ArrayStore.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayStore.mjs","names":[],"sources":["../../../src/Cache/Stores/ArrayStore.ts"],"sourcesContent":["/**\n * ArrayStore\n *\n * In-memory cache store. Perfect for testing and short-lived caching.\n * Supports tags via TaggableStore.\n *\n * Mirrors Laravel's Illuminate\\Cache\\ArrayStore.\n *\n * @example\n * ```typescript\n * const store = new ArrayStore({ serialize: false }, 'app_');\n * await store.put('key', 'value', 3600);\n * const value = await store.get('key');\n * ```\n */\n\nimport type { Store } from '@/Cache/Contracts/Store';\n\ninterface CacheEntry {\n value: any;\n expiration: number; // Unix timestamp in seconds, 0 = forever\n}\n\nexport class ArrayStore implements Store {\n protected storage: Map<string, CacheEntry> = new Map();\n protected shouldSerialize: boolean;\n\n constructor(\n protected config: Record<string, any> = {},\n protected prefix: string = ''\n ) {\n this.shouldSerialize = config.serialize !== false;\n }\n\n async get<T = any>(key: string): Promise<T | null> {\n const prefixed = this.prefixedKey(key);\n const entry = this.storage.get(prefixed);\n\n if (!entry) return null;\n\n if (this.isExpired(entry.expiration)) {\n this.storage.delete(prefixed);\n return null;\n }\n\n return this.shouldSerialize ? this.unserialize(entry.value) : entry.value;\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n const result: Record<string, T | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async put<T = any>(key: string, value: T, seconds: number): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n const stored = this.shouldSerialize ? this.serialize(value) : value;\n\n this.storage.set(prefixed, {\n value: stored,\n expiration: seconds > 0 ? this.currentTime() + seconds : 0,\n });\n\n return true;\n }\n\n async putMany<T = any>(values: Record<string, T>, seconds: number): Promise<boolean> {\n for (const [key, value] of Object.entries(values)) {\n await this.put(key, value, seconds);\n }\n return true;\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n const current = await this.get(key);\n const newValue = (typeof current === 'number' ? current : 0) + value;\n\n const prefixed = this.prefixedKey(key);\n const entry = this.storage.get(prefixed);\n const expiration = entry ? entry.expiration : 0;\n\n this.storage.set(prefixed, {\n value: this.shouldSerialize ? this.serialize(newValue) : newValue,\n expiration,\n });\n\n return newValue;\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.increment(key, -value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.put(key, value, 0);\n }\n\n async forget(key: string): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n return this.storage.delete(prefixed);\n }\n\n async flush(): Promise<boolean> {\n this.storage.clear();\n return true;\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n\n protected prefixedKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n protected isExpired(expiration: number): boolean {\n if (expiration === 0) return false;\n return this.currentTime() >= expiration;\n }\n\n protected currentTime(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n protected serialize(value: any): any {\n return JSON.stringify(value);\n }\n\n protected unserialize(value: any): any {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n return value;\n }\n}\n"],"mappings":"AAuBA,IAAa,EAAb,KAAyC,
|
|
1
|
+
{"version":3,"file":"ArrayStore.mjs","names":[],"sources":["../../../src/Cache/Stores/ArrayStore.ts"],"sourcesContent":["/**\n * ArrayStore\n *\n * In-memory cache store. Perfect for testing and short-lived caching.\n * Supports tags via TaggableStore.\n *\n * Mirrors Laravel's Illuminate\\Cache\\ArrayStore.\n *\n * @example\n * ```typescript\n * const store = new ArrayStore({ serialize: false }, 'app_');\n * await store.put('key', 'value', 3600);\n * const value = await store.get('key');\n * ```\n */\n\nimport type { Store } from '@/Cache/Contracts/Store';\n\ninterface CacheEntry {\n value: any;\n expiration: number; // Unix timestamp in seconds, 0 = forever\n}\n\nexport class ArrayStore implements Store {\n protected storage: Map<string, CacheEntry> = new Map();\n protected shouldSerialize: boolean;\n\n constructor(\n protected config: Record<string, any> = {},\n protected prefix: string = ''\n ) {\n this.shouldSerialize = config.serialize !== false;\n }\n\n async get<T = any>(key: string): Promise<T | null> {\n const prefixed = this.prefixedKey(key);\n const entry = this.storage.get(prefixed);\n\n if (!entry) return null;\n\n if (this.isExpired(entry.expiration)) {\n this.storage.delete(prefixed);\n return null;\n }\n\n return this.shouldSerialize ? this.unserialize(entry.value) : entry.value;\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n const result: Record<string, T | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async put<T = any>(key: string, value: T, seconds: number): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n const stored = this.shouldSerialize ? this.serialize(value) : value;\n\n this.storage.set(prefixed, {\n value: stored,\n expiration: seconds > 0 ? this.currentTime() + seconds : 0,\n });\n\n return true;\n }\n\n async putMany<T = any>(values: Record<string, T>, seconds: number): Promise<boolean> {\n for (const [key, value] of Object.entries(values)) {\n await this.put(key, value, seconds);\n }\n return true;\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n const current = await this.get(key);\n const newValue = (typeof current === 'number' ? current : 0) + value;\n\n const prefixed = this.prefixedKey(key);\n const entry = this.storage.get(prefixed);\n const expiration = entry ? entry.expiration : 0;\n\n this.storage.set(prefixed, {\n value: this.shouldSerialize ? this.serialize(newValue) : newValue,\n expiration,\n });\n\n return newValue;\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.increment(key, -value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.put(key, value, 0);\n }\n\n async forget(key: string): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n return this.storage.delete(prefixed);\n }\n\n async flush(): Promise<boolean> {\n this.storage.clear();\n return true;\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n\n protected prefixedKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n protected isExpired(expiration: number): boolean {\n if (expiration === 0) return false;\n return this.currentTime() >= expiration;\n }\n\n protected currentTime(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n protected serialize(value: any): any {\n return JSON.stringify(value);\n }\n\n protected unserialize(value: any): any {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n return value;\n }\n}\n"],"mappings":"AAuBA,IAAa,EAAb,KAAyC,CAK3B,OACA,OALZ,QAA6C,IAAI,IACjD,gBAEA,YACE,EAAwC,EAAE,CAC1C,EAA2B,GAC3B,CAFU,KAAA,OAAA,EACA,KAAA,OAAA,EAEV,KAAK,gBAAkB,EAAO,YAAc,GAG9C,MAAM,IAAa,EAAgC,CACjD,IAAM,EAAW,KAAK,YAAY,EAAI,CAChC,EAAQ,KAAK,QAAQ,IAAI,EAAS,CASxC,OAPK,EAED,KAAK,UAAU,EAAM,WAAW,EAClC,KAAK,QAAQ,OAAO,EAAS,CACtB,MAGF,KAAK,gBAAkB,KAAK,YAAY,EAAM,MAAM,CAAG,EAAM,MAPjD,KAUrB,MAAM,KAAc,EAAmD,CACrE,IAAM,EAAmC,EAAE,CAC3C,IAAK,IAAM,KAAO,EAChB,EAAO,GAAO,MAAM,KAAK,IAAI,EAAI,CAEnC,OAAO,EAGT,MAAM,IAAa,EAAa,EAAU,EAAmC,CAC3E,IAAM,EAAW,KAAK,YAAY,EAAI,CAChC,EAAS,KAAK,gBAAkB,KAAK,UAAU,EAAM,CAAG,EAO9D,OALA,KAAK,QAAQ,IAAI,EAAU,CACzB,MAAO,EACP,WAAY,EAAU,EAAI,KAAK,aAAa,CAAG,EAAU,EAC1D,CAAC,CAEK,GAGT,MAAM,QAAiB,EAA2B,EAAmC,CACnF,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAO,CAC/C,MAAM,KAAK,IAAI,EAAK,EAAO,EAAQ,CAErC,MAAO,GAGT,MAAM,UAAU,EAAa,EAAgB,EAA8B,CACzE,IAAM,EAAU,MAAM,KAAK,IAAI,EAAI,CAC7B,GAAY,OAAO,GAAY,SAAW,EAAU,GAAK,EAEzD,EAAW,KAAK,YAAY,EAAI,CAChC,EAAQ,KAAK,QAAQ,IAAI,EAAS,CAClC,EAAa,EAAQ,EAAM,WAAa,EAO9C,OALA,KAAK,QAAQ,IAAI,EAAU,CACzB,MAAO,KAAK,gBAAkB,KAAK,UAAU,EAAS,CAAG,EACzD,aACD,CAAC,CAEK,EAGT,MAAM,UAAU,EAAa,EAAgB,EAA8B,CACzE,OAAO,KAAK,UAAU,EAAK,CAAC,EAAM,CAGpC,MAAM,QAAiB,EAAa,EAA4B,CAC9D,OAAO,KAAK,IAAI,EAAK,EAAO,EAAE,CAGhC,MAAM,OAAO,EAA+B,CAC1C,IAAM,EAAW,KAAK,YAAY,EAAI,CACtC,OAAO,KAAK,QAAQ,OAAO,EAAS,CAGtC,MAAM,OAA0B,CAE9B,OADA,KAAK,QAAQ,OAAO,CACb,GAGT,WAAoB,CAClB,OAAO,KAAK,OAGd,YAAsB,EAAqB,CACzC,MAAO,GAAG,KAAK,SAAS,IAG1B,UAAoB,EAA6B,CAE/C,OADI,IAAe,EAAU,GACtB,KAAK,aAAa,EAAI,EAG/B,aAAgC,CAC9B,OAAO,KAAK,MAAM,KAAK,KAAK,CAAG,IAAK,CAGtC,UAAoB,EAAiB,CACnC,OAAO,KAAK,UAAU,EAAM,CAG9B,YAAsB,EAAiB,CACrC,GAAI,OAAO,GAAU,SACnB,GAAI,CACF,OAAO,KAAK,MAAM,EAAM,MAClB,CACN,OAAO,EAGX,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{tableName;connectionName;constructor(e,t=``,n){this.config=e,this.prefix=t,this.app=n,this.tableName=e.table||`cache`,this.connectionName=e.connection||void 0}getConnection(){return this.app.make(`db`).connection(this.connectionName)}async get(e){let t=this.prefixedKey(e),n=this.getConnection(),r=this.currentTime(),i=await n.table(this.tableName).where(`key`,`=`,t).first();return i?i.expiration!==0&&r>=i.expiration?(await this.forget(e),null):this.unserialize(i.value):null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.serialize(t),a=n>0?this.currentTime()+n:0,o=this.getConnection();try{return await o.table(this.tableName).where(`key`,`=`,r).first()?await o.table(this.tableName).where(`key`,`=`,r).update({value:i,expiration:a}):await o.table(this.tableName).insert({key:r,value:i,expiration:a}),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.getConnection();return await a.table(this.tableName).where(`key`,`=`,i).first()?await a.table(this.tableName).where(`key`,`=`,i).update({value:this.serialize(r)}):await a.table(this.tableName).insert({key:i,value:this.serialize(r),expiration:0}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e),n=this.getConnection();try{return await n.table(this.tableName).where(`key`,`=`,t).delete(),!0}catch{return!1}}async flush(){let e=this.getConnection();try{return await e.table(this.tableName).delete(),!0}catch{return!1}}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){try{return JSON.parse(e)}catch{return e}}};exports.DatabaseStore=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{config;prefix;app;tableName;connectionName;constructor(e,t=``,n){this.config=e,this.prefix=t,this.app=n,this.tableName=e.table||`cache`,this.connectionName=e.connection||void 0}getConnection(){return this.app.make(`db`).connection(this.connectionName)}async get(e){let t=this.prefixedKey(e),n=this.getConnection(),r=this.currentTime(),i=await n.table(this.tableName).where(`key`,`=`,t).first();return i?i.expiration!==0&&r>=i.expiration?(await this.forget(e),null):this.unserialize(i.value):null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.serialize(t),a=n>0?this.currentTime()+n:0,o=this.getConnection();try{return await o.table(this.tableName).where(`key`,`=`,r).first()?await o.table(this.tableName).where(`key`,`=`,r).update({value:i,expiration:a}):await o.table(this.tableName).insert({key:r,value:i,expiration:a}),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.getConnection();return await a.table(this.tableName).where(`key`,`=`,i).first()?await a.table(this.tableName).where(`key`,`=`,i).update({value:this.serialize(r)}):await a.table(this.tableName).insert({key:i,value:this.serialize(r),expiration:0}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e),n=this.getConnection();try{return await n.table(this.tableName).where(`key`,`=`,t).delete(),!0}catch{return!1}}async flush(){let e=this.getConnection();try{return await e.table(this.tableName).delete(),!0}catch{return!1}}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){try{return JSON.parse(e)}catch{return e}}};exports.DatabaseStore=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{tableName;connectionName;constructor(e,t=``,n){this.config=e,this.prefix=t,this.app=n,this.tableName=e.table||`cache`,this.connectionName=e.connection||void 0}getConnection(){return this.app.make(`db`).connection(this.connectionName)}async get(e){let t=this.prefixedKey(e),n=this.getConnection(),r=this.currentTime(),i=await n.table(this.tableName).where(`key`,`=`,t).first();return i?i.expiration!==0&&r>=i.expiration?(await this.forget(e),null):this.unserialize(i.value):null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.serialize(t),a=n>0?this.currentTime()+n:0,o=this.getConnection();try{return await o.table(this.tableName).where(`key`,`=`,r).first()?await o.table(this.tableName).where(`key`,`=`,r).update({value:i,expiration:a}):await o.table(this.tableName).insert({key:r,value:i,expiration:a}),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.getConnection();return await a.table(this.tableName).where(`key`,`=`,i).first()?await a.table(this.tableName).where(`key`,`=`,i).update({value:this.serialize(r)}):await a.table(this.tableName).insert({key:i,value:this.serialize(r),expiration:0}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e),n=this.getConnection();try{return await n.table(this.tableName).where(`key`,`=`,t).delete(),!0}catch{return!1}}async flush(){let e=this.getConnection();try{return await e.table(this.tableName).delete(),!0}catch{return!1}}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){try{return JSON.parse(e)}catch{return e}}};export{e as DatabaseStore};
|
|
1
|
+
var e=class{config;prefix;app;tableName;connectionName;constructor(e,t=``,n){this.config=e,this.prefix=t,this.app=n,this.tableName=e.table||`cache`,this.connectionName=e.connection||void 0}getConnection(){return this.app.make(`db`).connection(this.connectionName)}async get(e){let t=this.prefixedKey(e),n=this.getConnection(),r=this.currentTime(),i=await n.table(this.tableName).where(`key`,`=`,t).first();return i?i.expiration!==0&&r>=i.expiration?(await this.forget(e),null):this.unserialize(i.value):null}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=this.prefixedKey(e),i=this.serialize(t),a=n>0?this.currentTime()+n:0,o=this.getConnection();try{return await o.table(this.tableName).where(`key`,`=`,r).first()?await o.table(this.tableName).where(`key`,`=`,r).update({value:i,expiration:a}):await o.table(this.tableName).insert({key:r,value:i,expiration:a}),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t,i=this.prefixedKey(e),a=this.getConnection();return await a.table(this.tableName).where(`key`,`=`,i).first()?await a.table(this.tableName).where(`key`,`=`,i).update({value:this.serialize(r)}):await a.table(this.tableName).insert({key:i,value:this.serialize(r),expiration:0}),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.prefixedKey(e),n=this.getConnection();try{return await n.table(this.tableName).where(`key`,`=`,t).delete(),!0}catch{return!1}}async flush(){let e=this.getConnection();try{return await e.table(this.tableName).delete(),!0}catch{return!1}}getPrefix(){return this.prefix}prefixedKey(e){return`${this.prefix}${e}`}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){try{return JSON.parse(e)}catch{return e}}};export{e as DatabaseStore};
|
|
2
2
|
//# sourceMappingURL=DatabaseStore.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseStore.mjs","names":[],"sources":["../../../src/Cache/Stores/DatabaseStore.ts"],"sourcesContent":["/**\n * DatabaseStore\n *\n * Database-backed cache store. Stores cache entries in a database table.\n * Requires a `cache` table with columns: key (PK), value (text), expiration (int).\n *\n * Mirrors Laravel's Illuminate\\Cache\\DatabaseStore.\n *\n * @example\n * ```typescript\n * const store = new DatabaseStore({\n * driver: 'database',\n * connection: null,\n * table: 'cache',\n * }, 'app_', application);\n * ```\n */\n\nimport type { Store } from '@/Cache/Contracts/Store';\nimport type { Connection } from '@/Database/Connection';\nimport type { DatabaseManager } from '@/Database/DatabaseManager';\nimport type { Application } from '@/Foundation/Application';\n\nexport class DatabaseStore implements Store {\n protected tableName: string;\n protected connectionName?: string;\n\n constructor(\n protected config: Record<string, any>,\n protected prefix: string = '',\n protected app: Application\n ) {\n this.tableName = config.table || 'cache';\n this.connectionName = config.connection || undefined;\n }\n\n protected getConnection(): Connection {\n const db = this.app.make<DatabaseManager>('db');\n return db.connection(this.connectionName);\n }\n\n async get<T = any>(key: string): Promise<T | null> {\n const prefixed = this.prefixedKey(key);\n const conn = this.getConnection();\n const now = this.currentTime();\n\n const row = await conn.table(this.tableName).where('key', '=', prefixed).first();\n\n if (!row) return null;\n\n // Check expiration\n if (row.expiration !== 0 && now >= row.expiration) {\n await this.forget(key);\n return null;\n }\n\n return this.unserialize(row.value);\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n const result: Record<string, T | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async put<T = any>(key: string, value: T, seconds: number): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n const serialized = this.serialize(value);\n const expiration = seconds > 0 ? this.currentTime() + seconds : 0;\n const conn = this.getConnection();\n\n try {\n // Try update first\n const existing = await conn.table(this.tableName).where('key', '=', prefixed).first();\n\n if (existing) {\n await conn.table(this.tableName).where('key', '=', prefixed).update({ value: serialized, expiration });\n } else {\n await conn.table(this.tableName).insert({ key: prefixed, value: serialized, expiration });\n }\n\n return true;\n } catch {\n return false;\n }\n }\n\n async putMany<T = any>(values: Record<string, T>, seconds: number): Promise<boolean> {\n let success = true;\n for (const [key, value] of Object.entries(values)) {\n if (!(await this.put(key, value, seconds))) {\n success = false;\n }\n }\n return success;\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n const current = await this.get(key);\n const newValue = (typeof current === 'number' ? current : 0) + value;\n\n const prefixed = this.prefixedKey(key);\n const conn = this.getConnection();\n\n const existing = await conn.table(this.tableName).where('key', '=', prefixed).first();\n\n if (existing) {\n await conn\n .table(this.tableName)\n .where('key', '=', prefixed)\n .update({ value: this.serialize(newValue) });\n } else {\n await conn.table(this.tableName).insert({ key: prefixed, value: this.serialize(newValue), expiration: 0 });\n }\n\n return newValue;\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.increment(key, -value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.put(key, value, 0);\n }\n\n async forget(key: string): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n const conn = this.getConnection();\n\n try {\n await conn.table(this.tableName).where('key', '=', prefixed).delete();\n return true;\n } catch {\n return false;\n }\n }\n\n async flush(): Promise<boolean> {\n const conn = this.getConnection();\n\n try {\n await conn.table(this.tableName).delete();\n return true;\n } catch {\n return false;\n }\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n\n protected prefixedKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n protected currentTime(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n protected serialize(value: any): string {\n return JSON.stringify(value);\n }\n\n protected unserialize(value: string): any {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n}\n"],"mappings":"AAuBA,IAAa,EAAb,KAA4C,
|
|
1
|
+
{"version":3,"file":"DatabaseStore.mjs","names":[],"sources":["../../../src/Cache/Stores/DatabaseStore.ts"],"sourcesContent":["/**\n * DatabaseStore\n *\n * Database-backed cache store. Stores cache entries in a database table.\n * Requires a `cache` table with columns: key (PK), value (text), expiration (int).\n *\n * Mirrors Laravel's Illuminate\\Cache\\DatabaseStore.\n *\n * @example\n * ```typescript\n * const store = new DatabaseStore({\n * driver: 'database',\n * connection: null,\n * table: 'cache',\n * }, 'app_', application);\n * ```\n */\n\nimport type { Store } from '@/Cache/Contracts/Store';\nimport type { Connection } from '@/Database/Connection';\nimport type { DatabaseManager } from '@/Database/DatabaseManager';\nimport type { Application } from '@/Foundation/Application';\n\nexport class DatabaseStore implements Store {\n protected tableName: string;\n protected connectionName?: string;\n\n constructor(\n protected config: Record<string, any>,\n protected prefix: string = '',\n protected app: Application\n ) {\n this.tableName = config.table || 'cache';\n this.connectionName = config.connection || undefined;\n }\n\n protected getConnection(): Connection {\n const db = this.app.make<DatabaseManager>('db');\n return db.connection(this.connectionName);\n }\n\n async get<T = any>(key: string): Promise<T | null> {\n const prefixed = this.prefixedKey(key);\n const conn = this.getConnection();\n const now = this.currentTime();\n\n const row = await conn.table(this.tableName).where('key', '=', prefixed).first();\n\n if (!row) return null;\n\n // Check expiration\n if (row.expiration !== 0 && now >= row.expiration) {\n await this.forget(key);\n return null;\n }\n\n return this.unserialize(row.value);\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n const result: Record<string, T | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async put<T = any>(key: string, value: T, seconds: number): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n const serialized = this.serialize(value);\n const expiration = seconds > 0 ? this.currentTime() + seconds : 0;\n const conn = this.getConnection();\n\n try {\n // Try update first\n const existing = await conn.table(this.tableName).where('key', '=', prefixed).first();\n\n if (existing) {\n await conn.table(this.tableName).where('key', '=', prefixed).update({ value: serialized, expiration });\n } else {\n await conn.table(this.tableName).insert({ key: prefixed, value: serialized, expiration });\n }\n\n return true;\n } catch {\n return false;\n }\n }\n\n async putMany<T = any>(values: Record<string, T>, seconds: number): Promise<boolean> {\n let success = true;\n for (const [key, value] of Object.entries(values)) {\n if (!(await this.put(key, value, seconds))) {\n success = false;\n }\n }\n return success;\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n const current = await this.get(key);\n const newValue = (typeof current === 'number' ? current : 0) + value;\n\n const prefixed = this.prefixedKey(key);\n const conn = this.getConnection();\n\n const existing = await conn.table(this.tableName).where('key', '=', prefixed).first();\n\n if (existing) {\n await conn\n .table(this.tableName)\n .where('key', '=', prefixed)\n .update({ value: this.serialize(newValue) });\n } else {\n await conn.table(this.tableName).insert({ key: prefixed, value: this.serialize(newValue), expiration: 0 });\n }\n\n return newValue;\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.increment(key, -value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.put(key, value, 0);\n }\n\n async forget(key: string): Promise<boolean> {\n const prefixed = this.prefixedKey(key);\n const conn = this.getConnection();\n\n try {\n await conn.table(this.tableName).where('key', '=', prefixed).delete();\n return true;\n } catch {\n return false;\n }\n }\n\n async flush(): Promise<boolean> {\n const conn = this.getConnection();\n\n try {\n await conn.table(this.tableName).delete();\n return true;\n } catch {\n return false;\n }\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n\n protected prefixedKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n protected currentTime(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n protected serialize(value: any): string {\n return JSON.stringify(value);\n }\n\n protected unserialize(value: string): any {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../_virtual/_rolldown/runtime.cjs`);let t=require(`crypto`),n=require(`fs/promises`);n=e.__toESM(n);let r=require(`path`);r=e.__toESM(r);var i=class{cachePath;constructor(e,t=``){this.config=e,this.prefix=t,this.cachePath=e.path||`storage/framework/cache/data`}async get(e){return this.getPayload(e)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,i){let a=this.path(e);await this.ensureDirectory(r.dirname(a));let o=i>0?this.currentTime()+i:9999999999,s=JSON.stringify({expiration:o,value:this.serialize(t)});try{return await n.writeFile(a,s,`utf-8`),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t;return await this.forever(e,r),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.path(e);try{return await n.unlink(t),!0}catch{return!1}}async flush(){try{return await n.rm(this.cachePath,{recursive:!0,force:!0}),await n.mkdir(this.cachePath,{recursive:!0}),!0}catch{return!1}}getPrefix(){return this.prefix}path(e){let t=`${this.prefix}${e}`,n=this.hash(t),i=[n.substring(0,2),n.substring(2,4)];return r.join(this.cachePath,...i,n)}hash(e){return(0,t.createHash)(`sha256`).update(e).digest(`hex`)}async getPayload(e){let t=this.path(e);try{let r=await n.readFile(t,`utf-8`),i=JSON.parse(r);return i.expiration!==0&&this.currentTime()>=i.expiration?(await this.forget(e),null):this.unserialize(i.value)}catch{return null}}async ensureDirectory(e){await n.mkdir(e,{recursive:!0})}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};exports.FileStore=i;
|
|
1
|
+
const e=require(`../../_virtual/_rolldown/runtime.cjs`);let t=require(`crypto`),n=require(`fs/promises`);n=e.__toESM(n,1);let r=require(`path`);r=e.__toESM(r,1);var i=class{config;prefix;cachePath;constructor(e,t=``){this.config=e,this.prefix=t,this.cachePath=e.path||`storage/framework/cache/data`}async get(e){return this.getPayload(e)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,i){let a=this.path(e);await this.ensureDirectory(r.dirname(a));let o=i>0?this.currentTime()+i:9999999999,s=JSON.stringify({expiration:o,value:this.serialize(t)});try{return await n.writeFile(a,s,`utf-8`),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t;return await this.forever(e,r),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let t=this.path(e);try{return await n.unlink(t),!0}catch{return!1}}async flush(){try{return await n.rm(this.cachePath,{recursive:!0,force:!0}),await n.mkdir(this.cachePath,{recursive:!0}),!0}catch{return!1}}getPrefix(){return this.prefix}path(e){let t=`${this.prefix}${e}`,n=this.hash(t),i=[n.substring(0,2),n.substring(2,4)];return r.join(this.cachePath,...i,n)}hash(e){return(0,t.createHash)(`sha256`).update(e).digest(`hex`)}async getPayload(e){let t=this.path(e);try{let r=await n.readFile(t,`utf-8`),i=JSON.parse(r);return i.expiration!==0&&this.currentTime()>=i.expiration?(await this.forget(e),null):this.unserialize(i.value)}catch{return null}}async ensureDirectory(e){await n.mkdir(e,{recursive:!0})}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};exports.FileStore=i;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createHash as e}from"crypto";import*as t from"fs/promises";import*as n from"path";var r=class{cachePath;constructor(e,t=``){this.config=e,this.prefix=t,this.cachePath=e.path||`storage/framework/cache/data`}async get(e){return this.getPayload(e)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,r,i){let a=this.path(e);await this.ensureDirectory(n.dirname(a));let o=i>0?this.currentTime()+i:9999999999,s=JSON.stringify({expiration:o,value:this.serialize(r)});try{return await t.writeFile(a,s,`utf-8`),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t;return await this.forever(e,r),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let n=this.path(e);try{return await t.unlink(n),!0}catch{return!1}}async flush(){try{return await t.rm(this.cachePath,{recursive:!0,force:!0}),await t.mkdir(this.cachePath,{recursive:!0}),!0}catch{return!1}}getPrefix(){return this.prefix}path(e){let t=`${this.prefix}${e}`,r=this.hash(t),i=[r.substring(0,2),r.substring(2,4)];return n.join(this.cachePath,...i,r)}hash(t){return e(`sha256`).update(t).digest(`hex`)}async getPayload(e){let n=this.path(e);try{let r=await t.readFile(n,`utf-8`),i=JSON.parse(r);return i.expiration!==0&&this.currentTime()>=i.expiration?(await this.forget(e),null):this.unserialize(i.value)}catch{return null}}async ensureDirectory(e){await t.mkdir(e,{recursive:!0})}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};export{r as FileStore};
|
|
1
|
+
import{createHash as e}from"crypto";import*as t from"fs/promises";import*as n from"path";var r=class{config;prefix;cachePath;constructor(e,t=``){this.config=e,this.prefix=t,this.cachePath=e.path||`storage/framework/cache/data`}async get(e){return this.getPayload(e)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,r,i){let a=this.path(e);await this.ensureDirectory(n.dirname(a));let o=i>0?this.currentTime()+i:9999999999,s=JSON.stringify({expiration:o,value:this.serialize(r)});try{return await t.writeFile(a,s,`utf-8`),!0}catch{return!1}}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.get(e),r=(typeof n==`number`?n:0)+t;return await this.forever(e,r),r}async decrement(e,t=1){return this.increment(e,-t)}async forever(e,t){return this.put(e,t,0)}async forget(e){let n=this.path(e);try{return await t.unlink(n),!0}catch{return!1}}async flush(){try{return await t.rm(this.cachePath,{recursive:!0,force:!0}),await t.mkdir(this.cachePath,{recursive:!0}),!0}catch{return!1}}getPrefix(){return this.prefix}path(e){let t=`${this.prefix}${e}`,r=this.hash(t),i=[r.substring(0,2),r.substring(2,4)];return n.join(this.cachePath,...i,r)}hash(t){return e(`sha256`).update(t).digest(`hex`)}async getPayload(e){let n=this.path(e);try{let r=await t.readFile(n,`utf-8`),i=JSON.parse(r);return i.expiration!==0&&this.currentTime()>=i.expiration?(await this.forget(e),null):this.unserialize(i.value)}catch{return null}}async ensureDirectory(e){await t.mkdir(e,{recursive:!0})}currentTime(){return Math.floor(Date.now()/1e3)}serialize(e){return JSON.stringify(e)}unserialize(e){if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e}};export{r as FileStore};
|
|
2
2
|
//# sourceMappingURL=FileStore.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileStore.mjs","names":[],"sources":["../../../src/Cache/Stores/FileStore.ts"],"sourcesContent":["/**\n * FileStore\n *\n * File-based cache store. Stores each cache entry as a JSON file\n * on the filesystem, organized by a two-character hash prefix.\n *\n * Mirrors Laravel's Illuminate\\Cache\\FileStore.\n *\n * @example\n * ```typescript\n * const store = new FileStore({\n * driver: 'file',\n * path: 'storage/framework/cache/data',\n * }, 'app_');\n * ```\n */\n\nimport { createHash } from 'crypto';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport type { Store } from '@/Cache/Contracts/Store';\n\nexport class FileStore implements Store {\n protected cachePath: string;\n\n constructor(\n protected config: Record<string, any>,\n protected prefix: string = ''\n ) {\n this.cachePath = config.path || 'storage/framework/cache/data';\n }\n\n async get<T = any>(key: string): Promise<T | null> {\n return this.getPayload(key);\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n const result: Record<string, T | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async put<T = any>(key: string, value: T, seconds: number): Promise<boolean> {\n const filePath = this.path(key);\n\n await this.ensureDirectory(path.dirname(filePath));\n\n const expiration = seconds > 0 ? this.currentTime() + seconds : 9999999999; // ~2286, effectively forever\n\n const content = JSON.stringify({\n expiration,\n value: this.serialize(value),\n });\n\n try {\n await fs.writeFile(filePath, content, 'utf-8');\n return true;\n } catch {\n return false;\n }\n }\n\n async putMany<T = any>(values: Record<string, T>, seconds: number): Promise<boolean> {\n let success = true;\n for (const [key, value] of Object.entries(values)) {\n if (!(await this.put(key, value, seconds))) {\n success = false;\n }\n }\n return success;\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n const current = await this.get(key);\n const newValue = (typeof current === 'number' ? current : 0) + value;\n await this.forever(key, newValue);\n return newValue;\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.increment(key, -value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.put(key, value, 0);\n }\n\n async forget(key: string): Promise<boolean> {\n const filePath = this.path(key);\n try {\n await fs.unlink(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n async flush(): Promise<boolean> {\n try {\n await fs.rm(this.cachePath, { recursive: true, force: true });\n await fs.mkdir(this.cachePath, { recursive: true });\n return true;\n } catch {\n return false;\n }\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n\n /**\n * Get the full file path for a cache key\n */\n protected path(key: string): string {\n const prefixed = `${this.prefix}${key}`;\n const hash = this.hash(prefixed);\n // Two-level directory structure using first 2+2 chars of hash\n const parts = [hash.substring(0, 2), hash.substring(2, 4)];\n return path.join(this.cachePath, ...parts, hash);\n }\n\n /**\n * Get the hashed key\n */\n protected hash(key: string): string {\n return createHash('sha256').update(key).digest('hex');\n }\n\n /**\n * Read and validate the cache payload\n */\n protected async getPayload(key: string): Promise<any> {\n const filePath = this.path(key);\n\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const data = JSON.parse(content);\n\n // Check expiration\n if (data.expiration !== 0 && this.currentTime() >= data.expiration) {\n await this.forget(key);\n return null;\n }\n\n return this.unserialize(data.value);\n } catch {\n return null;\n }\n }\n\n protected async ensureDirectory(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n }\n\n protected currentTime(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n protected serialize(value: any): any {\n return JSON.stringify(value);\n }\n\n protected unserialize(value: any): any {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n return value;\n }\n}\n"],"mappings":"yFAsBA,IAAa,EAAb,KAAwC,
|
|
1
|
+
{"version":3,"file":"FileStore.mjs","names":[],"sources":["../../../src/Cache/Stores/FileStore.ts"],"sourcesContent":["/**\n * FileStore\n *\n * File-based cache store. Stores each cache entry as a JSON file\n * on the filesystem, organized by a two-character hash prefix.\n *\n * Mirrors Laravel's Illuminate\\Cache\\FileStore.\n *\n * @example\n * ```typescript\n * const store = new FileStore({\n * driver: 'file',\n * path: 'storage/framework/cache/data',\n * }, 'app_');\n * ```\n */\n\nimport { createHash } from 'crypto';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport type { Store } from '@/Cache/Contracts/Store';\n\nexport class FileStore implements Store {\n protected cachePath: string;\n\n constructor(\n protected config: Record<string, any>,\n protected prefix: string = ''\n ) {\n this.cachePath = config.path || 'storage/framework/cache/data';\n }\n\n async get<T = any>(key: string): Promise<T | null> {\n return this.getPayload(key);\n }\n\n async many<T = any>(keys: string[]): Promise<Record<string, T | null>> {\n const result: Record<string, T | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async put<T = any>(key: string, value: T, seconds: number): Promise<boolean> {\n const filePath = this.path(key);\n\n await this.ensureDirectory(path.dirname(filePath));\n\n const expiration = seconds > 0 ? this.currentTime() + seconds : 9999999999; // ~2286, effectively forever\n\n const content = JSON.stringify({\n expiration,\n value: this.serialize(value),\n });\n\n try {\n await fs.writeFile(filePath, content, 'utf-8');\n return true;\n } catch {\n return false;\n }\n }\n\n async putMany<T = any>(values: Record<string, T>, seconds: number): Promise<boolean> {\n let success = true;\n for (const [key, value] of Object.entries(values)) {\n if (!(await this.put(key, value, seconds))) {\n success = false;\n }\n }\n return success;\n }\n\n async increment(key: string, value: number = 1): Promise<number | boolean> {\n const current = await this.get(key);\n const newValue = (typeof current === 'number' ? current : 0) + value;\n await this.forever(key, newValue);\n return newValue;\n }\n\n async decrement(key: string, value: number = 1): Promise<number | boolean> {\n return this.increment(key, -value);\n }\n\n async forever<T = any>(key: string, value: T): Promise<boolean> {\n return this.put(key, value, 0);\n }\n\n async forget(key: string): Promise<boolean> {\n const filePath = this.path(key);\n try {\n await fs.unlink(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n async flush(): Promise<boolean> {\n try {\n await fs.rm(this.cachePath, { recursive: true, force: true });\n await fs.mkdir(this.cachePath, { recursive: true });\n return true;\n } catch {\n return false;\n }\n }\n\n getPrefix(): string {\n return this.prefix;\n }\n\n /**\n * Get the full file path for a cache key\n */\n protected path(key: string): string {\n const prefixed = `${this.prefix}${key}`;\n const hash = this.hash(prefixed);\n // Two-level directory structure using first 2+2 chars of hash\n const parts = [hash.substring(0, 2), hash.substring(2, 4)];\n return path.join(this.cachePath, ...parts, hash);\n }\n\n /**\n * Get the hashed key\n */\n protected hash(key: string): string {\n return createHash('sha256').update(key).digest('hex');\n }\n\n /**\n * Read and validate the cache payload\n */\n protected async getPayload(key: string): Promise<any> {\n const filePath = this.path(key);\n\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const data = JSON.parse(content);\n\n // Check expiration\n if (data.expiration !== 0 && this.currentTime() >= data.expiration) {\n await this.forget(key);\n return null;\n }\n\n return this.unserialize(data.value);\n } catch {\n return null;\n }\n }\n\n protected async ensureDirectory(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n }\n\n protected currentTime(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n protected serialize(value: any): any {\n return JSON.stringify(value);\n }\n\n protected unserialize(value: any): any {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n return value;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);let e=require(`crypto`);var t=class{constructor(e,t){this.store=e,this.names=t}async getNamespace(){let e=[];for(let t of this.names)e.push(await this.tagId(t));return e.join(`|`)}async tagId(t){let n=this.tagKey(t),r=await this.store.get(n);if(r)return r;let i=(0,e.randomUUID)().replace(/-/g,``).substring(0,12);return await this.store.forever(n,i),i}tagKey(e){return`tag:${e}:key`}async reset(){for(let t of this.names)await this.store.forever(this.tagKey(t),(0,e.randomUUID)().replace(/-/g,``).substring(0,12))}async flush(){await this.reset()}getNames(){return this.names}};exports.TagSet=t;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);let e=require(`crypto`);var t=class{store;names;constructor(e,t){this.store=e,this.names=t}async getNamespace(){let e=[];for(let t of this.names)e.push(await this.tagId(t));return e.join(`|`)}async tagId(t){let n=this.tagKey(t),r=await this.store.get(n);if(r)return r;let i=(0,e.randomUUID)().replace(/-/g,``).substring(0,12);return await this.store.forever(n,i),i}tagKey(e){return`tag:${e}:key`}async reset(){for(let t of this.names)await this.store.forever(this.tagKey(t),(0,e.randomUUID)().replace(/-/g,``).substring(0,12))}async flush(){await this.reset()}getNames(){return this.names}};exports.TagSet=t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{randomUUID as e}from"crypto";var t=class{constructor(e,t){this.store=e,this.names=t}async getNamespace(){let e=[];for(let t of this.names)e.push(await this.tagId(t));return e.join(`|`)}async tagId(t){let n=this.tagKey(t),r=await this.store.get(n);if(r)return r;let i=e().replace(/-/g,``).substring(0,12);return await this.store.forever(n,i),i}tagKey(e){return`tag:${e}:key`}async reset(){for(let t of this.names)await this.store.forever(this.tagKey(t),e().replace(/-/g,``).substring(0,12))}async flush(){await this.reset()}getNames(){return this.names}};export{t as TagSet};
|
|
1
|
+
import{randomUUID as e}from"crypto";var t=class{store;names;constructor(e,t){this.store=e,this.names=t}async getNamespace(){let e=[];for(let t of this.names)e.push(await this.tagId(t));return e.join(`|`)}async tagId(t){let n=this.tagKey(t),r=await this.store.get(n);if(r)return r;let i=e().replace(/-/g,``).substring(0,12);return await this.store.forever(n,i),i}tagKey(e){return`tag:${e}:key`}async reset(){for(let t of this.names)await this.store.forever(this.tagKey(t),e().replace(/-/g,``).substring(0,12))}async flush(){await this.reset()}getNames(){return this.names}};export{t as TagSet};
|
|
2
2
|
//# sourceMappingURL=TagSet.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagSet.mjs","names":[],"sources":["../../../src/Cache/Tags/TagSet.ts"],"sourcesContent":["/**\n * TagSet\n *\n * Manages a set of cache tags and their namespaces.\n * Used by TaggedCache to prefix keys with tag identifiers.\n *\n * Mirrors Laravel's Illuminate\\Cache\\TagSet.\n */\n\nimport { randomUUID } from 'crypto';\nimport type { Store } from '@/Cache/Contracts/Store';\n\nexport class TagSet {\n constructor(\n protected store: Store,\n protected names: string[]\n ) {}\n\n /**\n * Get the tag namespace for all tags combined\n */\n async getNamespace(): Promise<string> {\n const ids: string[] = [];\n\n for (const name of this.names) {\n ids.push(await this.tagId(name));\n }\n\n return ids.join('|');\n }\n\n /**\n * Get the unique tag identifier for a tag name\n */\n protected async tagId(name: string): Promise<string> {\n const tagKey = this.tagKey(name);\n const existing = await this.store.get(tagKey);\n\n if (existing) {\n return existing;\n }\n\n // Create a new tag ID\n const id = randomUUID().replace(/-/g, '').substring(0, 12);\n await this.store.forever(tagKey, id);\n return id;\n }\n\n /**\n * Get the tag identifier key\n */\n tagKey(name: string): string {\n return `tag:${name}:key`;\n }\n\n /**\n * Reset all tag identifiers (used for flushing)\n */\n async reset(): Promise<void> {\n for (const name of this.names) {\n await this.store.forever(this.tagKey(name), randomUUID().replace(/-/g, '').substring(0, 12));\n }\n }\n\n /**\n * Flush all tag identifier keys\n */\n async flush(): Promise<void> {\n await this.reset();\n }\n\n /**\n * Get the tag names\n */\n getNames(): string[] {\n return this.names;\n }\n}\n"],"mappings":"oCAYA,IAAa,EAAb,KAAoB,
|
|
1
|
+
{"version":3,"file":"TagSet.mjs","names":[],"sources":["../../../src/Cache/Tags/TagSet.ts"],"sourcesContent":["/**\n * TagSet\n *\n * Manages a set of cache tags and their namespaces.\n * Used by TaggedCache to prefix keys with tag identifiers.\n *\n * Mirrors Laravel's Illuminate\\Cache\\TagSet.\n */\n\nimport { randomUUID } from 'crypto';\nimport type { Store } from '@/Cache/Contracts/Store';\n\nexport class TagSet {\n constructor(\n protected store: Store,\n protected names: string[]\n ) {}\n\n /**\n * Get the tag namespace for all tags combined\n */\n async getNamespace(): Promise<string> {\n const ids: string[] = [];\n\n for (const name of this.names) {\n ids.push(await this.tagId(name));\n }\n\n return ids.join('|');\n }\n\n /**\n * Get the unique tag identifier for a tag name\n */\n protected async tagId(name: string): Promise<string> {\n const tagKey = this.tagKey(name);\n const existing = await this.store.get(tagKey);\n\n if (existing) {\n return existing;\n }\n\n // Create a new tag ID\n const id = randomUUID().replace(/-/g, '').substring(0, 12);\n await this.store.forever(tagKey, id);\n return id;\n }\n\n /**\n * Get the tag identifier key\n */\n tagKey(name: string): string {\n return `tag:${name}:key`;\n }\n\n /**\n * Reset all tag identifiers (used for flushing)\n */\n async reset(): Promise<void> {\n for (const name of this.names) {\n await this.store.forever(this.tagKey(name), randomUUID().replace(/-/g, '').substring(0, 12));\n }\n }\n\n /**\n * Flush all tag identifier keys\n */\n async flush(): Promise<void> {\n await this.reset();\n }\n\n /**\n * Get the tag names\n */\n getNames(): string[] {\n return this.names;\n }\n}\n"],"mappings":"oCAYA,IAAa,EAAb,KAAoB,CAEN,MACA,MAFZ,YACE,EACA,EACA,CAFU,KAAA,MAAA,EACA,KAAA,MAAA,EAMZ,MAAM,cAAgC,CACpC,IAAM,EAAgB,EAAE,CAExB,IAAK,IAAM,KAAQ,KAAK,MACtB,EAAI,KAAK,MAAM,KAAK,MAAM,EAAK,CAAC,CAGlC,OAAO,EAAI,KAAK,IAAI,CAMtB,MAAgB,MAAM,EAA+B,CACnD,IAAM,EAAS,KAAK,OAAO,EAAK,CAC1B,EAAW,MAAM,KAAK,MAAM,IAAI,EAAO,CAE7C,GAAI,EACF,OAAO,EAIT,IAAM,EAAK,GAAY,CAAC,QAAQ,KAAM,GAAG,CAAC,UAAU,EAAG,GAAG,CAE1D,OADA,MAAM,KAAK,MAAM,QAAQ,EAAQ,EAAG,CAC7B,EAMT,OAAO,EAAsB,CAC3B,MAAO,OAAO,EAAK,MAMrB,MAAM,OAAuB,CAC3B,IAAK,IAAM,KAAQ,KAAK,MACtB,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO,EAAK,CAAE,GAAY,CAAC,QAAQ,KAAM,GAAG,CAAC,UAAU,EAAG,GAAG,CAAC,CAOhG,MAAM,OAAuB,CAC3B,MAAM,KAAK,OAAO,CAMpB,UAAqB,CACnB,OAAO,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{constructor(e,t){this.store=e,this.tags=t}async get(e){let t=await this.taggedItemKey(e);return this.store.get(t)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=await this.taggedItemKey(e);return this.store.put(r,t,n)}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.taggedItemKey(e);return this.store.increment(n,t)}async decrement(e,t=1){let n=await this.taggedItemKey(e);return this.store.decrement(n,t)}async forever(e,t){let n=await this.taggedItemKey(e);return this.store.forever(n,t)}async forget(e){let t=await this.taggedItemKey(e);return this.store.forget(t)}async flush(){return await this.tags.flush(),!0}async has(e){return await this.get(e)!==null}async pull(e,t){let n=await this.get(e);return n===null?t??null:(await this.forget(e),n)}async remember(e,t,n){let r=await this.get(e);if(r!==null)return r;let i=await n();return await this.put(e,i,t),i}async rememberForever(e,t){let n=await this.get(e);if(n!==null)return n;let r=await t();return await this.forever(e,r),r}async taggedItemKey(e){return`${await this.tags.getNamespace()}:${e}`}getTags(){return this.tags}};exports.TaggedCache=e;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{store;tags;constructor(e,t){this.store=e,this.tags=t}async get(e){let t=await this.taggedItemKey(e);return this.store.get(t)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=await this.taggedItemKey(e);return this.store.put(r,t,n)}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.taggedItemKey(e);return this.store.increment(n,t)}async decrement(e,t=1){let n=await this.taggedItemKey(e);return this.store.decrement(n,t)}async forever(e,t){let n=await this.taggedItemKey(e);return this.store.forever(n,t)}async forget(e){let t=await this.taggedItemKey(e);return this.store.forget(t)}async flush(){return await this.tags.flush(),!0}async has(e){return await this.get(e)!==null}async pull(e,t){let n=await this.get(e);return n===null?t??null:(await this.forget(e),n)}async remember(e,t,n){let r=await this.get(e);if(r!==null)return r;let i=await n();return await this.put(e,i,t),i}async rememberForever(e,t){let n=await this.get(e);if(n!==null)return n;let r=await t();return await this.forever(e,r),r}async taggedItemKey(e){return`${await this.tags.getNamespace()}:${e}`}getTags(){return this.tags}};exports.TaggedCache=e;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=class{constructor(e,t){this.store=e,this.tags=t}async get(e){let t=await this.taggedItemKey(e);return this.store.get(t)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=await this.taggedItemKey(e);return this.store.put(r,t,n)}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.taggedItemKey(e);return this.store.increment(n,t)}async decrement(e,t=1){let n=await this.taggedItemKey(e);return this.store.decrement(n,t)}async forever(e,t){let n=await this.taggedItemKey(e);return this.store.forever(n,t)}async forget(e){let t=await this.taggedItemKey(e);return this.store.forget(t)}async flush(){return await this.tags.flush(),!0}async has(e){return await this.get(e)!==null}async pull(e,t){let n=await this.get(e);return n===null?t??null:(await this.forget(e),n)}async remember(e,t,n){let r=await this.get(e);if(r!==null)return r;let i=await n();return await this.put(e,i,t),i}async rememberForever(e,t){let n=await this.get(e);if(n!==null)return n;let r=await t();return await this.forever(e,r),r}async taggedItemKey(e){return`${await this.tags.getNamespace()}:${e}`}getTags(){return this.tags}};export{e as TaggedCache};
|
|
1
|
+
var e=class{store;tags;constructor(e,t){this.store=e,this.tags=t}async get(e){let t=await this.taggedItemKey(e);return this.store.get(t)}async many(e){let t={};for(let n of e)t[n]=await this.get(n);return t}async put(e,t,n){let r=await this.taggedItemKey(e);return this.store.put(r,t,n)}async putMany(e,t){let n=!0;for(let[r,i]of Object.entries(e))await this.put(r,i,t)||(n=!1);return n}async increment(e,t=1){let n=await this.taggedItemKey(e);return this.store.increment(n,t)}async decrement(e,t=1){let n=await this.taggedItemKey(e);return this.store.decrement(n,t)}async forever(e,t){let n=await this.taggedItemKey(e);return this.store.forever(n,t)}async forget(e){let t=await this.taggedItemKey(e);return this.store.forget(t)}async flush(){return await this.tags.flush(),!0}async has(e){return await this.get(e)!==null}async pull(e,t){let n=await this.get(e);return n===null?t??null:(await this.forget(e),n)}async remember(e,t,n){let r=await this.get(e);if(r!==null)return r;let i=await n();return await this.put(e,i,t),i}async rememberForever(e,t){let n=await this.get(e);if(n!==null)return n;let r=await t();return await this.forever(e,r),r}async taggedItemKey(e){return`${await this.tags.getNamespace()}:${e}`}getTags(){return this.tags}};export{e as TaggedCache};
|
|
2
2
|
//# sourceMappingURL=TaggedCache.mjs.map
|