Skip to content
Closed
Show file tree
Hide file tree
Changes from 4 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: make the cache directory configurable
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
Contributor

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
Contributor

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