{"version":3,"sources":["../src/routes.ts","../src/index.ts"],"names":["Deployer","join","fileURLToPath","dirname","copy","readFileSync","injectStudioHtmlConfig","process","writeFileSync","move"],"mappings":"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","file":"index.cjs","sourcesContent":["type VercelRoutesOptions = {\n  studio: boolean;\n};\n\nexport function getVercelRoutes({ studio }: VercelRoutesOptions) {\n  return studio\n    ? [\n        { src: '^/$', dest: '/index.html' },\n        { src: '/api/(.*)', dest: '/' },\n        { src: '/health', dest: '/' },\n        { handle: 'filesystem' as const },\n        { src: '/(.*)', dest: '/index.html', check: true },\n      ]\n    : [{ src: '/(.*)', dest: '/' }];\n}\n","import { readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport process from 'node:process';\nimport { fileURLToPath } from 'node:url';\nimport type { Config } from '@mastra/core/mastra';\nimport { Deployer } from '@mastra/deployer';\nimport { injectStudioHtmlConfig } from '@mastra/deployer/build';\nimport { copy, move } from 'fs-extra/esm';\nimport { getVercelRoutes } from './routes';\nimport type { VcConfig, VcConfigOverrides, VercelDeployerOptions } from './types';\n\nexport class VercelDeployer extends Deployer {\n  private vcConfigOverrides: VcConfigOverrides = {};\n  private studio: boolean;\n\n  constructor(options: VercelDeployerOptions = {}) {\n    super({ name: 'VERCEL' });\n    this.outputDir = join('.vercel', 'output', 'functions', 'index.func');\n    this.studio = options.studio ?? false;\n\n    const { studio, ...overrides } = options;\n    this.vcConfigOverrides = { ...overrides };\n  }\n\n  protected async getUserBundlerOptions(\n    mastraEntryFile: string,\n    outputDirectory: string,\n  ): Promise<NonNullable<Config['bundler']>> {\n    const bundlerOptions = await super.getUserBundlerOptions(mastraEntryFile, outputDirectory);\n\n    // Always force externals: true for Vercel deployments.\n    // Vercel serverless functions resolve dependencies from node_modules,\n    // so bundling them inline serves no purpose. Bundling inline can also cause\n    // circular module evaluation deadlocks when dynamic imports produce chunks\n    // that depend back on the entry module via static imports, resulting in\n    // \"Detected unsettled top-level await\" errors (Node.js exit code 13).\n    // See: https://github.com/mastra-ai/mastra/issues/14860\n    return {\n      ...bundlerOptions,\n      externals: true,\n    };\n  }\n\n  async prepare(outputDirectory: string): Promise<void> {\n    await super.prepare(outputDirectory);\n\n    this.writeVercelJSON(join(outputDirectory, this.outputDir, '..', '..'));\n\n    if (this.studio) {\n      const __filename = fileURLToPath(import.meta.url);\n      const __dirname = dirname(__filename);\n\n      const studioSource = join(dirname(__dirname), 'dist', 'studio');\n      const staticDir = join(outputDirectory, '.vercel', 'output', 'static');\n\n      try {\n        await copy(studioSource, staticDir, { overwrite: true });\n      } catch (err) {\n        throw new Error(\n          `Failed to copy studio assets from \"${studioSource}\" to \"${staticDir}\": ${err instanceof Error ? err.message : err}`,\n        );\n      }\n\n      this.injectStudioConfig(staticDir);\n    }\n  }\n\n  private getEntry(): string {\n    return `\nimport { handle } from 'hono/vercel'\nimport { mastra } from '#mastra';\nimport { createHonoServer, getToolExports } from '#server';\nimport { tools } from '#tools';\nimport { scoreTracesWorkflow } from '@mastra/core/evals/scoreTraces';\n\nif (mastra.getStorage()) {\n  mastra.__registerInternalWorkflow(scoreTracesWorkflow);\n}\n\nconst app = await createHonoServer(mastra, { tools: getToolExports(tools) });\n\nexport const GET = handle(app);\nexport const POST = handle(app);\nexport const PUT = handle(app);\nexport const DELETE = handle(app);\nexport const PATCH = handle(app);\nexport const OPTIONS = handle(app);\nexport const HEAD = handle(app);\n`;\n  }\n\n  private injectStudioConfig(staticDir: string) {\n    const indexPath = join(staticDir, 'index.html');\n    let html = readFileSync(indexPath, 'utf-8');\n\n    /**\n     * Use window.location expressions so the SPA constructs the correct same-origin endpoint.\n     * Port uses a ternary: window.location.port is '' for default ports (80/443), and the SPA falls back to 4111 for empty strings, so we return the default port explicitly instead.\n     */\n    html = injectStudioHtmlConfig(html, {\n      host: `window.location.hostname`,\n      port: `(window.location.port || (window.location.protocol === 'https:' ? '443' : '80'))`,\n      protocol: `window.location.protocol.replace(':', '')`,\n      apiPrefix: `'/api'`,\n      basePath: '',\n      hideCloudCta: `'true'`,\n      templates: `'false'`,\n      cloudApiEndpoint: `''`,\n      experimentalFeatures: `'false'`,\n      telemetryDisabled: `''`,\n      requestContextPresets: `''`,\n      experimentalUI: `'false'`,\n      agentSignals: process.env.MASTRA_AGENT_SIGNALS === 'false' ? `'false'` : `'true'`,\n      signalsUI: process.env.MASTRA_SIGNALS_UI === 'true' ? `'true'` : `'false'`,\n      organizationId: `'${process.env.MASTRA_ORGANIZATION_ID || ''}'`,\n      platformProjectId: `'${process.env.MASTRA_PLATFORM_PROJECT_ID || ''}'`,\n      platformObservabilityEndpoint: `'${process.env.MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT || ''}'`,\n    });\n\n    writeFileSync(indexPath, html);\n  }\n\n  private writeVercelJSON(outputDirectory: string) {\n    writeFileSync(\n      join(outputDirectory, 'config.json'),\n      JSON.stringify({ version: 3, routes: getVercelRoutes({ studio: this.studio }) }),\n    );\n  }\n\n  async bundle(\n    entryFile: string,\n    outputDirectory: string,\n    { toolsPaths, projectRoot }: { toolsPaths: (string | string[])[]; projectRoot: string },\n  ): Promise<void> {\n    const result = await this._bundle(\n      this.getEntry(),\n      entryFile,\n      { outputDirectory, projectRoot },\n      toolsPaths,\n      join(outputDirectory, this.outputDir),\n    );\n\n    const nodeVersion = process.version?.split('.')?.[0]?.replace('v', '') ?? '22';\n\n    const vcConfig: VcConfig = {\n      handler: 'index.mjs',\n      launcherType: 'Nodejs',\n      runtime: `nodejs${nodeVersion}.x`,\n      shouldAddHelpers: true,\n    };\n\n    // Merge supported overrides\n    const { maxDuration, memory, regions } = this.vcConfigOverrides;\n    if (typeof maxDuration === 'number') vcConfig.maxDuration = maxDuration;\n    if (typeof memory === 'number') vcConfig.memory = memory;\n    if (Array.isArray(regions) && regions.length > 0) vcConfig.regions = regions;\n\n    writeFileSync(join(outputDirectory, this.outputDir, '.vc-config.json'), JSON.stringify(vcConfig, null, 2));\n\n    await move(join(outputDirectory, '.vercel', 'output'), join(process.cwd(), '.vercel', 'output'), {\n      overwrite: true,\n    });\n\n    return result;\n  }\n\n  async deploy(): Promise<void> {\n    this.logger?.info('Deploying to Vercel is deprecated. Please use the Vercel dashboard to deploy.');\n  }\n\n  async lint(entryFile: string, outputDirectory: string, toolsPaths: (string | string[])[]): Promise<void> {\n    await super.lint(entryFile, outputDirectory, toolsPaths);\n\n    const hasLibsql = (await this.deps.checkDependencies(['@mastra/libsql'])) === `ok`;\n\n    if (hasLibsql) {\n      this.logger.error(\n        `Vercel Deployer does not support @libsql/client(which may have been installed by @mastra/libsql) as a dependency. \n\t\t\t\tUse other Mastra Storage options instead e.g @mastra/pg`,\n      );\n      process.exit(1);\n    }\n  }\n}\n"]}