* @param {string} testId test ID * @param {Options} options options * @param {Context} context context * @returns {{ css: string, map: RawSourceMap }} CSS and source map (if exist)
(testId, options, context = {})
| 13 | * @returns {{ css: string, map: RawSourceMap }} CSS and source map (if exist) |
| 14 | */ |
| 15 | async function getCodeFromSass(testId, options, context = {}) { |
| 16 | const loaderOptions = { ...options }; |
| 17 | const sassOptions = |
| 18 | typeof loaderOptions.sassOptions === "function" |
| 19 | ? loaderOptions.sassOptions({ mock: true }) || {} |
| 20 | : { ...options.sassOptions }; |
| 21 | |
| 22 | if (sassOptions.data) { |
| 23 | delete sassOptions.data; |
| 24 | } |
| 25 | |
| 26 | const { implementation } = loaderOptions; |
| 27 | |
| 28 | delete loaderOptions.implementation; |
| 29 | |
| 30 | const isSass = /\.sass$/i.test(testId); |
| 31 | |
| 32 | const isIndentedSyntax = isSass; |
| 33 | |
| 34 | sassOptions.syntax = isIndentedSyntax ? "indented" : "scss"; |
| 35 | |
| 36 | const URL = pathToFileURL(path.resolve(__dirname, "..", testId)); |
| 37 | |
| 38 | sassOptions.url = URL; |
| 39 | |
| 40 | sassOptions.data = fs.readFileSync(URL).toString(); |
| 41 | |
| 42 | if (typeof loaderOptions.additionalData === "string") { |
| 43 | sassOptions.data = `$prepended-data: hotpink${ |
| 44 | isIndentedSyntax ? "\n" : ";" |
| 45 | }\n${sassOptions.data}`; |
| 46 | } else if (typeof loaderOptions.additionalData === "function") { |
| 47 | sassOptions.data = await loaderOptions.additionalData(sassOptions.data, {}); |
| 48 | } |
| 49 | |
| 50 | const loaderContext = { |
| 51 | addDependency() {}, |
| 52 | addContextDependency() {}, |
| 53 | addMissingDependency() {}, |
| 54 | fs, |
| 55 | resourcePath: path.resolve(__dirname, "..", "scss", "language.scss"), |
| 56 | }; |
| 57 | |
| 58 | const getResolveContext = () => ({ |
| 59 | fileDependencies: { |
| 60 | add: (dep) => loaderContext.addDependency(dep), |
| 61 | }, |
| 62 | contextDependencies: { |
| 63 | add: (dep) => loaderContext.addContextDependency(dep), |
| 64 | }, |
| 65 | missingDependencies: { |
| 66 | add: (dep) => loaderContext.addMissingDependency(dep), |
| 67 | }, |
| 68 | }); |
| 69 | |
| 70 | const resolverFactory = new ResolverFactory(); |
| 71 | const syntax = context.syntax || "scss"; |
| 72 | const resolver = resolverFactory.get("normal", { |
no test coverage detected
searching dependent graphs…