iles
Version:
Vite & Vue powered static site generator with partial hydration
46 lines (41 loc) • 1.38 kB
JavaScript
import {
parseImports
} from "./chunk-6FAOHHHS.js";
import {
uniq
} from "./chunk-ROUSHGC2.js";
// src/node/plugin/composables.ts
import { promises as fs } from "fs";
import { resolve } from "pathe";
var definitionRegex = /(?:function|const|let|var)\s+(definePageComponent|use(?:Page|Route|Head|Documents)\b)/g;
var composableUsageRegex = /\b(definePageComponent|use(?:Page|Route|Head|Documents))\s*\(/g;
var composables = [
"definePageComponent",
"useDocuments",
"useHead",
"usePage",
"useRoute"
];
async function autoImportComposables(code, id) {
const matches = Array.from(code.matchAll(composableUsageRegex));
if (matches.length === 0) return;
const imports = await parseImports(code);
const defined = new Set(Array.from(code.matchAll(definitionRegex)).map((a) => a[1]));
const composables2 = uniq(matches.map((a) => a[1])).filter((composable) => !defined.has(composable) && !imports[composable]).join(", ");
if (composables2)
return `${code}
import { ${composables2} } from "iles"`;
}
function writeComposablesDTS(root) {
fs.writeFile(resolve(root, "composables.d.ts"), `// generated by iles
// We suggest you to commit this file into source control
declare global {
${composables.map((fn) => ` const ${fn}: typeof import('iles')['${fn}']`).join("\n")}
}
export { }
`, "utf-8");
}
export {
autoImportComposables,
writeComposablesDTS
};