@resiliojs/next 0.1.0 → 0.1.1
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/dist/client.cjs +2 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/client.cjs
CHANGED
|
@@ -32,6 +32,7 @@ __export(client_exports, {
|
|
|
32
32
|
captureAsync: () => import_react5.captureAsync,
|
|
33
33
|
createCompositeSink: () => import_core2.createCompositeSink,
|
|
34
34
|
createConsoleSink: () => import_core2.createConsoleSink,
|
|
35
|
+
createExceptionReporter: () => import_core2.createExceptionReporter,
|
|
35
36
|
createPresentationEvaluator: () => import_core2.createPresentationEvaluator,
|
|
36
37
|
createPublicError: () => import_core2.createPublicError,
|
|
37
38
|
createResilioRootHandlers: () => import_react5.createResilioRootHandlers,
|
|
@@ -153,6 +154,7 @@ function useResilioRouteError(error, reset, options = {}) {
|
|
|
153
154
|
captureAsync,
|
|
154
155
|
createCompositeSink,
|
|
155
156
|
createConsoleSink,
|
|
157
|
+
createExceptionReporter,
|
|
156
158
|
createPresentationEvaluator,
|
|
157
159
|
createPublicError,
|
|
158
160
|
createResilioRootHandlers,
|
package/dist/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/index.ts","../src/action-state.ts","../src/client/useResilioState.ts","../src/client/useResilioRouteError.ts"],"sourcesContent":["'use client';\n\n// Re-export all React client components from @resiliojs/react\nexport {\n ResilioProvider,\n ResilioErrorBoundary,\n ResilioPresentationHost,\n ResilioPresentationProvider,\n usePresentError,\n useOptionalPresentError,\n useResilioInline,\n useResilioAlert,\n createResilioRootHandlers,\n capture,\n captureAsync,\n useResilioHandler,\n installResilioBrowserErrorBridge,\n useResilioBrowserErrorBridge,\n} from '@resiliojs/react';\nexport type {\n ActivePresentation,\n FeedbackAdapter,\n PresentationRenderer,\n PresentationRendererInput,\n RendererRegistry,\n ResilioContextValue,\n ResilioErrorBoundaryProps,\n ResilioErrorFallbackProps,\n ResilioPresentationHostProps,\n ResilioPresentationProviderProps,\n ResilioProviderProps,\n} from '@resiliojs/react';\n\nexport { useResilio, useReportError } from '@resiliojs/react';\nexport { useOptionalReportError } from '@resiliojs/react';\n\n// Re-export client-safe utilities from core\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n defineErrorPolicy, \n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n ErrorCatalog, \n PublicError, \n FeedbackType, \n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\n// Re-export Next.js client helpers\nexport { toActionState } from '../action-state.js';\n// Export new useResilioState hook\nexport * from './useResilioState.js';\nexport * from './useResilioRouteError.js';\nexport * from '../types.js';\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","'use client';\n\nimport { useActionState } from 'react';\nimport { useOptionalPresentError, useOptionalReportError } from '@resiliojs/react';\nimport { decodePublicError } from '@resiliojs/core';\nimport type {\n DecodeFailureReason,\n ErrorCatalog,\n PresentationContext,\n PublicError,\n} from '@resiliojs/core';\nimport type { PublicActionResult } from '../types.js';\n\nexport interface UseResilioStateOptions<TData, TCatalog extends ErrorCatalog> {\n catalog: TCatalog;\n initialData?: TData | null;\n onSuccess?: (data: TData) => void;\n onError?: (error: PublicError<TCatalog>) => void;\n onInvalidPublicError?: (reason: DecodeFailureReason) => void;\n presentation?: Omit<PresentationContext, 'source'>;\n}\n\nexport type ResilioActionState<TData, TCatalog extends ErrorCatalog> =\n PublicActionResult<TData | null, TCatalog>;\n\n/**\n * Next.js Server Action의 에러 핸들링과 UI 바인딩을 자동화하는 React 19 훅입니다.\n * React 19 useActionState와 동일한 시그니처를 제공하면서, 실패 상태(ok === false) 리턴 시\n * 전역 ResilioProvider에 자동으로 예상 오류를 전달하고 UI 정책을 평가합니다.\n */\nexport function useResilioState<Payload, TData, TCatalog extends ErrorCatalog>(\n action: (\n state: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ) => Promise<ResilioActionState<TData, TCatalog>>,\n options: UseResilioStateOptions<TData, TCatalog>\n) {\n const report = useOptionalReportError();\n const present = useOptionalPresentError();\n\n const initialState: ResilioActionState<TData, TCatalog> = {\n ok: true,\n data: options.initialData ?? null,\n };\n\n const [state, execute, isPending] = useActionState(async (\n prevState: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ): Promise<ResilioActionState<TData, TCatalog>> => {\n const res = await action(prevState, payload);\n \n if (res && typeof res === 'object' && 'ok' in res) {\n if (!res.ok && res.error) {\n const decoded = await decodePublicError(options.catalog, res.error);\n if (!decoded.ok) {\n report?.invalidPublic(decoded.reason, { source: 'next.action' });\n options.onInvalidPublicError?.(decoded.reason);\n return res;\n }\n\n report?.public(decoded.value, { source: 'next.action' });\n await present?.(decoded.value, {\n ...options.presentation,\n source: 'next.action',\n });\n options.onError?.(decoded.value);\n } else if (res.ok && res.data != null) {\n options.onSuccess?.(res.data);\n }\n }\n return res;\n }, initialState);\n\n return [state, execute, isPending] as const;\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useOptionalReportError } from '@resiliojs/react';\n\nexport interface UseResilioRouteErrorOptions {\n maxResets?: number;\n resetWindowMs?: number;\n}\n\nexport interface ResilioRouteErrorState {\n reset(): void;\n resetBlocked: boolean;\n}\n\nexport function useResilioRouteError(\n error: Error & { digest?: string },\n reset: () => void,\n options: UseResilioRouteErrorOptions = {},\n): ResilioRouteErrorState {\n const report = useOptionalReportError();\n const reported = useRef<Error | null>(null);\n const resetTimestamps = useRef<number[]>([]);\n const [resetBlocked, setResetBlocked] = useState(false);\n\n useEffect(() => {\n if (reported.current === error) return;\n reported.current = error;\n report?.exception(error, {\n source: 'next.route',\n correlationId: error.digest,\n context: { digest: error.digest },\n });\n }, [error, report]);\n\n const guardedReset = useCallback(() => {\n const now = Date.now();\n const windowMs = options.resetWindowMs ?? 1_000;\n const maxResets = options.maxResets ?? 3;\n resetTimestamps.current = resetTimestamps.current.filter(\n (timestamp) => now - timestamp < windowMs,\n );\n if (resetTimestamps.current.length >= maxResets) {\n setResetBlocked(true);\n return;\n }\n resetTimestamps.current.push(now);\n reset();\n }, [options.maxResets, options.resetWindowMs, reset]);\n\n return { reset: guardedReset, resetBlocked };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,IAAAA,gBAeO;AAeP,IAAAA,gBAA2C;AAC3C,IAAAA,gBAAuC;AAGvC,IAAAC,
|
|
1
|
+
{"version":3,"sources":["../src/client/index.ts","../src/action-state.ts","../src/client/useResilioState.ts","../src/client/useResilioRouteError.ts"],"sourcesContent":["'use client';\n\n// Re-export all React client components from @resiliojs/react\nexport {\n ResilioProvider,\n ResilioErrorBoundary,\n ResilioPresentationHost,\n ResilioPresentationProvider,\n usePresentError,\n useOptionalPresentError,\n useResilioInline,\n useResilioAlert,\n createResilioRootHandlers,\n capture,\n captureAsync,\n useResilioHandler,\n installResilioBrowserErrorBridge,\n useResilioBrowserErrorBridge,\n} from '@resiliojs/react';\nexport type {\n ActivePresentation,\n FeedbackAdapter,\n PresentationRenderer,\n PresentationRendererInput,\n RendererRegistry,\n ResilioContextValue,\n ResilioErrorBoundaryProps,\n ResilioErrorFallbackProps,\n ResilioPresentationHostProps,\n ResilioPresentationProviderProps,\n ResilioProviderProps,\n} from '@resiliojs/react';\n\nexport { useResilio, useReportError } from '@resiliojs/react';\nexport { useOptionalReportError } from '@resiliojs/react';\n\n// Re-export client-safe utilities from core\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n defineErrorPolicy, \n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n createExceptionReporter,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n ErrorCatalog, \n PublicError, \n FeedbackType, \n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n ExceptionReporter,\n ExceptionReporterOptions,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\n// Re-export Next.js client helpers\nexport { toActionState } from '../action-state.js';\n// Export new useResilioState hook\nexport * from './useResilioState.js';\nexport * from './useResilioRouteError.js';\nexport * from '../types.js';\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","'use client';\n\nimport { useActionState } from 'react';\nimport { useOptionalPresentError, useOptionalReportError } from '@resiliojs/react';\nimport { decodePublicError } from '@resiliojs/core';\nimport type {\n DecodeFailureReason,\n ErrorCatalog,\n PresentationContext,\n PublicError,\n} from '@resiliojs/core';\nimport type { PublicActionResult } from '../types.js';\n\nexport interface UseResilioStateOptions<TData, TCatalog extends ErrorCatalog> {\n catalog: TCatalog;\n initialData?: TData | null;\n onSuccess?: (data: TData) => void;\n onError?: (error: PublicError<TCatalog>) => void;\n onInvalidPublicError?: (reason: DecodeFailureReason) => void;\n presentation?: Omit<PresentationContext, 'source'>;\n}\n\nexport type ResilioActionState<TData, TCatalog extends ErrorCatalog> =\n PublicActionResult<TData | null, TCatalog>;\n\n/**\n * Next.js Server Action의 에러 핸들링과 UI 바인딩을 자동화하는 React 19 훅입니다.\n * React 19 useActionState와 동일한 시그니처를 제공하면서, 실패 상태(ok === false) 리턴 시\n * 전역 ResilioProvider에 자동으로 예상 오류를 전달하고 UI 정책을 평가합니다.\n */\nexport function useResilioState<Payload, TData, TCatalog extends ErrorCatalog>(\n action: (\n state: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ) => Promise<ResilioActionState<TData, TCatalog>>,\n options: UseResilioStateOptions<TData, TCatalog>\n) {\n const report = useOptionalReportError();\n const present = useOptionalPresentError();\n\n const initialState: ResilioActionState<TData, TCatalog> = {\n ok: true,\n data: options.initialData ?? null,\n };\n\n const [state, execute, isPending] = useActionState(async (\n prevState: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ): Promise<ResilioActionState<TData, TCatalog>> => {\n const res = await action(prevState, payload);\n \n if (res && typeof res === 'object' && 'ok' in res) {\n if (!res.ok && res.error) {\n const decoded = await decodePublicError(options.catalog, res.error);\n if (!decoded.ok) {\n report?.invalidPublic(decoded.reason, { source: 'next.action' });\n options.onInvalidPublicError?.(decoded.reason);\n return res;\n }\n\n report?.public(decoded.value, { source: 'next.action' });\n await present?.(decoded.value, {\n ...options.presentation,\n source: 'next.action',\n });\n options.onError?.(decoded.value);\n } else if (res.ok && res.data != null) {\n options.onSuccess?.(res.data);\n }\n }\n return res;\n }, initialState);\n\n return [state, execute, isPending] as const;\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useOptionalReportError } from '@resiliojs/react';\n\nexport interface UseResilioRouteErrorOptions {\n maxResets?: number;\n resetWindowMs?: number;\n}\n\nexport interface ResilioRouteErrorState {\n reset(): void;\n resetBlocked: boolean;\n}\n\nexport function useResilioRouteError(\n error: Error & { digest?: string },\n reset: () => void,\n options: UseResilioRouteErrorOptions = {},\n): ResilioRouteErrorState {\n const report = useOptionalReportError();\n const reported = useRef<Error | null>(null);\n const resetTimestamps = useRef<number[]>([]);\n const [resetBlocked, setResetBlocked] = useState(false);\n\n useEffect(() => {\n if (reported.current === error) return;\n reported.current = error;\n report?.exception(error, {\n source: 'next.route',\n correlationId: error.digest,\n context: { digest: error.digest },\n });\n }, [error, report]);\n\n const guardedReset = useCallback(() => {\n const now = Date.now();\n const windowMs = options.resetWindowMs ?? 1_000;\n const maxResets = options.maxResets ?? 3;\n resetTimestamps.current = resetTimestamps.current.filter(\n (timestamp) => now - timestamp < windowMs,\n );\n if (resetTimestamps.current.length >= maxResets) {\n setResetBlocked(true);\n return;\n }\n resetTimestamps.current.push(now);\n reset();\n }, [options.maxResets, options.resetWindowMs, reset]);\n\n return { reset: guardedReset, resetBlocked };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,IAAAA,gBAeO;AAeP,IAAAA,gBAA2C;AAC3C,IAAAA,gBAAuC;AAGvC,IAAAC,eAoBO;;;ACpDA,SAAS,cACd,cAAwB,MACH;AACrB,SAAO,EAAE,IAAI,MAAM,MAAM,YAAY;AACvC;;;ACPA,mBAA+B;AAC/B,IAAAC,gBAAgE;AAChE,kBAAkC;AA0B3B,SAAS,gBACd,QAIA,SACA;AACA,QAAM,aAAS,sCAAuB;AACtC,QAAM,cAAU,uCAAwB;AAExC,QAAM,eAAoD;AAAA,IACxD,IAAI;AAAA,IACJ,MAAM,QAAQ,eAAe;AAAA,EAC/B;AAEA,QAAM,CAAC,OAAO,SAAS,SAAS,QAAI,6BAAe,OACjD,WACA,YACiD;AACjD,UAAM,MAAM,MAAM,OAAO,WAAW,OAAO;AAE3C,QAAI,OAAO,OAAO,QAAQ,YAAY,QAAQ,KAAK;AACjD,UAAI,CAAC,IAAI,MAAM,IAAI,OAAO;AACxB,cAAM,UAAU,UAAM,+BAAkB,QAAQ,SAAS,IAAI,KAAK;AAClE,YAAI,CAAC,QAAQ,IAAI;AACf,kBAAQ,cAAc,QAAQ,QAAQ,EAAE,QAAQ,cAAc,CAAC;AAC/D,kBAAQ,uBAAuB,QAAQ,MAAM;AAC7C,iBAAO;AAAA,QACT;AAEA,gBAAQ,OAAO,QAAQ,OAAO,EAAE,QAAQ,cAAc,CAAC;AACvD,cAAM,UAAU,QAAQ,OAAO;AAAA,UAC7B,GAAG,QAAQ;AAAA,UACX,QAAQ;AAAA,QACV,CAAC;AACD,gBAAQ,UAAU,QAAQ,KAAK;AAAA,MACjC,WAAW,IAAI,MAAM,IAAI,QAAQ,MAAM;AACrC,gBAAQ,YAAY,IAAI,IAAI;AAAA,MAC9B;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,YAAY;AAEf,SAAO,CAAC,OAAO,SAAS,SAAS;AACnC;;;ACxEA,IAAAC,gBAAyD;AACzD,IAAAA,gBAAuC;AAYhC,SAAS,qBACd,OACA,OACA,UAAuC,CAAC,GAChB;AACxB,QAAM,aAAS,sCAAuB;AACtC,QAAM,eAAW,sBAAqB,IAAI;AAC1C,QAAM,sBAAkB,sBAAiB,CAAC,CAAC;AAC3C,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,KAAK;AAEtD,+BAAU,MAAM;AACd,QAAI,SAAS,YAAY,MAAO;AAChC,aAAS,UAAU;AACnB,YAAQ,UAAU,OAAO;AAAA,MACvB,QAAQ;AAAA,MACR,eAAe,MAAM;AAAA,MACrB,SAAS,EAAE,QAAQ,MAAM,OAAO;AAAA,IAClC,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,MAAM,CAAC;AAElB,QAAM,mBAAe,2BAAY,MAAM;AACrC,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,WAAW,QAAQ,iBAAiB;AAC1C,UAAM,YAAY,QAAQ,aAAa;AACvC,oBAAgB,UAAU,gBAAgB,QAAQ;AAAA,MAChD,CAAC,cAAc,MAAM,YAAY;AAAA,IACnC;AACA,QAAI,gBAAgB,QAAQ,UAAU,WAAW;AAC/C,sBAAgB,IAAI;AACpB;AAAA,IACF;AACA,oBAAgB,QAAQ,KAAK,GAAG;AAChC,UAAM;AAAA,EACR,GAAG,CAAC,QAAQ,WAAW,QAAQ,eAAe,KAAK,CAAC;AAEpD,SAAO,EAAE,OAAO,cAAc,aAAa;AAC7C;","names":["import_react","import_core","import_react","import_react"]}
|
package/dist/client.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ActivePresentation, FeedbackAdapter, PresentationRenderer, PresentationRendererInput, RendererRegistry, ResilioContextValue, ResilioErrorBoundary, ResilioErrorBoundaryProps, ResilioErrorFallbackProps, ResilioPresentationHost, ResilioPresentationHostProps, ResilioPresentationProvider, ResilioPresentationProviderProps, ResilioProvider, ResilioProviderProps, capture, captureAsync, createResilioRootHandlers, installResilioBrowserErrorBridge, useOptionalPresentError, useOptionalReportError, usePresentError, useReportError, useResilio, useResilioAlert, useResilioBrowserErrorBridge, useResilioHandler, useResilioInline } from '@resiliojs/react';
|
|
2
2
|
import { ErrorCatalog, PublicError, DecodeFailureReason, PresentationContext } from '@resiliojs/core';
|
|
3
|
-
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, FeedbackType, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioError, ResilioErrorKind, Result, canonicalStringify, createCompositeSink, createConsoleSink, createPresentationEvaluator, createPublicError, decodePublicError, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, isErr, isOk, isPublicResult, ok, shouldSuppress, stringHash } from '@resiliojs/core';
|
|
3
|
+
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, ExceptionReporter, ExceptionReporterOptions, FeedbackType, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioError, ResilioErrorKind, Result, canonicalStringify, createCompositeSink, createConsoleSink, createExceptionReporter, createPresentationEvaluator, createPublicError, decodePublicError, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, isErr, isOk, isPublicResult, ok, shouldSuppress, stringHash } from '@resiliojs/core';
|
|
4
4
|
import { P as PublicActionResult } from './types-kEvjOn-F.cjs';
|
|
5
5
|
export { t as toActionState } from './types-kEvjOn-F.cjs';
|
|
6
6
|
|
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ActivePresentation, FeedbackAdapter, PresentationRenderer, PresentationRendererInput, RendererRegistry, ResilioContextValue, ResilioErrorBoundary, ResilioErrorBoundaryProps, ResilioErrorFallbackProps, ResilioPresentationHost, ResilioPresentationHostProps, ResilioPresentationProvider, ResilioPresentationProviderProps, ResilioProvider, ResilioProviderProps, capture, captureAsync, createResilioRootHandlers, installResilioBrowserErrorBridge, useOptionalPresentError, useOptionalReportError, usePresentError, useReportError, useResilio, useResilioAlert, useResilioBrowserErrorBridge, useResilioHandler, useResilioInline } from '@resiliojs/react';
|
|
2
2
|
import { ErrorCatalog, PublicError, DecodeFailureReason, PresentationContext } from '@resiliojs/core';
|
|
3
|
-
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, FeedbackType, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioError, ResilioErrorKind, Result, canonicalStringify, createCompositeSink, createConsoleSink, createPresentationEvaluator, createPublicError, decodePublicError, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, isErr, isOk, isPublicResult, ok, shouldSuppress, stringHash } from '@resiliojs/core';
|
|
3
|
+
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, ExceptionReporter, ExceptionReporterOptions, FeedbackType, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioError, ResilioErrorKind, Result, canonicalStringify, createCompositeSink, createConsoleSink, createExceptionReporter, createPresentationEvaluator, createPublicError, decodePublicError, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, isErr, isOk, isPublicResult, ok, shouldSuppress, stringHash } from '@resiliojs/core';
|
|
4
4
|
import { P as PublicActionResult } from './types-kEvjOn-F.js';
|
|
5
5
|
export { t as toActionState } from './types-kEvjOn-F.js';
|
|
6
6
|
|
package/dist/client.js
CHANGED
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
decodePublicError as decodePublicError2,
|
|
33
33
|
createConsoleSink,
|
|
34
34
|
createCompositeSink,
|
|
35
|
+
createExceptionReporter,
|
|
35
36
|
PolicyEngine,
|
|
36
37
|
canonicalStringify,
|
|
37
38
|
stringHash,
|
|
@@ -126,6 +127,7 @@ export {
|
|
|
126
127
|
captureAsync,
|
|
127
128
|
createCompositeSink,
|
|
128
129
|
createConsoleSink,
|
|
130
|
+
createExceptionReporter,
|
|
129
131
|
createPresentationEvaluator,
|
|
130
132
|
createPublicError,
|
|
131
133
|
createResilioRootHandlers,
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/index.ts","../src/action-state.ts","../src/client/useResilioState.ts","../src/client/useResilioRouteError.ts"],"sourcesContent":["'use client';\n\n// Re-export all React client components from @resiliojs/react\nexport {\n ResilioProvider,\n ResilioErrorBoundary,\n ResilioPresentationHost,\n ResilioPresentationProvider,\n usePresentError,\n useOptionalPresentError,\n useResilioInline,\n useResilioAlert,\n createResilioRootHandlers,\n capture,\n captureAsync,\n useResilioHandler,\n installResilioBrowserErrorBridge,\n useResilioBrowserErrorBridge,\n} from '@resiliojs/react';\nexport type {\n ActivePresentation,\n FeedbackAdapter,\n PresentationRenderer,\n PresentationRendererInput,\n RendererRegistry,\n ResilioContextValue,\n ResilioErrorBoundaryProps,\n ResilioErrorFallbackProps,\n ResilioPresentationHostProps,\n ResilioPresentationProviderProps,\n ResilioProviderProps,\n} from '@resiliojs/react';\n\nexport { useResilio, useReportError } from '@resiliojs/react';\nexport { useOptionalReportError } from '@resiliojs/react';\n\n// Re-export client-safe utilities from core\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n defineErrorPolicy, \n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n ErrorCatalog, \n PublicError, \n FeedbackType, \n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\n// Re-export Next.js client helpers\nexport { toActionState } from '../action-state.js';\n// Export new useResilioState hook\nexport * from './useResilioState.js';\nexport * from './useResilioRouteError.js';\nexport * from '../types.js';\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","'use client';\n\nimport { useActionState } from 'react';\nimport { useOptionalPresentError, useOptionalReportError } from '@resiliojs/react';\nimport { decodePublicError } from '@resiliojs/core';\nimport type {\n DecodeFailureReason,\n ErrorCatalog,\n PresentationContext,\n PublicError,\n} from '@resiliojs/core';\nimport type { PublicActionResult } from '../types.js';\n\nexport interface UseResilioStateOptions<TData, TCatalog extends ErrorCatalog> {\n catalog: TCatalog;\n initialData?: TData | null;\n onSuccess?: (data: TData) => void;\n onError?: (error: PublicError<TCatalog>) => void;\n onInvalidPublicError?: (reason: DecodeFailureReason) => void;\n presentation?: Omit<PresentationContext, 'source'>;\n}\n\nexport type ResilioActionState<TData, TCatalog extends ErrorCatalog> =\n PublicActionResult<TData | null, TCatalog>;\n\n/**\n * Next.js Server Action의 에러 핸들링과 UI 바인딩을 자동화하는 React 19 훅입니다.\n * React 19 useActionState와 동일한 시그니처를 제공하면서, 실패 상태(ok === false) 리턴 시\n * 전역 ResilioProvider에 자동으로 예상 오류를 전달하고 UI 정책을 평가합니다.\n */\nexport function useResilioState<Payload, TData, TCatalog extends ErrorCatalog>(\n action: (\n state: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ) => Promise<ResilioActionState<TData, TCatalog>>,\n options: UseResilioStateOptions<TData, TCatalog>\n) {\n const report = useOptionalReportError();\n const present = useOptionalPresentError();\n\n const initialState: ResilioActionState<TData, TCatalog> = {\n ok: true,\n data: options.initialData ?? null,\n };\n\n const [state, execute, isPending] = useActionState(async (\n prevState: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ): Promise<ResilioActionState<TData, TCatalog>> => {\n const res = await action(prevState, payload);\n \n if (res && typeof res === 'object' && 'ok' in res) {\n if (!res.ok && res.error) {\n const decoded = await decodePublicError(options.catalog, res.error);\n if (!decoded.ok) {\n report?.invalidPublic(decoded.reason, { source: 'next.action' });\n options.onInvalidPublicError?.(decoded.reason);\n return res;\n }\n\n report?.public(decoded.value, { source: 'next.action' });\n await present?.(decoded.value, {\n ...options.presentation,\n source: 'next.action',\n });\n options.onError?.(decoded.value);\n } else if (res.ok && res.data != null) {\n options.onSuccess?.(res.data);\n }\n }\n return res;\n }, initialState);\n\n return [state, execute, isPending] as const;\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useOptionalReportError } from '@resiliojs/react';\n\nexport interface UseResilioRouteErrorOptions {\n maxResets?: number;\n resetWindowMs?: number;\n}\n\nexport interface ResilioRouteErrorState {\n reset(): void;\n resetBlocked: boolean;\n}\n\nexport function useResilioRouteError(\n error: Error & { digest?: string },\n reset: () => void,\n options: UseResilioRouteErrorOptions = {},\n): ResilioRouteErrorState {\n const report = useOptionalReportError();\n const reported = useRef<Error | null>(null);\n const resetTimestamps = useRef<number[]>([]);\n const [resetBlocked, setResetBlocked] = useState(false);\n\n useEffect(() => {\n if (reported.current === error) return;\n reported.current = error;\n report?.exception(error, {\n source: 'next.route',\n correlationId: error.digest,\n context: { digest: error.digest },\n });\n }, [error, report]);\n\n const guardedReset = useCallback(() => {\n const now = Date.now();\n const windowMs = options.resetWindowMs ?? 1_000;\n const maxResets = options.maxResets ?? 3;\n resetTimestamps.current = resetTimestamps.current.filter(\n (timestamp) => now - timestamp < windowMs,\n );\n if (resetTimestamps.current.length >= maxResets) {\n setResetBlocked(true);\n return;\n }\n resetTimestamps.current.push(now);\n reset();\n }, [options.maxResets, options.resetWindowMs, reset]);\n\n return { reset: guardedReset, resetBlocked };\n}\n"],"mappings":";;;AAGA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,2BAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeP,SAAS,YAAY,sBAAsB;AAC3C,SAAS,0BAAAC,+BAA8B;AAGvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;
|
|
1
|
+
{"version":3,"sources":["../src/client/index.ts","../src/action-state.ts","../src/client/useResilioState.ts","../src/client/useResilioRouteError.ts"],"sourcesContent":["'use client';\n\n// Re-export all React client components from @resiliojs/react\nexport {\n ResilioProvider,\n ResilioErrorBoundary,\n ResilioPresentationHost,\n ResilioPresentationProvider,\n usePresentError,\n useOptionalPresentError,\n useResilioInline,\n useResilioAlert,\n createResilioRootHandlers,\n capture,\n captureAsync,\n useResilioHandler,\n installResilioBrowserErrorBridge,\n useResilioBrowserErrorBridge,\n} from '@resiliojs/react';\nexport type {\n ActivePresentation,\n FeedbackAdapter,\n PresentationRenderer,\n PresentationRendererInput,\n RendererRegistry,\n ResilioContextValue,\n ResilioErrorBoundaryProps,\n ResilioErrorFallbackProps,\n ResilioPresentationHostProps,\n ResilioPresentationProviderProps,\n ResilioProviderProps,\n} from '@resiliojs/react';\n\nexport { useResilio, useReportError } from '@resiliojs/react';\nexport { useOptionalReportError } from '@resiliojs/react';\n\n// Re-export client-safe utilities from core\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n defineErrorPolicy, \n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n createExceptionReporter,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n ErrorCatalog, \n PublicError, \n FeedbackType, \n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n ExceptionReporter,\n ExceptionReporterOptions,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\n// Re-export Next.js client helpers\nexport { toActionState } from '../action-state.js';\n// Export new useResilioState hook\nexport * from './useResilioState.js';\nexport * from './useResilioRouteError.js';\nexport * from '../types.js';\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","'use client';\n\nimport { useActionState } from 'react';\nimport { useOptionalPresentError, useOptionalReportError } from '@resiliojs/react';\nimport { decodePublicError } from '@resiliojs/core';\nimport type {\n DecodeFailureReason,\n ErrorCatalog,\n PresentationContext,\n PublicError,\n} from '@resiliojs/core';\nimport type { PublicActionResult } from '../types.js';\n\nexport interface UseResilioStateOptions<TData, TCatalog extends ErrorCatalog> {\n catalog: TCatalog;\n initialData?: TData | null;\n onSuccess?: (data: TData) => void;\n onError?: (error: PublicError<TCatalog>) => void;\n onInvalidPublicError?: (reason: DecodeFailureReason) => void;\n presentation?: Omit<PresentationContext, 'source'>;\n}\n\nexport type ResilioActionState<TData, TCatalog extends ErrorCatalog> =\n PublicActionResult<TData | null, TCatalog>;\n\n/**\n * Next.js Server Action의 에러 핸들링과 UI 바인딩을 자동화하는 React 19 훅입니다.\n * React 19 useActionState와 동일한 시그니처를 제공하면서, 실패 상태(ok === false) 리턴 시\n * 전역 ResilioProvider에 자동으로 예상 오류를 전달하고 UI 정책을 평가합니다.\n */\nexport function useResilioState<Payload, TData, TCatalog extends ErrorCatalog>(\n action: (\n state: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ) => Promise<ResilioActionState<TData, TCatalog>>,\n options: UseResilioStateOptions<TData, TCatalog>\n) {\n const report = useOptionalReportError();\n const present = useOptionalPresentError();\n\n const initialState: ResilioActionState<TData, TCatalog> = {\n ok: true,\n data: options.initialData ?? null,\n };\n\n const [state, execute, isPending] = useActionState(async (\n prevState: ResilioActionState<TData, TCatalog>,\n payload: Payload,\n ): Promise<ResilioActionState<TData, TCatalog>> => {\n const res = await action(prevState, payload);\n \n if (res && typeof res === 'object' && 'ok' in res) {\n if (!res.ok && res.error) {\n const decoded = await decodePublicError(options.catalog, res.error);\n if (!decoded.ok) {\n report?.invalidPublic(decoded.reason, { source: 'next.action' });\n options.onInvalidPublicError?.(decoded.reason);\n return res;\n }\n\n report?.public(decoded.value, { source: 'next.action' });\n await present?.(decoded.value, {\n ...options.presentation,\n source: 'next.action',\n });\n options.onError?.(decoded.value);\n } else if (res.ok && res.data != null) {\n options.onSuccess?.(res.data);\n }\n }\n return res;\n }, initialState);\n\n return [state, execute, isPending] as const;\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useOptionalReportError } from '@resiliojs/react';\n\nexport interface UseResilioRouteErrorOptions {\n maxResets?: number;\n resetWindowMs?: number;\n}\n\nexport interface ResilioRouteErrorState {\n reset(): void;\n resetBlocked: boolean;\n}\n\nexport function useResilioRouteError(\n error: Error & { digest?: string },\n reset: () => void,\n options: UseResilioRouteErrorOptions = {},\n): ResilioRouteErrorState {\n const report = useOptionalReportError();\n const reported = useRef<Error | null>(null);\n const resetTimestamps = useRef<number[]>([]);\n const [resetBlocked, setResetBlocked] = useState(false);\n\n useEffect(() => {\n if (reported.current === error) return;\n reported.current = error;\n report?.exception(error, {\n source: 'next.route',\n correlationId: error.digest,\n context: { digest: error.digest },\n });\n }, [error, report]);\n\n const guardedReset = useCallback(() => {\n const now = Date.now();\n const windowMs = options.resetWindowMs ?? 1_000;\n const maxResets = options.maxResets ?? 3;\n resetTimestamps.current = resetTimestamps.current.filter(\n (timestamp) => now - timestamp < windowMs,\n );\n if (resetTimestamps.current.length >= maxResets) {\n setResetBlocked(true);\n return;\n }\n resetTimestamps.current.push(now);\n reset();\n }, [options.maxResets, options.resetWindowMs, reset]);\n\n return { reset: guardedReset, resetBlocked };\n}\n"],"mappings":";;;AAGA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,2BAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeP,SAAS,YAAY,sBAAsB;AAC3C,SAAS,0BAAAC,+BAA8B;AAGvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACpDA,SAAS,cACd,cAAwB,MACH;AACrB,SAAO,EAAE,IAAI,MAAM,MAAM,YAAY;AACvC;;;ACPA,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB,8BAA8B;AAChE,SAAS,yBAAyB;AA0B3B,SAAS,gBACd,QAIA,SACA;AACA,QAAM,SAAS,uBAAuB;AACtC,QAAM,UAAU,wBAAwB;AAExC,QAAM,eAAoD;AAAA,IACxD,IAAI;AAAA,IACJ,MAAM,QAAQ,eAAe;AAAA,EAC/B;AAEA,QAAM,CAAC,OAAO,SAAS,SAAS,IAAI,eAAe,OACjD,WACA,YACiD;AACjD,UAAM,MAAM,MAAM,OAAO,WAAW,OAAO;AAE3C,QAAI,OAAO,OAAO,QAAQ,YAAY,QAAQ,KAAK;AACjD,UAAI,CAAC,IAAI,MAAM,IAAI,OAAO;AACxB,cAAM,UAAU,MAAM,kBAAkB,QAAQ,SAAS,IAAI,KAAK;AAClE,YAAI,CAAC,QAAQ,IAAI;AACf,kBAAQ,cAAc,QAAQ,QAAQ,EAAE,QAAQ,cAAc,CAAC;AAC/D,kBAAQ,uBAAuB,QAAQ,MAAM;AAC7C,iBAAO;AAAA,QACT;AAEA,gBAAQ,OAAO,QAAQ,OAAO,EAAE,QAAQ,cAAc,CAAC;AACvD,cAAM,UAAU,QAAQ,OAAO;AAAA,UAC7B,GAAG,QAAQ;AAAA,UACX,QAAQ;AAAA,QACV,CAAC;AACD,gBAAQ,UAAU,QAAQ,KAAK;AAAA,MACjC,WAAW,IAAI,MAAM,IAAI,QAAQ,MAAM;AACrC,gBAAQ,YAAY,IAAI,IAAI;AAAA,MAC9B;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,YAAY;AAEf,SAAO,CAAC,OAAO,SAAS,SAAS;AACnC;;;ACxEA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AACzD,SAAS,0BAAAC,+BAA8B;AAYhC,SAAS,qBACd,OACA,OACA,UAAuC,CAAC,GAChB;AACxB,QAAM,SAASA,wBAAuB;AACtC,QAAM,WAAW,OAAqB,IAAI;AAC1C,QAAM,kBAAkB,OAAiB,CAAC,CAAC;AAC3C,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAEtD,YAAU,MAAM;AACd,QAAI,SAAS,YAAY,MAAO;AAChC,aAAS,UAAU;AACnB,YAAQ,UAAU,OAAO;AAAA,MACvB,QAAQ;AAAA,MACR,eAAe,MAAM;AAAA,MACrB,SAAS,EAAE,QAAQ,MAAM,OAAO;AAAA,IAClC,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,MAAM,CAAC;AAElB,QAAM,eAAe,YAAY,MAAM;AACrC,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,WAAW,QAAQ,iBAAiB;AAC1C,UAAM,YAAY,QAAQ,aAAa;AACvC,oBAAgB,UAAU,gBAAgB,QAAQ;AAAA,MAChD,CAAC,cAAc,MAAM,YAAY;AAAA,IACnC;AACA,QAAI,gBAAgB,QAAQ,UAAU,WAAW;AAC/C,sBAAgB,IAAI;AACpB;AAAA,IACF;AACA,oBAAgB,QAAQ,KAAK,GAAG;AAChC,UAAM;AAAA,EACR,GAAG,CAAC,QAAQ,WAAW,QAAQ,eAAe,KAAK,CAAC;AAEpD,SAAO,EAAE,OAAO,cAAc,aAAa;AAC7C;","names":["useOptionalPresentError","useOptionalReportError","decodePublicError","useOptionalReportError"]}
|
package/dist/index.cjs
CHANGED
|
@@ -27,6 +27,7 @@ __export(src_exports, {
|
|
|
27
27
|
canonicalStringify: () => import_core4.canonicalStringify,
|
|
28
28
|
createCompositeSink: () => import_core4.createCompositeSink,
|
|
29
29
|
createConsoleSink: () => import_core4.createConsoleSink,
|
|
30
|
+
createExceptionReporter: () => import_core4.createExceptionReporter,
|
|
30
31
|
createPresentationEvaluator: () => import_core4.createPresentationEvaluator,
|
|
31
32
|
createPublicError: () => import_core4.createPublicError,
|
|
32
33
|
createResilioAction: () => createResilioAction,
|
|
@@ -137,6 +138,7 @@ var import_core5 = require("@resiliojs/core");
|
|
|
137
138
|
canonicalStringify,
|
|
138
139
|
createCompositeSink,
|
|
139
140
|
createConsoleSink,
|
|
141
|
+
createExceptionReporter,
|
|
140
142
|
createPresentationEvaluator,
|
|
141
143
|
createPublicError,
|
|
142
144
|
createResilioAction,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/action.ts","../src/action-state.ts","../src/serializer.ts","../src/route-error.ts"],"sourcesContent":["// Server-safe exports (safe to import in Server Components & Server Actions)\nexport * from './action.js';\nexport * from './action-state.js';\nexport * from './serializer.js';\nexport * from './route-error.js';\nexport * from './types.js';\n\n// Re-export core types and utilities for single-package DX\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n normalizeError, \n serializeError, \n isRetryableError, \n withRetry,\n defineErrorPolicy,\n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n RetryPolicy, \n NormalizeOptions, \n LoggerAdapter,\n ErrorCatalog,\n PublicError,\n FeedbackType,\n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\nexport { ResilioEmitter, globalResilioEmitter, ResilioLogger, resilioLogger, defaultConsoleLogger } from '@resiliojs/core';\n","import type { ErrorCatalog, ErrorCode } from '@resiliojs/core';\nimport type { PublicActionResult } from './types.js';\n\n/**\n * @deprecated Server Action 전체를 감싸는 래핑 방식은 권장되지 않습니다.\n * 대신 개별 Action에서 직접 `PublicActionResult`를 반환하십시오.\n * 이 호환 helper는 예외를 가로채지 않으며 unexpected exception과 Next.js 제어 흐름을 그대로 전파합니다.\n */\nexport function createResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n TArgs extends unknown[] = unknown[],\n>(\n handler: (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>>,\n): (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>> {\n return handler;\n}\n\n/**\n * 이미 decode된 Server Action 결과가 성공인지 타입 안전하게 확인합니다.\n */\nexport function isSuccessfulResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n>(\n result: PublicActionResult<TData, TCatalog, TCodes>\n): result is { ok: true; data: TData } {\n return result.ok === true;\n}\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","import { ResilioError, serializeError } from '@resiliojs/core';\n\nexport function sanitizeErrorForClient(\n error: ResilioError,\n): ResilioError {\n if (error.kind === 'server' || error.kind === 'unknown') {\n throw new Error('Unexpected server errors must be thrown and handled by the Next.js error boundary.');\n }\n return serializeError(error);\n}\n","import type { Instrumentation } from 'next';\nimport type { ErrorCatalog, ErrorSink } from '@resiliojs/core';\nimport { reportToSinkBestEffort } from '@resiliojs/core';\n\n/**\n * Next.js 15+ instrumentation.ts의 onRequestError 규격에 맞는 오류 관측성 핸들러를 생성합니다.\n * request headers와 query string은 보안을 위해 기본적으로 전달하지 않습니다.\n */\nexport function createResilioOnRequestError<T extends ErrorCatalog>(\n sink: ErrorSink<T>\n): Instrumentation.onRequestError {\n return async (error, request, context) => {\n const safePath = request.path ? request.path.split('?')[0] : '';\n const digest = getErrorDigest(error);\n const occurrenceId = Math.random().toString(36).substring(2, 15);\n const timestamp = Date.now();\n\n await reportToSinkBestEffort(sink, {\n occurrenceId,\n timestamp,\n source: 'next.request',\n kind: 'exception',\n error,\n correlationId: digest,\n context: {\n path: safePath,\n method: request.method,\n routerKind: context.routerKind,\n routePath: context.routePath,\n routeType: context.routeType,\n renderSource: context.renderSource,\n revalidateReason: context.revalidateReason,\n digest,\n },\n });\n };\n}\n\nfunction getErrorDigest(error: unknown): string | undefined {\n if (!error || typeof error !== 'object' || !('digest' in error)) {\n return undefined;\n }\n return typeof error.digest === 'string' ? error.digest : undefined;\n}\n\n// 기존 하위 호환을 위한 레거시 헬퍼\nimport { normalizeError, globalResilioEmitter, ResilioError } from '@resiliojs/core';\n\nexport interface RouteErrorOptions {\n digest?: string;\n}\n\n/**\n * @deprecated Use createResilioOnRequestError instead.\n */\nexport function reportRouteError(\n error: unknown,\n options: RouteErrorOptions = {}\n): ResilioError {\n const normalized = normalizeError(error, {\n defaultKind: 'server',\n defaultPresentation: 'boundary',\n });\n\n if (options.digest) {\n normalized.code = options.digest;\n }\n\n globalResilioEmitter.emit(normalized);\n\n return normalized;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,SAAS,oBAMd,SAC0E;AAC1E,SAAO;AACT;AAKO,SAAS,0BAKd,QACqC;AACrC,SAAO,OAAO,OAAO;AACvB;;;ACzBO,SAAS,cACd,cAAwB,MACH;AACrB,SAAO,EAAE,IAAI,MAAM,MAAM,YAAY;AACvC;;;ACTA,kBAA6C;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/action.ts","../src/action-state.ts","../src/serializer.ts","../src/route-error.ts"],"sourcesContent":["// Server-safe exports (safe to import in Server Components & Server Actions)\nexport * from './action.js';\nexport * from './action-state.js';\nexport * from './serializer.js';\nexport * from './route-error.js';\nexport * from './types.js';\n\n// Re-export core types and utilities for single-package DX\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n normalizeError, \n serializeError, \n isRetryableError, \n withRetry,\n defineErrorPolicy,\n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n createExceptionReporter,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n RetryPolicy, \n NormalizeOptions, \n LoggerAdapter,\n ErrorCatalog,\n PublicError,\n FeedbackType,\n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n ExceptionReporter,\n ExceptionReporterOptions,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\nexport { ResilioEmitter, globalResilioEmitter, ResilioLogger, resilioLogger, defaultConsoleLogger } from '@resiliojs/core';\n","import type { ErrorCatalog, ErrorCode } from '@resiliojs/core';\nimport type { PublicActionResult } from './types.js';\n\n/**\n * @deprecated Server Action 전체를 감싸는 래핑 방식은 권장되지 않습니다.\n * 대신 개별 Action에서 직접 `PublicActionResult`를 반환하십시오.\n * 이 호환 helper는 예외를 가로채지 않으며 unexpected exception과 Next.js 제어 흐름을 그대로 전파합니다.\n */\nexport function createResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n TArgs extends unknown[] = unknown[],\n>(\n handler: (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>>,\n): (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>> {\n return handler;\n}\n\n/**\n * 이미 decode된 Server Action 결과가 성공인지 타입 안전하게 확인합니다.\n */\nexport function isSuccessfulResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n>(\n result: PublicActionResult<TData, TCatalog, TCodes>\n): result is { ok: true; data: TData } {\n return result.ok === true;\n}\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","import { ResilioError, serializeError } from '@resiliojs/core';\n\n/**\n * @deprecated This legacy helper preserves expected-error messages and is not a\n * general-purpose secret scrubber. Return catalog-backed `PublicActionResult`\n * values created with `createPublicError` instead.\n */\nexport function sanitizeErrorForClient(\n error: ResilioError,\n): ResilioError {\n if (error.kind === 'server' || error.kind === 'unknown') {\n throw new Error('Unexpected server errors must be thrown and handled by the Next.js error boundary.');\n }\n return serializeError(error);\n}\n","import type { Instrumentation } from 'next';\nimport type { ErrorCatalog, ErrorSink } from '@resiliojs/core';\nimport { reportToSinkBestEffort } from '@resiliojs/core';\n\n/**\n * Next.js 15+ instrumentation.ts의 onRequestError 규격에 맞는 오류 관측성 핸들러를 생성합니다.\n * request headers와 query string은 보안을 위해 기본적으로 전달하지 않습니다.\n */\nexport function createResilioOnRequestError<T extends ErrorCatalog>(\n sink: ErrorSink<T>\n): Instrumentation.onRequestError {\n return async (error, request, context) => {\n const safePath = request.path ? request.path.split('?')[0] : '';\n const digest = getErrorDigest(error);\n const occurrenceId = Math.random().toString(36).substring(2, 15);\n const timestamp = Date.now();\n\n await reportToSinkBestEffort(sink, {\n occurrenceId,\n timestamp,\n source: 'next.request',\n kind: 'exception',\n error,\n correlationId: digest,\n context: {\n path: safePath,\n method: request.method,\n routerKind: context.routerKind,\n routePath: context.routePath,\n routeType: context.routeType,\n renderSource: context.renderSource,\n revalidateReason: context.revalidateReason,\n digest,\n },\n });\n };\n}\n\nfunction getErrorDigest(error: unknown): string | undefined {\n if (!error || typeof error !== 'object' || !('digest' in error)) {\n return undefined;\n }\n return typeof error.digest === 'string' ? error.digest : undefined;\n}\n\n// 기존 하위 호환을 위한 레거시 헬퍼\nimport { normalizeError, globalResilioEmitter, ResilioError } from '@resiliojs/core';\n\nexport interface RouteErrorOptions {\n digest?: string;\n}\n\n/**\n * @deprecated Use createResilioOnRequestError instead.\n */\nexport function reportRouteError(\n error: unknown,\n options: RouteErrorOptions = {}\n): ResilioError {\n const normalized = normalizeError(error, {\n defaultKind: 'server',\n defaultPresentation: 'boundary',\n });\n\n if (options.digest) {\n normalized.code = options.digest;\n }\n\n globalResilioEmitter.emit(normalized);\n\n return normalized;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,SAAS,oBAMd,SAC0E;AAC1E,SAAO;AACT;AAKO,SAAS,0BAKd,QACqC;AACrC,SAAO,OAAO,OAAO;AACvB;;;ACzBO,SAAS,cACd,cAAwB,MACH;AACrB,SAAO,EAAE,IAAI,MAAM,MAAM,YAAY;AACvC;;;ACTA,kBAA6C;AAOtC,SAAS,uBACd,OACc;AACd,MAAI,MAAM,SAAS,YAAY,MAAM,SAAS,WAAW;AACvD,UAAM,IAAI,MAAM,oFAAoF;AAAA,EACtG;AACA,aAAO,4BAAe,KAAK;AAC7B;;;ACZA,IAAAA,eAAuC;AA4CvC,IAAAA,eAAmE;AAtC5D,SAAS,4BACd,MACgC;AAChC,SAAO,OAAO,OAAO,SAAS,YAAY;AACxC,UAAM,WAAW,QAAQ,OAAO,QAAQ,KAAK,MAAM,GAAG,EAAE,CAAC,IAAI;AAC7D,UAAM,SAAS,eAAe,KAAK;AACnC,UAAM,eAAe,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE;AAC/D,UAAM,YAAY,KAAK,IAAI;AAE3B,cAAM,qCAAuB,MAAM;AAAA,MACjC;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,MACN;AAAA,MACA,eAAe;AAAA,MACf,SAAS;AAAA,QACP,MAAM;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,YAAY,QAAQ;AAAA,QACpB,WAAW,QAAQ;AAAA,QACnB,WAAW,QAAQ;AAAA,QACnB,cAAc,QAAQ;AAAA,QACtB,kBAAkB,QAAQ;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,eAAe,OAAoC;AAC1D,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,YAAY,QAAQ;AAC/D,WAAO;AAAA,EACT;AACA,SAAO,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AAC3D;AAYO,SAAS,iBACd,OACA,UAA6B,CAAC,GAChB;AACd,QAAM,iBAAa,6BAAe,OAAO;AAAA,IACvC,aAAa;AAAA,IACb,qBAAqB;AAAA,EACvB,CAAC;AAED,MAAI,QAAQ,QAAQ;AAClB,eAAW,OAAO,QAAQ;AAAA,EAC5B;AAEA,oCAAqB,KAAK,UAAU;AAEpC,SAAO;AACT;;;AJ/DA,IAAAC,eAwBO;AA6CP,IAAAA,eAAyG;","names":["import_core","import_core"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ErrorCatalog, ErrorCode, ResilioError, ErrorSink } from '@resiliojs/core';
|
|
2
|
-
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, FeedbackType, LoggerAdapter, NormalizeOptions, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioEmitter, ResilioError, ResilioErrorKind, ResilioLogger, Result, RetryPolicy, canonicalStringify, createCompositeSink, createConsoleSink, createPresentationEvaluator, createPublicError, decodePublicError, defaultConsoleLogger, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, globalResilioEmitter, isErr, isOk, isPublicResult, isRetryableError, normalizeError, ok, resilioLogger, serializeError, shouldSuppress, stringHash, withRetry } from '@resiliojs/core';
|
|
2
|
+
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, ExceptionReporter, ExceptionReporterOptions, FeedbackType, LoggerAdapter, NormalizeOptions, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioEmitter, ResilioError, ResilioErrorKind, ResilioLogger, Result, RetryPolicy, canonicalStringify, createCompositeSink, createConsoleSink, createExceptionReporter, createPresentationEvaluator, createPublicError, decodePublicError, defaultConsoleLogger, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, globalResilioEmitter, isErr, isOk, isPublicResult, isRetryableError, normalizeError, ok, resilioLogger, serializeError, shouldSuppress, stringHash, withRetry } from '@resiliojs/core';
|
|
3
3
|
import { P as PublicActionResult } from './types-kEvjOn-F.cjs';
|
|
4
4
|
export { t as toActionState } from './types-kEvjOn-F.cjs';
|
|
5
5
|
import { Instrumentation } from 'next';
|
|
@@ -18,6 +18,11 @@ declare function isSuccessfulResilioAction<TData, TCatalog extends ErrorCatalog,
|
|
|
18
18
|
data: TData;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated This legacy helper preserves expected-error messages and is not a
|
|
23
|
+
* general-purpose secret scrubber. Return catalog-backed `PublicActionResult`
|
|
24
|
+
* values created with `createPublicError` instead.
|
|
25
|
+
*/
|
|
21
26
|
declare function sanitizeErrorForClient(error: ResilioError): ResilioError;
|
|
22
27
|
|
|
23
28
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ErrorCatalog, ErrorCode, ResilioError, ErrorSink } from '@resiliojs/core';
|
|
2
|
-
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, FeedbackType, LoggerAdapter, NormalizeOptions, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioEmitter, ResilioError, ResilioErrorKind, ResilioLogger, Result, RetryPolicy, canonicalStringify, createCompositeSink, createConsoleSink, createPresentationEvaluator, createPublicError, decodePublicError, defaultConsoleLogger, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, globalResilioEmitter, isErr, isOk, isPublicResult, isRetryableError, normalizeError, ok, resilioLogger, serializeError, shouldSuppress, stringHash, withRetry } from '@resiliojs/core';
|
|
2
|
+
export { BoundedDedupeStore, BuiltInChannel, DecodeResult, DedupeContext, DedupePolicy, ErrorCatalog, ErrorCode, ErrorDefinition, ErrorEvent, ErrorPolicyConfig, ErrorSink, ErrorSource, EvaluatedPresentationDecision, ExceptionReporter, ExceptionReporterOptions, FeedbackType, LoggerAdapter, NormalizeOptions, PolicyDecision, PolicyEngine, PolicyEngineOptions, PolicyEntry, PresentationContext, PresentationDecision, PresentationEvaluationResult, PresentationEvaluator, PresentationEvaluatorOptions, PresentationInvalidReason, PresentationObservationEvent, PresentationObserver, PresentationPlan, PresentationPlanInput, PresentationPolicyConfig, PresentationRule, PublicError, PublicErrorArgs, PublicErrorFor, PublicResult, ResilioEmitter, ResilioError, ResilioErrorKind, ResilioLogger, Result, RetryPolicy, canonicalStringify, createCompositeSink, createConsoleSink, createExceptionReporter, createPresentationEvaluator, createPublicError, decodePublicError, defaultConsoleLogger, defineErrorCatalog, defineErrorPolicy, definePresentationPolicy, err, globalResilioEmitter, isErr, isOk, isPublicResult, isRetryableError, normalizeError, ok, resilioLogger, serializeError, shouldSuppress, stringHash, withRetry } from '@resiliojs/core';
|
|
3
3
|
import { P as PublicActionResult } from './types-kEvjOn-F.js';
|
|
4
4
|
export { t as toActionState } from './types-kEvjOn-F.js';
|
|
5
5
|
import { Instrumentation } from 'next';
|
|
@@ -18,6 +18,11 @@ declare function isSuccessfulResilioAction<TData, TCatalog extends ErrorCatalog,
|
|
|
18
18
|
data: TData;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated This legacy helper preserves expected-error messages and is not a
|
|
23
|
+
* general-purpose secret scrubber. Return catalog-backed `PublicActionResult`
|
|
24
|
+
* values created with `createPublicError` instead.
|
|
25
|
+
*/
|
|
21
26
|
declare function sanitizeErrorForClient(error: ResilioError): ResilioError;
|
|
22
27
|
|
|
23
28
|
/**
|
package/dist/index.js
CHANGED
|
@@ -85,6 +85,7 @@ import {
|
|
|
85
85
|
decodePublicError,
|
|
86
86
|
createConsoleSink,
|
|
87
87
|
createCompositeSink,
|
|
88
|
+
createExceptionReporter,
|
|
88
89
|
PolicyEngine,
|
|
89
90
|
canonicalStringify,
|
|
90
91
|
stringHash,
|
|
@@ -101,6 +102,7 @@ export {
|
|
|
101
102
|
canonicalStringify,
|
|
102
103
|
createCompositeSink,
|
|
103
104
|
createConsoleSink,
|
|
105
|
+
createExceptionReporter,
|
|
104
106
|
createPresentationEvaluator,
|
|
105
107
|
createPublicError,
|
|
106
108
|
createResilioAction,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/action.ts","../src/action-state.ts","../src/serializer.ts","../src/route-error.ts","../src/index.ts"],"sourcesContent":["import type { ErrorCatalog, ErrorCode } from '@resiliojs/core';\nimport type { PublicActionResult } from './types.js';\n\n/**\n * @deprecated Server Action 전체를 감싸는 래핑 방식은 권장되지 않습니다.\n * 대신 개별 Action에서 직접 `PublicActionResult`를 반환하십시오.\n * 이 호환 helper는 예외를 가로채지 않으며 unexpected exception과 Next.js 제어 흐름을 그대로 전파합니다.\n */\nexport function createResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n TArgs extends unknown[] = unknown[],\n>(\n handler: (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>>,\n): (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>> {\n return handler;\n}\n\n/**\n * 이미 decode된 Server Action 결과가 성공인지 타입 안전하게 확인합니다.\n */\nexport function isSuccessfulResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n>(\n result: PublicActionResult<TData, TCatalog, TCodes>\n): result is { ok: true; data: TData } {\n return result.ok === true;\n}\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","import { ResilioError, serializeError } from '@resiliojs/core';\n\nexport function sanitizeErrorForClient(\n error: ResilioError,\n): ResilioError {\n if (error.kind === 'server' || error.kind === 'unknown') {\n throw new Error('Unexpected server errors must be thrown and handled by the Next.js error boundary.');\n }\n return serializeError(error);\n}\n","import type { Instrumentation } from 'next';\nimport type { ErrorCatalog, ErrorSink } from '@resiliojs/core';\nimport { reportToSinkBestEffort } from '@resiliojs/core';\n\n/**\n * Next.js 15+ instrumentation.ts의 onRequestError 규격에 맞는 오류 관측성 핸들러를 생성합니다.\n * request headers와 query string은 보안을 위해 기본적으로 전달하지 않습니다.\n */\nexport function createResilioOnRequestError<T extends ErrorCatalog>(\n sink: ErrorSink<T>\n): Instrumentation.onRequestError {\n return async (error, request, context) => {\n const safePath = request.path ? request.path.split('?')[0] : '';\n const digest = getErrorDigest(error);\n const occurrenceId = Math.random().toString(36).substring(2, 15);\n const timestamp = Date.now();\n\n await reportToSinkBestEffort(sink, {\n occurrenceId,\n timestamp,\n source: 'next.request',\n kind: 'exception',\n error,\n correlationId: digest,\n context: {\n path: safePath,\n method: request.method,\n routerKind: context.routerKind,\n routePath: context.routePath,\n routeType: context.routeType,\n renderSource: context.renderSource,\n revalidateReason: context.revalidateReason,\n digest,\n },\n });\n };\n}\n\nfunction getErrorDigest(error: unknown): string | undefined {\n if (!error || typeof error !== 'object' || !('digest' in error)) {\n return undefined;\n }\n return typeof error.digest === 'string' ? error.digest : undefined;\n}\n\n// 기존 하위 호환을 위한 레거시 헬퍼\nimport { normalizeError, globalResilioEmitter, ResilioError } from '@resiliojs/core';\n\nexport interface RouteErrorOptions {\n digest?: string;\n}\n\n/**\n * @deprecated Use createResilioOnRequestError instead.\n */\nexport function reportRouteError(\n error: unknown,\n options: RouteErrorOptions = {}\n): ResilioError {\n const normalized = normalizeError(error, {\n defaultKind: 'server',\n defaultPresentation: 'boundary',\n });\n\n if (options.digest) {\n normalized.code = options.digest;\n }\n\n globalResilioEmitter.emit(normalized);\n\n return normalized;\n}\n","// Server-safe exports (safe to import in Server Components & Server Actions)\nexport * from './action.js';\nexport * from './action-state.js';\nexport * from './serializer.js';\nexport * from './route-error.js';\nexport * from './types.js';\n\n// Re-export core types and utilities for single-package DX\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n normalizeError, \n serializeError, \n isRetryableError, \n withRetry,\n defineErrorPolicy,\n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n RetryPolicy, \n NormalizeOptions, \n LoggerAdapter,\n ErrorCatalog,\n PublicError,\n FeedbackType,\n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\nexport { ResilioEmitter, globalResilioEmitter, ResilioLogger, resilioLogger, defaultConsoleLogger } from '@resiliojs/core';\n"],"mappings":";AAQO,SAAS,oBAMd,SAC0E;AAC1E,SAAO;AACT;AAKO,SAAS,0BAKd,QACqC;AACrC,SAAO,OAAO,OAAO;AACvB;;;ACzBO,SAAS,cACd,cAAwB,MACH;AACrB,SAAO,EAAE,IAAI,MAAM,MAAM,YAAY;AACvC;;;ACTA,SAAuB,sBAAsB;
|
|
1
|
+
{"version":3,"sources":["../src/action.ts","../src/action-state.ts","../src/serializer.ts","../src/route-error.ts","../src/index.ts"],"sourcesContent":["import type { ErrorCatalog, ErrorCode } from '@resiliojs/core';\nimport type { PublicActionResult } from './types.js';\n\n/**\n * @deprecated Server Action 전체를 감싸는 래핑 방식은 권장되지 않습니다.\n * 대신 개별 Action에서 직접 `PublicActionResult`를 반환하십시오.\n * 이 호환 helper는 예외를 가로채지 않으며 unexpected exception과 Next.js 제어 흐름을 그대로 전파합니다.\n */\nexport function createResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n TArgs extends unknown[] = unknown[],\n>(\n handler: (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>>,\n): (...args: TArgs) => Promise<PublicActionResult<TData, TCatalog, TCodes>> {\n return handler;\n}\n\n/**\n * 이미 decode된 Server Action 결과가 성공인지 타입 안전하게 확인합니다.\n */\nexport function isSuccessfulResilioAction<\n TData,\n TCatalog extends ErrorCatalog,\n TCodes extends ErrorCode<TCatalog> = ErrorCode<TCatalog>,\n>(\n result: PublicActionResult<TData, TCatalog, TCodes>\n): result is { ok: true; data: TData } {\n return result.ok === true;\n}\n","import { Result } from '@resiliojs/core';\n\n/**\n * React 19 useActionState 초기화 시그니처에 적합한 성공 상태(Result)의 액션 초기값을 생성합니다.\n */\nexport function toActionState<T, E = unknown>(\n initialData: T | null = null\n): Result<T | null, E> {\n return { ok: true, data: initialData };\n}\n","import { ResilioError, serializeError } from '@resiliojs/core';\n\n/**\n * @deprecated This legacy helper preserves expected-error messages and is not a\n * general-purpose secret scrubber. Return catalog-backed `PublicActionResult`\n * values created with `createPublicError` instead.\n */\nexport function sanitizeErrorForClient(\n error: ResilioError,\n): ResilioError {\n if (error.kind === 'server' || error.kind === 'unknown') {\n throw new Error('Unexpected server errors must be thrown and handled by the Next.js error boundary.');\n }\n return serializeError(error);\n}\n","import type { Instrumentation } from 'next';\nimport type { ErrorCatalog, ErrorSink } from '@resiliojs/core';\nimport { reportToSinkBestEffort } from '@resiliojs/core';\n\n/**\n * Next.js 15+ instrumentation.ts의 onRequestError 규격에 맞는 오류 관측성 핸들러를 생성합니다.\n * request headers와 query string은 보안을 위해 기본적으로 전달하지 않습니다.\n */\nexport function createResilioOnRequestError<T extends ErrorCatalog>(\n sink: ErrorSink<T>\n): Instrumentation.onRequestError {\n return async (error, request, context) => {\n const safePath = request.path ? request.path.split('?')[0] : '';\n const digest = getErrorDigest(error);\n const occurrenceId = Math.random().toString(36).substring(2, 15);\n const timestamp = Date.now();\n\n await reportToSinkBestEffort(sink, {\n occurrenceId,\n timestamp,\n source: 'next.request',\n kind: 'exception',\n error,\n correlationId: digest,\n context: {\n path: safePath,\n method: request.method,\n routerKind: context.routerKind,\n routePath: context.routePath,\n routeType: context.routeType,\n renderSource: context.renderSource,\n revalidateReason: context.revalidateReason,\n digest,\n },\n });\n };\n}\n\nfunction getErrorDigest(error: unknown): string | undefined {\n if (!error || typeof error !== 'object' || !('digest' in error)) {\n return undefined;\n }\n return typeof error.digest === 'string' ? error.digest : undefined;\n}\n\n// 기존 하위 호환을 위한 레거시 헬퍼\nimport { normalizeError, globalResilioEmitter, ResilioError } from '@resiliojs/core';\n\nexport interface RouteErrorOptions {\n digest?: string;\n}\n\n/**\n * @deprecated Use createResilioOnRequestError instead.\n */\nexport function reportRouteError(\n error: unknown,\n options: RouteErrorOptions = {}\n): ResilioError {\n const normalized = normalizeError(error, {\n defaultKind: 'server',\n defaultPresentation: 'boundary',\n });\n\n if (options.digest) {\n normalized.code = options.digest;\n }\n\n globalResilioEmitter.emit(normalized);\n\n return normalized;\n}\n","// Server-safe exports (safe to import in Server Components & Server Actions)\nexport * from './action.js';\nexport * from './action-state.js';\nexport * from './serializer.js';\nexport * from './route-error.js';\nexport * from './types.js';\n\n// Re-export core types and utilities for single-package DX\nexport { \n ok, \n err, \n isOk, \n isErr, \n isPublicResult,\n normalizeError, \n serializeError, \n isRetryableError, \n withRetry,\n defineErrorPolicy,\n shouldSuppress,\n defineErrorCatalog,\n createPublicError,\n decodePublicError,\n createConsoleSink,\n createCompositeSink,\n createExceptionReporter,\n PolicyEngine,\n canonicalStringify,\n stringHash,\n BoundedDedupeStore,\n definePresentationPolicy,\n createPresentationEvaluator\n} from '@resiliojs/core';\n\nexport type { \n Result, \n PublicResult,\n ResilioError, \n ResilioErrorKind, \n RetryPolicy, \n NormalizeOptions, \n LoggerAdapter,\n ErrorCatalog,\n PublicError,\n FeedbackType,\n ErrorPolicyConfig,\n ErrorDefinition,\n ErrorCode,\n PublicErrorFor,\n PublicErrorArgs,\n DecodeResult,\n ErrorSource,\n ErrorEvent,\n ErrorSink,\n ExceptionReporter,\n ExceptionReporterOptions,\n PolicyEntry,\n PolicyDecision,\n DedupeContext,\n DedupePolicy,\n PolicyEngineOptions,\n BuiltInChannel,\n PresentationContext,\n PresentationDecision,\n PresentationPlan,\n PresentationPlanInput,\n PresentationRule,\n PresentationPolicyConfig,\n EvaluatedPresentationDecision,\n PresentationInvalidReason,\n PresentationEvaluationResult,\n PresentationEvaluator,\n PresentationEvaluatorOptions,\n PresentationObservationEvent,\n PresentationObserver\n} from '@resiliojs/core';\n\nexport { ResilioEmitter, globalResilioEmitter, ResilioLogger, resilioLogger, defaultConsoleLogger } from '@resiliojs/core';\n"],"mappings":";AAQO,SAAS,oBAMd,SAC0E;AAC1E,SAAO;AACT;AAKO,SAAS,0BAKd,QACqC;AACrC,SAAO,OAAO,OAAO;AACvB;;;ACzBO,SAAS,cACd,cAAwB,MACH;AACrB,SAAO,EAAE,IAAI,MAAM,MAAM,YAAY;AACvC;;;ACTA,SAAuB,sBAAsB;AAOtC,SAAS,uBACd,OACc;AACd,MAAI,MAAM,SAAS,YAAY,MAAM,SAAS,WAAW;AACvD,UAAM,IAAI,MAAM,oFAAoF;AAAA,EACtG;AACA,SAAO,eAAe,KAAK;AAC7B;;;ACZA,SAAS,8BAA8B;AA4CvC,SAAS,gBAAgB,4BAA0C;AAtC5D,SAAS,4BACd,MACgC;AAChC,SAAO,OAAO,OAAO,SAAS,YAAY;AACxC,UAAM,WAAW,QAAQ,OAAO,QAAQ,KAAK,MAAM,GAAG,EAAE,CAAC,IAAI;AAC7D,UAAM,SAAS,eAAe,KAAK;AACnC,UAAM,eAAe,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE;AAC/D,UAAM,YAAY,KAAK,IAAI;AAE3B,UAAM,uBAAuB,MAAM;AAAA,MACjC;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,MACN;AAAA,MACA,eAAe;AAAA,MACf,SAAS;AAAA,QACP,MAAM;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,YAAY,QAAQ;AAAA,QACpB,WAAW,QAAQ;AAAA,QACnB,WAAW,QAAQ;AAAA,QACnB,cAAc,QAAQ;AAAA,QACtB,kBAAkB,QAAQ;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,eAAe,OAAoC;AAC1D,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,YAAY,QAAQ;AAC/D,WAAO;AAAA,EACT;AACA,SAAO,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AAC3D;AAYO,SAAS,iBACd,OACA,UAA6B,CAAC,GAChB;AACd,QAAM,aAAa,eAAe,OAAO;AAAA,IACvC,aAAa;AAAA,IACb,qBAAqB;AAAA,EACvB,CAAC;AAED,MAAI,QAAQ,QAAQ;AAClB,eAAW,OAAO,QAAQ;AAAA,EAC5B;AAEA,uBAAqB,KAAK,UAAU;AAEpC,SAAO;AACT;;;AC/DA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAAA;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6CP,SAAS,gBAAgB,wBAAAC,uBAAsB,eAAe,eAAe,4BAA4B;","names":["normalizeError","serializeError","globalResilioEmitter"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@resiliojs/next",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Next.js facade for typed public errors and presentation policies",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
],
|
|
45
45
|
"sideEffects": false,
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@resiliojs/core": "^0.1.
|
|
48
|
-
"@resiliojs/react": "^0.1.
|
|
47
|
+
"@resiliojs/core": "^0.1.1",
|
|
48
|
+
"@resiliojs/react": "^0.1.1"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"next": ">=15 <17",
|