{"version":3,"file":"index.cjs","sources":["../../../src/common/once/index.ts"],"sourcesContent":["/**\n * @description 주어진 콜백 함수를 한 번만 실행하게 하는 함수입니다.첫 번째 호출 이후에는 이전에 실행된 결과를 반환합니다.\n *\n * @template T - 콜백 함수의 타입을 지정합니다.\n * @param {T} callback - 한 번만 실행될 콜백 함수입니다.\n * @returns {T} - 원래의 콜백 함수와 동일한 시그니처를 가지는 함수입니다.\n *\n * @example\n * const initialize = once(() => {\n *   console.log('초기화 완료');\n *   return true;\n * });\n *\n * initialize(); // '초기화 완료'가 출력되며, true를 반환합니다.\n * initialize(); // 아무 것도 출력되지 않으며, 이전 결과인 true를 반환합니다.\n */\nexport function once<T extends (...args: any[]) => any>(callback: T): T {\n  let isCalled = false;\n  let cachedResult: ReturnType<T>;\n\n  const executeOnce = (...args: any[]) => {\n    if (isCalled) {\n      return cachedResult;\n    }\n\n    const result = callback(...args);\n\n    isCalled = true;\n    cachedResult = result;\n\n    return result;\n  };\n\n  return executeOnce as T;\n}\n"],"names":[],"mappings":";;AAgBO,SAAS,KAAwC,QAAA,EAAgB;AACtE,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,YAAA;AAEJ,EAAA,MAAM,WAAA,GAAc,IAAI,IAAA,KAAgB;AACtC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAG,IAAI,CAAA;AAE/B,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,YAAA,GAAe,MAAA;AAEf,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,WAAA;AACT;;;;"}