UNPKG

vite-plugin-php-components

Version:
124 lines (119 loc) 4.33 kB
var import_node_module = require("node:module"); var __create = Object.create; var __getProtoOf = Object.getPrototypeOf; var __defProp = Object.defineProperty; var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __hasOwnProp = Object.prototype.hasOwnProperty; var __toESM = (mod, isNodeMode, target) => { target = mod != null ? __create(__getProtoOf(mod)) : {}; const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; for (let key of __getOwnPropNames(mod)) if (!__hasOwnProp.call(to, key)) __defProp(to, key, { get: () => mod[key], enumerable: true }); return to; }; var __moduleCache = /* @__PURE__ */ new WeakMap; var __toCommonJS = (from) => { var entry = __moduleCache.get(from), desc; if (entry) return entry; entry = __defProp({}, "__esModule", { value: true }); if (from && typeof from === "object" || typeof from === "function") __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable })); __moduleCache.set(from, entry); return entry; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true, configurable: true, set: (newValue) => all[name] = () => newValue }); }; // src/index.ts var exports_src = {}; __export(exports_src, { transpilePHPComponents: () => transpilePHPComponents, default: () => src_default }); module.exports = __toCommonJS(exports_src); var import_vite_plugin_html_rewrite = __toESM(require("vite-plugin-html-rewrite")); // src/utils/hashTagName.ts function hashTagName(tagName) { const hash = tagName.split("").reduce(function(a, b) { a = (a << 5) - a + b.charCodeAt(0); return a & a; }, 0); return "c_" + Math.abs(new Date().getTime() - hash); } var hashTagName_default = hashTagName; // src/utils/makePHPArray.ts function makePHPArray(attrs) { const attrPairs = Object.entries(attrs).map((item) => { const key = item[0].replace(/'/g, "\\'"); let value = item[1]; if (value.startsWith("<?") && value.endsWith("?>") && !value.substring(2).includes("<?")) { value = value.replace(/<\?(?:php|=)(.+?)(?:;|)\s*\?>/gis, (match, p1) => p1.trim()); } else { const phpBlocks = []; value = value.replace(/<\?(?:php|=)(.+?)(?:;|)\s*\?>/gis, (match, p1) => { phpBlocks.push(p1.trim()); const index = phpBlocks.length - 1; return `␀␀${index}␀␀`; }).replace(/'/g, "\\'").replace(/␀␀(\d+)␀␀/g, (match, p1) => { return `'.(${phpBlocks[parseInt(p1)]}).'`; }); value = `'${value}'`; } return `'${key}' => ${value}`; }); return `[${attrPairs.join(", ")}]`; } var makePHPArray_default = makePHPArray; // src/index.ts var import_node_fs = require("node:fs"); function transpilePHPComponents(config) { let viteConfig; return [ { name: "html-components-check", enforce: "pre", configResolved(config2) { viteConfig = config2; }, buildStart(options) { const phpLibPath = `${viteConfig?.root}/vendor/nititech/html-components`; if (!config?.skipLibCheck && (!import_node_fs.existsSync(phpLibPath) || !import_node_fs.lstatSync(phpLibPath).isDirectory())) { this.error(` Looks like 'nititech/html-components' is not installed. This plugin is intended to be used with https://packagist.org/packages/nititech/html-components `); } } }, import_vite_plugin_html_rewrite.default([ { match: (element) => { return element.tagName.includes("."); }, order: "pre", render(elementDetails, index) { const varName = "$" + hashTagName_default(elementDetails.tagName); const className = "\\" + elementDetails.tagName.replace(/\./g, "\\"); const attrArray = makePHPArray_default(elementDetails.attribs); return `<?php ${varName} = new ${className}(${attrArray}); ?>${elementDetails.innerHTML}<?php ${varName}->close(); ?>`; } } ]) ]; } var src_default = transpilePHPComponents;