Home / File/ pipeline.ts — astro Source File

pipeline.ts — astro Source File

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

Entity Profile

Dependency Diagram

graph LR
  34831467_a238_d0f7_b82f_574e9e416484["pipeline.ts"]
  be18ffb8_46cb_5266_8b78_659c01f80146["../core/base-pipeline.js"]
  34831467_a238_d0f7_b82f_574e9e416484 --> be18ffb8_46cb_5266_8b78_659c01f80146
  e099eff3_3f90_76ac_3751_a9ff5a6b8f25["../../core/build/types.js"]
  34831467_a238_d0f7_b82f_574e9e416484 --> e099eff3_3f90_76ac_3751_a9ff5a6b8f25
  deed754c_ed97_a6b7_2f50_988eb1d9ea7e["../render/ssr-element.js"]
  34831467_a238_d0f7_b82f_574e9e416484 --> deed754c_ed97_a6b7_2f50_988eb1d9ea7e
  99bef061_4ac1_91d4_947d_810691aafb80["../core/routing/rewrite.js"]
  34831467_a238_d0f7_b82f_574e9e416484 --> 99bef061_4ac1_91d4_947d_810691aafb80
  e9b74c5a_8d34_34a7_e196_5e41b87214aa["../types/astro.js"]
  34831467_a238_d0f7_b82f_574e9e416484 --> e9b74c5a_8d34_34a7_e196_5e41b87214aa
  135a8084_d596_67c2_9209_cca6693604e6["../types/public/common.js"]
  34831467_a238_d0f7_b82f_574e9e416484 --> 135a8084_d596_67c2_9209_cca6693604e6
  10d4e39f_edb6_3e34_aa93_ae1211e7da05["../types/public/internal.js"]
  34831467_a238_d0f7_b82f_574e9e416484 --> 10d4e39f_edb6_3e34_aa93_ae1211e7da05
  style 34831467_a238_d0f7_b82f_574e9e416484 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { type HeadElements, Pipeline, type TryRewriteResult } from '../core/base-pipeline.js';
import type { SinglePageBuiltModule } from '../core/build/types.js';
import {
	createModuleScriptElement,
	createStylesheetElementSet,
} from '../core/render/ssr-element.js';
import { findRouteToRewrite } from '../core/routing/rewrite.js';
import type { ComponentInstance } from '../types/astro.js';
import type { RewritePayload } from '../types/public/common.js';
import type { RouteData, SSRElement, SSRResult } from '../types/public/internal.js';

export class ContainerPipeline extends Pipeline {
	/**
	 * Internal cache to store components instances by `RouteData`.
	 * @private
	 */
	#componentsInterner: WeakMap<RouteData, SinglePageBuiltModule> = new WeakMap<
		RouteData,
		SinglePageBuiltModule
	>();

	getName(): string {
		return 'ContainerPipeline';
	}

	static create({
		logger,
		manifest,
		renderers,
		resolve,
		streaming,
	}: Pick<ContainerPipeline, 'logger' | 'manifest' | 'renderers' | 'resolve' | 'streaming'>) {
		return new ContainerPipeline(logger, manifest, 'development', renderers, resolve, streaming);
	}

	componentMetadata(_routeData: RouteData): Promise<SSRResult['componentMetadata']> | void {}

	headElements(routeData: RouteData): Promise<HeadElements> | HeadElements {
		const routeInfo = this.manifest.routes.find((route) => route.routeData === routeData);
		const links = new Set<never>();
		const scripts = new Set<SSRElement>();
		const styles = createStylesheetElementSet(routeInfo?.styles ?? []);

		for (const script of routeInfo?.scripts ?? []) {
			if ('stage' in script) {
				if (script.stage === 'head-inline') {
					scripts.add({
						props: {},
						children: script.children,
					});
				}
			} else {
				scripts.add(createModuleScriptElement(script));
			}
		}
		return { links, styles, scripts };
	}

	async tryRewrite(payload: RewritePayload, request: Request): Promise<TryRewriteResult> {
		const { newUrl, pathname, routeData } = findRouteToRewrite({
			payload,
			request,
			routes: this.manifest?.routes.map((r) => r.routeData),
			trailingSlash: this.manifest.trailingSlash,
			buildFormat: this.manifest.buildFormat,
			base: this.manifest.base,
			outDir: this.manifest.outDir,
		});

		const componentInstance = await this.getComponentByRoute(routeData);
		return { componentInstance, routeData, newUrl, pathname };
	}

	insertRoute(route: RouteData, componentInstance: ComponentInstance): void {
		this.#componentsInterner.set(route, {
			page() {
				return Promise.resolve(componentInstance);
			},
			onRequest: this.resolvedMiddleware,
		});
	}

	// At the moment it's not used by the container via any public API
	async getComponentByRoute(routeData: RouteData): Promise<ComponentInstance> {
		const page = this.#componentsInterner.get(routeData);
		if (page) {
			return page.page();
		}
		throw new Error("Couldn't find component for route " + routeData.pathname);
	}
}

Domain

Subdomains

Dependencies

  • ../../core/build/types.js
  • ../core/base-pipeline.js
  • ../core/routing/rewrite.js
  • ../render/ssr-element.js
  • ../types/astro.js
  • ../types/public/common.js
  • ../types/public/internal.js

Frequently Asked Questions

What does pipeline.ts do?
pipeline.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RenderingEngine subdomain.
What does pipeline.ts depend on?
pipeline.ts imports 7 module(s): ../../core/build/types.js, ../core/base-pipeline.js, ../core/routing/rewrite.js, ../render/ssr-element.js, ../types/astro.js, ../types/public/common.js, ../types/public/internal.js.
Where is pipeline.ts in the architecture?
pipeline.ts is located at packages/astro/src/container/pipeline.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/container).

Analyze Your Own Codebase

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

Try Supermodel Free