Home / File/ index.ts — astro Source File

index.ts — astro Source File

Architecture documentation for index.ts, a typescript file in the astro codebase. 7 imports, 0 dependents.

File typescript CoreAstro CoreMiddleware 7 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  02725282_48b3_dec7_9602_7400485ced81["index.ts"]
  38342bd4_11df_7a37_2e70_333185fe2db2["../../core/index.js"]
  02725282_48b3_dec7_9602_7400485ced81 --> 38342bd4_11df_7a37_2e70_333185fe2db2
  114b9b11_4223_bea0_8878_8fe76f25ab1c["./codeActions.js"]
  02725282_48b3_dec7_9602_7400485ced81 --> 114b9b11_4223_bea0_8878_8fe76f25ab1c
  bacf4cb8_7d28_f04d_6935_4fb3f0b38ce9["./completions.js"]
  02725282_48b3_dec7_9602_7400485ced81 --> bacf4cb8_7d28_f04d_6935_4fb3f0b38ce9
  6d99d2ef_fa0d_201d_9ec7_ce1cc80ef11a["./diagnostics.js"]
  02725282_48b3_dec7_9602_7400485ced81 --> 6d99d2ef_fa0d_201d_9ec7_ce1cc80ef11a
  6857b6b2_4d48_bfb0_0a0e_8e2e52fabb56["language-server"]
  02725282_48b3_dec7_9602_7400485ced81 --> 6857b6b2_4d48_bfb0_0a0e_8e2e52fabb56
  d5fbeefb_858c_7d97_1cc2_a2a6a111ef40["volar-service-typescript"]
  02725282_48b3_dec7_9602_7400485ced81 --> d5fbeefb_858c_7d97_1cc2_a2a6a111ef40
  abeb339e_cdba_0d7f_6b7f_3696c1eb86f9["vscode-uri"]
  02725282_48b3_dec7_9602_7400485ced81 --> abeb339e_cdba_0d7f_6b7f_3696c1eb86f9
  style 02725282_48b3_dec7_9602_7400485ced81 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type { LanguageServicePlugin, LanguageServicePluginInstance } from '@volar/language-server';
import { create as createTypeScriptServices } from 'volar-service-typescript';
import { URI } from 'vscode-uri';
import { AstroVirtualCode } from '../../core/index.js';
import { enhancedProvideCodeActions, enhancedResolveCodeAction } from './codeActions.js';
import { enhancedProvideCompletionItems, enhancedResolveCompletionItem } from './completions.js';
import { enhancedProvideSemanticDiagnostics } from './diagnostics.js';

export const create = (
	ts: typeof import('typescript'),
	options?: {
		disableAutoImportCache: boolean | undefined;
	},
): LanguageServicePlugin[] => {
	const tsServicePlugins = createTypeScriptServices(ts as typeof import('typescript'), {
		disableAutoImportCache: options?.disableAutoImportCache,
	});

	return tsServicePlugins.map<LanguageServicePlugin>((plugin) => {
		if (plugin.name === 'typescript-semantic') {
			return {
				...plugin,
				create(context): LanguageServicePluginInstance {
					const typeScriptPlugin = plugin.create(context);
					return {
						...typeScriptPlugin,
						async provideFileRenameEdits(oldUri, newUri, token) {
							const astroConfig = await context.env.getConfiguration?.<{
								updateImportsOnFileMove: { enabled: boolean };
							}>('astro');

							// Check for `false` explicitly, as the default value is `true`, but it might not be set explicitly depending on the editor
							if (astroConfig?.updateImportsOnFileMove.enabled === false) {
								return null;
							}

							return typeScriptPlugin.provideFileRenameEdits!(oldUri, newUri, token);
						},
						async provideCompletionItems(document, position, completionContext, token) {
							const originalCompletions = await typeScriptPlugin.provideCompletionItems!(
								document,
								position,
								completionContext,
								token,
							);
							if (!originalCompletions) return null;

							return enhancedProvideCompletionItems(originalCompletions);
						},
						async resolveCompletionItem(item, token) {
							const resolvedCompletionItem = await typeScriptPlugin.resolveCompletionItem!(
								item,
								token,
							);
							if (!resolvedCompletionItem) return item;

							return enhancedResolveCompletionItem(resolvedCompletionItem, context);
						},
						async provideCodeActions(document, range, codeActionContext, token) {
							const originalCodeActions = await typeScriptPlugin.provideCodeActions!(
								document,
								range,
								codeActionContext,
								token,
							);
							if (!originalCodeActions) return null;

							return enhancedProvideCodeActions(originalCodeActions, context);
						},
						async resolveCodeAction(codeAction, token) {
							const resolvedCodeAction = await typeScriptPlugin.resolveCodeAction!(
								codeAction,
								token,
							);
							if (!resolvedCodeAction) return codeAction;

							return enhancedResolveCodeAction(resolvedCodeAction, context);
						},
						async provideDiagnostics(document, token) {
							const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri));
							const sourceScript = decoded && context.language.scripts.get(decoded[0]);
							const root = sourceScript?.generated?.root;

							let tsxLineCount = undefined;
							if (root instanceof AstroVirtualCode && decoded?.[1] === 'tsx') {
								// If we have compiler errors, our TSX isn't valid so don't bother showing TS errors
								if (root.hasCompilationErrors) return null;

								// We'll use this to filter out diagnostics that are outside the mapped range of the TSX
								tsxLineCount = root.astroMeta.tsxRanges.body.end.line;
							}

							const diagnostics = await typeScriptPlugin.provideDiagnostics!(document, token);
							if (!diagnostics) return null;

							return enhancedProvideSemanticDiagnostics(diagnostics, tsxLineCount);
						},
					};
				},
			};
		}
		return plugin;
	});
};

Domain

Subdomains

Functions

Dependencies

  • ../../core/index.js
  • ./codeActions.js
  • ./completions.js
  • ./diagnostics.js
  • language-server
  • volar-service-typescript
  • vscode-uri

Frequently Asked Questions

What does index.ts do?
index.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, CoreMiddleware subdomain.
What functions are defined in index.ts?
index.ts defines 1 function(s): create.
What does index.ts depend on?
index.ts imports 7 module(s): ../../core/index.js, ./codeActions.js, ./completions.js, ./diagnostics.js, language-server, volar-service-typescript, vscode-uri.
Where is index.ts in the architecture?
index.ts is located at packages/language-tools/language-server/src/plugins/typescript/index.ts (domain: CoreAstro, subdomain: CoreMiddleware, directory: packages/language-tools/language-server/src/plugins/typescript).

Analyze Your Own Codebase

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

Try Supermodel Free