@modern-kit/utils
Version:
1 lines • 4.51 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../src/clipboard/copyClipboardImage/copyClipboardImage.utils.ts","../../../src/clipboard/copyClipboardImage/index.ts"],"sourcesContent":["import { copyClipboardText } from '../copyClipboardText';\n\n/**\n * @description 클립보드에 이미지를 복사하는 폴백 함수입니다.\n * `navigator.clipboard` API가 지원되지 않는 환경에서 사용되며, 이미지를 텍스트 형식으로 클립보드에 복사합니다.\n *\n * @param {string} src - 클립보드에 복사할 이미지의 소스 URL입니다.\n * @returns {Promise<string>} 이미지의 텍스트 데이터를 복사한 후 해당 텍스트를 반환합니다.\n * @throws {Error} 이미지를 가져오거나 텍스트로 복사하는 도중 에러가 발생할 경우 예외를 던집니다.\n *\n * @example\n * const copiedText = await copyFallbackImage('https://example.com/image.png');\n * console.log(`Copied image: ${copiedText}`);\n */\nexport const copyFallbackImage = async (src: string): Promise<string> => {\n const response = await fetch(src);\n const textData = await response.text();\n\n return copyClipboardText(textData);\n};\n","import { convertImageToBlob } from '../../file';\nimport { isClient } from '../../device';\nimport { copyFallbackImage } from './copyClipboardImage.utils';\n\n/**\n * @description 클립보드에 이미지를 복사하는 함수입니다.\n * 클라이언트 환경에서만 실행 가능하며, `navigator.clipboard` API와 `ClipboardItem`을 지원하는 경우 해당 API를 사용합니다.\n * 지원되지 않는 환경에서는 폴백으로 `copyFallbackImage`를 사용합니다.\n *\n * @param {string} src - 클립보드에 복사할 이미지의 소스 URL입니다.\n * @param {Object} options - 이미지 복사 옵션입니다.\n * @param {boolean} [options.toText=false] - 이미지를 텍스트로 복사할지 여부를 결정하는 옵션입니다. true인 경우 폴백 메서드가 호출됩니다.\n * @returns {Promise<Blob | string>} 복사된 Blob 데이터나 텍스트를 반환합니다.\n * @throws {Error} 클라이언트 환경이 아닌 경우 에러를 발생시킵니다.\n * @throws {Error} 클립보드에 이미지를 복사하는 도중 에러가 발생할 경우 예외를 던집니다.\n *\n * @example\n * const imageBlob = await copyClipboardImage('https://example.com/image.png');\n * console.log(`Copied image: ${imageBlob}`);\n */\nexport async function copyClipboardImage(\n src: string,\n options?: { toText: boolean }\n): Promise<Blob | string> {\n if (!isClient()) {\n throw new Error('Cannot be executed unless it is a client environment.');\n }\n\n try {\n const hasNavigatorClipboard = 'clipboard' in window.navigator;\n\n if (!hasNavigatorClipboard) {\n return copyFallbackImage(src);\n }\n\n const hasNavigatorClipboardWrite = 'write' in window.navigator.clipboard;\n\n if (!hasNavigatorClipboardWrite) {\n return copyFallbackImage(src);\n }\n\n const toText = options?.toText ?? false;\n\n if (toText) {\n return copyFallbackImage(src);\n }\n\n const blobData = await convertImageToBlob(src, 'png');\n\n await navigator.clipboard.write([\n new ClipboardItem({ [blobData.type]: blobData }),\n ]);\n\n return blobData;\n } catch (err: any) {\n console.error(`Failed to copy to clipboard. message: ${err.message}`);\n throw err;\n }\n}\n"],"names":[],"mappings":";;;;;;AAcO,MAAM,iBAAA,GAAoB,OAAO,GAAA,KAAiC;AACvE,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AAErC,EAAA,OAAO,kBAAkB,QAAQ,CAAA;AACnC,CAAA;;ACCA,eAAsB,kBAAA,CACpB,KACA,OAAA,EACwB;AACxB,EAAA,IAAI,CAAC,UAAS,EAAG;AACf,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,qBAAA,GAAwB,eAAe,MAAA,CAAO,SAAA;AAEpD,IAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,MAAA,OAAO,kBAAkB,GAAG,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,0BAAA,GAA6B,OAAA,IAAW,MAAA,CAAO,SAAA,CAAU,SAAA;AAE/D,IAAA,IAAI,CAAC,0BAAA,EAA4B;AAC/B,MAAA,OAAO,kBAAkB,GAAG,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,KAAA;AAElC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,kBAAkB,GAAG,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,kBAAA,CAAmB,GAAA,EAAK,KAAK,CAAA;AAEpD,IAAA,MAAM,SAAA,CAAU,UAAU,KAAA,CAAM;AAAA,MAC9B,IAAI,cAAc,EAAE,CAAC,SAAS,IAAI,GAAG,UAAU;AAAA,KAChD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,GAAA,EAAU;AACjB,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,sCAAA,EAAyC,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AACpE,IAAA,MAAM,GAAA;AAAA,EACR;AACF;;;;"}