Socket
Socket
Sign inDemoInstall

@sveltejs/vite-plugin-svelte

Package Overview
Dependencies
Maintainers
4
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sveltejs/vite-plugin-svelte - npm Package Compare versions

Comparing version 2.4.6 to 3.0.0-next.0

14

package.json
{
"name": "@sveltejs/vite-plugin-svelte",
"version": "2.4.6",
"version": "3.0.0-next.0",
"license": "MIT",

@@ -19,3 +19,3 @@ "author": "dominikg",

"engines": {
"node": "^14.18.0 || >= 16"
"node": "^18.0.0 || >=20"
},

@@ -38,3 +38,2 @@ "repository": {

"dependencies": {
"@sveltejs/vite-plugin-svelte-inspector": "^1.0.4",
"debug": "^4.3.4",

@@ -45,7 +44,8 @@ "deepmerge": "^4.3.1",

"svelte-hmr": "^0.15.3",
"vitefu": "^0.2.4"
"vitefu": "^0.2.4",
"@sveltejs/vite-plugin-svelte-inspector": "^2.0.0-next.0"
},
"peerDependencies": {
"svelte": "^3.54.0 || ^4.0.0",
"vite": "^4.0.0"
"svelte": "^4.0.0",
"vite": "^5.0.0-beta.1 || ^5.0.0"
},

@@ -56,3 +56,3 @@ "devDependencies": {

"svelte": "^4.2.0",
"vite": "^4.4.9"
"vite": "^5.0.0-beta.1"
},

@@ -59,0 +59,0 @@ "scripts": {

@@ -17,3 +17,7 @@ import { log, logCompilerWarnings } from './utils/log.js';

// file hasn't been requested yet (e.g. async component)
log.debug(`handleHotUpdate called before initial transform for ${svelteRequest.id}`);
log.debug(
`handleHotUpdate called before initial transform for ${svelteRequest.id}`,
undefined,
'hmr'
);
return;

@@ -43,3 +47,3 @@ }

if (!cssUpdated) {
log.debug(`skipping unchanged css for ${svelteRequest.cssId}`);
log.debug(`skipping unchanged css for ${svelteRequest.cssId}`, undefined, 'hmr');
affectedModules.splice(cssIdx, 1);

@@ -52,3 +56,3 @@ }

if (!jsUpdated) {
log.debug(`skipping unchanged js for ${svelteRequest.id}`);
log.debug(`skipping unchanged js for ${svelteRequest.id}`, undefined, 'hmr');
affectedModules.splice(jsIdx, 1);

@@ -63,3 +67,7 @@ // transform won't be called, log warnings here

if (ssrModulesToInvalidate.length > 0) {
log.debug(`invalidating modules ${ssrModulesToInvalidate.map((m) => m.id).join(', ')}`);
log.debug(
`invalidating modules ${ssrModulesToInvalidate.map((m) => m.id).join(', ')}`,
undefined,
'hmr'
);
ssrModulesToInvalidate.forEach((moduleNode) => server.moduleGraph.invalidateModule(moduleNode));

@@ -71,3 +79,5 @@ }

.map((m) => m.id)
.join(', ')}`
.join(', ')}`,
undefined,
'hmr'
);

@@ -74,0 +84,0 @@ }

import fs from 'node:fs';
import { version as viteVersion } from 'vite';
import { svelteInspector } from '@sveltejs/vite-plugin-svelte-inspector';
import { isDepExcluded } from 'vitefu';
import { handleHotUpdate } from './handle-hot-update.js';

@@ -20,4 +18,2 @@ import { log, logCompilerWarnings } from './utils/log.js';

import { ensureWatchedFile, setupWatchers } from './utils/watch.js';
import { resolveViaPackageJsonSvelte } from './utils/resolve.js';
import { toRollupError } from './utils/error.js';

@@ -27,7 +23,3 @@ import { saveSvelteMetadata } from './utils/optimizer.js';

