New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@travetto/cache

Package Overview
Dependencies
Maintainers
1
Versions
330
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@travetto/cache - npm Package Compare versions

Comparing version 4.0.7 to 4.1.0

10

package.json
{
"name": "@travetto/cache",
"version": "4.0.7",
"version": "4.1.0",
"description": "Caching functionality with decorators for declarative use.",

@@ -28,8 +28,8 @@ "keywords": [

"dependencies": {
"@travetto/di": "^4.0.7",
"@travetto/model": "^4.0.7"
"@travetto/di": "^4.1.0",
"@travetto/model": "^4.1.0"
},
"peerDependencies": {
"@travetto/test": "^4.0.7",
"@travetto/transformer": "^4.0.4"
"@travetto/test": "^4.1.0",
"@travetto/transformer": "^4.1.0"
},

@@ -36,0 +36,0 @@ "peerDependenciesMeta": {

@@ -1,6 +0,6 @@

import { ExpiresAt, Model, ModelExpirySupport, NotFoundError } from '@travetto/model';
import { ExpiresAt, Index, Model, ModelExpirySupport, NotFoundError } from '@travetto/model';
import { Text } from '@travetto/schema';
import { Inject, Injectable } from '@travetto/di';
import { Env } from '@travetto/base';
import { isStorageSupported } from '@travetto/model/src/internal/service/common';
import { AppError, Env } from '@travetto/base';
import { isIndexedSupported, isStorageSupported } from '@travetto/model/src/internal/service/common';

@@ -15,2 +15,7 @@ import { CacheError } from './error';

@Index({
name: 'keySpace',
type: 'unsorted',
fields: [{ keySpace: 1 }]
})
@Model({ autoCreate: false })

@@ -21,2 +26,3 @@ export class CacheRecord {

entry: string;
keySpace: string;
@ExpiresAt()

@@ -82,3 +88,3 @@ expiresAt: Date;

*/
async set(id: string, entry: unknown, maxAge?: number): Promise<unknown> {
async set(id: string, keySpace: string, entry: unknown, maxAge?: number): Promise<unknown> {
const entryText = CacheUtil.toSafeJSON(entry);

@@ -90,2 +96,3 @@

entry: entryText!,
keySpace,
expiresAt: new Date(maxAge ? maxAge + Date.now() : INFINITE_MAX_AGE),

@@ -108,2 +115,18 @@ issuedAt: new Date()

/**
* Remove all entries by key space
* @param id
*/
async deleteAll(keySpace: string): Promise<void> {
if (isIndexedSupported(this.#modelService)) {
const removes: Promise<void>[] = [];
for await (const item of this.#modelService.listByIndex(CacheRecord, 'keySpace', { keySpace })) {
removes.push(this.#modelService.delete(CacheRecord, item.id));
}
await Promise.all(removes);
} else {
throw new AppError('Unable to delete all on an un-indexed database', 'general');
}
}
/**
* Purge the cache store of all data, if supported

@@ -154,3 +177,3 @@ */

const data = await fn.apply(target, params);
res = await this.set(id, data, config.maxAge);
res = await this.set(id, config.keySpace!, data, config.maxAge);
}

@@ -157,0 +180,0 @@

@@ -9,2 +9,3 @@ import assert from 'node:assert';

import { ModelSuite } from '@travetto/model/support/test/suite';
import { isIndexedSupported } from '@travetto/model/src/internal/service/common';
import { Class } from '@travetto/base';

@@ -76,2 +77,8 @@ import { Schema } from '@travetto/schema';

}
async deleteAllUsers() {
this.source.deleteAll('user.id');
await timers.setTimeout(100);
return true;
}
}

@@ -214,2 +221,41 @@

}
@Test()
async allEviction() {
if (!isIndexedSupported(this.serviceClass.prototype)) {
return;
}
const service = await this.testService;
// Prime cache
for (let i = 0; i < 10; i++) {
const start = Date.now();
await service.getUser(`${i}`);
assert((Date.now() - start) >= 100);
}
// Read cache
for (let i = 0; i < 10; i++) {
const start = Date.now();
await service.getUser(`${i}`);
assert((Date.now() - start) <= (this.baseLatency + 100));
}
await service.deleteAllUsers();
// Prime cache
for (let i = 0; i < 10; i++) {
const start = Date.now();
await service.getUser(`${i}`);
assert((Date.now() - start) >= 100);
}
// Read cache
for (let i = 0; i < 10; i++) {
const start = Date.now();
await service.getUser(`${i}`);
assert((Date.now() - start) <= (this.baseLatency + 100));
}
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc