@opengis/fastify-table
Version:
core-plugins
130 lines (105 loc) • 4.7 kB
JavaScript
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);