@npio/internals
Version:
A free visual website editor, powered with your own SolidJS components.
122 lines (111 loc) • 3.01 kB
text/typescript
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("");
});
}
};