UNPKG

@npio/internals

Version:

A free visual website editor, powered with your own SolidJS components.

122 lines (111 loc) 3.01 kB
import "dotenv/config"; import { sort, unique } from "moderndash"; import pc from "picocolors"; import { fallbackSize } from "../media"; import { ServerConfig, ServerConfigOptions, setServerConfig, useServerConfig, } from "./config"; import initFilesystem from "./filesystem"; import initDatabase, { useDatabase } from "./prisma"; import { merge } from "./util/object"; const thumbnailSize = 96; const faviconSizes = [16, 32, 48, 167, 180, 192]; const metaImageSizes = [1200]; const systemSizes = [ ...faviconSizes, ...metaImageSizes, thumbnailSize, fallbackSize, ]; const systemAspectRatios = ["1/1", "2/1", "4/3", "16/9"]; export const initialize = ( config: () => ServerConfigOptions, options = { useFilesystem: true, }, ) => { if (useServerConfig()) { return; } setServerConfig(() => { const userConfig = config(); const defaultConfig: ServerConfig = { auth: { salt: "change_this", cookie: { maxAge: 86400, }, password: "this_must_be_at_least_32_characters", }, filesystem: { defaultDriver: "s3", drivers: { local: { baseUrl: "/uploads/", publicPath: ".data/storage/public", privatePath: ".data/storage/private", }, }, }, image: { aspectRatios: [], sizes: [], maxAge: 365 * 24 * 60 * 60, quality: 90, placeholder: { name: "np-placeholder.webp", }, }, }; const conf = merge(defaultConfig, userConfig) as ServerConfig; if (!conf.filesystem.drivers[conf.filesystem.defaultDriver]) { conf.filesystem.defaultDriver = Object.keys( conf.filesystem.drivers, )[0] as any; } conf.image.sizes = sort(unique([...conf.image.sizes, ...systemSizes]), { order: "asc", }); conf.image.aspectRatios = unique([ ...systemAspectRatios, ...conf.image.aspectRatios, ]); if (import.meta.env?.DEV) { console.log("Server Configuration"); console.dir(conf, { depth: null, }); } return conf; }); if (options.useFilesystem) { initFilesystem(); } initDatabase(); if (import.meta.env?.PROD) { const db = useDatabase(); db.nitroUser.findFirst().then((u) => { if (u) return; console.log(""); console.log(pc.magentaBright(`# ${pc.dim("--------------------")}`)); console.log( pc.magentaBright(`# ${pc.bold(pc.italic(`WELCOME TO NITROPAGE`))}`), ); console.log(pc.magentaBright(`# ${pc.dim("--------------------")}`)); console.log( pc.magentaBright( `# Open your browser and navigate to ${pc.underline("https://your.domain/admin")} to get started.`, ), ); console.log( pc.magentaBright( `# ${pc.dim(`Running locally? Try ${pc.underline("http://localhost:3000/admin")}.`)}`, ), ); console.log(""); }); } };