fix: maybe

This commit is contained in:
2023-11-17 13:22:28 +00:00
parent b625ccd8d6
commit 999b1ae6fc
772 changed files with 3923 additions and 30947 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@sveltejs/vite-plugin-svelte",
"version": "2.5.2",
"version": "2.4.6",
"license": "MIT",
"author": "dominikg",
"files": [
@ -43,7 +43,7 @@
"vitefu": "^0.2.4"
},
"peerDependencies": {
"svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0",
"svelte": "^3.54.0 || ^4.0.0",
"vite": "^4.0.0"
},
"devDependencies": {

View File

@ -170,16 +170,6 @@ interface ExperimentalOptions {
* @default false
*/
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'>;

View File

@ -1,6 +1,5 @@
import fs from 'node:fs';
import { version as viteVersion } from 'vite';
import * as svelteCompiler from 'svelte/compiler';
import { svelteInspector } from '@sveltejs/vite-plugin-svelte-inspector';
@ -8,7 +7,7 @@ import { isDepExcluded } from 'vitefu';
import { handleHotUpdate } from './handle-hot-update.js';
import { log, logCompilerWarnings } from './utils/log.js';
import { createCompileSvelte } from './utils/compile.js';
import { buildIdParser, buildModuleIdParser } from './utils/id.js';
import { buildIdParser } from './utils/id.js';
import {
buildExtraViteConfig,
validateInlineOptions,
@ -25,7 +24,7 @@ import { saveSvelteMetadata } from './utils/optimizer.js';
import { VitePluginSvelteCache } from './utils/vite-plugin-svelte-cache.js';
import { loadRaw } from './utils/load-raw.js';
import { FAQ_LINK_CONFLICTS_IN_SVELTE_RESOLVE } from './utils/constants.js';
import { isSvelte3, isSvelte5 } from './utils/svelte-version.js';
import { isSvelte3 } from './utils/svelte-version.js';
const isVite4_0 = viteVersion.startsWith('4.0');
@ -39,8 +38,6 @@ export function svelte(inlineOptions) {
// updated in configResolved hook
/** @type {import('./types/id.d.ts').IdParser} */
let requestParser;
/** @type {import('./types/id.d.ts').ModuleIdParser} */
let moduleRequestParser;
/** @type {import('./types/options.d.ts').ResolvedOptions} */
let options;
/** @type {import('vite').ResolvedConfig} */
@ -271,45 +268,9 @@ export function svelte(inlineOptions) {
);
}
}
}
},
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 ? 'server' : 'client',
filename: moduleRequest.filename
});
logCompilerWarnings(moduleRequest, compileResult.warnings, options);
return compileResult.js;
} catch (e) {
throw toRollupError(e, options);
}
}
});
}
return plugins;
}

View File

@ -28,19 +28,4 @@ export interface SvelteRequest {
raw: boolean;
}
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;

View File

@ -1,4 +1,4 @@
import * as svelte from 'svelte/compiler';
import { compile, preprocess, walk } from 'svelte/compiler';
// @ts-ignore
import { createMakeHot } from 'svelte-hmr';
import { safeBase64Hash } from './hash.js';
@ -9,7 +9,7 @@ import { mapToRelative } from './sourcemaps.js';
const scriptLangRE = /<script [^>]*lang=["']?([^"' >]+)["']?[^>]*>/;
import { isSvelte3, isSvelte5 } from './svelte-version.js';
import { isSvelte3 } from './svelte-version.js';
/**
* @param {Function} [makeHot]
@ -53,8 +53,7 @@ export const _createCompileSvelte = (makeHot) => {
const compileOptions = {
...options.compilerOptions,
filename,
// @ts-expect-error generate type is different for svelte5
generate: isSvelte5 ? (ssr ? 'server' : 'client') : ssr ? 'ssr' : 'dom'
generate: ssr ? 'ssr' : 'dom'
};
if (isSvelte3) {
// @ts-ignore
@ -87,7 +86,7 @@ export const _createCompileSvelte = (makeHot) => {
}
if (preprocessors) {
try {
preprocessed = await svelte.preprocess(code, preprocessors, { filename }); // full filename here so postcss works
preprocessed = await preprocess(code, preprocessors, { filename }); // full filename here so postcss works
} catch (e) {
e.message = `Error while preprocessing ${filename}${e.message ? ` - ${e.message}` : ''}`;
throw e;
@ -124,7 +123,7 @@ export const _createCompileSvelte = (makeHot) => {
: compileOptions;
const endStat = stats?.start(filename);
const compiled = svelte.compile(finalCode, finalCompileOptions);
const compiled = compile(finalCode, finalCompileOptions);
if (isSvelte3) {
// prevent dangling pure comments
@ -188,8 +187,7 @@ function buildMakeHot(options) {
// @ts-ignore
const adapter = options?.hot?.adapter;
return createMakeHot({
// 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,
walk,
hotApi,
adapter,
hotOptions: { noOverlay: true, .../** @type {object} */ (options.hot) }