import { loadRaw } from './utils/load-raw.js';
import { FAQ_LINK_CONFLICTS_IN_SVELTE_RESOLVE } from './utils/constants.js';
import { isSvelte3 } from './utils/svelte-version.js';
const isVite4_0 = viteVersion.startsWith('4.0');
/** @type {import('./index.d.ts').svelte} */

@@ -47,11 +39,5 @@ export function svelte(inlineOptions) {

let viteConfig;
/** @type {import('./types/compile.d.ts').CompileSvelte} */
let compileSvelte;
/* eslint-enable no-unused-vars */
/** @type {Promise<import('vite').Rollup.PartialResolvedId | null>} */
let resolvedSvelteSSR;
/** @type {Set<string>} */
let packagesWithResolveWarnings;
/** @type {import('./types/plugin-api.d.ts').PluginAPI} */

@@ -77,3 +63,3 @@ const api = {};

const extraViteConfig = await buildExtraViteConfig(options, config);
log.debug('additional vite config', extraViteConfig);
log.debug('additional vite config', extraViteConfig, 'config');
return extraViteConfig;

@@ -90,7 +76,6 @@ },

api.options = options;
log.debug('resolved options', options);
log.debug('resolved options', options, 'config');
},
async buildStart() {
packagesWithResolveWarnings = new Set();
if (!options.prebundleSvelteLibraries) return;

@@ -116,3 +101,10 @@ const isSvelteMetadataChanged = await saveSvelteMetadata(viteConfig.cacheDir, options);

if (raw) {
return loadRaw(svelteRequest, compileSvelte, options);
const code = await loadRaw(svelteRequest, compileSvelte, options);
// prevent vite from injecting sourcemaps in the results.
return {
code,
map: {
mappings: ''
}
};
} else {

@@ -122,3 +114,2 @@ if (query.svelte && query.type === 'style') {

if (css) {
log.debug(`load returns css for ${filename}`);
return css;

@@ -129,3 +120,3 @@ }

if (viteConfig.assetsInclude(filename)) {
log.debug(`load returns raw content for ${filename}`);
log.debug(`load returns raw content for ${filename}`, undefined, 'load');
return fs.readFileSync(filename, 'utf-8');

@@ -144,76 +135,10 @@ }

// see https://github.com/sveltejs/vite-plugin-svelte/issues/14
log.debug(`resolveId resolved virtual css module ${svelteRequest.cssId}`);
log.debug(
`resolveId resolved virtual css module ${svelteRequest.cssId}`,
undefined,
'resolve'
);
return svelteRequest.cssId;
}
}
// TODO: remove this after bumping peerDep on Vite to 4.1+ or Svelte to 4.0+
if (isVite4_0 && isSvelte3 && ssr && importee === 'svelte') {
if (!resolvedSvelteSSR) {
resolvedSvelteSSR = this.resolve('svelte/ssr', undefined, { skipSelf: true }).then(
(svelteSSR) => {
log.debug('resolved svelte to svelte/ssr');
return svelteSSR;
},
(err) => {
log.debug(
'failed to resolve svelte to svelte/ssr. Update svelte to a version that exports it',
err
);
return null; // returning null here leads to svelte getting resolved regularly
}
);
}
return resolvedSvelteSSR;
}
//@ts-expect-error scan
const scan = !!opts?.scan; // scanner phase of optimizeDeps
const isPrebundled =
options.prebundleSvelteLibraries &&
viteConfig.optimizeDeps?.disabled !== true &&
viteConfig.optimizeDeps?.disabled !== (options.isBuild ? 'build' : 'dev') &&
!isDepExcluded(importee, viteConfig.optimizeDeps?.exclude ?? []);
// for prebundled libraries we let vite resolve the prebundling result
// for ssr, during scanning and non-prebundled, we do it
if (ssr || scan || !isPrebundled) {
try {
const isFirstResolve = !cache.hasResolvedSvelteField(importee, importer);
const resolved = await resolveViaPackageJsonSvelte(importee, importer, cache);
if (isFirstResolve && resolved) {
const packageInfo = await cache.getPackageInfo(resolved);
const packageVersion = `${packageInfo.name}@${packageInfo.version}`;
log.debug.once(
`resolveId resolved ${importee} to ${resolved} via package.json svelte field of ${packageVersion}`
);
try {
const viteResolved = (
await this.resolve(importee, importer, { ...opts, skipSelf: true })
)?.id;
if (resolved !== viteResolved) {
packagesWithResolveWarnings.add(packageVersion);
log.debug.enabled &&
log.debug.once(
`resolve difference for ${packageVersion} ${importee} - svelte: "${resolved}", vite: "${viteResolved}"`
);
}
} catch (e) {
packagesWithResolveWarnings.add(packageVersion);
log.debug.enabled &&
log.debug.once(
`resolve error for ${packageVersion} ${importee} - svelte: "${resolved}", vite: ERROR`,
e
);
}
}
return resolved;
} catch (e) {
log.debug.once(
`error trying to resolve ${importee} from ${importer} via package.json svelte field `,
e
);
// this error most likely happens due to non-svelte related importee/importers so swallow it here
// in case it really way a svelte library, users will notice anyway. (lib not working due to failed resolve)
}
}
},

