{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { pipeline } from 'stream';\nimport fs, { ReadStream } from 'fs';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport * as utils from '@strapi/utils';\n\n// Needed to load global.strapi without having to put @strapi/types in the regular dependencies\nimport type {} from '@strapi/types';\n\ninterface File {\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: Record;\n hash: string;\n ext?: string;\n mime: string;\n size: number;\n sizeInBytes: number;\n url: string;\n previewUrl?: string;\n path?: string;\n provider?: string;\n provider_metadata?: Record;\n stream?: ReadStream;\n buffer?: Buffer;\n}\n\nconst { PayloadTooLargeError } = utils.errors;\nconst { kbytesToBytes, bytesToHumanReadable } = utils.file;\n\nconst UPLOADS_FOLDER_NAME = 'uploads';\n\ninterface InitOptions {\n sizeLimit?: number;\n}\n\ninterface CheckFileSizeOptions {\n sizeLimit?: number;\n}\n\nexport default {\n init({ sizeLimit: providerOptionsSizeLimit }: InitOptions = {}) {\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n process.emitWarning(\n '[deprecated] In future versions, \"sizeLimit\" argument will be ignored from upload.config.providerOptions. Move it to upload.config'\n );\n }\n\n // Ensure uploads folder exists\n const uploadPath = path.resolve(strapi.dirs.static.public, UPLOADS_FOLDER_NAME);\n if (!fse.pathExistsSync(uploadPath)) {\n throw new Error(\n `The upload folder (${uploadPath}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n\n return {\n checkFileSize(file: File, options: CheckFileSizeOptions) {\n const { sizeLimit } = options ?? {};\n\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n if (kbytesToBytes(file.size) > providerOptionsSizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(\n providerOptionsSizeLimit\n )}.`\n );\n } else if (sizeLimit) {\n if (kbytesToBytes(file.size) > sizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n uploadStream(file: File): Promise {\n if (!file.stream) {\n return Promise.reject(new Error('Missing file stream'));\n }\n\n const { stream } = file;\n\n return new Promise((resolve, reject) => {\n pipeline(\n stream,\n fs.createWriteStream(path.join(uploadPath, `${file.hash}${file.ext}`)),\n (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n }\n );\n });\n },\n upload(file: File): Promise {\n if (!file.buffer) {\n return Promise.reject(new Error('Missing file buffer'));\n }\n\n const { buffer } = file;\n\n return new Promise((resolve, reject) => {\n // write file in public/assets folder\n fs.writeFile(path.join(uploadPath, `${file.hash}${file.ext}`), buffer, (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n });\n });\n },\n delete(file: File): Promise {\n return new Promise((resolve, reject) => {\n const filePath = path.join(uploadPath, `${file.hash}${file.ext}`);\n\n if (!fs.existsSync(filePath)) {\n resolve(\"File doesn't exist\");\n return;\n }\n\n // remove file from public/assets folder\n fs.unlink(filePath, (err) => {\n if (err) {\n return reject(err);\n }\n\n resolve();\n });\n });\n },\n };\n },\n};\n"],"names":["PayloadTooLargeError","utils","errors","kbytesToBytes","bytesToHumanReadable","file","UPLOADS_FOLDER_NAME","init","sizeLimit","providerOptionsSizeLimit","process","emitWarning","uploadPath","path","resolve","strapi","dirs","static","public","fse","pathExistsSync","Error","checkFileSize","options","size","name","uploadStream","stream","Promise","reject","pipeline","fs","createWriteStream","join","hash","ext","err","url","upload","buffer","writeFile","delete","filePath","existsSync","unlink"],"mappings":"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"}