UNPKG

intlayer-editor

Version:

Integrate the Intlayer visual editor into your Intlayer projects, enabling CMS-like content management with multilingual support.

79 lines (78 loc) 2.87 kB
import { getConfiguration, getEnvFilePath } from "@intlayer/config"; import { configurationRouter } from "./routes/config.routes.mjs"; import { dictionaryRouter } from "./routes/dictionary.routes.mjs"; import { checkPortAvailability } from "./utils/checkPortAvailability.mjs"; import compression from "compression"; import cookieParser from "cookie-parser"; import cors from "cors"; import express from "express"; import { intlayer } from "express-intlayer"; import helmet from "helmet"; import mime from "mime"; import { existsSync, lstatSync, readFileSync } from "node:fs"; import path, { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = dirname(fileURLToPath(import.meta.url)); const envFileOptions = { env: process.env.NODE_ENV, 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 (app2) => { const isPortAvailable = await checkPortAvailability(port); if (!isPortAvailable) { console.error(`\x1B[1;31mError: Port ${port} is already in use.\x1B[0m`); process.exit(255); } app2.disable("x-powered-by"); app2.use( helmet({ contentSecurityPolicy: false }) ); app2.use(cors(corsOptions)); app2.use(compression()); app2.use(express.json()); app2.use(cookieParser()); app2.use(express.urlencoded({ extended: true })); app2.use("/api/dictionary", dictionaryRouter); app2.use("/api/config", configurationRouter); app2.use(express.static(clientDistPath)); app2.get(/(.*)/, (req, res) => { const requestedPath = path.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")); } }); app2.listen(port, () => { const dotEnvFilePath = getEnvFilePath( envFileOptions.env, envFileOptions.envFile ); console.log(` \x1B[1;90mINTLAYER v${packageJson.version}\x1B[0m Editor running at: \x1B[90mhttp://localhost:${port}\x1B[0m - Watching application at: ${config.editor.applicationURL === "" ? "-" : `\x1B[90m${config.editor.applicationURL}\x1B[0m`} - Access key: ${config.editor.clientId ?? "-"} - Environment: ${dotEnvFilePath ?? "-"} `); }); }; startServer(app); //# sourceMappingURL=index.mjs.map