mirror of
https://github.com/withastro/astro.git
synced 2025-01-06 22:10:10 -05:00
88529b679a
* Fix running the extension I'm not sure how my setup was different but I was unable to get the extension to run locally without adding a binary. This mirrors what Svelte does so I'm assuming it's the way it's supposed to be loaded. * Resolve TypeScript suggestions to the correct file This fixes a couple of bugs related to suggestions. 1 was this does the whole `.ts` extension fakeout thing so that the TypeScript plugin thinks that Astro files are TypeScript. Secondly this fixes the caching of the Document, so that suggestions account for the current document text.
70 lines
2 KiB
JavaScript
70 lines
2 KiB
JavaScript
import esbuild from 'esbuild';
|
|
import svelte from '../utils/svelte-plugin.js';
|
|
import del from 'del';
|
|
import { promises as fs } from 'fs';
|
|
import { dim, green, red, yellow } from 'kleur/colors';
|
|
import glob from 'tiny-glob';
|
|
|
|
/** @type {import('esbuild').BuildOptions} */
|
|
const defaultConfig = {
|
|
bundle: true,
|
|
minify: false,
|
|
format: 'esm',
|
|
platform: 'node',
|
|
target: 'node14',
|
|
sourcemap: 'inline',
|
|
sourcesContent: false,
|
|
plugins: [svelte()],
|
|
};
|
|
|
|
export default async function build(...args) {
|
|
const config = Object.assign({}, defaultConfig);
|
|
const isDev = args.slice(-1)[0] === 'IS_DEV';
|
|
let entryPoints = [].concat(...(await Promise.all(args.map((pattern) => glob(pattern, { filesOnly: true, absolute: true })))));
|
|
|
|
const { type = 'module', dependencies = {} } = await fs.readFile('./package.json').then((res) => JSON.parse(res.toString()));
|
|
const format = type === 'module' ? 'esm' : 'cjs';
|
|
const external = [...Object.keys(dependencies), 'source-map-support', 'source-map-support/register.js'];
|
|
const outdir = 'dist';
|
|
await clean(outdir);
|
|
|
|
if (!isDev) {
|
|
await esbuild.build({
|
|
...config,
|
|
entryPoints,
|
|
outdir,
|
|
external,
|
|
format,
|
|
});
|
|
return;
|
|
}
|
|
|
|
const builder = await esbuild.build({
|
|
...config,
|
|
watch: {
|
|
onRebuild(error, result) {
|
|
const date = new Date().toISOString();
|
|
if (error || (result && result.errors.length)) {
|
|
console.error(dim(`[${date}] `) + red(error || result.errors.join('\n')));
|
|
} else {
|
|
if (result.warnings.length) {
|
|
console.log(dim(`[${date}] `) + yellow('⚠ updated with warnings:\n' + result.warnings.join('\n')));
|
|
}
|
|
console.log(dim(`[${date}] `) + green('✔ updated'));
|
|
}
|
|
},
|
|
},
|
|
entryPoints,
|
|
outdir,
|
|
external,
|
|
format,
|
|
});
|
|
|
|
process.on('beforeExit', () => {
|
|
builder.stop?.();
|
|
});
|
|
}
|
|
|
|
async function clean(outdir) {
|
|
return del([`${outdir}/**`, `!${outdir}/**/*.d.ts`]);
|
|
}
|