winterspec
Version:
Write Winter-CG compatible routes with filesystem routing and tons of features
40 lines (39 loc) • 1.87 kB
JavaScript
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, };