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
Classes
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
Source
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