UNPKG

rollup-plugin-imagetools

Version:
1 lines 8.54 kB
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import { Plugin } from 'rollup'\nimport {\n applyTransforms,\n builtins,\n generateTransforms,\n loadImage,\n parseURL,\n resolveConfigs,\n builtinOutputFormats,\n urlFormat,\n extractEntries,\n Logger\n} from 'imagetools-core'\nimport { createFilter, dataToEsm } from '@rollup/pluginutils'\nimport { RollupPluginOptions } from './types'\nimport MagicString from 'magic-string'\nimport { basename, extname, resolve, dirname } from 'path'\n\nconst defaultOptions: RollupPluginOptions = {\n include: ['**/*.{heic,heif,avif,jpeg,jpg,png,tiff,webp,gif}', '**/*.{heic,heif,avif,jpeg,jpg,png,tiff,webp,gif}?*'],\n exclude: '',\n removeMetadata: true\n}\n\nexport * from 'imagetools-core'\n\nexport function imagetools(userOptions: Partial<RollupPluginOptions> = {}): Plugin {\n const pluginOptions: RollupPluginOptions = { ...defaultOptions, ...userOptions }\n\n const filter = createFilter(pluginOptions.include, pluginOptions.exclude)\n\n const transformFactories = pluginOptions.extendTransforms ? pluginOptions.extendTransforms(builtins) : builtins\n\n const outputFormats = pluginOptions.extendOutputFormats\n ? pluginOptions.extendOutputFormats(builtinOutputFormats)\n : builtinOutputFormats\n\n return {\n name: 'imagetools',\n resolveId(source, importer = '') {\n const id = resolve(dirname(importer), source)\n\n if (!filter(id)) return null\n return id\n },\n async load(id) {\n if (!filter(id)) return null\n\n const srcURL = parseURL(id)\n\n let directives = srcURL.searchParams\n\n if (typeof pluginOptions.defaultDirectives === 'function') {\n directives = new URLSearchParams([...pluginOptions.defaultDirectives(srcURL), ...srcURL.searchParams])\n } else if (pluginOptions.defaultDirectives) {\n directives = new URLSearchParams([...pluginOptions.defaultDirectives, ...srcURL.searchParams])\n }\n\n if (!directives.toString()) return null\n\n const parameters = extractEntries(directives)\n const imageConfigs =\n pluginOptions.resolveConfigs?.(parameters, outputFormats) ?? resolveConfigs(parameters, outputFormats)\n\n const img = loadImage(decodeURIComponent(srcURL.pathname))\n\n const outputMetadatas = []\n\n const logger: Logger = {\n info: (msg) => this.warn(msg), // We fall back to warn, so the messages can be silenced in Rollup's `onwarn`\n warn: (msg) => this.warn(msg),\n error: (msg) => this.error(msg)\n }\n\n for (const config of imageConfigs) {\n const { transforms } = generateTransforms(config, transformFactories, logger)\n\n const { image, metadata } = await applyTransforms(transforms, img, pluginOptions.removeMetadata)\n\n const fileName = basename(srcURL.pathname, extname(srcURL.pathname)) + `.${metadata.format}`\n\n const fileHandle = this.emitFile({\n name: fileName,\n source: await image.toBuffer(),\n type: 'asset'\n })\n\n metadata.src = `__ROLLUP_IMAGE_ASSET__${fileHandle}__`\n metadata.image = image\n\n outputMetadatas.push(metadata)\n }\n\n let outputFormat = urlFormat()\n\n for (const [key, format] of Object.entries(outputFormats)) {\n if (directives.has(key)) {\n const params = directives\n .get(key)\n ?.split(';')\n .filter((v) => !!v)\n outputFormat = format(params?.length ? params : undefined)\n break\n }\n }\n\n return dataToEsm(outputFormat(outputMetadatas))\n },\n renderChunk(code) {\n const assetUrlRE = /__ROLLUP_IMAGE_ASSET__([a-z\\d]{8})__(?:_(.*?)__)?/g\n\n let match\n let s\n while ((match = assetUrlRE.exec(code))) {\n s = s || (s = new MagicString(code))\n const [full, hash, postfix = ''] = match\n\n const file = this.getFileName(hash)\n\n const outputFilepath = file + postfix\n\n s.overwrite(match.index, match.index + full.length, outputFilepath)\n }\n\n if (s) {\n return {\n code: s.toString(),\n map: s.generateMap({ hires: true })\n }\n } else {\n return null\n }\n }\n }\n}\n"],"names":["createFilter","builtins","builtinOutputFormats","resolve","dirname","parseURL","extractEntries","resolveConfigs","loadImage","generateTransforms","applyTransforms","basename","extname","urlFormat","dataToEsm"],"mappings":"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"}