Home / Function/ addAstro() — astro Function Reference

addAstro() — astro Function Reference

Architecture documentation for the addAstro() function in plugin.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  1732f637_5eff_8fe0_dd1b_08059001768a["addAstro()"]
  1501f8d9_3abf_5566_0f52_e2aea20c176a["plugin.ts"]
  1732f637_5eff_8fe0_dd1b_08059001768a -->|defined in| 1501f8d9_3abf_5566_0f52_e2aea20c176a
  style 1732f637_5eff_8fe0_dd1b_08059001768a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/astro-prism/src/plugin.ts lines 1–187

export function addAstro(Prism: typeof import('prismjs')) {
	if (Prism.languages.astro) {
		return;
	}

	let scriptLang: string;
	if (Prism.languages.typescript) {
		scriptLang = 'typescript';
	} else {
		scriptLang = 'javascript';
		console.warn(
			'Prism TypeScript language not loaded, Astro scripts will be treated as JavaScript.',
		);
	}

	let script = Prism.util.clone(Prism.languages[scriptLang]);

	// eslint-disable-next-line regexp/no-useless-assertions
	let space = /(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source;
	let braces = /(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source;
	let spread = /(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;

	function re(source: string, flags?: string) {
		source = source
			.replace(/<S>/g, function () {
				return space;
			})
			.replace(/<BRACES>/g, function () {
				return braces;
			})
			.replace(/<SPREAD>/g, function () {
				return spread;
			});
		return RegExp(source, flags);
	}

	spread = re(spread).source;

	Prism.languages.astro = Prism.languages.extend('markup', script);

	(Prism.languages.astro as any).tag.pattern = re(
		/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/
			.source,
	);

	(Prism.languages.astro as any).tag.inside['tag'].pattern = /^<\/?[^\s>/]*/;
	(Prism.languages.astro as any).tag.inside['attr-value'].pattern =
		/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/;
	(Prism.languages.astro as any).tag.inside['tag'].inside['class-name'] =
		/^[A-Z]\w*(?:\.[A-Z]\w*)*$/;
	(Prism.languages.astro as any).tag.inside['comment'] = script['comment'];

	Prism.languages.insertBefore(
		'inside',
		'attr-name',
		{
			spread: {
				pattern: re(/<SPREAD>/.source),
				inside: Prism.languages.astro,
			},
		},
		(Prism.languages.astro as any).tag,
	);

	Prism.languages.insertBefore(
		'inside',
		'special-attr',
		{
			script: {
				// Allow for two levels of nesting
				pattern: re(/=<BRACES>/.source),
				inside: {
					'script-punctuation': {
						pattern: /^=(?=\{)/,
						alias: 'punctuation',
					},
					rest: Prism.languages.astro,
				},
				alias: `language-${scriptLang}`,
			},
		},

Domain

Subdomains

Frequently Asked Questions

What does addAstro() do?
addAstro() is a function in the astro codebase, defined in packages/astro-prism/src/plugin.ts.
Where is addAstro() defined?
addAstro() is defined in packages/astro-prism/src/plugin.ts at line 1.

Analyze Your Own Codebase

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

Try Supermodel Free