@npio/internals
Version:
A free visual website editor, powered with your own SolidJS components.
39 lines (30 loc) • 1.16 kB
text/typescript
import { Driver, createLocal, createS3 } from "@npio/filesystem";
import { createGlobal } from "./util";
import { useServerConfig } from "./config";
const create = () => {
const config = useServerConfig();
const drivers = {} as { local: Driver; s3?: Driver };
if (config.filesystem.drivers.local) {
drivers.local = createLocal(config.filesystem.drivers.local);
}
if (config.filesystem.drivers.s3) {
drivers.s3 = createS3(config.filesystem.drivers.s3);
}
return { default: config.filesystem.defaultDriver, drivers };
};
const initFilesystem = () => setFilesystem(create);
export default initFilesystem;
export const [useFilesystem, setFilesystem] =
createGlobal<ReturnType<typeof create>>("npFilesystem");
export const useFilesystemDriver = (driver?: string | null) => {
const fs = useFilesystem();
const d = (driver as keyof typeof fs.drivers) ?? "local";
if (fs.drivers[d]) return fs.drivers[d]!;
const alt = d === "local" ? "s3" : "local";
if (import.meta.env.DEV) {
console.log(
`Requested filesystem driver "${driver}" not found in config, using "${alt}"!`,
);
}
return fs.drivers[alt]!;
};