experimental_AstroContainer Class — astro Architecture
Architecture documentation for the experimental_AstroContainer class in index.ts from the astro codebase.
Entity Profile
Dependency Diagram
graph TD cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3["experimental_AstroContainer"] 3e7d5a30_05d3_8677_9bbe_dc57d1b07ace["index.ts"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|defined in| 3e7d5a30_05d3_8677_9bbe_dc57d1b07ace a13892fd_40a1_27db_b8a2_2fe254fa56ab["constructor()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| a13892fd_40a1_27db_b8a2_2fe254fa56ab c980ad35_55a1_6c29_7240_7c0bf4ceac15["specifier()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| c980ad35_55a1_6c29_7240_7c0bf4ceac15 247c0bac_3ec9_44e7_0ee7_5587c9701cc7["create()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| 247c0bac_3ec9_44e7_0ee7_5587c9701cc7 db473761_f4ce_cb75_4308_e319cad682b5["addServerRenderer()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| db473761_f4ce_cb75_4308_e319cad682b5 c1a28dd0_a199_58b5_2c6b_81ea79e42161["addClientRenderer()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| c1a28dd0_a199_58b5_2c6b_81ea79e42161 fab32d33_ff45_da4e_0685_24487e59e0a8["createFromManifest()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| fab32d33_ff45_da4e_0685_24487e59e0a8 e2b0cf58_93cf_9188_9350_a4b5816b7b4f["pathUrl()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| e2b0cf58_93cf_9188_9350_a4b5816b7b4f 765ee439_68bf_1e77_8861_ae817e9e4008["renderToString()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| 765ee439_68bf_1e77_8861_ae817e9e4008 d7aea22d_3fc3_221d_dab6_a15370f48fd6["renderToResponse()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| d7aea22d_3fc3_221d_dab6_a15370f48fd6 8f2a3706_249d_68c3_8808_f4aae52abe06["insertPageRoute()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| 8f2a3706_249d_68c3_8808_f4aae52abe06 5e77fab8_ebaf_d654_083a_13806d7099b1["url()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| 5e77fab8_ebaf_d654_083a_13806d7099b1 99139c3a_5a2d_9b8b_16ea_ba816fa72c04["componentFactory()"] cb9f7e72_0a2c_f337_8c0f_3a16cbafeab3 -->|method| 99139c3a_5a2d_9b8b_16ea_ba816fa72c04
Relationship Graph
Source Code
packages/astro/src/container/index.ts lines 277–628
export class experimental_AstroContainer {
#pipeline: ContainerPipeline;
/**
* Internally used to check if the container was created with a manifest.
* @private
*/
#withManifest = false;
private constructor({
streaming = false,
manifest,
renderers,
resolve,
astroConfig,
}: AstroContainerConstructor) {
this.#pipeline = ContainerPipeline.create({
logger: new Logger({
level: 'info',
dest: nodeLogDestination,
}),
manifest: createManifest(manifest, renderers),
streaming,
renderers: renderers ?? manifest?.renderers ?? [],
resolve: async (specifier: string) => {
if (this.#withManifest) {
return this.#containerResolve(specifier, astroConfig);
} else if (resolve) {
return resolve(specifier);
}
return specifier;
},
});
}
async #containerResolve(specifier: string, astroConfig?: AstroConfig): Promise<string> {
const found = this.#pipeline.manifest.entryModules[specifier];
if (found) {
return new URL(found, astroConfig?.build.client).toString();
}
return found;
}
/**
* Creates a new instance of a container.
*
* @param {AstroContainerOptions=} containerOptions
*/
public static async create(
containerOptions: AstroContainerOptions = {},
): Promise<experimental_AstroContainer> {
const { streaming = false, manifest, renderers = [], resolve } = containerOptions;
const astroConfig = await validateConfig(ASTRO_CONFIG_DEFAULTS, process.cwd(), 'container');
return new experimental_AstroContainer({
streaming,
manifest,
renderers,
astroConfig,
resolve,
});
}
/**
* Use this function to manually add a **server** renderer to the container.
*
* This function is preferred when you require to use the container with a renderer in environments such as on-demand pages.
*
* ## Example
*
* ```js
* import reactRenderer from "@astrojs/react/server.js";
* import vueRenderer from "@astrojs/vue/server.js";
* import customRenderer from "../renderer/customRenderer.js";
* import { experimental_AstroContainer as AstroContainer } from "astro/container"
*
* const container = await AstroContainer.create();
* container.addServerRenderer(reactRenderer);
* container.addServerRenderer(vueRenderer);
* container.addServerRenderer("customRenderer", customRenderer);
* ```
*
Domain
Defined In
Source
Frequently Asked Questions
What is the experimental_AstroContainer class?
experimental_AstroContainer is a class in the astro codebase, defined in packages/astro/src/container/index.ts.
Where is experimental_AstroContainer defined?
experimental_AstroContainer is defined in packages/astro/src/container/index.ts at line 277.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free