{"version":3,"sources":["../src/instrumentation.ts"],"sourcesContent":["import { build } from \"esbuild\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmInstrumentationModule } from \"./instrumentation-runtime\";\n\nexport * from \"./instrumentation-runtime\";\n\nconst INSTRUMENTATION_EXTENSIONS = [\"ts\", \"mts\", \"js\", \"mjs\"] as const;\n\nexport function resolveFarmInstrumentationFile(root: string, srcDir = \"src\"): string | null {\n  const candidates = [\n    ...INSTRUMENTATION_EXTENSIONS.map((extension) =>\n      path.join(root, srcDir, `instrumentation.${extension}`),\n    ),\n    ...INSTRUMENTATION_EXTENSIONS.map((extension) =>\n      path.join(root, `instrumentation.${extension}`),\n    ),\n  ].filter((candidate) => fs.existsSync(candidate));\n\n  if (candidates.length > 1) {\n    throw new Error(\n      `Farm.js found multiple instrumentation files:\\n${candidates\n        .map((candidate) => `- ${path.relative(root, candidate)}`)\n        .join(\"\\n\")}\\nKeep only one instrumentation file in the project root or ${srcDir}/.`,\n    );\n  }\n\n  return candidates[0] ?? null;\n}\n\nexport async function loadFarmInstrumentation(\n  filePath: string | null,\n  root: string,\n): Promise<FarmInstrumentationModule | null> {\n  if (!filePath) return null;\n\n  const outputDirectory = path.join(root, \".farm\", \".instrumentation-loader\");\n  const outputFile = path.join(outputDirectory, \"instrumentation.mjs\");\n  await fs.promises.mkdir(outputDirectory, { recursive: true });\n  await build({\n    entryPoints: [filePath],\n    outfile: outputFile,\n    bundle: true,\n    format: \"esm\",\n    platform: \"node\",\n    target: \"node20\",\n    packages: \"external\",\n    sourcemap: \"inline\",\n  });\n\n  const url = pathToFileURL(outputFile);\n  url.searchParams.set(\"t\", String(Date.now()));\n  return (await import(url.href)) as FarmInstrumentationModule;\n}\n"],"mappings":";;;;;AAAA,SAAS,aAAa;AACtB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAK9B,IAAM,6BAA6B,CAAC,MAAM,OAAO,MAAM,KAAK;AAErD,SAAS,+BAA+B,MAAc,SAAS,OAAsB;AAC1F,QAAM,aAAa;AAAA,IACjB,GAAG,2BAA2B;AAAA,MAAI,CAAC,cACjC,KAAK,KAAK,MAAM,QAAQ,mBAAmB,SAAS,EAAE;AAAA,IACxD;AAAA,IACA,GAAG,2BAA2B;AAAA,MAAI,CAAC,cACjC,KAAK,KAAK,MAAM,mBAAmB,SAAS,EAAE;AAAA,IAChD;AAAA,EACF,EAAE,OAAO,CAAC,cAAc,GAAG,WAAW,SAAS,CAAC;AAEhD,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,EAAkD,WAC/C,IAAI,CAAC,cAAc,KAAK,KAAK,SAAS,MAAM,SAAS,CAAC,EAAE,EACxD,KAAK,IAAI,CAAC;AAAA,4DAA+D,MAAM;AAAA,IACpF;AAAA,EACF;AAEA,SAAO,WAAW,CAAC,KAAK;AAC1B;AAnBgB;AAqBhB,eAAsB,wBACpB,UACA,MAC2C;AAC3C,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,kBAAkB,KAAK,KAAK,MAAM,SAAS,yBAAyB;AAC1E,QAAM,aAAa,KAAK,KAAK,iBAAiB,qBAAqB;AACnE,QAAM,GAAG,SAAS,MAAM,iBAAiB,EAAE,WAAW,KAAK,CAAC;AAC5D,QAAM,MAAM;AAAA,IACV,aAAa,CAAC,QAAQ;AAAA,IACtB,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,EACb,CAAC;AAED,QAAM,MAAM,cAAc,UAAU;AACpC,MAAI,aAAa,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AAC5C,SAAQ,MAAM,OAAO,IAAI;AAC3B;AAvBsB;","names":[]}