@cxing/vitejs-plugin-inject-css
Version:
A plugin for ViteJs library builds to inject css modules
135 lines (130 loc) • 4.49 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, copyDefault, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toESM = (module2, isNodeMode) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
var __toCommonJS = /* @__PURE__ */ ((cache) => {
return (module2, temp) => {
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
};
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
// src/index.js
var src_exports = {};
__export(src_exports, {
default: () => libInjectCss
});
var import_fs = __toESM(require("fs"));
var import_path = require("path");
var import_hash_generator = __toESM(require("../node_modules/hash-generator/index.js"));
var minify = require("../node_modules/@node-minify/core/lib/core.js");
var cleanCSS = require("../node_modules/@node-minify/clean-css/lib/clean-css.js");
var fileRegex = /\.module\.(scss|less|css)(\?used)?$/;
var injector = `function styleInject(css, ref) {
if ( ref === void 0 ) ref = {};
var insertAt = ref.insertAt;
if (!css || typeof document === 'undefined') { return; }
var head = document.head || document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
if (insertAt === 'top') {
if (head.firstChild) {
head.insertBefore(style, head.firstChild);
} else {
head.appendChild(style);
}
} else {
head.appendChild(style);
}
if (style.styleSheet) {
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
}`;
var injectCode = (value) => {
const codeId = (0, import_hash_generator.default)(5);
return `const css_${codeId} = "${value}";
styleInject(css_${codeId});
`;
};
var template = `console.warn("__INJECT__")`;
function buildOutput(extracts) {
const out = [];
extracts.forEach((value) => {
out.push(injectCode(value));
});
return `
${injector}
${out.join("")}`;
}
var viteConfig;
var css = [];
function libInjectCss() {
const extracted = /* @__PURE__ */ new Map();
return {
name: "lib-inject-css",
apply: "build",
configResolved(resolvedConfig) {
viteConfig = resolvedConfig;
},
async transform(code, id) {
if (fileRegex.test(id)) {
const minified = await minify({
compressor: cleanCSS,
content: code
});
extracted.set(id, minified);
css.push(code);
return {
code: ""
};
}
if (id.includes(viteConfig.build.lib.entry)) {
return {
code: `${code}
${template}`
};
}
return null;
},
async writeBundle(_, bundle) {
for (const file of Object.entries(bundle)) {
const { root } = viteConfig;
const outDir = viteConfig.build.outDir || "dist";
const fileName = file[0];
const filePath = (0, import_path.resolve)(root, outDir, fileName);
try {
let data = import_fs.default.readFileSync(filePath, {
encoding: "utf8"
});
if (data.includes(template)) {
data = data.replace(template, buildOutput(extracted));
}
import_fs.default.writeFileSync(filePath, data);
} catch (e) {
console.error(e);
}
}
}
};
}
module.exports = __toCommonJS(src_exports);
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {});