vite-plugin-react18-pages
Version:
<p> <a href="https://www.npmjs.com/package/vite-plugin-react-pages" target="_blank" rel="noopener"><img src="https://img.shields.io/npm/v/vite-plugin-react-pages.svg" alt="npm package" /></a> </p>
42 lines • 1.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileTextMdxPlugin = void 0;
const unist_util_visit_1 = __importDefault(require("unist-util-visit"));
function FileTextMdxPlugin() {
return transformer;
function transformer(tree, file) {
const addImports = [];
(0, unist_util_visit_1.default)(tree, 'jsx', (child, index, parent) => {
const regexp = /<FileText\s+src=["'](.*?)["']\s+syntax=["'](.*?)["']/;
const match = child.value.match(regexp);
if (match) {
const [, src, syntax] = match;
const nextIndex = addImports.length;
const varName = `_fileText${nextIndex}`;
addImports.push(`import ${varName} from "${src}?raw";`);
child.value = `<FileText text={${varName}} syntax="${syntax}" />`;
}
else {
const basicRegexp = /<FileText\s+(?:.+?\s)?src=/;
const basicMatch = child.value.match(basicRegexp);
if (basicMatch) {
// detect invalid usage of FileText
// for example: props.syntax missing
throw new Error(`Invalid usage of <FileText />: ${child.value}.
Correct Syntax: <FileText src="./path/to/file" syntax="ts|tsx|text" />`);
}
}
});
tree.children.unshift(...addImports.map((importStr) => {
return {
type: 'import',
value: importStr,
};
}));
}
}
exports.FileTextMdxPlugin = FileTextMdxPlugin;
//# sourceMappingURL=mdx-plugin-file-text.js.map