Home / File/ common.ts — astro Source File

common.ts — astro Source File

Architecture documentation for common.ts, a typescript file in the astro codebase. 2 imports, 0 dependents.

File typescript CoreAstro RenderingEngine 2 imports 3 functions

Entity Profile

Dependency Diagram

graph LR
  068dc89e_9fd0_297e_43a8_0a310f749aeb["common.ts"]
  baa53824_73a3_1e03_2043_4d0c058ecca5["../types/public/index.js"]
  068dc89e_9fd0_297e_43a8_0a310f749aeb --> baa53824_73a3_1e03_2043_4d0c058ecca5
  a4f2698c_5256_262a_ba7c_f72b51878d10["../core/app/types.js"]
  068dc89e_9fd0_297e_43a8_0a310f749aeb --> a4f2698c_5256_262a_ba7c_f72b51878d10
  style 068dc89e_9fd0_297e_43a8_0a310f749aeb fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type { AstroConfig } from '../../types/public/index.js';
import type { SSRManifest } from './types.js';

export type RoutingStrategies =
	| 'manual'
	| 'pathname-prefix-always'
	| 'pathname-prefix-other-locales'
	| 'pathname-prefix-always-no-redirect'
	| 'domains-prefix-always'
	| 'domains-prefix-other-locales'
	| 'domains-prefix-always-no-redirect';
export function toRoutingStrategy(
	routing: NonNullable<AstroConfig['i18n']>['routing'],
	domains: NonNullable<AstroConfig['i18n']>['domains'],
): RoutingStrategies {
	let strategy: RoutingStrategies;
	const hasDomains = domains ? Object.keys(domains).length > 0 : false;
	if (routing === 'manual') {
		strategy = 'manual';
	} else {
		if (!hasDomains) {
			if (routing?.prefixDefaultLocale === true) {
				if (routing.redirectToDefaultLocale) {
					strategy = 'pathname-prefix-always';
				} else {
					strategy = 'pathname-prefix-always-no-redirect';
				}
			} else {
				strategy = 'pathname-prefix-other-locales';
			}
		} else {
			if (routing?.prefixDefaultLocale === true) {
				if (routing.redirectToDefaultLocale) {
					strategy = 'domains-prefix-always';
				} else {
					strategy = 'domains-prefix-always-no-redirect';
				}
			} else {
				strategy = 'domains-prefix-other-locales';
			}
		}
	}

	return strategy;
}
export function toFallbackType(
	routing: NonNullable<AstroConfig['i18n']>['routing'],
): 'redirect' | 'rewrite' {
	if (routing === 'manual') {
		return 'rewrite';
	}
	return routing.fallbackType;
}

const PREFIX_DEFAULT_LOCALE = new Set([
	'pathname-prefix-always',
	'domains-prefix-always',
	'pathname-prefix-always-no-redirect',
	'domains-prefix-always-no-redirect',
]);

const REDIRECT_TO_DEFAULT_LOCALE = new Set([
	'pathname-prefix-always-no-redirect',
	'domains-prefix-always-no-redirect',
]);

export function fromRoutingStrategy(
	strategy: RoutingStrategies,
	fallbackType: NonNullable<SSRManifest['i18n']>['fallbackType'],
): NonNullable<AstroConfig['i18n']>['routing'] {
	let routing: NonNullable<AstroConfig['i18n']>['routing'];
	if (strategy === 'manual') {
		routing = 'manual';
	} else {
		routing = {
			prefixDefaultLocale: PREFIX_DEFAULT_LOCALE.has(strategy),
			redirectToDefaultLocale: !REDIRECT_TO_DEFAULT_LOCALE.has(strategy),
			fallbackType,
		};
	}
	return routing;
}

Domain

Subdomains

Dependencies

  • ../core/app/types.js
  • ../types/public/index.js

Frequently Asked Questions

What does common.ts do?
common.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RenderingEngine subdomain.
What functions are defined in common.ts?
common.ts defines 3 function(s): fromRoutingStrategy, toFallbackType, toRoutingStrategy.
What does common.ts depend on?
common.ts imports 2 module(s): ../core/app/types.js, ../types/public/index.js.
Where is common.ts in the architecture?
common.ts is located at packages/astro/src/core/app/common.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/core/app).

Analyze Your Own Codebase

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

Try Supermodel Free