{"path":"apps/api-server/build.mjs","size":3455,"locked":false,"binary":false,"truncated":false,"content":"import { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { build as esbuild } from \"esbuild\";\nimport esbuildPluginPino from \"esbuild-plugin-pino\";\nimport { rm } from \"node:fs/promises\";\n\n// Plugins (e.g. 'esbuild-plugin-pino') may use `require` to resolve dependencies\nglobalThis.require = createRequire(import.meta.url);\n\nconst artifactDir = path.dirname(fileURLToPath(import.meta.url));\n\nasync function buildAll() {\n  const distDir = path.resolve(artifactDir, \"dist\");\n  await rm(distDir, { recursive: true, force: true });\n\n  await esbuild({\n    entryPoints: [path.resolve(artifactDir, \"src/index.ts\")],\n    platform: \"node\",\n    bundle: true,\n    format: \"esm\",\n    outdir: distDir,\n    outExtension: { \".js\": \".mjs\" },\n    logLevel: \"info\",\n    // Some packages may not be bundleable, so we externalize them, we can add more here as needed.\n    // Some of the packages below may not be imported or installed, but we're adding them in case they are in the future.\n    // Examples of unbundleable packages:\n    // - uses native modules and loads them dynamically (e.g. sharp)\n    // - use path traversal to read files (e.g. @google-cloud/secret-manager loads sibling .proto files)\n    external: [\n      \"*.node\",\n      \"sharp\",\n      \"better-sqlite3\",\n      \"sqlite3\",\n      \"canvas\",\n      \"bcrypt\",\n      \"argon2\",\n      \"fsevents\",\n      \"re2\",\n      \"farmhash\",\n      \"xxhash-addon\",\n      \"bufferutil\",\n      \"utf-8-validate\",\n      \"ssh2\",\n      \"cpu-features\",\n      \"dtrace-provider\",\n      \"isolated-vm\",\n      \"lightningcss\",\n      \"pg-native\",\n      \"oracledb\",\n      \"mongodb-client-encryption\",\n      \"nodemailer\",\n      \"handlebars\",\n      \"knex\",\n      \"typeorm\",\n      \"protobufjs\",\n      \"onnxruntime-node\",\n      \"@tensorflow/*\",\n      \"@prisma/client\",\n      \"@mikro-orm/*\",\n      \"@grpc/*\",\n      \"@swc/*\",\n      \"@aws-sdk/*\",\n      \"@azure/*\",\n      \"@opentelemetry/*\",\n      \"@google-cloud/*\",\n      \"@google/*\",\n      \"googleapis\",\n      \"firebase-admin\",\n      \"@parcel/watcher\",\n      \"@sentry/profiling-node\",\n      \"@tree-sitter/*\",\n      \"aws-sdk\",\n      \"classic-level\",\n      \"dd-trace\",\n      \"ffi-napi\",\n      \"grpc\",\n      \"hiredis\",\n      \"kerberos\",\n      \"leveldown\",\n      \"miniflare\",\n      \"mysql2\",\n      \"newrelic\",\n      \"odbc\",\n      \"piscina\",\n      \"realm\",\n      \"ref-napi\",\n      \"rocksdb\",\n      \"sass-embedded\",\n      \"sequelize\",\n      \"serialport\",\n      \"snappy\",\n      \"tinypool\",\n      \"usb\",\n      \"workerd\",\n      \"wrangler\",\n      \"zeromq\",\n      \"zeromq-prebuilt\",\n      \"playwright\",\n      \"puppeteer\",\n      \"puppeteer-core\",\n      \"electron\",\n    ],\n    sourcemap: \"linked\",\n    plugins: [\n      // pino relies on workers to handle logging, instead of externalizing it we use a plugin to handle it\n      esbuildPluginPino({ transports: [\"pino-pretty\"] })\n    ],\n    // Make sure packages that are cjs only (e.g. express) but are bundled continue to work in our esm output file\n    banner: {\n      js: `import { createRequire as __bannerCrReq } from 'node:module';\nimport __bannerPath from 'node:path';\nimport __bannerUrl from 'node:url';\n\nglobalThis.require = __bannerCrReq(import.meta.url);\nglobalThis.__filename = __bannerUrl.fileURLToPath(import.meta.url);\nglobalThis.__dirname = __bannerPath.dirname(globalThis.__filename);\n    `,\n    },\n  });\n}\n\nbuildAll().catch((err) => {\n  console.error(err);\n  process.exit(1);\n});\n"}