UNPKG

nuxt-plugin-bcms

Version:
96 lines (95 loc) 3.25 kB
import { addPlugin, addServerHandler, createResolver, defineNuxtModule, } from '@nuxt/kit'; import { createBcmsMost } from '@becomes/cms-most'; import { createBcmsNuxtClient } from './client'; import { fileURLToPath } from 'url'; import { createFS } from '@banez/fs'; let bcmsMost; export function useBcmsMost() { return bcmsMost; } export function createBcmsNuxtConfig(config) { return config; } export default defineNuxtModule({ meta: { name: 'bcms', configKey: 'bcms', }, async setup(options, nuxt) { const componentsVersion = 'v1.1'; const fs = createFS({ base: process.cwd(), }); let saveComponents = false; if (await fs.exist(['bcms-components', '__v'], true)) { const v = await fs.readString(['bcms-components', '__v']); if (v !== componentsVersion) { saveComponents = true; } } else { saveComponents = true; } if (saveComponents) { await fs.copy([__dirname, '_components'], ['bcms-components']); await fs.save(['bcms-components', '__v'], componentsVersion); } const { resolve } = createResolver(import.meta.url); const runtimeDir = fileURLToPath(new URL('./runtime', import.meta.url)); nuxt.options.build.transpile.push(runtimeDir); const config = createBcmsNuxtConfig(options); if (!config.media) { config.media = { output: 'public', }; } else if (!config.media.output) { config.media.output = 'public'; } if (!bcmsMost) { bcmsMost = createBcmsMost({ config }); await bcmsMost.content.pull(); await bcmsMost.media.pull(); await bcmsMost.typeConverter.pull(); await bcmsMost.socketConnect(); createBcmsNuxtClient(bcmsMost.client); } addPlugin(resolve(runtimeDir, 'plugin')); addServerHandler({ route: '/api/bcms', method: 'get', middleware: true, handler: resolve(runtimeDir, 'middleware', 'content'), }); addServerHandler({ route: `/${bcmsMost.media.output.slice(1).join('/')}`, method: 'get', middleware: true, handler: resolve(runtimeDir, 'middleware', 'image'), }); async function done() { try { if (config.postProcessImages) { await bcmsMost.imageProcessor.postBuild({ buildOutput: ['.output', 'public'], }); } await bcmsMost.server.stop(); } catch (error) { console.error(error); process.exit(1); } } async function setupServer() { await bcmsMost.server.stop(); await bcmsMost.server.start(config.server && config.server.routes ? config.server.routes : {}); } nuxt.hook('ready', async () => { await setupServer(); }); nuxt.hook('close', async () => { await done(); }); }, });