@mastra/codemod 0.0.0-main-test-05-11-2025-2-20251106053353 → 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/README.md +41 -24
  3. package/dist/codemods/chunk-JNFQ6J6B.js +21 -0
  4. package/dist/codemods/chunk-JNFQ6J6B.js.map +1 -0
  5. package/dist/codemods/chunk-LGW3NUAJ.js +32 -0
  6. package/dist/codemods/chunk-LGW3NUAJ.js.map +1 -0
  7. package/dist/codemods/chunk-PKCFDS7J.js +177 -0
  8. package/dist/codemods/chunk-PKCFDS7J.js.map +1 -0
  9. package/dist/codemods/lib/add-comment.js +6 -54
  10. package/dist/codemods/lib/add-comment.js.map +1 -1
  11. package/dist/codemods/lib/create-transformer.js +5 -43
  12. package/dist/codemods/lib/create-transformer.js.map +1 -1
  13. package/dist/codemods/lib/utils.js +23 -0
  14. package/dist/codemods/lib/utils.js.map +1 -0
  15. package/dist/codemods/v1/agent-abort-signal.js +61 -0
  16. package/dist/codemods/v1/agent-abort-signal.js.map +1 -0
  17. package/dist/codemods/v1/agent-generate-stream-v-next.js +13 -70
  18. package/dist/codemods/v1/agent-generate-stream-v-next.js.map +1 -1
  19. package/dist/codemods/v1/agent-processor-methods.js +14 -71
  20. package/dist/codemods/v1/agent-processor-methods.js.map +1 -1
  21. package/dist/codemods/v1/agent-property-access.js +11 -50
  22. package/dist/codemods/v1/agent-property-access.js.map +1 -1
  23. package/dist/codemods/v1/agent-voice.js +10 -49
  24. package/dist/codemods/v1/agent-voice.js.map +1 -1
  25. package/dist/codemods/v1/client-get-memory-thread.js +58 -0
  26. package/dist/codemods/v1/client-get-memory-thread.js.map +1 -0
  27. package/dist/codemods/v1/client-offset-limit.js +49 -0
  28. package/dist/codemods/v1/client-offset-limit.js.map +1 -0
  29. package/dist/codemods/v1/client-sdk-types.js +56 -0
  30. package/dist/codemods/v1/client-sdk-types.js.map +1 -0
  31. package/dist/codemods/v1/client-to-ai-sdk-format.js +20 -0
  32. package/dist/codemods/v1/client-to-ai-sdk-format.js.map +1 -0
  33. package/dist/codemods/v1/evals-prebuilt-imports.js +24 -0
  34. package/dist/codemods/v1/evals-prebuilt-imports.js.map +1 -0
  35. package/dist/codemods/v1/evals-run-experiment.js +20 -0
  36. package/dist/codemods/v1/evals-run-experiment.js.map +1 -0
  37. package/dist/codemods/v1/evals-scorer-by-name.js +22 -0
  38. package/dist/codemods/v1/evals-scorer-by-name.js.map +1 -0
  39. package/dist/codemods/v1/experimental-auth.js +7 -43
  40. package/dist/codemods/v1/experimental-auth.js.map +1 -1
  41. package/dist/codemods/v1/mastra-core-imports.js +8 -44
  42. package/dist/codemods/v1/mastra-core-imports.js.map +1 -1
  43. package/dist/codemods/v1/mastra-plural-apis.js +31 -0
  44. package/dist/codemods/v1/mastra-plural-apis.js.map +1 -0
  45. package/dist/codemods/v1/mcp-get-tools.js +14 -66
  46. package/dist/codemods/v1/mcp-get-tools.js.map +1 -1
  47. package/dist/codemods/v1/mcp-get-toolsets.js +14 -66
  48. package/dist/codemods/v1/mcp-get-toolsets.js.map +1 -1
  49. package/dist/codemods/v1/memory-message-v2-type.js +50 -0
  50. package/dist/codemods/v1/memory-message-v2-type.js.map +1 -0
  51. package/dist/codemods/v1/memory-query-to-recall.js +22 -0
  52. package/dist/codemods/v1/memory-query-to-recall.js.map +1 -0
  53. package/dist/codemods/v1/memory-vector-search-param.js +31 -0
  54. package/dist/codemods/v1/memory-vector-search-param.js.map +1 -0
  55. package/dist/codemods/v1/not-implemented/agent-format-parameter.js +53 -0
  56. package/dist/codemods/v1/not-implemented/agent-format-parameter.js.map +1 -0
  57. package/dist/codemods/v1/not-implemented/agent-to-step.js +54 -0
  58. package/dist/codemods/v1/not-implemented/agent-to-step.js.map +1 -0
  59. package/dist/codemods/v1/not-implemented/mastra-memory.js +50 -0
  60. package/dist/codemods/v1/not-implemented/mastra-memory.js.map +1 -0
  61. package/dist/codemods/v1/not-implemented/mastra-required-id.js +112 -0
  62. package/dist/codemods/v1/not-implemented/mastra-required-id.js.map +1 -0
  63. package/dist/codemods/v1/runtime-context.js +6 -42
  64. package/dist/codemods/v1/runtime-context.js.map +1 -1
  65. package/dist/codemods/v1/storage-get-messages-paginated.js +41 -0
  66. package/dist/codemods/v1/storage-get-messages-paginated.js.map +1 -0
  67. package/dist/codemods/v1/storage-get-threads-by-resource.js +23 -0
  68. package/dist/codemods/v1/storage-get-threads-by-resource.js.map +1 -0
  69. package/dist/codemods/v1/storage-list-messages-by-id.js +23 -0
  70. package/dist/codemods/v1/storage-list-messages-by-id.js.map +1 -0
  71. package/dist/codemods/v1/storage-list-workflow-runs.js +23 -0
  72. package/dist/codemods/v1/storage-list-workflow-runs.js.map +1 -0
  73. package/dist/codemods/v1/storage-postgres-schema-name.js +20 -0
  74. package/dist/codemods/v1/storage-postgres-schema-name.js.map +1 -0
  75. package/dist/codemods/v1/vector-pg-constructor.js +27 -0
  76. package/dist/codemods/v1/vector-pg-constructor.js.map +1 -0
  77. package/dist/codemods/v1/voice-property-names.js +12 -48
  78. package/dist/codemods/v1/voice-property-names.js.map +1 -1
  79. package/dist/codemods/v1/workflow-create-run-async.js +22 -0
  80. package/dist/codemods/v1/workflow-create-run-async.js.map +1 -0
  81. package/dist/codemods/v1/workflow-list-runs.js +22 -0
  82. package/dist/codemods/v1/workflow-list-runs.js.map +1 -0
  83. package/dist/codemods/v1/workflow-run-count.js +53 -0
  84. package/dist/codemods/v1/workflow-run-count.js.map +1 -0
  85. package/dist/index.js +66 -46
  86. package/dist/index.js.map +1 -1
  87. package/package.json +4 -3
  88. package/dist/codemods/v1/agent-get-agents.js +0 -74
  89. package/dist/codemods/v1/agent-get-agents.js.map +0 -1
  90. package/dist/codemods/v1/evals-get-scorers.js +0 -74
  91. package/dist/codemods/v1/evals-get-scorers.js.map +0 -1
  92. package/dist/codemods/v1/mcp-get-mcp-servers.js +0 -74
  93. package/dist/codemods/v1/mcp-get-mcp-servers.js.map +0 -1
  94. package/dist/codemods/v1/workflows-get-workflows.js +0 -74
  95. package/dist/codemods/v1/workflows-get-workflows.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ import {
2
+ createTransformer
3
+ } from "../chunk-JNFQ6J6B.js";
4
+
5
+ // src/codemods/v1/memory-message-v2-type.ts
6
+ var memory_message_v2_type_default = createTransformer((_fileInfo, _api, _options, context) => {
7
+ const { j, root } = context;
8
+ const oldTypeName = "MastraMessageV2";
9
+ const newTypeName = "MastraDBMessage";
10
+ const localNamesToRewrite = /* @__PURE__ */ new Set();
11
+ root.find(j.ImportDeclaration).filter((path) => {
12
+ const source = path.value.source.value;
13
+ return typeof source === "string" && source === "@mastra/core";
14
+ }).forEach((path) => {
15
+ if (!path.value.specifiers) return;
16
+ path.value.specifiers.forEach((specifier) => {
17
+ if (specifier.type === "ImportSpecifier" && specifier.imported.type === "Identifier" && specifier.imported.name === oldTypeName) {
18
+ const localName = specifier.local?.name || oldTypeName;
19
+ const isAliased = localName !== oldTypeName;
20
+ specifier.imported.name = newTypeName;
21
+ if (!isAliased) {
22
+ if (specifier.local) {
23
+ specifier.local.name = newTypeName;
24
+ }
25
+ localNamesToRewrite.add(oldTypeName);
26
+ }
27
+ context.hasChanges = true;
28
+ }
29
+ });
30
+ });
31
+ if (localNamesToRewrite.size > 0) {
32
+ localNamesToRewrite.forEach((oldLocalName) => {
33
+ root.find(j.Identifier, { name: oldLocalName }).forEach((path) => {
34
+ const parent = path.parent;
35
+ if (parent && parent.value.type === "ImportSpecifier") {
36
+ return;
37
+ }
38
+ path.value.name = newTypeName;
39
+ context.hasChanges = true;
40
+ });
41
+ });
42
+ }
43
+ if (context.hasChanges) {
44
+ context.messages.push("Renamed MastraMessageV2 type to MastraDBMessage");
45
+ }
46
+ });
47
+ export {
48
+ memory_message_v2_type_default as default
49
+ };
50
+ //# sourceMappingURL=memory-message-v2-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/codemods/v1/memory-message-v2-type.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\n\n/**\n * Renames MastraMessageV2 type to MastraDBMessage.\n * This better describes the purpose as the database message format.\n *\n * Before:\n * import { MastraMessageV2 } from '@mastra/core';\n * function processMessage(message: MastraMessageV2) {}\n *\n * After:\n * import { MastraDBMessage } from '@mastra/core';\n * function processMessage(message: MastraDBMessage) {}\n */\nexport default createTransformer((_fileInfo, _api, _options, context) => {\n const { j, root } = context;\n\n const oldTypeName = 'MastraMessageV2';\n const newTypeName = 'MastraDBMessage';\n\n // Track which local names should be rewritten (only non-aliased imports)\n const localNamesToRewrite = new Set<string>();\n\n // Transform import specifiers from @mastra/core\n root\n .find(j.ImportDeclaration)\n .filter(path => {\n const source = path.value.source.value;\n return typeof source === 'string' && source === '@mastra/core';\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 === oldTypeName\n ) {\n const localName = specifier.local?.name || oldTypeName;\n const isAliased = localName !== oldTypeName;\n\n // Rename the imported name\n specifier.imported.name = newTypeName;\n\n // Only update local name and track for rewriting if not aliased\n if (!isAliased) {\n if (specifier.local) {\n specifier.local.name = newTypeName;\n }\n // Track the old local name (oldTypeName) to rewrite all its usages\n localNamesToRewrite.add(oldTypeName);\n }\n // If aliased, leave the local name intact and don't track for rewriting\n\n context.hasChanges = true;\n }\n });\n });\n\n // Only transform usages for non-aliased imports\n if (localNamesToRewrite.size > 0) {\n // Transform all references that need to be rewritten\n localNamesToRewrite.forEach(oldLocalName => {\n root.find(j.Identifier, { name: oldLocalName }).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 = newTypeName;\n context.hasChanges = true;\n });\n });\n }\n\n if (context.hasChanges) {\n context.messages.push('Renamed MastraMessageV2 type to MastraDBMessage');\n }\n});\n"],"mappings":";;;;;AAcA,IAAO,iCAAQ,kBAAkB,CAAC,WAAW,MAAM,UAAU,YAAY;AACvE,QAAM,EAAE,GAAG,KAAK,IAAI;AAEpB,QAAM,cAAc;AACpB,QAAM,cAAc;AAGpB,QAAM,sBAAsB,oBAAI,IAAY;AAG5C,OACG,KAAK,EAAE,iBAAiB,EACxB,OAAO,UAAQ;AACd,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,WAAO,OAAO,WAAW,YAAY,WAAW;AAAA,EAClD,CAAC,EACA,QAAQ,UAAQ;AACf,QAAI,CAAC,KAAK,MAAM,WAAY;AAE5B,SAAK,MAAM,WAAW,QAAQ,CAAC,cAAmB;AAChD,UACE,UAAU,SAAS,qBACnB,UAAU,SAAS,SAAS,gBAC5B,UAAU,SAAS,SAAS,aAC5B;AACA,cAAM,YAAY,UAAU,OAAO,QAAQ;AAC3C,cAAM,YAAY,cAAc;AAGhC,kBAAU,SAAS,OAAO;AAG1B,YAAI,CAAC,WAAW;AACd,cAAI,UAAU,OAAO;AACnB,sBAAU,MAAM,OAAO;AAAA,UACzB;AAEA,8BAAoB,IAAI,WAAW;AAAA,QACrC;AAGA,gBAAQ,aAAa;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGH,MAAI,oBAAoB,OAAO,GAAG;AAEhC,wBAAoB,QAAQ,kBAAgB;AAC1C,WAAK,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC,EAAE,QAAQ,UAAQ;AAE9D,cAAM,SAAS,KAAK;AACpB,YAAI,UAAU,OAAO,MAAM,SAAS,mBAAmB;AACrD;AAAA,QACF;AAEA,aAAK,MAAM,OAAO;AAClB,gBAAQ,aAAa;AAAA,MACvB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,iDAAiD;AAAA,EACzE;AACF,CAAC;","names":[]}
@@ -0,0 +1,22 @@
1
+ import {
2
+ createTransformer
3
+ } from "../chunk-JNFQ6J6B.js";
4
+ import {
5
+ renameMethod,
6
+ trackClassInstances
7
+ } from "../chunk-PKCFDS7J.js";
8
+
9
+ // src/codemods/v1/memory-query-to-recall.ts
10
+ var memory_query_to_recall_default = createTransformer((_fileInfo, _api, _options, context) => {
11
+ const { j, root } = context;
12
+ const memoryInstances = trackClassInstances(j, root, "Memory");
13
+ const count = renameMethod(j, root, memoryInstances, "query", "recall");
14
+ if (count > 0) {
15
+ context.hasChanges = true;
16
+ context.messages.push("Renamed query to recall on Memory instances");
17
+ }
18
+ });
19
+ export {
20
+ memory_query_to_recall_default as default
21
+ };
22
+ //# sourceMappingURL=memory-query-to-recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/codemods/v1/memory-query-to-recall.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\nimport { trackClassInstances, renameMethod } from '../lib/utils';\n\n/**\n * Renames memory.query() to memory.recall().\n * This better describes the action of retrieving messages from memory.\n *\n * Before:\n * const result = await memory.query({ threadId: 'thread-123' });\n *\n * After:\n * const result = await memory.recall({ threadId: 'thread-123' });\n */\nexport default createTransformer((_fileInfo, _api, _options, context) => {\n const { j, root } = context;\n\n // Track Memory instances and rename query to recall in a single optimized pass\n const memoryInstances = trackClassInstances(j, root, 'Memory');\n const count = renameMethod(j, root, memoryInstances, 'query', 'recall');\n\n if (count > 0) {\n context.hasChanges = true;\n context.messages.push('Renamed query to recall on Memory instances');\n }\n});\n"],"mappings":";;;;;;;;;AAaA,IAAO,iCAAQ,kBAAkB,CAAC,WAAW,MAAM,UAAU,YAAY;AACvE,QAAM,EAAE,GAAG,KAAK,IAAI;AAGpB,QAAM,kBAAkB,oBAAoB,GAAG,MAAM,QAAQ;AAC7D,QAAM,QAAQ,aAAa,GAAG,MAAM,iBAAiB,SAAS,QAAQ;AAEtE,MAAI,QAAQ,GAAG;AACb,YAAQ,aAAa;AACrB,YAAQ,SAAS,KAAK,6CAA6C;AAAA,EACrE;AACF,CAAC;","names":[]}
@@ -0,0 +1,31 @@
1
+ import {
2
+ createTransformer
3
+ } from "../chunk-JNFQ6J6B.js";
4
+ import {
5
+ trackClassInstances,
6
+ transformMethodCalls
7
+ } from "../chunk-PKCFDS7J.js";
8
+
9
+ // src/codemods/v1/memory-vector-search-param.ts
10
+ var memory_vector_search_param_default = createTransformer((_fileInfo, _api, _options, context) => {
11
+ const { j, root } = context;
12
+ const memoryInstances = trackClassInstances(j, root, "Memory");
13
+ transformMethodCalls(j, root, memoryInstances, "recall", (path) => {
14
+ const args = path.value.arguments;
15
+ const firstArg = args[0];
16
+ if (!firstArg || firstArg.type !== "ObjectExpression" || !firstArg.properties) return;
17
+ firstArg.properties.forEach((prop) => {
18
+ if ((prop.type === "Property" || prop.type === "ObjectProperty") && prop.key && prop.key.type === "Identifier" && prop.key.name === "vectorMessageSearch") {
19
+ prop.key.name = "vectorSearchString";
20
+ context.hasChanges = true;
21
+ }
22
+ });
23
+ });
24
+ if (context.hasChanges) {
25
+ context.messages.push("Renamed vectorMessageSearch to vectorSearchString in memory.recall() calls");
26
+ }
27
+ });
28
+ export {
29
+ memory_vector_search_param_default as default
30
+ };
31
+ //# sourceMappingURL=memory-vector-search-param.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/codemods/v1/memory-vector-search-param.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\nimport { trackClassInstances, transformMethodCalls } from '../lib/utils';\n\n/**\n * Renames vectorMessageSearch parameter to vectorSearchString in memory.recall() calls.\n * This provides more consistent naming.\n *\n * Before:\n * memory.recall({\n * threadId: 'thread-123',\n * vectorMessageSearch: 'What did we discuss?',\n * });\n *\n * After:\n * memory.recall({\n * threadId: 'thread-123',\n * vectorSearchString: 'What did we discuss?',\n * });\n */\nexport default createTransformer((_fileInfo, _api, _options, context) => {\n const { j, root } = context;\n\n const memoryInstances = trackClassInstances(j, root, 'Memory');\n\n transformMethodCalls(j, root, memoryInstances, 'recall', path => {\n const args = path.value.arguments;\n const firstArg = args[0];\n if (!firstArg || firstArg.type !== 'ObjectExpression' || !firstArg.properties) return;\n\n firstArg.properties.forEach((prop: any) => {\n if (\n (prop.type === 'Property' || prop.type === 'ObjectProperty') &&\n prop.key &&\n prop.key.type === 'Identifier' &&\n prop.key.name === 'vectorMessageSearch'\n ) {\n prop.key.name = 'vectorSearchString';\n context.hasChanges = true;\n }\n });\n });\n\n if (context.hasChanges) {\n context.messages.push('Renamed vectorMessageSearch to vectorSearchString in memory.recall() calls');\n }\n});\n"],"mappings":";;;;;;;;;AAmBA,IAAO,qCAAQ,kBAAkB,CAAC,WAAW,MAAM,UAAU,YAAY;AACvE,QAAM,EAAE,GAAG,KAAK,IAAI;AAEpB,QAAM,kBAAkB,oBAAoB,GAAG,MAAM,QAAQ;AAE7D,uBAAqB,GAAG,MAAM,iBAAiB,UAAU,UAAQ;AAC/D,UAAM,OAAO,KAAK,MAAM;AACxB,UAAM,WAAW,KAAK,CAAC;AACvB,QAAI,CAAC,YAAY,SAAS,SAAS,sBAAsB,CAAC,SAAS,WAAY;AAE/E,aAAS,WAAW,QAAQ,CAAC,SAAc;AACzC,WACG,KAAK,SAAS,cAAc,KAAK,SAAS,qBAC3C,KAAK,OACL,KAAK,IAAI,SAAS,gBAClB,KAAK,IAAI,SAAS,uBAClB;AACA,aAAK,IAAI,OAAO;AAChB,gBAAQ,aAAa;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,4EAA4E;AAAA,EACpG;AACF,CAAC;","names":[]}
@@ -0,0 +1,53 @@
1
+ import {
2
+ insertCommentOnce
3
+ } from "../../chunk-LGW3NUAJ.js";
4
+ import {
5
+ createTransformer
6
+ } from "../../chunk-JNFQ6J6B.js";
7
+
8
+ // src/codemods/v1/not-implemented/agent-format-parameter.ts
9
+ var agent_format_parameter_default = createTransformer((fileInfo, api, options, context) => {
10
+ const { j, root } = context;
11
+ const COMMENT_MESSAGE = "FIXME(mastra): The format parameter has been removed. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/agent#format-parameter-from-stream-and-generate";
12
+ const agentInstances = /* @__PURE__ */ new Set();
13
+ root.find(j.NewExpression, {
14
+ callee: {
15
+ type: "Identifier",
16
+ name: "Agent"
17
+ }
18
+ }).forEach((path) => {
19
+ const parent = path.parent.value;
20
+ if (parent.type === "VariableDeclarator" && parent.id.type === "Identifier") {
21
+ agentInstances.add(parent.id.name);
22
+ }
23
+ });
24
+ root.find(j.CallExpression).filter((path) => {
25
+ const { callee } = path.value;
26
+ if (callee.type !== "MemberExpression") return false;
27
+ if (callee.object.type !== "Identifier") return false;
28
+ if (callee.property.type !== "Identifier") return false;
29
+ if (!agentInstances.has(callee.object.name)) return false;
30
+ return callee.property.name === "generate" || callee.property.name === "stream";
31
+ }).forEach((path) => {
32
+ const args = path.value.arguments;
33
+ if (args.length < 2) return;
34
+ const optionsArg = args[1];
35
+ if (!optionsArg || optionsArg.type !== "ObjectExpression") return;
36
+ if (!optionsArg.properties) return;
37
+ optionsArg.properties.forEach((prop) => {
38
+ if ((prop.type === "Property" || prop.type === "ObjectProperty") && prop.key?.type === "Identifier" && prop.key.name === "format") {
39
+ const added = insertCommentOnce(prop, j, COMMENT_MESSAGE);
40
+ if (added) {
41
+ context.hasChanges = true;
42
+ }
43
+ }
44
+ });
45
+ });
46
+ if (context.hasChanges) {
47
+ context.messages.push(`Not Implemented ${fileInfo.path}: The format 'aisdk' parameter has been removed.`);
48
+ }
49
+ });
50
+ export {
51
+ agent_format_parameter_default as default
52
+ };
53
+ //# sourceMappingURL=agent-format-parameter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/codemods/v1/not-implemented/agent-format-parameter.ts"],"sourcesContent":["/* eslint-disable no-warning-comments */\nimport { insertCommentOnce } from '../../lib/add-comment';\nimport { createTransformer } from '../../lib/create-transformer';\n\n/**\n * Adds a FIXME comment above the format parameter in agent.generate() and agent.stream() calls.\n * The format parameter has been removed in v1 and requires manual migration.\n *\n * Before:\n * agent.generate('prompt', { format: 'aisdk' })\n *\n * After:\n * agent.generate('prompt', {\n * /* FIXME(mastra): The format parameter has been removed. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/agent#format-parameter-from-stream-and-generate *\\/\n * format: 'aisdk'\n * })\n */\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n const COMMENT_MESSAGE =\n 'FIXME(mastra): The format parameter has been removed. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/agent#format-parameter-from-stream-and-generate';\n\n // Track Agent instances\n const agentInstances = new Set<string>();\n\n root\n .find(j.NewExpression, {\n callee: {\n type: 'Identifier',\n name: 'Agent',\n },\n })\n .forEach(path => {\n const parent = path.parent.value;\n if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n agentInstances.add(parent.id.name);\n }\n });\n\n // Find agent.generate() and agent.stream() calls\n root\n .find(j.CallExpression)\n .filter(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return false;\n if (callee.object.type !== 'Identifier') return false;\n if (callee.property.type !== 'Identifier') return false;\n\n // Only process if called on an Agent instance\n if (!agentInstances.has(callee.object.name)) return false;\n\n // Only process generate() and stream() methods\n return callee.property.name === 'generate' || callee.property.name === 'stream';\n })\n .forEach(path => {\n const args = path.value.arguments;\n\n // We're looking for calls with an options object that has format parameter\n if (args.length < 2) return;\n\n const optionsArg = args[1];\n if (!optionsArg || optionsArg.type !== 'ObjectExpression') return;\n if (!optionsArg.properties) return;\n\n // Find the format property\n optionsArg.properties.forEach(prop => {\n if (\n (prop.type === 'Property' || prop.type === 'ObjectProperty') &&\n prop.key?.type === 'Identifier' &&\n prop.key.name === 'format'\n ) {\n // Add FIXME comment to the format property\n const added = insertCommentOnce(prop, j, COMMENT_MESSAGE);\n if (added) {\n context.hasChanges = true;\n }\n }\n });\n });\n\n if (context.hasChanges) {\n context.messages.push(`Not Implemented ${fileInfo.path}: The format 'aisdk' parameter has been removed.`);\n }\n});\n"],"mappings":";;;;;;;;AAiBA,IAAO,iCAAQ,kBAAkB,CAAC,UAAU,KAAK,SAAS,YAAY;AACpE,QAAM,EAAE,GAAG,KAAK,IAAI;AAEpB,QAAM,kBACJ;AAGF,QAAM,iBAAiB,oBAAI,IAAY;AAEvC,OACG,KAAK,EAAE,eAAe;AAAA,IACrB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF,CAAC,EACA,QAAQ,UAAQ;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,OAAO,SAAS,wBAAwB,OAAO,GAAG,SAAS,cAAc;AAC3E,qBAAe,IAAI,OAAO,GAAG,IAAI;AAAA,IACnC;AAAA,EACF,CAAC;AAGH,OACG,KAAK,EAAE,cAAc,EACrB,OAAO,UAAQ;AACd,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAI,OAAO,SAAS,mBAAoB,QAAO;AAC/C,QAAI,OAAO,OAAO,SAAS,aAAc,QAAO;AAChD,QAAI,OAAO,SAAS,SAAS,aAAc,QAAO;AAGlD,QAAI,CAAC,eAAe,IAAI,OAAO,OAAO,IAAI,EAAG,QAAO;AAGpD,WAAO,OAAO,SAAS,SAAS,cAAc,OAAO,SAAS,SAAS;AAAA,EACzE,CAAC,EACA,QAAQ,UAAQ;AACf,UAAM,OAAO,KAAK,MAAM;AAGxB,QAAI,KAAK,SAAS,EAAG;AAErB,UAAM,aAAa,KAAK,CAAC;AACzB,QAAI,CAAC,cAAc,WAAW,SAAS,mBAAoB;AAC3D,QAAI,CAAC,WAAW,WAAY;AAG5B,eAAW,WAAW,QAAQ,UAAQ;AACpC,WACG,KAAK,SAAS,cAAc,KAAK,SAAS,qBAC3C,KAAK,KAAK,SAAS,gBACnB,KAAK,IAAI,SAAS,UAClB;AAEA,cAAM,QAAQ,kBAAkB,MAAM,GAAG,eAAe;AACxD,YAAI,OAAO;AACT,kBAAQ,aAAa;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAEH,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,mBAAmB,SAAS,IAAI,kDAAkD;AAAA,EAC1G;AACF,CAAC;","names":[]}
@@ -0,0 +1,54 @@
1
+ import {
2
+ insertCommentOnce
3
+ } from "../../chunk-LGW3NUAJ.js";
4
+ import {
5
+ createTransformer
6
+ } from "../../chunk-JNFQ6J6B.js";
7
+
8
+ // src/codemods/v1/not-implemented/agent-to-step.ts
9
+ var agent_to_step_default = createTransformer((fileInfo, api, options, context) => {
10
+ const { j, root } = context;
11
+ const COMMENT_MESSAGE = "FIXME(mastra): The toStep() method has been removed. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/agent#agenttostep-method";
12
+ const agentInstances = /* @__PURE__ */ new Set();
13
+ root.find(j.NewExpression, {
14
+ callee: {
15
+ type: "Identifier",
16
+ name: "Agent"
17
+ }
18
+ }).forEach((path) => {
19
+ const parent = path.parent.value;
20
+ if (parent.type === "VariableDeclarator" && parent.id.type === "Identifier") {
21
+ agentInstances.add(parent.id.name);
22
+ }
23
+ });
24
+ root.find(j.CallExpression).filter((path) => {
25
+ const { callee } = path.value;
26
+ if (callee.type !== "MemberExpression") return false;
27
+ if (callee.object.type !== "Identifier") return false;
28
+ if (callee.property.type !== "Identifier") return false;
29
+ if (!agentInstances.has(callee.object.name)) return false;
30
+ return callee.property.name === "toStep";
31
+ }).forEach((path) => {
32
+ let parent = path.parent;
33
+ while (parent && parent.value.type !== "VariableDeclaration" && parent.value.type !== "ExpressionStatement") {
34
+ parent = parent.parent;
35
+ }
36
+ if (parent && parent.value) {
37
+ let targetNode = parent.value;
38
+ if (parent.parent && parent.parent.value.type === "ExportNamedDeclaration") {
39
+ targetNode = parent.parent.value;
40
+ }
41
+ const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);
42
+ if (added) {
43
+ context.hasChanges = true;
44
+ }
45
+ }
46
+ });
47
+ if (context.hasChanges) {
48
+ context.messages.push(`Not Implemented ${fileInfo.path}: The toStep() method has been removed.`);
49
+ }
50
+ });
51
+ export {
52
+ agent_to_step_default as default
53
+ };
54
+ //# sourceMappingURL=agent-to-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/codemods/v1/not-implemented/agent-to-step.ts"],"sourcesContent":["/* eslint-disable no-warning-comments */\nimport { insertCommentOnce } from '../../lib/add-comment';\nimport { createTransformer } from '../../lib/create-transformer';\n\n/**\n * Adds a FIXME comment above agent.toStep() method calls.\n * The toStep() method has been removed in v1 and requires manual migration.\n *\n * Before:\n * const step = agent.toStep();\n *\n * After:\n * /* FIXME(mastra): The toStep() method has been removed. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/agent#agenttostep-method *\\/\n * const step = agent.toStep();\n */\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n const COMMENT_MESSAGE =\n 'FIXME(mastra): The toStep() method has been removed. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/agent#agenttostep-method';\n\n // Track Agent instances\n const agentInstances = new Set<string>();\n\n root\n .find(j.NewExpression, {\n callee: {\n type: 'Identifier',\n name: 'Agent',\n },\n })\n .forEach(path => {\n const parent = path.parent.value;\n if (parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') {\n agentInstances.add(parent.id.name);\n }\n });\n\n // Find agent.toStep() calls\n root\n .find(j.CallExpression)\n .filter(path => {\n const { callee } = path.value;\n if (callee.type !== 'MemberExpression') return false;\n if (callee.object.type !== 'Identifier') return false;\n if (callee.property.type !== 'Identifier') return false;\n\n // Only process if called on an Agent instance\n if (!agentInstances.has(callee.object.name)) return false;\n\n // Only process toStep() method\n return callee.property.name === 'toStep';\n })\n .forEach(path => {\n // Find the parent statement to add the comment to\n let parent = path.parent;\n while (parent && parent.value.type !== 'VariableDeclaration' && parent.value.type !== 'ExpressionStatement') {\n parent = parent.parent;\n }\n\n if (parent && parent.value) {\n // Check if this statement is wrapped in an export declaration\n let targetNode = parent.value;\n if (parent.parent && parent.parent.value.type === 'ExportNamedDeclaration') {\n targetNode = parent.parent.value;\n }\n\n // Add FIXME comment to the statement (or export if it's exported)\n const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);\n if (added) {\n context.hasChanges = true;\n }\n }\n });\n\n if (context.hasChanges) {\n context.messages.push(`Not Implemented ${fileInfo.path}: The toStep() method has been removed.`);\n }\n});\n"],"mappings":";;;;;;;;AAeA,IAAO,wBAAQ,kBAAkB,CAAC,UAAU,KAAK,SAAS,YAAY;AACpE,QAAM,EAAE,GAAG,KAAK,IAAI;AAEpB,QAAM,kBACJ;AAGF,QAAM,iBAAiB,oBAAI,IAAY;AAEvC,OACG,KAAK,EAAE,eAAe;AAAA,IACrB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF,CAAC,EACA,QAAQ,UAAQ;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,OAAO,SAAS,wBAAwB,OAAO,GAAG,SAAS,cAAc;AAC3E,qBAAe,IAAI,OAAO,GAAG,IAAI;AAAA,IACnC;AAAA,EACF,CAAC;AAGH,OACG,KAAK,EAAE,cAAc,EACrB,OAAO,UAAQ;AACd,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAI,OAAO,SAAS,mBAAoB,QAAO;AAC/C,QAAI,OAAO,OAAO,SAAS,aAAc,QAAO;AAChD,QAAI,OAAO,SAAS,SAAS,aAAc,QAAO;AAGlD,QAAI,CAAC,eAAe,IAAI,OAAO,OAAO,IAAI,EAAG,QAAO;AAGpD,WAAO,OAAO,SAAS,SAAS;AAAA,EAClC,CAAC,EACA,QAAQ,UAAQ;AAEf,QAAI,SAAS,KAAK;AAClB,WAAO,UAAU,OAAO,MAAM,SAAS,yBAAyB,OAAO,MAAM,SAAS,uBAAuB;AAC3G,eAAS,OAAO;AAAA,IAClB;AAEA,QAAI,UAAU,OAAO,OAAO;AAE1B,UAAI,aAAa,OAAO;AACxB,UAAI,OAAO,UAAU,OAAO,OAAO,MAAM,SAAS,0BAA0B;AAC1E,qBAAa,OAAO,OAAO;AAAA,MAC7B;AAGA,YAAM,QAAQ,kBAAkB,YAAY,GAAG,eAAe;AAC9D,UAAI,OAAO;AACT,gBAAQ,aAAa;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAC;AAEH,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,mBAAmB,SAAS,IAAI,yCAAyC;AAAA,EACjG;AACF,CAAC;","names":[]}
@@ -0,0 +1,50 @@
1
+ import {
2
+ insertCommentOnce
3
+ } from "../../chunk-LGW3NUAJ.js";
4
+ import {
5
+ createTransformer
6
+ } from "../../chunk-JNFQ6J6B.js";
7
+
8
+ // src/codemods/v1/not-implemented/mastra-memory.ts
9
+ var mastra_memory_default = createTransformer((fileInfo, api, options, context) => {
10
+ const { j, root } = context;
11
+ const COMMENT_MESSAGE = "FIXME(mastra): `memory` property has been removed. Memory is configured at the agent level. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/mastra#memory-property-from-mastra-class";
12
+ root.find(j.NewExpression, {
13
+ callee: {
14
+ type: "Identifier",
15
+ name: "Mastra"
16
+ }
17
+ }).forEach((path) => {
18
+ const hasMemory = path.value.arguments.some((arg) => {
19
+ if (arg.type === "ObjectExpression") {
20
+ return arg.properties?.some(
21
+ (prop) => (prop.type === "Property" || prop.type === "ObjectProperty") && prop.key?.type === "Identifier" && prop.key.name === "memory"
22
+ );
23
+ }
24
+ return false;
25
+ });
26
+ if (hasMemory) {
27
+ let parent = path.parent;
28
+ while (parent && parent.value.type !== "VariableDeclaration" && parent.value.type !== "ExpressionStatement") {
29
+ parent = parent.parent;
30
+ }
31
+ if (parent && parent.value) {
32
+ let targetNode = parent.value;
33
+ if (parent.parent && parent.parent.value.type === "ExportNamedDeclaration") {
34
+ targetNode = parent.parent.value;
35
+ }
36
+ const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);
37
+ if (added) {
38
+ context.hasChanges = true;
39
+ }
40
+ }
41
+ }
42
+ });
43
+ if (context.hasChanges) {
44
+ context.messages.push(`Not Implemented ${fileInfo.path}: The memory property has been removed.`);
45
+ }
46
+ });
47
+ export {
48
+ mastra_memory_default as default
49
+ };
50
+ //# sourceMappingURL=mastra-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/codemods/v1/not-implemented/mastra-memory.ts"],"sourcesContent":["/* eslint-disable no-warning-comments */\nimport { insertCommentOnce } from '../../lib/add-comment';\nimport { createTransformer } from '../../lib/create-transformer';\n\n/**\n * Adds FIXME comment when Mastra config includes a memory property.\n * The memory property has been removed from Mastra class and should be configured at the agent level.\n *\n * Before:\n * const mastra = new Mastra({ memory: new Memory() });\n *\n * After:\n * /* FIXME(mastra): `memory` property has been removed. Memory is configured at the agent level. See: ... *\\/\n * const mastra = new Mastra({ memory: new Memory() });\n */\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n const COMMENT_MESSAGE =\n 'FIXME(mastra): `memory` property has been removed. Memory is configured at the agent level. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/mastra#memory-property-from-mastra-class';\n\n // Find new Mastra() expressions\n root\n .find(j.NewExpression, {\n callee: {\n type: 'Identifier',\n name: 'Mastra',\n },\n })\n .forEach(path => {\n // Check if config has a memory property\n const hasMemory = path.value.arguments.some(arg => {\n if (arg.type === 'ObjectExpression') {\n return arg.properties?.some(\n prop =>\n (prop.type === 'Property' || prop.type === 'ObjectProperty') &&\n prop.key?.type === 'Identifier' &&\n prop.key.name === 'memory',\n );\n }\n return false;\n });\n\n if (hasMemory) {\n // Find the parent statement to add comment\n let parent = path.parent;\n while (parent && parent.value.type !== 'VariableDeclaration' && parent.value.type !== 'ExpressionStatement') {\n parent = parent.parent;\n }\n\n if (parent && parent.value) {\n // Check if this statement is wrapped in an export declaration\n let targetNode = parent.value;\n if (parent.parent && parent.parent.value.type === 'ExportNamedDeclaration') {\n targetNode = parent.parent.value;\n }\n\n const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);\n if (added) {\n context.hasChanges = true;\n }\n }\n }\n });\n\n if (context.hasChanges) {\n context.messages.push(`Not Implemented ${fileInfo.path}: The memory property has been removed.`);\n }\n});\n"],"mappings":";;;;;;;;AAeA,IAAO,wBAAQ,kBAAkB,CAAC,UAAU,KAAK,SAAS,YAAY;AACpE,QAAM,EAAE,GAAG,KAAK,IAAI;AAEpB,QAAM,kBACJ;AAGF,OACG,KAAK,EAAE,eAAe;AAAA,IACrB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF,CAAC,EACA,QAAQ,UAAQ;AAEf,UAAM,YAAY,KAAK,MAAM,UAAU,KAAK,SAAO;AACjD,UAAI,IAAI,SAAS,oBAAoB;AACnC,eAAO,IAAI,YAAY;AAAA,UACrB,WACG,KAAK,SAAS,cAAc,KAAK,SAAS,qBAC3C,KAAK,KAAK,SAAS,gBACnB,KAAK,IAAI,SAAS;AAAA,QACtB;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAED,QAAI,WAAW;AAEb,UAAI,SAAS,KAAK;AAClB,aAAO,UAAU,OAAO,MAAM,SAAS,yBAAyB,OAAO,MAAM,SAAS,uBAAuB;AAC3G,iBAAS,OAAO;AAAA,MAClB;AAEA,UAAI,UAAU,OAAO,OAAO;AAE1B,YAAI,aAAa,OAAO;AACxB,YAAI,OAAO,UAAU,OAAO,OAAO,MAAM,SAAS,0BAA0B;AAC1E,uBAAa,OAAO,OAAO;AAAA,QAC7B;AAEA,cAAM,QAAQ,kBAAkB,YAAY,GAAG,eAAe;AAC9D,YAAI,OAAO;AACT,kBAAQ,aAAa;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAEH,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,mBAAmB,SAAS,IAAI,yCAAyC;AAAA,EACjG;AACF,CAAC;","names":[]}
@@ -0,0 +1,112 @@
1
+ import {
2
+ insertCommentOnce
3
+ } from "../../chunk-LGW3NUAJ.js";
4
+ import {
5
+ createTransformer
6
+ } from "../../chunk-JNFQ6J6B.js";
7
+
8
+ // src/codemods/v1/not-implemented/mastra-required-id.ts
9
+ var mastra_required_id_default = createTransformer((fileInfo, api, options, context) => {
10
+ const { j, root } = context;
11
+ const COMMENT_MESSAGE = "FIXME(mastra): Add a unique `id` parameter. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/mastra#required-id-parameter-for-all-mastra-primitives";
12
+ const storageClasses = [
13
+ "LibSQLStore",
14
+ "PostgresStore",
15
+ "D1Store",
16
+ "MongoDBStore",
17
+ "DynamoDBStore",
18
+ "PgVector",
19
+ "ChromaVector",
20
+ "PineconeVector",
21
+ "QdrantVector",
22
+ "LanceVector",
23
+ "Agent",
24
+ "MCPServer"
25
+ ];
26
+ const createFunctions = ["createWorkflow", "createTool", "createScorer"];
27
+ root.find(j.NewExpression).forEach((path) => {
28
+ if (path.value.callee.type === "Identifier") {
29
+ const className = path.value.callee.name;
30
+ if (storageClasses.includes(className)) {
31
+ const hasId = path.value.arguments.some((arg) => {
32
+ if (arg.type === "ObjectExpression") {
33
+ return arg.properties?.some(
34
+ (prop) => (prop.type === "Property" || prop.type === "ObjectProperty") && prop.key?.type === "Identifier" && prop.key.name === "id"
35
+ );
36
+ }
37
+ return false;
38
+ });
39
+ if (!hasId) {
40
+ let parent = path.parent;
41
+ const statementTypes = /* @__PURE__ */ new Set([
42
+ "VariableDeclaration",
43
+ "ExpressionStatement",
44
+ "ReturnStatement",
45
+ "ExportDefaultDeclaration",
46
+ "ExportNamedDeclaration",
47
+ "Program"
48
+ ]);
49
+ while (parent && !statementTypes.has(parent.value.type)) {
50
+ parent = parent.parent;
51
+ }
52
+ if (parent && parent.value) {
53
+ let targetNode = parent.value;
54
+ if (targetNode.type !== "ExportDefaultDeclaration" && targetNode.type !== "ExportNamedDeclaration" && parent.parent && (parent.parent.value.type === "ExportDefaultDeclaration" || parent.parent.value.type === "ExportNamedDeclaration")) {
55
+ targetNode = parent.parent.value;
56
+ }
57
+ const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);
58
+ if (added) {
59
+ context.hasChanges = true;
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ });
66
+ root.find(j.CallExpression).forEach((path) => {
67
+ if (path.value.callee.type === "Identifier") {
68
+ const functionName = path.value.callee.name;
69
+ if (createFunctions.includes(functionName)) {
70
+ const hasId = path.value.arguments.some((arg) => {
71
+ if (arg.type === "ObjectExpression") {
72
+ return arg.properties?.some(
73
+ (prop) => (prop.type === "Property" || prop.type === "ObjectProperty") && prop.key?.type === "Identifier" && prop.key.name === "id"
74
+ );
75
+ }
76
+ return false;
77
+ });
78
+ if (!hasId) {
79
+ let parent = path.parent;
80
+ const statementTypes = /* @__PURE__ */ new Set([
81
+ "VariableDeclaration",
82
+ "ExpressionStatement",
83
+ "ReturnStatement",
84
+ "ExportDefaultDeclaration",
85
+ "ExportNamedDeclaration",
86
+ "Program"
87
+ ]);
88
+ while (parent && !statementTypes.has(parent.value.type)) {
89
+ parent = parent.parent;
90
+ }
91
+ if (parent && parent.value) {
92
+ let targetNode = parent.value;
93
+ if (targetNode.type !== "ExportDefaultDeclaration" && targetNode.type !== "ExportNamedDeclaration" && parent.parent && (parent.parent.value.type === "ExportDefaultDeclaration" || parent.parent.value.type === "ExportNamedDeclaration")) {
94
+ targetNode = parent.parent.value;
95
+ }
96
+ const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);
97
+ if (added) {
98
+ context.hasChanges = true;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }
104
+ });
105
+ if (context.hasChanges) {
106
+ context.messages.push(`Not Implemented ${fileInfo.path}: Mastra primitives now require a unique id parameter.`);
107
+ }
108
+ });
109
+ export {
110
+ mastra_required_id_default as default
111
+ };
112
+ //# sourceMappingURL=mastra-required-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/codemods/v1/not-implemented/mastra-required-id.ts"],"sourcesContent":["/* eslint-disable no-warning-comments */\nimport { insertCommentOnce } from '../../lib/add-comment';\nimport { createTransformer } from '../../lib/create-transformer';\n\n/**\n * Adds FIXME comments to Mastra primitives that now require an `id` parameter.\n * This includes storages, vector stores, agents, workflows, tools, scorers, and MCP servers.\n *\n * Before:\n * const agent = new Agent({ name: 'Support Agent' });\n * const tool = createTool({ description: 'Get weather' });\n *\n * After:\n * /* FIXME(mastra): Add a unique `id` parameter. See: ... *\\/\n * const agent = new Agent({ name: 'Support Agent' });\n * /* FIXME(mastra): Add a unique `id` parameter. See: ... *\\/\n * const tool = createTool({ description: 'Get weather' });\n */\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n const COMMENT_MESSAGE =\n 'FIXME(mastra): Add a unique `id` parameter. See: https://mastra.ai/guides/v1/migrations/upgrade-to-v1/mastra#required-id-parameter-for-all-mastra-primitives';\n\n // List of class names that require id\n const storageClasses = [\n 'LibSQLStore',\n 'PostgresStore',\n 'D1Store',\n 'MongoDBStore',\n 'DynamoDBStore',\n 'PgVector',\n 'ChromaVector',\n 'PineconeVector',\n 'QdrantVector',\n 'LanceVector',\n 'Agent',\n 'MCPServer',\n ];\n\n // List of function names that require id\n const createFunctions = ['createWorkflow', 'createTool', 'createScorer'];\n\n // Find NewExpression for classes\n root.find(j.NewExpression).forEach(path => {\n if (path.value.callee.type === 'Identifier') {\n const className = path.value.callee.name;\n\n if (storageClasses.includes(className)) {\n // Check if the config already has an id property\n const hasId = path.value.arguments.some(arg => {\n if (arg.type === 'ObjectExpression') {\n return arg.properties?.some(\n prop =>\n (prop.type === 'Property' || prop.type === 'ObjectProperty') &&\n prop.key?.type === 'Identifier' &&\n prop.key.name === 'id',\n );\n }\n return false;\n });\n\n if (!hasId) {\n // Find the parent statement to add comment\n let parent = path.parent;\n const statementTypes = new Set([\n 'VariableDeclaration',\n 'ExpressionStatement',\n 'ReturnStatement',\n 'ExportDefaultDeclaration',\n 'ExportNamedDeclaration',\n 'Program',\n ]);\n\n while (parent && !statementTypes.has(parent.value.type)) {\n parent = parent.parent;\n }\n\n if (parent && parent.value) {\n // For export declarations, add comment to the export itself\n let targetNode = parent.value;\n if (\n targetNode.type !== 'ExportDefaultDeclaration' &&\n targetNode.type !== 'ExportNamedDeclaration' &&\n parent.parent &&\n (parent.parent.value.type === 'ExportDefaultDeclaration' ||\n parent.parent.value.type === 'ExportNamedDeclaration')\n ) {\n targetNode = parent.parent.value;\n }\n\n const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);\n if (added) {\n context.hasChanges = true;\n }\n }\n }\n }\n }\n });\n\n // Find CallExpression for create functions\n root.find(j.CallExpression).forEach(path => {\n if (path.value.callee.type === 'Identifier') {\n const functionName = path.value.callee.name;\n\n if (createFunctions.includes(functionName)) {\n // Check if the config already has an id property\n const hasId = path.value.arguments.some(arg => {\n if (arg.type === 'ObjectExpression') {\n return arg.properties?.some(\n prop =>\n (prop.type === 'Property' || prop.type === 'ObjectProperty') &&\n prop.key?.type === 'Identifier' &&\n prop.key.name === 'id',\n );\n }\n return false;\n });\n\n if (!hasId) {\n // Find the parent statement to add comment\n let parent = path.parent;\n const statementTypes = new Set([\n 'VariableDeclaration',\n 'ExpressionStatement',\n 'ReturnStatement',\n 'ExportDefaultDeclaration',\n 'ExportNamedDeclaration',\n 'Program',\n ]);\n\n while (parent && !statementTypes.has(parent.value.type)) {\n parent = parent.parent;\n }\n\n if (parent && parent.value) {\n // For export declarations, add comment to the export itself\n let targetNode = parent.value;\n if (\n targetNode.type !== 'ExportDefaultDeclaration' &&\n targetNode.type !== 'ExportNamedDeclaration' &&\n parent.parent &&\n (parent.parent.value.type === 'ExportDefaultDeclaration' ||\n parent.parent.value.type === 'ExportNamedDeclaration')\n ) {\n targetNode = parent.parent.value;\n }\n\n const added = insertCommentOnce(targetNode, j, COMMENT_MESSAGE);\n if (added) {\n context.hasChanges = true;\n }\n }\n }\n }\n }\n });\n\n if (context.hasChanges) {\n context.messages.push(`Not Implemented ${fileInfo.path}: Mastra primitives now require a unique id parameter.`);\n }\n});\n"],"mappings":";;;;;;;;AAkBA,IAAO,6BAAQ,kBAAkB,CAAC,UAAU,KAAK,SAAS,YAAY;AACpE,QAAM,EAAE,GAAG,KAAK,IAAI;AAEpB,QAAM,kBACJ;AAGF,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,QAAM,kBAAkB,CAAC,kBAAkB,cAAc,cAAc;AAGvE,OAAK,KAAK,EAAE,aAAa,EAAE,QAAQ,UAAQ;AACzC,QAAI,KAAK,MAAM,OAAO,SAAS,cAAc;AAC3C,YAAM,YAAY,KAAK,MAAM,OAAO;AAEpC,UAAI,eAAe,SAAS,SAAS,GAAG;AAEtC,cAAM,QAAQ,KAAK,MAAM,UAAU,KAAK,SAAO;AAC7C,cAAI,IAAI,SAAS,oBAAoB;AACnC,mBAAO,IAAI,YAAY;AAAA,cACrB,WACG,KAAK,SAAS,cAAc,KAAK,SAAS,qBAC3C,KAAK,KAAK,SAAS,gBACnB,KAAK,IAAI,SAAS;AAAA,YACtB;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAED,YAAI,CAAC,OAAO;AAEV,cAAI,SAAS,KAAK;AAClB,gBAAM,iBAAiB,oBAAI,IAAI;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAED,iBAAO,UAAU,CAAC,eAAe,IAAI,OAAO,MAAM,IAAI,GAAG;AACvD,qBAAS,OAAO;AAAA,UAClB;AAEA,cAAI,UAAU,OAAO,OAAO;AAE1B,gBAAI,aAAa,OAAO;AACxB,gBACE,WAAW,SAAS,8BACpB,WAAW,SAAS,4BACpB,OAAO,WACN,OAAO,OAAO,MAAM,SAAS,8BAC5B,OAAO,OAAO,MAAM,SAAS,2BAC/B;AACA,2BAAa,OAAO,OAAO;AAAA,YAC7B;AAEA,kBAAM,QAAQ,kBAAkB,YAAY,GAAG,eAAe;AAC9D,gBAAI,OAAO;AACT,sBAAQ,aAAa;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAGD,OAAK,KAAK,EAAE,cAAc,EAAE,QAAQ,UAAQ;AAC1C,QAAI,KAAK,MAAM,OAAO,SAAS,cAAc;AAC3C,YAAM,eAAe,KAAK,MAAM,OAAO;AAEvC,UAAI,gBAAgB,SAAS,YAAY,GAAG;AAE1C,cAAM,QAAQ,KAAK,MAAM,UAAU,KAAK,SAAO;AAC7C,cAAI,IAAI,SAAS,oBAAoB;AACnC,mBAAO,IAAI,YAAY;AAAA,cACrB,WACG,KAAK,SAAS,cAAc,KAAK,SAAS,qBAC3C,KAAK,KAAK,SAAS,gBACnB,KAAK,IAAI,SAAS;AAAA,YACtB;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAED,YAAI,CAAC,OAAO;AAEV,cAAI,SAAS,KAAK;AAClB,gBAAM,iBAAiB,oBAAI,IAAI;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAED,iBAAO,UAAU,CAAC,eAAe,IAAI,OAAO,MAAM,IAAI,GAAG;AACvD,qBAAS,OAAO;AAAA,UAClB;AAEA,cAAI,UAAU,OAAO,OAAO;AAE1B,gBAAI,aAAa,OAAO;AACxB,gBACE,WAAW,SAAS,8BACpB,WAAW,SAAS,4BACpB,OAAO,WACN,OAAO,OAAO,MAAM,SAAS,8BAC5B,OAAO,OAAO,MAAM,SAAS,2BAC/B;AACA,2BAAa,OAAO,OAAO;AAAA,YAC7B;AAEA,kBAAM,QAAQ,kBAAkB,YAAY,GAAG,eAAe;AAC9D,gBAAI,OAAO;AACT,sBAAQ,aAAa;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,mBAAmB,SAAS,IAAI,wDAAwD;AAAA,EAChH;AACF,CAAC;","names":[]}
@@ -1,45 +1,6 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/codemods/v1/runtime-context.ts
21
- var runtime_context_exports = {};
22
- __export(runtime_context_exports, {
23
- default: () => runtime_context_default
24
- });
25
- module.exports = __toCommonJS(runtime_context_exports);
26
-
27
- // src/codemods/lib/create-transformer.ts
28
- function createTransformer(transformFn) {
29
- return function transformer(fileInfo, api, options) {
30
- const j = api.jscodeshift;
31
- const root = j(fileInfo.source);
32
- const context = {
33
- j,
34
- root,
35
- hasChanges: false,
36
- messages: []
37
- };
38
- transformFn(fileInfo, api, options, context);
39
- context.messages.forEach((message) => api.report(message));
40
- return context.hasChanges ? root.toSource({ quote: "single" }) : null;
41
- };
42
- }
1
+ import {
2
+ createTransformer
3
+ } from "../chunk-JNFQ6J6B.js";
43
4
 
44
5
  // src/codemods/v1/runtime-context.ts
45
6
  var runtime_context_default = createTransformer((fileInfo, api, options, context) => {
@@ -163,4 +124,7 @@ function shouldProcessKey(key, node) {
163
124
  if (key === "loc" || key === "comments") return false;
164
125
  return true;
165
126
  }
127
+ export {
128
+ runtime_context_default as default
129
+ };
166
130
  //# sourceMappingURL=runtime-context.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/codemods/v1/runtime-context.ts","../../../src/codemods/lib/create-transformer.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\n\n/**\n * The `RuntimeContext` class has been renamed to `RequestContext`, and all parameter names have been updated from `runtimeContext` to `requestContext` across all APIs.\n */\n\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n // Track whether RuntimeContext was imported from @mastra/core/runtime-context\n let hasRuntimeContextImport = false;\n\n // 1. Update import declarations from runtime-context to request-context\n root.find(j.ImportDeclaration).forEach(importPath => {\n const node = importPath.node;\n\n // Early return: Only process imports from @mastra/core/runtime-context\n if (node.source.value !== '@mastra/core/runtime-context') return;\n\n // Update the import path\n node.source.value = '@mastra/core/request-context';\n context.hasChanges = true;\n\n // Update RuntimeContext to RequestContext in import specifiers\n node.specifiers?.forEach(specifier => {\n if (specifier.type !== 'ImportSpecifier') return;\n\n const imported = specifier.imported;\n if (imported.type === 'Identifier' && imported.name === 'RuntimeContext') {\n hasRuntimeContextImport = true;\n imported.name = 'RequestContext';\n context.messages.push(`Updated import: RuntimeContext → RequestContext from '@mastra/core/request-context'`);\n }\n });\n });\n\n // Early return: Only proceed if RuntimeContext was imported from Mastra\n if (!hasRuntimeContextImport) return;\n\n // 2. Rename RuntimeContext type/class references\n renameIdentifiers(j, root, context, 'RuntimeContext', 'RequestContext', 'type');\n\n // 3. Rename runtimeContext variable/parameter identifiers\n renameIdentifiers(j, root, context, 'runtimeContext', 'requestContext', 'variable/parameter');\n\n // 4. Rename string literal 'runtimeContext' to 'requestContext' in Mastra middleware\n renameMiddlewareStringLiterals(j, root, context);\n});\n\n/**\n * Helper to rename all occurrences of an identifier\n */\nfunction renameIdentifiers(j: any, root: any, context: any, oldName: string, newName: string, description: string) {\n const identifiers = root.find(j.Identifier, { name: oldName });\n const count = identifiers.length;\n\n if (count === 0) return;\n\n identifiers.forEach((path: any) => {\n path.node.name = newName;\n });\n\n context.hasChanges = true;\n context.messages.push(`Renamed ${count} ${oldName} ${description} references to ${newName}`);\n}\n\n/**\n * Helper to rename 'runtimeContext' string literals in Mastra middleware handlers\n */\nfunction renameMiddlewareStringLiterals(j: any, root: any, context: any) {\n let stringLiteralCount = 0;\n\n // Find all new Mastra({ ... }) expressions\n root\n .find(j.NewExpression, {\n callee: { type: 'Identifier', name: 'Mastra' },\n })\n .forEach((mastraPath: any) => {\n const configArg = mastraPath.node.arguments[0];\n if (!configArg || configArg.type !== 'ObjectExpression') return;\n\n // Process this Mastra config to find and rename context.get() calls\n const contextParamNames = new Set<string>();\n stringLiteralCount += processNode(configArg, contextParamNames, context);\n });\n\n if (stringLiteralCount > 0) {\n context.messages.push(\n `Renamed ${stringLiteralCount} string literal 'runtimeContext' to 'requestContext' in Mastra server.middleware`,\n );\n }\n}\n\n/**\n * Recursively search for handler properties and rename context.get() calls\n */\nfunction processNode(node: any, contextParamNames: Set<string>, context: any): number {\n if (!node || typeof node !== 'object') return 0;\n\n let count = 0;\n\n // Check if this is a handler property\n if (isHandlerProperty(node)) {\n const paramName = extractFirstParamName(node.value);\n if (paramName) {\n contextParamNames.add(paramName);\n }\n }\n\n // Check if this is a context.get('runtimeContext') call\n if (isContextGetCall(node, contextParamNames)) {\n if (renameStringLiteralArg(node, context)) {\n count++;\n }\n }\n\n // Recursively process all object properties\n for (const key in node) {\n if (!shouldProcessKey(key, node)) continue;\n\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach(item => {\n count += processNode(item, contextParamNames, context);\n });\n } else if (value && typeof value === 'object') {\n count += processNode(value, contextParamNames, context);\n }\n }\n\n return count;\n}\n\n/**\n * Check if a node is a handler property (Property or ObjectProperty with key 'handler')\n */\nfunction isHandlerProperty(node: any): boolean {\n return (node.type === 'Property' || node.type === 'ObjectProperty') && node.key?.name === 'handler';\n}\n\n/**\n * Extract the first parameter name from a function expression\n */\nfunction extractFirstParamName(handlerValue: any): string | null {\n if (\n !handlerValue ||\n (handlerValue.type !== 'ArrowFunctionExpression' && handlerValue.type !== 'FunctionExpression')\n ) {\n return null;\n }\n\n if (!handlerValue.params || handlerValue.params.length === 0) {\n return null;\n }\n\n const firstParam = handlerValue.params[0];\n if (firstParam?.type === 'Identifier') {\n return firstParam.name;\n }\n\n return null;\n}\n\n/**\n * Check if a node is a context.get() call expression\n */\nfunction isContextGetCall(node: any, contextParamNames: Set<string>): boolean {\n if (node.type !== 'CallExpression') return false;\n\n const callee = node.callee;\n if (!callee || callee.type !== 'MemberExpression') return false;\n\n const object = callee.object;\n if (!object || object.type !== 'Identifier') return false;\n\n if (!contextParamNames.has(object.name)) return false;\n\n const property = callee.property;\n if (!property || property.type !== 'Identifier' || property.name !== 'get') return false;\n\n return true;\n}\n\n/**\n * Rename the first string argument from 'runtimeContext' to 'requestContext'\n */\nfunction renameStringLiteralArg(node: any, context: any): boolean {\n const firstArg = node.arguments?.[0];\n if (!firstArg) return false;\n\n const isRuntimeContextLiteral =\n (firstArg.type === 'StringLiteral' && firstArg.value === 'runtimeContext') ||\n (firstArg.type === 'Literal' && firstArg.value === 'runtimeContext');\n\n if (!isRuntimeContextLiteral) return false;\n\n // Rename the value\n firstArg.value = 'requestContext';\n\n // Update the raw value if it exists\n if (firstArg.extra?.raw) {\n const quote = firstArg.extra.raw.charAt(0);\n firstArg.extra.raw = `${quote}requestContext${quote}`;\n }\n\n context.hasChanges = true;\n return true;\n}\n\n/**\n * Check if we should process this object key during recursion\n */\nfunction shouldProcessKey(key: string, node: any): boolean {\n // Skip non-own properties\n if (!node.hasOwnProperty(key)) return false;\n\n // Skip metadata properties that don't contain code\n if (key === 'loc' || key === 'comments') return false;\n\n return true;\n}\n","// Copied from https://github.com/vercel/ai/blob/main/packages/codemod/src/codemods/lib/create-transformer.ts\n// License: Apache-2.0\n\nimport type { FileInfo, API, JSCodeshift, Collection } from 'jscodeshift';\n\ntype TransformerFunction = (fileInfo: FileInfo, api: API, options: any, context: TransformContext) => void;\n\nexport interface TransformContext {\n /**\n * The jscodeshift API object.\n */\n j: JSCodeshift;\n\n /**\n * The root collection of the AST.\n */\n root: Collection<any>;\n\n /**\n * Codemods should set this to true if they make any changes to the AST.\n */\n hasChanges: boolean;\n\n /**\n * Codemods can append messages to this array to report information to the user.\n */\n messages: string[];\n}\n\nexport function createTransformer(transformFn: TransformerFunction) {\n // Note the return type of this function is explicitly designed to conform to\n // the signature expected by jscodeshift. For more see\n // https://github.com/facebook/jscodeshift\n return function transformer(fileInfo: FileInfo, api: API, options: any) {\n const j = api.jscodeshift;\n const root = j(fileInfo.source);\n const context: TransformContext = {\n j,\n root,\n hasChanges: false,\n messages: [],\n };\n\n // Execute the transformation\n transformFn(fileInfo, api, options, context);\n\n // Report any messages\n context.messages.forEach(message => api.report(message));\n\n // Return the transformed source code if changes were made\n return context.hasChanges ? root.toSource({ quote: 'single' }) : null;\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/codemods/v1/runtime-context.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\n\n/**\n * The `RuntimeContext` class has been renamed to `RequestContext`, and all parameter names have been updated from `runtimeContext` to `requestContext` across all APIs.\n */\n\nexport default createTransformer((fileInfo, api, options, context) => {\n const { j, root } = context;\n\n // Track whether RuntimeContext was imported from @mastra/core/runtime-context\n let hasRuntimeContextImport = false;\n\n // 1. Update import declarations from runtime-context to request-context\n root.find(j.ImportDeclaration).forEach(importPath => {\n const node = importPath.node;\n\n // Early return: Only process imports from @mastra/core/runtime-context\n if (node.source.value !== '@mastra/core/runtime-context') return;\n\n // Update the import path\n node.source.value = '@mastra/core/request-context';\n context.hasChanges = true;\n\n // Update RuntimeContext to RequestContext in import specifiers\n node.specifiers?.forEach(specifier => {\n if (specifier.type !== 'ImportSpecifier') return;\n\n const imported = specifier.imported;\n if (imported.type === 'Identifier' && imported.name === 'RuntimeContext') {\n hasRuntimeContextImport = true;\n imported.name = 'RequestContext';\n context.messages.push(`Updated import: RuntimeContext → RequestContext from '@mastra/core/request-context'`);\n }\n });\n });\n\n // Early return: Only proceed if RuntimeContext was imported from Mastra\n if (!hasRuntimeContextImport) return;\n\n // 2. Rename RuntimeContext type/class references\n renameIdentifiers(j, root, context, 'RuntimeContext', 'RequestContext', 'type');\n\n // 3. Rename runtimeContext variable/parameter identifiers\n renameIdentifiers(j, root, context, 'runtimeContext', 'requestContext', 'variable/parameter');\n\n // 4. Rename string literal 'runtimeContext' to 'requestContext' in Mastra middleware\n renameMiddlewareStringLiterals(j, root, context);\n});\n\n/**\n * Helper to rename all occurrences of an identifier\n */\nfunction renameIdentifiers(j: any, root: any, context: any, oldName: string, newName: string, description: string) {\n const identifiers = root.find(j.Identifier, { name: oldName });\n const count = identifiers.length;\n\n if (count === 0) return;\n\n identifiers.forEach((path: any) => {\n path.node.name = newName;\n });\n\n context.hasChanges = true;\n context.messages.push(`Renamed ${count} ${oldName} ${description} references to ${newName}`);\n}\n\n/**\n * Helper to rename 'runtimeContext' string literals in Mastra middleware handlers\n */\nfunction renameMiddlewareStringLiterals(j: any, root: any, context: any) {\n let stringLiteralCount = 0;\n\n // Find all new Mastra({ ... }) expressions\n root\n .find(j.NewExpression, {\n callee: { type: 'Identifier', name: 'Mastra' },\n })\n .forEach((mastraPath: any) => {\n const configArg = mastraPath.node.arguments[0];\n if (!configArg || configArg.type !== 'ObjectExpression') return;\n\n // Process this Mastra config to find and rename context.get() calls\n const contextParamNames = new Set<string>();\n stringLiteralCount += processNode(configArg, contextParamNames, context);\n });\n\n if (stringLiteralCount > 0) {\n context.messages.push(\n `Renamed ${stringLiteralCount} string literal 'runtimeContext' to 'requestContext' in Mastra server.middleware`,\n );\n }\n}\n\n/**\n * Recursively search for handler properties and rename context.get() calls\n */\nfunction processNode(node: any, contextParamNames: Set<string>, context: any): number {\n if (!node || typeof node !== 'object') return 0;\n\n let count = 0;\n\n // Check if this is a handler property\n if (isHandlerProperty(node)) {\n const paramName = extractFirstParamName(node.value);\n if (paramName) {\n contextParamNames.add(paramName);\n }\n }\n\n // Check if this is a context.get('runtimeContext') call\n if (isContextGetCall(node, contextParamNames)) {\n if (renameStringLiteralArg(node, context)) {\n count++;\n }\n }\n\n // Recursively process all object properties\n for (const key in node) {\n if (!shouldProcessKey(key, node)) continue;\n\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach(item => {\n count += processNode(item, contextParamNames, context);\n });\n } else if (value && typeof value === 'object') {\n count += processNode(value, contextParamNames, context);\n }\n }\n\n return count;\n}\n\n/**\n * Check if a node is a handler property (Property or ObjectProperty with key 'handler')\n */\nfunction isHandlerProperty(node: any): boolean {\n return (node.type === 'Property' || node.type === 'ObjectProperty') && node.key?.name === 'handler';\n}\n\n/**\n * Extract the first parameter name from a function expression\n */\nfunction extractFirstParamName(handlerValue: any): string | null {\n if (\n !handlerValue ||\n (handlerValue.type !== 'ArrowFunctionExpression' && handlerValue.type !== 'FunctionExpression')\n ) {\n return null;\n }\n\n if (!handlerValue.params || handlerValue.params.length === 0) {\n return null;\n }\n\n const firstParam = handlerValue.params[0];\n if (firstParam?.type === 'Identifier') {\n return firstParam.name;\n }\n\n return null;\n}\n\n/**\n * Check if a node is a context.get() call expression\n */\nfunction isContextGetCall(node: any, contextParamNames: Set<string>): boolean {\n if (node.type !== 'CallExpression') return false;\n\n const callee = node.callee;\n if (!callee || callee.type !== 'MemberExpression') return false;\n\n const object = callee.object;\n if (!object || object.type !== 'Identifier') return false;\n\n if (!contextParamNames.has(object.name)) return false;\n\n const property = callee.property;\n if (!property || property.type !== 'Identifier' || property.name !== 'get') return false;\n\n return true;\n}\n\n/**\n * Rename the first string argument from 'runtimeContext' to 'requestContext'\n */\nfunction renameStringLiteralArg(node: any, context: any): boolean {\n const firstArg = node.arguments?.[0];\n if (!firstArg) return false;\n\n const isRuntimeContextLiteral =\n (firstArg.type === 'StringLiteral' && firstArg.value === 'runtimeContext') ||\n (firstArg.type === 'Literal' && firstArg.value === 'runtimeContext');\n\n if (!isRuntimeContextLiteral) return false;\n\n // Rename the value\n firstArg.value = 'requestContext';\n\n // Update the raw value if it exists\n if (firstArg.extra?.raw) {\n const quote = firstArg.extra.raw.charAt(0);\n firstArg.extra.raw = `${quote}requestContext${quote}`;\n }\n\n context.hasChanges = true;\n return true;\n}\n\n/**\n * Check if we should process this object key during recursion\n */\nfunction shouldProcessKey(key: string, node: any): boolean {\n // Skip non-own properties\n if (!node.hasOwnProperty(key)) return false;\n\n // Skip metadata properties that don't contain code\n if (key === 'loc' || key === 'comments') return false;\n\n return true;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,41 @@
1
+ import {
2
+ createTransformer
3
+ } from "../chunk-JNFQ6J6B.js";
4
+ import {
5
+ trackMultipleClassInstances
6
+ } from "../chunk-PKCFDS7J.js";
7
+
8
+ // src/codemods/v1/storage-get-messages-paginated.ts
9
+ var storage_get_messages_paginated_default = createTransformer((_fileInfo, _api, _options, context) => {
10
+ const { j, root } = context;
11
+ const storeTypes = ["PostgresStore", "LibSQLStore", "PgStore", "DynamoDBStore", "MongoDBStore", "MSSQLStore"];
12
+ const storageInstances = trackMultipleClassInstances(j, root, storeTypes);
13
+ if (storageInstances.size === 0) return;
14
+ root.find(j.CallExpression).forEach((path) => {
15
+ const { callee } = path.value;
16
+ if (callee.type !== "MemberExpression") return;
17
+ if (callee.object.type !== "Identifier") return;
18
+ if (callee.property.type !== "Identifier") return;
19
+ if (!storageInstances.has(callee.object.name)) return;
20
+ if (callee.property.name !== "getMessagesPaginated") return;
21
+ callee.property.name = "listMessages";
22
+ const args = path.value.arguments;
23
+ const firstArg = args[0];
24
+ if (firstArg && firstArg.type === "ObjectExpression" && firstArg.properties) {
25
+ firstArg.properties.forEach((prop) => {
26
+ if ((prop.type === "Property" || prop.type === "ObjectProperty") && prop.key && prop.key.type === "Identifier") {
27
+ if (prop.key.name === "offset") prop.key.name = "page";
28
+ if (prop.key.name === "limit") prop.key.name = "perPage";
29
+ }
30
+ });
31
+ }
32
+ context.hasChanges = true;
33
+ });
34
+ if (context.hasChanges) {
35
+ context.messages.push("Renamed getMessagesPaginated to listMessages and offset/limit to page/perPage");
36
+ }
37
+ });
38
+ export {
39
+ storage_get_messages_paginated_default as default
40
+ };
41
+ //# sourceMappingURL=storage-get-messages-paginated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/codemods/v1/storage-get-messages-paginated.ts"],"sourcesContent":["import { createTransformer } from '../lib/create-transformer';\nimport { trackMultipleClassInstances } from '../lib/utils';\n\n/**\n * Renames storage.getMessagesPaginated() to storage.listMessages() and updates pagination parameters.\n * Changes offset/limit to page/perPage for more intuitive pagination.\n *\n * Before:\n * await storage.getMessagesPaginated({\n * threadId: 'thread-123',\n * offset: 0,\n * limit: 20,\n * });\n *\n * After:\n * await storage.listMessages({\n * threadId: 'thread-123',\n * page: 0,\n * perPage: 20,\n * });\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 if (storageInstances.size === 0) return;\n\n // Single pass: rename method and transform properties\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 if (!storageInstances.has(callee.object.name)) return;\n if (callee.property.name !== 'getMessagesPaginated') return;\n\n // Rename method\n callee.property.name = 'listMessages';\n\n // Transform offset/limit to page/perPage\n const args = path.value.arguments;\n const firstArg = args[0];\n if (firstArg && firstArg.type === 'ObjectExpression' && firstArg.properties) {\n firstArg.properties.forEach((prop: any) => {\n if (\n (prop.type === 'Property' || prop.type === 'ObjectProperty') &&\n prop.key &&\n prop.key.type === 'Identifier'\n ) {\n if (prop.key.name === 'offset') prop.key.name = 'page';\n if (prop.key.name === 'limit') prop.key.name = 'perPage';\n }\n });\n }\n\n context.hasChanges = true;\n });\n\n if (context.hasChanges) {\n context.messages.push('Renamed getMessagesPaginated to listMessages and offset/limit to page/perPage');\n }\n});\n"],"mappings":";;;;;;;;AAqBA,IAAO,yCAAQ,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,MAAI,iBAAiB,SAAS,EAAG;AAGjC,OAAK,KAAK,EAAE,cAAc,EAAE,QAAQ,UAAQ;AAC1C,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,QAAI,OAAO,SAAS,mBAAoB;AACxC,QAAI,OAAO,OAAO,SAAS,aAAc;AACzC,QAAI,OAAO,SAAS,SAAS,aAAc;AAC3C,QAAI,CAAC,iBAAiB,IAAI,OAAO,OAAO,IAAI,EAAG;AAC/C,QAAI,OAAO,SAAS,SAAS,uBAAwB;AAGrD,WAAO,SAAS,OAAO;AAGvB,UAAM,OAAO,KAAK,MAAM;AACxB,UAAM,WAAW,KAAK,CAAC;AACvB,QAAI,YAAY,SAAS,SAAS,sBAAsB,SAAS,YAAY;AAC3E,eAAS,WAAW,QAAQ,CAAC,SAAc;AACzC,aACG,KAAK,SAAS,cAAc,KAAK,SAAS,qBAC3C,KAAK,OACL,KAAK,IAAI,SAAS,cAClB;AACA,cAAI,KAAK,IAAI,SAAS,SAAU,MAAK,IAAI,OAAO;AAChD,cAAI,KAAK,IAAI,SAAS,QAAS,MAAK,IAAI,OAAO;AAAA,QACjD;AAAA,MACF,CAAC;AAAA,IACH;AAEA,YAAQ,aAAa;AAAA,EACvB,CAAC;AAED,MAAI,QAAQ,YAAY;AACtB,YAAQ,SAAS,KAAK,+EAA+E;AAAA,EACvG;AACF,CAAC;","names":[]}