@@ -61,29 +61,16 @@ function viteScript() {
61
61
* @returns {{ style: import('svelte/compiler').Preprocessor } }
62
62
*/
63
63
function viteStyle ( config = { } ) {
64
- /** @type {CssTransform } */
65
- let transform ;
64
+ /** @type {Promise<CssTransform> | CssTransform } */
65
+ let cssTransform ;
66
66
/** @type {import('svelte/compiler').Preprocessor } */
67
67
const style = async ( { attributes, content, filename = '' } ) => {
68
68
const ext = attributes . lang ? `.${ attributes . lang } ` : '.css' ;
69
69
if ( attributes . lang && ! isCSSRequest ( ext ) ) return ;
70
- if ( ! transform ) {
71
- /** @type {import('vite').ResolvedConfig } */
72
- let resolvedConfig ;
73
- // @ts -expect-error special prop added if running in v-p-s
74
- if ( style . __resolvedConfig ) {
75
- // @ts -expect-error
76
- resolvedConfig = style . __resolvedConfig ;
77
- } else if ( isResolvedConfig ( config ) ) {
78
- resolvedConfig = config ;
79
- } else {
80
- resolvedConfig = await resolveConfig (
81
- config ,
82
- process . env . NODE_ENV === 'production' ? 'build' : 'serve'
83
- ) ;
84
- }
85
- transform = getCssTransformFn ( resolvedConfig ) ;
70
+ if ( ! cssTransform ) {
71
+ cssTransform = createCssTransform ( style , config ) . then ( ( t ) => ( cssTransform = t ) ) ;
86
72
}
73
+ const transform = await cssTransform ;
87
74
const suffix = `${ lang_sep } ${ ext } ` ;
88
75
const moduleId = `${ filename } ${ suffix } ` ;
89
76
const { code, map, deps } = await transform ( content , moduleId ) ;
@@ -102,19 +89,27 @@ function viteStyle(config = {}) {
102
89
}
103
90
104
91
/**
105
- * @param {import('vite').ResolvedConfig } config
106
- * @returns {CssTransform }
92
+ * @param {import('svelte/compiler').Preprocessor } style
93
+ * @param {import('vite').ResolvedConfig | import('vite').InlineConfig } config
94
+ * @returns {Promise<CssTransform> }
107
95
*/
108
- function getCssTransformFn ( config ) {
96
+ async function createCssTransform ( style , config ) {
97
+ /** @type {import('vite').ResolvedConfig } */
98
+ let resolvedConfig ;
99
+ // @ts -expect-error special prop added if running in v-p-s
100
+ if ( style . __resolvedConfig ) {
101
+ // @ts -expect-error
102
+ resolvedConfig = style . __resolvedConfig ;
103
+ } else if ( config . inlineConfig != null ) {
104
+ // passed config is already resolved
105
+ resolvedConfig = config ;
106
+ } else {
107
+ resolvedConfig = await resolveConfig (
108
+ config ,
109
+ process . env . NODE_ENV === 'production' ? 'build' : 'serve'
110
+ ) ;
111
+ }
109
112
return async ( code , filename ) => {
110
- return preprocessCSS ( code , filename , config ) ;
113
+ return preprocessCSS ( code , filename , resolvedConfig ) ;
111
114
} ;
112
115
}
113
-
114
- /**
115
- * @param {any } config
116
- * @returns {config is import('vite').ResolvedConfig }
117
- */
118
- function isResolvedConfig ( config ) {
119
- return ! ! config . inlineConfig ;
120
- }
0 commit comments