an atproto based link aggregator
1/**
2 * Build the ingester as a standalone JS bundle for production.
3 * Resolves all imports and bundles dependencies.
4 */
5
6import * as esbuild from 'esbuild';
7
8await esbuild.build({
9 entryPoints: ['src/ingester/main.ts'],
10 bundle: true,
11 platform: 'node',
12 target: 'node22',
13 format: 'esm',
14 outfile: 'build/ingester.js',
15 sourcemap: true,
16 external: [
17 // Native modules that can't be bundled
18 '@libsql/linux-x64-gnu',
19 '@libsql/linux-x64-musl',
20 '@libsql/client',
21 '@libsql/core',
22 '@libsql/hrana-client',
23 'libsql',
24 // OpenTelemetry uses dynamic requires
25 '@opentelemetry/api',
26 '@opentelemetry/sdk-node',
27 '@opentelemetry/auto-instrumentations-node',
28 '@opentelemetry/exporter-trace-otlp-proto',
29 '@opentelemetry/exporter-metrics-otlp-proto',
30 '@opentelemetry/sdk-metrics',
31 '@opentelemetry/resources',
32 '@opentelemetry/semantic-conventions'
33 ],
34 banner: {
35 js: `
36import { createRequire } from 'module';
37import { fileURLToPath } from 'url';
38import { dirname } from 'path';
39const require = createRequire(import.meta.url);
40const __filename = fileURLToPath(import.meta.url);
41const __dirname = dirname(__filename);
42`.trim()
43 }
44});
45
46console.log('Ingester built to build/ingester.js');