@@ -247,3 +172,2 @@

}
log.debug(`transform returns compiled js for ${svelteRequest.filename}`);
return {

@@ -270,12 +194,2 @@ ...compileData.compiled.js,

await options.stats?.finishAll();
if (
!options.experimental?.disableSvelteResolveWarnings &&
packagesWithResolveWarnings?.size > 0
) {
log.warn(
`WARNING: The following packages use a svelte resolve configuration in package.json that has conflicting results and is going to cause problems future.\n\n${[
...packagesWithResolveWarnings
].join('\n')}\n\nPlease see ${FAQ_LINK_CONFLICTS_IN_SVELTE_RESOLVE} for details.`
);
}
}

@@ -282,0 +196,0 @@ },

@@ -12,4 +12,2 @@ import { compile, preprocess, walk } from 'svelte/compiler';

import { isSvelte3 } from './svelte-version.js';
/**

@@ -59,9 +57,5 @@ * @param {Function} [makeHot]

};
if (isSvelte3) {
// @ts-ignore
compileOptions.format = 'esm';
}
if (options.hot && options.emitCss) {
const hash = `s-${safeBase64Hash(normalizedFilename)}`;
log.debug(`setting cssHash ${hash} for ${normalizedFilename}`);
compileOptions.cssHash = () => hash;

@@ -117,3 +111,5 @@ }

log.debug(
`dynamic compile options for ${filename}: ${JSON.stringify(dynamicCompileOptions)}`
`dynamic compile options for ${filename}: ${JSON.stringify(dynamicCompileOptions)}`,
undefined,
'compile'
);

@@ -131,11 +127,2 @@ }

if (isSvelte3) {
// prevent dangling pure comments
// see https://github.com/sveltejs/kit/issues/9492#issuecomment-1487704985
// uses regex replace with whitespace to keep sourcemap/character count unmodified
compiled.js.code = compiled.js.code.replace(
/\/\* [@#]__PURE__ \*\/(\s*)$/gm,
' $1'
);
}
if (endStat) {

@@ -142,0 +129,0 @@ endStat();

@@ -1,3 +0,1 @@

import { isSvelte3 } from './svelte-version.js';
export const VITE_RESOLVE_MAIN_FIELDS = ['module', 'jsnext:main', 'jsnext'];

@@ -11,2 +9,3 @@

'svelte/internal',
'svelte/internal/disclose-version',
'svelte/motion',

@@ -18,6 +17,2 @@ 'svelte/ssr',

];
// TODO add to global list after dropping svelte 3
if (!isSvelte3) {
SVELTE_IMPORTS.push('svelte/internal/disclose-version');
}

@@ -32,3 +27,3 @@ export const SVELTE_HMR_IMPORTS = [

export const FAQ_LINK_CONFLICTS_IN_SVELTE_RESOLVE =
'https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/faq.md#conflicts-in-svelte-resolve';
export const FAQ_LINK_MISSING_EXPORTS_CONDITION =
'https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/faq.md#missing-exports-condition';

@@ -5,3 +5,2 @@ import { readFileSync } from 'node:fs';

import { toESBuildError } from './error.js';
import { isSvelte3 } from './svelte-version.js';

@@ -71,6 +70,3 @@ /**

};
if (isSvelte3) {
// @ts-ignore
compileOptions.format = 'esm';
}
let preprocessed;

@@ -77,0 +73,0 @@

@@ -67,3 +67,3 @@ import fs from 'node:fs';

}
log.debug(`load returns direct result for ${id}`);
log.debug(`load returns direct result for ${id}`, undefined, 'load');
let directOutput = result.code;

@@ -80,3 +80,3 @@ if (query.sourcemap && result.map?.toUrl) {

} else if (query.raw) {
log.debug(`load returns raw result for ${id}`);
log.debug(`load returns raw result for ${id}`, undefined, 'load');
return toRawExports(result);

@@ -83,0 +83,0 @@ } else {

@@ -107,3 +107,3 @@ import { createRequire } from 'node:module';

if (existingKnownConfigFiles.length === 0) {
log.debug(`no svelte config found at ${root}`);
log.debug(`no svelte config found at ${root}`, undefined, 'config');
return;

@@ -110,0 +110,0 @@ } else if (existingKnownConfigFiles.length > 1) {

@@ -11,3 +11,3 @@ /* eslint-disable no-console */

