Home / Class/ experimental_AstroContainer Class — astro Architecture

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

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