Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/bumpy-paws-unite.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/enhanced-img': minor
---

feat: Allow configuring cache directory
24 changes: 21 additions & 3 deletions packages/enhanced-img/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@ import { imagetools } from 'vite-imagetools';
import { image_plugin } from './vite-plugin.js';

/**
* @typedef {{cache?: CacheOptions}} EnhancedImageOptions
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these should use the types exported by vite-imagetools so that we don't have to update here if they add new options

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right - I've originally opted for a custom interface following the discussion in the linked issue. But looking at it now, using vite-imagetools's types makes more sense. I'll update the PR accordingly.

* @typedef {{enabled?: boolean, directory?: string, retention?: number}} CacheOptions
*/

/**
* @param { EnhancedImageOptions } opts
* @returns {import('vite').Plugin[]}
*/
export function enhancedImages() {
const imagetools_instance = imagetools_plugin();
export function enhancedImages(opts = {}) {
const imagetools_instance = imagetools_plugin(opts);
return !process.versions.webcontainer
? [image_plugin(imagetools_instance), imagetools_instance]
: [];
Expand All @@ -25,7 +31,11 @@ const fallback = {
'.webp': 'png'
};

function imagetools_plugin() {
/**
* @param { EnhancedImageOptions } opts
* @returns {import('vite').Plugin}
*/
function imagetools_plugin(opts = {}) {
/** @type {Partial<import('vite-imagetools').VitePluginOptions>} */
const imagetools_opts = {
defaultDirectives: async ({ pathname, searchParams: qs }, metadata) => {
Expand All @@ -49,6 +59,14 @@ function imagetools_plugin() {
namedExports: false
};

if (opts.cache) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a reason to not pass the opts to imagetools directly?

imagetools_opts.cache = {
enabled: opts.cache.enabled,
dir: opts.cache.directory,
retention: opts.cache.retention
};
}

// TODO: should we make formats or sizes configurable besides just letting people override defaultDirectives?
// TODO: generate img rather than picture if only a single format is provided
// by resolving the directives for the URL in the preprocessor
Expand Down
Loading