kirbyup
Version:
Zero-config bundler for Kirby Panel plugins
35 lines (33 loc) • 1.21 kB
JavaScript
import { multilineCommentsRE, singlelineCommentsRE } from "./utils.js";
import MagicString from "magic-string";
//#region src/node/plugins/glob-import.ts
/**
* Transforms `kirbyup.import(<path>)` to `kirbyup.import(import.meta.glob(<path>, { eager: true }))`
*/
function kirbyupGlobImportPlugin() {
let config;
return {
name: "kirbyup:glob-import",
configResolved(resolvedConfig) {
config = resolvedConfig;
},
async transform(code) {
if (!code.includes("kirbyup.import")) return;
const kirbyupImportRE = /\bkirbyup\.import\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*\)/g;
const noCommentsCode = code.replace(multilineCommentsRE, (m) => " ".repeat(m.length)).replace(singlelineCommentsRE, (m) => " ".repeat(m.length));
let s;
let match;
while (match = kirbyupImportRE.exec(noCommentsCode)) {
const { 0: exp, 1: rawPath, index } = match;
if (!s) s = new MagicString(code);
s.overwrite(index, index + exp.length, `kirbyup.import(import.meta.glob(${rawPath}, { eager: true }))`);
}
if (s) return {
code: s.toString(),
map: config.build.sourcemap ? s.generateMap({ hires: true }) : void 0
};
}
};
}
//#endregion
export { kirbyupGlobImportPlugin as default };