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 2.5.0

4

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

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

"peerDependencies": {
"svelte": "^3.54.0 || ^4.0.0",
"svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0",
"vite": "^4.0.0"

@@ -49,0 +49,0 @@ },

@@ -173,4 +173,14 @@ import type { InlineConfig, ResolvedConfig, UserConfig, Plugin } from 'vite';

disableSvelteResolveWarnings?: boolean;
/**
* Options for compiling Svelte JS/TS modules
*/
compileModule?: CompileModuleOptions;
}
interface CompileModuleOptions {
extensions?: string[];
include?: Arrayable<string>;
exclude?: Arrayable<string>;
}
type ModuleFormat = NonNullable<'esm'>;

@@ -177,0 +187,0 @@ type CssHashGetter = NonNullable<CompileOptions['cssHash']>;

import fs from 'node:fs';
import { version as viteVersion } from 'vite';
import * as svelteCompiler from 'svelte/compiler';

@@ -10,3 +11,3 @@ import { svelteInspector } from '@sveltejs/vite-plugin-svelte-inspector';

import { createCompileSvelte } from './utils/compile.js';
import { buildIdParser } from './utils/id.js';
import { buildIdParser, buildModuleIdParser } from './utils/id.js';
import {

@@ -28,3 +29,3 @@ buildExtraViteConfig,

import { FAQ_LINK_CONFLICTS_IN_SVELTE_RESOLVE } from './utils/constants.js';
import { isSvelte3 } from './utils/svelte-version.js';
import { isSvelte3, isSvelte5 } from './utils/svelte-version.js';

@@ -43,2 +44,4 @@ const isVite4_0 = viteVersion.startsWith('4.0');

let requestParser;
/** @type {import('./types/id.d.ts').ModuleIdParser} */
let moduleRequestParser;
/** @type {import('./types/options.d.ts').ResolvedOptions} */

@@ -274,5 +277,41 @@ let options;

}
},
svelteInspector()
}
];
if (!isSvelte5) {
plugins.push(svelteInspector()); // TODO reenable once svelte5 has support
}
if (isSvelte5) {
log.warn(
'svelte 5 support in v-p-s is experimental, breaking changes can occur in any release until this notice is removed'
);
log.warn('svelte 5 does not support svelte-inspector yet, disabling it');
// TODO move to separate file
plugins.push({
name: 'vite-plugin-svelte-module',
enforce: 'post',
async configResolved() {
moduleRequestParser = buildModuleIdParser(options);
},
async transform(code, id, opts) {
const ssr = !!opts?.ssr;
const moduleRequest = moduleRequestParser(id, ssr);
if (!moduleRequest) {
return;
}
try {
// @ts-ignore doesn't exist in Svelte 4
const compileResult = await svelteCompiler.compileModule(code, {
generate: ssr ? 'ssr' : 'dom',
filename: moduleRequest.filename
});
logCompilerWarnings(moduleRequest, compileResult.warnings, options);
return compileResult.js;
} catch (e) {
throw toRollupError(e, options);
}
}
});
}
return plugins;

@@ -279,0 +318,0 @@ }

@@ -31,2 +31,17 @@ import type { CompileOptions } from 'svelte/types/compiler/interfaces';

export interface SvelteModuleRequest {
id: string;
filename: string;
normalizedFilename: string;
query: RequestQuery;
timestamp: number;
ssr: boolean;
}
export type IdParser = (id: string, ssr: boolean, timestamp?: number) => SvelteRequest | undefined;
export type ModuleIdParser = (
id: string,
ssr: boolean,
timestamp?: number
) => SvelteModuleRequest | undefined;

@@ -1,2 +0,2 @@

import { compile, preprocess, walk } from 'svelte/compiler';
import * as svelte from 'svelte/compiler';
// @ts-ignore

@@ -89,3 +89,3 @@ import { createMakeHot } from 'svelte-hmr';

