import * as routes from './routes/index.js'; import * as url from 'node:url'; import express from 'express'; let dumpHttpEndpoints = false; function logPrefixed(...args) { console.log('%', ...args); } function logHttpHeader() { if (!dumpHttpEndpoints) return; logPrefixed('@baseUrl=http://localhost:3000'); logPrefixed('@username=admin'); logPrefixed('@password=admin'); logPrefixed('@email=admin@example.com'); logPrefixed('@userType=admin'); logPrefixed('@accessToken=someValueXyzXyz'); logPrefixed(''); logPrefixed(''); } function logHttpEntry(method, route, routeMethod) { console.log( 'Registering', method.toUpperCase(), route + ':', routeMethod.description || 'No description provided' ); if (!dumpHttpEndpoints) return; if (routeMethod.description) logPrefixed('#', routeMethod.description); logPrefixed(method, '{{baseUrl}}' + route, 'HTTP/1.1'); if (routeMethod.exampleHeaders) { for (var key of Object.keys(routeMethod.exampleHeaders)) { logPrefixed(`${key}: ${routeMethod.exampleHeaders[key]}`); } } if (routeMethod.exampleBody) { logPrefixed('Content-Type: application/json'); logPrefixed(''); logPrefixed( JSON.stringify(routeMethod.exampleBody, null, 4).replaceAll( '\n', '\n% ' ) ); logPrefixed(''); } logPrefixed(''); logPrefixed('###'); } export function registerRoutes(app) { logHttpHeader(); let routeCount = 0; Object.keys(routes).forEach(routeName => { /** * @type {RouteDescription} */ const route = routes[routeName]; if (route === undefined) return; Object.keys(route.methods).forEach(routeMethodName => { /** * @type {RouteMethod} */ const routeMethod = route.methods[routeMethodName]; if (routeMethod === undefined) return; logHttpEntry( routeMethodName.toUpperCase(), route.path, routeMethod ); app[routeMethodName](route.path, [ ...(routeMethod.middlewares || []), routeMethod.method ]); routeCount++; }); }); console.log(`Registered ${routeCount} routes.`); } // Check if the script is run directly, to create the routes.html file. if (import.meta.url.startsWith('file:')) { const modulePath = url.fileURLToPath(import.meta.url); if (process.argv[1] === modulePath) { const app = express(); dumpHttpEndpoints = true; registerRoutes(app); process.exit(1); } }