debug: {
log: debug(`vite:${prefix}`),
log: debug(`${prefix}`),
enabled: false,

@@ -69,3 +69,9 @@ isDebug: true

if (logger.isDebug) {
const log = namespace ? logger.log.extend(namespace) : logger.log;
let log = logger.log;
if (namespace) {
if (!isDebugNamespaceEnabled(namespace)) {
return;
}
log = logger.log.extend(namespace);
}
payload !== undefined ? log(message, payload) : log(message);

@@ -256,3 +262,3 @@ } else {

export function isDebugNamespaceEnabled(namespace) {
return debug.enabled(`vite:${prefix}:${namespace}`);
return debug.enabled(`${prefix}:${namespace}`);
}

@@ -6,2 +6,3 @@ /* eslint-disable no-unused-vars */

import {
FAQ_LINK_MISSING_EXPORTS_CONDITION,
SVELTE_EXPORT_CONDITIONS,

@@ -432,3 +433,3 @@ SVELTE_HMR_IMPORTS,

) {
log.debug('enabling "experimental.hmrPartialAccept" in vite config');
log.debug('enabling "experimental.hmrPartialAccept" in vite config', undefined, 'config');
extraViteConfig.experimental = { hmrPartialAccept: true };

@@ -486,2 +487,3 @@ }

// extra handling for svelte dependencies in the project
const packagesWithoutSvelteExportsCondition = new Set();
const depsConfig = await crawlFrameworkPkgs({

@@ -502,3 +504,7 @@ root: options.root,

}
return hasSvelteCondition || !!pkgJson.svelte;
const hasSvelteField = !!pkgJson.svelte;
if (hasSvelteField && !hasSvelteCondition) {
packagesWithoutSvelteExportsCondition.add(`${pkgJson.name}@${pkgJson.version}`);
}
return hasSvelteCondition || hasSvelteField;
},

@@ -517,5 +523,14 @@ isSemiFrameworkPkgByJson(pkgJson) {

});
if (
!options.experimental?.disableSvelteResolveWarnings &&
packagesWithoutSvelteExportsCondition?.size > 0
) {
log.warn(
`WARNING: The following packages have a svelte field in their package.json but no exports condition for svelte.\n\n${[
...packagesWithoutSvelteExportsCondition
].join('\n')}\n\nPlease see ${FAQ_LINK_MISSING_EXPORTS_CONDITION} for details.`
);
}
log.debug('extra config for dependencies generated by vitefu', depsConfig, 'config');
log.debug('extra config for dependencies generated by vitefu', depsConfig);
if (options.prebundleSvelteLibraries) {

@@ -553,3 +568,3 @@ // prebundling enabled, so we don't need extra dependency excludes

log.debug('post-processed extra config for dependencies', depsConfig);
log.debug('post-processed extra config for dependencies', depsConfig, 'config');

@@ -571,7 +586,13 @@ return depsConfig;

log.debug(
`adding bare svelte packages to optimizeDeps.include: ${svelteImportsToInclude.join(', ')} `
`adding bare svelte packages to optimizeDeps.include: ${svelteImportsToInclude.join(', ')} `,
undefined,
'config'
);
include.push(...svelteImportsToInclude);
} else {
log.debug('"svelte" is excluded in optimizeDeps.exclude, skipped adding it to include.');
log.debug(
'"svelte" is excluded in optimizeDeps.exclude, skipped adding it to include.',
undefined,
'config'
);
}

@@ -578,0 +599,0 @@ /** @type {(string | RegExp)[]} */

@@ -87,3 +87,5 @@ import MagicString from 'magic-string';

.map((p) => p.name)
.join(', ')}`
.join(', ')}`,
undefined,
'preprocess'
);

