defuss-ssg
Version:
A simple static site generator (SSG) built with defuss.
95 lines (91 loc) • 2.73 kB
JavaScript
;
var serve = require('./serve-KTJqW3m0.cjs');
var node_path = require('node:path');
var node_fs = require('node:fs');
var node_child_process = require('node:child_process');
require('chokidar');
require('express');
require('serve-static');
require('esbuild');
require('rehype-katex');
require('rehype-stringify');
require('remark-frontmatter');
require('remark-math');
require('remark-gfm');
require('remark-parse');
require('remark-rehype');
require('remark-mdx-frontmatter');
require('./tailwind-C4AuHybm.cjs');
require('@mdx-js/esbuild');
require('fast-glob');
require('defuss/server');
require('node:fs/promises');
require('node:url');
const setup = async (projectDir) => {
const projectDirStatus = serve.validateProjectDir(projectDir);
if (projectDirStatus.code !== "OK") return projectDirStatus;
const packageJsonPath = node_path.join(projectDir, "package.json");
if (!node_fs.existsSync(packageJsonPath)) {
return {
code: "MISSING_PACKAGE_JSON",
message: `package.json not found in ${projectDir}`
};
}
let packageJson;
try {
packageJson = JSON.parse(node_fs.readFileSync(packageJsonPath, "utf-8"));
} catch (error) {
return {
code: "INVALID_JSON",
message: `Error reading package.json in ${projectDir}: ${error.message}`
};
}
const packageManager = packageJson.packageManager || "npm";
const pm = packageManager.split("@")[0];
const validPMs = ["npm", "yarn", "pnpm", "bun"];
if (!validPMs.includes(pm)) {
return {
code: "UNSUPPORTED_PM",
message: `Unsupported package manager: ${pm}`
};
}
console.log(`Setting up project in ${projectDir} using ${pm}...`);
try {
node_child_process.execSync(`${pm} install`, { cwd: projectDir, stdio: "inherit" });
console.log("Dependencies installed successfully.");
} catch (error) {
return {
code: "INSTALL_FAILED",
message: `Failed to install dependencies: ${error.message}`
};
}
return { code: "OK", message: "Setup completed successfully" };
};
(async () => {
const args = process.argv.slice(2);
const command = args[0];
const folder = args[1];
const usage = "Usage: defuss-ssg <build|serve> <folder>";
if (!command || !folder) {
console.error(usage);
process.exit(1);
}
const projectDir = node_path.resolve(folder);
await setup(projectDir);
if (command === "build") {
console.log(`Building ${folder}...`);
await serve.build({
projectDir,
debug: true,
mode: "build"
});
} else if (command === "serve") {
console.log(`Serving ${folder}...`);
await serve.serve({
projectDir,
debug: true});
} else {
console.error(usage);
process.exit(1);
}
})();