{"version":3,"file":"index.mjs","names":["useSafeContext","useInternalSafeContext"],"sources":["../../../src/utils/createSafeContext/index.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { useSafeContext as useInternalSafeContext } from '../../hooks/useSafeContext';\n\n/**\n * @description Context를 안전하게 생성하고, 사용할 수 있도록 도와주는 유틸리티 함수입니다.\n *\n * 기본값이 없다면 Provider 외부에서 useSafeContext를 사용할 때 에러를 발생시킵니다.\n * 기본값이 있다면 Provider 외부에서 useSafeContext를 사용하더라도 에러가 발생하지 않고 기본값을 반환합니다.\n *\n * Provider의 value prop은 필수이며, 기본값이 없더라도 null/undefined는 허용하지 않습니다.\n *\n * @template T 컨텍스트 값의 타입\n *\n * @param {T | null} [defaultValue=null] Context의 기본 값\n * @param {string} [displayName='SafeContext'] 컨텍스트 이름\n * @returns {[React.Provider<T>, () => NonNullable<T>]} Provider와 useSafeContext 함수를 반환합니다.\n *\n * @throws 기본값이 없는 상태에서 Provider 외부에서 useSafeContext를 사용할 때 에러를 발생시킵니다.\n *\n * @example\n * ```tsx\n * const [TestProvider, useTestContext] =\n *   createSafeContext<{ value: string }>(null, 'TestContext');\n *\n * function TestComponent() {\n *   const context = useTestContext();\n *   // 안전하게 접근했기 때문에 context는 NonNullable 타입을 보장합니다.\n *\n *   return <div>{context.value}</div>;\n * }\n *\n * <TestProvider value={{ value: 'test' }}>\n *   <TestComponent />\n * </TestProvider>\n * ```\n */\nexport function createSafeContext<T>(\n  defaultValue: T | null = null,\n  displayName: string = 'SafeContext'\n): [React.Provider<T>, () => NonNullable<T>] {\n  const Context = createContext<T | null>(defaultValue);\n  Context.displayName = displayName;\n\n  function useSafeContext(): NonNullable<T> {\n    return useInternalSafeContext(Context);\n  }\n\n  return [Context.Provider as React.Provider<T>, useSafeContext];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,kBACd,eAAyB,MACzB,cAAsB,eACqB;CAC3C,MAAM,UAAU,cAAwB,aAAa;CACrD,QAAQ,cAAc;CAEtB,SAASA,mBAAiC;EACxC,OAAOC,eAAuB,QAAQ;;CAGxC,OAAO,CAAC,QAAQ,UAA+BD,iBAAe"}