Home / File/ generate-routes-json.ts — astro Source File

generate-routes-json.ts — astro Source File

Architecture documentation for generate-routes-json.ts, a typescript file in the astro codebase. 7 imports, 0 dependents.

File typescript CoreAstro RoutingSystem 7 imports 4 functions 2 classes

Entity Profile

Dependency Diagram

graph LR
  da981689_3d65_7d59_3c95_800d340ef108["generate-routes-json.ts"]
  e16a223b_37f3_6b25_1ee1_2b7bcb9d9415["node:fs"]
  da981689_3d65_7d59_3c95_800d340ef108 --> e16a223b_37f3_6b25_1ee1_2b7bcb9d9415
  5d6d1861_a18d_b246_cd94_08889ab7e74c["promises"]
  da981689_3d65_7d59_3c95_800d340ef108 --> 5d6d1861_a18d_b246_cd94_08889ab7e74c
  c52a5f83_66e3_37d7_9ebb_767f7129bc62["node:path"]
  da981689_3d65_7d59_3c95_800d340ef108 --> c52a5f83_66e3_37d7_9ebb_767f7129bc62
  d9a92db9_c95e_9165_13ac_24b3d859d946["node:url"]
  da981689_3d65_7d59_3c95_800d340ef108 --> d9a92db9_c95e_9165_13ac_24b3d859d946
  e4df8f29_fb2f_3d70_a962_fdf6a3670b22["path"]
  da981689_3d65_7d59_3c95_800d340ef108 --> e4df8f29_fb2f_3d70_a962_fdf6a3670b22
  f16d8c76_2866_6150_bd14_0347b59abfe9["astro"]
  da981689_3d65_7d59_3c95_800d340ef108 --> f16d8c76_2866_6150_bd14_0347b59abfe9
  e64464d4_88a4_c7e2_f90f_758b06231bbe["tinyglobby"]
  da981689_3d65_7d59_3c95_800d340ef108 --> e64464d4_88a4_c7e2_f90f_758b06231bbe
  style da981689_3d65_7d59_3c95_800d340ef108 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { existsSync } from 'node:fs';
import { writeFile } from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import {
	prependForwardSlash,
	removeLeadingForwardSlash,
	removeTrailingForwardSlash,
} from '@astrojs/internal-helpers/path';
import type {
	AstroConfig,
	AstroIntegrationLogger,
	IntegrationResolvedRoute,
	RoutePart,
} from 'astro';
import { glob } from 'tinyglobby';

// Copied from https://github.com/withastro/astro/blob/3776ecf0aa9e08a992d3ae76e90682fd04093721/packages/astro/src/core/routing/manifest/create.ts#L45-L70
// We're not sure how to improve this regex yet
// eslint-disable-next-line regexp/no-super-linear-backtracking
const ROUTE_DYNAMIC_SPLIT = /\[(.+?\(.+?\)|.+?)\]/;
const ROUTE_SPREAD = /^\.{3}.+$/;
export function getParts(part: string) {
	const result: RoutePart[] = [];
	part.split(ROUTE_DYNAMIC_SPLIT).map((str, i) => {
		if (!str) return;
		const dynamic = i % 2 === 1;

		const [, content] = dynamic ? /([^(]+)$/.exec(str) || [null, null] : [null, str];

		if (!content || (dynamic && !/^(?:\.\.\.)?[\w$]+$/.test(content))) {
			throw new Error('Parameter name must match /^[a-zA-Z0-9_$]+$/');
		}

		result.push({
			content,
			dynamic,
			spread: dynamic && ROUTE_SPREAD.test(content),
		});
	});

	return result;
}

async function writeRoutesFileToOutDir(
	_config: AstroConfig,
	logger: AstroIntegrationLogger,
	include: string[],
	exclude: string[],
) {
	try {
		await writeFile(
			new URL('./_routes.json', _config.outDir),
			JSON.stringify(
				{
					version: 1,
					include: include,
					exclude: exclude,
				},
				null,
// ... (287 more lines)

Domain

Subdomains

Dependencies

  • astro
  • node:fs
  • node:path
  • node:url
  • path
  • promises
  • tinyglobby

Frequently Asked Questions

What does generate-routes-json.ts do?
generate-routes-json.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RoutingSystem subdomain.
What functions are defined in generate-routes-json.ts?
generate-routes-json.ts defines 4 function(s): createRoutesFile, getParts, segmentsToCfSyntax, writeRoutesFileToOutDir.
What does generate-routes-json.ts depend on?
generate-routes-json.ts imports 7 module(s): astro, node:fs, node:path, node:url, path, promises, tinyglobby.
Where is generate-routes-json.ts in the architecture?
generate-routes-json.ts is located at packages/integrations/cloudflare/src/utils/generate-routes-json.ts (domain: CoreAstro, subdomain: RoutingSystem, directory: packages/integrations/cloudflare/src/utils).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free