Home / Function/ createIntegration() — astro Function Reference

createIntegration() — astro Function Reference

Architecture documentation for the createIntegration() function in index.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  8cb2df22_77fb_cdfc_6d71_9e016d4de497["createIntegration()"]
  13f9df63_e787_0221_d262_fe287a4b7ce1["index.ts"]
  8cb2df22_77fb_cdfc_6d71_9e016d4de497 -->|defined in| 13f9df63_e787_0221_d262_fe287a4b7ce1
  style 8cb2df22_77fb_cdfc_6d71_9e016d4de497 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/integrations/cloudflare/src/index.ts lines 80–407

export default function createIntegration(args?: Options): AstroIntegration {
	let _config: AstroConfig;
	let finalBuildOutput: HookParameters<'astro:config:done'>['buildOutput'];

	let _routes: IntegrationResolvedRoute[];

	const sessionKVBindingName = args?.sessionKVBindingName ?? DEFAULT_SESSION_KV_BINDING_NAME;
	const imagesBindingName = args?.imagesBindingName ?? DEFAULT_IMAGES_BINDING_NAME;

	return {
		name: '@astrojs/cloudflare',
		hooks: {
			'astro:config:setup': ({ command, config, updateConfig, logger, addWatchFile }) => {
				let session = config.session;

				if (args?.imageService === 'cloudflare-binding') {
					logger.info(
						`Enabling image processing with Cloudflare Images for production with the "${imagesBindingName}" Images binding.`,
					);
				}

				if (!session?.driver) {
					logger.info(
						`Enabling sessions with Cloudflare KV with the "${sessionKVBindingName}" KV binding.`,
					);

					session = {
						driver: sessionDrivers.cloudflareKVBinding({
							binding: sessionKVBindingName,
						}),
						cookie: session?.cookie,
						ttl: session?.ttl,
					};
				}
				const cfPluginConfig: PluginConfig = {
					viteEnvironment: { name: 'ssr' },
					config: cloudflareConfigCustomizer({
						sessionKVBindingName: args?.sessionKVBindingName,
						imagesBindingName:
							args?.imageService === 'cloudflare-binding' ? args?.imagesBindingName : false,
					}),
					experimental: {
						prerenderWorker: {
							config(_, { entryWorkerConfig }) {
								return {
									...entryWorkerConfig,
									// This is the Vite environment name used for prerendering
									name: 'prerender',
								};
							},
						},
					},
				};

				updateConfig({
					build: {
						client: new URL(`./client/`, config.outDir),
						server: new URL('./_worker.js/', config.outDir),
						redirects: false,
					},
					session,
					vite: {
						plugins: [
							cfVitePlugin(cfPluginConfig),
							{
								name: '@astrojs/cloudflare:cf-imports',
								enforce: 'pre',
								resolveId: {
									filter: {
										id: /^cloudflare:/,
									},
									handler(id) {
										return { id, external: true };
									},
								},
							},
							{
								name: '@astrojs/cloudflare:environment',
								configEnvironment(environmentName, _options) {
									const isServerEnvironment = ['astro', 'ssr', 'prerender'].includes(
										environmentName,

Domain

Subdomains

Frequently Asked Questions

What does createIntegration() do?
createIntegration() is a function in the astro codebase, defined in packages/integrations/cloudflare/src/index.ts.
Where is createIntegration() defined?
createIntegration() is defined in packages/integrations/cloudflare/src/index.ts at line 80.

Analyze Your Own Codebase

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

Try Supermodel Free