UNPKG

@prism-engineer/router

Version:

Type-safe Express.js router with automatic client generation

66 lines 2.62 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createRouteParser = void 0; const path_1 = __importDefault(require("path")); const createRouteParser = () => { const parseRouteFile = async (filePath) => { try { const resolvedPath = path_1.default.resolve(filePath); let moduleExports; try { // For TypeScript files in test environment, use ts-node to compile and import if (filePath.endsWith('.ts') && process.env.NODE_ENV === 'test') { // Check if ts-node is available try { require('ts-node/register'); } catch { // ts-node not available, fall back to regular require } } // Clear require cache to ensure fresh imports in tests if (process.env.NODE_ENV === 'test') { delete require.cache[resolvedPath]; } moduleExports = require(resolvedPath); } catch (importError) { throw new Error(`Failed to parse route file ${filePath}: ${importError}`); } const routes = []; // Extract all exported route objects for (const [exportName, exportValue] of Object.entries(moduleExports)) { if (exportName === 'default') continue; // Skip default export for now // Check if this export looks like a route definition if (isValidRoute(exportValue)) { routes.push(exportValue); } } // Also check default export if (moduleExports.default && isValidRoute(moduleExports.default)) { routes.push(moduleExports.default); } return routes; } catch (error) { throw new Error(`Failed to parse route file ${filePath}: ${error}`); } }; return { parseRouteFile }; }; exports.createRouteParser = createRouteParser; // Helper function to validate if an object is a valid route function isValidRoute(obj) { return (obj && typeof obj === 'object' && typeof obj.path === 'string' && typeof obj.method === 'string' && typeof obj.handler === 'function'); } //# sourceMappingURL=parser.js.map