UNPKG

@modern-kit/utils

Version:
1 lines 1.58 kB
{"version":3,"file":"index.mjs","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;;;;"}