vite-plugin-php-components
Version:
Transpile PHP-Components to PHP calls
124 lines (119 loc) • 4.33 kB
JavaScript
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;