@mastra/deployer 1.82.0-alpha.3 → 1.83.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/{analyze-DNnGuzqf.cjs → analyze-DJ-g40iE.cjs} +2 -2
  2. package/dist/{analyze-DNnGuzqf.cjs.map → analyze-DJ-g40iE.cjs.map} +1 -1
  3. package/dist/{analyze-CW9fEusV.js → analyze-fYsu753O.js} +3 -24
  4. package/dist/{analyze-CW9fEusV.js.map → analyze-fYsu753O.js.map} +1 -1
  5. package/dist/build/analyze.cjs +1 -1
  6. package/dist/build/analyze.js +1 -1
  7. package/dist/build/bundlerOptions.d.ts +1 -1
  8. package/dist/build/deployer.d.ts +1 -1
  9. package/dist/build/index.cjs +4 -4
  10. package/dist/build/index.js +4 -4
  11. package/dist/build/shared/extract-mastra-option.d.ts.map +1 -1
  12. package/dist/{build-Cc9X11g7.cjs → build-DJrBURvF.cjs} +5 -5
  13. package/dist/{build-Cc9X11g7.cjs.map → build-DJrBURvF.cjs.map} +1 -1
  14. package/dist/{build-PqRB5M-E.js → build-dIfHk6xF.js} +5 -5
  15. package/dist/{build-PqRB5M-E.js.map → build-dIfHk6xF.js.map} +1 -1
  16. package/dist/bundler/index.cjs +1 -1
  17. package/dist/bundler/index.d.ts +1 -1
  18. package/dist/bundler/index.d.ts.map +1 -1
  19. package/dist/bundler/index.js +1 -1
  20. package/dist/{bundler-DRlNM9-F.js → bundler-DBj7Xv0j.js} +7 -6
  21. package/dist/bundler-DBj7Xv0j.js.map +1 -0
  22. package/dist/{bundler-8GO8sXwa.cjs → bundler-gVxl78M9.cjs} +7 -6
  23. package/dist/bundler-gVxl78M9.cjs.map +1 -0
  24. package/dist/{bundlerOptions-ScfCrul-.js → bundlerOptions-CklrCRoZ.js} +4 -3
  25. package/dist/{bundlerOptions-ScfCrul-.js.map → bundlerOptions-CklrCRoZ.js.map} +1 -1
  26. package/dist/{bundlerOptions-CPMQkWfY.cjs → bundlerOptions-DxMLiEfQ.cjs} +4 -3
  27. package/dist/{bundlerOptions-CPMQkWfY.cjs.map → bundlerOptions-DxMLiEfQ.cjs.map} +1 -1
  28. package/dist/deploy/base.d.ts +1 -1
  29. package/dist/docs/SKILL.md +1 -1
  30. package/dist/docs/assets/SOURCE_MAP.json +33 -2
  31. package/dist/index.cjs +4 -4
  32. package/dist/index.js +4 -4
  33. package/dist/rolldown-runtime-CO0Nlsmt.js +23 -0
  34. package/dist/server/index.cjs +37 -12
  35. package/dist/server/index.cjs.map +1 -1
  36. package/dist/server/index.d.ts +2 -2
  37. package/dist/server/index.js +37 -12
  38. package/dist/server/index.js.map +1 -1
  39. package/dist/services/deps.d.ts +1 -1
  40. package/dist/services/deps.d.ts.map +1 -1
  41. package/dist/services/index.cjs +1 -1
  42. package/dist/services/index.js +1 -1
  43. package/dist/{services-DbgqQ_yI.cjs → services-B8neClCI.cjs} +52 -5
  44. package/dist/services-B8neClCI.cjs.map +1 -0
  45. package/dist/{services-PA2YqqQJ.js → services-BKh9M2E5.js} +51 -5
  46. package/dist/services-BKh9M2E5.js.map +1 -0
  47. package/package.json +13 -10
  48. package/dist/bundler-8GO8sXwa.cjs.map +0 -1
  49. package/dist/bundler-DRlNM9-F.js.map +0 -1
  50. package/dist/services-DbgqQ_yI.cjs.map +0 -1
  51. package/dist/services-PA2YqqQJ.js.map +0 -1
  52. /package/dist/_types/{@hono_node-server@2.1.5 → @hono_node-server@2.1.6}/dist/index.d.mts +0 -0
  53. /package/dist/_types/{@hono_node-server@2.1.5 → @hono_node-server@2.1.6}/package.json +0 -0
  54. /package/dist/_types/{@internal_deployer@0.0.0 → @internal_deployer@0.0.1}/dist/_types/@internal_core@0.1.4/dist/index-Diz1p9N7.d.ts +0 -0
  55. /package/dist/_types/{@internal_deployer@0.0.0 → @internal_deployer@0.0.1}/dist/_types/@internal_core@0.1.4/dist/logger/index.d.ts +0 -0
  56. /package/dist/_types/{@internal_deployer@0.0.0 → @internal_deployer@0.0.1}/dist/bundler.d.ts +0 -0
  57. /package/dist/_types/{@internal_deployer@0.0.0 → @internal_deployer@0.0.1}/dist/deployer.d.ts +0 -0
  58. /package/dist/_types/{@internal_deployer@0.0.0 → @internal_deployer@0.0.1}/dist/index.d.ts +0 -0
  59. /package/dist/_types/{@internal_deployer@0.0.0 → @internal_deployer@0.0.1}/package.json +0 -0
  60. /package/dist/_types/{@mastra_hono@1.7.24-alpha.3 → @mastra_hono@1.7.25-alpha.0}/dist/auth-middleware.d.ts +0 -0
  61. /package/dist/_types/{@mastra_hono@1.7.24-alpha.3 → @mastra_hono@1.7.25-alpha.0}/dist/browser-stream/index.d.ts +0 -0
  62. /package/dist/_types/{@mastra_hono@1.7.24-alpha.3 → @mastra_hono@1.7.25-alpha.0}/dist/index.d.ts +0 -0
  63. /package/dist/_types/{@mastra_hono@1.7.24-alpha.3 → @mastra_hono@1.7.25-alpha.0}/package.json +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"services-DbgqQ_yI.cjs","names":["Writable","spawn","fsPromises","MastraError","ErrorDomain","ErrorCategory","stringify","parse","parseAllDocuments","readJSON","writeJSON","ensureFile","__filename","fileURLToPath","__dirname","dirname","__filename","fileURLToPath","__dirname","fsExtra"],"sources":["../../_internal-core/dist/logger/index.js","../../_internal-core/dist/base/index.js","../src/deploy/log.ts","../src/services/deps.ts","../src/services/env.ts","../src/services/fs.ts"],"sourcesContent":["import { Transform } from \"stream\";\n// src/logger/adapter.ts\nfunction isAdaptableLogger(logger) {\n\treturn typeof logger.__attachObservability === \"function\";\n}\n/**\n* Export a tracked exception through the adapter sink, mirroring the\n* DualLogger dual-write shape (`errorId`/`domain`/`category`/`details`/`cause`\n* when present on a MastraError-like value). Never throws into the caller.\n*/\nfunction exportTrackedException(ctx, error, metadata) {\n\tif (!ctx?.options.export) return;\n\ttry {\n\t\tconst mastraError = error;\n\t\tctx.getLogSink()?.error(error.message, {\n\t\t\t...mastraError.id !== void 0 ? { errorId: mastraError.id } : {},\n\t\t\t...mastraError.domain !== void 0 ? { domain: mastraError.domain } : {},\n\t\t\t...mastraError.category !== void 0 ? { category: mastraError.category } : {},\n\t\t\t...mastraError.details !== void 0 ? { details: mastraError.details } : {},\n\t\t\t...error.cause instanceof Error ? { cause: error.cause.message } : {},\n\t\t\t...metadata\n\t\t});\n\t} catch {}\n}\n/**\n* Adapt IMastraLogger's variadic args into the structured `data` payload of\n* an exported log record. Extracts the first plain object as data,\n* serializes an Error arg, and collects remaining primitives under `args`\n* so the derived record preserves all context from the native call.\n*/\nfunction buildLogRecordData(args) {\n\tconst objectData = args.find((arg) => arg !== null && typeof arg === \"object\" && !Array.isArray(arg) && !(arg instanceof Error));\n\tconst errorArg = args.find((arg) => arg instanceof Error);\n\tconst extraArgs = args.filter((arg) => arg !== objectData && arg !== errorArg);\n\tif (!objectData && !errorArg && extraArgs.length === 0) return void 0;\n\treturn {\n\t\t...objectData ?? {},\n\t\t...errorArg ? { error: {\n\t\t\tname: errorArg.name,\n\t\t\tmessage: errorArg.message,\n\t\t\tstack: errorArg.stack\n\t\t} } : {},\n\t\t...extraArgs.length > 0 ? { args: extraArgs } : {}\n\t};\n}\n// src/logger/noop-logger.ts\nconst noopLogger = {\n\tdebug: () => {},\n\tinfo: () => {},\n\twarn: () => {},\n\terror: () => {},\n\tcleanup: async () => {},\n\tgetTransports: () => /* @__PURE__ */ new Map(),\n\ttrackException: () => {},\n\tlistLogs: async () => ({\n\t\tlogs: [],\n\t\ttotal: 0,\n\t\tpage: 1,\n\t\tperPage: 100,\n\t\thasMore: false\n\t}),\n\tlistLogsByRunId: async () => ({\n\t\tlogs: [],\n\t\ttotal: 0,\n\t\tpage: 1,\n\t\tperPage: 100,\n\t\thasMore: false\n\t})\n};\n// src/logger/index.ts\nconst RegisteredLogger = {\n\tAGENT: \"AGENT\",\n\tOBSERVABILITY: \"OBSERVABILITY\",\n\tAUTH: \"AUTH\",\n\tBROWSER: \"BROWSER\",\n\tNETWORK: \"NETWORK\",\n\tWORKFLOW: \"WORKFLOW\",\n\tLLM: \"LLM\",\n\tTTS: \"TTS\",\n\tVOICE: \"VOICE\",\n\tVECTOR: \"VECTOR\",\n\tBUNDLER: \"BUNDLER\",\n\tDEPLOYER: \"DEPLOYER\",\n\tMEMORY: \"MEMORY\",\n\tSTORAGE: \"STORAGE\",\n\tEMBEDDINGS: \"EMBEDDINGS\",\n\tMCP_SERVER: \"MCP_SERVER\",\n\tSERVER_CACHE: \"SERVER_CACHE\",\n\tSERVER: \"SERVER\",\n\tWORKSPACE: \"WORKSPACE\",\n\tCHANNEL: \"CHANNEL\"\n};\nconst LogLevel = {\n\tDEBUG: \"debug\",\n\tINFO: \"info\",\n\tWARN: \"warn\",\n\tERROR: \"error\",\n\tNONE: \"silent\"\n};\nvar LoggerTransport = class extends Transform {\n\tconstructor(opts = {}) {\n\t\tsuper({\n\t\t\t...opts,\n\t\t\tobjectMode: true\n\t\t});\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogs(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nconst createCustomTransport = (stream, listLogs, listLogsByRunId) => {\n\tlet transport = stream;\n\tif (listLogs) transport.listLogs = listLogs;\n\tif (listLogsByRunId) transport.listLogsByRunId = listLogsByRunId;\n\treturn transport;\n};\nvar MastraLogger = class {\n\tname;\n\tlevel;\n\ttransports;\n\tconstructor(options = {}) {\n\t\tthis.name = options.name || \"Mastra\";\n\t\tthis.level = options.level || LogLevel.ERROR;\n\t\tthis.transports = new Map(Object.entries(options.transports || {}));\n\t}\n\tgetTransports() {\n\t\treturn this.transports;\n\t}\n\ttrackException(_error, _metadata) {}\n\tasync listLogs(transportId, params) {\n\t\tif (!transportId || !this.transports.has(transportId)) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogs?.(params) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId({ transportId, runId, fromDate, toDate, logLevel, filters, page, perPage }) {\n\t\tif (!transportId || !this.transports.has(transportId) || !runId) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogsByRunId?.({\n\t\t\trunId,\n\t\t\tfromDate,\n\t\t\ttoDate,\n\t\t\tlogLevel,\n\t\t\tfilters,\n\t\t\tpage,\n\t\t\tperPage\n\t\t}) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nvar ConsoleLogger = class ConsoleLogger extends MastraLogger {\n\tcomponent;\n\tfilter;\n\t#adapterContext;\n\tconstructor(options = {}) {\n\t\tsuper(options);\n\t\tthis.component = options.component;\n\t\tthis.filter = options.filter;\n\t}\n\t/**\n\t* Adapter hook (see `AdaptableLogger`): enables native trace correlation\n\t* (trace_id/span_id appended to console output) and observability export\n\t* derived from the same record. Called by Mastra during setup.\n\t*/\n\t__attachObservability(ctx) {\n\t\tthis.#adapterContext = ctx;\n\t}\n\tchild(componentOrBindings) {\n\t\tconst component = typeof componentOrBindings === \"string\" ? componentOrBindings : componentOrBindings?.component ?? this.component;\n\t\tconst child = new ConsoleLogger({\n\t\t\tname: this.name,\n\t\t\tlevel: this.level,\n\t\t\tcomponent,\n\t\t\tfilter: this.filter\n\t\t});\n\t\tif (this.#adapterContext) child.__attachObservability(this.#adapterContext);\n\t\treturn child;\n\t}\n\t/**\n\t* Native-record correlation: when a span is active, append the trace\n\t* fields object to the console args so every destination sees them.\n\t*/\n\t#correlate(args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.correlation) return args;\n\t\ttry {\n\t\t\tconst fields = ctx.resolveTraceFields();\n\t\t\treturn fields ? [...args, fields] : args;\n\t\t} catch {\n\t\t\treturn args;\n\t\t}\n\t}\n\t/**\n\t* Export the record derived from the same native call to observability.\n\t* Mirrors DualLogger semantics: export is independent of the console\n\t* level filter, and never throws into the caller.\n\t*/\n\t#export(level, message, args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.export) return;\n\t\ttry {\n\t\t\tctx.getLogSink()?.[level](message, buildLogRecordData(args));\n\t\t} catch {}\n\t}\n\tshouldLog(level, message, args) {\n\t\tif (!this.filter) return true;\n\t\ttry {\n\t\t\treturn this.filter({\n\t\t\t\tcomponent: this.component,\n\t\t\t\tlevel,\n\t\t\t\tmessage,\n\t\t\t\targs\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconsole.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n\t\t\treturn true;\n\t\t}\n\t}\n\tprefix() {\n\t\treturn this.component ? `[${this.component}] ` : \"\";\n\t}\n\tdebug(message, ...args) {\n\t\tif (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"debug\", message, args);\n\t}\n\tinfo(message, ...args) {\n\t\tif ((this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.INFO, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"info\", message, args);\n\t}\n\twarn(message, ...args) {\n\t\tif ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) console.warn(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"warn\", message, args);\n\t}\n\terror(message, ...args) {\n\t\tif ((this.level === LogLevel.ERROR || this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.ERROR, message, args)) console.error(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"error\", message, args);\n\t}\n\ttrackException(error, metadata) {\n\t\texportTrackedException(this.#adapterContext, error, metadata);\n\t}\n\tasync listLogs(_transportId, _params) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _params?.page ?? 1,\n\t\t\tperPage: _params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args.page ?? 1,\n\t\t\tperPage: _args.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nexport { ConsoleLogger, LogLevel, LoggerTransport, MastraLogger, RegisteredLogger, buildLogRecordData, createCustomTransport, exportTrackedException, isAdaptableLogger, noopLogger };\n\n//# sourceMappingURL=index.js.map","import { ConsoleLogger, RegisteredLogger } from \"../logger/index.js\";\n// src/base/MastraBase.ts\nvar MastraBase = class {\n\tcomponent = RegisteredLogger.LLM;\n\tlogger;\n\tname;\n\t#rawConfig;\n\tconstructor({ component, name, rawConfig }) {\n\t\tthis.component = component || RegisteredLogger.LLM;\n\t\tthis.name = name;\n\t\tthis.#rawConfig = rawConfig;\n\t\tthis.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n\t}\n\t/**\n\t* Returns the raw storage configuration this primitive was created from,\n\t* or undefined if it was created from code.\n\t*/\n\ttoRawConfig() {\n\t\treturn this.#rawConfig;\n\t}\n\t/**\n\t* Sets the raw storage configuration for this primitive.\n\t* @internal\n\t*/\n\t__setRawConfig(rawConfig) {\n\t\tthis.#rawConfig = rawConfig;\n\t}\n\t/**\n\t* Set the logger for the agent\n\t* @param logger\n\t*/\n\t__setLogger(logger) {\n\t\tthis.logger = \"child\" in logger && typeof logger.child === \"function\" ? logger.child({ component: this.component }) : logger;\n\t}\n};\nexport { MastraBase };\n\n//# sourceMappingURL=index.js.map","import { spawn } from 'node:child_process';\nimport { Writable } from 'node:stream';\nimport type { IMastraLogger } from '@internal/core/logger';\n\nexport const createPinoStream = (logger: IMastraLogger) => {\n return new Writable({\n write(chunk, _encoding, callback) {\n // Convert Buffer/string to string and trim whitespace\n const line = chunk.toString().trim();\n\n if (line) {\n console.info(line);\n // Log each line through Pino\n logger.info(line);\n }\n\n callback();\n },\n });\n};\n\n/**\n * Args are joined into a shell command (`shell: true` is required for package\n * manager shims on Windows), so only allow characters that appear in package\n * specifiers and CLI flags — never shell metacharacters (CodeQL\n * js/shell-command-constructed-from-input).\n */\nconst SAFE_SHELL_ARG = /^[\\w@%+=:,./^~-]*$/;\n\nexport function createChildProcessLogger({ logger, root }: { logger: IMastraLogger; root: string }) {\n const pinoStream = createPinoStream(logger);\n return async ({ cmd, args, env }: { cmd: string; args: string[]; env: Record<string, string> }) => {\n try {\n for (const arg of args) {\n if (!SAFE_SHELL_ARG.test(arg)) {\n throw new Error(`Refusing to pass unsafe argument to shell command: ${JSON.stringify(arg)}`);\n }\n }\n const subprocess = spawn(cmd, args, {\n cwd: root,\n shell: true,\n env,\n // No stdin for the child process — it doesn't need interactive input\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n subprocess.stdout?.on('data', chunk => {\n stdout += chunk.toString();\n });\n subprocess.stderr?.on('data', chunk => {\n stderr += chunk.toString();\n });\n\n // Pipe stdout and stderr through the logging stream.\n // { end: false } prevents the first stream to close from ending pinoStream\n // while the other may still be writing.\n subprocess.stdout?.pipe(pinoStream, { end: false });\n subprocess.stderr?.pipe(pinoStream, { end: false });\n\n // Wait for the process to complete\n return new Promise((resolve, reject) => {\n subprocess.on('close', code => {\n pinoStream.end();\n if (code === 0) {\n resolve({ success: true, stdout, stderr });\n } else {\n reject(Object.assign(new Error(`Process exited with code ${code}`), { stdout, stderr }));\n }\n });\n\n subprocess.on('error', error => {\n pinoStream.end();\n logger.error('Process failed', { error });\n reject(error);\n });\n });\n } catch (error) {\n console.error(error);\n logger.error('Process failed', { error });\n pinoStream.end();\n return { success: false, error };\n }\n };\n}\n","import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { MastraBase } from '@internal/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@internal/core/error';\nimport type { BundlerConfig } from '@internal/deployer';\nimport { readJSON, writeJSON, ensureFile } from 'fs-extra/esm';\nimport type { PackageJson } from 'type-fest';\nimport { parse, parseAllDocuments, stringify } from 'yaml';\n\nimport { createChildProcessLogger } from '../deploy/log.js';\n\ntype PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\n/** Version used to pack private workspace packages whose package.json has no `version`. */\nexport const WORKSPACE_PLACEHOLDER_VERSION = '0.0.0';\n\n// Write via temp file + rename so an interrupted write never leaves a truncated manifest.\nasync function writeManifestAtomically(manifestPath: string, contents: string, inFlight?: Set<string>) {\n const tmpPath = `${manifestPath}.${process.pid}.${Date.now()}.tmp`;\n inFlight?.add(tmpPath);\n try {\n const { mode } = await fsPromises.stat(manifestPath);\n await fsPromises.writeFile(tmpPath, contents, { mode });\n await fsPromises.chmod(tmpPath, mode);\n await fsPromises.rename(tmpPath, manifestPath);\n } catch (error) {\n await fsPromises.rm(tmpPath, { force: true });\n throw error;\n } finally {\n inFlight?.delete(tmpPath);\n }\n}\n\n/**\n * Package managers refuse to pack a manifest without a version, and pnpm/bun also\n * resolve `workspace:` ranges from the dependency's manifest. So every versionless\n * package in `dirs` gets the placeholder version for the whole of `operation`, and\n * the original manifests are restored afterwards — also on SIGINT/SIGTERM.\n */\nexport async function withPlaceholderVersions<T>(dirs: string[], operation: () => Promise<T>): Promise<T> {\n const acquired: string[] = [];\n try {\n for (const dir of new Set(dirs.map(dir => path.resolve(dir)))) {\n const manifestPath = path.join(dir, 'package.json');\n let lease = placeholderLeases.get(manifestPath);\n // A lease whose last owner is restoring it can't be joined; wait and start a fresh one.\n while (lease?.releasing) {\n await lease.releasing.catch(() => {});\n lease = placeholderLeases.get(manifestPath);\n }\n if (lease) {\n lease.refs++;\n } else {\n lease = { refs: 1, injected: false, ready: Promise.resolve() };\n lease.ready = injectPlaceholderVersion(manifestPath, lease);\n placeholderLeases.set(manifestPath, lease);\n installSignalHandlers();\n }\n acquired.push(manifestPath);\n await lease.ready;\n }\n return await operation();\n } finally {\n try {\n for (const manifestPath of acquired) {\n await releasePlaceholderVersion(manifestPath);\n }\n } finally {\n if (placeholderLeases.size === 0) {\n removeSignalHandlers();\n }\n }\n }\n}\n\ninterface PlaceholderLease {\n refs: number;\n original?: string;\n injected: boolean;\n ready: Promise<void>;\n releasing?: Promise<void>;\n}\n\n// Shared across calls so one bundle can't restore a manifest another is still packing.\nconst placeholderLeases = new Map<string, PlaceholderLease>();\nconst inFlightTmpPaths = new Set<string>();\n\nasync function injectPlaceholderVersion(manifestPath: string, lease: PlaceholderLease) {\n const original = await fsPromises.readFile(manifestPath, 'utf-8').catch(() => undefined);\n if (original === undefined) return;\n let manifest: PackageJson;\n try {\n manifest = JSON.parse(original) as PackageJson;\n } catch (error) {\n throw new Error(`Failed to parse ${manifestPath}: ${(error as Error).message}`, { cause: error });\n }\n if (manifest.version) return;\n lease.original = original;\n // Mark before writing so a signal mid-write still restores this manifest.\n lease.injected = true;\n await writeManifestAtomically(\n manifestPath,\n JSON.stringify({ ...manifest, version: WORKSPACE_PLACEHOLDER_VERSION }, null, 2) + '\\n',\n inFlightTmpPaths,\n );\n}\n\nasync function releasePlaceholderVersion(manifestPath: string) {\n const lease = placeholderLeases.get(manifestPath)!;\n if (--lease.refs > 0) return;\n lease.releasing = (async () => {\n await lease.ready.catch(() => {});\n try {\n if (lease.injected) {\n await writeManifestAtomically(manifestPath, lease.original!, inFlightTmpPaths);\n lease.injected = false;\n }\n } finally {\n placeholderLeases.delete(manifestPath);\n }\n })();\n await lease.releasing;\n}\n\nfunction restorePlaceholderVersionsSync() {\n // Removing in-flight temp files keeps them out of later tarballs and makes any\n // pending rename fail instead of overwriting the restored manifest.\n for (const tmpPath of inFlightTmpPaths) {\n fs.rmSync(tmpPath, { force: true });\n }\n inFlightTmpPaths.clear();\n for (const [manifestPath, lease] of placeholderLeases) {\n if (lease.injected) {\n fs.writeFileSync(manifestPath, lease.original!);\n lease.injected = false;\n }\n }\n}\n\nfunction onPlaceholderSignal(signal: NodeJS.Signals) {\n restorePlaceholderVersionsSync();\n removeSignalHandlers();\n process.kill(process.pid, signal);\n}\n\nfunction installSignalHandlers() {\n if (process.listeners('SIGINT').includes(onPlaceholderSignal)) return;\n process.once('SIGINT', onPlaceholderSignal);\n process.once('SIGTERM', onPlaceholderSignal);\n}\n\nfunction removeSignalHandlers() {\n process.off('SIGINT', onPlaceholderSignal);\n process.off('SIGTERM', onPlaceholderSignal);\n}\n\ninterface LockFileInfo {\n path: string;\n filename: string;\n packageManager: PackageManager;\n}\n\ninterface ArchitectureOptions {\n os?: string[];\n cpu?: string[];\n libc?: string[];\n}\n\ninterface InstallOptions extends ArchitectureOptions {\n pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n /** Patch key -> path relative to the output directory. */\n patchedDependencies?: Record<string, string>;\n /** Source settings that change which packages get installed, already checked to work outside the source workspace. */\n pnpmResolutionSettings?: Record<string, unknown>;\n /** The `pnpm` field of the source root package.json, set only when the project runs pnpm 10 or older. */\n pnpmManifestSettings?: Record<string, unknown>;\n}\n\nconst PNPM_PATCHES_DIR = 'pnpm-patches';\nconst BUN_PATCHES_DIR = 'bun-patches';\n\nconst PNPM_CONFIG_KEYS_TO_COPY = new Set([\n 'allowBuilds',\n 'onlyBuiltDependencies',\n 'ignoredBuiltDependencies',\n 'neverBuiltDependencies',\n 'minimumReleaseAge',\n 'minimumReleaseAgeExclude',\n 'trustPolicy',\n 'trustPolicyExclude',\n 'trustPolicyIgnoreAfter',\n 'supportedArchitectures',\n]);\n\n// Specs resolved against the source workspace, which the output directory can't install.\nconst SOURCE_WORKSPACE_SPEC = /^(?:file:|link:|portal:|workspace:|catalog:|\\.{1,2}(?:[/\\\\]|$)|[/\\\\]|~[/\\\\])/;\n\n// supportedArchitectures is generated from deployer architecture targets, so it can't be set explicitly.\n// neverBuiltDependencies switches pnpm 10 into deny-list mode, which runs every build script it doesn't name.\nconst PNPM_EXPLICIT_SETTING_KEYS = new Set(\n [...PNPM_CONFIG_KEYS_TO_COPY, 'blockExoticSubdeps'].filter(\n key => key !== 'supportedArchitectures' && key !== 'neverBuiltDependencies',\n ),\n);\n\nfunction serializePnpmWorkspaceSettings(settings: BundlerConfig['pnpmWorkspaceSettings']) {\n // Untyped JS configs can pass undefined; treat it as omitted so the copied source setting survives.\n const definedSettings = Object.entries(settings ?? {}).filter(([, value]) => value !== undefined);\n return definedSettings.map(([key, value]) => {\n if (!PNPM_EXPLICIT_SETTING_KEYS.has(key)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_WORKSPACE_SETTING',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n text: `pnpm workspace setting ${JSON.stringify(key)} isn't supported in bundler.pnpmWorkspaceSettings. Supported settings: ${[...PNPM_EXPLICIT_SETTING_KEYS].join(', ')}.`,\n });\n }\n const block = stringify({ [key]: value }).trimEnd();\n validatePnpmBuildApprovals(key, block);\n return block;\n });\n}\n\n// Every unindented line starts a new top-level entry, except comments and sequence items, which YAML allows at\n// column 0 under the key above them. Treating any other line as a continuation would copy it with the previous\n// block, such as an auth token after a copied key.\nfunction isTopLevelEntry(line: string) {\n return /^[^\\s#-]/.test(line);\n}\n\nfunction getTopLevelYamlKey(line: string) {\n const match = /^(?:\"([\\w-]+)\"|'([\\w-]+)'|([\\w-]+))\\s*:/.exec(line);\n return match?.[1] ?? match?.[2] ?? match?.[3];\n}\n\nconst PNPM_IGNORED_BUILDS_ERROR = 'ERR_PNPM_IGNORED_BUILDS';\n\nexport function getPnpmIgnoredBuildPackages(output: string): string[] {\n const match = new RegExp(`\\\\[?${PNPM_IGNORED_BUILDS_ERROR}\\\\]?[^\\\\n]*Ignored build scripts:\\\\s*([^\\\\n]+)`).exec(\n output,\n );\n if (!match?.[1]) return [];\n\n return match[1]\n .split(',')\n .map(specifier => specifier.trim())\n .filter(Boolean)\n .map(specifier => {\n if (specifier.startsWith('@')) {\n const versionSeparator = specifier.indexOf('@', 1);\n return versionSeparator === -1 ? specifier : specifier.slice(0, versionSeparator);\n }\n return specifier.split('@', 1)[0]!;\n });\n}\n\nfunction validatePnpmBuildApprovals(key: string, block: string): void {\n if (key !== 'allowBuilds' && key !== 'onlyBuiltDependencies') return;\n\n let value: unknown;\n try {\n value = (parse(block) as Record<string, unknown>)[key];\n } catch (error) {\n throw new MastraError(\n {\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key },\n text: `Invalid pnpm ${key} configuration`,\n },\n error,\n );\n }\n\n const invalidEntries =\n key === 'allowBuilds'\n ? value && typeof value === 'object' && !Array.isArray(value)\n ? Object.entries(value).filter(\n ([dependency, approval]) => dependency.trim().length === 0 || typeof approval !== 'boolean',\n )\n : [[key, value]]\n : Array.isArray(value) &&\n value.every(dependency => typeof dependency === 'string' && dependency.trim().length > 0)\n ? []\n : [[key, value]];\n\n if (invalidEntries.length === 0) return;\n const invalidEntryNames = invalidEntries.map(([entry]) => entry).join(', ');\n\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key, invalidEntries: invalidEntryNames },\n text: `Invalid pnpm ${key} entries: ${invalidEntryNames}`,\n });\n}\n\n/**\n * Reads the `patchedDependencies` map from a pnpm workspace file. Paths are returned as declared,\n * i.e. relative to the workspace root. Returns an empty map for absent or unusable declarations.\n */\nexport function parsePnpmPatchedDependencies(source: string): Record<string, string> {\n let parsed: unknown;\n try {\n parsed = parse(source);\n } catch {\n return {};\n }\n\n const patched = (parsed as { patchedDependencies?: unknown } | null)?.patchedDependencies;\n if (!patched || typeof patched !== 'object' || Array.isArray(patched)) {\n return {};\n }\n\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(patched as Record<string, unknown>)) {\n if (typeof value === 'string' && value.trim() && key.trim()) {\n result[key] = value.trim();\n }\n }\n\n return result;\n}\n\nexport function copyPnpmWorkspaceSettings(source: string, options: InstallOptions = {}) {\n const hasArchitecture = Boolean(options.os?.length || options.cpu?.length || options.libc?.length);\n const lines = source.split(/\\r?\\n/);\n const customBlocks = serializePnpmWorkspaceSettings(options.pnpmWorkspaceSettings);\n const blocks: string[] = [];\n const copiedKeys = new Set<string>();\n const shouldCopy = (key: string) =>\n PNPM_CONFIG_KEYS_TO_COPY.has(key) &&\n options.pnpmWorkspaceSettings?.[key] === undefined &&\n !(key === 'supportedArchitectures' && hasArchitecture);\n\n for (let index = 0; index < lines.length;) {\n if (!isTopLevelEntry(lines[index] ?? '')) {\n index += 1;\n continue;\n }\n\n const key = getTopLevelYamlKey(lines[index] ?? '');\n const start = index;\n index += 1;\n while (index < lines.length && !isTopLevelEntry(lines[index] ?? '')) {\n index += 1;\n }\n\n if (!key || !shouldCopy(key)) {\n continue;\n }\n\n const block = lines.slice(start, index).join('\\n').trimEnd();\n if (block) {\n validatePnpmBuildApprovals(key, block);\n blocks.push(block);\n copiedKeys.add(key);\n }\n }\n\n // The scanner keeps the source formatting but can't name every key, such as YAML explicit `? key` entries.\n // Those settings are copied from the parsed file instead.\n let parsedSource: Record<string, unknown> = {};\n try {\n const parsed = parse(source);\n parsedSource = isRecord(parsed) ? parsed : {};\n } catch {\n // An unparsable workspace file falls back to the keys the scanner copied.\n }\n\n // pnpm 10 also reads these keys from the `pnpm` field of package.json. The workspace file wins when both set one.\n const sourceSettings = [\n ...Object.entries(parsedSource),\n ...Object.entries(options.pnpmManifestSettings ?? {}).filter(([key]) => !Object.hasOwn(parsedSource, key)),\n ];\n for (const [key, value] of sourceSettings) {\n if (copiedKeys.has(key) || !shouldCopy(key) || value === undefined) continue;\n const block = stringify({ [key]: value }).trimEnd();\n validatePnpmBuildApprovals(key, block);\n blocks.push(block);\n copiedKeys.add(key);\n }\n\n if (hasArchitecture) {\n const architectureBlock = ['supportedArchitectures:'];\n if (options.os?.length) {\n architectureBlock.push(` os: ${JSON.stringify(options.os)}`);\n }\n if (options.cpu?.length) {\n architectureBlock.push(` cpu: ${JSON.stringify(options.cpu)}`);\n }\n if (options.libc?.length) {\n architectureBlock.push(` libc: ${JSON.stringify(options.libc)}`);\n }\n blocks.push(architectureBlock.join('\\n'));\n }\n\n for (const [key, value] of Object.entries(options.pnpmResolutionSettings ?? {})) {\n blocks.push(stringify({ [key]: value }).trimEnd());\n }\n\n if (options.pnpmOverrides && Object.keys(options.pnpmOverrides).length > 0) {\n blocks.push(\n [\n 'overrides:',\n ...Object.entries(options.pnpmOverrides).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n }\n\n if (options.patchedDependencies && Object.keys(options.patchedDependencies).length > 0) {\n blocks.push(\n [\n 'patchedDependencies:',\n ...Object.entries(options.patchedDependencies).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n // The bundled output only installs runtime dependencies, so patches declared for\n // dev-only or bundled-away packages are legitimately unused here.\n blocks.push('allowUnusedPatches: true');\n }\n\n if (options.pnpmNodeLinker) {\n blocks.push(`nodeLinker: ${options.pnpmNodeLinker}`);\n }\n\n return [\"packages:\\n - '.'\", ...blocks, ...customBlocks].join('\\n\\n') + '\\n';\n}\n\n// Semver characters only; versions are interpolated into a shell command.\nconst SAFE_PACKAGE_VERSION = /^[0-9A-Za-z.+-]+$/;\n\n/**\n * Yarn classic writes `# yarn lockfile v1` within the first two lines; Berry lockfiles never contain it.\n * Only the head of the file is read so large monorepo lockfiles are never loaded into memory.\n */\nasync function isYarnClassicLockfile(lockfilePath: string): Promise<boolean> {\n const handle = await fsPromises.open(lockfilePath, 'r');\n try {\n const buffer = Buffer.alloc(512);\n const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);\n return /^# yarn lockfile v1\\r?$/m.test(buffer.toString('utf-8', 0, bytesRead));\n } finally {\n await handle.close();\n }\n}\n\n/**\n * Removes overridden packages from every importer of a copied pnpm lockfile. When the Mastra app is the\n * workspace root, the root importer still resolves its workspace dependencies to `link:` versions. pnpm\n * keeps those versions although the output overrides them with packed tarballs, so the tarball is never\n * installed and the dependency symlink dangles. Without the entries, pnpm resolves them from the overrides.\n */\nasync function dropPnpmImporterDependencies(lockfilePath: string, packageNames: string[]): Promise<void> {\n const { leadingDocuments, project } = parsePnpmLockfile(await fsPromises.readFile(lockfilePath, 'utf-8'));\n const lockfile = project as {\n importers?: Record<string, Record<string, Record<string, unknown> | undefined> | undefined>;\n } | null;\n let changed = false;\n for (const importer of Object.values(lockfile?.importers ?? {})) {\n for (const field of ['dependencies', 'devDependencies', 'optionalDependencies']) {\n const dependencies = importer?.[field];\n for (const name of packageNames) {\n if (dependencies && name in dependencies) {\n delete dependencies[name];\n changed = true;\n }\n }\n }\n }\n if (changed) {\n const projectDocument = stringify(lockfile, { lineWidth: 0 });\n await fsPromises.writeFile(\n lockfilePath,\n leadingDocuments ? `${leadingDocuments}---\\n${projectDocument}` : projectDocument,\n );\n }\n}\n\n/**\n * Splits a pnpm lockfile into its project document and the documents before it. pnpm 11+ writes an\n * environment document first when `packageManager` or `configDependencies` is set.\n */\nfunction parsePnpmLockfile(source: string): { leadingDocuments: string; project: unknown } {\n const documents = parseAllDocuments(source);\n const project = documents.at(-1);\n if (project?.errors.length) {\n throw project.errors[0];\n }\n return {\n leadingDocuments: documents\n .slice(0, -1)\n .map(document => document.toString({ lineWidth: 0 }))\n .join(''),\n project: project ? project.toJS() : null,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Reads the overrides the source install applied. The lockfile records them with `catalog:` and `$name`\n * references resolved, wherever they were declared (`pnpm-workspace.yaml`, or the `pnpm` field of\n * `package.json` on pnpm 10).\n */\nasync function readPnpmLockfileOverrides(\n lockfilePath: string,\n warn: (message: string) => void,\n): Promise<Record<string, string>> {\n let lockfile: unknown;\n try {\n lockfile = parsePnpmLockfile(await fsPromises.readFile(lockfilePath, 'utf-8')).project;\n } catch {\n return {};\n }\n\n const overrides = isRecord(lockfile) ? lockfile.overrides : undefined;\n if (!isRecord(overrides)) return {};\n\n const portable: Record<string, string> = {};\n for (const [selector, spec] of Object.entries(overrides)) {\n if (typeof spec !== 'string') continue;\n if (SOURCE_WORKSPACE_SPEC.test(spec)) {\n warn(`Skipping pnpm override \"${selector}\": \"${spec}\" can only be resolved from the source workspace.`);\n continue;\n }\n portable[selector] = spec;\n }\n return portable;\n}\n\n// `catalog:` reads the top-level `catalog`, or `catalogs.default` when that is where it is declared.\nfunction resolveCatalogSpec(workspace: Record<string, unknown>, name: string, spec: string): unknown {\n const catalogName = spec.slice('catalog:'.length) || 'default';\n const catalogs = isRecord(workspace.catalogs) ? workspace.catalogs : {};\n const catalog = catalogName === 'default' && isRecord(workspace.catalog) ? workspace.catalog : catalogs[catalogName];\n return isRecord(catalog) ? catalog[name] : undefined;\n}\n\n/** Returns the extension with catalog specs resolved, or the first spec the output directory can't install. */\nfunction resolvePackageExtension(\n workspace: Record<string, unknown>,\n extension: Record<string, unknown>,\n): { extension: Record<string, unknown> } | { name: string; spec: unknown } {\n const resolvedExtension: Record<string, unknown> = { ...extension };\n for (const field of ['dependencies', 'optionalDependencies', 'peerDependencies']) {\n const deps = extension[field];\n if (!isRecord(deps)) continue;\n const resolvedDeps: Record<string, string> = {};\n for (const [name, spec] of Object.entries(deps)) {\n const resolved =\n typeof spec === 'string' && spec.startsWith('catalog:') ? resolveCatalogSpec(workspace, name, spec) : spec;\n if (typeof resolved !== 'string' || SOURCE_WORKSPACE_SPEC.test(resolved)) {\n return { name, spec };\n }\n resolvedDeps[name] = resolved;\n }\n resolvedExtension[field] = resolvedDeps;\n }\n return { extension: resolvedExtension };\n}\n\n/**\n * Reads the source settings that change which packages get installed. They are copied from the source\n * workspace only and stay out of `bundler.pnpmWorkspaceSettings`, which accepts install-policy keys only.\n */\nfunction getPnpmResolutionSettings(\n sourceWorkspaceYaml: string,\n manifestSettings: Record<string, unknown>,\n warn: (message: string) => void,\n) {\n let parsed: unknown;\n try {\n parsed = parse(sourceWorkspaceYaml);\n } catch {\n parsed = {};\n }\n const workspace = { ...manifestSettings, ...(isRecord(parsed) ? parsed : {}) };\n\n const settings: Record<string, unknown> = {};\n\n const ignoredOptional = workspace.ignoredOptionalDependencies;\n if (Array.isArray(ignoredOptional) && ignoredOptional.every(name => typeof name === 'string')) {\n settings.ignoredOptionalDependencies = ignoredOptional;\n }\n\n if (isRecord(workspace.packageExtensions)) {\n const extensions: Record<string, unknown> = {};\n for (const [selector, extension] of Object.entries(workspace.packageExtensions)) {\n if (!isRecord(extension)) continue;\n const result = resolvePackageExtension(workspace, extension);\n if ('extension' in result) {\n extensions[selector] = result.extension;\n } else {\n warn(\n `Skipping pnpm packageExtensions \"${selector}\": ${JSON.stringify(result.spec)} for \"${result.name}\" can only be resolved from the source workspace.`,\n );\n }\n }\n if (Object.keys(extensions).length > 0) {\n settings.packageExtensions = extensions;\n }\n }\n\n return settings;\n}\n\nexport class Deps extends MastraBase {\n private packageManager: PackageManager;\n private rootDir: string;\n private lockFile: LockFileInfo | null;\n\n constructor(rootDir = process.cwd()) {\n super({ component: 'DEPLOYER', name: 'DEPS' });\n\n this.rootDir = rootDir;\n this.lockFile = this.findLockFile(rootDir);\n this.packageManager = this.lockFile?.packageManager ?? 'npm';\n }\n\n private findLockFile(dir: string): LockFileInfo | null {\n const lockFiles: Array<{ filename: string; packageManager: PackageManager }> = [\n { filename: 'pnpm-lock.yaml', packageManager: 'pnpm' },\n { filename: 'package-lock.json', packageManager: 'npm' },\n { filename: 'yarn.lock', packageManager: 'yarn' },\n { filename: 'bun.lock', packageManager: 'bun' },\n ];\n for (const lockFile of lockFiles) {\n const lockFilePath = path.join(dir, lockFile.filename);\n if (fs.existsSync(lockFilePath)) {\n return { ...lockFile, path: lockFilePath };\n }\n }\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findLockFile(parentDir);\n }\n return null;\n }\n\n public getWorkspaceDependencyPath({ pkgName, version }: { pkgName: string; version: string }) {\n return `file:./workspace-module/${pkgName}-${version}.tgz`;\n }\n\n public async pack({\n dir,\n destination,\n sanitizedName,\n version,\n }: {\n dir: string;\n destination: string;\n sanitizedName: string;\n version: string;\n }) {\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n let packCmd = 'pack';\n let destinationFlag = `--pack-destination ${destination}`;\n if (this.packageManager === 'yarn') {\n if (this.lockFile && (await isYarnClassicLockfile(this.lockFile.path))) {\n if (!SAFE_PACKAGE_VERSION.test(version)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_WORKSPACE_PACKAGE_VERSION',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { dir, version: String(version) },\n text: `Invalid version ${JSON.stringify(version)} in workspace package at ${dir}`,\n });\n }\n // Yarn classic has no --out/%v; --filename takes the full output path.\n destinationFlag = `--filename ${destination}/${sanitizedName}-${version}.tgz`;\n } else {\n // %s includes an '@' at the start of packages names with an '@'\n // so we need to use our sanitizedName instead.\n destinationFlag = `--out ${destination}/${sanitizedName}-%v.tgz`;\n }\n }\n if (this.packageManager === 'bun') {\n // bun uses `pm pack` instead of `pack`\n packCmd = 'pm pack';\n // bun uses --destination instead of --pack-destination\n destinationFlag = `--destination ${destination}`;\n }\n\n return cpLogger({\n cmd: `${this.packageManager} ${packCmd} ${destinationFlag}`,\n args: [],\n env: {\n PATH: process.env.PATH!,\n },\n });\n }\n\n private findPnpmWorkspaceFile(dir: string): string | null {\n const workspaceYamlPath = path.join(dir, 'pnpm-workspace.yaml');\n if (fs.existsSync(workspaceYamlPath)) {\n return workspaceYamlPath;\n }\n\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findPnpmWorkspaceFile(parentDir);\n }\n\n return null;\n }\n\n private async writePnpmConfig(dir: string, options: InstallOptions = {}) {\n const sourceWorkspaceYamlPath = this.findPnpmWorkspaceFile(this.rootDir);\n const sourceWorkspaceYaml = sourceWorkspaceYamlPath\n ? await fsPromises.readFile(sourceWorkspaceYamlPath, 'utf-8')\n : '';\n\n const patchedDependencies = sourceWorkspaceYamlPath\n ? await this.copyPnpmPatches(sourceWorkspaceYaml, path.dirname(sourceWorkspaceYamlPath), dir)\n : undefined;\n\n const warn = (message: string) => this.logger.warn(message);\n const sourceOverrides =\n this.lockFile?.packageManager === 'pnpm' ? await readPnpmLockfileOverrides(this.lockFile.path, warn) : {};\n const pnpmManifestSettings = await this.readPnpm10ManifestSettings(\n this.lockFile\n ? path.dirname(this.lockFile.path)\n : sourceWorkspaceYamlPath && path.dirname(sourceWorkspaceYamlPath),\n );\n\n await fsPromises.writeFile(\n path.join(dir, 'pnpm-workspace.yaml'),\n copyPnpmWorkspaceSettings(sourceWorkspaceYaml, {\n ...options,\n patchedDependencies,\n pnpmManifestSettings,\n pnpmResolutionSettings: getPnpmResolutionSettings(sourceWorkspaceYaml, pnpmManifestSettings, warn),\n // Packed workspace tarballs must win over any source override for the same package.\n pnpmOverrides: { ...sourceOverrides, ...options.pnpmOverrides },\n }),\n 'utf-8',\n );\n }\n\n /**\n * Returns the `pnpm` field of the workspace root package.json when the project declares pnpm 10 or older.\n * pnpm 11 stopped reading that field, so copying it for a newer or unknown pnpm could approve build scripts\n * the project's own install never ran.\n */\n private async readPnpm10ManifestSettings(rootDir: string | null | undefined): Promise<Record<string, unknown>> {\n if (!rootDir) return {};\n\n let manifest: unknown;\n try {\n manifest = await readJSON(path.join(rootDir, 'package.json'));\n } catch {\n return {};\n }\n if (!isRecord(manifest) || !isRecord(manifest.pnpm) || Object.keys(manifest.pnpm).length === 0) return {};\n\n const pnpmMajor = /^pnpm@(\\d+)\\./.exec(String(manifest.packageManager ?? ''))?.[1];\n if (pnpmMajor && Number(pnpmMajor) <= 10) {\n return manifest.pnpm;\n }\n const skippedKeys = Object.keys(manifest.pnpm).filter(\n key => PNPM_CONFIG_KEYS_TO_COPY.has(key) || key === 'packageExtensions' || key === 'ignoredOptionalDependencies',\n );\n if (!pnpmMajor && skippedKeys.length > 0) {\n this.logger.warn(\n `Not copying ${skippedKeys.join(', ')} from the \"pnpm\" field of package.json into the build output because the pnpm version is unknown. Set \"packageManager\" to the pnpm version you use, or move these settings to pnpm-workspace.yaml.`,\n );\n }\n return {};\n }\n\n /**\n * Resolves a declared patch path against the source workspace and verifies that, once symlinks\n * are followed, it still resolves inside the workspace. Returns the real path to copy from, or\n * `undefined` when the patch escapes the workspace or its file cannot be resolved.\n */\n private async resolvePatchSource(\n resolvedWorkspaceRoot: string,\n declaredPath: string,\n { key, label }: { key: string; label: string },\n ): Promise<string | undefined> {\n const sourcePath = path.resolve(resolvedWorkspaceRoot, declaredPath);\n if (!sourcePath.startsWith(`${resolvedWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${sourcePath}`);\n return undefined;\n }\n\n // A patch path can stay lexically under the workspace while traversing a symlink whose target\n // lives outside it. copyFile follows symlinks, so compare the resolved real paths before copying.\n let realWorkspaceRoot: string;\n let realSourcePath: string;\n try {\n [realWorkspaceRoot, realSourcePath] = await Promise.all([\n fsPromises.realpath(resolvedWorkspaceRoot),\n fsPromises.realpath(sourcePath),\n ]);\n } catch {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file not found at ${sourcePath}`);\n return undefined;\n }\n\n if (!realSourcePath.startsWith(`${realWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(\n `Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${realSourcePath}`,\n );\n return undefined;\n }\n\n return realSourcePath;\n }\n\n /**\n * Copies the patch files declared by the source workspace into the output directory and returns\n * the patch map rewritten to output-relative paths, so the patches survive the output install.\n */\n private async copyPnpmPatches(\n sourceWorkspaceYaml: string,\n sourceWorkspaceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const declared = parsePnpmPatchedDependencies(sourceWorkspaceYaml);\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedWorkspaceRoot = path.resolve(sourceWorkspaceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedWorkspaceRoot, declaredPath, {\n key,\n label: 'pnpm',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, PNPM_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, PNPM_PATCHES_DIR, fileName));\n rewritten[key] = `${PNPM_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Writes the `.yarnrc.yml` for the bundled output, recording the supported architectures so the\n * output install only resolves optional native binaries that match the deployment target.\n */\n private async writeYarnConfig(dir: string, options: ArchitectureOptions) {\n const yarnrcPath = path.join(dir, '.yarnrc.yml');\n const config = {\n supportedArchitectures: {\n cpu: options.cpu || [],\n os: options.os || [],\n libc: options.libc || [],\n },\n };\n\n await fsPromises.writeFile(\n yarnrcPath,\n `supportedArchitectures:\\n${Object.entries(config.supportedArchitectures)\n .map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`)\n .join('\\n')}`,\n );\n }\n\n /**\n * Copies the source workspace's `.yarn/patches/` directory (Yarn Berry) into the output\n * directory so patches survive the output install. Yarn auto-discovers patches from this\n * directory and applies them per the lockfile references.\n */\n private async copyYarnPatches(dir: string): Promise<void> {\n const sourcePatchesDir = path.join(this.rootDir, '.yarn', 'patches');\n if (!fs.existsSync(sourcePatchesDir)) return;\n\n const outputPatchesDir = path.join(dir, '.yarn', 'patches');\n await fsPromises.cp(sourcePatchesDir, outputPatchesDir, { recursive: true, errorOnExist: false });\n }\n\n /**\n * Copies the patch files referenced by the source workspace's `patchedDependencies` in\n * package.json into the output directory and returns the map rewritten to output-relative\n * paths, so bun patches survive the output install.\n */\n private async copyBunPatches(\n declared: Record<string, string>,\n sourceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedRoot = path.resolve(sourceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedRoot, declaredPath, {\n key,\n label: 'bun',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, BUN_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, BUN_PATCHES_DIR, fileName));\n rewritten[key] = `${BUN_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Reads `patchedDependencies` from the source package.json, copies the referenced patch\n * files into the output directory, and writes the output-relative patch map into the\n * output's package.json so `bun install` preserves patches in the bundled output.\n */\n private async copyBunPatchesToOutput(dir: string): Promise<void> {\n const sourcePackageJsonPath = path.join(this.rootDir, 'package.json');\n if (!fs.existsSync(sourcePackageJsonPath)) return;\n\n const sourcePkg = await readJSON(sourcePackageJsonPath);\n const patchedDeps = sourcePkg.patchedDependencies as Record<string, string> | undefined;\n if (!patchedDeps || Object.keys(patchedDeps).length === 0) return;\n\n const rewritten = await this.copyBunPatches(patchedDeps, this.rootDir, dir);\n if (Object.keys(rewritten).length === 0) return;\n\n const outputPackageJsonPath = path.join(dir, 'package.json');\n let outputPkg: Record<string, unknown>;\n try {\n outputPkg = (await readJSON(outputPackageJsonPath)) as Record<string, unknown>;\n } catch {\n outputPkg = {};\n }\n outputPkg.patchedDependencies = rewritten;\n await writeJSON(outputPackageJsonPath, outputPkg, { spaces: 2 });\n }\n\n private getNpmArgs(options: ArchitectureOptions): string[] {\n const args: string[] = [];\n if (options.cpu) args.push(`--cpu=${options.cpu.join(',')}`);\n if (options.os) args.push(`--os=${options.os.join(',')}`);\n if (options.libc) args.push(`--libc=${options.libc.join(',')}`);\n return args;\n }\n\n /**\n * Depending on whether we want to install or add a package, this function returns the appropriate commands.\n * All package managers support both commands (e.g. npm install has an alias on \"add\")\n */\n private getPackageManagerCommand(\n pm: PackageManager,\n type: 'install' | 'add',\n { yarnClassic = false }: { yarnClassic?: boolean } = {},\n ): string {\n const cmd = type === 'install' ? 'install' : 'add';\n\n switch (pm) {\n case 'npm':\n return `${cmd} --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false`;\n case 'yarn':\n return type === 'install' && !yarnClassic ? `${cmd} --no-immutable` : cmd;\n case 'pnpm':\n return type === 'install' ? `${cmd} --no-frozen-lockfile --loglevel=error` : `${cmd} --loglevel=error`;\n default:\n return cmd;\n }\n }\n\n public async install({\n dir = this.rootDir,\n architecture,\n pnpmOverrides,\n pnpmNodeLinker,\n pnpmWorkspaceSettings,\n }: {\n dir?: string;\n architecture?: ArchitectureOptions;\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\n } = {}) {\n const pm = this.packageManager;\n let yarnClassic = false;\n if (this.lockFile) {\n const destination = path.join(dir, this.lockFile.filename);\n if (path.resolve(this.lockFile.path) !== path.resolve(destination)) {\n const packedBunWorkspaces =\n pm === 'bun' &&\n fs.existsSync(path.join(dir, 'package.json')) &&\n Object.values(\n ((await readJSON(path.join(dir, 'package.json'))) as { resolutions?: Record<string, string> })\n .resolutions ?? {},\n ).some(spec => spec.startsWith('file:./workspace-module/'));\n\n if (packedBunWorkspaces) {\n // Bun cannot reuse the source workspace lockfile with packed tarballs; removing its workspace entries\n // makes Bun ignore it and regenerate the lockfile anyway. Start with a clean lockfile instead.\n await fsPromises.rm(destination, { force: true });\n } else {\n await fsPromises.copyFile(this.lockFile.path, destination);\n if (pm === 'pnpm' && pnpmOverrides && Object.keys(pnpmOverrides).length > 0) {\n await dropPnpmImporterDependencies(destination, Object.keys(pnpmOverrides));\n }\n }\n }\n\n if (pm === 'yarn') {\n yarnClassic = await isYarnClassicLockfile(destination);\n }\n }\n\n const installCommand = this.getPackageManagerCommand(pm, 'install', { yarnClassic });\n let args: string[] = [];\n\n switch (pm) {\n case 'pnpm':\n await this.writePnpmConfig(dir, { ...architecture, pnpmOverrides, pnpmNodeLinker, pnpmWorkspaceSettings });\n break;\n case 'yarn':\n // similar to --ignore-workspace but for yarn\n await ensureFile(path.join(dir, 'yarn.lock'));\n if (architecture) {\n await this.writeYarnConfig(dir, architecture);\n }\n await this.copyYarnPatches(dir);\n break;\n case 'bun':\n await this.copyBunPatchesToOutput(dir);\n break;\n case 'npm':\n if (architecture) {\n args = this.getNpmArgs(architecture);\n }\n break;\n default:\n // Do nothing\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n try {\n return await cpLogger({\n cmd: `${pm} ${installCommand}`,\n args,\n env: process.env as Record<string, string>,\n });\n } catch (error) {\n if (pm !== 'pnpm') throw error;\n\n const processOutput =\n error && typeof error === 'object'\n ? `${'stdout' in error ? String(error.stdout) : ''}\\n${'stderr' in error ? String(error.stderr) : ''}`\n : '';\n const ignoredPackages = getPnpmIgnoredBuildPackages(processOutput);\n if (ignoredPackages.length === 0) throw error;\n\n throw new MastraError(\n {\n id: 'DEPLOYER_PNPM_IGNORED_BUILDS',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { packageNames: ignoredPackages.join(', ') },\n text: `pnpm blocked build scripts for: ${ignoredPackages.join(', ')}. Add these packages to allowBuilds in pnpm-workspace.yaml and retry the build.`,\n },\n error,\n );\n }\n }\n\n public async installPackages(packages: string[]) {\n const pm = this.packageManager;\n const installCommand = this.getPackageManagerCommand(pm, 'add');\n\n const env: Record<string, string> = {\n PATH: process.env.PATH!,\n };\n\n if (process.env.npm_config_registry) {\n env.npm_config_registry = process.env.npm_config_registry;\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: '',\n });\n\n return cpLogger({\n cmd: `${pm} ${installCommand}`,\n args: packages,\n env,\n });\n }\n\n public async checkDependencies(dependencies: string[]): Promise<string> {\n try {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n\n try {\n await fsPromises.access(packageJsonPath);\n } catch {\n return 'No package.json file found in the current directory';\n }\n\n const packageJson = await readJSON(packageJsonPath);\n for (const dependency of dependencies) {\n if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {\n return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;\n }\n }\n\n return 'ok';\n } catch (err) {\n console.error(err);\n return 'Could not check dependencies';\n }\n }\n\n public async getProjectName() {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n const pkg = await readJSON(packageJsonPath);\n return pkg.name;\n }\n\n public async getPackageVersion() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const pkgJsonPath = path.join(__dirname, '..', '..', 'package.json');\n\n const content = (await readJSON(pkgJsonPath)) as PackageJson;\n return content.version;\n }\n\n public async addScriptsToPackageJson(scripts: Record<string, string>) {\n const packageJson = await readJSON('package.json');\n packageJson.scripts = {\n ...packageJson.scripts,\n ...scripts,\n };\n await writeJSON('package.json', packageJson, { spaces: 2 });\n }\n}\n\nexport class DepsService extends Deps {}\n","import * as fs from 'node:fs';\n\nexport abstract class EnvService {\n abstract getEnvValue(key: string): Promise<string | null>;\n abstract setEnvValue(key: string, value: string): Promise<void>;\n}\n\nexport class FileEnvService extends EnvService {\n private filePath: string;\n\n constructor(filePath: string) {\n super();\n this.filePath = filePath;\n }\n\n private readFile(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(filePath, 'utf8', (err: NodeJS.ErrnoException | null, data: string) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n private writeFile({ filePath, data }: { filePath: string; data: string }): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.writeFile(filePath, data, 'utf8', (err: NodeJS.ErrnoException | null) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n private async updateEnvData({\n key,\n value,\n filePath = this.filePath,\n data,\n }: {\n key: string;\n value: string;\n filePath?: string;\n data: string;\n }): Promise<string> {\n const regex = new RegExp(`^${key}=.*$`, 'm');\n if (data.match(regex)) {\n // Use a replacement function so `$` sequences in the value (e.g. `$&`,\n // `$$`) are written literally instead of being interpreted as\n // String.prototype.replace special patterns.\n data = data.replace(regex, () => `${key}=${value}`);\n } else {\n data += `\\n${key}=${value}`;\n }\n await this.writeFile({ filePath, data });\n console.info(`${key} set to ${value} in ENV file.`);\n return data;\n }\n\n async getEnvValue(key: string): Promise<string | null> {\n try {\n const data = await this.readFile(this.filePath);\n const regex = new RegExp(`^${key}=(.*)$`, 'm');\n const match = data.match(regex);\n return match?.[1] || null;\n } catch (err) {\n console.error(`Error reading ENV value: ${err}`);\n return null;\n }\n }\n\n async setEnvValue(key: string, value: string): Promise<void> {\n try {\n const data = await this.readFile(this.filePath);\n await this.updateEnvData({ key, value, data });\n } catch (err) {\n console.error(`Error writing ENV value: ${err}`);\n }\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport fsExtra from 'fs-extra/esm';\n\nimport { FileEnvService } from './env.js';\n\nexport class FileService {\n /**\n *\n * @param inputFile the file in the starter files directory to copy\n * @param outputFilePath the destination path\n * @param replaceIfExists flag to replace if it exists\n * @returns\n */\n public async copyStarterFile(inputFile: string, outputFilePath: string, replaceIfExists?: boolean) {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const filePath = path.resolve(__dirname, '..', 'starter-files', inputFile);\n const fileString = fs.readFileSync(filePath, 'utf8');\n\n if (fs.existsSync(outputFilePath) && !replaceIfExists) {\n console.info(`${outputFilePath} already exists`);\n return false;\n }\n\n await fsExtra.outputFile(outputFilePath, fileString);\n\n return true;\n }\n\n public async setupEnvFile({ dbUrl }: { dbUrl: string }) {\n const envPath = path.join(process.cwd(), '.env.development');\n\n await fsExtra.ensureFile(envPath);\n\n const fileEnvService = new FileEnvService(envPath);\n await fileEnvService.setEnvValue('DB_URL', dbUrl);\n }\n\n public getFirstExistingFile(files: string[]): string {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n throw new Error('Missing required file, checked the following paths: ' + files.join(', '));\n }\n\n /**\n * Returns every existing file from the provided array in the same order.\n * Callers supply files from the lowest to highest precedence so later dotenv\n * files override earlier values when the bundler loads them.\n */\n public getExistingFiles(files: string[]): string[] {\n return files.filter(file => fs.existsSync(file));\n }\n\n /**\n * Returns the first existing file from the provided array, or undefined if none exist\n * @param files array of file paths to check\n * @returns the first existing file path or undefined\n */\n public getFirstExistingFileOrUndefined(files: string[]): string | undefined {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n return undefined;\n }\n\n public replaceValuesInFile({\n filePath,\n replacements,\n }: {\n filePath: string;\n replacements: { search: string; replace: string }[];\n }) {\n let fileContent = fs.readFileSync(filePath, 'utf8');\n replacements.forEach(({ search, replace }) => {\n fileContent = fileContent.replaceAll(search, replace);\n });\n\n fs.writeFileSync(filePath, fileContent);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAUA,SAAS,uBAAuB,KAAK,OAAO,UAAU;CACrD,IAAI,CAAC,KAAK,QAAQ,QAAQ;CAC1B,IAAI;EACH,MAAM,cAAc;EACpB,IAAI,WAAW,CAAC,EAAE,MAAM,MAAM,SAAS;GACtC,GAAG,YAAY,OAAO,KAAK,IAAI,EAAE,SAAS,YAAY,GAAG,IAAI,CAAC;GAC9D,GAAG,YAAY,WAAW,KAAK,IAAI,EAAE,QAAQ,YAAY,OAAO,IAAI,CAAC;GACrE,GAAG,YAAY,aAAa,KAAK,IAAI,EAAE,UAAU,YAAY,SAAS,IAAI,CAAC;GAC3E,GAAG,YAAY,YAAY,KAAK,IAAI,EAAE,SAAS,YAAY,QAAQ,IAAI,CAAC;GACxE,GAAG,MAAM,iBAAiB,QAAQ,EAAE,OAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;GACpE,GAAG;EACJ,CAAC;CACF,QAAQ,CAAC;AACV;;;;;;;AAOA,SAAS,mBAAmB,MAAM;CACjC,MAAM,aAAa,KAAK,MAAM,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,eAAe,MAAM;CAC/H,MAAM,WAAW,KAAK,MAAM,QAAQ,eAAe,KAAK;CACxD,MAAM,YAAY,KAAK,QAAQ,QAAQ,QAAQ,cAAc,QAAQ,QAAQ;CAC7E,IAAI,CAAC,cAAc,CAAC,YAAY,UAAU,WAAW,GAAG,OAAO,KAAK;CACpE,OAAO;EACN,GAAG,cAAc,CAAC;EAClB,GAAG,WAAW,EAAE,OAAO;GACtB,MAAM,SAAS;GACf,SAAS,SAAS;GAClB,OAAO,SAAS;EACjB,EAAE,IAAI,CAAC;EACP,GAAG,UAAU,SAAS,IAAI,EAAE,MAAM,UAAU,IAAI,CAAC;CAClD;AACD;AAEA,MAAM,aAAa;CAClB,aAAa,CAAC;CACd,YAAY,CAAC;CACb,YAAY,CAAC;CACb,aAAa,CAAC;CACd,SAAS,YAAY,CAAC;CACtB,qCAAqC,IAAI,IAAI;CAC7C,sBAAsB,CAAC;CACvB,UAAU,aAAa;EACtB,MAAM,CAAC;EACP,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;CACV;CACA,iBAAiB,aAAa;EAC7B,MAAM,CAAC;EACP,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;CACV;AACD;AAEA,MAAM,mBAAmB;CACxB,OAAO;CACP,eAAe;CACf,MAAM;CACN,SAAS;CACT,SAAS;CACT,UAAU;CACV,KAAK;CACL,KAAK;CACL,OAAO;CACP,QAAQ;CACR,SAAS;CACT,UAAU;CACV,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,cAAc;CACd,QAAQ;CACR,WAAW;CACX,SAAS;AACV;AACA,MAAM,WAAW;CAChB,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,MAAM;AACP;AAiCA,IAAI,eAAe,MAAM;CACxB;CACA;CACA;CACA,YAAY,UAAU,CAAC,GAAG;EACzB,KAAK,OAAO,QAAQ,QAAQ;EAC5B,KAAK,QAAQ,QAAQ,SAAS,SAAS;EACvC,KAAK,aAAa,IAAI,IAAI,OAAO,QAAQ,QAAQ,cAAc,CAAC,CAAC,CAAC;CACnE;CACA,gBAAgB;EACf,OAAO,KAAK;CACb;CACA,eAAe,QAAQ,WAAW,CAAC;CACnC,MAAM,SAAS,aAAa,QAAQ;EACnC,IAAI,CAAC,eAAe,CAAC,KAAK,WAAW,IAAI,WAAW,GAAG,OAAO;GAC7D,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ,QAAQ;GACtB,SAAS,QAAQ,WAAW;GAC5B,SAAS;EACV;EACA,OAAO,KAAK,WAAW,IAAI,WAAW,CAAC,CAAC,WAAW,MAAM,KAAK;GAC7D,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ,QAAQ;GACtB,SAAS,QAAQ,WAAW;GAC5B,SAAS;EACV;CACD;CACA,MAAM,gBAAgB,EAAE,aAAa,OAAO,UAAU,QAAQ,UAAU,SAAS,MAAM,WAAW;EACjG,IAAI,CAAC,eAAe,CAAC,KAAK,WAAW,IAAI,WAAW,KAAK,CAAC,OAAO,OAAO;GACvE,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ;GACd,SAAS,WAAW;GACpB,SAAS;EACV;EACA,OAAO,KAAK,WAAW,IAAI,WAAW,CAAC,CAAC,kBAAkB;GACzD;GACA;GACA;GACA;GACA;GACA;GACA;EACD,CAAC,KAAK;GACL,MAAM,CAAC;GACP,OAAO;GACP,MAAM,QAAQ;GACd,SAAS,WAAW;GACpB,SAAS;EACV;CACD;AACD;AACA,IAAI,gBAAgB,MAAM,sBAAsB,aAAa;CAC5D;CACA;CACA;CACA,YAAY,UAAU,CAAC,GAAG;EACzB,MAAM,OAAO;EACb,KAAK,YAAY,QAAQ;EACzB,KAAK,SAAS,QAAQ;CACvB;;;;;;CAMA,sBAAsB,KAAK;EAC1B,KAAK,kBAAkB;CACxB;CACA,MAAM,qBAAqB;EAC1B,MAAM,YAAY,OAAO,wBAAwB,WAAW,sBAAsB,qBAAqB,aAAa,KAAK;EACzH,MAAM,QAAQ,IAAI,cAAc;GAC/B,MAAM,KAAK;GACX,OAAO,KAAK;GACZ;GACA,QAAQ,KAAK;EACd,CAAC;EACD,IAAI,KAAK,iBAAiB,MAAM,sBAAsB,KAAK,eAAe;EAC1E,OAAO;CACR;;;;;CAKA,WAAW,MAAM;EAChB,MAAM,MAAM,KAAK;EACjB,IAAI,CAAC,KAAK,QAAQ,aAAa,OAAO;EACtC,IAAI;GACH,MAAM,SAAS,IAAI,mBAAmB;GACtC,OAAO,SAAS,CAAC,GAAG,MAAM,MAAM,IAAI;EACrC,QAAQ;GACP,OAAO;EACR;CACD;;;;;;CAMA,QAAQ,OAAO,SAAS,MAAM;EAC7B,MAAM,MAAM,KAAK;EACjB,IAAI,CAAC,KAAK,QAAQ,QAAQ;EAC1B,IAAI;GACH,IAAI,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,mBAAmB,IAAI,CAAC;EAC5D,QAAQ,CAAC;CACV;CACA,UAAU,OAAO,SAAS,MAAM;EAC/B,IAAI,CAAC,KAAK,QAAQ,OAAO;EACzB,IAAI;GACH,OAAO,KAAK,OAAO;IAClB,WAAW,KAAK;IAChB;IACA;IACA;GACD,CAAC;EACF,SAAS,GAAG;GACX,QAAQ,MAAM,uCAAuC,KAAK,UAAU,SAAS,MAAM,IAAI,CAAC;GACxF,OAAO;EACR;CACD;CACA,SAAS;EACR,OAAO,KAAK,YAAY,IAAI,KAAK,UAAU,MAAM;CAClD;CACA,MAAM,SAAS,GAAG,MAAM;EACvB,IAAI,KAAK,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS,OAAO,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAK,WAAW,IAAI,CAAC;EACvJ,KAAK,QAAQ,SAAS,SAAS,IAAI;CACpC;CACA,KAAK,SAAS,GAAG,MAAM;EACtB,KAAK,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,MAAM,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAK,WAAW,IAAI,CAAC;EACxL,KAAK,QAAQ,QAAQ,SAAS,IAAI;CACnC;CACA,KAAK,SAAS,GAAG,MAAM;EACtB,KAAK,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,MAAM,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAK,WAAW,IAAI,CAAC;EACxN,KAAK,QAAQ,QAAQ,SAAS,IAAI;CACnC;CACA,MAAM,SAAS,GAAG,MAAM;EACvB,KAAK,KAAK,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,OAAO,SAAS,IAAI,GAAG,QAAQ,MAAM,GAAG,KAAK,OAAO,IAAI,WAAW,GAAG,KAAK,WAAW,IAAI,CAAC;EAC3P,KAAK,QAAQ,SAAS,SAAS,IAAI;CACpC;CACA,eAAe,OAAO,UAAU;EAC/B,uBAAuB,KAAK,iBAAiB,OAAO,QAAQ;CAC7D;CACA,MAAM,SAAS,cAAc,SAAS;EACrC,OAAO;GACN,MAAM,CAAC;GACP,OAAO;GACP,MAAM,SAAS,QAAQ;GACvB,SAAS,SAAS,WAAW;GAC7B,SAAS;EACV;CACD;CACA,MAAM,gBAAgB,OAAO;EAC5B,OAAO;GACN,MAAM,CAAC;GACP,OAAO;GACP,MAAM,MAAM,QAAQ;GACpB,SAAS,MAAM,WAAW;GAC1B,SAAS;EACV;CACD;AACD;;ACnSA,IAAI,aAAa,MAAM;CACtB,YAAY,iBAAiB;CAC7B;CACA;CACA;CACA,YAAY,EAAE,WAAW,MAAM,aAAa;EAC3C,KAAK,YAAY,aAAa,iBAAiB;EAC/C,KAAK,OAAO;EACZ,KAAK,aAAa;EAClB,KAAK,SAAS,IAAI,cAAc,EAAE,MAAM,GAAG,KAAK,UAAU,KAAK,KAAK,OAAO,CAAC;CAC7E;;;;;CAKA,cAAc;EACb,OAAO,KAAK;CACb;;;;;CAKA,eAAe,WAAW;EACzB,KAAK,aAAa;CACnB;;;;;CAKA,YAAY,QAAQ;EACnB,KAAK,SAAS,WAAW,UAAU,OAAO,OAAO,UAAU,aAAa,OAAO,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC,IAAI;CACvH;AACD;;AC9BA,MAAa,oBAAoB,WAA0B;CACzD,OAAO,IAAIA,OAAAA,SAAS,EAClB,MAAM,OAAO,WAAW,UAAU;EAEhC,MAAM,OAAO,MAAM,SAAS,CAAC,CAAC,KAAK;EAEnC,IAAI,MAAM;GACR,QAAQ,KAAK,IAAI;GAEjB,OAAO,KAAK,IAAI;EAClB;EAEA,SAAS;CACX,EACF,CAAC;AACH;;;;;;;AAQA,MAAM,iBAAiB;AAEvB,SAAgB,yBAAyB,EAAE,QAAQ,QAAiD;CAClG,MAAM,aAAa,iBAAiB,MAAM;CAC1C,OAAO,OAAO,EAAE,KAAK,MAAM,UAAwE;EACjG,IAAI;GACF,KAAK,MAAM,OAAO,MAChB,IAAI,CAAC,eAAe,KAAK,GAAG,GAC1B,MAAM,IAAI,MAAM,sDAAsD,KAAK,UAAU,GAAG,GAAG;GAG/F,MAAM,cAAA,GAAaC,cAAAA,MAAAA,CAAM,KAAK,MAAM;IAClC,KAAK;IACL,OAAO;IACP;IAEA,OAAO;KAAC;KAAU;KAAQ;IAAM;GAClC,CAAC;GAED,IAAI,SAAS;GACb,IAAI,SAAS;GACb,WAAW,QAAQ,GAAG,SAAQ,UAAS;IACrC,UAAU,MAAM,SAAS;GAC3B,CAAC;GACD,WAAW,QAAQ,GAAG,SAAQ,UAAS;IACrC,UAAU,MAAM,SAAS;GAC3B,CAAC;GAKD,WAAW,QAAQ,KAAK,YAAY,EAAE,KAAK,MAAM,CAAC;GAClD,WAAW,QAAQ,KAAK,YAAY,EAAE,KAAK,MAAM,CAAC;GAGlD,OAAO,IAAI,SAAS,SAAS,WAAW;IACtC,WAAW,GAAG,UAAS,SAAQ;KAC7B,WAAW,IAAI;KACf,IAAI,SAAS,GACX,QAAQ;MAAE,SAAS;MAAM;MAAQ;KAAO,CAAC;UAEzC,OAAO,OAAO,uBAAO,IAAI,MAAM,4BAA4B,MAAM,GAAG;MAAE;MAAQ;KAAO,CAAC,CAAC;IAE3F,CAAC;IAED,WAAW,GAAG,UAAS,UAAS;KAC9B,WAAW,IAAI;KACf,OAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC;KACxC,OAAO,KAAK;IACd,CAAC;GACH,CAAC;EACH,SAAS,OAAO;GACd,QAAQ,MAAM,KAAK;GACnB,OAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC;GACxC,WAAW,IAAI;GACf,OAAO;IAAE,SAAS;IAAO;GAAM;EACjC;CACF;AACF;;;ACrEA,MAAa,gCAAgC;AAG7C,eAAe,wBAAwB,cAAsB,UAAkB,UAAwB;CACrG,MAAM,UAAU,GAAG,aAAa,GAAG,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;CAC7D,UAAU,IAAI,OAAO;CACrB,IAAI;EACF,MAAM,EAAE,SAAS,MAAMC,YAAAA,QAAW,KAAK,YAAY;EACnD,MAAMA,YAAAA,QAAW,UAAU,SAAS,UAAU,EAAE,KAAK,CAAC;EACtD,MAAMA,YAAAA,QAAW,MAAM,SAAS,IAAI;EACpC,MAAMA,YAAAA,QAAW,OAAO,SAAS,YAAY;CAC/C,SAAS,OAAO;EACd,MAAMA,YAAAA,QAAW,GAAG,SAAS,EAAE,OAAO,KAAK,CAAC;EAC5C,MAAM;CACR,UAAU;EACR,UAAU,OAAO,OAAO;CAC1B;AACF;;;;;;;AAQA,eAAsB,wBAA2B,MAAgB,WAAyC;CACxG,MAAM,WAAqB,CAAC;CAC5B,IAAI;EACF,KAAK,MAAM,OAAO,IAAI,IAAI,KAAK,KAAI,QAAO,KAAA,QAAK,QAAQ,GAAG,CAAC,CAAC,GAAG;GAC7D,MAAM,eAAe,KAAA,QAAK,KAAK,KAAK,cAAc;GAClD,IAAI,QAAQ,kBAAkB,IAAI,YAAY;GAE9C,OAAO,OAAO,WAAW;IACvB,MAAM,MAAM,UAAU,YAAY,CAAC,CAAC;IACpC,QAAQ,kBAAkB,IAAI,YAAY;GAC5C;GACA,IAAI,OACF,MAAM;QACD;IACL,QAAQ;KAAE,MAAM;KAAG,UAAU;KAAO,OAAO,QAAQ,QAAQ;IAAE;IAC7D,MAAM,QAAQ,yBAAyB,cAAc,KAAK;IAC1D,kBAAkB,IAAI,cAAc,KAAK;IACzC,sBAAsB;GACxB;GACA,SAAS,KAAK,YAAY;GAC1B,MAAM,MAAM;EACd;EACA,OAAO,MAAM,UAAU;CACzB,UAAU;EACR,IAAI;GACF,KAAK,MAAM,gBAAgB,UACzB,MAAM,0BAA0B,YAAY;EAEhD,UAAU;GACR,IAAI,kBAAkB,SAAS,GAC7B,qBAAqB;EAEzB;CACF;AACF;AAWA,MAAM,oCAAoB,IAAI,IAA8B;AAC5D,MAAM,mCAAmB,IAAI,IAAY;AAEzC,eAAe,yBAAyB,cAAsB,OAAyB;CACrF,MAAM,WAAW,MAAMA,YAAAA,QAAW,SAAS,cAAc,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;CACvF,IAAI,aAAa,KAAA,GAAW;CAC5B,IAAI;CACJ,IAAI;EACF,WAAW,KAAK,MAAM,QAAQ;CAChC,SAAS,OAAO;EACd,MAAM,IAAI,MAAM,mBAAmB,aAAa,IAAK,MAAgB,WAAW,EAAE,OAAO,MAAM,CAAC;CAClG;CACA,IAAI,SAAS,SAAS;CACtB,MAAM,WAAW;CAEjB,MAAM,WAAW;CACjB,MAAM,wBACJ,cACA,KAAK,UAAU;EAAE,GAAG;EAAU,SAAS;CAA8B,GAAG,MAAM,CAAC,IAAI,MACnF,gBACF;AACF;AAEA,eAAe,0BAA0B,cAAsB;CAC7D,MAAM,QAAQ,kBAAkB,IAAI,YAAY;CAChD,IAAI,EAAE,MAAM,OAAO,GAAG;CACtB,MAAM,aAAa,YAAY;EAC7B,MAAM,MAAM,MAAM,YAAY,CAAC,CAAC;EAChC,IAAI;GACF,IAAI,MAAM,UAAU;IAClB,MAAM,wBAAwB,cAAc,MAAM,UAAW,gBAAgB;IAC7E,MAAM,WAAW;GACnB;EACF,UAAU;GACR,kBAAkB,OAAO,YAAY;EACvC;CACF,EAAA,CAAG;CACH,MAAM,MAAM;AACd;AAEA,SAAS,iCAAiC;CAGxC,KAAK,MAAM,WAAW,kBACpB,GAAA,QAAG,OAAO,SAAS,EAAE,OAAO,KAAK,CAAC;CAEpC,iBAAiB,MAAM;CACvB,KAAK,MAAM,CAAC,cAAc,UAAU,mBAClC,IAAI,MAAM,UAAU;EAClB,GAAA,QAAG,cAAc,cAAc,MAAM,QAAS;EAC9C,MAAM,WAAW;CACnB;AAEJ;AAEA,SAAS,oBAAoB,QAAwB;CACnD,+BAA+B;CAC/B,qBAAqB;CACrB,QAAQ,KAAK,QAAQ,KAAK,MAAM;AAClC;AAEA,SAAS,wBAAwB;CAC/B,IAAI,QAAQ,UAAU,QAAQ,CAAC,CAAC,SAAS,mBAAmB,GAAG;CAC/D,QAAQ,KAAK,UAAU,mBAAmB;CAC1C,QAAQ,KAAK,WAAW,mBAAmB;AAC7C;AAEA,SAAS,uBAAuB;CAC9B,QAAQ,IAAI,UAAU,mBAAmB;CACzC,QAAQ,IAAI,WAAW,mBAAmB;AAC5C;AA0BA,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AAExB,MAAM,2CAA2B,IAAI,IAAI;CACvC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAGD,MAAM,wBAAwB;AAI9B,MAAM,6BAA6B,IAAI,IACrC,CAAC,GAAG,0BAA0B,oBAAoB,CAAC,CAAC,QAClD,QAAO,QAAQ,4BAA4B,QAAQ,wBACrD,CACF;AAEA,SAAS,+BAA+B,UAAkD;CAGxF,OADwB,OAAO,QAAQ,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,UAAU,KAAA,CAClE,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW;EAC3C,IAAI,CAAC,2BAA2B,IAAI,GAAG,GACrC,MAAM,IAAIC,cAAAA,YAAY;GACpB,IAAI;GACJ,QAAQC,cAAAA,YAAY;GACpB,UAAUC,cAAAA,cAAc;GACxB,MAAM,0BAA0B,KAAK,UAAU,GAAG,EAAE,yEAAyE,CAAC,GAAG,0BAA0B,CAAC,CAAC,KAAK,IAAI,EAAE;EAC1K,CAAC;EAEH,MAAM,SAAA,GAAQC,KAAAA,UAAAA,CAAU,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,QAAQ;EAClD,2BAA2B,KAAK,KAAK;EACrC,OAAO;CACT,CAAC;AACH;AAKA,SAAS,gBAAgB,MAAc;CACrC,OAAO,WAAW,KAAK,IAAI;AAC7B;AAEA,SAAS,mBAAmB,MAAc;CACxC,MAAM,QAAQ,0CAA0C,KAAK,IAAI;CACjE,OAAO,QAAQ,MAAM,QAAQ,MAAM,QAAQ;AAC7C;AAEA,MAAM,4BAA4B;AAElC,SAAgB,4BAA4B,QAA0B;CACpE,MAAM,QAAQ,IAAI,OAAO,OAAO,0BAA0B,+CAA+C,CAAC,CAAC,KACzG,MACF;CACA,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;CAEzB,OAAO,MAAM,EAAE,CACZ,MAAM,GAAG,CAAC,CACV,KAAI,cAAa,UAAU,KAAK,CAAC,CAAC,CAClC,OAAO,OAAO,CAAC,CACf,KAAI,cAAa;EAChB,IAAI,UAAU,WAAW,GAAG,GAAG;GAC7B,MAAM,mBAAmB,UAAU,QAAQ,KAAK,CAAC;GACjD,OAAO,qBAAqB,KAAK,YAAY,UAAU,MAAM,GAAG,gBAAgB;EAClF;EACA,OAAO,UAAU,MAAM,KAAK,CAAC,CAAC,CAAC;CACjC,CAAC;AACL;AAEA,SAAS,2BAA2B,KAAa,OAAqB;CACpE,IAAI,QAAQ,iBAAiB,QAAQ,yBAAyB;CAE9D,IAAI;CACJ,IAAI;EACF,SAAA,GAASC,KAAAA,MAAAA,CAAM,KAAK,CAAC,CAA6B;CACpD,SAAS,OAAO;EACd,MAAM,IAAIJ,cAAAA,YACR;GACE,IAAI;GACJ,QAAQC,cAAAA,YAAY;GACpB,UAAUC,cAAAA,cAAc;GACxB,SAAS,EAAE,IAAI;GACf,MAAM,gBAAgB,IAAI;EAC5B,GACA,KACF;CACF;CAEA,MAAM,iBACJ,QAAQ,gBACJ,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACxD,OAAO,QAAQ,KAAK,CAAC,CAAC,QACnB,CAAC,YAAY,cAAc,WAAW,KAAK,CAAC,CAAC,WAAW,KAAK,OAAO,aAAa,SACpF,IACA,CAAC,CAAC,KAAK,KAAK,CAAC,IACf,MAAM,QAAQ,KAAK,KACjB,MAAM,OAAM,eAAc,OAAO,eAAe,YAAY,WAAW,KAAK,CAAC,CAAC,SAAS,CAAC,IACxF,CAAC,IACD,CAAC,CAAC,KAAK,KAAK,CAAC;CAErB,IAAI,eAAe,WAAW,GAAG;CACjC,MAAM,oBAAoB,eAAe,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,KAAK,IAAI;CAE1E,MAAM,IAAIF,cAAAA,YAAY;EACpB,IAAI;EACJ,QAAQC,cAAAA,YAAY;EACpB,UAAUC,cAAAA,cAAc;EACxB,SAAS;GAAE;GAAK,gBAAgB;EAAkB;EAClD,MAAM,gBAAgB,IAAI,YAAY;CACxC,CAAC;AACH;;;;;AAMA,SAAgB,6BAA6B,QAAwC;CACnF,IAAI;CACJ,IAAI;EACF,UAAA,GAASE,KAAAA,MAAAA,CAAM,MAAM;CACvB,QAAQ;EACN,OAAO,CAAC;CACV;CAEA,MAAM,UAAW,QAAqD;CACtE,IAAI,CAAC,WAAW,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAClE,OAAO,CAAC;CAGV,MAAM,SAAiC,CAAC;CACxC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAkC,GAC1E,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,KAAK,IAAI,KAAK,GACxD,OAAO,OAAO,MAAM,KAAK;CAI7B,OAAO;AACT;AAEA,SAAgB,0BAA0B,QAAgB,UAA0B,CAAC,GAAG;CACtF,MAAM,kBAAkB,QAAQ,QAAQ,IAAI,UAAU,QAAQ,KAAK,UAAU,QAAQ,MAAM,MAAM;CACjG,MAAM,QAAQ,OAAO,MAAM,OAAO;CAClC,MAAM,eAAe,+BAA+B,QAAQ,qBAAqB;CACjF,MAAM,SAAmB,CAAC;CAC1B,MAAM,6BAAa,IAAI,IAAY;CACnC,MAAM,cAAc,QAClB,yBAAyB,IAAI,GAAG,KAChC,QAAQ,wBAAwB,SAAS,KAAA,KACzC,EAAE,QAAQ,4BAA4B;CAExC,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,SAAS;EACzC,IAAI,CAAC,gBAAgB,MAAM,UAAU,EAAE,GAAG;GACxC,SAAS;GACT;EACF;EAEA,MAAM,MAAM,mBAAmB,MAAM,UAAU,EAAE;EACjD,MAAM,QAAQ;EACd,SAAS;EACT,OAAO,QAAQ,MAAM,UAAU,CAAC,gBAAgB,MAAM,UAAU,EAAE,GAChE,SAAS;EAGX,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,GACzB;EAGF,MAAM,QAAQ,MAAM,MAAM,OAAO,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ;EAC3D,IAAI,OAAO;GACT,2BAA2B,KAAK,KAAK;GACrC,OAAO,KAAK,KAAK;GACjB,WAAW,IAAI,GAAG;EACpB;CACF;CAIA,IAAI,eAAwC,CAAC;CAC7C,IAAI;EACF,MAAM,UAAA,GAASA,KAAAA,MAAAA,CAAM,MAAM;EAC3B,eAAe,SAAS,MAAM,IAAI,SAAS,CAAC;CAC9C,QAAQ,CAER;CAGA,MAAM,iBAAiB,CACrB,GAAG,OAAO,QAAQ,YAAY,GAC9B,GAAG,OAAO,QAAQ,QAAQ,wBAAwB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,OAAO,cAAc,GAAG,CAAC,CAC3G;CACA,KAAK,MAAM,CAAC,KAAK,UAAU,gBAAgB;EACzC,IAAI,WAAW,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,UAAU,KAAA,GAAW;EACpE,MAAM,SAAA,GAAQD,KAAAA,UAAAA,CAAU,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,QAAQ;EAClD,2BAA2B,KAAK,KAAK;EACrC,OAAO,KAAK,KAAK;EACjB,WAAW,IAAI,GAAG;CACpB;CAEA,IAAI,iBAAiB;EACnB,MAAM,oBAAoB,CAAC,yBAAyB;EACpD,IAAI,QAAQ,IAAI,QACd,kBAAkB,KAAK,SAAS,KAAK,UAAU,QAAQ,EAAE,GAAG;EAE9D,IAAI,QAAQ,KAAK,QACf,kBAAkB,KAAK,UAAU,KAAK,UAAU,QAAQ,GAAG,GAAG;EAEhE,IAAI,QAAQ,MAAM,QAChB,kBAAkB,KAAK,WAAW,KAAK,UAAU,QAAQ,IAAI,GAAG;EAElE,OAAO,KAAK,kBAAkB,KAAK,IAAI,CAAC;CAC1C;CAEA,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,0BAA0B,CAAC,CAAC,GAC5E,OAAO,MAAA,GAAKA,KAAAA,UAAAA,CAAU,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;CAGnD,IAAI,QAAQ,iBAAiB,OAAO,KAAK,QAAQ,aAAa,CAAC,CAAC,SAAS,GACvE,OAAO,KACL,CACE,cACA,GAAG,OAAO,QAAQ,QAAQ,aAAa,CAAC,CAAC,KACtC,CAAC,KAAK,WAAW,KAAK,KAAK,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,KAAK,GACrE,CACF,CAAC,CAAC,KAAK,IAAI,CACb;CAGF,IAAI,QAAQ,uBAAuB,OAAO,KAAK,QAAQ,mBAAmB,CAAC,CAAC,SAAS,GAAG;EACtF,OAAO,KACL,CACE,wBACA,GAAG,OAAO,QAAQ,QAAQ,mBAAmB,CAAC,CAAC,KAC5C,CAAC,KAAK,WAAW,KAAK,KAAK,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,KAAK,GACrE,CACF,CAAC,CAAC,KAAK,IAAI,CACb;EAGA,OAAO,KAAK,0BAA0B;CACxC;CAEA,IAAI,QAAQ,gBACV,OAAO,KAAK,eAAe,QAAQ,gBAAgB;CAGrD,OAAO;EAAC;EAAsB,GAAG;EAAQ,GAAG;CAAY,CAAC,CAAC,KAAK,MAAM,IAAI;AAC3E;AAGA,MAAM,uBAAuB;;;;;AAM7B,eAAe,sBAAsB,cAAwC;CAC3E,MAAM,SAAS,MAAMJ,YAAAA,QAAW,KAAK,cAAc,GAAG;CACtD,IAAI;EACF,MAAM,SAAS,OAAO,MAAM,GAAG;EAC/B,MAAM,EAAE,cAAc,MAAM,OAAO,KAAK,QAAQ,GAAG,OAAO,QAAQ,CAAC;EACnE,OAAO,2BAA2B,KAAK,OAAO,SAAS,SAAS,GAAG,SAAS,CAAC;CAC/E,UAAU;EACR,MAAM,OAAO,MAAM;CACrB;AACF;;;;;;;AAQA,eAAe,6BAA6B,cAAsB,cAAuC;CACvG,MAAM,EAAE,kBAAkB,YAAY,kBAAkB,MAAMA,YAAAA,QAAW,SAAS,cAAc,OAAO,CAAC;CACxG,MAAM,WAAW;CAGjB,IAAI,UAAU;CACd,KAAK,MAAM,YAAY,OAAO,OAAO,UAAU,aAAa,CAAC,CAAC,GAC5D,KAAK,MAAM,SAAS;EAAC;EAAgB;EAAmB;CAAsB,GAAG;EAC/E,MAAM,eAAe,WAAW;EAChC,KAAK,MAAM,QAAQ,cACjB,IAAI,gBAAgB,QAAQ,cAAc;GACxC,OAAO,aAAa;GACpB,UAAU;EACZ;CAEJ;CAEF,IAAI,SAAS;EACX,MAAM,mBAAA,GAAkBI,KAAAA,UAAAA,CAAU,UAAU,EAAE,WAAW,EAAE,CAAC;EAC5D,MAAMJ,YAAAA,QAAW,UACf,cACA,mBAAmB,GAAG,iBAAiB,OAAO,oBAAoB,eACpE;CACF;AACF;;;;;AAMA,SAAS,kBAAkB,QAAgE;CACzF,MAAM,aAAA,GAAYM,KAAAA,kBAAAA,CAAkB,MAAM;CAC1C,MAAM,UAAU,UAAU,GAAG,EAAE;CAC/B,IAAI,SAAS,OAAO,QAClB,MAAM,QAAQ,OAAO;CAEvB,OAAO;EACL,kBAAkB,UACf,MAAM,GAAG,EAAE,CAAC,CACZ,KAAI,aAAY,SAAS,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CACpD,KAAK,EAAE;EACV,SAAS,UAAU,QAAQ,KAAK,IAAI;CACtC;AACF;AAEA,SAAS,SAAS,OAAkD;CAClE,OAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AACrE;;;;;;AAOA,eAAe,0BACb,cACA,MACiC;CACjC,IAAI;CACJ,IAAI;EACF,WAAW,kBAAkB,MAAMN,YAAAA,QAAW,SAAS,cAAc,OAAO,CAAC,CAAC,CAAC;CACjF,QAAQ;EACN,OAAO,CAAC;CACV;CAEA,MAAM,YAAY,SAAS,QAAQ,IAAI,SAAS,YAAY,KAAA;CAC5D,IAAI,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC;CAElC,MAAM,WAAmC,CAAC;CAC1C,KAAK,MAAM,CAAC,UAAU,SAAS,OAAO,QAAQ,SAAS,GAAG;EACxD,IAAI,OAAO,SAAS,UAAU;EAC9B,IAAI,sBAAsB,KAAK,IAAI,GAAG;GACpC,KAAK,2BAA2B,SAAS,MAAM,KAAK,kDAAkD;GACtG;EACF;EACA,SAAS,YAAY;CACvB;CACA,OAAO;AACT;AAGA,SAAS,mBAAmB,WAAoC,MAAc,MAAuB;CACnG,MAAM,cAAc,KAAK,MAAM,CAAiB,KAAK;CACrD,MAAM,WAAW,SAAS,UAAU,QAAQ,IAAI,UAAU,WAAW,CAAC;CACtE,MAAM,UAAU,gBAAgB,aAAa,SAAS,UAAU,OAAO,IAAI,UAAU,UAAU,SAAS;CACxG,OAAO,SAAS,OAAO,IAAI,QAAQ,QAAQ,KAAA;AAC7C;;AAGA,SAAS,wBACP,WACA,WAC0E;CAC1E,MAAM,oBAA6C,EAAE,GAAG,UAAU;CAClE,KAAK,MAAM,SAAS;EAAC;EAAgB;EAAwB;CAAkB,GAAG;EAChF,MAAM,OAAO,UAAU;EACvB,IAAI,CAAC,SAAS,IAAI,GAAG;EACrB,MAAM,eAAuC,CAAC;EAC9C,KAAK,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,IAAI,GAAG;GAC/C,MAAM,WACJ,OAAO,SAAS,YAAY,KAAK,WAAW,UAAU,IAAI,mBAAmB,WAAW,MAAM,IAAI,IAAI;GACxG,IAAI,OAAO,aAAa,YAAY,sBAAsB,KAAK,QAAQ,GACrE,OAAO;IAAE;IAAM;GAAK;GAEtB,aAAa,QAAQ;EACvB;EACA,kBAAkB,SAAS;CAC7B;CACA,OAAO,EAAE,WAAW,kBAAkB;AACxC;;;;;AAMA,SAAS,0BACP,qBACA,kBACA,MACA;CACA,IAAI;CACJ,IAAI;EACF,UAAA,GAASK,KAAAA,MAAAA,CAAM,mBAAmB;CACpC,QAAQ;EACN,SAAS,CAAC;CACZ;CACA,MAAM,YAAY;EAAE,GAAG;EAAkB,GAAI,SAAS,MAAM,IAAI,SAAS,CAAC;CAAG;CAE7E,MAAM,WAAoC,CAAC;CAE3C,MAAM,kBAAkB,UAAU;CAClC,IAAI,MAAM,QAAQ,eAAe,KAAK,gBAAgB,OAAM,SAAQ,OAAO,SAAS,QAAQ,GAC1F,SAAS,8BAA8B;CAGzC,IAAI,SAAS,UAAU,iBAAiB,GAAG;EACzC,MAAM,aAAsC,CAAC;EAC7C,KAAK,MAAM,CAAC,UAAU,cAAc,OAAO,QAAQ,UAAU,iBAAiB,GAAG;GAC/E,IAAI,CAAC,SAAS,SAAS,GAAG;GAC1B,MAAM,SAAS,wBAAwB,WAAW,SAAS;GAC3D,IAAI,eAAe,QACjB,WAAW,YAAY,OAAO;QAE9B,KACE,oCAAoC,SAAS,KAAK,KAAK,UAAU,OAAO,IAAI,EAAE,QAAQ,OAAO,KAAK,kDACpG;EAEJ;EACA,IAAI,OAAO,KAAK,UAAU,CAAC,CAAC,SAAS,GACnC,SAAS,oBAAoB;CAEjC;CAEA,OAAO;AACT;AAEA,IAAa,OAAb,cAA0B,WAAW;CACnC;CACA;CACA;CAEA,YAAY,UAAU,QAAQ,IAAI,GAAG;EACnC,MAAM;GAAE,WAAW;GAAY,MAAM;EAAO,CAAC;EAE7C,KAAK,UAAU;EACf,KAAK,WAAW,KAAK,aAAa,OAAO;EACzC,KAAK,iBAAiB,KAAK,UAAU,kBAAkB;CACzD;CAEA,aAAqB,KAAkC;EAOrD,KAAK,MAAM,YAAY;GALrB;IAAE,UAAU;IAAkB,gBAAgB;GAAO;GACrD;IAAE,UAAU;IAAqB,gBAAgB;GAAM;GACvD;IAAE,UAAU;IAAa,gBAAgB;GAAO;GAChD;IAAE,UAAU;IAAY,gBAAgB;GAAM;EAEjB,GAAG;GAChC,MAAM,eAAe,KAAA,QAAK,KAAK,KAAK,SAAS,QAAQ;GACrD,IAAI,GAAA,QAAG,WAAW,YAAY,GAC5B,OAAO;IAAE,GAAG;IAAU,MAAM;GAAa;EAE7C;EACA,MAAM,YAAY,KAAA,QAAK,QAAQ,KAAK,IAAI;EACxC,IAAI,cAAc,KAChB,OAAO,KAAK,aAAa,SAAS;EAEpC,OAAO;CACT;CAEA,2BAAkC,EAAE,SAAS,WAAiD;EAC5F,OAAO,2BAA2B,QAAQ,GAAG,QAAQ;CACvD;CAEA,MAAa,KAAK,EAChB,KACA,aACA,eACA,WAMC;EACD,MAAM,WAAW,yBAAyB;GACxC,QAAQ,KAAK;GACb,MAAM;EACR,CAAC;EAED,IAAI,UAAU;EACd,IAAI,kBAAkB,sBAAsB;EAC5C,IAAI,KAAK,mBAAmB,QAAQ;GAClC,IAAI,KAAK,YAAa,MAAM,sBAAsB,KAAK,SAAS,IAAI,GAAI;IACtE,IAAI,CAAC,qBAAqB,KAAK,OAAO,GACpC,MAAM,IAAIJ,cAAAA,YAAY;KACpB,IAAI;KACJ,QAAQC,cAAAA,YAAY;KACpB,UAAUC,cAAAA,cAAc;KACxB,SAAS;MAAE;MAAK,SAAS,OAAO,OAAO;KAAE;KACzC,MAAM,mBAAmB,KAAK,UAAU,OAAO,EAAE,2BAA2B;IAC9E,CAAC;IAGH,kBAAkB,cAAc,YAAY,GAAG,cAAc,GAAG,QAAQ;GAC1E,OAGE,kBAAkB,SAAS,YAAY,GAAG,cAAc;EAE5D;EACA,IAAI,KAAK,mBAAmB,OAAO;GAEjC,UAAU;GAEV,kBAAkB,iBAAiB;EACrC;EAEA,OAAO,SAAS;GACd,KAAK,GAAG,KAAK,eAAe,GAAG,QAAQ,GAAG;GAC1C,MAAM,CAAC;GACP,KAAK,EACH,MAAM,QAAQ,IAAI,KACpB;EACF,CAAC;CACH;CAEA,sBAA8B,KAA4B;EACxD,MAAM,oBAAoB,KAAA,QAAK,KAAK,KAAK,qBAAqB;EAC9D,IAAI,GAAA,QAAG,WAAW,iBAAiB,GACjC,OAAO;EAGT,MAAM,YAAY,KAAA,QAAK,QAAQ,KAAK,IAAI;EACxC,IAAI,cAAc,KAChB,OAAO,KAAK,sBAAsB,SAAS;EAG7C,OAAO;CACT;CAEA,MAAc,gBAAgB,KAAa,UAA0B,CAAC,GAAG;EACvE,MAAM,0BAA0B,KAAK,sBAAsB,KAAK,OAAO;EACvE,MAAM,sBAAsB,0BACxB,MAAMH,YAAAA,QAAW,SAAS,yBAAyB,OAAO,IAC1D;EAEJ,MAAM,sBAAsB,0BACxB,MAAM,KAAK,gBAAgB,qBAAqB,KAAA,QAAK,QAAQ,uBAAuB,GAAG,GAAG,IAC1F,KAAA;EAEJ,MAAM,QAAQ,YAAoB,KAAK,OAAO,KAAK,OAAO;EAC1D,MAAM,kBACJ,KAAK,UAAU,mBAAmB,SAAS,MAAM,0BAA0B,KAAK,SAAS,MAAM,IAAI,IAAI,CAAC;EAC1G,MAAM,uBAAuB,MAAM,KAAK,2BACtC,KAAK,WACD,KAAA,QAAK,QAAQ,KAAK,SAAS,IAAI,IAC/B,2BAA2B,KAAA,QAAK,QAAQ,uBAAuB,CACrE;EAEA,MAAMA,YAAAA,QAAW,UACf,KAAA,QAAK,KAAK,KAAK,qBAAqB,GACpC,0BAA0B,qBAAqB;GAC7C,GAAG;GACH;GACA;GACA,wBAAwB,0BAA0B,qBAAqB,sBAAsB,IAAI;GAEjG,eAAe;IAAE,GAAG;IAAiB,GAAG,QAAQ;GAAc;EAChE,CAAC,GACD,OACF;CACF;;;;;;CAOA,MAAc,2BAA2B,SAAsE;EAC7G,IAAI,CAAC,SAAS,OAAO,CAAC;EAEtB,IAAI;EACJ,IAAI;GACF,WAAW,OAAA,GAAMO,aAAAA,SAAAA,CAAS,KAAA,QAAK,KAAK,SAAS,cAAc,CAAC;EAC9D,QAAQ;GACN,OAAO,CAAC;EACV;EACA,IAAI,CAAC,SAAS,QAAQ,KAAK,CAAC,SAAS,SAAS,IAAI,KAAK,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC;EAExG,MAAM,YAAY,gBAAgB,KAAK,OAAO,SAAS,kBAAkB,EAAE,CAAC,CAAC,GAAG;EAChF,IAAI,aAAa,OAAO,SAAS,KAAK,IACpC,OAAO,SAAS;EAElB,MAAM,cAAc,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,QAC7C,QAAO,yBAAyB,IAAI,GAAG,KAAK,QAAQ,uBAAuB,QAAQ,6BACrF;EACA,IAAI,CAAC,aAAa,YAAY,SAAS,GACrC,KAAK,OAAO,KACV,eAAe,YAAY,KAAK,IAAI,EAAE,mMACxC;EAEF,OAAO,CAAC;CACV;;;;;;CAOA,MAAc,mBACZ,uBACA,cACA,EAAE,KAAK,SACsB;EAC7B,MAAM,aAAa,KAAA,QAAK,QAAQ,uBAAuB,YAAY;EACnE,IAAI,CAAC,WAAW,WAAW,GAAG,wBAAwB,KAAA,QAAK,KAAK,GAAG;GACjE,KAAK,OAAO,KAAK,YAAY,MAAM,cAAc,IAAI,4CAA4C,YAAY;GAC7G;EACF;EAIA,IAAI;EACJ,IAAI;EACJ,IAAI;GACF,CAAC,mBAAmB,kBAAkB,MAAM,QAAQ,IAAI,CACtDP,YAAAA,QAAW,SAAS,qBAAqB,GACzCA,YAAAA,QAAW,SAAS,UAAU,CAChC,CAAC;EACH,QAAQ;GACN,KAAK,OAAO,KAAK,YAAY,MAAM,cAAc,IAAI,6BAA6B,YAAY;GAC9F;EACF;EAEA,IAAI,CAAC,eAAe,WAAW,GAAG,oBAAoB,KAAA,QAAK,KAAK,GAAG;GACjE,KAAK,OAAO,KACV,YAAY,MAAM,cAAc,IAAI,4CAA4C,gBAClF;GACA;EACF;EAEA,OAAO;CACT;;;;;CAMA,MAAc,gBACZ,qBACA,qBACA,KACiC;EACjC,MAAM,WAAW,6BAA6B,mBAAmB;EACjE,MAAM,YAAoC,CAAC;EAC3C,MAAM,gCAAgB,IAAI,IAAY;EACtC,MAAM,wBAAwB,KAAA,QAAK,QAAQ,mBAAmB;EAE9D,KAAK,MAAM,CAAC,KAAK,iBAAiB,OAAO,QAAQ,QAAQ,GAAG;GAC1D,MAAM,aAAa,MAAM,KAAK,mBAAmB,uBAAuB,cAAc;IACpF;IACA,OAAO;GACT,CAAC;GACD,IAAI,CAAC,YAAY;GAEjB,IAAI,WAAW,KAAA,QAAK,SAAS,UAAU;GACvC,IAAI,cAAc,IAAI,QAAQ,GAC5B,WAAW,GAAG,IAAI,QAAQ,oBAAoB,GAAG,EAAE,GAAG;GAExD,cAAc,IAAI,QAAQ;GAE1B,MAAMA,YAAAA,QAAW,MAAM,KAAA,QAAK,KAAK,KAAK,gBAAgB,GAAG,EAAE,WAAW,KAAK,CAAC;GAC5E,MAAMA,YAAAA,QAAW,SAAS,YAAY,KAAA,QAAK,KAAK,KAAK,kBAAkB,QAAQ,CAAC;GAChF,UAAU,OAAO,GAAG,iBAAiB,GAAG;EAC1C;EAEA,OAAO;CACT;;;;;CAMA,MAAc,gBAAgB,KAAa,SAA8B;EACvE,MAAM,aAAa,KAAA,QAAK,KAAK,KAAK,aAAa;EAC/C,MAAM,SAAS,EACb,wBAAwB;GACtB,KAAK,QAAQ,OAAO,CAAC;GACrB,IAAI,QAAQ,MAAM,CAAC;GACnB,MAAM,QAAQ,QAAQ,CAAC;EACzB,EACF;EAEA,MAAMA,YAAAA,QAAW,UACf,YACA,4BAA4B,OAAO,QAAQ,OAAO,sBAAsB,CAAC,CACtE,KAAK,CAAC,KAAK,WAAW,KAAK,IAAI,IAAI,KAAK,UAAU,KAAK,GAAG,CAAC,CAC3D,KAAK,IAAI,GACd;CACF;;;;;;CAOA,MAAc,gBAAgB,KAA4B;EACxD,MAAM,mBAAmB,KAAA,QAAK,KAAK,KAAK,SAAS,SAAS,SAAS;EACnE,IAAI,CAAC,GAAA,QAAG,WAAW,gBAAgB,GAAG;EAEtC,MAAM,mBAAmB,KAAA,QAAK,KAAK,KAAK,SAAS,SAAS;EAC1D,MAAMA,YAAAA,QAAW,GAAG,kBAAkB,kBAAkB;GAAE,WAAW;GAAM,cAAc;EAAM,CAAC;CAClG;;;;;;CAOA,MAAc,eACZ,UACA,YACA,KACiC;EACjC,MAAM,YAAoC,CAAC;EAC3C,MAAM,gCAAgB,IAAI,IAAY;EACtC,MAAM,eAAe,KAAA,QAAK,QAAQ,UAAU;EAE5C,KAAK,MAAM,CAAC,KAAK,iBAAiB,OAAO,QAAQ,QAAQ,GAAG;GAC1D,MAAM,aAAa,MAAM,KAAK,mBAAmB,cAAc,cAAc;IAC3E;IACA,OAAO;GACT,CAAC;GACD,IAAI,CAAC,YAAY;GAEjB,IAAI,WAAW,KAAA,QAAK,SAAS,UAAU;GACvC,IAAI,cAAc,IAAI,QAAQ,GAC5B,WAAW,GAAG,IAAI,QAAQ,oBAAoB,GAAG,EAAE,GAAG;GAExD,cAAc,IAAI,QAAQ;GAE1B,MAAMA,YAAAA,QAAW,MAAM,KAAA,QAAK,KAAK,KAAK,eAAe,GAAG,EAAE,WAAW,KAAK,CAAC;GAC3E,MAAMA,YAAAA,QAAW,SAAS,YAAY,KAAA,QAAK,KAAK,KAAK,iBAAiB,QAAQ,CAAC;GAC/E,UAAU,OAAO,GAAG,gBAAgB,GAAG;EACzC;EAEA,OAAO;CACT;;;;;;CAOA,MAAc,uBAAuB,KAA4B;EAC/D,MAAM,wBAAwB,KAAA,QAAK,KAAK,KAAK,SAAS,cAAc;EACpE,IAAI,CAAC,GAAA,QAAG,WAAW,qBAAqB,GAAG;EAG3C,MAAM,eAAc,OAAA,GADIO,aAAAA,SAAAA,CAAS,qBAAqB,EAAA,CACxB;EAC9B,IAAI,CAAC,eAAe,OAAO,KAAK,WAAW,CAAC,CAAC,WAAW,GAAG;EAE3D,MAAM,YAAY,MAAM,KAAK,eAAe,aAAa,KAAK,SAAS,GAAG;EAC1E,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW,GAAG;EAEzC,MAAM,wBAAwB,KAAA,QAAK,KAAK,KAAK,cAAc;EAC3D,IAAI;EACJ,IAAI;GACF,YAAa,OAAA,GAAMA,aAAAA,SAAAA,CAAS,qBAAqB;EACnD,QAAQ;GACN,YAAY,CAAC;EACf;EACA,UAAU,sBAAsB;EAChC,OAAA,GAAMC,aAAAA,UAAAA,CAAU,uBAAuB,WAAW,EAAE,QAAQ,EAAE,CAAC;CACjE;CAEA,WAAmB,SAAwC;EACzD,MAAM,OAAiB,CAAC;EACxB,IAAI,QAAQ,KAAK,KAAK,KAAK,SAAS,QAAQ,IAAI,KAAK,GAAG,GAAG;EAC3D,IAAI,QAAQ,IAAI,KAAK,KAAK,QAAQ,QAAQ,GAAG,KAAK,GAAG,GAAG;EACxD,IAAI,QAAQ,MAAM,KAAK,KAAK,UAAU,QAAQ,KAAK,KAAK,GAAG,GAAG;EAC9D,OAAO;CACT;;;;;CAMA,yBACE,IACA,MACA,EAAE,cAAc,UAAqC,CAAC,GAC9C;EACR,MAAM,MAAM,SAAS,YAAY,YAAY;EAE7C,QAAQ,IAAR;GACE,KAAK,OACH,OAAO,GAAG,IAAI;GAChB,KAAK,QACH,OAAO,SAAS,aAAa,CAAC,cAAc,GAAG,IAAI,mBAAmB;GACxE,KAAK,QACH,OAAO,SAAS,YAAY,GAAG,IAAI,0CAA0C,GAAG,IAAI;GACtF,SACE,OAAO;EACX;CACF;CAEA,MAAa,QAAQ,EACnB,MAAM,KAAK,SACX,cACA,eACA,gBACA,0BAOE,CAAC,GAAG;EACN,MAAM,KAAK,KAAK;EAChB,IAAI,cAAc;EAClB,IAAI,KAAK,UAAU;GACjB,MAAM,cAAc,KAAA,QAAK,KAAK,KAAK,KAAK,SAAS,QAAQ;GACzD,IAAI,KAAA,QAAK,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAA,QAAK,QAAQ,WAAW,GAAG;IASlE,IAPE,OAAO,SACP,GAAA,QAAG,WAAW,KAAA,QAAK,KAAK,KAAK,cAAc,CAAC,KAC5C,OAAO,QACH,OAAA,GAAMD,aAAAA,SAAAA,CAAS,KAAA,QAAK,KAAK,KAAK,cAAc,CAAC,EAAA,CAC5C,eAAe,CAAC,CACrB,CAAC,CAAC,MAAK,SAAQ,KAAK,WAAW,0BAA0B,CAAC,GAK1D,MAAMP,YAAAA,QAAW,GAAG,aAAa,EAAE,OAAO,KAAK,CAAC;SAC3C;KACL,MAAMA,YAAAA,QAAW,SAAS,KAAK,SAAS,MAAM,WAAW;KACzD,IAAI,OAAO,UAAU,iBAAiB,OAAO,KAAK,aAAa,CAAC,CAAC,SAAS,GACxE,MAAM,6BAA6B,aAAa,OAAO,KAAK,aAAa,CAAC;IAE9E;GACF;GAEA,IAAI,OAAO,QACT,cAAc,MAAM,sBAAsB,WAAW;EAEzD;EAEA,MAAM,iBAAiB,KAAK,yBAAyB,IAAI,WAAW,EAAE,YAAY,CAAC;EACnF,IAAI,OAAiB,CAAC;EAEtB,QAAQ,IAAR;GACE,KAAK;IACH,MAAM,KAAK,gBAAgB,KAAK;KAAE,GAAG;KAAc;KAAe;KAAgB;IAAsB,CAAC;IACzG;GACF,KAAK;IAEH,OAAA,GAAMS,aAAAA,WAAAA,CAAW,KAAA,QAAK,KAAK,KAAK,WAAW,CAAC;IAC5C,IAAI,cACF,MAAM,KAAK,gBAAgB,KAAK,YAAY;IAE9C,MAAM,KAAK,gBAAgB,GAAG;IAC9B;GACF,KAAK;IACH,MAAM,KAAK,uBAAuB,GAAG;IACrC;GACF,KAAK,OACH,IAAI,cACF,OAAO,KAAK,WAAW,YAAY;EAKzC;EAEA,MAAM,WAAW,yBAAyB;GACxC,QAAQ,KAAK;GACb,MAAM;EACR,CAAC;EAED,IAAI;GACF,OAAO,MAAM,SAAS;IACpB,KAAK,GAAG,GAAG,GAAG;IACd;IACA,KAAK,QAAQ;GACf,CAAC;EACH,SAAS,OAAO;GACd,IAAI,OAAO,QAAQ,MAAM;GAMzB,MAAM,kBAAkB,4BAHtB,SAAS,OAAO,UAAU,WACtB,GAAG,YAAY,QAAQ,OAAO,MAAM,MAAM,IAAI,GAAG,IAAI,YAAY,QAAQ,OAAO,MAAM,MAAM,IAAI,OAChG,EAC2D;GACjE,IAAI,gBAAgB,WAAW,GAAG,MAAM;GAExC,MAAM,IAAIR,cAAAA,YACR;IACE,IAAI;IACJ,QAAQC,cAAAA,YAAY;IACpB,UAAUC,cAAAA,cAAc;IACxB,SAAS,EAAE,cAAc,gBAAgB,KAAK,IAAI,EAAE;IACpD,MAAM,mCAAmC,gBAAgB,KAAK,IAAI,EAAE;GACtE,GACA,KACF;EACF;CACF;CAEA,MAAa,gBAAgB,UAAoB;EAC/C,MAAM,KAAK,KAAK;EAChB,MAAM,iBAAiB,KAAK,yBAAyB,IAAI,KAAK;EAE9D,MAAM,MAA8B,EAClC,MAAM,QAAQ,IAAI,KACpB;EAEA,IAAI,QAAQ,IAAI,qBACd,IAAI,sBAAsB,QAAQ,IAAI;EAQxC,OALiB,yBAAyB;GACxC,QAAQ,KAAK;GACb,MAAM;EACR,CAEc,CAAC,CAAC;GACd,KAAK,GAAG,GAAG,GAAG;GACd,MAAM;GACN;EACF,CAAC;CACH;CAEA,MAAa,kBAAkB,cAAyC;EACtE,IAAI;GACF,MAAM,kBAAkB,KAAA,QAAK,KAAK,KAAK,SAAS,cAAc;GAE9D,IAAI;IACF,MAAMH,YAAAA,QAAW,OAAO,eAAe;GACzC,QAAQ;IACN,OAAO;GACT;GAEA,MAAM,cAAc,OAAA,GAAMO,aAAAA,SAAAA,CAAS,eAAe;GAClD,KAAK,MAAM,cAAc,cACvB,IAAI,CAAC,YAAY,gBAAgB,CAAC,YAAY,aAAa,aACzD,OAAO,kBAAkB,WAAW,gCAAgC,KAAK,eAAe,WAAW,WAAW;GAIlH,OAAO;EACT,SAAS,KAAK;GACZ,QAAQ,MAAM,GAAG;GACjB,OAAO;EACT;CACF;CAEA,MAAa,iBAAiB;EAC5B,MAAM,kBAAkB,KAAA,QAAK,KAAK,KAAK,SAAS,cAAc;EAE9D,QAAO,OAAA,GADWA,aAAAA,SAAAA,CAAS,eAAe,EAAA,CAC/B;CACb;CAEA,MAAa,oBAAoB;EAC/B,MAAMG,gBAAAA,GAAaC,IAAAA,cAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,IAA6B;EAChD,MAAMC,eAAAA,GAAYC,KAAAA,QAAAA,CAAQH,YAAU;EACpC,MAAM,cAAc,KAAA,QAAK,KAAKE,aAAW,MAAM,MAAM,cAAc;EAGnE,QAAO,OAAA,GADgBL,aAAAA,SAAAA,CAAS,WAAW,EAAA,CAC5B;CACjB;CAEA,MAAa,wBAAwB,SAAiC;EACpE,MAAM,cAAc,OAAA,GAAMA,aAAAA,SAAAA,CAAS,cAAc;EACjD,YAAY,UAAU;GACpB,GAAG,YAAY;GACf,GAAG;EACL;EACA,OAAA,GAAMC,aAAAA,UAAAA,CAAU,gBAAgB,aAAa,EAAE,QAAQ,EAAE,CAAC;CAC5D;AACF;AAEA,IAAa,cAAb,cAAiC,KAAK,CAAC;;AC7oCvC,IAAsB,aAAtB,MAAiC,CAGjC;AAEA,IAAa,iBAAb,cAAoC,WAAW;CAC7C;CAEA,YAAY,UAAkB;EAC5B,MAAM;EACN,KAAK,WAAW;CAClB;CAEA,SAAiB,UAAmC;EAClD,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,GAAG,SAAS,UAAU,SAAS,KAAmC,SAAiB;IACjF,IAAI,KAAK,OAAO,GAAG;SACd,QAAQ,IAAI;GACnB,CAAC;EACH,CAAC;CACH;CAEA,UAAkB,EAAE,UAAU,QAA2D;EACvF,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,GAAG,UAAU,UAAU,MAAM,SAAS,QAAsC;IAC1E,IAAI,KAAK,OAAO,GAAG;SACd,QAAQ;GACf,CAAC;EACH,CAAC;CACH;CAEA,MAAc,cAAc,EAC1B,KACA,OACA,WAAW,KAAK,UAChB,QAMkB;EAClB,MAAM,QAAQ,IAAI,OAAO,IAAI,IAAI,OAAO,GAAG;EAC3C,IAAI,KAAK,MAAM,KAAK,GAIlB,OAAO,KAAK,QAAQ,aAAa,GAAG,IAAI,GAAG,OAAO;OAElD,QAAQ,KAAK,IAAI,GAAG;EAEtB,MAAM,KAAK,UAAU;GAAE;GAAU;EAAK,CAAC;EACvC,QAAQ,KAAK,GAAG,IAAI,UAAU,MAAM,cAAc;EAClD,OAAO;CACT;CAEA,MAAM,YAAY,KAAqC;EACrD,IAAI;GACF,MAAM,OAAO,MAAM,KAAK,SAAS,KAAK,QAAQ;GAC9C,MAAM,QAAQ,IAAI,OAAO,IAAI,IAAI,SAAS,GAAG;GAE7C,OADc,KAAK,MAAM,KACd,CAAC,GAAG,MAAM;EACvB,SAAS,KAAK;GACZ,QAAQ,MAAM,4BAA4B,KAAK;GAC/C,OAAO;EACT;CACF;CAEA,MAAM,YAAY,KAAa,OAA8B;EAC3D,IAAI;GACF,MAAM,OAAO,MAAM,KAAK,SAAS,KAAK,QAAQ;GAC9C,MAAM,KAAK,cAAc;IAAE;IAAK;IAAO;GAAK,CAAC;EAC/C,SAAS,KAAK;GACZ,QAAQ,MAAM,4BAA4B,KAAK;EACjD;CACF;AACF;;ACtEA,IAAa,cAAb,MAAyB;;;;;;;;CAQvB,MAAa,gBAAgB,WAAmB,gBAAwB,iBAA2B;EACjG,MAAMM,gBAAAA,GAAaC,IAAAA,cAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,IAA6B;EAChD,MAAMC,cAAY,KAAA,QAAK,QAAQF,YAAU;EACzC,MAAM,WAAW,KAAA,QAAK,QAAQE,aAAW,MAAM,iBAAiB,SAAS;EACzE,MAAM,aAAa,GAAA,QAAG,aAAa,UAAU,MAAM;EAEnD,IAAI,GAAA,QAAG,WAAW,cAAc,KAAK,CAAC,iBAAiB;GACrD,QAAQ,KAAK,GAAG,eAAe,gBAAgB;GAC/C,OAAO;EACT;EAEA,MAAMC,aAAAA,QAAQ,WAAW,gBAAgB,UAAU;EAEnD,OAAO;CACT;CAEA,MAAa,aAAa,EAAE,SAA4B;EACtD,MAAM,UAAU,KAAA,QAAK,KAAK,QAAQ,IAAI,GAAG,kBAAkB;EAE3D,MAAMA,aAAAA,QAAQ,WAAW,OAAO;EAGhC,MAAM,IADqB,eAAe,OACvB,CAAC,CAAC,YAAY,UAAU,KAAK;CAClD;CAEA,qBAA4B,OAAyB;EACnD,KAAK,MAAM,KAAK,OACd,IAAI,GAAA,QAAG,WAAW,CAAC,GACjB,OAAO;EAIX,MAAM,IAAI,MAAM,yDAAyD,MAAM,KAAK,IAAI,CAAC;CAC3F;;;;;;CAOA,iBAAwB,OAA2B;EACjD,OAAO,MAAM,QAAO,SAAQ,GAAA,QAAG,WAAW,IAAI,CAAC;CACjD;;;;;;CAOA,gCAAuC,OAAqC;EAC1E,KAAK,MAAM,KAAK,OACd,IAAI,GAAA,QAAG,WAAW,CAAC,GACjB,OAAO;CAKb;CAEA,oBAA2B,EACzB,UACA,gBAIC;EACD,IAAI,cAAc,GAAA,QAAG,aAAa,UAAU,MAAM;EAClD,aAAa,SAAS,EAAE,QAAQ,cAAc;GAC5C,cAAc,YAAY,WAAW,QAAQ,OAAO;EACtD,CAAC;EAED,GAAA,QAAG,cAAc,UAAU,WAAW;CACxC;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"services-PA2YqqQJ.js","names":[],"sources":["../../_internal-core/dist/logger/index.js","../../_internal-core/dist/base/index.js","../src/deploy/log.ts","../src/services/deps.ts","../src/services/env.ts","../src/services/fs.ts"],"sourcesContent":["import { Transform } from \"stream\";\n// src/logger/adapter.ts\nfunction isAdaptableLogger(logger) {\n\treturn typeof logger.__attachObservability === \"function\";\n}\n/**\n* Export a tracked exception through the adapter sink, mirroring the\n* DualLogger dual-write shape (`errorId`/`domain`/`category`/`details`/`cause`\n* when present on a MastraError-like value). Never throws into the caller.\n*/\nfunction exportTrackedException(ctx, error, metadata) {\n\tif (!ctx?.options.export) return;\n\ttry {\n\t\tconst mastraError = error;\n\t\tctx.getLogSink()?.error(error.message, {\n\t\t\t...mastraError.id !== void 0 ? { errorId: mastraError.id } : {},\n\t\t\t...mastraError.domain !== void 0 ? { domain: mastraError.domain } : {},\n\t\t\t...mastraError.category !== void 0 ? { category: mastraError.category } : {},\n\t\t\t...mastraError.details !== void 0 ? { details: mastraError.details } : {},\n\t\t\t...error.cause instanceof Error ? { cause: error.cause.message } : {},\n\t\t\t...metadata\n\t\t});\n\t} catch {}\n}\n/**\n* Adapt IMastraLogger's variadic args into the structured `data` payload of\n* an exported log record. Extracts the first plain object as data,\n* serializes an Error arg, and collects remaining primitives under `args`\n* so the derived record preserves all context from the native call.\n*/\nfunction buildLogRecordData(args) {\n\tconst objectData = args.find((arg) => arg !== null && typeof arg === \"object\" && !Array.isArray(arg) && !(arg instanceof Error));\n\tconst errorArg = args.find((arg) => arg instanceof Error);\n\tconst extraArgs = args.filter((arg) => arg !== objectData && arg !== errorArg);\n\tif (!objectData && !errorArg && extraArgs.length === 0) return void 0;\n\treturn {\n\t\t...objectData ?? {},\n\t\t...errorArg ? { error: {\n\t\t\tname: errorArg.name,\n\t\t\tmessage: errorArg.message,\n\t\t\tstack: errorArg.stack\n\t\t} } : {},\n\t\t...extraArgs.length > 0 ? { args: extraArgs } : {}\n\t};\n}\n// src/logger/noop-logger.ts\nconst noopLogger = {\n\tdebug: () => {},\n\tinfo: () => {},\n\twarn: () => {},\n\terror: () => {},\n\tcleanup: async () => {},\n\tgetTransports: () => /* @__PURE__ */ new Map(),\n\ttrackException: () => {},\n\tlistLogs: async () => ({\n\t\tlogs: [],\n\t\ttotal: 0,\n\t\tpage: 1,\n\t\tperPage: 100,\n\t\thasMore: false\n\t}),\n\tlistLogsByRunId: async () => ({\n\t\tlogs: [],\n\t\ttotal: 0,\n\t\tpage: 1,\n\t\tperPage: 100,\n\t\thasMore: false\n\t})\n};\n// src/logger/index.ts\nconst RegisteredLogger = {\n\tAGENT: \"AGENT\",\n\tOBSERVABILITY: \"OBSERVABILITY\",\n\tAUTH: \"AUTH\",\n\tBROWSER: \"BROWSER\",\n\tNETWORK: \"NETWORK\",\n\tWORKFLOW: \"WORKFLOW\",\n\tLLM: \"LLM\",\n\tTTS: \"TTS\",\n\tVOICE: \"VOICE\",\n\tVECTOR: \"VECTOR\",\n\tBUNDLER: \"BUNDLER\",\n\tDEPLOYER: \"DEPLOYER\",\n\tMEMORY: \"MEMORY\",\n\tSTORAGE: \"STORAGE\",\n\tEMBEDDINGS: \"EMBEDDINGS\",\n\tMCP_SERVER: \"MCP_SERVER\",\n\tSERVER_CACHE: \"SERVER_CACHE\",\n\tSERVER: \"SERVER\",\n\tWORKSPACE: \"WORKSPACE\",\n\tCHANNEL: \"CHANNEL\"\n};\nconst LogLevel = {\n\tDEBUG: \"debug\",\n\tINFO: \"info\",\n\tWARN: \"warn\",\n\tERROR: \"error\",\n\tNONE: \"silent\"\n};\nvar LoggerTransport = class extends Transform {\n\tconstructor(opts = {}) {\n\t\tsuper({\n\t\t\t...opts,\n\t\t\tobjectMode: true\n\t\t});\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogs(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args?.page ?? 1,\n\t\t\tperPage: _args?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nconst createCustomTransport = (stream, listLogs, listLogsByRunId) => {\n\tlet transport = stream;\n\tif (listLogs) transport.listLogs = listLogs;\n\tif (listLogsByRunId) transport.listLogsByRunId = listLogsByRunId;\n\treturn transport;\n};\nvar MastraLogger = class {\n\tname;\n\tlevel;\n\ttransports;\n\tconstructor(options = {}) {\n\t\tthis.name = options.name || \"Mastra\";\n\t\tthis.level = options.level || LogLevel.ERROR;\n\t\tthis.transports = new Map(Object.entries(options.transports || {}));\n\t}\n\tgetTransports() {\n\t\treturn this.transports;\n\t}\n\ttrackException(_error, _metadata) {}\n\tasync listLogs(transportId, params) {\n\t\tif (!transportId || !this.transports.has(transportId)) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogs?.(params) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: params?.page ?? 1,\n\t\t\tperPage: params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId({ transportId, runId, fromDate, toDate, logLevel, filters, page, perPage }) {\n\t\tif (!transportId || !this.transports.has(transportId) || !runId) return {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t\treturn this.transports.get(transportId).listLogsByRunId?.({\n\t\t\trunId,\n\t\t\tfromDate,\n\t\t\ttoDate,\n\t\t\tlogLevel,\n\t\t\tfilters,\n\t\t\tpage,\n\t\t\tperPage\n\t\t}) ?? {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: page ?? 1,\n\t\t\tperPage: perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nvar ConsoleLogger = class ConsoleLogger extends MastraLogger {\n\tcomponent;\n\tfilter;\n\t#adapterContext;\n\tconstructor(options = {}) {\n\t\tsuper(options);\n\t\tthis.component = options.component;\n\t\tthis.filter = options.filter;\n\t}\n\t/**\n\t* Adapter hook (see `AdaptableLogger`): enables native trace correlation\n\t* (trace_id/span_id appended to console output) and observability export\n\t* derived from the same record. Called by Mastra during setup.\n\t*/\n\t__attachObservability(ctx) {\n\t\tthis.#adapterContext = ctx;\n\t}\n\tchild(componentOrBindings) {\n\t\tconst component = typeof componentOrBindings === \"string\" ? componentOrBindings : componentOrBindings?.component ?? this.component;\n\t\tconst child = new ConsoleLogger({\n\t\t\tname: this.name,\n\t\t\tlevel: this.level,\n\t\t\tcomponent,\n\t\t\tfilter: this.filter\n\t\t});\n\t\tif (this.#adapterContext) child.__attachObservability(this.#adapterContext);\n\t\treturn child;\n\t}\n\t/**\n\t* Native-record correlation: when a span is active, append the trace\n\t* fields object to the console args so every destination sees them.\n\t*/\n\t#correlate(args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.correlation) return args;\n\t\ttry {\n\t\t\tconst fields = ctx.resolveTraceFields();\n\t\t\treturn fields ? [...args, fields] : args;\n\t\t} catch {\n\t\t\treturn args;\n\t\t}\n\t}\n\t/**\n\t* Export the record derived from the same native call to observability.\n\t* Mirrors DualLogger semantics: export is independent of the console\n\t* level filter, and never throws into the caller.\n\t*/\n\t#export(level, message, args) {\n\t\tconst ctx = this.#adapterContext;\n\t\tif (!ctx?.options.export) return;\n\t\ttry {\n\t\t\tctx.getLogSink()?.[level](message, buildLogRecordData(args));\n\t\t} catch {}\n\t}\n\tshouldLog(level, message, args) {\n\t\tif (!this.filter) return true;\n\t\ttry {\n\t\t\treturn this.filter({\n\t\t\t\tcomponent: this.component,\n\t\t\t\tlevel,\n\t\t\t\tmessage,\n\t\t\t\targs\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconsole.error(`[Logger] Filter error for component=${this.component} level=${level}:`, e);\n\t\t\treturn true;\n\t\t}\n\t}\n\tprefix() {\n\t\treturn this.component ? `[${this.component}] ` : \"\";\n\t}\n\tdebug(message, ...args) {\n\t\tif (this.level === LogLevel.DEBUG && this.shouldLog(LogLevel.DEBUG, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"debug\", message, args);\n\t}\n\tinfo(message, ...args) {\n\t\tif ((this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.INFO, message, args)) console.info(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"info\", message, args);\n\t}\n\twarn(message, ...args) {\n\t\tif ((this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.WARN, message, args)) console.warn(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"warn\", message, args);\n\t}\n\terror(message, ...args) {\n\t\tif ((this.level === LogLevel.ERROR || this.level === LogLevel.WARN || this.level === LogLevel.INFO || this.level === LogLevel.DEBUG) && this.shouldLog(LogLevel.ERROR, message, args)) console.error(`${this.prefix()}${message}`, ...this.#correlate(args));\n\t\tthis.#export(\"error\", message, args);\n\t}\n\ttrackException(error, metadata) {\n\t\texportTrackedException(this.#adapterContext, error, metadata);\n\t}\n\tasync listLogs(_transportId, _params) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _params?.page ?? 1,\n\t\t\tperPage: _params?.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n\tasync listLogsByRunId(_args) {\n\t\treturn {\n\t\t\tlogs: [],\n\t\t\ttotal: 0,\n\t\t\tpage: _args.page ?? 1,\n\t\t\tperPage: _args.perPage ?? 100,\n\t\t\thasMore: false\n\t\t};\n\t}\n};\nexport { ConsoleLogger, LogLevel, LoggerTransport, MastraLogger, RegisteredLogger, buildLogRecordData, createCustomTransport, exportTrackedException, isAdaptableLogger, noopLogger };\n\n//# sourceMappingURL=index.js.map","import { ConsoleLogger, RegisteredLogger } from \"../logger/index.js\";\n// src/base/MastraBase.ts\nvar MastraBase = class {\n\tcomponent = RegisteredLogger.LLM;\n\tlogger;\n\tname;\n\t#rawConfig;\n\tconstructor({ component, name, rawConfig }) {\n\t\tthis.component = component || RegisteredLogger.LLM;\n\t\tthis.name = name;\n\t\tthis.#rawConfig = rawConfig;\n\t\tthis.logger = new ConsoleLogger({ name: `${this.component} - ${this.name}` });\n\t}\n\t/**\n\t* Returns the raw storage configuration this primitive was created from,\n\t* or undefined if it was created from code.\n\t*/\n\ttoRawConfig() {\n\t\treturn this.#rawConfig;\n\t}\n\t/**\n\t* Sets the raw storage configuration for this primitive.\n\t* @internal\n\t*/\n\t__setRawConfig(rawConfig) {\n\t\tthis.#rawConfig = rawConfig;\n\t}\n\t/**\n\t* Set the logger for the agent\n\t* @param logger\n\t*/\n\t__setLogger(logger) {\n\t\tthis.logger = \"child\" in logger && typeof logger.child === \"function\" ? logger.child({ component: this.component }) : logger;\n\t}\n};\nexport { MastraBase };\n\n//# sourceMappingURL=index.js.map","import { spawn } from 'node:child_process';\nimport { Writable } from 'node:stream';\nimport type { IMastraLogger } from '@internal/core/logger';\n\nexport const createPinoStream = (logger: IMastraLogger) => {\n return new Writable({\n write(chunk, _encoding, callback) {\n // Convert Buffer/string to string and trim whitespace\n const line = chunk.toString().trim();\n\n if (line) {\n console.info(line);\n // Log each line through Pino\n logger.info(line);\n }\n\n callback();\n },\n });\n};\n\n/**\n * Args are joined into a shell command (`shell: true` is required for package\n * manager shims on Windows), so only allow characters that appear in package\n * specifiers and CLI flags — never shell metacharacters (CodeQL\n * js/shell-command-constructed-from-input).\n */\nconst SAFE_SHELL_ARG = /^[\\w@%+=:,./^~-]*$/;\n\nexport function createChildProcessLogger({ logger, root }: { logger: IMastraLogger; root: string }) {\n const pinoStream = createPinoStream(logger);\n return async ({ cmd, args, env }: { cmd: string; args: string[]; env: Record<string, string> }) => {\n try {\n for (const arg of args) {\n if (!SAFE_SHELL_ARG.test(arg)) {\n throw new Error(`Refusing to pass unsafe argument to shell command: ${JSON.stringify(arg)}`);\n }\n }\n const subprocess = spawn(cmd, args, {\n cwd: root,\n shell: true,\n env,\n // No stdin for the child process — it doesn't need interactive input\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n subprocess.stdout?.on('data', chunk => {\n stdout += chunk.toString();\n });\n subprocess.stderr?.on('data', chunk => {\n stderr += chunk.toString();\n });\n\n // Pipe stdout and stderr through the logging stream.\n // { end: false } prevents the first stream to close from ending pinoStream\n // while the other may still be writing.\n subprocess.stdout?.pipe(pinoStream, { end: false });\n subprocess.stderr?.pipe(pinoStream, { end: false });\n\n // Wait for the process to complete\n return new Promise((resolve, reject) => {\n subprocess.on('close', code => {\n pinoStream.end();\n if (code === 0) {\n resolve({ success: true, stdout, stderr });\n } else {\n reject(Object.assign(new Error(`Process exited with code ${code}`), { stdout, stderr }));\n }\n });\n\n subprocess.on('error', error => {\n pinoStream.end();\n logger.error('Process failed', { error });\n reject(error);\n });\n });\n } catch (error) {\n console.error(error);\n logger.error('Process failed', { error });\n pinoStream.end();\n return { success: false, error };\n }\n };\n}\n","import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { MastraBase } from '@internal/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@internal/core/error';\nimport type { BundlerConfig } from '@internal/deployer';\nimport { readJSON, writeJSON, ensureFile } from 'fs-extra/esm';\nimport type { PackageJson } from 'type-fest';\nimport { parse, parseAllDocuments, stringify } from 'yaml';\n\nimport { createChildProcessLogger } from '../deploy/log.js';\n\ntype PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\n/** Version used to pack private workspace packages whose package.json has no `version`. */\nexport const WORKSPACE_PLACEHOLDER_VERSION = '0.0.0';\n\n// Write via temp file + rename so an interrupted write never leaves a truncated manifest.\nasync function writeManifestAtomically(manifestPath: string, contents: string, inFlight?: Set<string>) {\n const tmpPath = `${manifestPath}.${process.pid}.${Date.now()}.tmp`;\n inFlight?.add(tmpPath);\n try {\n const { mode } = await fsPromises.stat(manifestPath);\n await fsPromises.writeFile(tmpPath, contents, { mode });\n await fsPromises.chmod(tmpPath, mode);\n await fsPromises.rename(tmpPath, manifestPath);\n } catch (error) {\n await fsPromises.rm(tmpPath, { force: true });\n throw error;\n } finally {\n inFlight?.delete(tmpPath);\n }\n}\n\n/**\n * Package managers refuse to pack a manifest without a version, and pnpm/bun also\n * resolve `workspace:` ranges from the dependency's manifest. So every versionless\n * package in `dirs` gets the placeholder version for the whole of `operation`, and\n * the original manifests are restored afterwards — also on SIGINT/SIGTERM.\n */\nexport async function withPlaceholderVersions<T>(dirs: string[], operation: () => Promise<T>): Promise<T> {\n const acquired: string[] = [];\n try {\n for (const dir of new Set(dirs.map(dir => path.resolve(dir)))) {\n const manifestPath = path.join(dir, 'package.json');\n let lease = placeholderLeases.get(manifestPath);\n // A lease whose last owner is restoring it can't be joined; wait and start a fresh one.\n while (lease?.releasing) {\n await lease.releasing.catch(() => {});\n lease = placeholderLeases.get(manifestPath);\n }\n if (lease) {\n lease.refs++;\n } else {\n lease = { refs: 1, injected: false, ready: Promise.resolve() };\n lease.ready = injectPlaceholderVersion(manifestPath, lease);\n placeholderLeases.set(manifestPath, lease);\n installSignalHandlers();\n }\n acquired.push(manifestPath);\n await lease.ready;\n }\n return await operation();\n } finally {\n try {\n for (const manifestPath of acquired) {\n await releasePlaceholderVersion(manifestPath);\n }\n } finally {\n if (placeholderLeases.size === 0) {\n removeSignalHandlers();\n }\n }\n }\n}\n\ninterface PlaceholderLease {\n refs: number;\n original?: string;\n injected: boolean;\n ready: Promise<void>;\n releasing?: Promise<void>;\n}\n\n// Shared across calls so one bundle can't restore a manifest another is still packing.\nconst placeholderLeases = new Map<string, PlaceholderLease>();\nconst inFlightTmpPaths = new Set<string>();\n\nasync function injectPlaceholderVersion(manifestPath: string, lease: PlaceholderLease) {\n const original = await fsPromises.readFile(manifestPath, 'utf-8').catch(() => undefined);\n if (original === undefined) return;\n let manifest: PackageJson;\n try {\n manifest = JSON.parse(original) as PackageJson;\n } catch (error) {\n throw new Error(`Failed to parse ${manifestPath}: ${(error as Error).message}`, { cause: error });\n }\n if (manifest.version) return;\n lease.original = original;\n // Mark before writing so a signal mid-write still restores this manifest.\n lease.injected = true;\n await writeManifestAtomically(\n manifestPath,\n JSON.stringify({ ...manifest, version: WORKSPACE_PLACEHOLDER_VERSION }, null, 2) + '\\n',\n inFlightTmpPaths,\n );\n}\n\nasync function releasePlaceholderVersion(manifestPath: string) {\n const lease = placeholderLeases.get(manifestPath)!;\n if (--lease.refs > 0) return;\n lease.releasing = (async () => {\n await lease.ready.catch(() => {});\n try {\n if (lease.injected) {\n await writeManifestAtomically(manifestPath, lease.original!, inFlightTmpPaths);\n lease.injected = false;\n }\n } finally {\n placeholderLeases.delete(manifestPath);\n }\n })();\n await lease.releasing;\n}\n\nfunction restorePlaceholderVersionsSync() {\n // Removing in-flight temp files keeps them out of later tarballs and makes any\n // pending rename fail instead of overwriting the restored manifest.\n for (const tmpPath of inFlightTmpPaths) {\n fs.rmSync(tmpPath, { force: true });\n }\n inFlightTmpPaths.clear();\n for (const [manifestPath, lease] of placeholderLeases) {\n if (lease.injected) {\n fs.writeFileSync(manifestPath, lease.original!);\n lease.injected = false;\n }\n }\n}\n\nfunction onPlaceholderSignal(signal: NodeJS.Signals) {\n restorePlaceholderVersionsSync();\n removeSignalHandlers();\n process.kill(process.pid, signal);\n}\n\nfunction installSignalHandlers() {\n if (process.listeners('SIGINT').includes(onPlaceholderSignal)) return;\n process.once('SIGINT', onPlaceholderSignal);\n process.once('SIGTERM', onPlaceholderSignal);\n}\n\nfunction removeSignalHandlers() {\n process.off('SIGINT', onPlaceholderSignal);\n process.off('SIGTERM', onPlaceholderSignal);\n}\n\ninterface LockFileInfo {\n path: string;\n filename: string;\n packageManager: PackageManager;\n}\n\ninterface ArchitectureOptions {\n os?: string[];\n cpu?: string[];\n libc?: string[];\n}\n\ninterface InstallOptions extends ArchitectureOptions {\n pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n /** Patch key -> path relative to the output directory. */\n patchedDependencies?: Record<string, string>;\n /** Source settings that change which packages get installed, already checked to work outside the source workspace. */\n pnpmResolutionSettings?: Record<string, unknown>;\n /** The `pnpm` field of the source root package.json, set only when the project runs pnpm 10 or older. */\n pnpmManifestSettings?: Record<string, unknown>;\n}\n\nconst PNPM_PATCHES_DIR = 'pnpm-patches';\nconst BUN_PATCHES_DIR = 'bun-patches';\n\nconst PNPM_CONFIG_KEYS_TO_COPY = new Set([\n 'allowBuilds',\n 'onlyBuiltDependencies',\n 'ignoredBuiltDependencies',\n 'neverBuiltDependencies',\n 'minimumReleaseAge',\n 'minimumReleaseAgeExclude',\n 'trustPolicy',\n 'trustPolicyExclude',\n 'trustPolicyIgnoreAfter',\n 'supportedArchitectures',\n]);\n\n// Specs resolved against the source workspace, which the output directory can't install.\nconst SOURCE_WORKSPACE_SPEC = /^(?:file:|link:|portal:|workspace:|catalog:|\\.{1,2}(?:[/\\\\]|$)|[/\\\\]|~[/\\\\])/;\n\n// supportedArchitectures is generated from deployer architecture targets, so it can't be set explicitly.\n// neverBuiltDependencies switches pnpm 10 into deny-list mode, which runs every build script it doesn't name.\nconst PNPM_EXPLICIT_SETTING_KEYS = new Set(\n [...PNPM_CONFIG_KEYS_TO_COPY, 'blockExoticSubdeps'].filter(\n key => key !== 'supportedArchitectures' && key !== 'neverBuiltDependencies',\n ),\n);\n\nfunction serializePnpmWorkspaceSettings(settings: BundlerConfig['pnpmWorkspaceSettings']) {\n // Untyped JS configs can pass undefined; treat it as omitted so the copied source setting survives.\n const definedSettings = Object.entries(settings ?? {}).filter(([, value]) => value !== undefined);\n return definedSettings.map(([key, value]) => {\n if (!PNPM_EXPLICIT_SETTING_KEYS.has(key)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_WORKSPACE_SETTING',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n text: `pnpm workspace setting ${JSON.stringify(key)} isn't supported in bundler.pnpmWorkspaceSettings. Supported settings: ${[...PNPM_EXPLICIT_SETTING_KEYS].join(', ')}.`,\n });\n }\n const block = stringify({ [key]: value }).trimEnd();\n validatePnpmBuildApprovals(key, block);\n return block;\n });\n}\n\n// Every unindented line starts a new top-level entry, except comments and sequence items, which YAML allows at\n// column 0 under the key above them. Treating any other line as a continuation would copy it with the previous\n// block, such as an auth token after a copied key.\nfunction isTopLevelEntry(line: string) {\n return /^[^\\s#-]/.test(line);\n}\n\nfunction getTopLevelYamlKey(line: string) {\n const match = /^(?:\"([\\w-]+)\"|'([\\w-]+)'|([\\w-]+))\\s*:/.exec(line);\n return match?.[1] ?? match?.[2] ?? match?.[3];\n}\n\nconst PNPM_IGNORED_BUILDS_ERROR = 'ERR_PNPM_IGNORED_BUILDS';\n\nexport function getPnpmIgnoredBuildPackages(output: string): string[] {\n const match = new RegExp(`\\\\[?${PNPM_IGNORED_BUILDS_ERROR}\\\\]?[^\\\\n]*Ignored build scripts:\\\\s*([^\\\\n]+)`).exec(\n output,\n );\n if (!match?.[1]) return [];\n\n return match[1]\n .split(',')\n .map(specifier => specifier.trim())\n .filter(Boolean)\n .map(specifier => {\n if (specifier.startsWith('@')) {\n const versionSeparator = specifier.indexOf('@', 1);\n return versionSeparator === -1 ? specifier : specifier.slice(0, versionSeparator);\n }\n return specifier.split('@', 1)[0]!;\n });\n}\n\nfunction validatePnpmBuildApprovals(key: string, block: string): void {\n if (key !== 'allowBuilds' && key !== 'onlyBuiltDependencies') return;\n\n let value: unknown;\n try {\n value = (parse(block) as Record<string, unknown>)[key];\n } catch (error) {\n throw new MastraError(\n {\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key },\n text: `Invalid pnpm ${key} configuration`,\n },\n error,\n );\n }\n\n const invalidEntries =\n key === 'allowBuilds'\n ? value && typeof value === 'object' && !Array.isArray(value)\n ? Object.entries(value).filter(\n ([dependency, approval]) => dependency.trim().length === 0 || typeof approval !== 'boolean',\n )\n : [[key, value]]\n : Array.isArray(value) &&\n value.every(dependency => typeof dependency === 'string' && dependency.trim().length > 0)\n ? []\n : [[key, value]];\n\n if (invalidEntries.length === 0) return;\n const invalidEntryNames = invalidEntries.map(([entry]) => entry).join(', ');\n\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key, invalidEntries: invalidEntryNames },\n text: `Invalid pnpm ${key} entries: ${invalidEntryNames}`,\n });\n}\n\n/**\n * Reads the `patchedDependencies` map from a pnpm workspace file. Paths are returned as declared,\n * i.e. relative to the workspace root. Returns an empty map for absent or unusable declarations.\n */\nexport function parsePnpmPatchedDependencies(source: string): Record<string, string> {\n let parsed: unknown;\n try {\n parsed = parse(source);\n } catch {\n return {};\n }\n\n const patched = (parsed as { patchedDependencies?: unknown } | null)?.patchedDependencies;\n if (!patched || typeof patched !== 'object' || Array.isArray(patched)) {\n return {};\n }\n\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(patched as Record<string, unknown>)) {\n if (typeof value === 'string' && value.trim() && key.trim()) {\n result[key] = value.trim();\n }\n }\n\n return result;\n}\n\nexport function copyPnpmWorkspaceSettings(source: string, options: InstallOptions = {}) {\n const hasArchitecture = Boolean(options.os?.length || options.cpu?.length || options.libc?.length);\n const lines = source.split(/\\r?\\n/);\n const customBlocks = serializePnpmWorkspaceSettings(options.pnpmWorkspaceSettings);\n const blocks: string[] = [];\n const copiedKeys = new Set<string>();\n const shouldCopy = (key: string) =>\n PNPM_CONFIG_KEYS_TO_COPY.has(key) &&\n options.pnpmWorkspaceSettings?.[key] === undefined &&\n !(key === 'supportedArchitectures' && hasArchitecture);\n\n for (let index = 0; index < lines.length;) {\n if (!isTopLevelEntry(lines[index] ?? '')) {\n index += 1;\n continue;\n }\n\n const key = getTopLevelYamlKey(lines[index] ?? '');\n const start = index;\n index += 1;\n while (index < lines.length && !isTopLevelEntry(lines[index] ?? '')) {\n index += 1;\n }\n\n if (!key || !shouldCopy(key)) {\n continue;\n }\n\n const block = lines.slice(start, index).join('\\n').trimEnd();\n if (block) {\n validatePnpmBuildApprovals(key, block);\n blocks.push(block);\n copiedKeys.add(key);\n }\n }\n\n // The scanner keeps the source formatting but can't name every key, such as YAML explicit `? key` entries.\n // Those settings are copied from the parsed file instead.\n let parsedSource: Record<string, unknown> = {};\n try {\n const parsed = parse(source);\n parsedSource = isRecord(parsed) ? parsed : {};\n } catch {\n // An unparsable workspace file falls back to the keys the scanner copied.\n }\n\n // pnpm 10 also reads these keys from the `pnpm` field of package.json. The workspace file wins when both set one.\n const sourceSettings = [\n ...Object.entries(parsedSource),\n ...Object.entries(options.pnpmManifestSettings ?? {}).filter(([key]) => !Object.hasOwn(parsedSource, key)),\n ];\n for (const [key, value] of sourceSettings) {\n if (copiedKeys.has(key) || !shouldCopy(key) || value === undefined) continue;\n const block = stringify({ [key]: value }).trimEnd();\n validatePnpmBuildApprovals(key, block);\n blocks.push(block);\n copiedKeys.add(key);\n }\n\n if (hasArchitecture) {\n const architectureBlock = ['supportedArchitectures:'];\n if (options.os?.length) {\n architectureBlock.push(` os: ${JSON.stringify(options.os)}`);\n }\n if (options.cpu?.length) {\n architectureBlock.push(` cpu: ${JSON.stringify(options.cpu)}`);\n }\n if (options.libc?.length) {\n architectureBlock.push(` libc: ${JSON.stringify(options.libc)}`);\n }\n blocks.push(architectureBlock.join('\\n'));\n }\n\n for (const [key, value] of Object.entries(options.pnpmResolutionSettings ?? {})) {\n blocks.push(stringify({ [key]: value }).trimEnd());\n }\n\n if (options.pnpmOverrides && Object.keys(options.pnpmOverrides).length > 0) {\n blocks.push(\n [\n 'overrides:',\n ...Object.entries(options.pnpmOverrides).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n }\n\n if (options.patchedDependencies && Object.keys(options.patchedDependencies).length > 0) {\n blocks.push(\n [\n 'patchedDependencies:',\n ...Object.entries(options.patchedDependencies).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n // The bundled output only installs runtime dependencies, so patches declared for\n // dev-only or bundled-away packages are legitimately unused here.\n blocks.push('allowUnusedPatches: true');\n }\n\n if (options.pnpmNodeLinker) {\n blocks.push(`nodeLinker: ${options.pnpmNodeLinker}`);\n }\n\n return [\"packages:\\n - '.'\", ...blocks, ...customBlocks].join('\\n\\n') + '\\n';\n}\n\n// Semver characters only; versions are interpolated into a shell command.\nconst SAFE_PACKAGE_VERSION = /^[0-9A-Za-z.+-]+$/;\n\n/**\n * Yarn classic writes `# yarn lockfile v1` within the first two lines; Berry lockfiles never contain it.\n * Only the head of the file is read so large monorepo lockfiles are never loaded into memory.\n */\nasync function isYarnClassicLockfile(lockfilePath: string): Promise<boolean> {\n const handle = await fsPromises.open(lockfilePath, 'r');\n try {\n const buffer = Buffer.alloc(512);\n const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);\n return /^# yarn lockfile v1\\r?$/m.test(buffer.toString('utf-8', 0, bytesRead));\n } finally {\n await handle.close();\n }\n}\n\n/**\n * Removes overridden packages from every importer of a copied pnpm lockfile. When the Mastra app is the\n * workspace root, the root importer still resolves its workspace dependencies to `link:` versions. pnpm\n * keeps those versions although the output overrides them with packed tarballs, so the tarball is never\n * installed and the dependency symlink dangles. Without the entries, pnpm resolves them from the overrides.\n */\nasync function dropPnpmImporterDependencies(lockfilePath: string, packageNames: string[]): Promise<void> {\n const { leadingDocuments, project } = parsePnpmLockfile(await fsPromises.readFile(lockfilePath, 'utf-8'));\n const lockfile = project as {\n importers?: Record<string, Record<string, Record<string, unknown> | undefined> | undefined>;\n } | null;\n let changed = false;\n for (const importer of Object.values(lockfile?.importers ?? {})) {\n for (const field of ['dependencies', 'devDependencies', 'optionalDependencies']) {\n const dependencies = importer?.[field];\n for (const name of packageNames) {\n if (dependencies && name in dependencies) {\n delete dependencies[name];\n changed = true;\n }\n }\n }\n }\n if (changed) {\n const projectDocument = stringify(lockfile, { lineWidth: 0 });\n await fsPromises.writeFile(\n lockfilePath,\n leadingDocuments ? `${leadingDocuments}---\\n${projectDocument}` : projectDocument,\n );\n }\n}\n\n/**\n * Splits a pnpm lockfile into its project document and the documents before it. pnpm 11+ writes an\n * environment document first when `packageManager` or `configDependencies` is set.\n */\nfunction parsePnpmLockfile(source: string): { leadingDocuments: string; project: unknown } {\n const documents = parseAllDocuments(source);\n const project = documents.at(-1);\n if (project?.errors.length) {\n throw project.errors[0];\n }\n return {\n leadingDocuments: documents\n .slice(0, -1)\n .map(document => document.toString({ lineWidth: 0 }))\n .join(''),\n project: project ? project.toJS() : null,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Reads the overrides the source install applied. The lockfile records them with `catalog:` and `$name`\n * references resolved, wherever they were declared (`pnpm-workspace.yaml`, or the `pnpm` field of\n * `package.json` on pnpm 10).\n */\nasync function readPnpmLockfileOverrides(\n lockfilePath: string,\n warn: (message: string) => void,\n): Promise<Record<string, string>> {\n let lockfile: unknown;\n try {\n lockfile = parsePnpmLockfile(await fsPromises.readFile(lockfilePath, 'utf-8')).project;\n } catch {\n return {};\n }\n\n const overrides = isRecord(lockfile) ? lockfile.overrides : undefined;\n if (!isRecord(overrides)) return {};\n\n const portable: Record<string, string> = {};\n for (const [selector, spec] of Object.entries(overrides)) {\n if (typeof spec !== 'string') continue;\n if (SOURCE_WORKSPACE_SPEC.test(spec)) {\n warn(`Skipping pnpm override \"${selector}\": \"${spec}\" can only be resolved from the source workspace.`);\n continue;\n }\n portable[selector] = spec;\n }\n return portable;\n}\n\n// `catalog:` reads the top-level `catalog`, or `catalogs.default` when that is where it is declared.\nfunction resolveCatalogSpec(workspace: Record<string, unknown>, name: string, spec: string): unknown {\n const catalogName = spec.slice('catalog:'.length) || 'default';\n const catalogs = isRecord(workspace.catalogs) ? workspace.catalogs : {};\n const catalog = catalogName === 'default' && isRecord(workspace.catalog) ? workspace.catalog : catalogs[catalogName];\n return isRecord(catalog) ? catalog[name] : undefined;\n}\n\n/** Returns the extension with catalog specs resolved, or the first spec the output directory can't install. */\nfunction resolvePackageExtension(\n workspace: Record<string, unknown>,\n extension: Record<string, unknown>,\n): { extension: Record<string, unknown> } | { name: string; spec: unknown } {\n const resolvedExtension: Record<string, unknown> = { ...extension };\n for (const field of ['dependencies', 'optionalDependencies', 'peerDependencies']) {\n const deps = extension[field];\n if (!isRecord(deps)) continue;\n const resolvedDeps: Record<string, string> = {};\n for (const [name, spec] of Object.entries(deps)) {\n const resolved =\n typeof spec === 'string' && spec.startsWith('catalog:') ? resolveCatalogSpec(workspace, name, spec) : spec;\n if (typeof resolved !== 'string' || SOURCE_WORKSPACE_SPEC.test(resolved)) {\n return { name, spec };\n }\n resolvedDeps[name] = resolved;\n }\n resolvedExtension[field] = resolvedDeps;\n }\n return { extension: resolvedExtension };\n}\n\n/**\n * Reads the source settings that change which packages get installed. They are copied from the source\n * workspace only and stay out of `bundler.pnpmWorkspaceSettings`, which accepts install-policy keys only.\n */\nfunction getPnpmResolutionSettings(\n sourceWorkspaceYaml: string,\n manifestSettings: Record<string, unknown>,\n warn: (message: string) => void,\n) {\n let parsed: unknown;\n try {\n parsed = parse(sourceWorkspaceYaml);\n } catch {\n parsed = {};\n }\n const workspace = { ...manifestSettings, ...(isRecord(parsed) ? parsed : {}) };\n\n const settings: Record<string, unknown> = {};\n\n const ignoredOptional = workspace.ignoredOptionalDependencies;\n if (Array.isArray(ignoredOptional) && ignoredOptional.every(name => typeof name === 'string')) {\n settings.ignoredOptionalDependencies = ignoredOptional;\n }\n\n if (isRecord(workspace.packageExtensions)) {\n const extensions: Record<string, unknown> = {};\n for (const [selector, extension] of Object.entries(workspace.packageExtensions)) {\n if (!isRecord(extension)) continue;\n const result = resolvePackageExtension(workspace, extension);\n if ('extension' in result) {\n extensions[selector] = result.extension;\n } else {\n warn(\n `Skipping pnpm packageExtensions \"${selector}\": ${JSON.stringify(result.spec)} for \"${result.name}\" can only be resolved from the source workspace.`,\n );\n }\n }\n if (Object.keys(extensions).length > 0) {\n settings.packageExtensions = extensions;\n }\n }\n\n return settings;\n}\n\nexport class Deps extends MastraBase {\n private packageManager: PackageManager;\n private rootDir: string;\n private lockFile: LockFileInfo | null;\n\n constructor(rootDir = process.cwd()) {\n super({ component: 'DEPLOYER', name: 'DEPS' });\n\n this.rootDir = rootDir;\n this.lockFile = this.findLockFile(rootDir);\n this.packageManager = this.lockFile?.packageManager ?? 'npm';\n }\n\n private findLockFile(dir: string): LockFileInfo | null {\n const lockFiles: Array<{ filename: string; packageManager: PackageManager }> = [\n { filename: 'pnpm-lock.yaml', packageManager: 'pnpm' },\n { filename: 'package-lock.json', packageManager: 'npm' },\n { filename: 'yarn.lock', packageManager: 'yarn' },\n { filename: 'bun.lock', packageManager: 'bun' },\n ];\n for (const lockFile of lockFiles) {\n const lockFilePath = path.join(dir, lockFile.filename);\n if (fs.existsSync(lockFilePath)) {\n return { ...lockFile, path: lockFilePath };\n }\n }\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findLockFile(parentDir);\n }\n return null;\n }\n\n public getWorkspaceDependencyPath({ pkgName, version }: { pkgName: string; version: string }) {\n return `file:./workspace-module/${pkgName}-${version}.tgz`;\n }\n\n public async pack({\n dir,\n destination,\n sanitizedName,\n version,\n }: {\n dir: string;\n destination: string;\n sanitizedName: string;\n version: string;\n }) {\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n let packCmd = 'pack';\n let destinationFlag = `--pack-destination ${destination}`;\n if (this.packageManager === 'yarn') {\n if (this.lockFile && (await isYarnClassicLockfile(this.lockFile.path))) {\n if (!SAFE_PACKAGE_VERSION.test(version)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_WORKSPACE_PACKAGE_VERSION',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { dir, version: String(version) },\n text: `Invalid version ${JSON.stringify(version)} in workspace package at ${dir}`,\n });\n }\n // Yarn classic has no --out/%v; --filename takes the full output path.\n destinationFlag = `--filename ${destination}/${sanitizedName}-${version}.tgz`;\n } else {\n // %s includes an '@' at the start of packages names with an '@'\n // so we need to use our sanitizedName instead.\n destinationFlag = `--out ${destination}/${sanitizedName}-%v.tgz`;\n }\n }\n if (this.packageManager === 'bun') {\n // bun uses `pm pack` instead of `pack`\n packCmd = 'pm pack';\n // bun uses --destination instead of --pack-destination\n destinationFlag = `--destination ${destination}`;\n }\n\n return cpLogger({\n cmd: `${this.packageManager} ${packCmd} ${destinationFlag}`,\n args: [],\n env: {\n PATH: process.env.PATH!,\n },\n });\n }\n\n private findPnpmWorkspaceFile(dir: string): string | null {\n const workspaceYamlPath = path.join(dir, 'pnpm-workspace.yaml');\n if (fs.existsSync(workspaceYamlPath)) {\n return workspaceYamlPath;\n }\n\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findPnpmWorkspaceFile(parentDir);\n }\n\n return null;\n }\n\n private async writePnpmConfig(dir: string, options: InstallOptions = {}) {\n const sourceWorkspaceYamlPath = this.findPnpmWorkspaceFile(this.rootDir);\n const sourceWorkspaceYaml = sourceWorkspaceYamlPath\n ? await fsPromises.readFile(sourceWorkspaceYamlPath, 'utf-8')\n : '';\n\n const patchedDependencies = sourceWorkspaceYamlPath\n ? await this.copyPnpmPatches(sourceWorkspaceYaml, path.dirname(sourceWorkspaceYamlPath), dir)\n : undefined;\n\n const warn = (message: string) => this.logger.warn(message);\n const sourceOverrides =\n this.lockFile?.packageManager === 'pnpm' ? await readPnpmLockfileOverrides(this.lockFile.path, warn) : {};\n const pnpmManifestSettings = await this.readPnpm10ManifestSettings(\n this.lockFile\n ? path.dirname(this.lockFile.path)\n : sourceWorkspaceYamlPath && path.dirname(sourceWorkspaceYamlPath),\n );\n\n await fsPromises.writeFile(\n path.join(dir, 'pnpm-workspace.yaml'),\n copyPnpmWorkspaceSettings(sourceWorkspaceYaml, {\n ...options,\n patchedDependencies,\n pnpmManifestSettings,\n pnpmResolutionSettings: getPnpmResolutionSettings(sourceWorkspaceYaml, pnpmManifestSettings, warn),\n // Packed workspace tarballs must win over any source override for the same package.\n pnpmOverrides: { ...sourceOverrides, ...options.pnpmOverrides },\n }),\n 'utf-8',\n );\n }\n\n /**\n * Returns the `pnpm` field of the workspace root package.json when the project declares pnpm 10 or older.\n * pnpm 11 stopped reading that field, so copying it for a newer or unknown pnpm could approve build scripts\n * the project's own install never ran.\n */\n private async readPnpm10ManifestSettings(rootDir: string | null | undefined): Promise<Record<string, unknown>> {\n if (!rootDir) return {};\n\n let manifest: unknown;\n try {\n manifest = await readJSON(path.join(rootDir, 'package.json'));\n } catch {\n return {};\n }\n if (!isRecord(manifest) || !isRecord(manifest.pnpm) || Object.keys(manifest.pnpm).length === 0) return {};\n\n const pnpmMajor = /^pnpm@(\\d+)\\./.exec(String(manifest.packageManager ?? ''))?.[1];\n if (pnpmMajor && Number(pnpmMajor) <= 10) {\n return manifest.pnpm;\n }\n const skippedKeys = Object.keys(manifest.pnpm).filter(\n key => PNPM_CONFIG_KEYS_TO_COPY.has(key) || key === 'packageExtensions' || key === 'ignoredOptionalDependencies',\n );\n if (!pnpmMajor && skippedKeys.length > 0) {\n this.logger.warn(\n `Not copying ${skippedKeys.join(', ')} from the \"pnpm\" field of package.json into the build output because the pnpm version is unknown. Set \"packageManager\" to the pnpm version you use, or move these settings to pnpm-workspace.yaml.`,\n );\n }\n return {};\n }\n\n /**\n * Resolves a declared patch path against the source workspace and verifies that, once symlinks\n * are followed, it still resolves inside the workspace. Returns the real path to copy from, or\n * `undefined` when the patch escapes the workspace or its file cannot be resolved.\n */\n private async resolvePatchSource(\n resolvedWorkspaceRoot: string,\n declaredPath: string,\n { key, label }: { key: string; label: string },\n ): Promise<string | undefined> {\n const sourcePath = path.resolve(resolvedWorkspaceRoot, declaredPath);\n if (!sourcePath.startsWith(`${resolvedWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${sourcePath}`);\n return undefined;\n }\n\n // A patch path can stay lexically under the workspace while traversing a symlink whose target\n // lives outside it. copyFile follows symlinks, so compare the resolved real paths before copying.\n let realWorkspaceRoot: string;\n let realSourcePath: string;\n try {\n [realWorkspaceRoot, realSourcePath] = await Promise.all([\n fsPromises.realpath(resolvedWorkspaceRoot),\n fsPromises.realpath(sourcePath),\n ]);\n } catch {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file not found at ${sourcePath}`);\n return undefined;\n }\n\n if (!realSourcePath.startsWith(`${realWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(\n `Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${realSourcePath}`,\n );\n return undefined;\n }\n\n return realSourcePath;\n }\n\n /**\n * Copies the patch files declared by the source workspace into the output directory and returns\n * the patch map rewritten to output-relative paths, so the patches survive the output install.\n */\n private async copyPnpmPatches(\n sourceWorkspaceYaml: string,\n sourceWorkspaceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const declared = parsePnpmPatchedDependencies(sourceWorkspaceYaml);\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedWorkspaceRoot = path.resolve(sourceWorkspaceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedWorkspaceRoot, declaredPath, {\n key,\n label: 'pnpm',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, PNPM_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, PNPM_PATCHES_DIR, fileName));\n rewritten[key] = `${PNPM_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Writes the `.yarnrc.yml` for the bundled output, recording the supported architectures so the\n * output install only resolves optional native binaries that match the deployment target.\n */\n private async writeYarnConfig(dir: string, options: ArchitectureOptions) {\n const yarnrcPath = path.join(dir, '.yarnrc.yml');\n const config = {\n supportedArchitectures: {\n cpu: options.cpu || [],\n os: options.os || [],\n libc: options.libc || [],\n },\n };\n\n await fsPromises.writeFile(\n yarnrcPath,\n `supportedArchitectures:\\n${Object.entries(config.supportedArchitectures)\n .map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`)\n .join('\\n')}`,\n );\n }\n\n /**\n * Copies the source workspace's `.yarn/patches/` directory (Yarn Berry) into the output\n * directory so patches survive the output install. Yarn auto-discovers patches from this\n * directory and applies them per the lockfile references.\n */\n private async copyYarnPatches(dir: string): Promise<void> {\n const sourcePatchesDir = path.join(this.rootDir, '.yarn', 'patches');\n if (!fs.existsSync(sourcePatchesDir)) return;\n\n const outputPatchesDir = path.join(dir, '.yarn', 'patches');\n await fsPromises.cp(sourcePatchesDir, outputPatchesDir, { recursive: true, errorOnExist: false });\n }\n\n /**\n * Copies the patch files referenced by the source workspace's `patchedDependencies` in\n * package.json into the output directory and returns the map rewritten to output-relative\n * paths, so bun patches survive the output install.\n */\n private async copyBunPatches(\n declared: Record<string, string>,\n sourceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedRoot = path.resolve(sourceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedRoot, declaredPath, {\n key,\n label: 'bun',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, BUN_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, BUN_PATCHES_DIR, fileName));\n rewritten[key] = `${BUN_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Reads `patchedDependencies` from the source package.json, copies the referenced patch\n * files into the output directory, and writes the output-relative patch map into the\n * output's package.json so `bun install` preserves patches in the bundled output.\n */\n private async copyBunPatchesToOutput(dir: string): Promise<void> {\n const sourcePackageJsonPath = path.join(this.rootDir, 'package.json');\n if (!fs.existsSync(sourcePackageJsonPath)) return;\n\n const sourcePkg = await readJSON(sourcePackageJsonPath);\n const patchedDeps = sourcePkg.patchedDependencies as Record<string, string> | undefined;\n if (!patchedDeps || Object.keys(patchedDeps).length === 0) return;\n\n const rewritten = await this.copyBunPatches(patchedDeps, this.rootDir, dir);\n if (Object.keys(rewritten).length === 0) return;\n\n const outputPackageJsonPath = path.join(dir, 'package.json');\n let outputPkg: Record<string, unknown>;\n try {\n outputPkg = (await readJSON(outputPackageJsonPath)) as Record<string, unknown>;\n } catch {\n outputPkg = {};\n }\n outputPkg.patchedDependencies = rewritten;\n await writeJSON(outputPackageJsonPath, outputPkg, { spaces: 2 });\n }\n\n private getNpmArgs(options: ArchitectureOptions): string[] {\n const args: string[] = [];\n if (options.cpu) args.push(`--cpu=${options.cpu.join(',')}`);\n if (options.os) args.push(`--os=${options.os.join(',')}`);\n if (options.libc) args.push(`--libc=${options.libc.join(',')}`);\n return args;\n }\n\n /**\n * Depending on whether we want to install or add a package, this function returns the appropriate commands.\n * All package managers support both commands (e.g. npm install has an alias on \"add\")\n */\n private getPackageManagerCommand(\n pm: PackageManager,\n type: 'install' | 'add',\n { yarnClassic = false }: { yarnClassic?: boolean } = {},\n ): string {\n const cmd = type === 'install' ? 'install' : 'add';\n\n switch (pm) {\n case 'npm':\n return `${cmd} --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false`;\n case 'yarn':\n return type === 'install' && !yarnClassic ? `${cmd} --no-immutable` : cmd;\n case 'pnpm':\n return type === 'install' ? `${cmd} --no-frozen-lockfile --loglevel=error` : `${cmd} --loglevel=error`;\n default:\n return cmd;\n }\n }\n\n public async install({\n dir = this.rootDir,\n architecture,\n pnpmOverrides,\n pnpmNodeLinker,\n pnpmWorkspaceSettings,\n }: {\n dir?: string;\n architecture?: ArchitectureOptions;\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\n } = {}) {\n const pm = this.packageManager;\n let yarnClassic = false;\n if (this.lockFile) {\n const destination = path.join(dir, this.lockFile.filename);\n if (path.resolve(this.lockFile.path) !== path.resolve(destination)) {\n const packedBunWorkspaces =\n pm === 'bun' &&\n fs.existsSync(path.join(dir, 'package.json')) &&\n Object.values(\n ((await readJSON(path.join(dir, 'package.json'))) as { resolutions?: Record<string, string> })\n .resolutions ?? {},\n ).some(spec => spec.startsWith('file:./workspace-module/'));\n\n if (packedBunWorkspaces) {\n // Bun cannot reuse the source workspace lockfile with packed tarballs; removing its workspace entries\n // makes Bun ignore it and regenerate the lockfile anyway. Start with a clean lockfile instead.\n await fsPromises.rm(destination, { force: true });\n } else {\n await fsPromises.copyFile(this.lockFile.path, destination);\n if (pm === 'pnpm' && pnpmOverrides && Object.keys(pnpmOverrides).length > 0) {\n await dropPnpmImporterDependencies(destination, Object.keys(pnpmOverrides));\n }\n }\n }\n\n if (pm === 'yarn') {\n yarnClassic = await isYarnClassicLockfile(destination);\n }\n }\n\n const installCommand = this.getPackageManagerCommand(pm, 'install', { yarnClassic });\n let args: string[] = [];\n\n switch (pm) {\n case 'pnpm':\n await this.writePnpmConfig(dir, { ...architecture, pnpmOverrides, pnpmNodeLinker, pnpmWorkspaceSettings });\n break;\n case 'yarn':\n // similar to --ignore-workspace but for yarn\n await ensureFile(path.join(dir, 'yarn.lock'));\n if (architecture) {\n await this.writeYarnConfig(dir, architecture);\n }\n await this.copyYarnPatches(dir);\n break;\n case 'bun':\n await this.copyBunPatchesToOutput(dir);\n break;\n case 'npm':\n if (architecture) {\n args = this.getNpmArgs(architecture);\n }\n break;\n default:\n // Do nothing\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n try {\n return await cpLogger({\n cmd: `${pm} ${installCommand}`,\n args,\n env: process.env as Record<string, string>,\n });\n } catch (error) {\n if (pm !== 'pnpm') throw error;\n\n const processOutput =\n error && typeof error === 'object'\n ? `${'stdout' in error ? String(error.stdout) : ''}\\n${'stderr' in error ? String(error.stderr) : ''}`\n : '';\n const ignoredPackages = getPnpmIgnoredBuildPackages(processOutput);\n if (ignoredPackages.length === 0) throw error;\n\n throw new MastraError(\n {\n id: 'DEPLOYER_PNPM_IGNORED_BUILDS',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { packageNames: ignoredPackages.join(', ') },\n text: `pnpm blocked build scripts for: ${ignoredPackages.join(', ')}. Add these packages to allowBuilds in pnpm-workspace.yaml and retry the build.`,\n },\n error,\n );\n }\n }\n\n public async installPackages(packages: string[]) {\n const pm = this.packageManager;\n const installCommand = this.getPackageManagerCommand(pm, 'add');\n\n const env: Record<string, string> = {\n PATH: process.env.PATH!,\n };\n\n if (process.env.npm_config_registry) {\n env.npm_config_registry = process.env.npm_config_registry;\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: '',\n });\n\n return cpLogger({\n cmd: `${pm} ${installCommand}`,\n args: packages,\n env,\n });\n }\n\n public async checkDependencies(dependencies: string[]): Promise<string> {\n try {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n\n try {\n await fsPromises.access(packageJsonPath);\n } catch {\n return 'No package.json file found in the current directory';\n }\n\n const packageJson = await readJSON(packageJsonPath);\n for (const dependency of dependencies) {\n if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {\n return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;\n }\n }\n\n return 'ok';\n } catch (err) {\n console.error(err);\n return 'Could not check dependencies';\n }\n }\n\n public async getProjectName() {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n const pkg = await readJSON(packageJsonPath);\n return pkg.name;\n }\n\n public async getPackageVersion() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const pkgJsonPath = path.join(__dirname, '..', '..', 'package.json');\n\n const content = (await readJSON(pkgJsonPath)) as PackageJson;\n return content.version;\n }\n\n public async addScriptsToPackageJson(scripts: Record<string, string>) {\n const packageJson = await readJSON('package.json');\n packageJson.scripts = {\n ...packageJson.scripts,\n ...scripts,\n };\n await writeJSON('package.json', packageJson, { spaces: 2 });\n }\n}\n\nexport class DepsService extends Deps {}\n","import * as fs from 'node:fs';\n\nexport abstract class EnvService {\n abstract getEnvValue(key: string): Promise<string | null>;\n abstract setEnvValue(key: string, value: string): Promise<void>;\n}\n\nexport class FileEnvService extends EnvService {\n private filePath: string;\n\n constructor(filePath: string) {\n super();\n this.filePath = filePath;\n }\n\n private readFile(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(filePath, 'utf8', (err: NodeJS.ErrnoException | null, data: string) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n private writeFile({ filePath, data }: { filePath: string; data: string }): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.writeFile(filePath, data, 'utf8', (err: NodeJS.ErrnoException | null) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n private async updateEnvData({\n key,\n value,\n filePath = this.filePath,\n data,\n }: {\n key: string;\n value: string;\n filePath?: string;\n data: string;\n }): Promise<string> {\n const regex = new RegExp(`^${key}=.*$`, 'm');\n if (data.match(regex)) {\n // Use a replacement function so `$` sequences in the value (e.g. `$&`,\n // `$$`) are written literally instead of being interpreted as\n // String.prototype.replace special patterns.\n data = data.replace(regex, () => `${key}=${value}`);\n } else {\n data += `\\n${key}=${value}`;\n }\n await this.writeFile({ filePath, data });\n console.info(`${key} set to ${value} in ENV file.`);\n return data;\n }\n\n async getEnvValue(key: string): Promise<string | null> {\n try {\n const data = await this.readFile(this.filePath);\n const regex = new RegExp(`^${key}=(.*)$`, 'm');\n const match = data.match(regex);\n return match?.[1] || null;\n } catch (err) {\n console.error(`Error reading ENV value: ${err}`);\n return null;\n }\n }\n\n async setEnvValue(key: string, value: string): Promise<void> {\n try {\n const data = await this.readFile(this.filePath);\n await this.updateEnvData({ key, value, data });\n } catch (err) {\n console.error(`Error writing ENV value: ${err}`);\n }\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport fsExtra from 'fs-extra/esm';\n\nimport { FileEnvService } from './env.js';\n\nexport class FileService {\n /**\n *\n * @param inputFile the file in the starter files directory to copy\n * @param outputFilePath the destination path\n * @param replaceIfExists flag to replace if it exists\n * @returns\n */\n public async copyStarterFile(inputFile: string, outputFilePath: string, replaceIfExists?: boolean) {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const filePath = path.resolve(__dirname, '..', 'starter-files', inputFile);\n const fileString = fs.readFileSync(filePath, 'utf8');\n\n if (fs.existsSync(outputFilePath) && !replaceIfExists) {\n console.info(`${outputFilePath} already exists`);\n return false;\n }\n\n await fsExtra.outputFile(outputFilePath, fileString);\n\n return true;\n }\n\n public async setupEnvFile({ dbUrl }: { dbUrl: string }) {\n const envPath = path.join(process.cwd(), '.env.development');\n\n await fsExtra.ensureFile(envPath);\n\n const fileEnvService = new FileEnvService(envPath);\n await fileEnvService.setEnvValue('DB_URL', dbUrl);\n }\n\n public getFirstExistingFile(files: string[]): string {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n throw new Error('Missing required file, checked the following paths: ' + files.join(', '));\n }\n\n /**\n * Returns every existing file from the provided array in the same order.\n * Callers supply files from the lowest to highest precedence so later dotenv\n * files override earlier values when the bundler loads them.\n */\n public getExistingFiles(files: string[]): string[] {\n return files.filter(file => fs.existsSync(file));\n }\n\n /**\n * Returns the first existing file from the provided array, or undefined if none exist\n * @param files array of file paths to check\n * @returns the first existing file path or undefined\n */\n public getFirstExistingFileOrUndefined(files: string[]): string | undefined {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n return undefined;\n }\n\n public replaceValuesInFile({\n filePath,\n replacements,\n }: {\n filePath: string;\n replacements: { search: string; replace: string }[];\n }) {\n let fileContent = fs.readFileSync(filePath, 'utf8');\n replacements.forEach(({ search, replace }) => {\n fileContent = fileContent.replaceAll(search, replace);\n });\n\n fs.writeFileSync(filePath, fileContent);\n }\n}\n"],"mappings":"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"}