* @param {URL} canonicalUrl canonical url * @returns {Promise<{ contents: string, syntax: "scss" | "indented" | "css", sourceMapUrl: URL } | null>} load result
(canonicalUrl)
| 586 | * @returns {Promise<{ contents: string, syntax: "scss" | "indented" | "css", sourceMapUrl: URL } | null>} load result |
| 587 | */ |
| 588 | async load(canonicalUrl) { |
| 589 | const ext = path.extname(canonicalUrl.pathname); |
| 590 | |
| 591 | /** @type {"scss" | "indented" | "css"} */ |
| 592 | let syntax; |
| 593 | |
| 594 | if (ext && ext.toLowerCase() === ".scss") { |
| 595 | syntax = "scss"; |
| 596 | } else if (ext && ext.toLowerCase() === ".sass") { |
| 597 | syntax = "indented"; |
| 598 | } else if (ext && ext.toLowerCase() === ".css") { |
| 599 | syntax = "css"; |
| 600 | } else { |
| 601 | // Fallback to default value |
| 602 | syntax = "scss"; |
| 603 | } |
| 604 | |
| 605 | try { |
| 606 | const contents = /** @type {string} */ ( |
| 607 | await new Promise((resolve, reject) => { |
| 608 | // Old version of `enhanced-resolve` supports only path as a string |
| 609 | // TODO simplify in the next major release and pass URL |
| 610 | const canonicalPath = url.fileURLToPath(canonicalUrl); |
| 611 | |
| 612 | loaderContext.fs.readFile( |
| 613 | canonicalPath, |
| 614 | /** |
| 615 | * @param {NodeJS.ErrnoException | null} err error |
| 616 | * @param {Buffer | undefined} content content |
| 617 | * @returns {void} |
| 618 | */ |
| 619 | (err, content) => { |
| 620 | if (err || !content) { |
| 621 | reject(err); |
| 622 | return; |
| 623 | } |
| 624 | |
| 625 | resolve(content.toString("utf8")); |
| 626 | }, |
| 627 | ); |
| 628 | }) |
| 629 | ); |
| 630 | |
| 631 | return { contents, syntax, sourceMapUrl: canonicalUrl }; |
| 632 | } catch { |
| 633 | return null; |
| 634 | } |
| 635 | }, |
| 636 | }; |
| 637 | } |
| 638 |
nothing calls this directly
no test coverage detected
searching dependent graphs…