UNPKG

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
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