@@ -2,7 +2,7 @@ const path = require('path');
2
2
const fs = require ( 'fs' ) ;
3
3
const { getOptions } = require ( 'loader-utils' ) ;
4
4
const { buildMakeHot } = require ( './lib/make-hot.js' ) ;
5
- const { compile , preprocess , VERSION } = require ( 'svelte/compiler' ) ;
5
+ const svelte = require ( 'svelte/compiler' ) ;
6
6
7
7
function posixify ( file ) {
8
8
return file . replace ( / [ / \\ ] / g, '/' ) ;
55
55
56
56
let warned = false ;
57
57
58
+ function getMajor ( ) {
59
+ return Number ( svelte . VERSION . split ( '.' ) [ 0 ] )
60
+ }
61
+
58
62
module . exports = function ( source , map ) {
59
63
this . cacheable ( ) ;
60
64
@@ -70,13 +74,37 @@ module.exports = function(source, map) {
70
74
71
75
const isServer = this . target === 'node' || ( options . compilerOptions && options . compilerOptions . generate == 'ssr' ) ;
72
76
const isProduction = this . minimize || process . env . NODE_ENV === 'production' ;
73
-
74
77
const compileOptions = {
75
78
filename : this . resourcePath ,
76
- css : VERSION [ 0 ] === '3' ? ! options . emitCss : ( options . emitCss ? 'external' : 'injected' ) ,
79
+ css : getMajor ( ) === 3 ? ! options . emitCss : ( options . emitCss ? 'external' : 'injected' ) ,
77
80
...options . compilerOptions
78
81
} ;
79
- if ( VERSION [ 0 ] === '3' ) {
82
+ const handleWarning = warning => this . emitWarning ( new Error ( warning ) ) ;
83
+
84
+ if ( getMajor ( ) >= 5 && ( this . resourcePath . endsWith ( '.svelte.js' ) || this . resourcePath . endsWith ( '.svelte.ts' ) ) ) {
85
+ try {
86
+ const { js, warnings } = svelte . compileModule (
87
+ source ,
88
+ { filename : this . resourcePath , dev : compileOptions . dev , generate : compileOptions . generate }
89
+ ) ;
90
+
91
+ warnings . forEach (
92
+ options . onwarn
93
+ ? warning => options . onwarn ( warning , handleWarning )
94
+ : handleWarning
95
+ ) ;
96
+
97
+ callback ( null , js . code , js . map ) ;
98
+ } catch ( err ) {
99
+ // wrap error to provide correct
100
+ // context when logging to console
101
+ callback ( new Error ( `${ err . name } : ${ err . toString ( ) } ` ) ) ;
102
+ }
103
+
104
+ return ;
105
+ }
106
+
107
+ if ( getMajor ( ) === 3 ) {
80
108
compileOptions . format = ( options . compilerOptions && options . compilerOptions . format ) || 'esm' ;
81
109
} else {
82
110
if ( options . compilerOptions && options . compilerOptions . format && ! warned ) {
@@ -86,12 +114,10 @@ module.exports = function(source, map) {
86
114
}
87
115
}
88
116
89
- const handleWarning = warning => this . emitWarning ( new Error ( warning ) ) ;
90
-
91
117
options . preprocess = options . preprocess || { } ;
92
118
options . preprocess . filename = compileOptions . filename ;
93
119
94
- preprocess ( source , options . preprocess ) . then ( processed => {
120
+ svelte . preprocess ( source , options . preprocess ) . then ( processed => {
95
121
if ( processed . dependencies && this . addDependency ) {
96
122
for ( let dependency of processed . dependencies ) {
97
123
this . addDependency ( dependency ) ;
@@ -100,7 +126,7 @@ module.exports = function(source, map) {
100
126
101
127
if ( processed . map ) compileOptions . sourcemap = processed . map ;
102
128
103
- const compiled = compile ( processed . toString ( ) , compileOptions ) ;
129
+ const compiled = svelte . compile ( processed . toString ( ) , compileOptions ) ;
104
130
let { js, css, warnings } = compiled ;
105
131
106
132
if ( ! js . map . sourcesContent ) {
@@ -121,7 +147,7 @@ module.exports = function(source, map) {
121
147
js . code = makeHot ( id , js . code , hotOptions , compiled , source , compileOptions ) ;
122
148
}
123
149
124
- if ( options . emitCss && css . code ) {
150
+ if ( options . emitCss && css && css . code ) {
125
151
const resource = posixify ( compileOptions . filename ) ;
126
152
const cssPath = `${ resource } .${ index ++ } .css` ;
127
153
css . code += '\n/*# sourceMappingURL=' + css . map . toUrl ( ) + '*/' ;
0 commit comments