Skip to content

Commit

Permalink
refactor: proper dep. injection for route
Browse files Browse the repository at this point in the history
  • Loading branch information
JulianCataldo committed May 26, 2024
1 parent c2f1516 commit 0fa9f77
Show file tree
Hide file tree
Showing 20 changed files with 35 additions and 38 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Large diffs are not rendered by default.

11 changes: 8 additions & 3 deletions packages/engine/src/build/static.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import c from 'picocolors';
import type { ViteDevServer } from 'vite';

import { renderRouteTemplate } from '../render/route-template.js';
import { collectRoutes, routes } from '../routes/collect.js';
import { collectRoutes } from '../routes/collect.js';
import { loadForeignRouteObject } from '../routes/load-module.js';

export interface RenderedRouteDefinition {
Expand Down Expand Up @@ -45,7 +45,7 @@ export async function renderRoutes({
logger.info(c.green('Rendering routes…'), { timestamp: true });

// MARK: Collect
await collectRoutes(root /* vite */);
const routes = await collectRoutes(root /* vite */);

logger.info(c.green('Rendering routes finished'), { timestamp: true });

Expand Down Expand Up @@ -150,5 +150,10 @@ export async function renderRoutes({
}),
);

return renderedRoutes.sort((a, b) => (a.absoluteId < b.absoluteId ? -1 : 1));
return {
routes,
renderedRoutes: renderedRoutes.sort((a, b) =>
a.absoluteId < b.absoluteId ? -1 : 1,
),
};
}
9 changes: 5 additions & 4 deletions packages/engine/src/dev/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import express, { type Express, type RequestHandler } from 'express';
import c from 'picocolors';
import { createViteRuntime, type ViteDevServer } from 'vite';

import { collectRoutes, routes } from '../routes/collect.js';
import { collectRoutes } from '../routes/collect.js';
import { IP_EXPOSED, IP_LOCALHOST } from '../server/env.js';
import { createRequestHandler } from '../server/request.js';
import { createViteServer } from '../vite/server.js';
import { createRequestHandler } from './request.js';

export type HandleWithExpressApp = typeof withExpress;

Expand Down Expand Up @@ -40,17 +40,18 @@ export async function withExpress({

expressApp.use(vite.middlewares);

const routes = await collectRoutes(root /* vite */);

expressApp.get('/__routes', (req, res) => {
return res.json([...routes]);
});

await collectRoutes(root /* vite */);
vite.watcher.on('all', (event, _file) => {
if (['add', 'unlink'].includes(event))
collectRoutes(root /* , vite */).catch((e) => logger.error(String(e)));
});

const handler = createRequestHandler({ vite, root, serverMode });
const handler = createRequestHandler({ vite, root, serverMode, routes });
// NOTE: Types are wrong! Should accept an async request handler.
expressApp.use('*', handler as RequestHandler);

Expand Down
4 changes: 2 additions & 2 deletions packages/engine/src/routes/collect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import { prepareSortableRoutes, routeComparator } from './comparator.js';
import { REGEXES } from './load-module.js';
import type * as R from './route.js';

export const routes: R.RoutesManifest = new Map<string, R.Route>();

function extractRoutePatterns(
absoluteFilePath: string,
): Pick<R.Route, 'pattern' | 'hasParams'> & { patternString: string } {
Expand Down Expand Up @@ -68,6 +66,8 @@ function extractRoutePatterns(
};
}

const routes: R.RoutesManifest = new Map<string, R.Route>();

export async function collectRoutes(root: string /* vite: ViteDevServer */) {
routes.clear();

Expand Down
7 changes: 3 additions & 4 deletions packages/engine/src/routes/match.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { ViteDevServer } from 'vite';

import { routes } from './collect.js';
import { loadForeignRouteObject } from './load-module.js';
import type * as R from './route.js';

Expand All @@ -16,15 +15,15 @@ type MatchedRoute = {
// FIXME: proper DI for routes
function matchRouteFromUrl(
url: string,
routess: R.RoutesManifest = routes,
routes: R.RoutesManifest,
): MatchedRoute {
let match: URLPatternResult | undefined;
let foundRoute: R.Route | undefined;

const pathname = new URL(url).pathname;

// eslint-disable-next-line no-restricted-syntax
for (const [, route] of routess) {
for (const [, route] of routes) {
if (match) break;

const matchResult =
Expand Down Expand Up @@ -98,7 +97,7 @@ export type RouteInfos = {
export async function getRoute(options: {
url: string;
vite?: ViteDevServer | undefined;
routes: R.RoutesManifest | undefined;
routes: R.RoutesManifest;
routeImports?: R.RoutesImports | undefined;
}): Promise<RouteInfos> {
const { foundRoute, pathname, params } = matchRouteFromUrl(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export function createRequestHandler({
serverMode,
}: {
vite?: ViteDevServer | undefined;
routes?: R.RoutesManifest | undefined;
routes: R.RoutesManifest;
routeImports?: R.RoutesImports | undefined;
routeAssets?: R.RoutesAssets;
root: string;
Expand Down
2 changes: 1 addition & 1 deletion packages/engine/src/server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { setCurrentWorkingDirectory } from '@gracile/internal-utils/paths';
import { type RequestHandler } from 'express';
import { routeAssets, routeImports, routes } from 'gracile:routes';

import { createRequestHandler } from '../dev/request.js';
import type { HandleWithExpressApp } from '../dev/server.js';
import { createRequestHandler } from './request.js';

routes.forEach((route, pattern) => {
routes.set(pattern, {
Expand Down
3 changes: 1 addition & 2 deletions packages/engine/src/vite/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import c from 'picocolors';
import { build, mergeConfig, type UserConfig } from 'vite';

import { DEFAULT_USER_SERVER_MODULE_ENTRYPOINT } from '../dev/server.js';
import { routes } from '../routes/collect.js';
import { getConfigs } from './config.js';
import { buildRoutes } from './plugins/build-routes.js';
import { virtualRoutes } from './plugins/virtual-routes.js';
Expand Down Expand Up @@ -109,7 +108,7 @@ export async function viteBuild(root = process.cwd()) {
plugins: [
virtualRoutes({
// root,
routes,
routes: htmlPages.routes,
renderedRoutes: htmlPages.renderedRoutes,
}),
],
Expand Down
3 changes: 2 additions & 1 deletion packages/engine/src/vite/plugins/build-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ export const buildRoutes = async ({
_config: GracileConfig;
serverMode?: boolean;
}) => {
const renderedRoutes = await renderRoutes({
const { renderedRoutes, routes } = await renderRoutes({
vite: viteServerForBuild,
serverMode,
root,
});
const inputList = renderedRoutes.map((input) => input.name);
return {
routes,
renderedRoutes,
inputList,
plugin: [
Expand Down

0 comments on commit 0fa9f77

Please sign in to comment.