UNPKG

rollup-plugin-sass

Version:
164 lines 8.82 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const util_1 = require("util"); const fs = __importStar(require("fs")); const path_1 = __importDefault(require("path")); const url_1 = require("url"); const sass = __importStar(require("sass")); const pluginutils_1 = require("@rollup/pluginutils"); const getImporterList_1 = require("./utils/getImporterList"); const processRenderResponse_1 = require("./utils/processRenderResponse"); const insertStyle_1 = __importDefault(require("./insertStyle")); const MATCH_SASS_FILENAME_RE = /\.sass$/; const defaultIncludes = ['**/*.sass', '**/*.scss']; const defaultExcludes = 'node_modules/**'; module.exports = function plugin(options = {}) { const pluginOptions = Object.assign({ runtime: sass, output: false, insert: false, }, options); const { include = defaultIncludes, exclude = defaultExcludes, runtime: sassRuntime, } = pluginOptions; const filter = (0, pluginutils_1.createFilter)(include, exclude); const pluginState = { styles: [], styleMaps: {}, }; return { name: 'rollup-plugin-sass', resolveId(source) { if (source === processRenderResponse_1.INSERT_STYLE_ID) { return processRenderResponse_1.INSERT_STYLE_ID; } }, load(id) { if (id === processRenderResponse_1.INSERT_STYLE_ID) { return `export default ${insertStyle_1.default.toString()}`; } }, transform(code, filePath) { return __awaiter(this, void 0, void 0, function* () { if (!filter(filePath)) { return; } const paths = [path_1.default.dirname(filePath), process.cwd()]; const { styleMaps, styles } = pluginState; if (!styleMaps[filePath]) { const mapEntry = { id: filePath, content: '', }; styleMaps[filePath] = mapEntry; styles.push(mapEntry); } switch (pluginOptions.api) { case 'modern': { const { options: incomingSassOptions } = pluginOptions; const compileOptions = Object.assign(Object.assign({}, incomingSassOptions), { syntax: path_1.default.extname(filePath) === '.sass' ? 'indented' : 'scss', loadPaths: ((incomingSassOptions === null || incomingSassOptions === void 0 ? void 0 : incomingSassOptions.loadPaths) || []).concat(paths), importers: (0, getImporterList_1.getImporterListModern)(incomingSassOptions === null || incomingSassOptions === void 0 ? void 0 : incomingSassOptions.importers), url: (0, url_1.pathToFileURL)(filePath), sourceMap: true }); const source = (incomingSassOptions === null || incomingSassOptions === void 0 ? void 0 : incomingSassOptions.data) ? `${incomingSassOptions.data}${code}` : code; const compileResult = yield sassRuntime.compileStringAsync(source, compileOptions); const codeResult = yield (0, processRenderResponse_1.processRenderResponse)(pluginOptions, filePath, pluginState, compileResult.css.toString().trim()); const { loadedUrls, sourceMap } = compileResult; loadedUrls.forEach((filePath) => { this.addWatchFile((0, url_1.fileURLToPath)(filePath)); }); return { code: codeResult || '', map: sourceMap ? sourceMap : undefined, }; } case 'legacy': default: { const { options: incomingSassOptions } = pluginOptions; const renderOptions = Object.assign(Object.assign({}, incomingSassOptions), { file: filePath, data: (incomingSassOptions === null || incomingSassOptions === void 0 ? void 0 : incomingSassOptions.data) && `${incomingSassOptions.data}${code}`, indentedSyntax: MATCH_SASS_FILENAME_RE.test(filePath), includePaths: ((incomingSassOptions === null || incomingSassOptions === void 0 ? void 0 : incomingSassOptions.includePaths) || []).concat(paths), importer: (0, getImporterList_1.getImporterListLegacy)(incomingSassOptions === null || incomingSassOptions === void 0 ? void 0 : incomingSassOptions.importer) }); const res = yield (0, util_1.promisify)(sassRuntime.render.bind(sassRuntime))(renderOptions); const codeResult = yield (0, processRenderResponse_1.processRenderResponse)(pluginOptions, filePath, pluginState, res.css.toString().trim()); res.stats.includedFiles.forEach((filePath) => { this.addWatchFile(filePath); }); return { code: codeResult || '', map: { mappings: res.map ? res.map.toString() : '' }, }; } } }); }, generateBundle(outputOptions, _, isWrite) { return __awaiter(this, void 0, void 0, function* () { const { styles } = pluginState; const { output, insert } = pluginOptions; if (!isWrite || (!insert && (!styles.length || output === false))) { return; } const css = styles.map((style) => style.content).join(''); if (typeof output === 'string') { yield fs.promises.mkdir(path_1.default.dirname(output), { recursive: true }); yield fs.promises.writeFile(output, css); return; } if (typeof output === 'function') { output(css, styles); return; } if (!insert && outputOptions.file && output === true) { let dest = outputOptions.file; if (dest.endsWith('.js') || dest.endsWith('.ts')) { dest = dest.slice(0, -3); } dest = `${dest}.css`; yield fs.promises.mkdir(path_1.default.dirname(dest), { recursive: true }); yield fs.promises.writeFile(dest, css); return; } }); }, }; }; //# sourceMappingURL=index.js.map