View File

@ -1,8 +1,8 @@
import { readFileSync } from 'node:fs';
import * as svelte from 'svelte/compiler';
import { compile, preprocess } from 'svelte/compiler';
import { log } from './log.js';
import { toESBuildError } from './error.js';
import { isSvelte3, isSvelte5 } from './svelte-version.js';
import { isSvelte3 } from './svelte-version.js';
/**
* @typedef {NonNullable<import('vite').DepOptimizationOptions['esbuildOptions']>} EsbuildOptions
@ -11,8 +11,6 @@ import { isSvelte3, isSvelte5 } from './svelte-version.js';
export const facadeEsbuildSveltePluginName = 'vite-plugin-svelte:facade';
const svelteModuleExtension = '.svelte.js';
/**
* @param {import('../types/options.d.ts').ResolvedOptions} options
* @returns {EsbuildPlugin}
@ -26,9 +24,6 @@ export function esbuildSveltePlugin(options) {
if (build.initialOptions.plugins?.some((v) => v.name === 'vite:dep-scan')) return;
const svelteExtensions = (options.extensions ?? ['.svelte']).map((ext) => ext.slice(1));
if (isSvelte5) {
svelteExtensions.push(svelteModuleExtension.slice(1));
}
const svelteFilter = new RegExp('\\.(' + svelteExtensions.join('|') + ')(\\?.*)?$');
/** @type {import('../types/vite-plugin-svelte-stats.d.ts').StatCollection | undefined} */
let statsCollection;
@ -60,21 +55,6 @@ export function esbuildSveltePlugin(options) {
* @returns {Promise<string>}
*/
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: 'client'
});
if (endStat) {
endStat();
}
return compiled.js.map
? compiled.js.code + '//# sourceMappingURL=' + compiled.js.map.toUrl()
: compiled.js.code;
}
let css = options.compilerOptions.css;
if (css !== 'none') {
// TODO ideally we'd be able to externalize prebundled styles too, but for now always put them in the js
@ -85,8 +65,7 @@ async function compileSvelte(options, { filename, code }, statsCollection) {
...options.compilerOptions,
css,
filename,
// @ts-expect-error generate type is different for svelte5
generate: isSvelte5 ? 'client' : 'dom'
generate: 'dom'
};
if (isSvelte3) {
// @ts-ignore
@ -96,7 +75,7 @@ async function compileSvelte(options, { filename, code }, statsCollection) {
if (options.preprocess) {
try {
preprocessed = await svelte.preprocess(code, options.preprocess, { filename });
preprocessed = await preprocess(code, options.preprocess, { filename });
} catch (e) {
e.message = `Error while preprocessing ${filename}${e.message ? ` - ${e.message}` : ''}`;
throw e;
@ -123,7 +102,7 @@ async function compileSvelte(options, { filename, code }, statsCollection) {
}
: compileOptions;
const endStat = statsCollection?.start(filename);
const compiled = svelte.compile(finalCode, finalCompileOptions);
const compiled = compile(finalCode, finalCompileOptions);
if (endStat) {
endStat();
}

View File

@ -184,48 +184,3 @@ export function buildIdParser(options) {
}
};
}
/**
* @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
};
}

View File

@ -120,7 +120,7 @@ export const log = {
};
/**
* @param {import('../types/id.d.ts').SvelteRequest | import('../types/id.d.ts').SvelteModuleRequest} svelteRequest
* @param {import('../types/id.d.ts').SvelteRequest} svelteRequest
* @param {import('svelte/types/compiler/interfaces').Warning[]} warnings
* @param {import('../types/options.d.ts').ResolvedOptions} options
*/

View File

@ -25,7 +25,6 @@ import {
import { isCommonDepWithoutSvelteField } from './dependencies.js';
import { VitePluginSvelteStats } from './vite-plugin-svelte-stats.js';
import { VitePluginSvelteCache } from './vite-plugin-svelte-cache.js';
import { isSvelte5 } from './svelte-version.js';
const allowedPluginOptions = new Set([
'include',
@ -228,10 +227,6 @@ export function resolveOptions(preResolveOptions, viteConfig, cache) {
* @param {import('../types/options.d.ts').ResolvedOptions} options
*/
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) {
if (!options.compilerOptions.dev) {
log.warn('hmr is enabled but compilerOptions.dev is false, forcing it to true');

View File

@ -4,8 +4,3 @@ import { VERSION } from 'svelte/compiler';
* @type {boolean}
*/
export const isSvelte3 = VERSION.startsWith('3.');
/**
* @type {boolean}
*/
export const isSvelte5 = VERSION.startsWith('5.');