intlayer-editor
Version:
Integrate the Intlayer visual editor into your Intlayer projects, enabling CMS-like content management with multilingual support.
71 lines (68 loc) • 3.01 kB
JavaScript
import { configurationRouter } from "./routes/config.routes.mjs";
import { dictionaryRouter } from "./routes/dictionary.routes.mjs";
import { checkPortAvailability } from "./utils/checkPortAvailability.mjs";
import { ANSIColors, colorize, colorizePath, getConfiguration, getEnvFilePath } from "@intlayer/config";
import { intlayer } from "express-intlayer";
import { existsSync, lstatSync, readFileSync } from "node:fs";
import { dirname, join, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import express from "express";
import compression from "compression";
import cookieParser from "cookie-parser";
import cors from "cors";
import helmet from "helmet";
import mime from "mime";
//#region src/index.ts
const __dirname = dirname(fileURLToPath(import.meta.url));
const envFileOptions = {
env: "development",
envFile: process.env.ENV_FILE
};
const packageJson = JSON.parse(readFileSync(resolve(__dirname, "../../package.json"), "utf8"));
const app = express();
app.use(intlayer());
const FALLBACK_PORT = 8e3;
const config = getConfiguration(envFileOptions);
const port = config.editor.port ?? FALLBACK_PORT;
const clientDistPath = resolve(__dirname, "../../client/dist");
const corsOptions = {
origin: "*",
credentials: true
};
const startServer = async (app$1) => {
if (!await checkPortAvailability(port)) {
console.error(`\x1b[1;31mError: Port ${port} is already in use.\x1b[0m`);
process.exit(255);
}
app$1.disable("x-powered-by");
app$1.use(helmet({ contentSecurityPolicy: false }));
app$1.use(cors(corsOptions));
app$1.use(compression());
app$1.use(express.json());
app$1.use(cookieParser());
app$1.use(express.urlencoded({ extended: true }));
app$1.use("/api/dictionary", dictionaryRouter);
app$1.use("/api/config", configurationRouter);
app$1.use(express.static(clientDistPath));
app$1.get(/(.*)/, (req, res) => {
const requestedPath = join(clientDistPath, req.url);
if (existsSync(requestedPath) && lstatSync(requestedPath).isFile()) {
const mimeType = mime.getType(requestedPath) ?? "application/octet-stream";
res.setHeader("Content-Type", mimeType);
res.sendFile(requestedPath);
} else res.sendFile(resolve(clientDistPath, "index.html"));
});
app$1.listen(port, () => {
const dotEnvFilePath = getEnvFilePath(envFileOptions.env, envFileOptions.envFile);
console.log(`
${colorize(colorize("INTLAYER", ANSIColors.BOLD), ANSIColors.GREY_DARK)} ${colorize(`v${packageJson.version}`, ANSIColors.GREY_DARK)}
Editor running at: ${colorizePath(`http://localhost:${port}`)}
${colorize("➜", ANSIColors.GREY_DARK)} Watching application at: ${config.editor.applicationURL === "" ? "-" : colorizePath(config.editor.applicationURL)}
${colorize("➜", ANSIColors.GREY_DARK)} Access key: ${config.editor.clientId ?? "-"}
${colorize("➜", ANSIColors.GREY_DARK)} Environment: ${dotEnvFilePath ?? "-"}
`);
});
};
startServer(app);
//#endregion
//# sourceMappingURL=index.mjs.map