|
1 | 1 | import fs from "node:fs"; |
2 | 2 | import path from "node:path"; |
3 | 3 |
|
| 4 | +import less from "less"; |
| 5 | + |
4 | 6 | const pathMap = { |
5 | 7 | "some/css.css": path.resolve( |
6 | 8 | __dirname, |
@@ -141,6 +143,37 @@ const pathMap = { |
141 | 143 | "3rd/b.less": path.resolve(__dirname, "..", "fixtures", "3rd", "b.less"), |
142 | 144 | }; |
143 | 145 |
|
| 146 | +class ResolvePlugin extends less.FileManager { |
| 147 | + supports(filename) { |
| 148 | + if (filename[0] === "/" || path.win32.isAbsolute(filename)) { |
| 149 | + return true; |
| 150 | + } |
| 151 | + |
| 152 | + if (this.isPathAbsolute(filename)) { |
| 153 | + return false; |
| 154 | + } |
| 155 | + |
| 156 | + return true; |
| 157 | + } |
| 158 | + |
| 159 | + supportsSync() { |
| 160 | + return false; |
| 161 | + } |
| 162 | + |
| 163 | + async loadFile(filename, ...args) { |
| 164 | + const result = |
| 165 | + pathMap[filename] || path.resolve(__dirname, "..", "fixtures", filename); |
| 166 | + |
| 167 | + return super.loadFile(result, ...args); |
| 168 | + } |
| 169 | +} |
| 170 | + |
| 171 | +class CustomImportPlugin { |
| 172 | + install(lessInstance, pluginManager) { |
| 173 | + pluginManager.addFileManager(new ResolvePlugin()); |
| 174 | + } |
| 175 | +} |
| 176 | + |
144 | 177 | async function getCodeFromLess(testId, options = {}, context = {}) { |
145 | 178 | let pathToFile; |
146 | 179 |
|
@@ -186,40 +219,6 @@ async function getCodeFromLess(testId, options = {}, context = {}) { |
186 | 219 | ...lessOptions, |
187 | 220 | }; |
188 | 221 |
|
189 | | - const less = (await import("less")).default; |
190 | | - |
191 | | - class ResolvePlugin extends less.FileManager { |
192 | | - supports(filename) { |
193 | | - if (filename[0] === "/" || path.win32.isAbsolute(filename)) { |
194 | | - return true; |
195 | | - } |
196 | | - |
197 | | - if (this.isPathAbsolute(filename)) { |
198 | | - return false; |
199 | | - } |
200 | | - |
201 | | - return true; |
202 | | - } |
203 | | - |
204 | | - supportsSync() { |
205 | | - return false; |
206 | | - } |
207 | | - |
208 | | - async loadFile(filename, ...args) { |
209 | | - const result = |
210 | | - pathMap[filename] || |
211 | | - path.resolve(__dirname, "..", "fixtures", filename); |
212 | | - |
213 | | - return super.loadFile(result, ...args); |
214 | | - } |
215 | | - } |
216 | | - |
217 | | - class CustomImportPlugin { |
218 | | - install(lessInstance, pluginManager) { |
219 | | - pluginManager.addFileManager(new ResolvePlugin()); |
220 | | - } |
221 | | - } |
222 | | - |
223 | 222 | mergedOptions.plugins.unshift(new CustomImportPlugin()); |
224 | 223 |
|
225 | 224 | return less.render(data.toString(), mergedOptions); |
|
0 commit comments