@fluojs/redis 1.0.0-beta.3 → 1.0.0-beta.5

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/README.ko.md CHANGED
@@ -79,6 +79,7 @@ export class CacheRepository {
79
79
 
80
80
  - 호출자가 옵션을 강제로 캐스팅하더라도 Fluo는 항상 `lazyConnect: true`를 강제하므로, 소켓은 import 시점이 아니라 애플리케이션 bootstrap 중에 열립니다.
81
81
  - bootstrap 단계에서는 클라이언트가 ioredis `wait` 상태일 때만 lifecycle service가 `connect()`를 호출합니다.
82
+ - lifecycle이 소유한 `connect()`와 `quit()` 호출은 package timeout(기본 `10_000` ms)으로 제한되어, Redis 명령이 멈춰도 bootstrap/shutdown이 무기한 대기하지 않습니다. `lifecycle.connectTimeoutMs`와 `lifecycle.quitTimeoutMs`로 재정의할 수 있으며, host process가 의도적으로 무제한 대기를 소유하는 경우에만 `0`을 전달하세요.
82
83
  - shutdown 단계에서는 ready/connecting 계열 상태에 `quit()`를 우선 시도해 정상 종료를 노리고, wait/종료 전이 상태에서는 `disconnect()`를 직접 사용합니다.
83
84
  - `quit()`가 실패하면 Fluo는 `disconnect()`로 fallback하고, 그 뒤에도 클라이언트가 닫히지 않은 경우에만 에러를 다시 던집니다.
84
85
 
@@ -124,10 +125,12 @@ export class AnalyticsStore {
124
125
 
125
126
  ### 원시 클라이언트 접근 (Raw Client Access)
126
127
 
127
- 파이프라인, Lua 스크립트, Pub/Sub 등 복잡한 Redis 명령이 필요한 경우 원시 클라이언트를 직접 주입받아 사용합니다.
128
+ 파이프라인이나 Lua 스크립트처럼 복잡한 Redis 명령이 필요한 경우 원시 클라이언트를 직접 주입받아 사용합니다.
128
129
 
129
130
  이미 `RedisService`를 주입받았다면 `redis.getRawClient()`로 같은 underlying `ioredis` instance에 접근할 수 있습니다.
130
131
 
132
+ Redis Pub/Sub은 일반적인 shared-client 재사용의 예외입니다. Redis는 구독한 연결을 subscribe mode로 전환하므로, lifecycle-managed `REDIS_CLIENT`나 `RedisService.getRawClient()` 결과를 publisher와 subscriber로 동시에 사용하지 마세요. `client.duplicate()`로 전용 subscriber 연결을 만들거나 명시적인 `RedisModule.forRoot({ name: 'subscriber', ... })` 등록을 사용하고, 그 연결도 별도 lifecycle owner를 갖게 하세요.
133
+
131
134
  ```typescript
132
135
  import { Inject } from '@fluojs/core';
133
136
  import { REDIS_CLIENT } from '@fluojs/redis';
@@ -147,7 +150,7 @@ export class AdvancedService {
147
150
 
148
151
  ### 핵심 구성 요소
149
152
  - `RedisModule`: Redis 클라이언트 등록 및 수명 주기 훅을 관리합니다.
150
- - `RedisModule.forRoot(options)`: `name`을 생략하면 기본 Redis 클라이언트와 `RedisService` 파사드를 등록하고, `name`을 제공하면 추가 이름 있는 Redis 클라이언트를 등록합니다. 기본 등록은 기본적으로 global이고, 이름 있는 등록은 scoped입니다.
153
+ - `RedisModule.forRoot(options)`: `name`을 생략하면 기본 Redis 클라이언트와 `RedisService` 파사드를 등록하고, `name`을 제공하면 추가 이름 있는 Redis 클라이언트를 등록합니다. 기본 등록은 기본적으로 global이고, 이름 있는 등록은 scoped입니다. `lifecycle.connectTimeoutMs`와 `lifecycle.quitTimeoutMs`로 Fluo가 소유한 연결 시작/종료 시간을 제한할 수 있습니다.
151
154
  - `RedisService`: JSON 코덱 지원 및 `get`/`set`/`del` 메서드를 제공하는 파사드입니다.
152
155
  - `REDIS_CLIENT`: 내부 `ioredis` 인스턴스에 접근하기 위한 DI 토큰입니다.
153
156
  - `DEFAULT_REDIS_CLIENT_NAME`: 안정적인 기본 Redis client name입니다.
@@ -157,7 +160,8 @@ export class AdvancedService {
157
160
  - `createRedisPlatformStatusSnapshot(input)`: Redis 연결 상태를 Fluo 플랫폼 health/readiness 스냅샷으로 변환합니다.
158
161
 
159
162
  ### 타입
160
- - `RedisModuleOptions`: `ioredis` 생성자에 전달되는 설정 옵션입니다.
163
+ - `RedisModuleOptions`: Fluo가 module-only `name`, `global`, `lifecycle` 필드를 제거한 뒤 `ioredis` 생성자에 전달하는 설정 옵션입니다.
164
+ - `RedisLifecycleOptions`: Fluo가 소유한 `connect()`와 `quit()` lifecycle command의 timeout을 조정하는 선택적 옵션입니다.
161
165
  - `PersistencePlatformStatusSnapshot`, `RedisStatusAdapterInput`: status snapshot input/output type입니다.
162
166
 
163
167
  ## 관련 패키지
package/README.md CHANGED
@@ -79,6 +79,7 @@ export class CacheRepository {
79
79
 
80
80
  - Fluo always forces `lazyConnect: true`, even if callers cast options manually, so sockets open during application bootstrap instead of import time.
81
81
  - During bootstrap, the lifecycle service only calls `connect()` while the client is still in ioredis `wait` state.
82
+ - Lifecycle-owned `connect()` and `quit()` calls are bounded by package timeouts (`10_000` ms by default) so bootstrap and shutdown do not wait forever on a stalled Redis command. Override them with `lifecycle.connectTimeoutMs` and `lifecycle.quitTimeoutMs`; pass `0` only when the host process intentionally owns an unbounded wait.
82
83
  - During shutdown, ready/connecting clients attempt `quit()` first for graceful teardown, while wait/closed-transition states use `disconnect()` directly.
83
84
  - If `quit()` fails, Fluo falls back to `disconnect()` and only rethrows when the client still remains open afterward.
84
85
 
@@ -124,10 +125,12 @@ export class AnalyticsStore {
124
125
 
125
126
  ### Raw Client Access
126
127
 
127
- If you need advanced Redis commands (pipelines, lua scripts, pub/sub), inject the raw client directly.
128
+ If you need advanced Redis commands (pipelines or Lua scripts), inject the raw client directly.
128
129
 
129
130
  If you already injected `RedisService`, call `redis.getRawClient()` to access the same underlying `ioredis` instance.
130
131
 
132
+ Redis Pub/Sub is the exception to ordinary shared-client reuse: Redis switches subscribed connections into subscribe mode, so do not use the lifecycle-managed `REDIS_CLIENT` or a `RedisService.getRawClient()` result as both publisher and subscriber. Create a dedicated subscriber connection with `client.duplicate()` (or an explicitly named `RedisModule.forRoot({ name: 'subscriber', ... })` registration) and let that connection have its own lifecycle owner.
133
+
131
134
  ```typescript
132
135
  import { Inject } from '@fluojs/core';
133
136
  import { REDIS_CLIENT } from '@fluojs/redis';
@@ -147,7 +150,7 @@ export class AdvancedService {
147
150
 
148
151
  ### Core
149
152
  - `RedisModule`: Registers Redis clients and lifecycle hooks.
150
- - `RedisModule.forRoot(options)`: Registers the default Redis client plus `RedisService` facade when `name` is omitted, or an additional named Redis client when `name` is provided. The default registration is global by default; named registrations are scoped.
153
+ - `RedisModule.forRoot(options)`: Registers the default Redis client plus `RedisService` facade when `name` is omitted, or an additional named Redis client when `name` is provided. The default registration is global by default; named registrations are scoped. Use `lifecycle.connectTimeoutMs` and `lifecycle.quitTimeoutMs` to bound Fluo-owned connection startup and shutdown.
151
154
  - `RedisService`: Facade with JSON codec support and `get`/`set`/`del` methods.
152
155
  - `REDIS_CLIENT`: DI token for the underlying `ioredis` instance.
153
156
  - `DEFAULT_REDIS_CLIENT_NAME`: Stable default Redis client name.
@@ -157,7 +160,8 @@ export class AdvancedService {
157
160
  - `createRedisPlatformStatusSnapshot(input)`: Adapts Redis connection state into Fluo's platform health/readiness snapshot contract.
158
161
 
159
162
  ### Types
160
- - `RedisModuleOptions`: Configuration options passed directly to the `ioredis` constructor.
163
+ - `RedisModuleOptions`: Configuration options passed to the `ioredis` constructor after Fluo removes module-only `name`, `global`, and `lifecycle` fields.
164
+ - `RedisLifecycleOptions`: Optional timeout controls for Fluo-owned `connect()` and `quit()` lifecycle commands.
161
165
  - `PersistencePlatformStatusSnapshot`, `RedisStatusAdapterInput`: Status snapshot input/output types.
162
166
 
163
167
  ## Related Packages
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMhE,OAAO,KAAK,EAAsB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAoGzE,yEAAyE;AACzE,qBAAa,WAAW;IACtB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU;CAYxD"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMhE,OAAO,KAAK,EAA6C,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA8GhG,yEAAyE;AACzE,qBAAa,WAAW;IACtB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU;CAYxD"}
package/dist/module.js CHANGED
@@ -24,6 +24,7 @@ function getRedisLifecycleToken(name) {
24
24
  function normalizeRedisModuleOptions(options) {
25
25
  const {
26
26
  global,
27
+ lifecycle,
27
28
  name,
28
29
  ...clientOptions
29
30
  } = options;
@@ -37,10 +38,11 @@ function normalizeRedisModuleOptions(options) {
37
38
  return {
38
39
  clientOptions,
39
40
  global: normalizedName === undefined ? global ?? true : false,
41
+ lifecycleOptions: lifecycle ?? {},
40
42
  name: normalizedName
41
43
  };
42
44
  }
43
- function createRedisProviders(options, name) {
45
+ function createRedisProviders(options, lifecycleOptions, name) {
44
46
  const clientToken = getRedisClientToken(name);
45
47
  if (clientToken === REDIS_CLIENT) {
46
48
  return [{
@@ -50,7 +52,15 @@ function createRedisProviders(options, name) {
50
52
  ...options,
51
53
  lazyConnect: true
52
54
  })
53
- }, RedisService, RedisLifecycleService];
55
+ }, RedisService, {
56
+ inject: [REDIS_CLIENT],
57
+ provide: RedisLifecycleService,
58
+ scope: 'singleton',
59
+ useFactory: (...deps) => {
60
+ const [client] = deps;
61
+ return new RedisLifecycleService(client, undefined, lifecycleOptions);
62
+ }
63
+ }];
54
64
  }
55
65
  if (name === undefined) {
56
66
  throw new Error('Redis client name must be defined for named provider creation.');
@@ -77,7 +87,7 @@ function createRedisProviders(options, name) {
77
87
  scope: 'singleton',
78
88
  useFactory: (...deps) => {
79
89
  const [client] = deps;
80
- return new RedisLifecycleService(client, name);
90
+ return new RedisLifecycleService(client, name, lifecycleOptions);
81
91
  }
82
92
  }];
83
93
  }
@@ -115,7 +125,7 @@ export class RedisModule {
115
125
  return defineModule(RedisModuleDefinition, {
116
126
  global: normalized.global,
117
127
  exports: normalized.name === undefined ? [REDIS_CLIENT, RedisService] : [clientToken, serviceToken],
118
- providers: createRedisProviders(normalized.clientOptions, normalized.name)
128
+ providers: createRedisProviders(normalized.clientOptions, normalized.lifecycleOptions, normalized.name)
119
129
  });
120
130
  }
121
131
  }
package/dist/service.d.ts CHANGED
@@ -1,17 +1,20 @@
1
1
  import type Redis from 'ioredis';
2
2
  import type { OnApplicationShutdown, OnModuleInit } from '@fluojs/runtime';
3
+ import type { RedisLifecycleOptions } from './types.js';
3
4
  /**
4
5
  * Manages Redis client startup and shutdown as part of the application lifecycle.
5
6
  */
6
7
  export declare class RedisLifecycleService implements OnModuleInit, OnApplicationShutdown {
7
8
  private readonly client;
8
9
  private readonly clientName?;
9
- constructor(client: Redis, clientName?: string | undefined);
10
+ private readonly lifecycleOptions;
11
+ constructor(client: Redis, clientName?: string | undefined, lifecycleOptions?: RedisLifecycleOptions);
10
12
  onModuleInit(): Promise<void>;
11
13
  onApplicationShutdown(): Promise<void>;
12
14
  createPlatformStatusSnapshot(): import("./status.js").PersistencePlatformStatusSnapshot;
13
15
  private shouldConnectOnInit;
14
16
  private disconnectIfPossible;
15
17
  private quitWithDisconnectFallback;
18
+ private describeClient;
16
19
  }
17
20
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAwB3E;;GAEG;AACH,qBACa,qBAAsB,YAAW,YAAY,EAAE,qBAAqB;IAE7E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBADX,MAAM,EAAE,KAAK,EACb,UAAU,CAAC,EAAE,MAAM,YAAA;IAGhC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5C,4BAA4B;IAO5B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,oBAAoB;YAMd,0BAA0B;CAYzC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAiDxD;;GAEG;AACH,qBACa,qBAAsB,YAAW,YAAY,EAAE,qBAAqB;IAE7E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAFhB,MAAM,EAAE,KAAK,EACb,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,gBAAgB,GAAE,qBAA0B;IAGzD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5C,4BAA4B;IAO5B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,oBAAoB;YAMd,0BAA0B;IAiBxC,OAAO,CAAC,cAAc;CAGvB"}
package/dist/service.js CHANGED
@@ -9,6 +9,7 @@ import { createRedisPlatformStatusSnapshot } from './status.js';
9
9
  import { getRedisComponentId, REDIS_CLIENT } from './tokens.js';
10
10
  const QUITTABLE_STATUSES = new Set(['connect', 'connecting', 'ready', 'reconnecting']);
11
11
  const DISCONNECTABLE_STATUSES = new Set(['close', 'connect', 'connecting', 'ready', 'reconnecting', 'wait']);
12
+ const DEFAULT_REDIS_LIFECYCLE_TIMEOUT_MS = 10_000;
12
13
  function isClosed(status) {
13
14
  return status === 'end';
14
15
  }
@@ -21,6 +22,26 @@ function isQuittable(status) {
21
22
  function isDisconnectable(status) {
22
23
  return DISCONNECTABLE_STATUSES.has(status);
23
24
  }
25
+ function normalizeTimeoutMs(value) {
26
+ return value === undefined ? DEFAULT_REDIS_LIFECYCLE_TIMEOUT_MS : value;
27
+ }
28
+ async function withLifecycleTimeout(operation, timeoutMs, message) {
29
+ if (timeoutMs <= 0) {
30
+ return await operation;
31
+ }
32
+ let timeoutHandle;
33
+ try {
34
+ return await Promise.race([operation, new Promise((_resolve, reject) => {
35
+ timeoutHandle = setTimeout(() => {
36
+ reject(new Error(message));
37
+ }, timeoutMs);
38
+ })]);
39
+ } finally {
40
+ if (timeoutHandle !== undefined) {
41
+ clearTimeout(timeoutHandle);
42
+ }
43
+ }
44
+ }
24
45
 
25
46
  /**
26
47
  * Manages Redis client startup and shutdown as part of the application lifecycle.
@@ -30,15 +51,16 @@ class RedisLifecycleService {
30
51
  static {
31
52
  [_RedisLifecycleServic, _initClass] = _applyDecs(this, [Inject(REDIS_CLIENT)], []).c;
32
53
  }
33
- constructor(client, clientName) {
54
+ constructor(client, clientName, lifecycleOptions = {}) {
34
55
  this.client = client;
35
56
  this.clientName = clientName;
57
+ this.lifecycleOptions = lifecycleOptions;
36
58
  }
37
59
  async onModuleInit() {
38
60
  if (!this.shouldConnectOnInit()) {
39
61
  return;
40
62
  }
41
- await this.client.connect();
63
+ await withLifecycleTimeout(this.client.connect(), normalizeTimeoutMs(this.lifecycleOptions.connectTimeoutMs), `Redis client ${this.describeClient()} connect timed out after ${String(normalizeTimeoutMs(this.lifecycleOptions.connectTimeoutMs))}ms.`);
42
64
  }
43
65
  async onApplicationShutdown() {
44
66
  const status = this.client.status;
@@ -67,7 +89,7 @@ class RedisLifecycleService {
67
89
  }
68
90
  async quitWithDisconnectFallback() {
69
91
  try {
70
- await this.client.quit();
92
+ await withLifecycleTimeout(this.client.quit(), normalizeTimeoutMs(this.lifecycleOptions.quitTimeoutMs), `Redis client ${this.describeClient()} quit timed out after ${String(normalizeTimeoutMs(this.lifecycleOptions.quitTimeoutMs))}ms.`);
71
93
  return;
72
94
  } catch (error) {
73
95
  this.disconnectIfPossible(this.client.status);
@@ -76,6 +98,9 @@ class RedisLifecycleService {
76
98
  }
77
99
  }
78
100
  }
101
+ describeClient() {
102
+ return this.clientName ?? 'default';
103
+ }
79
104
  static {
80
105
  _initClass();
81
106
  }
package/dist/types.d.ts CHANGED
@@ -1,13 +1,24 @@
1
1
  import type { RedisOptions } from 'ioredis';
2
2
  type RedisConnectionOptions = Omit<RedisOptions, 'lazyConnect'>;
3
+ /** Lifecycle timeout controls for Redis connections owned by Fluo. */
4
+ export interface RedisLifecycleOptions {
5
+ /** Maximum time to wait for bootstrap `connect()` before failing startup. Defaults to `10_000`. */
6
+ connectTimeoutMs?: number;
7
+ /** Maximum time to wait for graceful shutdown `quit()` before forcing `disconnect()`. Defaults to `10_000`. */
8
+ quitTimeoutMs?: number;
9
+ }
3
10
  /** Options accepted by the default unnamed Redis registration. */
4
11
  export type DefaultRedisModuleOptions = RedisConnectionOptions & {
5
12
  /** Whether the default Redis aliases should be visible globally. Defaults to `true`. */
6
13
  global?: boolean;
14
+ /** Timeout controls for lifecycle-owned `connect()` and `quit()` calls. */
15
+ lifecycle?: RedisLifecycleOptions;
7
16
  name?: undefined;
8
17
  };
9
18
  /** Options accepted by an additional named Redis registration. */
10
19
  export type NamedRedisModuleOptions = RedisConnectionOptions & {
20
+ /** Timeout controls for lifecycle-owned `connect()` and `quit()` calls. */
21
+ lifecycle?: RedisLifecycleOptions;
11
22
  /** Registration name used to derive named raw-client and facade tokens. */
12
23
  name: string;
13
24
  /** Named Redis registrations remain scoped to their importing module. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAEhE,kEAAkE;AAClE,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,GAAG;IAC/D,wFAAwF;IACxF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG;IAC7D,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,GAAG,uBAAuB,CAAC;AAErF,2EAA2E;AAC3E,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,sBAAsB,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAEhE,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+GAA+G;IAC/G,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,GAAG;IAC/D,wFAAwF;IACxF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG;IAC7D,2EAA2E;IAC3E,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,GAAG,uBAAuB,CAAC;AAErF,2EAA2E;AAC3E,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "connection",
10
10
  "lifecycle"
11
11
  ],
12
- "version": "1.0.0-beta.3",
12
+ "version": "1.0.0-beta.5",
13
13
  "private": false,
14
14
  "license": "MIT",
15
15
  "repository": {
@@ -36,12 +36,15 @@
36
36
  "dist"
37
37
  ],
38
38
  "dependencies": {
39
- "ioredis": "^5.10.0",
40
- "@fluojs/core": "^1.0.0-beta.4",
41
- "@fluojs/di": "^1.0.0-beta.6",
42
- "@fluojs/runtime": "^1.0.0-beta.11"
39
+ "@fluojs/core": "^1.0.0-beta.6",
40
+ "@fluojs/di": "^1.0.0-beta.8",
41
+ "@fluojs/runtime": "^1.0.0-beta.12"
42
+ },
43
+ "peerDependencies": {
44
+ "ioredis": "^5.10.0"
43
45
  },
44
46
  "devDependencies": {
47
+ "ioredis": "^5.10.0",
45
48
  "vitest": "^3.2.4"
46
49
  },
47
50
  "scripts": {