@@ -95,3 +97,5 @@ }

.map((p) => p.name)
.join(', ')}`
.join(', ')}`,
undefined,
'preprocess'
);

@@ -98,0 +102,0 @@ appendPreprocessors.push(...pluginsWithPreprocessors.map((p) => p.api.sveltePreprocess));

@@ -27,4 +27,2 @@ import { readFileSync } from 'node:fs';

#dependants = new Map();
/** @type {Map<string, string>} */
#resolvedSvelteFields = new Map();
/** @type {Map<string, any>} */

@@ -173,41 +171,2 @@ #errors = new Map();

/**
* @param {string} name
* @param {string} [importer]
* @returns {string|void}
*/
getResolvedSvelteField(name, importer) {
return this.#resolvedSvelteFields.get(this.#getResolvedSvelteFieldKey(name, importer));
}
/**
* @param {string} name
* @param {string} [importer]
* @returns {boolean}
*/
hasResolvedSvelteField(name, importer) {
return this.#resolvedSvelteFields.has(this.#getResolvedSvelteFieldKey(name, importer));
}
/**
*
* @param {string} importee
* @param {string | undefined} importer
* @param {string} resolvedSvelte
*/
setResolvedSvelteField(importee, importer, resolvedSvelte) {
this.#resolvedSvelteFields.set(
this.#getResolvedSvelteFieldKey(importee, importer),
resolvedSvelte
);
}
/**
* @param {string} importee
* @param {string | undefined} importer
* @returns {string}
*/
#getResolvedSvelteFieldKey(importee, importer) {
return importer ? `${importer} > ${importee}` : importee;
}
/**
* @param {string} file

@@ -214,0 +173,0 @@ * @returns {Promise<PackageInfo>}

@@ -25,3 +25,5 @@ import fs from 'node:fs';

log.debug(
`emitting virtual change event for "${dependant}" because depdendency "${filename}" changed`
`emitting virtual change event for "${dependant}" because depdendency "${filename}" changed`,
undefined,
'hmr'
);

@@ -38,3 +40,3 @@ watcher.emit('change', dependant);

if (removedFromCache) {
log.debug(`cleared VitePluginSvelteCache for deleted file ${filename}`);
log.debug(`cleared VitePluginSvelteCache for deleted file ${filename}`, undefined, 'hmr');
}

@@ -41,0 +43,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc