@yolo-croket-dev/core 1.7.25-slowquery.21 → 1.7.25-slowquery.23

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.
@@ -51,3 +51,10 @@ export declare function repeatWithAbort(task: () => Promise<void> | void, interv
51
51
  * @param message 로그 메시지
52
52
  */
53
53
  export declare function logAbortContext(message: string): void;
54
+ /**
55
+ * 이벤트 기반으로 중단 가능한 Promise 실행
56
+ * @param promise 원본 Promise
57
+ * @param abortSignal 중단 신호 (선택사항, 없으면 현재 컨텍스트에서 가져옴)
58
+ * @returns 중단 가능한 Promise
59
+ */
60
+ export declare function withAbortSignalEventBased<T>(promise: Promise<T>, abortSignal?: AbortSignal): Promise<T>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logAbortContext = exports.repeatWithAbort = exports.setTimeoutWithAbort = exports.delayWithAbort = exports.withAbortSignal = exports.throwIfAborted = exports.isAborted = exports.getCurrentAbortSignal = void 0;
3
+ exports.withAbortSignalEventBased = exports.logAbortContext = exports.repeatWithAbort = exports.setTimeoutWithAbort = exports.delayWithAbort = exports.withAbortSignal = exports.throwIfAborted = exports.isAborted = exports.getCurrentAbortSignal = void 0;
4
4
  const abort_context_1 = require("./abort-context");
5
5
  /**
6
6
  * 현재 컨텍스트의 AbortSignal을 가져오는 전역 함수
@@ -198,3 +198,49 @@ function logAbortContext(message) {
198
198
  });
199
199
  }
200
200
  exports.logAbortContext = logAbortContext;
201
+ /**
202
+ * 이벤트 기반으로 중단 가능한 Promise 실행
203
+ * @param promise 원본 Promise
204
+ * @param abortSignal 중단 신호 (선택사항, 없으면 현재 컨텍스트에서 가져옴)
205
+ * @returns 중단 가능한 Promise
206
+ */
207
+ function withAbortSignalEventBased(promise, abortSignal) {
208
+ const signal = abortSignal || getCurrentAbortSignal();
209
+ if (!signal) {
210
+ return promise;
211
+ }
212
+ return new Promise((resolve, reject) => {
213
+ // 이미 중단된 경우
214
+ if (signal.aborted) {
215
+ reject(new Error('REQUEST_ABORTED: 작업이 이미 중단되었습니다'));
216
+ return;
217
+ }
218
+ let isCompleted = false;
219
+ // abort 이벤트 리스너 (즉시 반응)
220
+ const abortHandler = () => {
221
+ if (!isCompleted) {
222
+ isCompleted = true;
223
+ reject(new Error('REQUEST_ABORTED: 작업이 중단되었습니다'));
224
+ }
225
+ };
226
+ // 이벤트 리스너 등록
227
+ signal.addEventListener('abort', abortHandler, { once: true });
228
+ // 원본 Promise 처리
229
+ promise
230
+ .then((result) => {
231
+ if (!isCompleted) {
232
+ isCompleted = true;
233
+ signal.removeEventListener('abort', abortHandler);
234
+ resolve(result);
235
+ }
236
+ })
237
+ .catch((error) => {
238
+ if (!isCompleted) {
239
+ isCompleted = true;
240
+ signal.removeEventListener('abort', abortHandler);
241
+ reject(error);
242
+ }
243
+ });
244
+ });
245
+ }
246
+ exports.withAbortSignalEventBased = withAbortSignalEventBased;
@@ -302,6 +302,18 @@ let RPCInterceptor = class RPCInterceptor {
302
302
  abortController.abort();
303
303
  return (0, rxjs_1.throwError)(() => new Error(this.DEFAULT_TIMEOUT_MESSAGE));
304
304
  },
305
+ }), (0, operators_1.catchError)((error) => {
306
+ // eslint-disable-next-line no-console
307
+ console.log('AbortInterceptor: 에러 발생', {
308
+ error: error.message,
309
+ isAborted: abortController.signal.aborted,
310
+ });
311
+ // abort된 경우와 일반 에러를 구분
312
+ if (abortController.signal.aborted) {
313
+ return (0, rxjs_1.throwError)(() => new Error(`REQUEST_ABORTED: ${this.DEFAULT_TIMEOUT_MESSAGE}`));
314
+ }
315
+ // 다음 handler로 넘기고싶다.
316
+ return next.handle();
305
317
  }), (0, operators_1.tap)({
306
318
  next: async (val) => {
307
319
  val.isError = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yolo-croket-dev/core",
3
- "version": "1.7.25-slowquery.21",
3
+ "version": "1.7.25-slowquery.23",
4
4
  "author": "Yolo Co., Ltd.",
5
5
  "description": "Yolo commonization module",
6
6
  "main": "index.js",