@sveltejs/vite-plugin-svelte 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -27,7 +27,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
27
27
  var src_exports = {};
28
28
  __export(src_exports, {
29
29
  loadSvelteConfig: () => loadSvelteConfig,
30
- svelte: () => svelte
30
+ svelte: () => svelte,
31
+ vitePreprocess: () => vitePreprocess
31
32
  });
32
33
  module.exports = __toCommonJS(src_exports);
33
34
 
@@ -36,7 +37,7 @@ var getImportMetaUrl = () => typeof document === "undefined" ? new URL("file:" +
36
37
  var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
37
38
 
38
39
  // src/index.ts
39
- var import_fs7 = __toESM(require("fs"), 1);
40
+ var import_fs8 = __toESM(require("fs"), 1);
40
41
  var import_vitefu4 = require("vitefu");
41
42
 
42
43
  // src/utils/log.ts
@@ -213,7 +214,7 @@ async function handleHotUpdate(compileSvelte2, ctx, svelteRequest, cache, option
213
214
  log.debug(`handleHotUpdate called before initial transform for ${svelteRequest.id}`);
214
215
  return;
215
216
  }
216
- const { read, server } = ctx;
217
+ const { read, server, modules } = ctx;
217
218
  const cachedJS = cache.getJS(svelteRequest);
218
219
  const cachedCss = cache.getCSS(svelteRequest);
219
220
  const content = await read();
@@ -225,34 +226,35 @@ async function handleHotUpdate(compileSvelte2, ctx, svelteRequest, cache, option
225
226
  cache.setError(svelteRequest, e);
226
227
  throw e;
227
228
  }
228
- const affectedModules = /* @__PURE__ */ new Set();
229
- const cssModule = server.moduleGraph.getModuleById(svelteRequest.cssId);
230
- const mainModule = server.moduleGraph.getModuleById(svelteRequest.id);
231
- const cssUpdated = cssModule && cssChanged(cachedCss, compileData.compiled.css);
232
- if (cssUpdated) {
233
- log.debug(`handleHotUpdate css changed for ${svelteRequest.cssId}`);
234
- affectedModules.add(cssModule);
235
- }
236
- const jsUpdated = mainModule && jsChanged(cachedJS, compileData.compiled.js, svelteRequest.filename);
237
- if (jsUpdated) {
238
- log.debug(`handleHotUpdate js changed for ${svelteRequest.id}`);
239
- affectedModules.add(mainModule);
229
+ const affectedModules = [...modules];
230
+ const cssIdx = modules.findIndex((m) => m.id === svelteRequest.cssId);
231
+ if (cssIdx > -1) {
232
+ const cssUpdated = cssChanged(cachedCss, compileData.compiled.css);
233
+ if (!cssUpdated) {
234
+ log.debug(`skipping unchanged css for ${svelteRequest.cssId}`);
235
+ affectedModules.splice(cssIdx, 1);
236
+ }
240
237
  }
241
- if (!jsUpdated) {
242
- logCompilerWarnings(svelteRequest, compileData.compiled.warnings, options);
238
+ const jsIdx = modules.findIndex((m) => m.id === svelteRequest.id);
239
+ if (jsIdx > -1) {
240
+ const jsUpdated = jsChanged(cachedJS, compileData.compiled.js, svelteRequest.filename);
241
+ if (!jsUpdated) {
242
+ log.debug(`skipping unchanged js for ${svelteRequest.id}`);
243
+ affectedModules.splice(jsIdx, 1);
244
+ logCompilerWarnings(svelteRequest, compileData.compiled.warnings, options);
245
+ }
243
246
  }
244
- const result = [...affectedModules].filter(Boolean);
245
- const ssrModulesToInvalidate = result.filter((m) => !!m.ssrTransformResult);
247
+ const ssrModulesToInvalidate = affectedModules.filter((m) => !!m.ssrTransformResult);
246
248
  if (ssrModulesToInvalidate.length > 0) {
247
249
  log.debug(`invalidating modules ${ssrModulesToInvalidate.map((m) => m.id).join(", ")}`);
248
250
  ssrModulesToInvalidate.forEach((moduleNode) => server.moduleGraph.invalidateModule(moduleNode));
249
251
  }
250
- if (result.length > 0) {
252
+ if (affectedModules.length > 0) {
251
253
  log.debug(
252
- `handleHotUpdate for ${svelteRequest.id} result: ${result.map((m) => m.id).join(", ")}`
254
+ `handleHotUpdate for ${svelteRequest.id} result: ${affectedModules.map((m) => m.id).join(", ")}`
253
255
  );
254
256
  }
255
- return result;
257
+ return affectedModules;
256
258
  }
257
259
  function cssChanged(prev, next) {
258
260
  return !isCodeEqual(prev?.code, next?.code);
@@ -289,7 +291,7 @@ function normalizeJsCode(code) {
289
291
  }
290
292
 
291
293
  // src/utils/compile.ts
292
- var import_compiler = require("svelte/compiler");
294
+ var import_compiler2 = require("svelte/compiler");
293
295
  var import_svelte_hmr = require("svelte-hmr");
294
296
 
295
297
  // src/utils/hash.ts
@@ -316,12 +318,210 @@ function toSafe(base64) {
316
318
  return base64.replace(replaceRE, (x) => replacements[x]);
317
319
  }
318
320
 
321
+ // src/utils/preprocess.ts
322
+ var import_magic_string = __toESM(require("magic-string"), 1);
323
+ var import_compiler = require("svelte/compiler");
324
+ var import_path2 = __toESM(require("path"), 1);
325
+
326
+ // src/preprocess.ts
327
+ var import_path = __toESM(require("path"), 1);
328
+ var vite = __toESM(require("vite"), 1);
329
+ var supportedStyleLangs = ["css", "less", "sass", "scss", "styl", "stylus", "postcss", "sss"];
330
+ var supportedScriptLangs = ["ts"];
331
+ function vitePreprocess(opts) {
332
+ const preprocessor = {};
333
+ if (opts?.script !== false) {
334
+ preprocessor.script = viteScript().script;
335
+ }
336
+ if (opts?.style !== false) {
337
+ const styleOpts = typeof opts?.style == "object" ? opts?.style : void 0;
338
+ preprocessor.style = viteStyle(styleOpts).style;
339
+ }
340
+ return preprocessor;
341
+ }
342
+ function viteScript() {
343
+ return {
344
+ async script({ attributes, content, filename = "" }) {
345
+ const lang = attributes.lang;
346
+ if (!supportedScriptLangs.includes(lang))
347
+ return;
348
+ const transformResult = await vite.transformWithEsbuild(content, filename, {
349
+ loader: lang,
350
+ target: "esnext",
351
+ tsconfigRaw: {
352
+ compilerOptions: {
353
+ importsNotUsedAsValues: "preserve",
354
+ preserveValueImports: true
355
+ }
356
+ }
357
+ });
358
+ return {
359
+ code: transformResult.code,
360
+ map: transformResult.map
361
+ };
362
+ }
363
+ };
364
+ }
365
+ function viteStyle(config = {}) {
366
+ let transform;
367
+ const style = async ({ attributes, content, filename = "" }) => {
368
+ const lang = attributes.lang;
369
+ if (!supportedStyleLangs.includes(lang))
370
+ return;
371
+ if (!transform) {
372
+ let resolvedConfig;
373
+ if (style.__resolvedConfig) {
374
+ resolvedConfig = style.__resolvedConfig;
375
+ } else if (isResolvedConfig(config)) {
376
+ resolvedConfig = config;
377
+ } else {
378
+ resolvedConfig = await vite.resolveConfig(
379
+ config,
380
+ process.env.NODE_ENV === "production" ? "build" : "serve"
381
+ );
382
+ }
383
+ transform = getCssTransformFn(resolvedConfig);
384
+ }
385
+ const moduleId = `${filename}.${lang}`;
386
+ const result = await transform(content, moduleId);
387
+ if (result.map?.sources?.[0] === moduleId) {
388
+ result.map.sources[0] = import_path.default.basename(filename);
389
+ }
390
+ return {
391
+ code: result.code,
392
+ map: result.map ?? void 0
393
+ };
394
+ };
395
+ style.__resolvedConfig = null;
396
+ return { style };
397
+ }
398
+ function getCssTransformFn(config) {
399
+ if (vite.preprocessCSS) {
400
+ return async (code, filename) => {
401
+ return vite.preprocessCSS(code, filename, config);
402
+ };
403
+ } else {
404
+ const pluginName = "vite:css";
405
+ const plugin = config.plugins.find((p) => p.name === pluginName);
406
+ if (!plugin) {
407
+ throw new Error(`failed to find plugin ${pluginName}`);
408
+ }
409
+ if (!plugin.transform) {
410
+ throw new Error(`plugin ${pluginName} has no transform`);
411
+ }
412
+ return plugin.transform.bind(null);
413
+ }
414
+ }
415
+ function isResolvedConfig(config) {
416
+ return !!config.inlineConfig;
417
+ }
418
+
419
+ // src/utils/preprocess.ts
420
+ function createVitePreprocessorGroup(config) {
421
+ return {
422
+ markup({ content, filename }) {
423
+ return (0, import_compiler.preprocess)(content, vitePreprocess({ style: config }), { filename });
424
+ }
425
+ };
426
+ }
427
+ function createInjectScopeEverythingRulePreprocessorGroup() {
428
+ return {
429
+ style({ content, filename }) {
430
+ const s = new import_magic_string.default(content);
431
+ s.append(" *{}");
432
+ return {
433
+ code: s.toString(),
434
+ map: s.generateDecodedMap({
435
+ source: filename ? import_path2.default.basename(filename) : void 0,
436
+ hires: true
437
+ })
438
+ };
439
+ }
440
+ };
441
+ }
442
+ function buildExtraPreprocessors(options, config) {
443
+ const prependPreprocessors = [];
444
+ const appendPreprocessors = [];
445
+ if (options.experimental?.useVitePreprocess) {
446
+ log.warn(
447
+ "`experimental.useVitePreprocess` is deprecated. Use the `vitePreprocess()` preprocessor instead. See https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/preprocess.md for more information."
448
+ );
449
+ prependPreprocessors.push(createVitePreprocessorGroup(config));
450
+ }
451
+ const pluginsWithPreprocessorsDeprecated = config.plugins.filter((p) => p?.sveltePreprocess);
452
+ if (pluginsWithPreprocessorsDeprecated.length > 0) {
453
+ log.warn(
454
+ `The following plugins use the deprecated 'plugin.sveltePreprocess' field. Please contact their maintainers and ask them to move it to 'plugin.api.sveltePreprocess': ${pluginsWithPreprocessorsDeprecated.map((p) => p.name).join(", ")}`
455
+ );
456
+ pluginsWithPreprocessorsDeprecated.forEach((p) => {
457
+ if (!p.api) {
458
+ p.api = {};
459
+ }
460
+ if (p.api.sveltePreprocess === void 0) {
461
+ p.api.sveltePreprocess = p.sveltePreprocess;
462
+ } else {
463
+ log.error(
464
+ `ignoring plugin.sveltePreprocess of ${p.name} because it already defined plugin.api.sveltePreprocess.`
465
+ );
466
+ }
467
+ });
468
+ }
469
+ const pluginsWithPreprocessors = config.plugins.filter((p) => p?.api?.sveltePreprocess);
470
+ const ignored = [], included = [];
471
+ for (const p of pluginsWithPreprocessors) {
472
+ if (options.ignorePluginPreprocessors === true || Array.isArray(options.ignorePluginPreprocessors) && options.ignorePluginPreprocessors?.includes(p.name)) {
473
+ ignored.push(p);
474
+ } else {
475
+ included.push(p);
476
+ }
477
+ }
478
+ if (ignored.length > 0) {
479
+ log.debug(
480
+ `Ignoring svelte preprocessors defined by these vite plugins: ${ignored.map((p) => p.name).join(", ")}`
481
+ );
482
+ }
483
+ if (included.length > 0) {
484
+ log.debug(
485
+ `Adding svelte preprocessors defined by these vite plugins: ${included.map((p) => p.name).join(", ")}`
486
+ );
487
+ appendPreprocessors.push(...pluginsWithPreprocessors.map((p) => p.api.sveltePreprocess));
488
+ }
489
+ return { prependPreprocessors, appendPreprocessors };
490
+ }
491
+ function addExtraPreprocessors(options, config) {
492
+ const { prependPreprocessors, appendPreprocessors } = buildExtraPreprocessors(options, config);
493
+ if (prependPreprocessors.length > 0 || appendPreprocessors.length > 0) {
494
+ if (!options.preprocess) {
495
+ options.preprocess = [...prependPreprocessors, ...appendPreprocessors];
496
+ } else if (Array.isArray(options.preprocess)) {
497
+ options.preprocess.unshift(...prependPreprocessors);
498
+ options.preprocess.push(...appendPreprocessors);
499
+ } else {
500
+ options.preprocess = [...prependPreprocessors, options.preprocess, ...appendPreprocessors];
501
+ }
502
+ }
503
+ }
504
+
319
505
  // src/utils/compile.ts
506
+ var import_path3 = __toESM(require("path"), 1);
320
507
  var scriptLangRE = /<script [^>]*lang=["']?([^"' >]+)["']?[^>]*>/;
508
+ function mapSourcesToRelative(map, filename) {
509
+ if (map?.sources) {
510
+ map.sources = map.sources.map((s) => {
511
+ if (import_path3.default.isAbsolute(s)) {
512
+ const relative = import_path3.default.relative(filename, s);
513
+ return relative === "" ? import_path3.default.basename(filename) : relative;
514
+ } else {
515
+ return s;
516
+ }
517
+ });
518
+ }
519
+ }
321
520
  var _createCompileSvelte = (makeHot) => {
322
521
  let stats;
522
+ const devStylePreprocessor = createInjectScopeEverythingRulePreprocessorGroup();
323
523
  return async function compileSvelte2(svelteRequest, code, options) {
324
- const { filename, normalizedFilename, cssId, ssr } = svelteRequest;
524
+ const { filename, normalizedFilename, cssId, ssr, raw } = svelteRequest;
325
525
  const { emitCss = true } = options;
326
526
  const dependencies = [];
327
527
  if (options.stats) {
@@ -343,7 +543,7 @@ var _createCompileSvelte = (makeHot) => {
343
543
  }
344
544
  const compileOptions = {
345
545
  ...options.compilerOptions,
346
- filename,
546
+ filename: normalizedFilename,
347
547
  generate: ssr ? "ssr" : "dom",
348
548
  format: "esm"
349
549
  };
@@ -360,9 +560,17 @@ var _createCompileSvelte = (makeHot) => {
360
560
  }
361
561
  }
362
562
  let preprocessed;
363
- if (options.preprocess) {
563
+ let preprocessors = options.preprocess;
564
+ if (!options.isBuild && options.emitCss && options.hot) {
565
+ if (!Array.isArray(preprocessors)) {
566
+ preprocessors = preprocessors ? [preprocessors, devStylePreprocessor] : [devStylePreprocessor];
567
+ } else {
568
+ preprocessors = preprocessors.concat(devStylePreprocessor);
569
+ }
570
+ }
571
+ if (preprocessors) {
364
572
  try {
365
- preprocessed = await (0, import_compiler.preprocess)(code, options.preprocess, { filename });
573
+ preprocessed = await (0, import_compiler2.preprocess)(code, preprocessors, { filename });
366
574
  } catch (e) {
367
575
  e.message = `Error while preprocessing ${filename}${e.message ? ` - ${e.message}` : ""}`;
368
576
  throw e;
@@ -372,6 +580,12 @@ var _createCompileSvelte = (makeHot) => {
372
580
  if (preprocessed.map)
373
581
  compileOptions.sourcemap = preprocessed.map;
374
582
  }
583
+ if (typeof preprocessed?.map === "object") {
584
+ mapSourcesToRelative(preprocessed?.map, filename);
585
+ }
586
+ if (raw && svelteRequest.query.type === "preprocessed") {
587
+ return { preprocessed: preprocessed ?? { code } };
588
+ }
375
589
  const finalCode = preprocessed ? preprocessed.code : code;
376
590
  const dynamicCompileOptions = await options.experimental?.dynamicCompileOptions?.({
377
591
  filename,
@@ -388,25 +602,29 @@ var _createCompileSvelte = (makeHot) => {
388
602
  ...dynamicCompileOptions
389
603
  } : compileOptions;
390
604
  const endStat = stats?.start(filename);
391
- const compiled = (0, import_compiler.compile)(finalCode, finalCompileOptions);
605
+ const compiled = (0, import_compiler2.compile)(finalCode, finalCompileOptions);
392
606
  if (endStat) {
393
607
  endStat();
394
608
  }
395
- const hasCss = compiled.css?.code?.trim().length > 0;
396
- if (emitCss && hasCss) {
397
- compiled.js.code += `
609
+ mapSourcesToRelative(compiled.js?.map, filename);
610
+ mapSourcesToRelative(compiled.css?.map, filename);
611
+ if (!raw) {
612
+ const hasCss = compiled.css?.code?.trim().length > 0;
613
+ if (emitCss && hasCss) {
614
+ compiled.js.code += `
398
615
  import ${JSON.stringify(cssId)};
399
616
  `;
400
- }
401
- if (!ssr && makeHot) {
402
- compiled.js.code = makeHot({
403
- id: filename,
404
- compiledCode: compiled.js.code,
405
- hotOptions: { ...options.hot, injectCss: options.hot?.injectCss === true && hasCss },
406
- compiled,
407
- originalCode: code,
408
- compileOptions: finalCompileOptions
409
- });
617
+ }
618
+ if (!ssr && makeHot) {
619
+ compiled.js.code = makeHot({
620
+ id: filename,
621
+ compiledCode: compiled.js.code,
622
+ hotOptions: { ...options.hot, injectCss: options.hot?.injectCss === true && hasCss },
623
+ compiled,
624
+ originalCode: code,
625
+ compileOptions: finalCompileOptions
626
+ });
627
+ }
410
628
  }
411
629
  compiled.js.dependencies = dependencies;
412
630
  return {
@@ -415,7 +633,8 @@ import ${JSON.stringify(cssId)};
415
633
  lang: code.match(scriptLangRE)?.[1] || "js",
416
634
  compiled,
417
635
  ssr,
418
- dependencies
636
+ dependencies,
637
+ preprocessed: preprocessed ?? { code }
419
638
  };
420
639
  };
421
640
  };
@@ -425,7 +644,7 @@ function buildMakeHot(options) {
425
644
  const hotApi = options?.hot?.hotApi;
426
645
  const adapter = options?.hot?.adapter;
427
646
  return (0, import_svelte_hmr.createMakeHot)({
428
- walk: import_compiler.walk,
647
+ walk: import_compiler2.walk,
429
648
  hotApi,
430
649
  adapter,
431
650
  hotOptions: { noOverlay: true, ...options.hot }
@@ -443,6 +662,16 @@ var import_vite2 = require("vite");
443
662
  var fs = __toESM(require("fs"), 1);
444
663
  var VITE_FS_PREFIX = "/@fs/";
445
664
  var IS_WINDOWS = process.platform === "win32";
665
+ var SUPPORTED_COMPILER_OPTIONS = [
666
+ "generate",
667
+ "dev",
668
+ "css",
669
+ "hydratable",
670
+ "customElement",
671
+ "immutable",
672
+ "enableSourcemap"
673
+ ];
674
+ var TYPES_WITH_COMPILER_OPTIONS = ["style", "script", "all"];
446
675
  function splitId(id) {
447
676
  const parts = id.split(`?`, 2);
448
677
  const filename = parts[0];
@@ -451,9 +680,11 @@ function splitId(id) {
451
680
  }
452
681
  function parseToSvelteRequest(id, filename, rawQuery, root, timestamp, ssr) {
453
682
  const query = parseRequestQuery(rawQuery);
454
- if (query.url || query.raw) {
683
+ const rawOrDirect = !!(query.raw || query.direct);
684
+ if (query.url || !query.svelte && rawOrDirect) {
455
685
  return;
456
686
  }
687
+ const raw = rawOrDirect;
457
688
  const normalizedFilename = normalize(filename, root);
458
689
  const cssId = createVirtualImportId(filename, root, "style");
459
690
  return {
@@ -463,7 +694,8 @@ function parseToSvelteRequest(id, filename, rawQuery, root, timestamp, ssr) {
463
694
  cssId,
464
695
  query,
465
696
  timestamp,
466
- ssr
697
+ ssr,
698
+ raw
467
699
  };
468
700
  }
469
701
  function createVirtualImportId(filename, root, type) {
@@ -485,6 +717,33 @@ function parseRequestQuery(rawQuery) {
485
717
  query[key] = true;
486
718
  }
487
719
  }
720
+ const compilerOptions = query.compilerOptions;
721
+ if (compilerOptions) {
722
+ if (!((query.raw || query.direct) && TYPES_WITH_COMPILER_OPTIONS.includes(query.type))) {
723
+ throw new Error(
724
+ `Invalid compilerOptions in query ${rawQuery}. CompilerOptions are only supported for raw or direct queries with type in "${TYPES_WITH_COMPILER_OPTIONS.join(
725
+ ", "
726
+ )}" e.g. '?svelte&raw&type=script&compilerOptions={"generate":"ssr","dev":false}`
727
+ );
728
+ }
729
+ try {
730
+ const parsed = JSON.parse(compilerOptions);
731
+ const invalid = Object.keys(parsed).filter(
732
+ (key) => !SUPPORTED_COMPILER_OPTIONS.includes(key)
733
+ );
734
+ if (invalid.length) {
735
+ throw new Error(
736
+ `Invalid compilerOptions in query ${rawQuery}: ${invalid.join(
737
+ ", "
738
+ )}. Supported: ${SUPPORTED_COMPILER_OPTIONS.join(", ")}`
739
+ );
740
+ }
741
+ query.compilerOptions = parsed;
742
+ } catch (e) {
743
+ log.error("failed to parse request query compilerOptions", e);
744
+ throw e;
745
+ }
746
+ }
488
747
  return query;
489
748
  }
490
749
  function normalize(filename, normalizedRoot) {
@@ -520,7 +779,7 @@ var import_vite4 = require("vite");
520
779
 
521
780
  // src/utils/load-svelte-config.ts
522
781
  var import_module = require("module");
523
- var import_path = __toESM(require("path"), 1);
782
+ var import_path4 = __toESM(require("path"), 1);
524
783
  var import_fs = __toESM(require("fs"), 1);
525
784
  var import_url = require("url");
526
785
  var esmRequire;
@@ -586,13 +845,13 @@ async function loadSvelteConfig(viteConfig, inlineOptions) {
586
845
  function findConfigToLoad(viteConfig, inlineOptions) {
587
846
  const root = viteConfig?.root || process.cwd();
588
847
  if (inlineOptions?.configFile) {
589
- const abolutePath = import_path.default.isAbsolute(inlineOptions.configFile) ? inlineOptions.configFile : import_path.default.resolve(root, inlineOptions.configFile);
848
+ const abolutePath = import_path4.default.isAbsolute(inlineOptions.configFile) ? inlineOptions.configFile : import_path4.default.resolve(root, inlineOptions.configFile);
590
849
  if (!import_fs.default.existsSync(abolutePath)) {
591
850
  throw new Error(`failed to find svelte config file ${abolutePath}.`);
592
851
  }
593
852
  return abolutePath;
594
853
  } else {
595
- const existingKnownConfigFiles = knownSvelteConfigNames.map((candidate) => import_path.default.resolve(root, candidate)).filter((file) => import_fs.default.existsSync(file));
854
+ const existingKnownConfigFiles = knownSvelteConfigNames.map((candidate) => import_path4.default.resolve(root, candidate)).filter((file) => import_fs.default.existsSync(file));
596
855
  if (existingKnownConfigFiles.length === 0) {
597
856
  log.debug(`no svelte config found at ${root}`);
598
857
  return;
@@ -627,11 +886,11 @@ var SVELTE_HMR_IMPORTS = [
627
886
  var SVELTE_EXPORT_CONDITIONS = ["svelte"];
628
887
 
629
888
  // src/utils/options.ts
630
- var import_path5 = __toESM(require("path"), 1);
889
+ var import_path7 = __toESM(require("path"), 1);
631
890
 
632
891
  // src/utils/esbuild.ts
633
892
  var import_fs2 = require("fs");
634
- var import_compiler3 = require("svelte/compiler");
893
+ var import_compiler4 = require("svelte/compiler");
635
894
 
636
895
  // src/utils/error.ts
637
896
  function toRollupError(error, options) {
@@ -687,8 +946,8 @@ function formatFrameForVite(frame) {
687
946
  }
688
947
 
689
948
  // src/utils/svelte-version.ts
690
- var import_compiler2 = require("svelte/compiler");
691
- var svelteVersion = parseVersion(import_compiler2.VERSION);
949
+ var import_compiler3 = require("svelte/compiler");
950
+ var svelteVersion = parseVersion(import_compiler3.VERSION);
692
951
  function parseVersion(version) {
693
952
  const segments = version.split(".", 3).map((s) => parseInt(s, 10));
694
953
  while (segments.length < 3) {
@@ -763,7 +1022,7 @@ async function compileSvelte(options, { filename, code }, statsCollection) {
763
1022
  let preprocessed;
764
1023
  if (options.preprocess) {
765
1024
  try {
766
- preprocessed = await (0, import_compiler3.preprocess)(code, options.preprocess, { filename });
1025
+ preprocessed = await (0, import_compiler4.preprocess)(code, options.preprocess, { filename });
767
1026
  } catch (e) {
768
1027
  e.message = `Error while preprocessing ${filename}${e.message ? ` - ${e.message}` : ""}`;
769
1028
  throw e;
@@ -785,275 +1044,19 @@ async function compileSvelte(options, { filename, code }, statsCollection) {
785
1044
  ...dynamicCompileOptions
786
1045
  } : compileOptions;
787
1046
  const endStat = statsCollection?.start(filename);
788
- const compiled = (0, import_compiler3.compile)(finalCode, finalCompileOptions);
1047
+ const compiled = (0, import_compiler4.compile)(finalCode, finalCompileOptions);
789
1048
  if (endStat) {
790
1049
  endStat();
791
1050
  }
792
1051
  return compiled.js.code + "//# sourceMappingURL=" + compiled.js.map.toUrl();
793
1052
  }
794
1053
 
795
- // src/utils/preprocess.ts
796
- var vite = __toESM(require("vite"), 1);
797
- var import_magic_string2 = __toESM(require("magic-string"), 1);
798
- var import_compiler4 = require("svelte/compiler");
799
-
800
- // src/utils/sourcemap.ts
801
- var import_magic_string = __toESM(require("magic-string"), 1);
802
- async function buildMagicString(from, to, options) {
803
- let diff_match_patch, DIFF_DELETE, DIFF_INSERT;
804
- try {
805
- const dmpPkg = await import("diff-match-patch");
806
- diff_match_patch = dmpPkg.diff_match_patch;
807
- DIFF_INSERT = dmpPkg.DIFF_INSERT;
808
- DIFF_DELETE = dmpPkg.DIFF_DELETE;
809
- } catch (e) {
810
- log.error.once(
811
- 'Failed to import optional dependency "diff-match-patch". Please install it to enable generated sourcemaps.'
812
- );
813
- return null;
814
- }
815
- const dmp = new diff_match_patch();
816
- const diffs = dmp.diff_main(from, to);
817
- dmp.diff_cleanupSemantic(diffs);
818
- const m = new import_magic_string.default(from, options);
819
- let pos = 0;
820
- for (let i = 0; i < diffs.length; i++) {
821
- const diff = diffs[i];
822
- const nextDiff = diffs[i + 1];
823
- if (diff[0] === DIFF_DELETE) {
824
- if (nextDiff?.[0] === DIFF_INSERT) {
825
- m.overwrite(pos, pos + diff[1].length, nextDiff[1]);
826
- i++;
827
- } else {
828
- m.remove(pos, pos + diff[1].length);
829
- }
830
- pos += diff[1].length;
831
- } else if (diff[0] === DIFF_INSERT) {
832
- if (nextDiff) {
833
- m.appendRight(pos, diff[1]);
834
- } else {
835
- m.append(diff[1]);
836
- }
837
- } else {
838
- pos += diff[1].length;
839
- }
840
- }
841
- return m;
842
- }
843
- async function buildSourceMap(from, to, filename) {
844
- const m = await buildMagicString(from, to, { filename });
845
- return m ? m.generateDecodedMap({ source: filename, hires: true, includeContent: false }) : null;
846
- }
847
-
848
- // src/utils/preprocess.ts
849
- var import_path2 = __toESM(require("path"), 1);
850
- var supportedStyleLangs = ["css", "less", "sass", "scss", "styl", "stylus", "postcss"];
851
- var supportedScriptLangs = ["ts"];
852
- function createViteScriptPreprocessor() {
853
- return async ({ attributes, content, filename = "" }) => {
854
- const lang = attributes.lang;
855
- if (!supportedScriptLangs.includes(lang))
856
- return;
857
- const transformResult = await vite.transformWithEsbuild(content, filename, {
858
- loader: lang,
859
- target: "esnext",
860
- tsconfigRaw: {
861
- compilerOptions: {
862
- importsNotUsedAsValues: "preserve",
863
- preserveValueImports: true
864
- }
865
- }
866
- });
867
- return {
868
- code: transformResult.code,
869
- map: transformResult.map
870
- };
871
- };
872
- }
873
- function createViteStylePreprocessor(config) {
874
- const transform = getCssTransformFn(config);
875
- return async ({ attributes, content, filename = "" }) => {
876
- const lang = attributes.lang;
877
- if (!supportedStyleLangs.includes(lang))
878
- return;
879
- const moduleId = `${filename}.${lang}`;
880
- const result = await transform(content, moduleId);
881
- if (result.map?.sources?.[0] === moduleId) {
882
- result.map.sources[0] = import_path2.default.basename(filename);
883
- }
884
- return {
885
- code: result.code,
886
- map: result.map ?? void 0
887
- };
888
- };
889
- }
890
- function getCssTransformFn(config) {
891
- if (vite.preprocessCSS) {
892
- return async (code, filename) => {
893
- return vite.preprocessCSS(code, filename, config);
894
- };
895
- } else {
896
- const pluginName = "vite:css";
897
- const plugin = config.plugins.find((p) => p.name === pluginName);
898
- if (!plugin) {
899
- throw new Error(`failed to find plugin ${pluginName}`);
900
- }
901
- if (!plugin.transform) {
902
- throw new Error(`plugin ${pluginName} has no transform`);
903
- }
904
- return plugin.transform.bind(null);
905
- }
906
- }
907
- function createVitePreprocessorGroup(config) {
908
- return {
909
- markup({ content, filename }) {
910
- return (0, import_compiler4.preprocess)(
911
- content,
912
- {
913
- script: createViteScriptPreprocessor(),
914
- style: createViteStylePreprocessor(config)
915
- },
916
- { filename }
917
- );
918
- }
919
- };
920
- }
921
- function createInjectScopeEverythingRulePreprocessorGroup() {
922
- return {
923
- style({ content, filename }) {
924
- const s = new import_magic_string2.default(content);
925
- s.append(" *{}");
926
- return {
927
- code: s.toString(),
928
- map: s.generateDecodedMap({
929
- source: filename ? import_path2.default.basename(filename) : void 0,
930
- hires: true
931
- })
932
- };
933
- }
934
- };
935
- }
936
- function buildExtraPreprocessors(options, config) {
937
- const prependPreprocessors = [];
938
- const appendPreprocessors = [];
939
- if (options.experimental?.useVitePreprocess) {
940
- log.debug("adding vite preprocessor");
941
- prependPreprocessors.push(createVitePreprocessorGroup(config));
942
- }
943
- const pluginsWithPreprocessorsDeprecated = config.plugins.filter((p) => p?.sveltePreprocess);
944
- if (pluginsWithPreprocessorsDeprecated.length > 0) {
945
- log.warn(
946
- `The following plugins use the deprecated 'plugin.sveltePreprocess' field. Please contact their maintainers and ask them to move it to 'plugin.api.sveltePreprocess': ${pluginsWithPreprocessorsDeprecated.map((p) => p.name).join(", ")}`
947
- );
948
- pluginsWithPreprocessorsDeprecated.forEach((p) => {
949
- if (!p.api) {
950
- p.api = {};
951
- }
952
- if (p.api.sveltePreprocess === void 0) {
953
- p.api.sveltePreprocess = p.sveltePreprocess;
954
- } else {
955
- log.error(
956
- `ignoring plugin.sveltePreprocess of ${p.name} because it already defined plugin.api.sveltePreprocess.`
957
- );
958
- }
959
- });
960
- }
961
- const pluginsWithPreprocessors = config.plugins.filter((p) => p?.api?.sveltePreprocess);
962
- const ignored = [], included = [];
963
- for (const p of pluginsWithPreprocessors) {
964
- if (options.ignorePluginPreprocessors === true || Array.isArray(options.ignorePluginPreprocessors) && options.ignorePluginPreprocessors?.includes(p.name)) {
965
- ignored.push(p);
966
- } else {
967
- included.push(p);
968
- }
969
- }
970
- if (ignored.length > 0) {
971
- log.debug(
972
- `Ignoring svelte preprocessors defined by these vite plugins: ${ignored.map((p) => p.name).join(", ")}`
973
- );
974
- }
975
- if (included.length > 0) {
976
- log.debug(
977
- `Adding svelte preprocessors defined by these vite plugins: ${included.map((p) => p.name).join(", ")}`
978
- );
979
- appendPreprocessors.push(...pluginsWithPreprocessors.map((p) => p.api.sveltePreprocess));
980
- }
981
- if (options.hot && options.emitCss) {
982
- appendPreprocessors.push(createInjectScopeEverythingRulePreprocessorGroup());
983
- }
984
- return { prependPreprocessors, appendPreprocessors };
985
- }
986
- function addExtraPreprocessors(options, config) {
987
- const { prependPreprocessors, appendPreprocessors } = buildExtraPreprocessors(options, config);
988
- if (prependPreprocessors.length > 0 || appendPreprocessors.length > 0) {
989
- if (!options.preprocess) {
990
- options.preprocess = [...prependPreprocessors, ...appendPreprocessors];
991
- } else if (Array.isArray(options.preprocess)) {
992
- options.preprocess.unshift(...prependPreprocessors);
993
- options.preprocess.push(...appendPreprocessors);
994
- } else {
995
- options.preprocess = [...prependPreprocessors, options.preprocess, ...appendPreprocessors];
996
- }
997
- }
998
- const generateMissingSourceMaps = !!options.experimental?.generateMissingPreprocessorSourcemaps;
999
- if (options.preprocess && generateMissingSourceMaps) {
1000
- options.preprocess = Array.isArray(options.preprocess) ? options.preprocess.map((p, i) => validateSourceMapOutputWrapper(p, i)) : validateSourceMapOutputWrapper(options.preprocess, 0);
1001
- }
1002
- }
1003
- function validateSourceMapOutputWrapper(group, i) {
1004
- const wrapper = {};
1005
- for (const [processorType, processorFn] of Object.entries(group)) {
1006
- wrapper[processorType] = async (options) => {
1007
- const result = await processorFn(options);
1008
- if (result && result.code !== options.content) {
1009
- let invalidMap = false;
1010
- if (!result.map) {
1011
- invalidMap = true;
1012
- log.warn.enabled && log.warn.once(
1013
- `preprocessor at index ${i} did not return a sourcemap for ${processorType} transform`,
1014
- {
1015
- filename: options.filename,
1016
- type: processorType,
1017
- processor: processorFn.toString()
1018
- }
1019
- );
1020
- } else if (result.map?.mappings === "") {
1021
- invalidMap = true;
1022
- log.warn.enabled && log.warn.once(
1023
- `preprocessor at index ${i} returned an invalid empty sourcemap for ${processorType} transform`,
1024
- {
1025
- filename: options.filename,
1026
- type: processorType,
1027
- processor: processorFn.toString()
1028
- }
1029
- );
1030
- }
1031
- if (invalidMap) {
1032
- try {
1033
- const map = await buildSourceMap(options.content, result.code, options.filename);
1034
- if (map) {
1035
- log.debug.enabled && log.debug(
1036
- `adding generated sourcemap to preprocesor result for ${options.filename}`
1037
- );
1038
- result.map = map;
1039
- }
1040
- } catch (e) {
1041
- log.error(`failed to build sourcemap`, e);
1042
- }
1043
- }
1044
- }
1045
- return result;
1046
- };
1047
- }
1048
- return wrapper;
1049
- }
1050
-
1051
1054
  // src/utils/options.ts
1052
1055
  var import_deepmerge = __toESM(require("deepmerge"), 1);
1053
1056
  var import_vitefu3 = require("vitefu");
1054
1057
 
1055
1058
  // src/utils/dependencies.ts
1056
- var import_path3 = __toESM(require("path"), 1);
1059
+ var import_path5 = __toESM(require("path"), 1);
1057
1060
  var import_promises = __toESM(require("fs/promises"), 1);
1058
1061
  var import_vitefu = require("vitefu");
1059
1062
  async function resolveDependencyData(dep, parent) {
@@ -1062,7 +1065,7 @@ async function resolveDependencyData(dep, parent) {
1062
1065
  return void 0;
1063
1066
  try {
1064
1067
  return {
1065
- dir: import_path3.default.dirname(depDataPath),
1068
+ dir: import_path5.default.dirname(depDataPath),
1066
1069
  pkg: JSON.parse(await import_promises.default.readFile(depDataPath, "utf-8"))
1067
1070
  };
1068
1071
  } catch {
@@ -1117,7 +1120,7 @@ function isCommonDepWithoutSvelteField(dependency) {
1117
1120
  // src/utils/vite-plugin-svelte-stats.ts
1118
1121
  var import_vitefu2 = require("vitefu");
1119
1122
  var import_fs3 = require("fs");
1120
- var import_path4 = require("path");
1123
+ var import_path6 = require("path");
1121
1124
  var import_perf_hooks = require("perf_hooks");
1122
1125
  var import_vite3 = require("vite");
1123
1126
  var defaultCollectionOptions = {
@@ -1159,7 +1162,7 @@ function formatPackageStats(pkgStats) {
1159
1162
  }
1160
1163
  async function getClosestNamedPackage(file) {
1161
1164
  let name = "$unknown";
1162
- let path9 = await (0, import_vitefu2.findClosestPkgJsonPath)(file, (pkgPath) => {
1165
+ let path11 = await (0, import_vitefu2.findClosestPkgJsonPath)(file, (pkgPath) => {
1163
1166
  const pkg = JSON.parse((0, import_fs3.readFileSync)(pkgPath, "utf-8"));
1164
1167
  if (pkg.name != null) {
1165
1168
  name = pkg.name;
@@ -1167,8 +1170,8 @@ async function getClosestNamedPackage(file) {
1167
1170
  }
1168
1171
  return false;
1169
1172
  });
1170
- path9 = (0, import_vite3.normalizePath)((0, import_path4.dirname)(path9 ?? file)) + "/";
1171
- return { name, path: path9 };
1173
+ path11 = (0, import_vite3.normalizePath)((0, import_path6.dirname)(path11 ?? file)) + "/";
1174
+ return { name, path: path11 };
1172
1175
  }
1173
1176
  var VitePluginSvelteStats = class {
1174
1177
  constructor() {
@@ -1510,9 +1513,12 @@ function handleDeprecatedOptions(options) {
1510
1513
  "experimental.prebundleSvelteLibraries is no longer experimental and has moved to prebundleSvelteLibraries"
1511
1514
  );
1512
1515
  }
1516
+ if (options.experimental?.generateMissingPreprocessorSourcemaps) {
1517
+ log.warn("experimental.generateMissingPreprocessorSourcemaps has been removed.");
1518
+ }
1513
1519
  }
1514
1520
  function resolveViteRoot(viteConfig) {
1515
- return (0, import_vite4.normalizePath)(viteConfig.root ? import_path5.default.resolve(viteConfig.root) : process.cwd());
1521
+ return (0, import_vite4.normalizePath)(viteConfig.root ? import_path7.default.resolve(viteConfig.root) : process.cwd());
1516
1522
  }
1517
1523
  async function buildExtraViteConfig(options, config) {
1518
1524
  const extraViteConfig = {
@@ -1669,6 +1675,13 @@ function buildExtraConfigForSvelte(config) {
1669
1675
  return { optimizeDeps: { include, exclude }, ssr: { noExternal, external } };
1670
1676
  }
1671
1677
  function patchResolvedViteConfig(viteConfig, options) {
1678
+ if (options.preprocess) {
1679
+ for (const preprocessor of arraify(options.preprocess)) {
1680
+ if (preprocessor.style && "__resolvedConfig" in preprocessor.style) {
1681
+ preprocessor.style.__resolvedConfig = viteConfig;
1682
+ }
1683
+ }
1684
+ }
1672
1685
  const facadeEsbuildSveltePlugin = viteConfig.optimizeDeps.esbuildOptions?.plugins?.find(
1673
1686
  (plugin) => plugin.name === facadeEsbuildSveltePluginName
1674
1687
  );
@@ -1676,10 +1689,13 @@ function patchResolvedViteConfig(viteConfig, options) {
1676
1689
  Object.assign(facadeEsbuildSveltePlugin, esbuildSveltePlugin(options));
1677
1690
  }
1678
1691
  }
1692
+ function arraify(value) {
1693
+ return Array.isArray(value) ? value : [value];
1694
+ }
1679
1695
 
1680
1696
  // src/utils/watch.ts
1681
1697
  var import_fs4 = __toESM(require("fs"), 1);
1682
- var import_path6 = __toESM(require("path"), 1);
1698
+ var import_path8 = __toESM(require("path"), 1);
1683
1699
  function setupWatchers(options, cache, requestParser) {
1684
1700
  const { server, configFile: svelteConfigFile } = options;
1685
1701
  if (!server) {
@@ -1726,7 +1742,7 @@ function setupWatchers(options, cache, requestParser) {
1726
1742
  unlink: [removeUnlinkedFromCache, emitChangeEventOnDependants]
1727
1743
  };
1728
1744
  if (svelteConfigFile !== false) {
1729
- const possibleSvelteConfigs = knownSvelteConfigNames.map((cfg) => import_path6.default.join(root, cfg));
1745
+ const possibleSvelteConfigs = knownSvelteConfigNames.map((cfg) => import_path8.default.join(root, cfg));
1730
1746
  const restartOnConfigAdd = (filename) => {
1731
1747
  if (possibleSvelteConfigs.includes(filename)) {
1732
1748
  triggerViteRestart(filename);
@@ -1752,12 +1768,12 @@ function setupWatchers(options, cache, requestParser) {
1752
1768
  }
1753
1769
  function ensureWatchedFile(watcher, file, root) {
1754
1770
  if (file && !file.startsWith(root + "/") && !file.includes("\0") && import_fs4.default.existsSync(file)) {
1755
- watcher.add(import_path6.default.resolve(file));
1771
+ watcher.add(import_path8.default.resolve(file));
1756
1772
  }
1757
1773
  }
1758
1774
 
1759
1775
  // src/utils/resolve.ts
1760
- var import_path7 = __toESM(require("path"), 1);
1776
+ var import_path9 = __toESM(require("path"), 1);
1761
1777
  var import_module2 = require("module");
1762
1778
  async function resolveViaPackageJsonSvelte(importee, importer, cache) {
1763
1779
  if (importer && isBareImport(importee) && !isNodeInternal(importee) && !isCommonDepWithoutSvelteField(importee)) {
@@ -1769,7 +1785,7 @@ async function resolveViaPackageJsonSvelte(importee, importer, cache) {
1769
1785
  if (pkgData) {
1770
1786
  const { pkg, dir } = pkgData;
1771
1787
  if (pkg.svelte) {
1772
- const result = import_path7.default.resolve(dir, pkg.svelte);
1788
+ const result = import_path9.default.resolve(dir, pkg.svelte);
1773
1789
  cache.setResolvedSvelteField(importee, importer, result);
1774
1790
  return result;
1775
1791
  }
@@ -1780,7 +1796,7 @@ function isNodeInternal(importee) {
1780
1796
  return importee.startsWith("node:") || import_module2.builtinModules.includes(importee);
1781
1797
  }
1782
1798
  function isBareImport(importee) {
1783
- if (!importee || importee[0] === "." || importee[0] === "\0" || importee.includes(":") || import_path7.default.isAbsolute(importee)) {
1799
+ if (!importee || importee[0] === "." || importee[0] === "\0" || importee.includes(":") || import_path9.default.isAbsolute(importee)) {
1784
1800
  return false;
1785
1801
  }
1786
1802
  const parts = importee.split("/");
@@ -1796,7 +1812,7 @@ function isBareImport(importee) {
1796
1812
 
1797
1813
  // src/utils/optimizer.ts
1798
1814
  var import_fs5 = require("fs");
1799
- var import_path8 = __toESM(require("path"), 1);
1815
+ var import_path10 = __toESM(require("path"), 1);
1800
1816
  var PREBUNDLE_SENSITIVE_OPTIONS = [
1801
1817
  "compilerOptions",
1802
1818
  "configFile",
@@ -1807,7 +1823,7 @@ var PREBUNDLE_SENSITIVE_OPTIONS = [
1807
1823
  ];
1808
1824
  async function saveSvelteMetadata(cacheDir, options) {
1809
1825
  const svelteMetadata = generateSvelteMetadata(options);
1810
- const svelteMetadataPath = import_path8.default.resolve(cacheDir, "_svelte_metadata.json");
1826
+ const svelteMetadataPath = import_path10.default.resolve(cacheDir, "_svelte_metadata.json");
1811
1827
  const currentSvelteMetadata = JSON.stringify(svelteMetadata, (_, value) => {
1812
1828
  return typeof value === "function" ? value.toString() : value;
1813
1829
  });
@@ -1830,7 +1846,7 @@ function generateSvelteMetadata(options) {
1830
1846
 
1831
1847
  // src/ui/inspector/plugin.ts
1832
1848
  var import_vite5 = require("vite");
1833
- var import_path9 = __toESM(require("path"), 1);
1849
+ var import_path11 = __toESM(require("path"), 1);
1834
1850
  var import_url2 = require("url");
1835
1851
  var import_fs6 = __toESM(require("fs"), 1);
1836
1852
 
@@ -1857,7 +1873,7 @@ var defaultInspectorOptions = {
1857
1873
  customStyles: true
1858
1874
  };
1859
1875
  function getInspectorPath() {
1860
- const pluginPath = (0, import_vite5.normalizePath)(import_path9.default.dirname((0, import_url2.fileURLToPath)(importMetaUrl)));
1876
+ const pluginPath = (0, import_vite5.normalizePath)(import_path11.default.dirname((0, import_url2.fileURLToPath)(importMetaUrl)));
1861
1877
  return pluginPath.replace(/\/vite-plugin-svelte\/dist$/, "/vite-plugin-svelte/src/ui/inspector/");
1862
1878
  }
1863
1879
  function svelteInspector() {
@@ -1883,7 +1899,7 @@ function svelteInspector() {
1883
1899
  disabled = true;
1884
1900
  } else {
1885
1901
  if (vps.api.options.kit && !inspectorOptions.appendTo) {
1886
- const out_dir = import_path9.default.basename(vps.api.options.kit.outDir || ".svelte-kit");
1902
+ const out_dir = import_path11.default.basename(vps.api.options.kit.outDir || ".svelte-kit");
1887
1903
  inspectorOptions.appendTo = `${out_dir}/generated/root.svelte`;
1888
1904
  }
1889
1905
  appendTo = inspectorOptions.appendTo;
@@ -2033,8 +2049,8 @@ var VitePluginSvelteCache = class {
2033
2049
  getError(svelteRequest) {
2034
2050
  return this._errors.get(svelteRequest.normalizedFilename);
2035
2051
  }
2036
- getDependants(path9) {
2037
- const dependants = this._dependants.get(path9);
2052
+ getDependants(path11) {
2053
+ const dependants = this._dependants.get(path11);
2038
2054
  return dependants ? [...dependants] : [];
2039
2055
  }
2040
2056
  getResolvedSvelteField(name, importer) {
@@ -2051,6 +2067,97 @@ var VitePluginSvelteCache = class {
2051
2067
  }
2052
2068
  };
2053
2069
 
2070
+ // src/utils/load-raw.ts
2071
+ var import_fs7 = __toESM(require("fs"), 1);
2072
+ async function loadRaw(svelteRequest, compileSvelte2, options) {
2073
+ const { id, filename, query } = svelteRequest;
2074
+ let compileData;
2075
+ const source = import_fs7.default.readFileSync(filename, "utf-8");
2076
+ try {
2077
+ svelteRequest.ssr = query.compilerOptions?.generate === "ssr";
2078
+ const type = query.type;
2079
+ compileData = await compileSvelte2(svelteRequest, source, {
2080
+ ...options,
2081
+ compilerOptions: {
2082
+ dev: false,
2083
+ css: false,
2084
+ hydratable: false,
2085
+ enableSourcemap: query.sourcemap ? {
2086
+ js: type === "script" || type === "all",
2087
+ css: type === "style" || type === "all"
2088
+ } : false,
2089
+ ...svelteRequest.query.compilerOptions
2090
+ },
2091
+ hot: false,
2092
+ emitCss: true
2093
+ });
2094
+ } catch (e) {
2095
+ throw toRollupError(e, options);
2096
+ }
2097
+ let result;
2098
+ if (query.type === "style") {
2099
+ result = compileData.compiled.css;
2100
+ } else if (query.type === "script") {
2101
+ result = compileData.compiled.js;
2102
+ } else if (query.type === "preprocessed") {
2103
+ result = compileData.preprocessed;
2104
+ } else if (query.type === "all" && query.raw) {
2105
+ return allToRawExports(compileData, source);
2106
+ } else {
2107
+ throw new Error(
2108
+ `invalid "type=${query.type}" in ${id}. supported are script, style, preprocessed, all`
2109
+ );
2110
+ }
2111
+ if (query.direct) {
2112
+ const supportedDirectTypes = ["script", "style"];
2113
+ if (!supportedDirectTypes.includes(query.type)) {
2114
+ throw new Error(
2115
+ `invalid "type=${query.type}" combined with direct in ${id}. supported are: ${supportedDirectTypes.join(", ")}`
2116
+ );
2117
+ }
2118
+ log.debug(`load returns direct result for ${id}`);
2119
+ let directOutput = result.code;
2120
+ if (query.sourcemap && result.map?.toUrl) {
2121
+ const map = `sourceMappingURL=${result.map.toUrl()}`;
2122
+ if (query.type === "style") {
2123
+ directOutput += `
2124
+
2125
+ /*# ${map} */
2126
+ `;
2127
+ } else if (query.type === "script") {
2128
+ directOutput += `
2129
+
2130
+ //# ${map}
2131
+ `;
2132
+ }
2133
+ }
2134
+ return directOutput;
2135
+ } else if (query.raw) {
2136
+ log.debug(`load returns raw result for ${id}`);
2137
+ return toRawExports(result);
2138
+ } else {
2139
+ throw new Error(`invalid raw mode in ${id}, supported are raw, direct`);
2140
+ }
2141
+ }
2142
+ function allToRawExports(compileData, source) {
2143
+ const exports = {
2144
+ ...compileData,
2145
+ ...compileData.compiled,
2146
+ source
2147
+ };
2148
+ delete exports.compiled;
2149
+ delete exports.filename;
2150
+ return toRawExports(exports);
2151
+ }
2152
+ function toRawExports(object) {
2153
+ let exports = Object.entries(object).filter(([key, value]) => typeof value !== "function").sort(([a], [b]) => a < b ? -1 : a === b ? 0 : 1).map(([key, value]) => `export const ${key}=${JSON.stringify(value)}`).join("\n") + "\n";
2154
+ if (Object.prototype.hasOwnProperty.call(object, "code")) {
2155
+ exports += `export default code
2156
+ `;
2157
+ }
2158
+ return exports;
2159
+ }
2160
+
2054
2161
  // src/index.ts
2055
2162
  function svelte(inlineOptions) {
2056
2163
  if (process.env.DEBUG != null) {
@@ -2101,21 +2208,25 @@ function svelte(inlineOptions) {
2101
2208
  options.server = server;
2102
2209
  setupWatchers(options, cache, requestParser);
2103
2210
  },
2104
- load(id, opts) {
2211
+ async load(id, opts) {
2105
2212
  const ssr = !!opts?.ssr;
2106
2213
  const svelteRequest = requestParser(id, !!ssr);
2107
2214
  if (svelteRequest) {
2108
- const { filename, query } = svelteRequest;
2109
- if (query.svelte && query.type === "style") {
2110
- const css = cache.getCSS(svelteRequest);
2111
- if (css) {
2112
- log.debug(`load returns css for ${filename}`);
2113
- return css;
2215
+ const { filename, query, raw } = svelteRequest;
2216
+ if (raw) {
2217
+ return loadRaw(svelteRequest, compileSvelte2, options);
2218
+ } else {
2219
+ if (query.svelte && query.type === "style") {
2220
+ const css = cache.getCSS(svelteRequest);
2221
+ if (css) {
2222
+ log.debug(`load returns css for ${filename}`);
2223
+ return css;
2224
+ }
2225
+ }
2226
+ if (viteConfig.assetsInclude(filename)) {
2227
+ log.debug(`load returns raw content for ${filename}`);
2228
+ return import_fs8.default.readFileSync(filename, "utf-8");
2114
2229
  }
2115
- }
2116
- if (viteConfig.assetsInclude(filename)) {
2117
- log.debug(`load returns raw content for ${filename}`);
2118
- return import_fs7.default.readFileSync(filename, "utf-8");
2119
2230
  }
2120
2231
  }
2121
2232
  },
@@ -2123,12 +2234,10 @@ function svelte(inlineOptions) {
2123
2234
  const ssr = !!opts?.ssr;
2124
2235
  const svelteRequest = requestParser(importee, ssr);
2125
2236
  if (svelteRequest?.query.svelte) {
2126
- if (svelteRequest.query.type === "style") {
2237
+ if (svelteRequest.query.type === "style" && !svelteRequest.raw) {
2127
2238
  log.debug(`resolveId resolved virtual css module ${svelteRequest.cssId}`);
2128
2239
  return svelteRequest.cssId;
2129
2240
  }
2130
- log.debug(`resolveId resolved ${importee}`);
2131
- return importee;
2132
2241
  }
2133
2242
  if (ssr && importee === "svelte") {
2134
2243
  if (!resolvedSvelteSSR) {
@@ -2170,7 +2279,7 @@ function svelte(inlineOptions) {
2170
2279
  async transform(code, id, opts) {
2171
2280
  const ssr = !!opts?.ssr;
2172
2281
  const svelteRequest = requestParser(id, ssr);
2173
- if (!svelteRequest || svelteRequest.query.svelte) {
2282
+ if (!svelteRequest || svelteRequest.query.type === "style" || svelteRequest.raw) {
2174
2283
  return;
2175
2284
  }
2176
2285
  let compileData;
@@ -2221,6 +2330,7 @@ function svelte(inlineOptions) {
2221
2330
  // Annotate the CommonJS export names for ESM import in node:
2222
2331
  0 && (module.exports = {
2223
2332
  loadSvelteConfig,
2224
- svelte
2333
+ svelte,
2334
+ vitePreprocess
2225
2335
  });
2226
2336
  //# sourceMappingURL=index.cjs.map