Merge pull request #27716 from eipc16/pp/upgrade-keyvredis
Fixed cache key resolution for redis store with useRedisSets set to false
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
---
|
||||
'@backstage/backend-defaults': minor
|
||||
'@backstage/backend-test-utils': minor
|
||||
---
|
||||
|
||||
**BREAKING** Upgraded @keyv/redis and keyv packages to resolve a bug related to incorrect resolution of cache keys.
|
||||
|
||||
This is a breaking change for clients using the `redis` store for cache with `useRedisSets` option set to false since cache keys will be calculated differently (without the sets:namespace: prefix). For clients with default configuration (or useRedisSets set to false) the cache keys will stay the same, but since @keyv/redis library no longer supports redis sets they won't be utilised anymore.
|
||||
|
||||
If you were using `useRedisSets` option in configuration make sure to remove it from `app-config.yaml`:
|
||||
|
||||
```diff
|
||||
backend:
|
||||
cache:
|
||||
store: redis
|
||||
connection: redis://user:pass@cache.example.com:6379
|
||||
- useRedisSets: false
|
||||
```
|
||||
@@ -323,11 +323,8 @@ backend:
|
||||
cache:
|
||||
store: redis
|
||||
connection: redis://user:pass@cache.example.com:6379
|
||||
useRedisSets: true
|
||||
```
|
||||
|
||||
The useRedisSets flag is explained [here](https://github.com/jaredwray/keyv/tree/main/packages/redis#useredissets).
|
||||
|
||||
Contributions supporting other cache stores are welcome!
|
||||
|
||||
## Containerization
|
||||
|
||||
@@ -109,6 +109,8 @@
|
||||
"@playwright/test": "^1.32.3",
|
||||
"@spotify/eslint-plugin": "^15.0.0",
|
||||
"@techdocs/cli": "workspace:*",
|
||||
"@types/cacheable-request": "^8.3.6",
|
||||
"@types/memjs": "^1.3.3",
|
||||
"@types/node": "^20.16.0",
|
||||
"@types/webpack": "^5.28.0",
|
||||
"array-to-table": "^1.0.1",
|
||||
|
||||
-5
@@ -486,11 +486,6 @@ export interface Config {
|
||||
connection: string;
|
||||
/** An optional default TTL (in milliseconds, if given as a number). */
|
||||
defaultTtl?: number | HumanDuration | string;
|
||||
/**
|
||||
* Whether or not [useRedisSets](https://github.com/jaredwray/keyv/tree/main/packages/redis#useredissets) should be configured to this redis cache.
|
||||
* Defaults to true if unspecified.
|
||||
*/
|
||||
useRedisSets?: boolean;
|
||||
}
|
||||
| {
|
||||
store: 'memcache';
|
||||
|
||||
@@ -136,8 +136,8 @@
|
||||
"@backstage/plugin-permission-node": "workspace:^",
|
||||
"@backstage/types": "workspace:^",
|
||||
"@google-cloud/storage": "^7.0.0",
|
||||
"@keyv/memcache": "^1.3.5",
|
||||
"@keyv/redis": "^2.5.3",
|
||||
"@keyv/memcache": "^2.0.1",
|
||||
"@keyv/redis": "^4.0.1",
|
||||
"@manypkg/get-packages": "^1.1.3",
|
||||
"@octokit/rest": "^19.0.3",
|
||||
"@opentelemetry/api": "^1.3.0",
|
||||
@@ -158,7 +158,7 @@
|
||||
"helmet": "^6.0.0",
|
||||
"isomorphic-git": "^1.23.0",
|
||||
"jose": "^5.0.0",
|
||||
"keyv": "^4.5.2",
|
||||
"keyv": "^5.2.1",
|
||||
"knex": "^3.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"logform": "^2.3.2",
|
||||
|
||||
@@ -25,15 +25,21 @@ import { CacheManager } from './CacheManager';
|
||||
// Contrived code because it's hard to spy on a default export
|
||||
jest.mock('@keyv/redis', () => {
|
||||
const Actual = jest.requireActual('@keyv/redis');
|
||||
return jest.fn((...args: any[]) => {
|
||||
return new Actual(...args);
|
||||
});
|
||||
const DefaultConstructor = Actual.default;
|
||||
return {
|
||||
...Actual,
|
||||
__esModule: true,
|
||||
default: jest.fn((...args: any[]) => new DefaultConstructor(...args)),
|
||||
};
|
||||
});
|
||||
jest.mock('@keyv/memcache', () => {
|
||||
const Actual = jest.requireActual('@keyv/memcache');
|
||||
return jest.fn((...args: any[]) => {
|
||||
return new Actual(...args);
|
||||
});
|
||||
const DefaultConstructor = Actual.default;
|
||||
return {
|
||||
...Actual,
|
||||
__esModule: true,
|
||||
default: jest.fn((...args: any[]) => new DefaultConstructor(...args)),
|
||||
};
|
||||
});
|
||||
|
||||
describe('CacheManager integration', () => {
|
||||
@@ -42,7 +48,7 @@ describe('CacheManager integration', () => {
|
||||
afterEach(jest.clearAllMocks);
|
||||
|
||||
it.each(caches.eachSupportedId())(
|
||||
'only creates one underlying connection, %p',
|
||||
'only creates one underlying connection per plugin, %p',
|
||||
async cacheId => {
|
||||
const { store, connection } = await caches.init(cacheId);
|
||||
|
||||
@@ -59,10 +65,10 @@ describe('CacheManager integration', () => {
|
||||
|
||||
if (store === 'redis') {
|
||||
// eslint-disable-next-line jest/no-conditional-expect
|
||||
expect(KeyvRedis).toHaveBeenCalledTimes(1);
|
||||
expect(KeyvRedis).toHaveBeenCalledTimes(3);
|
||||
} else if (store === 'memcache') {
|
||||
// eslint-disable-next-line jest/no-conditional-expect
|
||||
expect(KeyvMemcache).toHaveBeenCalledTimes(1);
|
||||
expect(KeyvMemcache).toHaveBeenCalledTimes(3);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
+22
-20
@@ -49,7 +49,6 @@ export class CacheManager {
|
||||
private readonly logger?: LoggerService;
|
||||
private readonly store: keyof CacheManager['storeFactories'];
|
||||
private readonly connection: string;
|
||||
private readonly useRedisSets: boolean;
|
||||
private readonly errorHandler: CacheManagerOptions['onError'];
|
||||
private readonly defaultTtl?: number;
|
||||
|
||||
@@ -69,12 +68,16 @@ export class CacheManager {
|
||||
const defaultTtlConfig = config.getOptional('backend.cache.defaultTtl');
|
||||
const connectionString =
|
||||
config.getOptionalString('backend.cache.connection') || '';
|
||||
const useRedisSets =
|
||||
config.getOptionalBoolean('backend.cache.useRedisSets') ?? true;
|
||||
const logger = options.logger?.child({
|
||||
type: 'cacheManager',
|
||||
});
|
||||
|
||||
if (config.has('backend.cache.useRedisSets')) {
|
||||
logger?.warn(
|
||||
"The 'backend.cache.useRedisSets' configuration key is deprecated and no longer has any effect. The underlying '@keyv/redis' library no longer supports redis sets.",
|
||||
);
|
||||
}
|
||||
|
||||
let defaultTtl: number | undefined;
|
||||
if (defaultTtlConfig !== undefined) {
|
||||
if (typeof defaultTtlConfig === 'number') {
|
||||
@@ -89,7 +92,6 @@ export class CacheManager {
|
||||
return new CacheManager(
|
||||
store,
|
||||
connectionString,
|
||||
useRedisSets,
|
||||
options.onError,
|
||||
logger,
|
||||
defaultTtl,
|
||||
@@ -100,7 +102,6 @@ export class CacheManager {
|
||||
constructor(
|
||||
store: string,
|
||||
connectionString: string,
|
||||
useRedisSets: boolean,
|
||||
errorHandler: CacheManagerOptions['onError'],
|
||||
logger?: LoggerService,
|
||||
defaultTtl?: number,
|
||||
@@ -111,7 +112,6 @@ export class CacheManager {
|
||||
this.logger = logger;
|
||||
this.store = store as keyof CacheManager['storeFactories'];
|
||||
this.connection = connectionString;
|
||||
this.useRedisSets = useRedisSets;
|
||||
this.errorHandler = errorHandler;
|
||||
this.defaultTtl = defaultTtl;
|
||||
}
|
||||
@@ -139,15 +139,16 @@ export class CacheManager {
|
||||
}
|
||||
|
||||
private createRedisStoreFactory(): StoreFactory {
|
||||
const KeyvRedis = require('@keyv/redis');
|
||||
let store: typeof KeyvRedis | undefined;
|
||||
const KeyvRedis = require('@keyv/redis').default;
|
||||
const stores: Record<string, typeof KeyvRedis> = {};
|
||||
|
||||
return (pluginId, defaultTtl) => {
|
||||
if (!store) {
|
||||
store = new KeyvRedis(this.connection, {
|
||||
useRedisSets: this.useRedisSets,
|
||||
if (!stores[pluginId]) {
|
||||
stores[pluginId] = new KeyvRedis(this.connection, {
|
||||
keyPrefixSeparator: ':',
|
||||
});
|
||||
// Always provide an error handler to avoid stopping the process
|
||||
store.on('error', (err: Error) => {
|
||||
stores[pluginId].on('error', (err: Error) => {
|
||||
this.logger?.error('Failed to create redis cache client', err);
|
||||
this.errorHandler?.(err);
|
||||
});
|
||||
@@ -155,21 +156,22 @@ export class CacheManager {
|
||||
return new Keyv({
|
||||
namespace: pluginId,
|
||||
ttl: defaultTtl,
|
||||
store,
|
||||
store: stores[pluginId],
|
||||
emitErrors: false,
|
||||
useRedisSets: this.useRedisSets,
|
||||
useKeyPrefix: false,
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
private createMemcacheStoreFactory(): StoreFactory {
|
||||
const KeyvMemcache = require('@keyv/memcache');
|
||||
let store: typeof KeyvMemcache | undefined;
|
||||
const KeyvMemcache = require('@keyv/memcache').default;
|
||||
const stores: Record<string, typeof KeyvMemcache> = {};
|
||||
|
||||
return (pluginId, defaultTtl) => {
|
||||
if (!store) {
|
||||
store = new KeyvMemcache(this.connection);
|
||||
if (!stores[pluginId]) {
|
||||
stores[pluginId] = new KeyvMemcache(this.connection);
|
||||
// Always provide an error handler to avoid stopping the process
|
||||
store.on('error', (err: Error) => {
|
||||
stores[pluginId].on('error', (err: Error) => {
|
||||
this.logger?.error('Failed to create memcache cache client', err);
|
||||
this.errorHandler?.(err);
|
||||
});
|
||||
@@ -178,7 +180,7 @@ export class CacheManager {
|
||||
namespace: pluginId,
|
||||
ttl: defaultTtl,
|
||||
emitErrors: false,
|
||||
store,
|
||||
store: stores[pluginId],
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
"@backstage/plugin-auth-node": "workspace:^",
|
||||
"@backstage/plugin-events-node": "workspace:^",
|
||||
"@backstage/types": "workspace:^",
|
||||
"@keyv/memcache": "^1.3.5",
|
||||
"@keyv/redis": "^2.5.3",
|
||||
"@keyv/memcache": "^2.0.1",
|
||||
"@keyv/redis": "^4.0.1",
|
||||
"@types/express": "^4.17.6",
|
||||
"@types/express-serve-static-core": "^4.17.5",
|
||||
"@types/keyv": "^4.2.0",
|
||||
@@ -63,7 +63,7 @@
|
||||
"cookie": "^0.7.0",
|
||||
"express": "^4.17.1",
|
||||
"fs-extra": "^11.0.0",
|
||||
"keyv": "^4.5.2",
|
||||
"keyv": "^5.2.1",
|
||||
"knex": "^3.0.0",
|
||||
"mysql2": "^3.0.0",
|
||||
"pg": "^8.11.3",
|
||||
|
||||
@@ -3600,8 +3600,8 @@ __metadata:
|
||||
"@backstage/plugin-permission-node": "workspace:^"
|
||||
"@backstage/types": "workspace:^"
|
||||
"@google-cloud/storage": ^7.0.0
|
||||
"@keyv/memcache": ^1.3.5
|
||||
"@keyv/redis": ^2.5.3
|
||||
"@keyv/memcache": ^2.0.1
|
||||
"@keyv/redis": ^4.0.1
|
||||
"@manypkg/get-packages": ^1.1.3
|
||||
"@octokit/rest": ^19.0.3
|
||||
"@opentelemetry/api": ^1.3.0
|
||||
@@ -3632,7 +3632,7 @@ __metadata:
|
||||
http-errors: ^2.0.0
|
||||
isomorphic-git: ^1.23.0
|
||||
jose: ^5.0.0
|
||||
keyv: ^4.5.2
|
||||
keyv: ^5.2.1
|
||||
knex: ^3.0.0
|
||||
lodash: ^4.17.21
|
||||
logform: ^2.3.2
|
||||
@@ -3771,8 +3771,8 @@ __metadata:
|
||||
"@backstage/plugin-auth-node": "workspace:^"
|
||||
"@backstage/plugin-events-node": "workspace:^"
|
||||
"@backstage/types": "workspace:^"
|
||||
"@keyv/memcache": ^1.3.5
|
||||
"@keyv/redis": ^2.5.3
|
||||
"@keyv/memcache": ^2.0.1
|
||||
"@keyv/redis": ^4.0.1
|
||||
"@types/express": ^4.17.6
|
||||
"@types/express-serve-static-core": ^4.17.5
|
||||
"@types/keyv": ^4.2.0
|
||||
@@ -3782,7 +3782,7 @@ __metadata:
|
||||
cookie: ^0.7.0
|
||||
express: ^4.17.1
|
||||
fs-extra: ^11.0.0
|
||||
keyv: ^4.5.2
|
||||
keyv: ^5.2.1
|
||||
knex: ^3.0.0
|
||||
mysql2: ^3.0.0
|
||||
pg: ^8.11.3
|
||||
@@ -10770,6 +10770,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@keyv/memcache@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "@keyv/memcache@npm:2.0.1"
|
||||
dependencies:
|
||||
"@keyv/serialize": "*"
|
||||
buffer: ^6.0.3
|
||||
memjs: ^1.3.2
|
||||
checksum: 357b320fb3998e7bff9e3a5702da3cc0d4337586f1a04392dfb490cef7af2c039c3ecda922b18029cc9de6e9310a91cde1602b0851fb86acb93b629200458cc2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@keyv/redis@npm:^2.5.3":
|
||||
version: 2.8.5
|
||||
resolution: "@keyv/redis@npm:2.8.5"
|
||||
@@ -10779,6 +10790,25 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@keyv/redis@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "@keyv/redis@npm:4.0.1"
|
||||
dependencies:
|
||||
keyv: "*"
|
||||
redis: ^4.7.0
|
||||
checksum: a2e05be0cf9d7fa9e425322a853544d4ed264220469413e63039c599ad6f1c3b81c6116116db9bff64f958bb5c9c904bc26cc28a6915fbae169beebedfebc2a3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@keyv/serialize@npm:*":
|
||||
version: 1.0.1
|
||||
resolution: "@keyv/serialize@npm:1.0.1"
|
||||
dependencies:
|
||||
buffer: ^6.0.3
|
||||
checksum: ff3dd9a6246b17fca3d1b0aba312dea931059fdecc36027f4d8133e59dbb3554a0a516b1f3dfc7fb2b3ca7a3d6fa307804f299566ab214febd3fb9d0502eebed
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@kubernetes-models/apimachinery@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "@kubernetes-models/apimachinery@npm:2.0.0"
|
||||
@@ -14647,6 +14677,62 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@redis/bloom@npm:1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "@redis/bloom@npm:1.2.0"
|
||||
peerDependencies:
|
||||
"@redis/client": ^1.0.0
|
||||
checksum: 8c214227287d6b278109098bca00afc601cf84f7da9c6c24f4fa7d3854b946170e5893aa86ed607ba017a4198231d570541c79931b98b6d50b262971022d1d6c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@redis/client@npm:1.6.0":
|
||||
version: 1.6.0
|
||||
resolution: "@redis/client@npm:1.6.0"
|
||||
dependencies:
|
||||
cluster-key-slot: 1.1.2
|
||||
generic-pool: 3.9.0
|
||||
yallist: 4.0.0
|
||||
checksum: c01c89a793541dc6908a97f375fec3ac28bed7f92b1c20351a3073ce75c0263998a30c3316cbb76e6a4403059d9982d40aec0bc8f1b3cab43615edaaf05980da
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@redis/graph@npm:1.1.1":
|
||||
version: 1.1.1
|
||||
resolution: "@redis/graph@npm:1.1.1"
|
||||
peerDependencies:
|
||||
"@redis/client": ^1.0.0
|
||||
checksum: caf9b9a3ff82a08ae543c356a3fed548399ae79aba5ed08ce6cf1b522b955eb5cee4406b0ed0c6899345f8fbc06dfd6cd51304ae8422c3ebbc468f53294dc509
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@redis/json@npm:1.0.7":
|
||||
version: 1.0.7
|
||||
resolution: "@redis/json@npm:1.0.7"
|
||||
peerDependencies:
|
||||
"@redis/client": ^1.0.0
|
||||
checksum: a84d51c06a2af9a42eff5a6db795e7c0f7ada27d958f5d762b6f9778f413399dbe6a0c2ab00dd7ccc5fdab5f2940afbab4a56c2b1c284a2326d0f79965d5bba1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@redis/search@npm:1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "@redis/search@npm:1.2.0"
|
||||
peerDependencies:
|
||||
"@redis/client": ^1.0.0
|
||||
checksum: 256ddf8b30f216b605e571c9085e0efd5e3b43229b57db8ba0eea3376540ada437b68509c3bb0354e3c784f5fa1b825593cc602ebbfc5cbfa9e46d5c7be67eb6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@redis/time-series@npm:1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "@redis/time-series@npm:1.1.0"
|
||||
peerDependencies:
|
||||
"@redis/client": ^1.0.0
|
||||
checksum: 785f024e1c83866708beb254f765e561ccd6e6caad61b697223b3355ee92ca1e99a4d312c4ce03a3d6a29a223f38a2ec844c80b47990fa3bd9ddc56a30c1376f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@remix-run/router@npm:1.21.0":
|
||||
version: 1.21.0
|
||||
resolution: "@remix-run/router@npm:1.21.0"
|
||||
@@ -15207,6 +15293,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sec-ant/readable-stream@npm:^0.4.1":
|
||||
version: 0.4.1
|
||||
resolution: "@sec-ant/readable-stream@npm:0.4.1"
|
||||
checksum: eb56f72a70995f725269f1c1c206d6dbeb090e88413b1302a456c600041175a7a484c2f0172454f7bed65a8ab95ffed7647d8ad03e6c23b1e3bbc9845f78cd17
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@segment/analytics-core@npm:1.4.1":
|
||||
version: 1.4.1
|
||||
resolution: "@segment/analytics-core@npm:1.4.1"
|
||||
@@ -17542,6 +17635,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/cacheable-request@npm:^8.3.6":
|
||||
version: 8.3.6
|
||||
resolution: "@types/cacheable-request@npm:8.3.6"
|
||||
dependencies:
|
||||
cacheable-request: "*"
|
||||
checksum: e6046beb3d74a21484f365052a740d000695548dc6d01923350a087bb1530f6361a8a2948cd16ea2176f5f4a3b907fc84a8aa3fd5ad9ea13e62ced28dc65693f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/caseless@npm:*":
|
||||
version: 0.12.2
|
||||
resolution: "@types/caseless@npm:0.12.2"
|
||||
@@ -17970,10 +18072,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/http-cache-semantics@npm:*":
|
||||
version: 4.0.0
|
||||
resolution: "@types/http-cache-semantics@npm:4.0.0"
|
||||
checksum: c820774eb1d9d8d0c13077834e870cc1afd2500dc9d0ac1b67abc050c7c115aee4024f90fda65b50babc258de0464fc4459709e4fa12552f65094328e5a551c6
|
||||
"@types/http-cache-semantics@npm:*, @types/http-cache-semantics@npm:^4.0.4":
|
||||
version: 4.0.4
|
||||
resolution: "@types/http-cache-semantics@npm:4.0.4"
|
||||
checksum: 7f4dd832e618bc1e271be49717d7b4066d77c2d4eed5b81198eb987e532bb3e1c7e02f45d77918185bad936f884b700c10cebe06305f50400f382ab75055f9e8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -18247,6 +18349,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/memjs@npm:^1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@types/memjs@npm:1.3.3"
|
||||
dependencies:
|
||||
"@types/node": "*"
|
||||
checksum: 23efd3196a6318b251ebbcebef03f737aa609ff467430348dad540aec5db58e49b291b40df743f19f9182bfbe7f06fb6244aaecc28513b4f27728ed2117a1b21
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/mime-types@npm:^2.1.0":
|
||||
version: 2.1.4
|
||||
resolution: "@types/mime-types@npm:2.1.4"
|
||||
@@ -22621,6 +22732,21 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cacheable-request@npm:*":
|
||||
version: 13.0.2
|
||||
resolution: "cacheable-request@npm:13.0.2"
|
||||
dependencies:
|
||||
"@types/http-cache-semantics": ^4.0.4
|
||||
get-stream: ^9.0.1
|
||||
http-cache-semantics: ^4.1.1
|
||||
keyv: ^5.2.1
|
||||
mimic-response: ^4.0.0
|
||||
normalize-url: ^8.0.1
|
||||
responselike: ^3.0.0
|
||||
checksum: b019639ddbd617eced8933882c4a15d3de8a51ab2f90fddae860812951c5f5271f293696bd4cf37f6605e73239fca37cff1c8a32d01aa28a27fd685a66aa590a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cacheable-request@npm:^6.0.0":
|
||||
version: 6.1.0
|
||||
resolution: "cacheable-request@npm:6.1.0"
|
||||
@@ -23216,10 +23342,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cluster-key-slot@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "cluster-key-slot@npm:1.1.0"
|
||||
checksum: fc953c75209b1ef9088081bab4e40a0b2586491c974ab93460569c014515ca5a2e31c043f185285e177007162fc353d07836d98f570c171dbe055775430e495b
|
||||
"cluster-key-slot@npm:1.1.2, cluster-key-slot@npm:^1.1.0":
|
||||
version: 1.1.2
|
||||
resolution: "cluster-key-slot@npm:1.1.2"
|
||||
checksum: be0ad2d262502adc998597e83f9ded1b80f827f0452127c5a37b22dfca36bab8edf393f7b25bb626006fb9fb2436106939ede6d2d6ecf4229b96a47f27edd681
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -28304,6 +28430,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"generic-pool@npm:3.9.0":
|
||||
version: 3.9.0
|
||||
resolution: "generic-pool@npm:3.9.0"
|
||||
checksum: 3d89e9b2018d2e3bbf44fec78c76b2b7d56d6a484237aa9daf6ff6eedb14b0899dadd703b5d810219baab2eb28e5128fb18b29e91e602deb2eccac14492d8ca8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"gensync@npm:^1.0.0-beta.2":
|
||||
version: 1.0.0-beta.2
|
||||
resolution: "gensync@npm:1.0.0-beta.2"
|
||||
@@ -28398,6 +28531,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-stream@npm:^9.0.1":
|
||||
version: 9.0.1
|
||||
resolution: "get-stream@npm:9.0.1"
|
||||
dependencies:
|
||||
"@sec-ant/readable-stream": ^0.4.1
|
||||
is-stream: ^4.0.1
|
||||
checksum: 631df71d7bd60a7f373094d3c352e2ce412b82d30b1b0ec562e5a4aced976173a4cc0dabef019050e1aceaffb1f0e086349ab3d14377b0b7280510bd75bd3e1e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-symbol-description@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "get-symbol-description@npm:1.0.2"
|
||||
@@ -30715,6 +30858,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-stream@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "is-stream@npm:4.0.1"
|
||||
checksum: cbea3f1fc271b21ceb228819d0c12a0965a02b57f39423925f99530b4eb86935235f258f06310b67cd02b2d10b49e9a0998f5ececf110ab7d3760bae4055ad23
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-string@npm:^1.0.5, is-string@npm:^1.0.7":
|
||||
version: 1.0.7
|
||||
resolution: "is-string@npm:1.0.7"
|
||||
@@ -32378,12 +32528,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"keyv@npm:*, keyv@npm:^4.0.0, keyv@npm:^4.5.2":
|
||||
version: 4.5.4
|
||||
resolution: "keyv@npm:4.5.4"
|
||||
"keyv@npm:*, keyv@npm:^5.2.1":
|
||||
version: 5.2.1
|
||||
resolution: "keyv@npm:5.2.1"
|
||||
dependencies:
|
||||
json-buffer: 3.0.1
|
||||
checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72
|
||||
"@keyv/serialize": "*"
|
||||
checksum: 92f02ce8a61d3f832c72bc305a0a3408ab3ba322702175c8f23ddb7b317cdef6525fa084135ca4218f40afe17397f2b5b0f38fb1f0758fb47e8cd5d2699963d2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -32396,6 +32546,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"keyv@npm:^4.0.0, keyv@npm:^4.5.2":
|
||||
version: 4.5.4
|
||||
resolution: "keyv@npm:4.5.4"
|
||||
dependencies:
|
||||
json-buffer: 3.0.1
|
||||
checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"kind-of@npm:^6.0.2":
|
||||
version: 6.0.3
|
||||
resolution: "kind-of@npm:6.0.3"
|
||||
@@ -33241,6 +33400,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lowercase-keys@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "lowercase-keys@npm:3.0.0"
|
||||
checksum: 67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lowlight@npm:^1.17.0":
|
||||
version: 1.20.0
|
||||
resolution: "lowlight@npm:1.20.0"
|
||||
@@ -33813,10 +33979,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"memjs@npm:^1.3.1":
|
||||
version: 1.3.1
|
||||
resolution: "memjs@npm:1.3.1"
|
||||
checksum: cb70879055151f15292e95ab57765e745c84d2fedd363b453afc3e2f48bf185e3771eecf9544f95009a3a374e810e34c1e18948134e814d791c2f0f35359ddeb
|
||||
"memjs@npm:^1.3.1, memjs@npm:^1.3.2":
|
||||
version: 1.3.2
|
||||
resolution: "memjs@npm:1.3.2"
|
||||
checksum: f92c2a43725b70af69832f807d02b87a07609a1c1f2c8c37670dff5bae6ac5f0d767cc8b3a6a59626703538f96c0bd4f03f9d00ea3b28aeb33270d24e8782233
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -34343,6 +34509,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mimic-response@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "mimic-response@npm:4.0.0"
|
||||
checksum: 33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"min-indent@npm:^1.0.0":
|
||||
version: 1.0.1
|
||||
resolution: "min-indent@npm:1.0.1"
|
||||
@@ -35547,6 +35720,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"normalize-url@npm:^8.0.1":
|
||||
version: 8.0.1
|
||||
resolution: "normalize-url@npm:8.0.1"
|
||||
checksum: 43ea9ef0d6d135dd1556ab67aa4b74820f0d9d15aa504b59fa35647c729f1147dfce48d3ad504998fd1010f089cfb82c86c6d9126eb5c5bd2e9bd25f3a97749b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"notistack@npm:^3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "notistack@npm:3.0.1"
|
||||
@@ -39457,6 +39637,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"redis@npm:^4.7.0":
|
||||
version: 4.7.0
|
||||
resolution: "redis@npm:4.7.0"
|
||||
dependencies:
|
||||
"@redis/bloom": 1.2.0
|
||||
"@redis/client": 1.6.0
|
||||
"@redis/graph": 1.1.1
|
||||
"@redis/json": 1.0.7
|
||||
"@redis/search": 1.2.0
|
||||
"@redis/time-series": 1.1.0
|
||||
checksum: 625172dd913118241288c33f351cda42630819bc82a1dc31f22e1d3e0a4267075ecb851aecfaf106a0c73ff287a434a3df3d2a8ce46713acf68d34d66efc39ec
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"redux-immutable@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "redux-immutable@npm:4.0.0"
|
||||
@@ -39914,6 +40108,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"responselike@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "responselike@npm:3.0.0"
|
||||
dependencies:
|
||||
lowercase-keys: ^3.0.0
|
||||
checksum: e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"restore-cursor@npm:^3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "restore-cursor@npm:3.1.0"
|
||||
@@ -40257,7 +40460,9 @@ __metadata:
|
||||
"@playwright/test": ^1.32.3
|
||||
"@spotify/eslint-plugin": ^15.0.0
|
||||
"@techdocs/cli": "workspace:*"
|
||||
"@types/cacheable-request": ^8.3.6
|
||||
"@types/global-agent": ^2.1.3
|
||||
"@types/memjs": ^1.3.3
|
||||
"@types/node": ^20.16.0
|
||||
"@types/webpack": ^5.28.0
|
||||
"@useoptic/optic": ^1.0.0
|
||||
@@ -45302,6 +45507,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yallist@npm:4.0.0, yallist@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "yallist@npm:4.0.0"
|
||||
checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yallist@npm:^2.1.2":
|
||||
version: 2.1.2
|
||||
resolution: "yallist@npm:2.1.2"
|
||||
@@ -45316,13 +45528,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yallist@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "yallist@npm:4.0.0"
|
||||
checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yallist@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "yallist@npm:5.0.0"
|
||||
|
||||
Reference in New Issue
Block a user