UNPKG

@opengis/fastify-table

Version:

core-plugins

130 lines (105 loc) 4.7 kB
import path from 'node:path'; import { existsSync, readdirSync, readFileSync } from 'node:fs'; import fp from 'fastify-plugin'; import { fileURLToPath } from 'node:url'; import config from './config.js'; const { maxFileSize = 512 } = config; // helpers // import helperPlugin from './server/helpers/index.js'; // plugins import cronPlugin from './server/plugins/cron/index.js'; import crudPlugin from './server/plugins/crud/index.js'; import pgPlugin from './server/plugins/pg/index.js'; import policyPlugin from './server/plugins/policy/index.js'; import metricPlugin from './server/plugins/metric/index.js'; import redisPlugin from './server/plugins/redis/index.js'; import tablePlugin from './server/plugins/table/index.js'; import utilPlugin from './server/plugins/util/index.js'; import loggerPlugin from './server/plugins/logger/index.js'; // routes import cronRoutes from './server/routes/cron/index.js'; import crudRoutes from './server/routes/crud/index.js'; import loggerRoutes from './server/routes/logger/index.js'; import propertiesRoutes from './server/routes/properties/index.js'; import tableRoutes from './server/routes/table/index.js'; import utilRoutes from './server/routes/util/index.js'; // utils import addTemplateDir from './server/plugins/table/funcs/addTemplateDir.js'; import execMigrations from './server/plugins/migration/exec.migrations.js'; import locales from './server/routes/table/controllers/utils/locales.js'; import pgClients from './server/plugins/pg/pgClients.js'; import dblistRoutes from './server/routes/dblist/index.mjs'; import menuRoutes from './server/routes/menu/index.mjs'; import templatesRoutes from './server/routes/templates/index.mjs'; // core templates && cls const filename = fileURLToPath(import.meta.url); const cwd = path.dirname(filename); async function plugin(fastify, opt) { config.pg = opt.pg; config.redis = opt.redis; config.root = opt.root; config.mapServerRoot = opt.mapServerRoot; // fastify.register(import('@fastify/sensible'), { // errorHandler: false, // }); // fastify.register(import('@fastify/url-data'), { // errorHandler: false, // }); if (config.disableCors) { fastify.addHook('onSend', async (request, reply) => { reply.header('Access-Control-Allow-Origin', '*'); }); } fastify.addHook('onReady', async () => { if (existsSync('locales')) { const subdirs = (readdirSync('locales', { withFileTypes: true })).filter(el => el.isDirectory()); const res = subdirs.reduce((acc, curr) => { const content = readdirSync(`locales/${curr.name}`, { withFileTypes: true }); const obj = content.filter(el => el.isFile()).reduce((acc1, file) => ({ ...acc1, ...JSON.parse(readFileSync(`locales/${curr.name}/${file.name}`, 'utf-8').replace(/[\u200B-\u200D\uFEFF]/g, '')) }), {}); Object.keys(obj).reduce((acc1, curr1) => Object.assign(acc, { [curr1]: { ...acc[curr1], [curr.name]: obj?.[curr1] } }), {}); return acc; }, {}); Object.assign(locales, res); console.log('locales loaded'); } }); // core migrations (second argument for core only) execMigrations(path.join(cwd, 'server/migrations'), pgClients.client, true).catch(err => console.log(err)); // core templates && cls config.templates?.forEach(el => addTemplateDir(el)); addTemplateDir(path.join(cwd, 'module/core')); // plugins / utils / funcs policyPlugin(fastify); metricPlugin(fastify); redisPlugin(fastify); // helperPlugin(fastify); await pgPlugin(fastify, opt); tablePlugin(fastify, opt); crudPlugin(fastify, opt); utilPlugin(fastify, opt); cronPlugin(fastify, opt); loggerPlugin(fastify, opt); if (config.dblist) { dblistRoutes(fastify, opt); } // routes / api cronRoutes(fastify, opt); crudRoutes(fastify, opt); loggerRoutes(fastify, opt); propertiesRoutes(fastify, opt); tableRoutes(fastify, opt); utilRoutes(fastify, opt); menuRoutes(fastify, opt); templatesRoutes(fastify, opt); // from fastify-file await fastify.register(import('@fastify/multipart'), { limits: { fileSize: maxFileSize * 1024 * 1024, }, }); // content parser, await before adding upload routes fastify.register(import('./server/routes/file/index.mjs'), opt); fastify.register(import('./server/routes/grpc/index.mjs'), opt); fastify.get('/api/test-proxy', {}, (req) => ({ ...req.headers || {}, sessionId: req.session?.sessionId })); fastify.get('/api/config', { config: { policy: ['admin', 'site'] } }, () => config); } export default fp(plugin);