#!/usr/bin/env node /** * Build script for @hyperframes/aws-lambda (public OSS package). * * Bundles each subpath barrel via esbuild → dist/, then emits .d.ts via tsc. * * Subpaths (each gets its own dist entry so adopters that import one path * don't load the others' transitive graphs at module-load time): * * . (the umbrella barrel: handler + sdk + cdk types re-exported) * ./handler (the Lambda runtime entry — what `scripts/build-zip.ts` ZIPs) * ./sdk (client-side helpers — AWS-SDK only, no chromium/puppeteer) * ./cdk (CDK L2 construct — aws-cdk-lib is a peer dep) * * All production deps and peer deps are kept external so consumers resolve * them via their own node_modules. */ import { build } from "esbuild"; import { execSync } from "node:child_process"; import { mkdirSync, rmSync } from "node:fs"; rmSync("dist", { recursive: true, force: true }); mkdirSync("dist", { recursive: true }); const sharedOpts = { bundle: true, platform: "node", target: "node22", format: "esm", minify: false, sourcemap: true, external: [ "@aws-sdk/client-s3", "@aws-sdk/client-sfn", "@hyperframes/producer", "@hyperframes/producer/distributed", "@sparticuz/chromium", "aws-cdk-lib", "constructs", "ffmpeg-static", "ffprobe-static", "puppeteer-core", "tar", ], }; await Promise.all([ build({ ...sharedOpts, entryPoints: ["src/index.ts"], outfile: "dist/index.js" }), build({ ...sharedOpts, entryPoints: ["src/handler.ts"], outfile: "dist/handler.js" }), build({ ...sharedOpts, entryPoints: ["src/sdk/index.ts"], outfile: "dist/sdk/index.js" }), build({ ...sharedOpts, entryPoints: ["src/cdk/index.ts"], outfile: "dist/cdk/index.js" }), ]); // esbuild doesn't emit .d.ts. tsc does, with a build-only tsconfig that // drops the workspace `paths` overrides so `@hyperframes/producer` resolves // through node_modules to the sibling package's already-built `dist/` // types instead of pulling its full source tree into emit (which would // violate rootDir). execSync("tsc -p tsconfig.build.json --emitDeclarationOnly", { stdio: "inherit" }); console.log("[Build] Complete: dist/{index,handler,sdk/index,cdk/index}.js + .d.ts");