UNPKG

winterspec

Version:

Write Winter-CG compatible routes with filesystem routing and tons of features

40 lines (39 loc) 1.87 kB
import http from "node:http"; import { transformToNodeBuilder } from "../edge/transform-to-node.js"; import { createRoutePathMapFromDirectory } from "../routes/create-route-map-from-directory.js"; import { getDefaultContext } from "../types/context.js"; import { createWinterSpecBundleFromDir } from "../serve/create-winter-spec-bundle-from-dir.js"; import { createWinterSpecFromRouteMap } from "../serve/create-winter-spec-from-route-map.js"; import * as EdgePrimitives from "@edge-runtime/primitives"; export const getNodeHandler = (winterSpec, { port, middleware = [] }) => { const transformToNode = transformToNodeBuilder({ defaultOrigin: `http://localhost${port ? `:${port}` : ""}`, }); return transformToNode((req) => winterSpec.makeRequest(req, { middleware, })); }; export const startServer = async (winterSpec, opts) => { const server = http.createServer(getNodeHandler(winterSpec, opts)); const { port } = opts; await new Promise((resolve) => server.listen(port, resolve)); return server; }; export const startServerFromRoutesDir = async (routesDirPath, opts) => { const winterSpec = await createWinterSpecBundleFromDir(routesDirPath, {}); return startServer(winterSpec, opts); }; export const createMakeRequestFromDir = async (dirPath) => { const winterSpec = await createWinterSpecBundleFromDir(dirPath, {}); return winterSpec.makeRequest; }; export const createFetchHandlerFromDir = async (dirPath, opts = {}) => { const makeRequest = await createMakeRequestFromDir(dirPath); const fetchFn = (url, init) => { return makeRequest(new EdgePrimitives.Request(url, init), { middleware: opts.middleware, }); }; return fetchFn; }; export { createRoutePathMapFromDirectory, getDefaultContext, createWinterSpecFromRouteMap, createWinterSpecBundleFromDir, };