UNPKG

@scayle/storefront-nuxt

Version:

Nuxt integration for the SCAYLE Commerce Engine and Storefront API

86 lines (85 loc) 2.96 kB
import { createConsola } from "consola"; import { STORAGE_MOUNT_CACHE, STORAGE_MOUNT_SESSION } from "../../server/utils/cacheStorage.js"; import createLog from "../../createLog.js"; import { JSONReporter } from "../../JSONReporter.js"; import drivers from "#virtual/storage-drivers"; import { defineNitroPlugin } from "nitropack/runtime/plugin"; import { useStorage } from "nitropack/runtime/storage"; import { useRuntimeConfig } from "#imports"; import { getAvailableMounts } from "../../utils/storage.js"; function createMountDriver(options) { if (options?.driver) { const compression = options?.compression; const isCompressionEnabled = !!compression && compression !== "none"; const driver = drivers[options.driver ?? "memory"]; const createdDriver = driver({ ...options }); return isCompressionEnabled ? drivers.compression({ ...options, encoding: compression, passthroughDriver: createdDriver }) : createdDriver; } return drivers.memory(); } function mountStorage(storage, options) { const { config, base } = options; const mounts = getAvailableMounts(storage); if (!mounts.includes(base)) { if (config) { storage.mount(base, createMountDriver(config)); } else { storage.mount(base, createMountDriver()); } } } export default defineNitroPlugin(() => { const storage = useStorage(); const config = useRuntimeConfig(); const { shops } = config.storefront; const logConfig = config.public.storefront.log; const log = createLog( (opts) => createConsola({ ...logConfig.json ? { reporters: [new JSONReporter()] } : void 0, stderr: logConfig.output === "stdout" ? process.stdout : process.stderr, stdout: logConfig.output === "stderr" ? process.stderr : process.stdout, ...opts }), logConfig.name, logConfig.level ); try { const globalCacheConfig = config.storefront.storage?.cache; mountStorage(storage, { base: STORAGE_MOUNT_CACHE, config: globalCacheConfig }); const globalSessionConfig = config.storefront.storage?.session; mountStorage(storage, { base: STORAGE_MOUNT_SESSION, config: globalSessionConfig }); for (const shop of Object.values(shops)) { const shopCacheMount = `${STORAGE_MOUNT_CACHE}:${shop.shopId}`; const shopSessionMount = `${STORAGE_MOUNT_SESSION}:${shop.shopId}`; const cacheConfig = shop.storage?.cache ?? config.storefront.storage?.cache; if (cacheConfig) { mountStorage(storage, { base: shopCacheMount, config: cacheConfig }); } const sessionConfig = shop.storage?.session ?? config.storefront.storage?.session; if (sessionConfig) { mountStorage(storage, { base: shopSessionMount, config: sessionConfig }); } } } catch (error) { log.error("Unable to create required cache driver during startup.", error); } });