Home / File/ build.mjs — astro Source File

build.mjs — astro Source File

Architecture documentation for build.mjs, a javascript file in the astro codebase. 5 imports, 0 dependents.

File javascript CoreAstro CoreMiddleware 5 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  ff2c719f_fe27_09a3_da3d_e2e373d9ff80["build.mjs"]
  4d75c445_4391_c7d4_eae5_d220320b7783["shared.mjs"]
  ff2c719f_fe27_09a3_da3d_e2e373d9ff80 --> 4d75c445_4391_c7d4_eae5_d220320b7783
  e16a223b_37f3_6b25_1ee1_2b7bcb9d9415["node:fs"]
  ff2c719f_fe27_09a3_da3d_e2e373d9ff80 --> e16a223b_37f3_6b25_1ee1_2b7bcb9d9415
  3955a637_4c78_0528_fe7c_92190a232cb0["node:module"]
  ff2c719f_fe27_09a3_da3d_e2e373d9ff80 --> 3955a637_4c78_0528_fe7c_92190a232cb0
  972c6fe0_4a8d_d55e_c1b0_a57c5bf4ed60["esbuild"]
  ff2c719f_fe27_09a3_da3d_e2e373d9ff80 --> 972c6fe0_4a8d_d55e_c1b0_a57c5bf4ed60
  f9680f34_7ad8_e388_8a06_5fe8504aee61["esbuild-plugin-copy"]
  ff2c719f_fe27_09a3_da3d_e2e373d9ff80 --> f9680f34_7ad8_e388_8a06_5fe8504aee61
  style ff2c719f_fe27_09a3_da3d_e2e373d9ff80 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

// @ts-check
import fs from 'node:fs';
import { createRequire } from 'node:module';
import esbuild from 'esbuild';
import { copy } from 'esbuild-plugin-copy';
import { rebuildPlugin } from './shared.mjs';

const require = createRequire(import.meta.url);

export default async function build() {
	const isDev = process.argv.includes('--watch');
	const metaFile = process.argv.includes('--metafile');

	/**
	 * @satisfies {import('esbuild').BuildOptions}
	 */
	const config = {
		entryPoints: {
			'dist/node/client': './src/client.ts',
			'dist/node/server': './node_modules/@astrojs/language-server/bin/nodeServer.js',
			'dist/astro-ts-plugin-bundle/index': './node_modules/@astrojs/ts-plugin/dist/index.js',
		},
		bundle: true,
		metafile: metaFile,
		sourcemap: isDev,
		outdir: '.',
		external: ['vscode', '@astrojs/compiler', 'prettier', 'prettier-plugin-astro'],
		format: 'cjs',
		platform: 'node',
		tsconfig: './tsconfig.json',
		define: { 'process.env.NODE_ENV': '"production"' },
		minify: process.argv.includes('--minify'),
		plugins: [
			copy({
				resolveFrom: 'cwd',
				assets: {
					from: ['../language-server/types/**/*.d.ts'],
					to: ['./dist/types'],
					watch: isDev,
				},
			}),
			{
				name: 'umd2esm',
				setup(pluginBuild) {
					pluginBuild.onResolve(
						{ filter: /^(vscode-.*-languageservice|jsonc-parser)/ },
						(buildArgs) => {
							const pathUmdMay = require.resolve(buildArgs.path, { paths: [buildArgs.resolveDir] });
							// Call twice the replace is to solve the problem of the path in Windows
							const pathEsm = pathUmdMay.replace('/umd/', '/esm/').replace('\\umd\\', '\\esm\\');
							return { path: pathEsm };
						},
					);
				},
			},
		],
	};

	if (!isDev) {
		const result = await esbuild.build(config);
		if (metaFile) fs.writeFileSync('meta.json', JSON.stringify(result.metafile));
		return;
	}

	const builder = await esbuild.context({
		...config,
		plugins: [rebuildPlugin, ...(config.plugins ?? [])],
	});

	await builder.watch();

	process.on('beforeExit', () => {
		builder.dispose && builder.dispose();
	});
}

build();

Domain

Subdomains

Functions

Dependencies

  • esbuild
  • esbuild-plugin-copy
  • node:fs
  • node:module
  • shared.mjs

Frequently Asked Questions

What does build.mjs do?
build.mjs is a source file in the astro codebase, written in javascript. It belongs to the CoreAstro domain, CoreMiddleware subdomain.
What functions are defined in build.mjs?
build.mjs defines 1 function(s): build.
What does build.mjs depend on?
build.mjs imports 5 module(s): esbuild, esbuild-plugin-copy, node:fs, node:module, shared.mjs.
Where is build.mjs in the architecture?
build.mjs is located at packages/language-tools/vscode/scripts/build.mjs (domain: CoreAstro, subdomain: CoreMiddleware, directory: packages/language-tools/vscode/scripts).

Analyze Your Own Codebase

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

Try Supermodel Free