try {
preprocessed = await preprocess(code, preprocessors, { filename }); // full filename here so postcss works
preprocessed = await svelte.preprocess(code, preprocessors, { filename }); // full filename here so postcss works
} catch (e) {

@@ -127,3 +127,3 @@ e.message = `Error while preprocessing ${filename}${e.message ? ` - ${e.message}` : ''}`;

const endStat = stats?.start(filename);
const compiled = compile(finalCode, finalCompileOptions);
const compiled = svelte.compile(finalCode, finalCompileOptions);

@@ -192,3 +192,4 @@ if (isSvelte3) {

return createMakeHot({
walk,
// TODO Svelte 5 doesn't expose walk anymore. If we decide to make v-p-s 2 work with Svelte 5 HMR, we need to import walk from estree-walker
walk: svelte.walk,
hotApi,

@@ -195,0 +196,0 @@ adapter,

import { readFileSync } from 'node:fs';
import { compile, preprocess } from 'svelte/compiler';
import * as svelte from 'svelte/compiler';
import { log } from './log.js';
import { toESBuildError } from './error.js';
import { isSvelte3 } from './svelte-version.js';
import { isSvelte3, isSvelte5 } from './svelte-version.js';

@@ -14,2 +14,4 @@ /**

const svelteModuleExtension = '.svelte.js';
/**

@@ -28,2 +30,5 @@ * @param {import('../types/options.d.ts').ResolvedOptions} options

const svelteExtensions = (options.extensions ?? ['.svelte']).map((ext) => ext.slice(1));
if (isSvelte5) {
svelteExtensions.push(svelteModuleExtension.slice(1));
}
const svelteFilter = new RegExp('\\.(' + svelteExtensions.join('|') + ')(\\?.*)?$');

@@ -60,2 +65,18 @@ /** @type {import('../types/vite-plugin-svelte-stats.d.ts').StatCollection | undefined} */

async function compileSvelte(options, { filename, code }, statsCollection) {
if (isSvelte5 && filename.endsWith(svelteModuleExtension)) {
const endStat = statsCollection?.start(filename);
// @ts-ignore doesn't exist in Svelte 4
const compiled = svelte.compileModule(code, {
filename,
generate: 'dom',
runes: true
});
if (endStat) {
endStat();
}
return compiled.js.map
? compiled.js.code + '//# sourceMappingURL=' + compiled.js.map.toUrl()
: compiled.js.code;
}
let css = options.compilerOptions.css;

@@ -81,3 +102,3 @@ if (css !== 'none') {

try {
preprocessed = await preprocess(code, options.preprocess, { filename });
preprocessed = await svelte.preprocess(code, options.preprocess, { filename });
} catch (e) {

@@ -109,3 +130,3 @@ e.message = `Error while preprocessing ${filename}${e.message ? ` - ${e.message}` : ''}`;

const endStat = statsCollection?.start(filename);
const compiled = compile(finalCode, finalCompileOptions);
const compiled = svelte.compile(finalCode, finalCompileOptions);
if (endStat) {

@@ -112,0 +133,0 @@ endStat();

@@ -187,1 +187,46 @@ import { createFilter, normalizePath } from 'vite';

}
/**
* @param {import('../types/options.d.ts').ResolvedOptions} options
* @returns {import('../types/id.d.ts').ModuleIdParser}
*/
export function buildModuleIdParser(options) {
const { include, exclude, extensions } = options?.experimental?.compileModule ?? {};
const root = options.root;
const normalizedRoot = normalizePath(root);
const filter = buildFilter(include, exclude, extensions ?? ['.svelte.js', '.svelte.ts']);
return (id, ssr, timestamp = Date.now()) => {
const { filename, rawQuery } = splitId(id);
if (filter(filename)) {
return parseToSvelteModuleRequest(id, filename, rawQuery, normalizedRoot, timestamp, ssr);
}
};
}
/**
* @param {string} id
* @param {string} filename
* @param {string} rawQuery
* @param {string} root
* @param {number} timestamp
* @param {boolean} ssr
* @returns {import('../types/id.d.ts').SvelteModuleRequest | undefined}
*/
function parseToSvelteModuleRequest(id, filename, rawQuery, root, timestamp, ssr) {
const query = parseRequestQuery(rawQuery);
if (query.url || query.raw || query.direct) {
// skip requests with special vite tags
return;
}
const normalizedFilename = normalize(filename, root);
return {
id,
filename,
normalizedFilename,
query,
timestamp,
ssr
};
}

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

/**
* @param {import('../types/id.d.ts').SvelteRequest} svelteRequest
* @param {import('../types/id.d.ts').SvelteRequest | import('../types/id.d.ts').SvelteModuleRequest} svelteRequest
* @param {import('svelte/types/compiler/interfaces').Warning[]} warnings

@@ -126,0 +126,0 @@ * @param {import('../types/options.d.ts').ResolvedOptions} options

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

import { VitePluginSvelteCache } from './vite-plugin-svelte-cache.js';
import { isSvelte5 } from './svelte-version.js';

@@ -231,2 +232,6 @@ const allowedPluginOptions = new Set([

function enforceOptionsForHmr(options) {
if (isSvelte5) {
log.warn('svelte 5 does not support hmr api yet, disabling it for now');
options.hot = false;
}
if (options.hot) {

@@ -233,0 +238,0 @@ if (!options.compilerOptions.dev) {

@@ -7,1 +7,6 @@ import { VERSION } from 'svelte/compiler';

export const isSvelte3 = VERSION.startsWith('3.');
/**
* @type {boolean}
*/
export const isSvelte5 = VERSION.startsWith('5.');
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