@mastra/codemod 0.1.0-beta.6 → 1.0.0-beta.8
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 +51 -0
- package/README.md +1 -0
- package/dist/codemods/{chunk-PKCFDS7J.js → chunk-IW37ID7J.js} +49 -7
- package/dist/codemods/chunk-IW37ID7J.js.map +1 -0
- package/dist/codemods/lib/utils.js +5 -1
- package/dist/codemods/v1/agent-abort-signal.js +1 -1
- package/dist/codemods/v1/agent-generate-stream-v-next.js +1 -1
- package/dist/codemods/v1/agent-processor-methods.js +1 -1
- package/dist/codemods/v1/agent-property-access.js +1 -1
- package/dist/codemods/v1/agent-voice.js +1 -1
- package/dist/codemods/v1/client-msg-function-args.js +49 -0
- package/dist/codemods/v1/client-msg-function-args.js.map +1 -0
- package/dist/codemods/v1/client-offset-limit.js +1 -1
- package/dist/codemods/v1/client-to-ai-sdk-format.js +1 -1
- package/dist/codemods/v1/evals-run-experiment.js +1 -1
- package/dist/codemods/v1/evals-scorer-by-name.js +1 -1
- package/dist/codemods/v1/mastra-plural-apis.js +1 -1
- package/dist/codemods/v1/mcp-get-tools.js +1 -1
- package/dist/codemods/v1/mcp-get-toolsets.js +1 -1
- package/dist/codemods/v1/memory-query-to-recall.js +1 -1
- package/dist/codemods/v1/memory-vector-search-param.js +1 -1
- package/dist/codemods/v1/storage-get-messages-paginated.js +1 -1
- package/dist/codemods/v1/storage-get-threads-by-resource.js +29 -5
- package/dist/codemods/v1/storage-get-threads-by-resource.js.map +1 -1
- package/dist/codemods/v1/storage-list-messages-by-id.js +1 -1
- package/dist/codemods/v1/storage-list-threads-by-resource-to-list-threads.js +81 -0
- package/dist/codemods/v1/storage-list-threads-by-resource-to-list-threads.js.map +1 -0
- package/dist/codemods/v1/storage-list-workflow-runs.js +1 -1
- package/dist/codemods/v1/storage-postgres-schema-name.js +1 -1
- package/dist/codemods/v1/workflow-create-run-async.js +1 -1
- package/dist/codemods/v1/workflow-list-runs.js +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/codemods/chunk-PKCFDS7J.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,56 @@
|
|
|
1
1
|
# @mastra/codemod
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.8
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- Mark as stable ([#12096](https://github.com/mastra-ai/mastra/pull/12096))
|
|
8
|
+
|
|
9
|
+
## 0.1.0-beta.7
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Add new `v1/client-msg-function-args` codemod. It transforms MastraClient agent method calls to use messages as the first argument. ([#12061](https://github.com/mastra-ai/mastra/pull/12061))
|
|
14
|
+
|
|
15
|
+
- Added new `listThreads` method for flexible thread filtering across all storage adapters. ([#11832](https://github.com/mastra-ai/mastra/pull/11832))
|
|
16
|
+
|
|
17
|
+
**New Features**
|
|
18
|
+
- Filter threads by `resourceId`, `metadata`, or both (with AND logic for metadata key-value pairs)
|
|
19
|
+
- All filter parameters are optional, allowing you to list all threads or filter as needed
|
|
20
|
+
- Full pagination and sorting support
|
|
21
|
+
|
|
22
|
+
**Example Usage**
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// List all threads
|
|
26
|
+
const allThreads = await memory.listThreads({});
|
|
27
|
+
|
|
28
|
+
// Filter by resourceId only
|
|
29
|
+
const userThreads = await memory.listThreads({
|
|
30
|
+
filter: { resourceId: 'user-123' },
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Filter by metadata only
|
|
34
|
+
const supportThreads = await memory.listThreads({
|
|
35
|
+
filter: { metadata: { category: 'support' } },
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Filter by both with pagination
|
|
39
|
+
const filteredThreads = await memory.listThreads({
|
|
40
|
+
filter: {
|
|
41
|
+
resourceId: 'user-123',
|
|
42
|
+
metadata: { priority: 'high', status: 'open' },
|
|
43
|
+
},
|
|
44
|
+
orderBy: { field: 'updatedAt', direction: 'DESC' },
|
|
45
|
+
page: 0,
|
|
46
|
+
perPage: 20,
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Security Improvements**
|
|
51
|
+
- Added validation to prevent SQL injection via malicious metadata keys
|
|
52
|
+
- Added pagination parameter validation to prevent integer overflow attacks
|
|
53
|
+
|
|
3
54
|
## 0.1.0-beta.6
|
|
4
55
|
|
|
5
56
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -45,6 +45,7 @@ npx @mastra/codemod@beta v1/mastra-core-imports .
|
|
|
45
45
|
| `v1/agent-property-access` | Transforms agent property access to method calls: `agent.llm` → `agent.getLLM()` |
|
|
46
46
|
| `v1/agent-voice` | Moves agent voice methods to namespace: `agent.speak()` → `agent.voice.speak()` |
|
|
47
47
|
| `v1/client-get-memory-thread` | Updates `client.getMemoryThread(threadId, agentId)` to use object parameter |
|
|
48
|
+
| `v1/client-msg-function-args` | Transforms MastraClient agent method calls to use messages as the first argument |
|
|
48
49
|
| `v1/client-offset-limit` | Renames pagination properties from `offset`/`limit` to `page`/`perPage` |
|
|
49
50
|
| `v1/client-sdk-types` | Renames Client SDK types from Get\* to List\* pattern |
|
|
50
51
|
| `v1/client-to-ai-sdk-format` | Renames `toAISdkFormat` to `toAISdkStream` |
|
|
@@ -1,12 +1,35 @@
|
|
|
1
1
|
// src/codemods/lib/utils.ts
|
|
2
|
-
function
|
|
2
|
+
function findImportAliases(j, root, className, moduleName) {
|
|
3
|
+
const aliases = /* @__PURE__ */ new Set();
|
|
4
|
+
root.find(j.ImportDeclaration).forEach((path) => {
|
|
5
|
+
const source = path.value.source.value;
|
|
6
|
+
if (typeof source !== "string" || source !== moduleName) return;
|
|
7
|
+
if (!path.value.specifiers) return;
|
|
8
|
+
path.value.specifiers.forEach((specifier) => {
|
|
9
|
+
if (specifier.type === "ImportSpecifier" && specifier.imported.type === "Identifier" && specifier.imported.name === className) {
|
|
10
|
+
const localName = specifier.local?.name || className;
|
|
11
|
+
aliases.add(localName);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
return aliases;
|
|
16
|
+
}
|
|
17
|
+
function trackClassInstances(j, root, className, moduleName) {
|
|
3
18
|
const instances = /* @__PURE__ */ new Set();
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
19
|
+
let classNames;
|
|
20
|
+
if (moduleName) {
|
|
21
|
+
const aliases = findImportAliases(j, root, className, moduleName);
|
|
22
|
+
if (aliases.size === 0) {
|
|
23
|
+
return instances;
|
|
8
24
|
}
|
|
9
|
-
|
|
25
|
+
classNames = aliases;
|
|
26
|
+
} else {
|
|
27
|
+
classNames = /* @__PURE__ */ new Set([className]);
|
|
28
|
+
}
|
|
29
|
+
root.find(j.NewExpression).forEach((path) => {
|
|
30
|
+
const { callee } = path.value;
|
|
31
|
+
if (callee.type !== "Identifier") return;
|
|
32
|
+
if (!classNames.has(callee.name)) return;
|
|
10
33
|
const parent = path.parent.value;
|
|
11
34
|
if (parent.type === "VariableDeclarator" && parent.id.type === "Identifier") {
|
|
12
35
|
instances.add(parent.id.name);
|
|
@@ -140,6 +163,23 @@ function renameImportAndUsages(j, root, packageName, oldName, newName) {
|
|
|
140
163
|
});
|
|
141
164
|
return changes;
|
|
142
165
|
}
|
|
166
|
+
function trackMethodCallResults(j, root, instances, methodName) {
|
|
167
|
+
const results = /* @__PURE__ */ new Set();
|
|
168
|
+
if (instances.size === 0) return results;
|
|
169
|
+
root.find(j.CallExpression).forEach((path) => {
|
|
170
|
+
const { callee } = path.value;
|
|
171
|
+
if (callee.type !== "MemberExpression") return;
|
|
172
|
+
if (callee.object.type !== "Identifier") return;
|
|
173
|
+
if (callee.property.type !== "Identifier") return;
|
|
174
|
+
if (!instances.has(callee.object.name)) return;
|
|
175
|
+
if (methodName && callee.property.name !== methodName) return;
|
|
176
|
+
const parent = path.parent.value;
|
|
177
|
+
if (parent.type === "VariableDeclarator" && parent.id.type === "Identifier") {
|
|
178
|
+
results.add(parent.id.name);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
return results;
|
|
182
|
+
}
|
|
143
183
|
function transformConstructorProperties(j, root, className, propertyRenames) {
|
|
144
184
|
let count = 0;
|
|
145
185
|
root.find(j.NewExpression, {
|
|
@@ -164,6 +204,7 @@ function transformConstructorProperties(j, root, className, propertyRenames) {
|
|
|
164
204
|
}
|
|
165
205
|
|
|
166
206
|
export {
|
|
207
|
+
findImportAliases,
|
|
167
208
|
trackClassInstances,
|
|
168
209
|
trackMultipleClassInstances,
|
|
169
210
|
transformMethodCalls,
|
|
@@ -172,6 +213,7 @@ export {
|
|
|
172
213
|
transformObjectProperties,
|
|
173
214
|
isMemberExpressionOnInstance,
|
|
174
215
|
renameImportAndUsages,
|
|
216
|
+
trackMethodCallResults,
|
|
175
217
|
transformConstructorProperties
|
|
176
218
|
};
|
|
177
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-IW37ID7J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codemods/lib/utils.ts"],"sourcesContent":["// Shared utility functions for codemods\n\nimport type { Collection, JSCodeshift } from 'jscodeshift';\n\n/**\n * Finds all local names (including aliases) used to import a specific class from a module.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param className - Name of the class to find imports for\n * @param moduleName - Module to search for imports from (e.g., '@mastra/memory')\n * @returns Set of local names used for the class (includes aliases)\n */\nexport function findImportAliases(\n j: JSCodeshift,\n root: Collection<any>,\n className: string,\n moduleName: string,\n): Set<string> {\n const aliases = new Set<string>();\n\n root.find(j.ImportDeclaration).forEach(path => {\n const source = path.value.source.value;\n if (typeof source !== 'string' || source !== moduleName) return;\n\n if (!path.value.specifiers) return;\n\n path.value.specifiers.forEach((specifier: any) => {\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.imported.type === 'Identifier' &&\n specifier.imported.name === className\n ) {\n // Use the local name (which could be an alias or the original name)\n const localName = specifier.local?.name || className;\n aliases.add(localName);\n }\n });\n });\n\n return aliases;\n}\n\n/**\n * Efficiently tracks instances of a specific class by finding all `new ClassName()` expressions\n * and extracting the variable names they're assigned to.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param className - Name of the class to track\n * @param moduleName - Optional module name to also track aliased imports from\n * @returns Set of variable names that are instances of the class\n */\nexport function trackClassInstances(\n j: JSCodeshift,\n root: Collection<any>,\n className: string,\n moduleName?: string,\n): Set<string> {\n const instances = new Set<string>();\n\n // Find all names that refer to this class\n let classNames: Set<string>;\n\n if (moduleName) {\n // When moduleName is specified, only track usages if the class is actually imported from that module\n const aliases = findImportAliases(j, root, className, moduleName);\n if (aliases.size === 0) {\n // Class is not imported from the specified module, skip transformation\n return instances;\n }\n classNames = aliases;\n } else {\n // When no moduleName is specified, use the className directly\n classNames = new Set<string>([className]);\n }\n\n root.find(j.NewExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'Identifier') return;\n if (!classNames.has(callee.name)) return;\n\n const parent = path.parent.value;\n if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n instances.add(parent.id.name);\n }\n });\n\n return instances;\n}\n\n/**\n * Efficiently tracks instances of multiple classes in a single pass.\n * This is optimized for codemods that need to track several store types or class variants.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param classNames - Array of class names to track\n * @returns Set of variable names that are instances of any of the classes\n */\nexport function trackMultipleClassInstances(j: JSCodeshift, root: Collection<any>, classNames: string[]): Set<string> {\n const instances = new Set<string>();\n const classNameSet = new Set(classNames);\n\n root.find(j.NewExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'Identifier') return;\n if (!classNameSet.has(callee.name)) return;\n\n const parent = path.parent.value;\n if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n instances.add(parent.id.name);\n }\n });\n\n return instances;\n}\n\n/**\n * Efficiently finds and transforms method calls on tracked instances.\n * This combines finding, filtering, and transforming in a single pass.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param instances - Set of instance variable names to track\n * @param methodName - Name of the method to find (or undefined to match any method)\n * @param transform - Callback to transform matching call expressions\n * @returns Number of transformations made\n */\nexport function transformMethodCalls(\n j: JSCodeshift,\n root: Collection<any>,\n instances: Set<string>,\n methodName: string | undefined,\n transform: (path: any) => void,\n): number {\n if (instances.size === 0) return 0;\n\n let count = 0;\n\n root.find(j.CallExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n if (callee.property.type !== 'Identifier') return;\n\n // Only process if called on a tracked instance\n if (!instances.has(callee.object.name)) return;\n\n // Only process if it's the method we want (or any method if undefined)\n if (methodName && callee.property.name !== methodName) return;\n\n transform(path);\n count++;\n });\n\n return count;\n}\n\n/**\n * Renames a method on tracked instances efficiently in a single pass.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param instances - Set of instance variable names to track\n * @param oldMethodName - Current method name\n * @param newMethodName - New method name\n * @returns Number of renames performed\n */\nexport function renameMethod(\n j: JSCodeshift,\n root: Collection<any>,\n instances: Set<string>,\n oldMethodName: string,\n newMethodName: string,\n): number {\n if (instances.size === 0) return 0;\n\n let count = 0;\n\n root.find(j.CallExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n if (callee.property.type !== 'Identifier') return;\n\n // Only process if called on tracked instance\n if (!instances.has(callee.object.name)) return;\n\n // Only process if it's the method we want to rename\n if (callee.property.name !== oldMethodName) return;\n\n callee.property.name = newMethodName;\n count++;\n });\n\n return count;\n}\n\n/**\n * Renames multiple methods on tracked instances in a single pass.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param instances - Set of instance variable names to track\n * @param methodRenames - Map of old method names to new method names\n * @returns Number of renames performed\n */\nexport function renameMethods(\n j: JSCodeshift,\n root: Collection<any>,\n instances: Set<string>,\n methodRenames: Record<string, string>,\n): number {\n if (instances.size === 0) return 0;\n\n let count = 0;\n\n root.find(j.CallExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n if (callee.property.type !== 'Identifier') return;\n\n // Only process if called on tracked instance\n if (!instances.has(callee.object.name)) return;\n\n // Check if this is one of the methods we want to rename\n const oldName = callee.property.name;\n const newName = methodRenames[oldName];\n\n if (newName) {\n callee.property.name = newName;\n count++;\n }\n });\n\n return count;\n}\n\n/**\n * Transforms object properties in method call arguments.\n * This is a helper for codemods that need to rename properties in object arguments.\n *\n * @param obj - Object expression to transform\n * @param propertyRenames - Map of old property names to new property names\n * @returns Number of properties renamed\n */\nexport function transformObjectProperties(obj: any, propertyRenames: Record<string, string>): number {\n let count = 0;\n\n const recurse = (o: any) => {\n if (!o.properties) return;\n\n o.properties.forEach((prop: any) => {\n if ((prop.type === 'Property' || prop.type === 'ObjectProperty') && prop.key?.type === 'Identifier') {\n const oldName = prop.key.name;\n const newName = propertyRenames[oldName];\n\n if (newName) {\n prop.key.name = newName;\n count++;\n }\n\n // Recursively transform nested objects\n if (prop.value?.type === 'ObjectExpression') {\n recurse(prop.value);\n }\n }\n });\n };\n\n recurse(obj);\n return count;\n}\n\n/**\n * Checks if a node is a member expression accessing a specific property on tracked instances.\n *\n * @param node - AST node to check\n * @param instances - Set of instance variable names to track\n * @param propertyName - Property name to match (or undefined to match any property)\n * @returns true if the node matches\n */\nexport function isMemberExpressionOnInstance(node: any, instances: Set<string>, propertyName?: string): boolean {\n if (node.type !== 'MemberExpression') return false;\n if (node.object.type !== 'Identifier') return false;\n if (!instances.has(node.object.name)) return false;\n\n if (propertyName && node.property.type === 'Identifier' && node.property.name !== propertyName) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Renames an import and all its usages in a single optimized pass.\n * Handles aliased imports correctly - only transforms usages for non-aliased imports.\n * Handles multiple imports of the same name (with different aliases) correctly.\n *\n * For non-aliased imports: Renames both import and all usages\n * import { oldName } → import { newName }\n * oldName() → newName()\n *\n * For aliased imports: Only renames the import, keeps alias in usages\n * import { oldName as alias } → import { newName as alias }\n * alias() → alias() (unchanged)\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param packageName - Package to import from (e.g., '@mastra/core/evals')\n * @param oldName - Current import name\n * @param newName - New import name\n * @returns Number of changes made\n */\nexport function renameImportAndUsages(\n j: JSCodeshift,\n root: Collection<any>,\n packageName: string,\n oldName: string,\n newName: string,\n): number {\n let changes = 0;\n const localNamesToReplace = new Set<string>();\n\n // First: Transform import specifiers from the specific package and collect local names to replace\n root\n .find(j.ImportDeclaration)\n .filter(path => {\n const source = path.value.source.value;\n return typeof source === 'string' && source === packageName;\n })\n .forEach(path => {\n if (!path.value.specifiers) return;\n\n path.value.specifiers.forEach((specifier: any) => {\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.imported.type === 'Identifier' &&\n specifier.imported.name === oldName\n ) {\n const isAliased = specifier.local && specifier.local.name !== oldName;\n\n // Always rename the imported name\n specifier.imported.name = newName;\n changes++;\n\n // Only rename the local name and track for usage replacement if NOT aliased\n if (!isAliased) {\n if (specifier.local) {\n specifier.local.name = newName;\n }\n // Track for usage replacement (only non-aliased imports)\n localNamesToReplace.add(oldName);\n }\n }\n });\n });\n\n // Second: Transform usages only for non-aliased imports\n localNamesToReplace.forEach(localName => {\n root.find(j.Identifier, { name: localName }).forEach(path => {\n // Skip identifiers that are part of import declarations\n const parent = path.parent;\n if (parent && parent.value.type === 'ImportSpecifier') {\n return;\n }\n\n path.value.name = newName;\n changes++;\n });\n });\n\n return changes;\n}\n\n/**\n * Tracks variables assigned from method calls on tracked instances.\n * Useful for tracking objects returned from factory methods like `client.getAgent()`.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param instances - Set of instance variable names to track\n * @param methodName - Name of the method to track (or undefined to match any method)\n * @returns Set of variable names that are assigned from the method calls\n */\nexport function trackMethodCallResults(\n j: JSCodeshift,\n root: Collection<any>,\n instances: Set<string>,\n methodName?: string,\n): Set<string> {\n const results = new Set<string>();\n\n if (instances.size === 0) return results;\n\n root.find(j.CallExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n if (callee.property.type !== 'Identifier') return;\n\n // Only process if called on a tracked instance\n if (!instances.has(callee.object.name)) return;\n\n // Only process if it's the method we want (or any method if undefined)\n if (methodName && callee.property.name !== methodName) return;\n\n // Track the variable this is assigned to\n const parent = path.parent.value;\n if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n results.add(parent.id.name);\n }\n });\n\n return results;\n}\n\n/**\n * Transforms properties in constructor call arguments.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param className - Name of the class whose constructor to transform\n * @param propertyRenames - Map of old property names to new property names\n * @returns Number of properties renamed\n */\nexport function transformConstructorProperties(\n j: JSCodeshift,\n root: Collection<any>,\n className: string,\n propertyRenames: Record<string, string>,\n): number {\n let count = 0;\n\n root\n .find(j.NewExpression, {\n callee: { type: 'Identifier', name: className },\n })\n .forEach(path => {\n const args = path.value.arguments;\n if (args.length === 0) return;\n\n const firstArg = args[0];\n if (!firstArg || firstArg.type !== 'ObjectExpression' || !firstArg.properties) return;\n\n firstArg.properties.forEach((prop: any) => {\n if ((prop.type === 'Property' || prop.type === 'ObjectProperty') && prop.key?.type === 'Identifier') {\n const oldName = prop.key.name;\n const newName = propertyRenames[oldName];\n\n if (newName) {\n prop.key.name = newName;\n count++;\n }\n }\n });\n });\n\n return count;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
|
+
findImportAliases,
|
|
2
3
|
isMemberExpressionOnInstance,
|
|
3
4
|
renameImportAndUsages,
|
|
4
5
|
renameMethod,
|
|
5
6
|
renameMethods,
|
|
6
7
|
trackClassInstances,
|
|
8
|
+
trackMethodCallResults,
|
|
7
9
|
trackMultipleClassInstances,
|
|
8
10
|
transformConstructorProperties,
|
|
9
11
|
transformMethodCalls,
|
|
10
12
|
transformObjectProperties
|
|
11
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-IW37ID7J.js";
|
|
12
14
|
export {
|
|
15
|
+
findImportAliases,
|
|
13
16
|
isMemberExpressionOnInstance,
|
|
14
17
|
renameImportAndUsages,
|
|
15
18
|
renameMethod,
|
|
16
19
|
renameMethods,
|
|
17
20
|
trackClassInstances,
|
|
21
|
+
trackMethodCallResults,
|
|
18
22
|
trackMultipleClassInstances,
|
|
19
23
|
transformConstructorProperties,
|
|
20
24
|
transformMethodCalls,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "../chunk-JNFQ6J6B.js";
|
|
4
4
|
import {
|
|
5
5
|
trackClassInstances
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-IW37ID7J.js";
|
|
7
7
|
|
|
8
8
|
// src/codemods/v1/agent-abort-signal.ts
|
|
9
9
|
var agent_abort_signal_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
renameMethods,
|
|
6
6
|
trackClassInstances
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/agent-generate-stream-v-next.ts
|
|
10
10
|
var agent_generate_stream_v_next_default = createTransformer((fileInfo, api, options, context) => {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
renameMethods,
|
|
6
6
|
trackClassInstances
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/agent-processor-methods.ts
|
|
10
10
|
var agent_processor_methods_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "../chunk-JNFQ6J6B.js";
|
|
4
4
|
import {
|
|
5
5
|
trackClassInstances
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-IW37ID7J.js";
|
|
7
7
|
|
|
8
8
|
// src/codemods/v1/agent-property-access.ts
|
|
9
9
|
var agent_property_access_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTransformer
|
|
3
|
+
} from "../chunk-JNFQ6J6B.js";
|
|
4
|
+
import {
|
|
5
|
+
trackClassInstances,
|
|
6
|
+
trackMethodCallResults,
|
|
7
|
+
transformMethodCalls
|
|
8
|
+
} from "../chunk-IW37ID7J.js";
|
|
9
|
+
|
|
10
|
+
// src/codemods/v1/client-msg-function-args.ts
|
|
11
|
+
var client_msg_function_args_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
12
|
+
const { j, root } = context;
|
|
13
|
+
const clientInstances = trackClassInstances(j, root, "MastraClient");
|
|
14
|
+
if (clientInstances.size === 0) return;
|
|
15
|
+
const agentInstances = trackMethodCallResults(j, root, clientInstances, "getAgent");
|
|
16
|
+
if (agentInstances.size === 0) return;
|
|
17
|
+
const methodsToTransform = /* @__PURE__ */ new Set(["generate", "stream", "network"]);
|
|
18
|
+
transformMethodCalls(j, root, agentInstances, void 0, (path) => {
|
|
19
|
+
const { callee, arguments: args } = path.value;
|
|
20
|
+
if (callee.property.type !== "Identifier") return;
|
|
21
|
+
if (!methodsToTransform.has(callee.property.name)) return;
|
|
22
|
+
if (args.length !== 1) return;
|
|
23
|
+
const firstArg = args[0];
|
|
24
|
+
if (!firstArg || firstArg.type !== "ObjectExpression") return;
|
|
25
|
+
let messagesProperty = null;
|
|
26
|
+
const otherProperties = [];
|
|
27
|
+
firstArg.properties?.forEach((prop) => {
|
|
28
|
+
if ((prop.type === "Property" || prop.type === "ObjectProperty") && prop.key?.type === "Identifier" && prop.key.name === "messages") {
|
|
29
|
+
messagesProperty = prop;
|
|
30
|
+
} else {
|
|
31
|
+
otherProperties.push(prop);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
if (!messagesProperty) return;
|
|
35
|
+
const newArgs = [messagesProperty.value];
|
|
36
|
+
if (otherProperties.length > 0) {
|
|
37
|
+
newArgs.push(j.objectExpression(otherProperties));
|
|
38
|
+
}
|
|
39
|
+
path.value.arguments = newArgs;
|
|
40
|
+
context.hasChanges = true;
|
|
41
|
+
});
|
|
42
|
+
if (context.hasChanges) {
|
|
43
|
+
context.messages.push("Transformed MastraClient agent method calls to use messages as first argument");
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
export {
|
|
47
|
+
client_msg_function_args_default as default
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=client-msg-function-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/codemods/v1/client-msg-function-args.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\nimport { trackClassInstances, trackMethodCallResults, transformMethodCalls } from '../lib/utils';\n\n/**\n * Transforms MastraClient agent method calls from object with `messages` property\n * to having `messages` as the first argument:\n *\n * Before:\n * agent.generate({ messages: 'text', memory: {...} })\n * agent.stream({ messages: [...], memory: {...} })\n * agent.network({ messages: 'text', memory: {...} })\n *\n * After:\n * agent.generate('text', { memory: {...} })\n * agent.stream([...], { memory: {...} })\n * agent.network('text', { memory: {...} })\n */\nexport default createTransformer((_fileInfo, _api, _options, context) => {\n const { j, root } = context;\n\n // Track MastraClient instances\n const clientInstances = trackClassInstances(j, root, 'MastraClient');\n if (clientInstances.size === 0) return;\n\n // Track agent instances obtained from mastraClient.getAgent()\n const agentInstances = trackMethodCallResults(j, root, clientInstances, 'getAgent');\n if (agentInstances.size === 0) return;\n\n // Methods to transform\n const methodsToTransform = new Set(['generate', 'stream', 'network']);\n\n // Transform method calls on agent instances\n transformMethodCalls(j, root, agentInstances, undefined, path => {\n const { callee, arguments: args } = path.value;\n\n // Filter to only the methods we want to transform\n if (callee.property.type !== 'Identifier') return;\n if (!methodsToTransform.has(callee.property.name)) return;\n\n // Check if it has exactly one argument that is an ObjectExpression\n if (args.length !== 1) return;\n const firstArg = args[0];\n if (!firstArg || firstArg.type !== 'ObjectExpression') return;\n\n // Find the `messages` property and collect other properties\n let messagesProperty: any = null;\n const otherProperties: any[] = [];\n\n firstArg.properties?.forEach((prop: any) => {\n if (\n (prop.type === 'Property' || prop.type === 'ObjectProperty') &&\n prop.key?.type === 'Identifier' &&\n prop.key.name === 'messages'\n ) {\n messagesProperty = prop;\n } else {\n otherProperties.push(prop);\n }\n });\n\n // If no messages property found, skip\n if (!messagesProperty) return;\n\n // Build new arguments: (messagesValue, { ...otherProperties })\n const newArgs: any[] = [messagesProperty.value];\n\n // Only add the second object argument if there are other properties\n if (otherProperties.length > 0) {\n newArgs.push(j.objectExpression(otherProperties));\n }\n\n // Replace arguments\n path.value.arguments = newArgs;\n context.hasChanges = true;\n });\n\n if (context.hasChanges) {\n context.messages.push('Transformed MastraClient agent method calls to use messages as first argument');\n }\n});\n"],"mappings":";;;;;;;;;;AAiBA,IAAO,mCAAQ,kBAAkB,CAAC,WAAW,MAAM,UAAU,YAAY;AACvE,QAAM,EAAE,GAAG,KAAK,IAAI;AAGpB,QAAM,kBAAkB,oBAAoB,GAAG,MAAM,cAAc;AACnE,MAAI,gBAAgB,SAAS,EAAG;AAGhC,QAAM,iBAAiB,uBAAuB,GAAG,MAAM,iBAAiB,UAAU;AAClF,MAAI,eAAe,SAAS,EAAG;AAG/B,QAAM,qBAAqB,oBAAI,IAAI,CAAC,YAAY,UAAU,SAAS,CAAC;AAGpE,uBAAqB,GAAG,MAAM,gBAAgB,QAAW,UAAQ;AAC/D,UAAM,EAAE,QAAQ,WAAW,KAAK,IAAI,KAAK;AAGzC,QAAI,OAAO,SAAS,SAAS,aAAc;AAC3C,QAAI,CAAC,mBAAmB,IAAI,OAAO,SAAS,IAAI,EAAG;AAGnD,QAAI,KAAK,WAAW,EAAG;AACvB,UAAM,WAAW,KAAK,CAAC;AACvB,QAAI,CAAC,YAAY,SAAS,SAAS,mBAAoB;AAGvD,QAAI,mBAAwB;AAC5B,UAAM,kBAAyB,CAAC;AAEhC,aAAS,YAAY,QAAQ,CAAC,SAAc;AAC1C,WACG,KAAK,SAAS,cAAc,KAAK,SAAS,qBAC3C,KAAK,KAAK,SAAS,gBACnB,KAAK,IAAI,SAAS,YAClB;AACA,2BAAmB;AAAA,MACrB,OAAO;AACL,wBAAgB,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF,CAAC;AAGD,QAAI,CAAC,iBAAkB;AAGvB,UAAM,UAAiB,CAAC,iBAAiB,KAAK;AAG9C,QAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAQ,KAAK,EAAE,iBAAiB,eAAe,CAAC;AAAA,IAClD;AAGA,SAAK,MAAM,YAAY;AACvB,YAAQ,aAAa;AAAA,EACvB,CAAC;AAED,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,+EAA+E;AAAA,EACvG;AACF,CAAC;","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
trackClassInstances,
|
|
6
6
|
transformObjectProperties
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/client-offset-limit.ts
|
|
10
10
|
var client_offset_limit_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "../chunk-JNFQ6J6B.js";
|
|
4
4
|
import {
|
|
5
5
|
renameImportAndUsages
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-IW37ID7J.js";
|
|
7
7
|
|
|
8
8
|
// src/codemods/v1/client-to-ai-sdk-format.ts
|
|
9
9
|
var client_to_ai_sdk_format_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "../chunk-JNFQ6J6B.js";
|
|
4
4
|
import {
|
|
5
5
|
renameImportAndUsages
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-IW37ID7J.js";
|
|
7
7
|
|
|
8
8
|
// src/codemods/v1/evals-run-experiment.ts
|
|
9
9
|
var evals_run_experiment_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
renameMethod,
|
|
6
6
|
trackClassInstances
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/evals-scorer-by-name.ts
|
|
10
10
|
var evals_scorer_by_name_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
renameMethod,
|
|
6
6
|
trackClassInstances
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/memory-query-to-recall.ts
|
|
10
10
|
var memory_query_to_recall_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
trackClassInstances,
|
|
6
6
|
transformMethodCalls
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/memory-vector-search-param.ts
|
|
10
10
|
var memory_vector_search_param_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "../chunk-JNFQ6J6B.js";
|
|
4
4
|
import {
|
|
5
5
|
trackMultipleClassInstances
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-IW37ID7J.js";
|
|
7
7
|
|
|
8
8
|
// src/codemods/v1/storage-get-messages-paginated.ts
|
|
9
9
|
var storage_get_messages_paginated_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -2,19 +2,43 @@ import {
|
|
|
2
2
|
createTransformer
|
|
3
3
|
} from "../chunk-JNFQ6J6B.js";
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "../chunk-
|
|
5
|
+
trackMultipleClassInstances,
|
|
6
|
+
transformMethodCalls
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/storage-get-threads-by-resource.ts
|
|
10
10
|
var storage_get_threads_by_resource_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
11
11
|
const { j, root } = context;
|
|
12
12
|
const storeTypes = ["PostgresStore", "LibSQLStore", "PgStore", "DynamoDBStore", "MongoDBStore", "MSSQLStore"];
|
|
13
13
|
const storageInstances = trackMultipleClassInstances(j, root, storeTypes);
|
|
14
|
-
const count =
|
|
14
|
+
const count = transformMethodCalls(j, root, storageInstances, "getThreadsByResourceId", (path) => {
|
|
15
|
+
if (path.value.callee.type === "MemberExpression" && path.value.callee.property.type === "Identifier") {
|
|
16
|
+
path.value.callee.property.name = "listThreads";
|
|
17
|
+
}
|
|
18
|
+
const args = path.value.arguments;
|
|
19
|
+
if (args.length === 1 && args[0].type === "ObjectExpression") {
|
|
20
|
+
const objArg = args[0];
|
|
21
|
+
const properties = objArg.properties;
|
|
22
|
+
let resourceIdProp = null;
|
|
23
|
+
const otherProps = [];
|
|
24
|
+
properties.forEach((prop) => {
|
|
25
|
+
if ((prop.type === "ObjectProperty" || prop.type === "Property") && prop.key?.type === "Identifier" && prop.key.name === "resourceId") {
|
|
26
|
+
resourceIdProp = prop;
|
|
27
|
+
} else {
|
|
28
|
+
otherProps.push(prop);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (resourceIdProp && resourceIdProp.value) {
|
|
32
|
+
const filterProp = j.property("init", j.identifier("filter"), j.objectExpression([resourceIdProp]));
|
|
33
|
+
path.value.arguments = [j.objectExpression([filterProp, ...otherProps])];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
15
37
|
if (count > 0) {
|
|
16
38
|
context.hasChanges = true;
|
|
17
|
-
context.messages.push(
|
|
39
|
+
context.messages.push(
|
|
40
|
+
`Migrated ${count} getThreadsByResourceId call(s) to listThreads with filter wrapping on storage instances`
|
|
41
|
+
);
|
|
18
42
|
}
|
|
19
43
|
});
|
|
20
44
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/codemods/v1/storage-get-threads-by-resource.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\nimport { trackMultipleClassInstances,
|
|
1
|
+
{"version":3,"sources":["../../../src/codemods/v1/storage-get-threads-by-resource.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\nimport { trackMultipleClassInstances, transformMethodCalls } from '../lib/utils';\n\n/**\n * Migrates storage.getThreadsByResourceId() to storage.listThreads() with filter wrapping.\n *\n * Before:\n * const threads = await storage.getThreadsByResourceId({ resourceId: 'res-123' });\n *\n * After:\n * const threads = await storage.listThreads({ filter: { resourceId: 'res-123' }});\n */\nexport default createTransformer((_fileInfo, _api, _options, context) => {\n const { j, root } = context;\n\n const storeTypes = ['PostgresStore', 'LibSQLStore', 'PgStore', 'DynamoDBStore', 'MongoDBStore', 'MSSQLStore'];\n\n // Track all store instances in a single optimized pass\n const storageInstances = trackMultipleClassInstances(j, root, storeTypes);\n\n const count = transformMethodCalls(j, root, storageInstances, 'getThreadsByResourceId', path => {\n // Rename method to listThreads\n if (path.value.callee.type === 'MemberExpression' && path.value.callee.property.type === 'Identifier') {\n path.value.callee.property.name = 'listThreads';\n }\n\n // Wrap resourceId in filter object\n const args = path.value.arguments;\n if (args.length === 1 && args[0].type === 'ObjectExpression') {\n const objArg = args[0];\n const properties = objArg.properties;\n\n // Find the resourceId property\n let resourceIdProp: any = null;\n const otherProps: any[] = [];\n\n properties.forEach((prop: any) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'Property') &&\n prop.key?.type === 'Identifier' &&\n prop.key.name === 'resourceId'\n ) {\n resourceIdProp = prop;\n } else {\n otherProps.push(prop);\n }\n });\n\n if (resourceIdProp && resourceIdProp.value) {\n // Create the new filter object\n const filterProp = j.property('init', j.identifier('filter'), j.objectExpression([resourceIdProp]));\n\n // Update arguments with filter first, then other props\n path.value.arguments = [j.objectExpression([filterProp, ...otherProps])];\n }\n }\n });\n\n if (count > 0) {\n context.hasChanges = true;\n context.messages.push(\n `Migrated ${count} getThreadsByResourceId call(s) to listThreads with filter wrapping on storage instances`,\n );\n }\n});\n"],"mappings":";;;;;;;;;AAYA,IAAO,0CAAQ,kBAAkB,CAAC,WAAW,MAAM,UAAU,YAAY;AACvE,QAAM,EAAE,GAAG,KAAK,IAAI;AAEpB,QAAM,aAAa,CAAC,iBAAiB,eAAe,WAAW,iBAAiB,gBAAgB,YAAY;AAG5G,QAAM,mBAAmB,4BAA4B,GAAG,MAAM,UAAU;AAExE,QAAM,QAAQ,qBAAqB,GAAG,MAAM,kBAAkB,0BAA0B,UAAQ;AAE9F,QAAI,KAAK,MAAM,OAAO,SAAS,sBAAsB,KAAK,MAAM,OAAO,SAAS,SAAS,cAAc;AACrG,WAAK,MAAM,OAAO,SAAS,OAAO;AAAA,IACpC;AAGA,UAAM,OAAO,KAAK,MAAM;AACxB,QAAI,KAAK,WAAW,KAAK,KAAK,CAAC,EAAE,SAAS,oBAAoB;AAC5D,YAAM,SAAS,KAAK,CAAC;AACrB,YAAM,aAAa,OAAO;AAG1B,UAAI,iBAAsB;AAC1B,YAAM,aAAoB,CAAC;AAE3B,iBAAW,QAAQ,CAAC,SAAc;AAChC,aACG,KAAK,SAAS,oBAAoB,KAAK,SAAS,eACjD,KAAK,KAAK,SAAS,gBACnB,KAAK,IAAI,SAAS,cAClB;AACA,2BAAiB;AAAA,QACnB,OAAO;AACL,qBAAW,KAAK,IAAI;AAAA,QACtB;AAAA,MACF,CAAC;AAED,UAAI,kBAAkB,eAAe,OAAO;AAE1C,cAAM,aAAa,EAAE,SAAS,QAAQ,EAAE,WAAW,QAAQ,GAAG,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;AAGlG,aAAK,MAAM,YAAY,CAAC,EAAE,iBAAiB,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;AAAA,MACzE;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,QAAQ,GAAG;AACb,YAAQ,aAAa;AACrB,YAAQ,SAAS;AAAA,MACf,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
renameMethod,
|
|
6
6
|
trackMultipleClassInstances
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/storage-list-messages-by-id.ts
|
|
10
10
|
var storage_list_messages_by_id_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTransformer
|
|
3
|
+
} from "../chunk-JNFQ6J6B.js";
|
|
4
|
+
import {
|
|
5
|
+
trackClassInstances
|
|
6
|
+
} from "../chunk-IW37ID7J.js";
|
|
7
|
+
|
|
8
|
+
// src/codemods/v1/storage-list-threads-by-resource-to-list-threads.ts
|
|
9
|
+
var storage_list_threads_by_resource_to_list_threads_default = createTransformer((fileInfo, api, options, context) => {
|
|
10
|
+
const { j, root } = context;
|
|
11
|
+
const memoryInstances = trackClassInstances(j, root, "Memory", "@mastra/memory");
|
|
12
|
+
const potentialMemoryStores = /* @__PURE__ */ new Set();
|
|
13
|
+
root.find(j.VariableDeclarator).forEach((path) => {
|
|
14
|
+
if (path.value.id.type === "Identifier") {
|
|
15
|
+
const varName = path.value.id.name;
|
|
16
|
+
const init = path.value.init;
|
|
17
|
+
if (varName.toLowerCase().includes("memory")) {
|
|
18
|
+
if (init?.type !== "ObjectExpression") {
|
|
19
|
+
potentialMemoryStores.add(varName);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
const allMemoryInstances = /* @__PURE__ */ new Set([...memoryInstances, ...potentialMemoryStores]);
|
|
25
|
+
if (allMemoryInstances.size === 0) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
let changeCount = 0;
|
|
29
|
+
root.find(j.CallExpression, {
|
|
30
|
+
callee: {
|
|
31
|
+
type: "MemberExpression",
|
|
32
|
+
property: {
|
|
33
|
+
type: "Identifier",
|
|
34
|
+
name: "listThreadsByResourceId"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}).forEach((path) => {
|
|
38
|
+
const { callee } = path.value;
|
|
39
|
+
if (callee.type !== "MemberExpression") return;
|
|
40
|
+
if (callee.object.type !== "Identifier") return;
|
|
41
|
+
if (!allMemoryInstances.has(callee.object.name)) return;
|
|
42
|
+
const args = path.value.arguments;
|
|
43
|
+
if (args.length !== 1 || args[0]?.type !== "ObjectExpression") {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const objArg = args[0];
|
|
47
|
+
const properties = objArg.properties;
|
|
48
|
+
let resourceIdProp = null;
|
|
49
|
+
const otherProps = [];
|
|
50
|
+
properties.forEach((prop) => {
|
|
51
|
+
if ((prop.type === "ObjectProperty" || prop.type === "Property") && prop.key?.type === "Identifier" && prop.key.name === "resourceId") {
|
|
52
|
+
resourceIdProp = prop;
|
|
53
|
+
} else {
|
|
54
|
+
otherProps.push(prop);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (!resourceIdProp || !resourceIdProp.value) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const filterProp = j.property(
|
|
61
|
+
"init",
|
|
62
|
+
j.identifier("filter"),
|
|
63
|
+
j.objectExpression([j.property("init", j.identifier("resourceId"), resourceIdProp.value)])
|
|
64
|
+
);
|
|
65
|
+
if (path.value.callee.type === "MemberExpression" && path.value.callee.property.type === "Identifier") {
|
|
66
|
+
path.value.callee.property.name = "listThreads";
|
|
67
|
+
}
|
|
68
|
+
path.value.arguments = [j.objectExpression([filterProp, ...otherProps])];
|
|
69
|
+
changeCount++;
|
|
70
|
+
});
|
|
71
|
+
if (changeCount > 0) {
|
|
72
|
+
context.hasChanges = true;
|
|
73
|
+
context.messages.push(
|
|
74
|
+
`Migrated ${changeCount} listThreadsByResourceId call(s) to listThreads with filter wrapping`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
export {
|
|
79
|
+
storage_list_threads_by_resource_to_list_threads_default as default
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=storage-list-threads-by-resource-to-list-threads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/codemods/v1/storage-list-threads-by-resource-to-list-threads.ts"],"sourcesContent":["import type { API, FileInfo, Options } from 'jscodeshift';\nimport { createTransformer } from '../lib/create-transformer';\nimport { trackClassInstances } from '../lib/utils';\n\n/**\n * Migrates from listThreadsByResourceId() to listThreads() with filter wrapping.\n * Only transforms calls on tracked Memory instances to avoid false positives.\n *\n * Before:\n * await memory.listThreadsByResourceId({\n * resourceId: 'user-123',\n * page: 0,\n * perPage: 10\n * });\n *\n * After:\n * await memory.listThreads({\n * filter: { resourceId: 'user-123' },\n * page: 0,\n * perPage: 10\n * });\n */\nexport default createTransformer((fileInfo: FileInfo, api: API, options: Options, context) => {\n const { j, root } = context;\n\n // Track Memory class instances (including aliased imports like `import { Memory as AliasedMemory }`)\n const memoryInstances = trackClassInstances(j, root, 'Memory', '@mastra/memory');\n\n // Also track variables assigned from methods that might return memory stores\n // e.g., const memoryStore = await storage.getStore('memory');\n const potentialMemoryStores = new Set<string>();\n\n root.find(j.VariableDeclarator).forEach(path => {\n if (path.value.id.type === 'Identifier') {\n const varName = path.value.id.name;\n const init = path.value.init;\n\n // Track variables with 'memory' or 'memoryStore' in the name as likely Memory instances\n if (varName.toLowerCase().includes('memory')) {\n // But NOT if it's an object literal (which would be our negative test case)\n if (init?.type !== 'ObjectExpression') {\n potentialMemoryStores.add(varName);\n }\n }\n }\n });\n\n // Combine both sets\n const allMemoryInstances = new Set([...memoryInstances, ...potentialMemoryStores]);\n\n // Early return if no instances found\n if (allMemoryInstances.size === 0) {\n return;\n }\n\n let changeCount = 0;\n\n // Find and transform listThreadsByResourceId() calls on tracked instances\n root\n .find(j.CallExpression, {\n callee: {\n type: 'MemberExpression',\n property: {\n type: 'Identifier',\n name: 'listThreadsByResourceId',\n },\n },\n })\n .forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n\n // Only process if called on a tracked instance\n if (!allMemoryInstances.has(callee.object.name)) return;\n\n const args = path.value.arguments;\n if (args.length !== 1 || args[0]?.type !== 'ObjectExpression') {\n return;\n }\n\n const objArg = args[0];\n const properties = objArg.properties;\n\n // Find the resourceId property\n let resourceIdProp: any = null;\n const otherProps: any[] = [];\n\n properties.forEach((prop: any) => {\n if (\n (prop.type === 'ObjectProperty' || prop.type === 'Property') &&\n prop.key?.type === 'Identifier' &&\n prop.key.name === 'resourceId'\n ) {\n resourceIdProp = prop;\n } else {\n otherProps.push(prop);\n }\n });\n\n if (!resourceIdProp || !resourceIdProp.value) {\n return;\n }\n\n // Create the new filter object\n const filterProp = j.property(\n 'init',\n j.identifier('filter'),\n j.objectExpression([j.property('init', j.identifier('resourceId'), resourceIdProp.value as any)]),\n );\n\n // Update the method name\n if (path.value.callee.type === 'MemberExpression' && path.value.callee.property.type === 'Identifier') {\n path.value.callee.property.name = 'listThreads';\n }\n\n // Update the arguments with filter first, then other props\n path.value.arguments = [j.objectExpression([filterProp, ...otherProps])];\n\n changeCount++;\n });\n\n if (changeCount > 0) {\n context.hasChanges = true;\n context.messages.push(\n `Migrated ${changeCount} listThreadsByResourceId call(s) to listThreads with filter wrapping`,\n );\n }\n});\n"],"mappings":";;;;;;;;AAsBA,IAAO,2DAAQ,kBAAkB,CAAC,UAAoB,KAAU,SAAkB,YAAY;AAC5F,QAAM,EAAE,GAAG,KAAK,IAAI;AAGpB,QAAM,kBAAkB,oBAAoB,GAAG,MAAM,UAAU,gBAAgB;AAI/E,QAAM,wBAAwB,oBAAI,IAAY;AAE9C,OAAK,KAAK,EAAE,kBAAkB,EAAE,QAAQ,UAAQ;AAC9C,QAAI,KAAK,MAAM,GAAG,SAAS,cAAc;AACvC,YAAM,UAAU,KAAK,MAAM,GAAG;AAC9B,YAAM,OAAO,KAAK,MAAM;AAGxB,UAAI,QAAQ,YAAY,EAAE,SAAS,QAAQ,GAAG;AAE5C,YAAI,MAAM,SAAS,oBAAoB;AACrC,gCAAsB,IAAI,OAAO;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,qBAAqB,oBAAI,IAAI,CAAC,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;AAGjF,MAAI,mBAAmB,SAAS,GAAG;AACjC;AAAA,EACF;AAEA,MAAI,cAAc;AAGlB,OACG,KAAK,EAAE,gBAAgB;AAAA,IACtB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF,CAAC,EACA,QAAQ,UAAQ;AACf,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAI,OAAO,SAAS,mBAAoB;AACxC,QAAI,OAAO,OAAO,SAAS,aAAc;AAGzC,QAAI,CAAC,mBAAmB,IAAI,OAAO,OAAO,IAAI,EAAG;AAEjD,UAAM,OAAO,KAAK,MAAM;AACxB,QAAI,KAAK,WAAW,KAAK,KAAK,CAAC,GAAG,SAAS,oBAAoB;AAC7D;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,CAAC;AACrB,UAAM,aAAa,OAAO;AAG1B,QAAI,iBAAsB;AAC1B,UAAM,aAAoB,CAAC;AAE3B,eAAW,QAAQ,CAAC,SAAc;AAChC,WACG,KAAK,SAAS,oBAAoB,KAAK,SAAS,eACjD,KAAK,KAAK,SAAS,gBACnB,KAAK,IAAI,SAAS,cAClB;AACA,yBAAiB;AAAA,MACnB,OAAO;AACL,mBAAW,KAAK,IAAI;AAAA,MACtB;AAAA,IACF,CAAC;AAED,QAAI,CAAC,kBAAkB,CAAC,eAAe,OAAO;AAC5C;AAAA,IACF;AAGA,UAAM,aAAa,EAAE;AAAA,MACnB;AAAA,MACA,EAAE,WAAW,QAAQ;AAAA,MACrB,EAAE,iBAAiB,CAAC,EAAE,SAAS,QAAQ,EAAE,WAAW,YAAY,GAAG,eAAe,KAAY,CAAC,CAAC;AAAA,IAClG;AAGA,QAAI,KAAK,MAAM,OAAO,SAAS,sBAAsB,KAAK,MAAM,OAAO,SAAS,SAAS,cAAc;AACrG,WAAK,MAAM,OAAO,SAAS,OAAO;AAAA,IACpC;AAGA,SAAK,MAAM,YAAY,CAAC,EAAE,iBAAiB,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;AAEvE;AAAA,EACF,CAAC;AAEH,MAAI,cAAc,GAAG;AACnB,YAAQ,aAAa;AACrB,YAAQ,SAAS;AAAA,MACf,YAAY,WAAW;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
renameMethod,
|
|
6
6
|
trackMultipleClassInstances
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/storage-list-workflow-runs.ts
|
|
10
10
|
var storage_list_workflow_runs_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "../chunk-JNFQ6J6B.js";
|
|
4
4
|
import {
|
|
5
5
|
transformConstructorProperties
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-IW37ID7J.js";
|
|
7
7
|
|
|
8
8
|
// src/codemods/v1/storage-postgres-schema-name.ts
|
|
9
9
|
var storage_postgres_schema_name_default = createTransformer((_fileInfo, _api, _options, context) => {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
renameMethod,
|
|
6
6
|
trackClassInstances
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IW37ID7J.js";
|
|
8
8
|
|
|
9
9
|
// src/codemods/v1/workflow-create-run-async.ts
|
|
10
10
|
var workflow_create_run_async_default = createTransformer((_fileInfo, _api, _options, context) => {
|
package/dist/index.js
CHANGED
|
@@ -125,7 +125,9 @@ var BUNDLE = [
|
|
|
125
125
|
"v1/storage-postgres-schema-name",
|
|
126
126
|
"v1/storage-get-messages-paginated",
|
|
127
127
|
"v1/storage-list-workflow-runs",
|
|
128
|
-
"v1/
|
|
128
|
+
"v1/storage-list-threads-by-resource-to-list-threads",
|
|
129
|
+
"v1/vector-pg-constructor",
|
|
130
|
+
"v1/client-msg-function-args"
|
|
129
131
|
];
|
|
130
132
|
|
|
131
133
|
// src/lib/upgrade.ts
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/transform.ts","../src/lib/bundle.ts","../src/lib/upgrade.ts","../src/index.ts"],"names":["transform","log","debug","error"],"mappings":"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","file":"index.js","sourcesContent":["import child_process from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport util from 'node:util';\nimport debug from 'debug';\n\nconst exec = util.promisify(child_process.exec);\n\ninterface TransformOptions {\n dry?: boolean;\n print?: boolean;\n verbose?: boolean;\n jscodeshift?: string;\n}\n\nconst log = debug('codemod:transform');\nconst error = debug('codemod:transform:error');\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nfunction getJscodeshift(): string {\n const localJscodeshift = path.resolve(__dirname, '../node_modules/.bin/jscodeshift');\n return fs.existsSync(localJscodeshift) ? localJscodeshift : 'jscodeshift';\n}\n\nfunction buildCommand(codemodPath: string, targetPath: string, jscodeshift: string, options: TransformOptions): string {\n // Ignoring everything under `.*/` covers `.mastra/` along with any other\n // framework build related or otherwise intended-to-be-hidden directories.\n let command = `${jscodeshift} -t ${codemodPath} ${targetPath} \\\n --parser tsx \\\n --ignore-pattern=\"**/node_modules/**\" \\\n --ignore-pattern=\"**/.*/**\" \\\n --ignore-pattern=\"**/dist/**\" \\\n --ignore-pattern=\"**/build/**\" \\\n --ignore-pattern=\"**/*.min.js\" \\\n --ignore-pattern=\"**/*.bundle.js\"`;\n\n if (options.dry) {\n command += ' --dry';\n }\n\n if (options.print) {\n command += ' --print';\n }\n\n if (options.verbose) {\n command += ' --verbose';\n }\n\n if (options.jscodeshift) {\n command += ` ${options.jscodeshift}`;\n }\n\n return command;\n}\n\nexport type TransformErrors = {\n transform: string;\n filename: string;\n summary: string;\n}[];\n\nfunction parseErrors(transform: string, output: string): TransformErrors {\n const errors: TransformErrors = [];\n const errorRegex = /ERR (.+) Transformation error/g;\n const syntaxErrorRegex = /SyntaxError: .+/g;\n\n let match;\n while ((match = errorRegex.exec(output)) !== null) {\n const filename = match[1]!;\n const syntaxErrorMatch = syntaxErrorRegex.exec(output);\n if (syntaxErrorMatch) {\n const summary = syntaxErrorMatch[0];\n errors.push({ transform, filename, summary });\n }\n }\n\n return errors;\n}\n\nfunction parseNotImplementedErrors(transform: string, output: string): TransformErrors {\n const notImplementedErrors: TransformErrors = [];\n const notImplementedRegex = /Not Implemented (.+): (.+)/g;\n\n let match;\n while ((match = notImplementedRegex.exec(output)) !== null) {\n const filename = match[1]!;\n const summary = match[2]!;\n notImplementedErrors.push({ transform, filename, summary });\n }\n\n return notImplementedErrors;\n}\n\nexport async function transform(\n codemod: string,\n source: string,\n transformOptions: TransformOptions,\n options: { logStatus: boolean } = { logStatus: true },\n): Promise<{ errors: TransformErrors; notImplementedErrors: TransformErrors }> {\n if (options.logStatus) {\n log(`Applying codemod '${codemod}': ${source}`);\n }\n const codemodPath = path.resolve(__dirname, `./codemods/${codemod}.js`);\n const targetPath = path.resolve(source);\n const jscodeshift = getJscodeshift();\n const command = buildCommand(codemodPath, targetPath, jscodeshift, transformOptions);\n const { stdout } = await exec(command, { encoding: 'utf8' });\n const errors = parseErrors(codemod, stdout);\n const notImplementedErrors = parseNotImplementedErrors(codemod, stdout);\n if (options.logStatus) {\n if (errors.length > 0) {\n errors.forEach(({ transform, filename, summary }) => {\n error(`Error applying codemod [codemod=${transform}, path=${filename}, summary=${summary}]`);\n });\n }\n\n if (notImplementedErrors.length > 0) {\n log(\n `Some files require manual changes. Please search your codebase for \\`FIXME(mastra): \\` comments and follow the instructions to complete the upgrade.`,\n );\n notImplementedErrors.forEach(({ transform, filename, summary }) => {\n log(`Not Implemented [codemod=${transform}, path=${filename}, summary=${summary}]`);\n });\n }\n }\n\n return { errors, notImplementedErrors };\n}\n","// List of all codemods\nexport const BUNDLE = [\n 'v1/mastra-core-imports',\n 'v1/runtime-context',\n 'v1/mastra-plural-apis',\n 'v1/not-implemented/mastra-required-id',\n 'v1/agent-property-access',\n 'v1/agent-voice',\n 'v1/agent-processor-methods',\n 'v1/agent-generate-stream-v-next',\n 'v1/agent-abort-signal',\n 'v1/not-implemented/agent-format-parameter',\n 'v1/not-implemented/agent-to-step',\n 'v1/voice-property-names',\n 'v1/mcp-get-tools',\n 'v1/mcp-get-toolsets',\n 'v1/client-sdk-types',\n 'v1/client-to-ai-sdk-format',\n 'v1/client-offset-limit',\n 'v1/client-get-memory-thread',\n 'v1/experimental-auth',\n 'v1/evals-run-experiment',\n 'v1/evals-scorer-by-name',\n 'v1/evals-prebuilt-imports',\n 'v1/workflow-create-run-async',\n 'v1/workflow-run-count',\n 'v1/workflow-list-runs',\n 'v1/workflow-stream-vnext',\n 'v1/memory-query-to-recall',\n 'v1/memory-vector-search-param',\n 'v1/memory-message-v2-type',\n 'v1/memory-readonly-to-options',\n 'v1/storage-get-threads-by-resource',\n 'v1/storage-list-messages-by-id',\n 'v1/storage-postgres-schema-name',\n 'v1/storage-get-messages-paginated',\n 'v1/storage-list-workflow-runs',\n 'v1/vector-pg-constructor',\n];\n","import { spinner, intro, outro } from '@clack/prompts';\nimport debug from 'debug';\nimport { BUNDLE } from './bundle';\nimport type { TransformErrors } from './transform';\nimport { transform } from './transform';\n\ninterface TransformOptions {\n dry?: true;\n print?: true;\n verbose?: true;\n jscodeshift?: string;\n}\n\nconst log = debug('codemod:upgrade');\nconst error = debug('codemod:upgrade:error');\n\n// Extract v1 codemods from the bundle\nconst v1Bundle = BUNDLE.filter(codemod => codemod.startsWith('v1/'));\n\nasync function runCodemods(codemods: string[], options: TransformOptions, versionLabel: string) {\n const cwd = process.cwd();\n intro(`Starting ${versionLabel} codemods`);\n const modCount = codemods.length;\n const s = spinner();\n\n s.start(`Running ${modCount} ${versionLabel} codemods`);\n\n const allErrors: TransformErrors = [];\n let notImplementedAvailable = false;\n let count = 0;\n for (const [_, codemod] of codemods.entries()) {\n const { errors, notImplementedErrors } = await transform(codemod, cwd, options, {\n logStatus: false,\n });\n allErrors.push(...errors);\n if (notImplementedErrors.length > 0) {\n notImplementedAvailable = true;\n }\n count++;\n s.message(`Codemod ${count}/${modCount} (${codemod})`);\n }\n s.stop(`Ran ${count}/${modCount} codemods.`);\n\n if (allErrors.length > 0) {\n log(`Some ${versionLabel} codemods did not apply successfully to all files. Details:`);\n allErrors.forEach(({ transform, filename, summary }) => {\n error(`codemod=${transform}, path=${filename}, summary=${summary}`);\n });\n }\n\n if (notImplementedAvailable) {\n log(\n `Some ${versionLabel} codemods require manual changes. Please search your codebase for \\`FIXME(mastra): \\` comments and follow the instructions to complete the upgrade.`,\n );\n }\n\n outro(`${versionLabel} codemods complete.`);\n}\n\nexport async function upgradeV1(options: TransformOptions) {\n await runCodemods(v1Bundle, options, 'v1');\n}\n","#! /usr/bin/env node\n\nimport { Command } from 'commander';\nimport debug from 'debug';\nimport { transform } from './lib/transform';\nimport { upgradeV1 } from './lib/upgrade';\n\nconst error = debug('codemod:error');\ndebug.enable('codemod:*');\n\nconst program = new Command();\n\nprogram\n .name('codemod')\n .description('CLI for running Mastra codemods')\n .argument('<codemod>', 'Codemod to run')\n .argument('<source>', 'Path to source files or directory')\n .option('-d, --dry', 'Dry run (no changes are made to files)')\n .option('-p, --print', 'Print transformed files to stdout')\n .option('--verbose', 'Show more information about the transform process')\n .option('-j, --jscodeshift <options>', 'Pass options directly to jscodeshift')\n .action(async (codemod, source, options) => {\n try {\n await transform(codemod, source, options);\n } catch (err: any) {\n error(`Error transforming: ${err}`);\n process.exit(1);\n }\n });\n\nprogram\n .command('v1')\n .description('Apply all v1 codemods (v0.x to v1)')\n .option('-d, --dry', 'Dry run (no changes are made to files)')\n .option('-p, --print', 'Print transformed files to stdout')\n .option('--verbose', 'Show more information about the transform process')\n .option('-j, --jscodeshift <options>', 'Pass options directly to jscodeshift')\n .action(async options => {\n try {\n await upgradeV1(options);\n } catch (err: any) {\n error(`Error transforming: ${err}`);\n process.exit(1);\n }\n });\n\nprogram.parse(process.argv);\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/transform.ts","../src/lib/bundle.ts","../src/lib/upgrade.ts","../src/index.ts"],"names":["transform","log","debug","error"],"mappings":"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","file":"index.js","sourcesContent":["import child_process from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport util from 'node:util';\nimport debug from 'debug';\n\nconst exec = util.promisify(child_process.exec);\n\ninterface TransformOptions {\n dry?: boolean;\n print?: boolean;\n verbose?: boolean;\n jscodeshift?: string;\n}\n\nconst log = debug('codemod:transform');\nconst error = debug('codemod:transform:error');\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nfunction getJscodeshift(): string {\n const localJscodeshift = path.resolve(__dirname, '../node_modules/.bin/jscodeshift');\n return fs.existsSync(localJscodeshift) ? localJscodeshift : 'jscodeshift';\n}\n\nfunction buildCommand(codemodPath: string, targetPath: string, jscodeshift: string, options: TransformOptions): string {\n // Ignoring everything under `.*/` covers `.mastra/` along with any other\n // framework build related or otherwise intended-to-be-hidden directories.\n let command = `${jscodeshift} -t ${codemodPath} ${targetPath} \\\n --parser tsx \\\n --ignore-pattern=\"**/node_modules/**\" \\\n --ignore-pattern=\"**/.*/**\" \\\n --ignore-pattern=\"**/dist/**\" \\\n --ignore-pattern=\"**/build/**\" \\\n --ignore-pattern=\"**/*.min.js\" \\\n --ignore-pattern=\"**/*.bundle.js\"`;\n\n if (options.dry) {\n command += ' --dry';\n }\n\n if (options.print) {\n command += ' --print';\n }\n\n if (options.verbose) {\n command += ' --verbose';\n }\n\n if (options.jscodeshift) {\n command += ` ${options.jscodeshift}`;\n }\n\n return command;\n}\n\nexport type TransformErrors = {\n transform: string;\n filename: string;\n summary: string;\n}[];\n\nfunction parseErrors(transform: string, output: string): TransformErrors {\n const errors: TransformErrors = [];\n const errorRegex = /ERR (.+) Transformation error/g;\n const syntaxErrorRegex = /SyntaxError: .+/g;\n\n let match;\n while ((match = errorRegex.exec(output)) !== null) {\n const filename = match[1]!;\n const syntaxErrorMatch = syntaxErrorRegex.exec(output);\n if (syntaxErrorMatch) {\n const summary = syntaxErrorMatch[0];\n errors.push({ transform, filename, summary });\n }\n }\n\n return errors;\n}\n\nfunction parseNotImplementedErrors(transform: string, output: string): TransformErrors {\n const notImplementedErrors: TransformErrors = [];\n const notImplementedRegex = /Not Implemented (.+): (.+)/g;\n\n let match;\n while ((match = notImplementedRegex.exec(output)) !== null) {\n const filename = match[1]!;\n const summary = match[2]!;\n notImplementedErrors.push({ transform, filename, summary });\n }\n\n return notImplementedErrors;\n}\n\nexport async function transform(\n codemod: string,\n source: string,\n transformOptions: TransformOptions,\n options: { logStatus: boolean } = { logStatus: true },\n): Promise<{ errors: TransformErrors; notImplementedErrors: TransformErrors }> {\n if (options.logStatus) {\n log(`Applying codemod '${codemod}': ${source}`);\n }\n const codemodPath = path.resolve(__dirname, `./codemods/${codemod}.js`);\n const targetPath = path.resolve(source);\n const jscodeshift = getJscodeshift();\n const command = buildCommand(codemodPath, targetPath, jscodeshift, transformOptions);\n const { stdout } = await exec(command, { encoding: 'utf8' });\n const errors = parseErrors(codemod, stdout);\n const notImplementedErrors = parseNotImplementedErrors(codemod, stdout);\n if (options.logStatus) {\n if (errors.length > 0) {\n errors.forEach(({ transform, filename, summary }) => {\n error(`Error applying codemod [codemod=${transform}, path=${filename}, summary=${summary}]`);\n });\n }\n\n if (notImplementedErrors.length > 0) {\n log(\n `Some files require manual changes. Please search your codebase for \\`FIXME(mastra): \\` comments and follow the instructions to complete the upgrade.`,\n );\n notImplementedErrors.forEach(({ transform, filename, summary }) => {\n log(`Not Implemented [codemod=${transform}, path=${filename}, summary=${summary}]`);\n });\n }\n }\n\n return { errors, notImplementedErrors };\n}\n","// List of all codemods\nexport const BUNDLE = [\n 'v1/mastra-core-imports',\n 'v1/runtime-context',\n 'v1/mastra-plural-apis',\n 'v1/not-implemented/mastra-required-id',\n 'v1/agent-property-access',\n 'v1/agent-voice',\n 'v1/agent-processor-methods',\n 'v1/agent-generate-stream-v-next',\n 'v1/agent-abort-signal',\n 'v1/not-implemented/agent-format-parameter',\n 'v1/not-implemented/agent-to-step',\n 'v1/voice-property-names',\n 'v1/mcp-get-tools',\n 'v1/mcp-get-toolsets',\n 'v1/client-sdk-types',\n 'v1/client-to-ai-sdk-format',\n 'v1/client-offset-limit',\n 'v1/client-get-memory-thread',\n 'v1/experimental-auth',\n 'v1/evals-run-experiment',\n 'v1/evals-scorer-by-name',\n 'v1/evals-prebuilt-imports',\n 'v1/workflow-create-run-async',\n 'v1/workflow-run-count',\n 'v1/workflow-list-runs',\n 'v1/workflow-stream-vnext',\n 'v1/memory-query-to-recall',\n 'v1/memory-vector-search-param',\n 'v1/memory-message-v2-type',\n 'v1/memory-readonly-to-options',\n 'v1/storage-get-threads-by-resource',\n 'v1/storage-list-messages-by-id',\n 'v1/storage-postgres-schema-name',\n 'v1/storage-get-messages-paginated',\n 'v1/storage-list-workflow-runs',\n 'v1/storage-list-threads-by-resource-to-list-threads',\n 'v1/vector-pg-constructor',\n 'v1/client-msg-function-args',\n];\n","import { spinner, intro, outro } from '@clack/prompts';\nimport debug from 'debug';\nimport { BUNDLE } from './bundle';\nimport type { TransformErrors } from './transform';\nimport { transform } from './transform';\n\ninterface TransformOptions {\n dry?: true;\n print?: true;\n verbose?: true;\n jscodeshift?: string;\n}\n\nconst log = debug('codemod:upgrade');\nconst error = debug('codemod:upgrade:error');\n\n// Extract v1 codemods from the bundle\nconst v1Bundle = BUNDLE.filter(codemod => codemod.startsWith('v1/'));\n\nasync function runCodemods(codemods: string[], options: TransformOptions, versionLabel: string) {\n const cwd = process.cwd();\n intro(`Starting ${versionLabel} codemods`);\n const modCount = codemods.length;\n const s = spinner();\n\n s.start(`Running ${modCount} ${versionLabel} codemods`);\n\n const allErrors: TransformErrors = [];\n let notImplementedAvailable = false;\n let count = 0;\n for (const [_, codemod] of codemods.entries()) {\n const { errors, notImplementedErrors } = await transform(codemod, cwd, options, {\n logStatus: false,\n });\n allErrors.push(...errors);\n if (notImplementedErrors.length > 0) {\n notImplementedAvailable = true;\n }\n count++;\n s.message(`Codemod ${count}/${modCount} (${codemod})`);\n }\n s.stop(`Ran ${count}/${modCount} codemods.`);\n\n if (allErrors.length > 0) {\n log(`Some ${versionLabel} codemods did not apply successfully to all files. Details:`);\n allErrors.forEach(({ transform, filename, summary }) => {\n error(`codemod=${transform}, path=${filename}, summary=${summary}`);\n });\n }\n\n if (notImplementedAvailable) {\n log(\n `Some ${versionLabel} codemods require manual changes. Please search your codebase for \\`FIXME(mastra): \\` comments and follow the instructions to complete the upgrade.`,\n );\n }\n\n outro(`${versionLabel} codemods complete.`);\n}\n\nexport async function upgradeV1(options: TransformOptions) {\n await runCodemods(v1Bundle, options, 'v1');\n}\n","#! /usr/bin/env node\n\nimport { Command } from 'commander';\nimport debug from 'debug';\nimport { transform } from './lib/transform';\nimport { upgradeV1 } from './lib/upgrade';\n\nconst error = debug('codemod:error');\ndebug.enable('codemod:*');\n\nconst program = new Command();\n\nprogram\n .name('codemod')\n .description('CLI for running Mastra codemods')\n .argument('<codemod>', 'Codemod to run')\n .argument('<source>', 'Path to source files or directory')\n .option('-d, --dry', 'Dry run (no changes are made to files)')\n .option('-p, --print', 'Print transformed files to stdout')\n .option('--verbose', 'Show more information about the transform process')\n .option('-j, --jscodeshift <options>', 'Pass options directly to jscodeshift')\n .action(async (codemod, source, options) => {\n try {\n await transform(codemod, source, options);\n } catch (err: any) {\n error(`Error transforming: ${err}`);\n process.exit(1);\n }\n });\n\nprogram\n .command('v1')\n .description('Apply all v1 codemods (v0.x to v1)')\n .option('-d, --dry', 'Dry run (no changes are made to files)')\n .option('-p, --print', 'Print transformed files to stdout')\n .option('--verbose', 'Show more information about the transform process')\n .option('-j, --jscodeshift <options>', 'Pass options directly to jscodeshift')\n .action(async options => {\n try {\n await upgradeV1(options);\n } catch (err: any) {\n error(`Error transforming: ${err}`);\n process.exit(1);\n }\n });\n\nprogram.parse(process.argv);\n"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/codemods/lib/utils.ts"],"sourcesContent":["// Shared utility functions for codemods\n\nimport type { Collection, JSCodeshift } from 'jscodeshift';\n\n/**\n * Efficiently tracks instances of a specific class by finding all `new ClassName()` expressions\n * and extracting the variable names they're assigned to.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param className - Name of the class to track\n * @returns Set of variable names that are instances of the class\n */\nexport function trackClassInstances(j: JSCodeshift, root: Collection<any>, className: string): Set<string> {\n const instances = new Set<string>();\n\n root\n .find(j.NewExpression, {\n callee: {\n type: 'Identifier',\n name: className,\n },\n })\n .forEach(path => {\n const parent = path.parent.value;\n if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n instances.add(parent.id.name);\n }\n });\n\n return instances;\n}\n\n/**\n * Efficiently tracks instances of multiple classes in a single pass.\n * This is optimized for codemods that need to track several store types or class variants.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param classNames - Array of class names to track\n * @returns Set of variable names that are instances of any of the classes\n */\nexport function trackMultipleClassInstances(j: JSCodeshift, root: Collection<any>, classNames: string[]): Set<string> {\n const instances = new Set<string>();\n const classNameSet = new Set(classNames);\n\n root.find(j.NewExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'Identifier') return;\n if (!classNameSet.has(callee.name)) return;\n\n const parent = path.parent.value;\n if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n instances.add(parent.id.name);\n }\n });\n\n return instances;\n}\n\n/**\n * Efficiently finds and transforms method calls on tracked instances.\n * This combines finding, filtering, and transforming in a single pass.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param instances - Set of instance variable names to track\n * @param methodName - Name of the method to find (or undefined to match any method)\n * @param transform - Callback to transform matching call expressions\n * @returns Number of transformations made\n */\nexport function transformMethodCalls(\n j: JSCodeshift,\n root: Collection<any>,\n instances: Set<string>,\n methodName: string | undefined,\n transform: (path: any) => void,\n): number {\n if (instances.size === 0) return 0;\n\n let count = 0;\n\n root.find(j.CallExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n if (callee.property.type !== 'Identifier') return;\n\n // Only process if called on a tracked instance\n if (!instances.has(callee.object.name)) return;\n\n // Only process if it's the method we want (or any method if undefined)\n if (methodName && callee.property.name !== methodName) return;\n\n transform(path);\n count++;\n });\n\n return count;\n}\n\n/**\n * Renames a method on tracked instances efficiently in a single pass.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param instances - Set of instance variable names to track\n * @param oldMethodName - Current method name\n * @param newMethodName - New method name\n * @returns Number of renames performed\n */\nexport function renameMethod(\n j: JSCodeshift,\n root: Collection<any>,\n instances: Set<string>,\n oldMethodName: string,\n newMethodName: string,\n): number {\n if (instances.size === 0) return 0;\n\n let count = 0;\n\n root.find(j.CallExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n if (callee.property.type !== 'Identifier') return;\n\n // Only process if called on tracked instance\n if (!instances.has(callee.object.name)) return;\n\n // Only process if it's the method we want to rename\n if (callee.property.name !== oldMethodName) return;\n\n callee.property.name = newMethodName;\n count++;\n });\n\n return count;\n}\n\n/**\n * Renames multiple methods on tracked instances in a single pass.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param instances - Set of instance variable names to track\n * @param methodRenames - Map of old method names to new method names\n * @returns Number of renames performed\n */\nexport function renameMethods(\n j: JSCodeshift,\n root: Collection<any>,\n instances: Set<string>,\n methodRenames: Record<string, string>,\n): number {\n if (instances.size === 0) return 0;\n\n let count = 0;\n\n root.find(j.CallExpression).forEach(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return;\n if (callee.object.type !== 'Identifier') return;\n if (callee.property.type !== 'Identifier') return;\n\n // Only process if called on tracked instance\n if (!instances.has(callee.object.name)) return;\n\n // Check if this is one of the methods we want to rename\n const oldName = callee.property.name;\n const newName = methodRenames[oldName];\n\n if (newName) {\n callee.property.name = newName;\n count++;\n }\n });\n\n return count;\n}\n\n/**\n * Transforms object properties in method call arguments.\n * This is a helper for codemods that need to rename properties in object arguments.\n *\n * @param obj - Object expression to transform\n * @param propertyRenames - Map of old property names to new property names\n * @returns Number of properties renamed\n */\nexport function transformObjectProperties(obj: any, propertyRenames: Record<string, string>): number {\n let count = 0;\n\n const recurse = (o: any) => {\n if (!o.properties) return;\n\n o.properties.forEach((prop: any) => {\n if ((prop.type === 'Property' || prop.type === 'ObjectProperty') && prop.key?.type === 'Identifier') {\n const oldName = prop.key.name;\n const newName = propertyRenames[oldName];\n\n if (newName) {\n prop.key.name = newName;\n count++;\n }\n\n // Recursively transform nested objects\n if (prop.value?.type === 'ObjectExpression') {\n recurse(prop.value);\n }\n }\n });\n };\n\n recurse(obj);\n return count;\n}\n\n/**\n * Checks if a node is a member expression accessing a specific property on tracked instances.\n *\n * @param node - AST node to check\n * @param instances - Set of instance variable names to track\n * @param propertyName - Property name to match (or undefined to match any property)\n * @returns true if the node matches\n */\nexport function isMemberExpressionOnInstance(node: any, instances: Set<string>, propertyName?: string): boolean {\n if (node.type !== 'MemberExpression') return false;\n if (node.object.type !== 'Identifier') return false;\n if (!instances.has(node.object.name)) return false;\n\n if (propertyName && node.property.type === 'Identifier' && node.property.name !== propertyName) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Renames an import and all its usages in a single optimized pass.\n * Handles aliased imports correctly - only transforms usages for non-aliased imports.\n * Handles multiple imports of the same name (with different aliases) correctly.\n *\n * For non-aliased imports: Renames both import and all usages\n * import { oldName } → import { newName }\n * oldName() → newName()\n *\n * For aliased imports: Only renames the import, keeps alias in usages\n * import { oldName as alias } → import { newName as alias }\n * alias() → alias() (unchanged)\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param packageName - Package to import from (e.g., '@mastra/core/evals')\n * @param oldName - Current import name\n * @param newName - New import name\n * @returns Number of changes made\n */\nexport function renameImportAndUsages(\n j: JSCodeshift,\n root: Collection<any>,\n packageName: string,\n oldName: string,\n newName: string,\n): number {\n let changes = 0;\n const localNamesToReplace = new Set<string>();\n\n // First: Transform import specifiers from the specific package and collect local names to replace\n root\n .find(j.ImportDeclaration)\n .filter(path => {\n const source = path.value.source.value;\n return typeof source === 'string' && source === packageName;\n })\n .forEach(path => {\n if (!path.value.specifiers) return;\n\n path.value.specifiers.forEach((specifier: any) => {\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.imported.type === 'Identifier' &&\n specifier.imported.name === oldName\n ) {\n const isAliased = specifier.local && specifier.local.name !== oldName;\n\n // Always rename the imported name\n specifier.imported.name = newName;\n changes++;\n\n // Only rename the local name and track for usage replacement if NOT aliased\n if (!isAliased) {\n if (specifier.local) {\n specifier.local.name = newName;\n }\n // Track for usage replacement (only non-aliased imports)\n localNamesToReplace.add(oldName);\n }\n }\n });\n });\n\n // Second: Transform usages only for non-aliased imports\n localNamesToReplace.forEach(localName => {\n root.find(j.Identifier, { name: localName }).forEach(path => {\n // Skip identifiers that are part of import declarations\n const parent = path.parent;\n if (parent && parent.value.type === 'ImportSpecifier') {\n return;\n }\n\n path.value.name = newName;\n changes++;\n });\n });\n\n return changes;\n}\n\n/**\n * Transforms properties in constructor call arguments.\n *\n * @param j - JSCodeshift API\n * @param root - Root collection\n * @param className - Name of the class whose constructor to transform\n * @param propertyRenames - Map of old property names to new property names\n * @returns Number of properties renamed\n */\nexport function transformConstructorProperties(\n j: JSCodeshift,\n root: Collection<any>,\n className: string,\n propertyRenames: Record<string, string>,\n): number {\n let count = 0;\n\n root\n .find(j.NewExpression, {\n callee: { type: 'Identifier', name: className },\n })\n .forEach(path => {\n const args = path.value.arguments;\n if (args.length === 0) return;\n\n const firstArg = args[0];\n if (!firstArg || firstArg.type !== 'ObjectExpression' || !firstArg.properties) return;\n\n firstArg.properties.forEach((prop: any) => {\n if ((prop.type === 'Property' || prop.type === 'ObjectProperty') && prop.key?.type === 'Identifier') {\n const oldName = prop.key.name;\n const newName = propertyRenames[oldName];\n\n if (newName) {\n prop.key.name = newName;\n count++;\n }\n }\n });\n });\n\n return count;\n}\n"],"mappings":"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","names":[]}
|