@mastra/codemod 1.0.3-alpha.0 → 1.0.5

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @mastra/codemod
2
2
 
3
+ ## 1.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Update internal dependency `@clack/prompts` to v1 ([#13095](https://github.com/mastra-ai/mastra/pull/13095))
8
+
3
9
  ## 1.0.3-alpha.0
4
10
 
5
11
  ### Patch Changes
package/LICENSE.md CHANGED
@@ -1,3 +1,18 @@
1
+ Portions of this software are licensed as follows:
2
+
3
+ - All content that resides under any directory named "ee/" within this
4
+ repository, including but not limited to:
5
+ - `packages/core/src/auth/ee/`
6
+ - `packages/server/src/server/auth/ee/`
7
+ is licensed under the license defined in `ee/LICENSE`.
8
+
9
+ - All third-party components incorporated into the Mastra Software are
10
+ licensed under the original license provided by the owner of the
11
+ applicable component.
12
+
13
+ - Content outside of the above-mentioned directories or restrictions is
14
+ available under the "Apache License 2.0" as defined below.
15
+
1
16
  # Apache License 2.0
2
17
 
3
18
  Copyright (c) 2025 Kepler Software, Inc.
@@ -33,9 +33,11 @@ var EXPORT_TO_SUBPATH = {
33
33
  createScorer: "@mastra/core/evals",
34
34
  // Server
35
35
  registerApiRoute: "@mastra/core/server",
36
- // Tracing
36
+ // Observability
37
37
  DefaultExporter: "@mastra/observability",
38
+ MastraStorageExporter: "@mastra/observability",
38
39
  CloudExporter: "@mastra/observability",
40
+ MastraPlatformExporter: "@mastra/observability",
39
41
  // Streaming
40
42
  ChunkType: "@mastra/core/stream",
41
43
  MastraMessageV2: "@mastra/core/stream",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/codemods/v1/mastra-core-imports.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\n\n/**\n * For v1 we removed all top-level exports from \"@mastra/core\" except for `Mastra` and `type Config`.\n * All other imports should use subpath imports, e.g. `import { Agent } from \"@mastra/core/agent\"`.\n *\n * This codemod updates all imports from \"@mastra/core\" to use the new subpath imports. It leaves imports to `Mastra` and `Config` unchanged.\n */\n\n// TODO: Do not hardcode this mapping, generate it from the package's exports in the future\nconst EXPORT_TO_SUBPATH: Record<string, string> = {\n // Agent\n Agent: '@mastra/core/agent',\n\n // Tools\n createTool: '@mastra/core/tools',\n Tool: '@mastra/core/tools',\n\n // Workflows\n createWorkflow: '@mastra/core/workflows',\n createStep: '@mastra/core/workflows',\n Workflow: '@mastra/core/workflows',\n Step: '@mastra/core/workflows',\n\n // Request Context\n RequestContext: '@mastra/core/request-context',\n\n // Processors\n BatchPartsProcessor: '@mastra/core/processors',\n PIIDetector: '@mastra/core/processors',\n ModerationProcessor: '@mastra/core/processors',\n TokenLimiterProcessor: '@mastra/core/processors',\n Processor: '@mastra/core/processors',\n UnicodeNormalizer: '@mastra/core/processors',\n SystemPromptScrubber: '@mastra/core/processors',\n PromptInjectionDetector: '@mastra/core/processors',\n LanguageDetector: '@mastra/core/processors',\n\n // Voice\n CompositeVoice: '@mastra/core/voice',\n\n // Scorers/Evals\n runEvals: '@mastra/core/evals',\n createScorer: '@mastra/core/evals',\n\n // Server\n registerApiRoute: '@mastra/core/server',\n\n // Tracing\n DefaultExporter: '@mastra/observability',\n CloudExporter: '@mastra/observability',\n\n // Streaming\n ChunkType: '@mastra/core/stream',\n MastraMessageV2: '@mastra/core/stream',\n\n // LLM/Models\n ModelRouterEmbeddingModel: '@mastra/core/llm',\n};\n\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n // Find all import declarations from '@mastra/core'\n root\n .find(j.ImportDeclaration, {\n source: { value: '@mastra/core' },\n })\n .forEach(importPath => {\n const node = importPath.node;\n const specifiers = node.specifiers || [];\n const declarationImportKind = node.importKind || 'value';\n\n // Categorize specifiers into those that stay vs those that move\n const { remainingSpecifiers, importsToMove } = categorizeImports(specifiers, declarationImportKind);\n\n // Early return: No imports to move\n if (importsToMove.length === 0) return;\n\n context.hasChanges = true;\n\n // Group imports by their target subpath\n const groupedImports = groupImportsBySubpath(importsToMove);\n\n // Create new import declarations for each subpath\n const newImports = createNewImports(j, groupedImports, context);\n\n // Insert new imports after the current one (in reverse to maintain order)\n insertImports(j, importPath, newImports);\n\n // Update or remove the original import\n updateOriginalImport(j, importPath, node, remainingSpecifiers, context);\n });\n});\n\n/**\n * Categorize import specifiers into those that stay vs those that move\n */\nfunction categorizeImports(specifiers: any[], declarationImportKind: 'type' | 'typeof' | 'value') {\n const remainingSpecifiers: any[] = [];\n const importsToMove: Array<{\n subpath: string;\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }> = [];\n\n specifiers.forEach(specifier => {\n // Keep default and namespace imports as-is\n if (specifier.type !== 'ImportSpecifier') {\n remainingSpecifiers.push(specifier);\n return;\n }\n\n const imported = specifier.imported;\n const importedName = getImportedName(imported);\n const localName = specifier.local?.name || importedName;\n const specifierImportKind = specifier.importKind || 'value';\n\n // Determine effective importKind:\n // - If declaration is \"import type {}\", use 'type' for all specifiers\n // - Otherwise, use the specifier's own importKind\n const effectiveImportKind = declarationImportKind !== 'value' ? declarationImportKind : specifierImportKind;\n const isDeclarationType = declarationImportKind !== 'value';\n\n // Check if this import should be moved to a subpath\n const newSubpath = EXPORT_TO_SUBPATH[importedName];\n\n if (newSubpath) {\n importsToMove.push({\n subpath: newSubpath,\n localName,\n importedName,\n importKind: effectiveImportKind,\n isDeclarationType,\n });\n } else {\n // This import stays at '@mastra/core' (e.g., Mastra, Config)\n remainingSpecifiers.push(specifier);\n }\n });\n\n return { remainingSpecifiers, importsToMove };\n}\n\n/**\n * Extract the imported name from an import specifier\n */\nfunction getImportedName(imported: any): string {\n if (imported.type === 'Identifier') {\n return imported.name;\n }\n // Handle string literal imports (edge case)\n return imported.value || '';\n}\n\n/**\n * Group imports by their target subpath and importKind\n */\nfunction groupImportsBySubpath(\n importsToMove: Array<{\n subpath: string;\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }>,\n) {\n const groupedImports = new Map<\n string,\n Array<{\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }>\n >();\n\n importsToMove.forEach(({ subpath, localName, importedName, importKind, isDeclarationType }) => {\n // Create a key that includes both subpath and importKind to ensure separate import declarations\n const key = `${subpath}::${importKind}::${isDeclarationType}`;\n if (!groupedImports.has(key)) {\n groupedImports.set(key, []);\n }\n groupedImports.get(key)!.push({ localName, importedName, importKind, isDeclarationType });\n });\n\n return groupedImports;\n}\n\n/**\n * Create new import declarations for each subpath and importKind\n */\nfunction createNewImports(\n j: any,\n groupedImports: Map<\n string,\n Array<{\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }>\n >,\n context: any,\n) {\n const newImports: any[] = [];\n\n groupedImports.forEach((imports, key) => {\n // Extract subpath, importKind, and isDeclarationType from the composite key\n const [subpath, importKind] = key.split('::');\n\n const newSpecifiers = imports.map(({ localName, importedName }) => {\n if (localName === importedName) {\n // import { Agent } from '@mastra/core/agent'\n return j.importSpecifier(j.identifier(importedName));\n } else {\n // import { Agent as MastraAgent } from '@mastra/core/agent'\n return j.importSpecifier(j.identifier(importedName), j.identifier(localName));\n }\n // Note: We don't set importKind on specifiers since we're creating\n // separate import declarations for each importKind. All specifiers in a type\n // import group will be in an \"import type\" declaration.\n });\n\n const newImport = j.importDeclaration(newSpecifiers, j.stringLiteral(subpath));\n\n // Set importKind on declaration if this is a type import (either declaration-level or inline)\n if (importKind !== 'value') {\n newImport.importKind = importKind;\n }\n\n newImports.push(newImport);\n\n // Log which imports were moved to which subpath\n const importList = imports.map(i => i.importedName).join(', ');\n const kindLabel = importKind !== 'value' ? ` (${importKind})` : '';\n context.messages.push(`Moved imports to '${subpath}'${kindLabel}: ${importList}`);\n });\n\n return newImports;\n}\n\n/**\n * Insert new imports after the current import (in reverse to maintain order)\n */\nfunction insertImports(j: any, importPath: any, newImports: any[]) {\n newImports.reverse().forEach(newImport => {\n j(importPath).insertAfter(newImport);\n });\n}\n\n/**\n * Update or remove the original import declaration\n */\nfunction updateOriginalImport(j: any, importPath: any, node: any, remainingSpecifiers: any[], context: any) {\n if (remainingSpecifiers.length > 0) {\n // Keep the original import with only the remaining specifiers\n node.specifiers = remainingSpecifiers;\n\n const remainingList = extractRemainingImportNames(remainingSpecifiers);\n if (remainingList) {\n context.messages.push(`Kept at '@mastra/core': ${remainingList}`);\n }\n } else {\n // Remove the original import entirely (all imports moved)\n j(importPath).remove();\n context.messages.push(`Removed original '@mastra/core' import (all imports moved to subpaths)`);\n }\n}\n\n/**\n * Extract the names of remaining imports for logging\n */\nfunction extractRemainingImportNames(remainingSpecifiers: any[]): string {\n return remainingSpecifiers\n .filter(s => s.type === 'ImportSpecifier')\n .map(s => s.imported?.name || s.local?.name)\n .filter(Boolean)\n .join(', ');\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/codemods/v1/mastra-core-imports.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\n\n/**\n * For v1 we removed all top-level exports from \"@mastra/core\" except for `Mastra` and `type Config`.\n * All other imports should use subpath imports, e.g. `import { Agent } from \"@mastra/core/agent\"`.\n *\n * This codemod updates all imports from \"@mastra/core\" to use the new subpath imports. It leaves imports to `Mastra` and `Config` unchanged.\n */\n\n// TODO: Do not hardcode this mapping, generate it from the package's exports in the future\nconst EXPORT_TO_SUBPATH: Record<string, string> = {\n // Agent\n Agent: '@mastra/core/agent',\n\n // Tools\n createTool: '@mastra/core/tools',\n Tool: '@mastra/core/tools',\n\n // Workflows\n createWorkflow: '@mastra/core/workflows',\n createStep: '@mastra/core/workflows',\n Workflow: '@mastra/core/workflows',\n Step: '@mastra/core/workflows',\n\n // Request Context\n RequestContext: '@mastra/core/request-context',\n\n // Processors\n BatchPartsProcessor: '@mastra/core/processors',\n PIIDetector: '@mastra/core/processors',\n ModerationProcessor: '@mastra/core/processors',\n TokenLimiterProcessor: '@mastra/core/processors',\n Processor: '@mastra/core/processors',\n UnicodeNormalizer: '@mastra/core/processors',\n SystemPromptScrubber: '@mastra/core/processors',\n PromptInjectionDetector: '@mastra/core/processors',\n LanguageDetector: '@mastra/core/processors',\n\n // Voice\n CompositeVoice: '@mastra/core/voice',\n\n // Scorers/Evals\n runEvals: '@mastra/core/evals',\n createScorer: '@mastra/core/evals',\n\n // Server\n registerApiRoute: '@mastra/core/server',\n\n // Observability\n DefaultExporter: '@mastra/observability',\n MastraStorageExporter: '@mastra/observability',\n CloudExporter: '@mastra/observability',\n MastraPlatformExporter: '@mastra/observability',\n\n // Streaming\n ChunkType: '@mastra/core/stream',\n MastraMessageV2: '@mastra/core/stream',\n\n // LLM/Models\n ModelRouterEmbeddingModel: '@mastra/core/llm',\n};\n\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n // Find all import declarations from '@mastra/core'\n root\n .find(j.ImportDeclaration, {\n source: { value: '@mastra/core' },\n })\n .forEach(importPath => {\n const node = importPath.node;\n const specifiers = node.specifiers || [];\n const declarationImportKind = node.importKind || 'value';\n\n // Categorize specifiers into those that stay vs those that move\n const { remainingSpecifiers, importsToMove } = categorizeImports(specifiers, declarationImportKind);\n\n // Early return: No imports to move\n if (importsToMove.length === 0) return;\n\n context.hasChanges = true;\n\n // Group imports by their target subpath\n const groupedImports = groupImportsBySubpath(importsToMove);\n\n // Create new import declarations for each subpath\n const newImports = createNewImports(j, groupedImports, context);\n\n // Insert new imports after the current one (in reverse to maintain order)\n insertImports(j, importPath, newImports);\n\n // Update or remove the original import\n updateOriginalImport(j, importPath, node, remainingSpecifiers, context);\n });\n});\n\n/**\n * Categorize import specifiers into those that stay vs those that move\n */\nfunction categorizeImports(specifiers: any[], declarationImportKind: 'type' | 'typeof' | 'value') {\n const remainingSpecifiers: any[] = [];\n const importsToMove: Array<{\n subpath: string;\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }> = [];\n\n specifiers.forEach(specifier => {\n // Keep default and namespace imports as-is\n if (specifier.type !== 'ImportSpecifier') {\n remainingSpecifiers.push(specifier);\n return;\n }\n\n const imported = specifier.imported;\n const importedName = getImportedName(imported);\n const localName = specifier.local?.name || importedName;\n const specifierImportKind = specifier.importKind || 'value';\n\n // Determine effective importKind:\n // - If declaration is \"import type {}\", use 'type' for all specifiers\n // - Otherwise, use the specifier's own importKind\n const effectiveImportKind = declarationImportKind !== 'value' ? declarationImportKind : specifierImportKind;\n const isDeclarationType = declarationImportKind !== 'value';\n\n // Check if this import should be moved to a subpath\n const newSubpath = EXPORT_TO_SUBPATH[importedName];\n\n if (newSubpath) {\n importsToMove.push({\n subpath: newSubpath,\n localName,\n importedName,\n importKind: effectiveImportKind,\n isDeclarationType,\n });\n } else {\n // This import stays at '@mastra/core' (e.g., Mastra, Config)\n remainingSpecifiers.push(specifier);\n }\n });\n\n return { remainingSpecifiers, importsToMove };\n}\n\n/**\n * Extract the imported name from an import specifier\n */\nfunction getImportedName(imported: any): string {\n if (imported.type === 'Identifier') {\n return imported.name;\n }\n // Handle string literal imports (edge case)\n return imported.value || '';\n}\n\n/**\n * Group imports by their target subpath and importKind\n */\nfunction groupImportsBySubpath(\n importsToMove: Array<{\n subpath: string;\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }>,\n) {\n const groupedImports = new Map<\n string,\n Array<{\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }>\n >();\n\n importsToMove.forEach(({ subpath, localName, importedName, importKind, isDeclarationType }) => {\n // Create a key that includes both subpath and importKind to ensure separate import declarations\n const key = `${subpath}::${importKind}::${isDeclarationType}`;\n if (!groupedImports.has(key)) {\n groupedImports.set(key, []);\n }\n groupedImports.get(key)!.push({ localName, importedName, importKind, isDeclarationType });\n });\n\n return groupedImports;\n}\n\n/**\n * Create new import declarations for each subpath and importKind\n */\nfunction createNewImports(\n j: any,\n groupedImports: Map<\n string,\n Array<{\n localName: string;\n importedName: string;\n importKind: 'type' | 'typeof' | 'value';\n isDeclarationType: boolean;\n }>\n >,\n context: any,\n) {\n const newImports: any[] = [];\n\n groupedImports.forEach((imports, key) => {\n // Extract subpath, importKind, and isDeclarationType from the composite key\n const [subpath, importKind] = key.split('::');\n\n const newSpecifiers = imports.map(({ localName, importedName }) => {\n if (localName === importedName) {\n // import { Agent } from '@mastra/core/agent'\n return j.importSpecifier(j.identifier(importedName));\n } else {\n // import { Agent as MastraAgent } from '@mastra/core/agent'\n return j.importSpecifier(j.identifier(importedName), j.identifier(localName));\n }\n // Note: We don't set importKind on specifiers since we're creating\n // separate import declarations for each importKind. All specifiers in a type\n // import group will be in an \"import type\" declaration.\n });\n\n const newImport = j.importDeclaration(newSpecifiers, j.stringLiteral(subpath));\n\n // Set importKind on declaration if this is a type import (either declaration-level or inline)\n if (importKind !== 'value') {\n newImport.importKind = importKind;\n }\n\n newImports.push(newImport);\n\n // Log which imports were moved to which subpath\n const importList = imports.map(i => i.importedName).join(', ');\n const kindLabel = importKind !== 'value' ? ` (${importKind})` : '';\n context.messages.push(`Moved imports to '${subpath}'${kindLabel}: ${importList}`);\n });\n\n return newImports;\n}\n\n/**\n * Insert new imports after the current import (in reverse to maintain order)\n */\nfunction insertImports(j: any, importPath: any, newImports: any[]) {\n newImports.reverse().forEach(newImport => {\n j(importPath).insertAfter(newImport);\n });\n}\n\n/**\n * Update or remove the original import declaration\n */\nfunction updateOriginalImport(j: any, importPath: any, node: any, remainingSpecifiers: any[], context: any) {\n if (remainingSpecifiers.length > 0) {\n // Keep the original import with only the remaining specifiers\n node.specifiers = remainingSpecifiers;\n\n const remainingList = extractRemainingImportNames(remainingSpecifiers);\n if (remainingList) {\n context.messages.push(`Kept at '@mastra/core': ${remainingList}`);\n }\n } else {\n // Remove the original import entirely (all imports moved)\n j(importPath).remove();\n context.messages.push(`Removed original '@mastra/core' import (all imports moved to subpaths)`);\n }\n}\n\n/**\n * Extract the names of remaining imports for logging\n */\nfunction extractRemainingImportNames(remainingSpecifiers: any[]): string {\n return remainingSpecifiers\n .filter(s => s.type === 'ImportSpecifier')\n .map(s => s.imported?.name || s.local?.name)\n .filter(Boolean)\n .join(', ');\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mastra/codemod",
3
3
  "type": "module",
4
- "version": "1.0.3-alpha.0",
4
+ "version": "1.0.5",
5
5
  "license": "Apache-2.0",
6
6
  "description": "Codemod CLI for Mastra",
7
7
  "bin": {
@@ -18,23 +18,23 @@
18
18
  "codemod"
19
19
  ],
20
20
  "dependencies": {
21
- "@clack/prompts": "^1.0.1",
21
+ "@clack/prompts": "^1.1.0",
22
22
  "commander": "^14.0.3",
23
23
  "debug": "^4.4.3",
24
24
  "jscodeshift": "^17.3.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@commander-js/extra-typings": "^14.0.0",
28
- "@types/debug": "^4.1.12",
28
+ "@types/debug": "^4.1.13",
29
29
  "@types/jscodeshift": "^17.3.0",
30
- "@types/node": "22.19.7",
31
- "@vitest/coverage-v8": "4.0.12",
32
- "@vitest/ui": "4.0.12",
33
- "eslint": "^9.37.0",
30
+ "@types/node": "22.19.21",
31
+ "@vitest/coverage-v8": "4.1.8",
32
+ "@vitest/ui": "4.1.8",
33
+ "eslint": "^10.4.1",
34
34
  "tsup": "^8.5.1",
35
- "typescript": "^5.9.3",
36
- "vitest": "4.0.16",
37
- "@internal/lint": "0.0.59"
35
+ "typescript": "^6.0.3",
36
+ "vitest": "4.1.8",
37
+ "@internal/lint": "0.0.105"
38
38
  },
39
39
  "homepage": "https://mastra.ai",
40
40
  "repository": {