assistant-ui 0.0.117 → 0.0.119
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/LICENSE +1 -1
- package/dist/codemods/utils/createTransformer.d.ts +10 -12
- package/dist/codemods/utils/createTransformer.d.ts.map +1 -1
- package/dist/codemods/utils/resolveBinding.d.ts +3 -0
- package/dist/codemods/utils/resolveBinding.d.ts.map +1 -0
- package/dist/codemods/utils/resolveBinding.js +78 -0
- package/dist/codemods/utils/resolveBinding.js.map +1 -0
- package/dist/codemods/v0-11/content-part-to-message-part.d.ts +1 -3
- package/dist/codemods/v0-11/content-part-to-message-part.d.ts.map +1 -1
- package/dist/codemods/v0-12/assistant-api-to-aui.d.ts +1 -3
- package/dist/codemods/v0-12/assistant-api-to-aui.d.ts.map +1 -1
- package/dist/codemods/v0-12/assistant-api-to-aui.js +51 -99
- package/dist/codemods/v0-12/assistant-api-to-aui.js.map +1 -1
- package/dist/codemods/v0-12/event-names-to-camelcase.d.ts +1 -3
- package/dist/codemods/v0-12/event-names-to-camelcase.d.ts.map +1 -1
- package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts +1 -3
- package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts.map +1 -1
- package/dist/codemods/v0-12/primitive-if-to-aui-if.js +6 -6
- package/dist/codemods/v0-12/primitive-if-to-aui-if.js.map +1 -1
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.d.ts +1 -3
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.d.ts.map +1 -1
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.js +33 -5
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.js.map +1 -1
- package/dist/codemods/v0-8/ui-package-split.d.ts +1 -3
- package/dist/codemods/v0-8/ui-package-split.d.ts.map +1 -1
- package/dist/codemods/v0-9/edge-package-split.d.ts +1 -3
- package/dist/codemods/v0-9/edge-package-split.d.ts.map +1 -1
- package/dist/commands/add.d.ts +10 -12
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +3 -3
- package/dist/commands/agent.d.ts +0 -2
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +16 -13
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/create.d.ts +33 -28
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +19 -15
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.d.ts +8 -10
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/info.d.ts +2 -4
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +3 -3
- package/dist/commands/init.d.ts +5 -6
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -2
- package/dist/commands/mcp.d.ts +0 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/update.d.ts +0 -2
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/commands/upgrade.d.ts +4 -6
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/agent-skill.d.ts +8 -6
- package/dist/lib/agent-skill.d.ts.map +1 -1
- package/dist/lib/agent-skill.js +78 -2
- package/dist/lib/agent-skill.js.map +1 -1
- package/dist/lib/create-project.d.ts +22 -20
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +91 -5
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/handle-cli-error.d.ts +0 -2
- package/dist/lib/handle-cli-error.d.ts.map +1 -1
- package/dist/lib/install-ai-sdk-lib.d.ts +0 -2
- package/dist/lib/install-ai-sdk-lib.d.ts.map +1 -1
- package/dist/lib/install-edge-lib.d.ts +0 -2
- package/dist/lib/install-edge-lib.d.ts.map +1 -1
- package/dist/lib/run-spawn.d.ts +11 -12
- package/dist/lib/run-spawn.d.ts.map +1 -1
- package/dist/lib/run-spawn.js +25 -10
- package/dist/lib/run-spawn.js.map +1 -1
- package/dist/lib/transform-options.d.ts +4 -6
- package/dist/lib/transform-options.d.ts.map +1 -1
- package/dist/lib/transform.d.ts +11 -13
- package/dist/lib/transform.d.ts.map +1 -1
- package/dist/lib/transform.js +19 -35
- package/dist/lib/transform.js.map +1 -1
- package/dist/lib/upgrade.d.ts +2 -4
- package/dist/lib/upgrade.d.ts.map +1 -1
- package/dist/lib/upgrade.js +6 -11
- package/dist/lib/upgrade.js.map +1 -1
- package/dist/lib/utils/config.d.ts +14 -16
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/file-scanner.d.ts +8 -10
- package/dist/lib/utils/file-scanner.d.ts.map +1 -1
- package/dist/lib/utils/logger.d.ts +6 -8
- package/dist/lib/utils/logger.d.ts.map +1 -1
- package/dist/lib/utils/package-installer.d.ts +5 -7
- package/dist/lib/utils/package-installer.d.ts.map +1 -1
- package/dist/lib/utils/package-json.d.ts +0 -2
- package/dist/lib/utils/package-json.d.ts.map +1 -1
- package/dist/lib/utils/package-manager.d.ts +2 -4
- package/dist/lib/utils/package-manager.d.ts.map +1 -1
- package/dist/lib/utils/package-manager.js +13 -2
- package/dist/lib/utils/package-manager.js.map +1 -1
- package/dist/lib/utils/registry.d.ts +0 -2
- package/dist/lib/utils/registry.d.ts.map +1 -1
- package/dist/lib/utils/workspace.d.ts +0 -2
- package/dist/lib/utils/workspace.d.ts.map +1 -1
- package/dist/program.d.ts +0 -2
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +6 -6
- package/dist/run.d.ts +0 -2
- package/dist/run.d.ts.map +1 -1
- package/package.json +2 -3
- package/src/codemods/utils/resolveBinding.test.ts +107 -0
- package/src/codemods/utils/resolveBinding.ts +130 -0
- package/src/codemods/v0-12/__tests__/assistant-api-to-aui.test.ts +256 -0
- package/src/codemods/v0-12/__tests__/primitive-if-to-aui-if.test.ts +31 -0
- package/src/codemods/v0-12/assistant-api-to-aui.ts +125 -225
- package/src/codemods/v0-12/primitive-if-to-aui-if.ts +8 -5
- package/src/codemods/v0-15/__tests__/aui-accessor-calls-to-properties.test.ts +101 -0
- package/src/codemods/v0-15/aui-accessor-calls-to-properties.ts +60 -5
- package/src/commands/agent.ts +15 -22
- package/src/commands/create.ts +24 -15
- package/src/lib/agent-skill.ts +103 -1
- package/src/lib/create-project.ts +99 -4
- package/src/lib/run-spawn.test.ts +47 -0
- package/src/lib/run-spawn.ts +29 -17
- package/src/lib/transform-files.test.ts +71 -0
- package/src/lib/transform.test.ts +69 -1
- package/src/lib/transform.ts +23 -38
- package/src/lib/upgrade.ts +9 -13
- package/src/lib/utils/package-manager.ts +24 -1
- package/plugin/.claude-plugin/plugin.json +0 -8
- package/plugin/skills/assistant-ui/SKILL.md +0 -199
- package/plugin/skills/assistant-ui/shipables.json +0 -22
package/LICENSE
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/codemods/utils/createTransformer.d.ts
|
|
1
|
+
import type { FileInfo, API, JSCodeshift, Collection } from "jscodeshift";
|
|
3
2
|
export type TransformerFunction = (context: TransformContext, fileInfo: FileInfo, api: API, options: any) => void;
|
|
4
3
|
export interface TransformContext {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The jscodeshift API object.
|
|
6
|
+
*/
|
|
7
|
+
j: JSCodeshift;
|
|
8
|
+
/**
|
|
9
|
+
* The root collection of the AST.
|
|
10
|
+
*/
|
|
11
|
+
root: Collection<any>;
|
|
12
|
+
markAsChanged: () => void;
|
|
14
13
|
}
|
|
15
14
|
export declare function createTransformer(transformFn: TransformerFunction): (fileInfo: FileInfo, api: API, options: any) => string | null;
|
|
16
|
-
//#endregion
|
|
17
15
|
//# sourceMappingURL=createTransformer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTransformer.d.ts","
|
|
1
|
+
{"version":3,"file":"createTransformer.d.ts","sourceRoot":"","sources":["../../../src/codemods/utils/createTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG,CAChC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,GAAG,KACT,IAAI,CAAC;AAEV,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,CAAC,EAAE,WAAW,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAEtB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,mBAAmB,IACpC,UAAU,QAAQ,EAAE,KAAK,GAAG,EAAE,SAAS,GAAG,mBAgBvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveBinding.d.ts","sourceRoot":"","sources":["../../../src/codemods/utils/resolveBinding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0E/C,eAAO,MAAM,cAAc,GACzB,GAAG,WAAW,EACd,MAAM,GAAG,EACT,MAAM,MAAM,KACX,GAmDF,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
//#region src/codemods/utils/resolveBinding.ts
|
|
2
|
+
const patternBinding = (node, name) => {
|
|
3
|
+
switch (node?.type) {
|
|
4
|
+
case "Identifier": return node.name === name ? node : void 0;
|
|
5
|
+
case "TSParameterProperty": return patternBinding(node.parameter, name);
|
|
6
|
+
case "AssignmentPattern": return patternBinding(node.left, name);
|
|
7
|
+
case "RestElement": return patternBinding(node.argument, name);
|
|
8
|
+
case "ObjectPattern": return node.properties.map((p) => patternBinding(p.value ?? p.argument, name)).find(Boolean);
|
|
9
|
+
case "ArrayPattern": return node.elements.map((p) => patternBinding(p, name)).find(Boolean);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const declarationBinding = (node, name) => {
|
|
13
|
+
switch (node?.type) {
|
|
14
|
+
case "ExportNamedDeclaration":
|
|
15
|
+
case "ExportDefaultDeclaration": return declarationBinding(node.declaration, name);
|
|
16
|
+
case "VariableDeclaration": return node.declarations.map((d) => patternBinding(d.id, name)).find(Boolean);
|
|
17
|
+
case "ImportDeclaration":
|
|
18
|
+
if (node.importKind === "type") return;
|
|
19
|
+
return node.specifiers?.filter((s) => s.importKind !== "type").map((s) => patternBinding(s.local, name)).find(Boolean);
|
|
20
|
+
case "TSTypeAliasDeclaration":
|
|
21
|
+
case "TSInterfaceDeclaration":
|
|
22
|
+
case "TSDeclareFunction": return;
|
|
23
|
+
default: return patternBinding(node?.id, name);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const hoistedBinding = (j, body, name) => {
|
|
27
|
+
let binding;
|
|
28
|
+
j.types.visit(body, {
|
|
29
|
+
visitFunction() {
|
|
30
|
+
return false;
|
|
31
|
+
},
|
|
32
|
+
visitClassDeclaration() {
|
|
33
|
+
return false;
|
|
34
|
+
},
|
|
35
|
+
visitClassExpression() {
|
|
36
|
+
return false;
|
|
37
|
+
},
|
|
38
|
+
visitTSModuleBlock(path) {
|
|
39
|
+
if (path.node !== body) return false;
|
|
40
|
+
this.traverse(path);
|
|
41
|
+
},
|
|
42
|
+
visitVariableDeclaration(path) {
|
|
43
|
+
if (path.node.kind === "var") binding ??= declarationBinding(path.node, name);
|
|
44
|
+
this.traverse(path);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return binding;
|
|
48
|
+
};
|
|
49
|
+
const resolveBinding = (j, path, name) => {
|
|
50
|
+
let child = path;
|
|
51
|
+
for (let current = path.parent; current; child = current, current = current.parent) {
|
|
52
|
+
const node = current.value;
|
|
53
|
+
let binding;
|
|
54
|
+
if (Array.isArray(node.params)) binding = node.params.map((p) => patternBinding(p, name)).find(Boolean) ?? patternBinding(node.id, name) ?? (child.value === node.body ? hoistedBinding(j, node.body, name) : void 0);
|
|
55
|
+
else if (node.type === "CatchClause") binding = patternBinding(node.param, name);
|
|
56
|
+
else if (node.type === "ClassExpression") binding = patternBinding(node.id, name);
|
|
57
|
+
else if (node.type === "ForStatement") binding = declarationBinding(node.init, name);
|
|
58
|
+
else if (node.type === "ForInStatement" || node.type === "ForOfStatement") binding = declarationBinding(node.left, name);
|
|
59
|
+
else {
|
|
60
|
+
binding = (node.type === "SwitchStatement" && child.value !== node.discriminant ? node.cases.flatMap((c) => c.consequent) : [
|
|
61
|
+
"BlockStatement",
|
|
62
|
+
"Program",
|
|
63
|
+
"StaticBlock",
|
|
64
|
+
"TSModuleBlock"
|
|
65
|
+
].includes(node.type) ? node.body : []).map((s) => declarationBinding(s, name)).find(Boolean);
|
|
66
|
+
if (!binding && [
|
|
67
|
+
"Program",
|
|
68
|
+
"StaticBlock",
|
|
69
|
+
"TSModuleBlock"
|
|
70
|
+
].includes(node.type)) binding = hoistedBinding(j, node, name);
|
|
71
|
+
}
|
|
72
|
+
if (binding) return binding;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
export { resolveBinding };
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=resolveBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveBinding.js","names":[],"sources":["../../../src/codemods/utils/resolveBinding.ts"],"sourcesContent":["import type { JSCodeshift } from \"jscodeshift\";\n\nconst patternBinding = (node: any, name: string): any => {\n switch (node?.type) {\n case \"Identifier\":\n return node.name === name ? node : undefined;\n case \"TSParameterProperty\":\n return patternBinding(node.parameter, name);\n case \"AssignmentPattern\":\n return patternBinding(node.left, name);\n case \"RestElement\":\n return patternBinding(node.argument, name);\n case \"ObjectPattern\":\n return node.properties\n .map((p: any) => patternBinding(p.value ?? p.argument, name))\n .find(Boolean);\n case \"ArrayPattern\":\n return node.elements\n .map((p: any) => patternBinding(p, name))\n .find(Boolean);\n }\n};\n\nconst declarationBinding = (node: any, name: string): any => {\n switch (node?.type) {\n case \"ExportNamedDeclaration\":\n case \"ExportDefaultDeclaration\":\n return declarationBinding(node.declaration, name);\n case \"VariableDeclaration\":\n return node.declarations\n .map((d: any) => patternBinding(d.id, name))\n .find(Boolean);\n case \"ImportDeclaration\":\n if (node.importKind === \"type\") return;\n return node.specifiers\n ?.filter((s: any) => s.importKind !== \"type\")\n .map((s: any) => patternBinding(s.local, name))\n .find(Boolean);\n case \"TSTypeAliasDeclaration\":\n case \"TSInterfaceDeclaration\":\n case \"TSDeclareFunction\":\n return;\n default:\n return patternBinding(node?.id, name);\n }\n};\n\nconst hoistedBinding = (j: JSCodeshift, body: any, name: string): any => {\n let binding: any;\n j.types.visit(body, {\n visitFunction() {\n return false;\n },\n visitClassDeclaration() {\n return false;\n },\n visitClassExpression() {\n return false;\n },\n visitTSModuleBlock(path) {\n if (path.node !== body) return false;\n this.traverse(path);\n return undefined;\n },\n visitVariableDeclaration(path) {\n if (path.node.kind === \"var\")\n binding ??= declarationBinding(path.node, name);\n this.traverse(path);\n },\n });\n return binding;\n};\n\n// ast-types scopes do not distinguish block-scoped declarations.\nexport const resolveBinding = (\n j: JSCodeshift,\n path: any,\n name: string,\n): any => {\n let child = path;\n for (\n let current = path.parent;\n current;\n child = current, current = current.parent\n ) {\n const node = current.value;\n let binding: any;\n if (Array.isArray(node.params)) {\n binding =\n node.params.map((p: any) => patternBinding(p, name)).find(Boolean) ??\n patternBinding(node.id, name) ??\n (child.value === node.body\n ? hoistedBinding(j, node.body, name)\n : undefined);\n } else if (node.type === \"CatchClause\") {\n binding = patternBinding(node.param, name);\n } else if (node.type === \"ClassExpression\") {\n binding = patternBinding(node.id, name);\n } else if (node.type === \"ForStatement\") {\n binding = declarationBinding(node.init, name);\n } else if (\n node.type === \"ForInStatement\" ||\n node.type === \"ForOfStatement\"\n ) {\n binding = declarationBinding(node.left, name);\n } else {\n const statements =\n node.type === \"SwitchStatement\" && child.value !== node.discriminant\n ? node.cases.flatMap((c: any) => c.consequent)\n : [\n \"BlockStatement\",\n \"Program\",\n \"StaticBlock\",\n \"TSModuleBlock\",\n ].includes(node.type)\n ? node.body\n : [];\n binding = statements\n .map((s: any) => declarationBinding(s, name))\n .find(Boolean);\n if (\n !binding &&\n [\"Program\", \"StaticBlock\", \"TSModuleBlock\"].includes(node.type)\n ) {\n binding = hoistedBinding(j, node, name);\n }\n }\n if (binding) return binding;\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
//#region src/codemods/v0-11/content-part-to-message-part.d.ts
|
|
2
1
|
declare const migrateContentPartToMessagePart: (fileInfo: import("jscodeshift/src/core").FileInfo, api: import("jscodeshift/src/core").API, options: any) => string | null;
|
|
3
|
-
|
|
4
|
-
export { migrateContentPartToMessagePart as default };
|
|
2
|
+
export default migrateContentPartToMessagePart;
|
|
5
3
|
//# sourceMappingURL=content-part-to-message-part.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-part-to-message-part.d.ts","
|
|
1
|
+
{"version":3,"file":"content-part-to-message-part.d.ts","sourceRoot":"","sources":["../../../src/codemods/v0-11/content-part-to-message-part.ts"],"names":[],"mappings":"AAuEA,QAAA,MAAM,+BAA+B,6HAiGpC,CAAC;AAEF,eAAe,+BAA+B,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
//#region src/codemods/v0-12/assistant-api-to-aui.d.ts
|
|
2
1
|
declare const migrateAssistantApiToAui: (fileInfo: import("jscodeshift/src/core").FileInfo, api: import("jscodeshift/src/core").API, options: any) => string | null;
|
|
3
|
-
|
|
4
|
-
export { migrateAssistantApiToAui as default };
|
|
2
|
+
export default migrateAssistantApiToAui;
|
|
5
3
|
//# sourceMappingURL=assistant-api-to-aui.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-api-to-aui.d.ts","
|
|
1
|
+
{"version":3,"file":"assistant-api-to-aui.d.ts","sourceRoot":"","sources":["../../../src/codemods/v0-12/assistant-api-to-aui.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,wBAAwB,6HA2P7B,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createTransformer } from "../utils/createTransformer.js";
|
|
2
|
+
import { resolveBinding } from "../utils/resolveBinding.js";
|
|
2
3
|
//#region src/codemods/v0-12/assistant-api-to-aui.ts
|
|
3
4
|
const hookRenamingMap = {
|
|
4
5
|
useAssistantApi: "useAui",
|
|
@@ -9,85 +10,65 @@ const componentRenamingMap = {
|
|
|
9
10
|
AssistantIf: "AuiIf",
|
|
10
11
|
AssistantProvider: "AuiProvider"
|
|
11
12
|
};
|
|
12
|
-
const isUseAuiCall = (j, node) => {
|
|
13
|
-
return node && j.CallExpression.check(node) && j.Identifier.check(node.callee) && (node.callee.name === "useAui" || node.callee.name === "useAssistantApi");
|
|
14
|
-
};
|
|
15
13
|
const migrateAssistantApiToAui = createTransformer(({ j, root, markAsChanged }) => {
|
|
16
14
|
root.find(j.ImportDeclaration).forEach((path) => {
|
|
17
15
|
const source = path.value.source.value;
|
|
18
|
-
if (typeof source
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
|
|
16
|
+
if (typeof source !== "string" || !source.startsWith("@assistant-ui/")) return;
|
|
17
|
+
path.value.specifiers?.forEach((specifier, index) => {
|
|
18
|
+
if (!j.ImportSpecifier.check(specifier) || !j.Identifier.check(specifier.imported)) return;
|
|
19
|
+
const oldName = specifier.imported.name;
|
|
20
|
+
const importKind = specifier.importKind;
|
|
21
|
+
const newName = hookRenamingMap[oldName] ?? componentRenamingMap[oldName];
|
|
22
|
+
if (!newName) return;
|
|
23
|
+
if (specifier.local?.name === oldName && path.value.importKind !== "type" && importKind !== "type") {
|
|
24
|
+
const references = root.find(j.Identifier, { name: oldName }).paths().filter((reference) => {
|
|
25
|
+
const parent = reference.parent.value;
|
|
26
|
+
const node = reference.value;
|
|
27
|
+
if (parent.type.startsWith("Import") || parent.id === node) return false;
|
|
28
|
+
if (parent.key === node && !parent.computed && parent.value !== node) return false;
|
|
29
|
+
if (parent.property === node && !parent.computed) return false;
|
|
30
|
+
if (j.TSQualifiedName.check(parent) && parent.right === node) return false;
|
|
31
|
+
if (j.JSXAttribute.check(parent) || j.JSXNamespacedName.check(parent)) return false;
|
|
32
|
+
if (j.ExportSpecifier.check(parent)) {
|
|
33
|
+
if (reference.parent.parent.value.source || parent.local !== node) return false;
|
|
34
|
+
}
|
|
35
|
+
return resolveBinding(j, reference, oldName) === specifier.local;
|
|
36
|
+
});
|
|
37
|
+
if (!resolveBinding(j, path, newName) && references.every((reference) => !resolveBinding(j, reference, newName))) {
|
|
38
|
+
for (const reference of references) {
|
|
39
|
+
const parent = reference.parent.value;
|
|
40
|
+
if ((j.Property.check(parent) || j.ObjectProperty.check(parent)) && parent.shorthand) {
|
|
41
|
+
parent.shorthand = false;
|
|
42
|
+
parent.key = j.identifier(oldName);
|
|
43
|
+
parent.value = j.identifier(newName);
|
|
44
|
+
} else if (j.ExportSpecifier.check(parent)) reference.parent.replace(j.exportSpecifier.from({
|
|
45
|
+
local: j.identifier(newName),
|
|
46
|
+
exported: j.Identifier.check(parent.exported) ? j.identifier(parent.exported.name) : parent.exported
|
|
47
|
+
}));
|
|
48
|
+
else reference.value.name = newName;
|
|
49
|
+
}
|
|
50
|
+
specifier.local.name = newName;
|
|
32
51
|
}
|
|
33
52
|
}
|
|
53
|
+
const replacement = j.importSpecifier(j.identifier(newName), j.Identifier.check(specifier.local) ? j.identifier(specifier.local.name) : null);
|
|
54
|
+
replacement.importKind = importKind;
|
|
55
|
+
replacement.comments = specifier.comments;
|
|
56
|
+
path.get("specifiers", index).replace(replacement);
|
|
57
|
+
markAsChanged();
|
|
34
58
|
});
|
|
35
59
|
});
|
|
60
|
+
const hookBindings = /* @__PURE__ */ new Set();
|
|
61
|
+
root.find(j.ImportDeclaration).forEach((path) => {
|
|
62
|
+
if (!String(path.value.source.value).startsWith("@assistant-ui/") || path.value.importKind === "type") return;
|
|
63
|
+
for (const specifier of path.value.specifiers ?? []) if (j.ImportSpecifier.check(specifier) && j.Identifier.check(specifier.imported) && specifier.imported.name === "useAui" && specifier.importKind !== "type" && j.Identifier.check(specifier.local)) hookBindings.add(specifier.local);
|
|
64
|
+
});
|
|
36
65
|
const renamedDeclaratorIds = /* @__PURE__ */ new Set();
|
|
37
66
|
root.find(j.VariableDeclarator).forEach((path) => {
|
|
38
|
-
|
|
67
|
+
const { id, init } = path.value;
|
|
68
|
+
if (j.Identifier.check(id) && id.name === "api" && j.CallExpression.check(init) && j.Identifier.check(init.callee) && hookBindings.has(resolveBinding(j, path.get("init", "callee"), init.callee.name)) && !resolveBinding(j, path, "aui")) renamedDeclaratorIds.add(id);
|
|
39
69
|
});
|
|
40
70
|
if (renamedDeclaratorIds.size > 0) {
|
|
41
|
-
const
|
|
42
|
-
if (id && (id.type === "TSParameterProperty" || j.TSParameterProperty?.check?.(id))) return patternBindsApi(id.parameter);
|
|
43
|
-
if (j.Identifier.check(id)) return id.name === "api";
|
|
44
|
-
if (j.ObjectPattern.check(id)) return id.properties.some((prop) => patternBindsApi(prop.value ?? prop.argument ?? prop));
|
|
45
|
-
if (j.ArrayPattern.check(id)) return id.elements.some((el) => el && patternBindsApi(el));
|
|
46
|
-
if (j.AssignmentPattern.check(id)) return patternBindsApi(id.left);
|
|
47
|
-
if (j.RestElement.check(id)) return patternBindsApi(id.argument);
|
|
48
|
-
return false;
|
|
49
|
-
};
|
|
50
|
-
const declaredApi = (statement) => {
|
|
51
|
-
if (!statement) return void 0;
|
|
52
|
-
if (j.ExportNamedDeclaration.check(statement) || j.ExportDefaultDeclaration.check(statement)) return declaredApi(statement.declaration);
|
|
53
|
-
if (j.VariableDeclaration.check(statement)) {
|
|
54
|
-
for (const declarator of statement.declarations) {
|
|
55
|
-
if (!j.VariableDeclarator.check(declarator)) continue;
|
|
56
|
-
if (j.Identifier.check(declarator.id) && declarator.id.name === "api") return declarator.id;
|
|
57
|
-
if (patternBindsApi(declarator.id)) return "foreign";
|
|
58
|
-
}
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (statement.type === "TSTypeAliasDeclaration" || statement.type === "TSInterfaceDeclaration" || statement.type === "TSDeclareFunction") return void 0;
|
|
62
|
-
if (statement.id && j.Identifier.check(statement.id) && statement.id.name === "api") return "foreign";
|
|
63
|
-
};
|
|
64
|
-
const scanStatements = (statements) => {
|
|
65
|
-
for (const statement of statements) {
|
|
66
|
-
const found = declaredApi(statement);
|
|
67
|
-
if (found !== void 0) return found;
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
const governingApiBinding = (path) => {
|
|
71
|
-
let current = path.parent;
|
|
72
|
-
while (current) {
|
|
73
|
-
const node = current.value;
|
|
74
|
-
if (Array.isArray(node.params) && node.params.some(patternBindsApi)) return "foreign";
|
|
75
|
-
if ((j.FunctionExpression.check(node) || j.ClassExpression.check(node)) && node.id?.name === "api") return "foreign";
|
|
76
|
-
if (j.CatchClause.check(node) && node.param && patternBindsApi(node.param)) return "foreign";
|
|
77
|
-
let found;
|
|
78
|
-
if (j.BlockStatement.check(node) || j.Program.check(node)) found = scanStatements(node.body);
|
|
79
|
-
else if (j.ForStatement.check(node)) found = declaredApi(node.init);
|
|
80
|
-
else if (j.ForOfStatement.check(node) || j.ForInStatement.check(node)) found = declaredApi(node.left);
|
|
81
|
-
else if (j.SwitchStatement.check(node)) found = scanStatements(node.cases.flatMap((c) => c.consequent));
|
|
82
|
-
else if (j.StaticBlock?.check?.(node)) found = scanStatements(node.body);
|
|
83
|
-
if (found !== void 0) return found;
|
|
84
|
-
current = current.parent;
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const bindsToRenamedApi = (path) => {
|
|
88
|
-
const governing = governingApiBinding(path);
|
|
89
|
-
return governing !== "foreign" && renamedDeclaratorIds.has(governing);
|
|
90
|
-
};
|
|
71
|
+
const bindsToRenamedApi = (path) => renamedDeclaratorIds.has(resolveBinding(j, path, "api"));
|
|
91
72
|
const referencePaths = [];
|
|
92
73
|
root.find(j.Identifier, { name: "api" }).forEach((path) => {
|
|
93
74
|
const parent = path.parent.value;
|
|
@@ -110,7 +91,9 @@ const migrateAssistantApiToAui = createTransformer(({ j, root, markAsChanged })
|
|
|
110
91
|
if (!bindsToRenamedApi(path)) return;
|
|
111
92
|
referencePaths.push(path);
|
|
112
93
|
});
|
|
94
|
+
for (const path of referencePaths) if (resolveBinding(j, path, "aui")) renamedDeclaratorIds.delete(resolveBinding(j, path, "api"));
|
|
113
95
|
for (const path of referencePaths) {
|
|
96
|
+
if (!bindsToRenamedApi(path)) continue;
|
|
114
97
|
const parent = path.parent.value;
|
|
115
98
|
if ((j.Property.check(parent) || j.ObjectProperty.check(parent)) && parent.shorthand && parent.value === path.value) {
|
|
116
99
|
parent.shorthand = false;
|
|
@@ -128,37 +111,6 @@ const migrateAssistantApiToAui = createTransformer(({ j, root, markAsChanged })
|
|
|
128
111
|
markAsChanged();
|
|
129
112
|
}
|
|
130
113
|
}
|
|
131
|
-
Object.entries(hookRenamingMap).forEach(([oldName, newName]) => {
|
|
132
|
-
root.find(j.Identifier).forEach((path) => {
|
|
133
|
-
if (path.value.name === oldName) {
|
|
134
|
-
if (j.ImportSpecifier.check(path.parent.value)) return;
|
|
135
|
-
path.value.name = newName;
|
|
136
|
-
markAsChanged();
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
Object.entries(componentRenamingMap).forEach(([oldName, newName]) => {
|
|
141
|
-
root.find(j.JSXOpeningElement).forEach((path) => {
|
|
142
|
-
if (j.JSXIdentifier.check(path.value.name) && path.value.name.name === oldName) {
|
|
143
|
-
path.value.name.name = newName;
|
|
144
|
-
markAsChanged();
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
root.find(j.JSXClosingElement).forEach((path) => {
|
|
148
|
-
if (j.JSXIdentifier.check(path.value.name) && path.value.name.name === oldName) {
|
|
149
|
-
path.value.name.name = newName;
|
|
150
|
-
markAsChanged();
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
root.find(j.Identifier).forEach((path) => {
|
|
154
|
-
if (path.value.name === oldName) {
|
|
155
|
-
if (j.ImportSpecifier.check(path.parent.value)) return;
|
|
156
|
-
if (j.JSXIdentifier.check(path.value)) return;
|
|
157
|
-
path.value.name = newName;
|
|
158
|
-
markAsChanged();
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
114
|
});
|
|
163
115
|
//#endregion
|
|
164
116
|
export { migrateAssistantApiToAui as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-api-to-aui.js","names":[],"sources":["../../../src/codemods/v0-12/assistant-api-to-aui.ts"],"sourcesContent":["import { createTransformer } from \"../utils/createTransformer\";\n\n// Map of old hook names to new hook names\nconst hookRenamingMap: Record<string, string> = {\n useAssistantApi: \"useAui\",\n useAssistantState: \"useAuiState\",\n useAssistantEvent: \"useAuiEvent\",\n};\n\n// Map of old component names to new component names\nconst componentRenamingMap: Record<string, string> = {\n AssistantIf: \"AuiIf\",\n AssistantProvider: \"AuiProvider\",\n};\n\nconst isUseAuiCall = (j: any, node: any): boolean => {\n return (\n node &&\n j.CallExpression.check(node) &&\n j.Identifier.check(node.callee) &&\n (node.callee.name === \"useAui\" || node.callee.name === \"useAssistantApi\")\n );\n};\n\nconst migrateAssistantApiToAui = createTransformer(\n ({ j, root, markAsChanged }) => {\n // 1. Update imports\n root.find(j.ImportDeclaration).forEach((path: any) => {\n const source = path.value.source.value;\n\n // Only process imports from @assistant-ui packages\n if (typeof source === \"string\" && source.startsWith(\"@assistant-ui/\")) {\n path.value.specifiers?.forEach((specifier: any) => {\n if (j.ImportSpecifier.check(specifier)) {\n const oldName = specifier.imported.name as string;\n\n // Rename hooks\n if (hookRenamingMap[oldName]) {\n const newName = hookRenamingMap[oldName];\n specifier.imported.name = newName;\n if (specifier.local && specifier.local.name === oldName) {\n specifier.local.name = newName;\n }\n markAsChanged();\n }\n\n // Rename components\n if (componentRenamingMap[oldName]) {\n const newName = componentRenamingMap[oldName];\n specifier.imported.name = newName;\n if (specifier.local && specifier.local.name === oldName) {\n specifier.local.name = newName;\n }\n markAsChanged();\n }\n }\n });\n }\n });\n\n // 2. Collect `api` declarators initialized from useAui / useAssistantApi.\n // References are renamed by binding resolution, so an `api` bound\n // elsewhere (function params, `const { api } = other()`) is never touched.\n const renamedDeclaratorIds = new Set<any>();\n root.find(j.VariableDeclarator).forEach((path: any) => {\n if (\n isUseAuiCall(j, path.value.init) &&\n j.Identifier.check(path.value.id) &&\n path.value.id.name === \"api\"\n ) {\n renamedDeclaratorIds.add(path.value.id);\n }\n });\n\n // 3. Rename references governed by one of those declarators. Resolution\n // is lexical (nearest enclosing declaration wins) rather than via\n // ast-types scopes, which have no block granularity: a block-scoped\n // `const api = other()` inside the same function must shadow.\n if (renamedDeclaratorIds.size > 0) {\n const patternBindsApi = (id: any): boolean => {\n if (\n id &&\n (id.type === \"TSParameterProperty\" ||\n j.TSParameterProperty?.check?.(id))\n ) {\n return patternBindsApi(id.parameter);\n }\n if (j.Identifier.check(id)) return id.name === \"api\";\n if (j.ObjectPattern.check(id)) {\n return id.properties.some((prop: any) =>\n patternBindsApi(prop.value ?? prop.argument ?? prop),\n );\n }\n if (j.ArrayPattern.check(id)) {\n return id.elements.some((el: any) => el && patternBindsApi(el));\n }\n if (j.AssignmentPattern.check(id)) return patternBindsApi(id.left);\n if (j.RestElement.check(id)) return patternBindsApi(id.argument);\n return false;\n };\n\n // What a statement-level node declares for `api`: the declarator id\n // node when it is a plain `const/let/var api = ...`, \"foreign\" for any\n // other binding of the name (patterns, functions, classes, enums), or\n // undefined when it does not bind `api` at all.\n const declaredApi = (statement: any): any => {\n if (!statement) return undefined;\n if (\n j.ExportNamedDeclaration.check(statement) ||\n j.ExportDefaultDeclaration.check(statement)\n ) {\n return declaredApi(statement.declaration);\n }\n if (j.VariableDeclaration.check(statement)) {\n for (const declarator of statement.declarations) {\n if (!j.VariableDeclarator.check(declarator)) continue;\n if (\n j.Identifier.check(declarator.id) &&\n declarator.id.name === \"api\"\n )\n return declarator.id;\n if (patternBindsApi(declarator.id)) return \"foreign\";\n }\n return undefined;\n }\n // Type-only declarations do not shadow the value binding.\n if (\n statement.type === \"TSTypeAliasDeclaration\" ||\n statement.type === \"TSInterfaceDeclaration\" ||\n statement.type === \"TSDeclareFunction\"\n )\n return undefined;\n // FunctionDeclaration, ClassDeclaration, TS enums/namespaces, …\n if (\n statement.id &&\n j.Identifier.check(statement.id) &&\n statement.id.name === \"api\"\n )\n return \"foreign\";\n return undefined;\n };\n\n const scanStatements = (statements: any[]): any => {\n for (const statement of statements) {\n const found = declaredApi(statement);\n if (found !== undefined) return found;\n }\n return undefined;\n };\n\n // Returns the declarator id node governing `api` here, or \"foreign\"\n // when any other binding of the name shadows it first.\n const governingApiBinding = (path: any): any => {\n let current = path.parent;\n while (current) {\n const node = current.value;\n\n // Anything function-like (declarations, expressions, arrows,\n // object/class methods) binds its params.\n if (Array.isArray(node.params) && node.params.some(patternBindsApi))\n return \"foreign\";\n // A named function/class expression binds its own name in its body.\n if (\n (j.FunctionExpression.check(node) ||\n j.ClassExpression.check(node)) &&\n node.id?.name === \"api\"\n )\n return \"foreign\";\n if (\n j.CatchClause.check(node) &&\n node.param &&\n patternBindsApi(node.param)\n )\n return \"foreign\";\n\n let found: any;\n if (j.BlockStatement.check(node) || j.Program.check(node)) {\n found = scanStatements(node.body);\n } else if (j.ForStatement.check(node)) {\n found = declaredApi(node.init);\n } else if (\n j.ForOfStatement.check(node) ||\n j.ForInStatement.check(node)\n ) {\n found = declaredApi(node.left);\n } else if (j.SwitchStatement.check(node)) {\n found = scanStatements(\n node.cases.flatMap((c: any) => c.consequent),\n );\n } else if (j.StaticBlock?.check?.(node)) {\n found = scanStatements(node.body);\n }\n if (found !== undefined) return found;\n\n current = current.parent;\n }\n return undefined;\n };\n\n const bindsToRenamedApi = (path: any): boolean => {\n const governing = governingApiBinding(path);\n return governing !== \"foreign\" && renamedDeclaratorIds.has(governing);\n };\n\n const referencePaths: any[] = [];\n root.find(j.Identifier, { name: \"api\" }).forEach((path: any) => {\n const parent = path.parent.value;\n if (j.ImportSpecifier.check(parent)) return;\n // Declaration names (variable, function, class, type alias,\n // interface) and TS type positions are not value references.\n if (parent.id === path.value) return;\n if (j.TSTypeReference?.check?.(parent)) return;\n if (j.TSQualifiedName?.check?.(parent)) return;\n // Any non-computed key position is a name, not a reference: object\n // properties, object/class methods, class properties, TS signatures.\n // Esprima-style shorthand reuses one node as key and value, so the\n // value position must survive the guard.\n if (\n parent.key === path.value &&\n !parent.computed &&\n parent.value !== path.value\n )\n return;\n if (\n j.MemberExpression.check(parent) &&\n parent.property === path.value &&\n !parent.computed\n )\n return;\n // JSXIdentifier extends Identifier, so JSX positions land here too:\n // member properties (<config.api/>), namespace names, and lowercase\n // element names (<api/> is an intrinsic tag) are not references.\n if (\n j.JSXMemberExpression?.check?.(parent) &&\n parent.property === path.value\n )\n return;\n if (j.JSXNamespacedName?.check?.(parent)) return;\n if (\n (j.JSXOpeningElement?.check?.(parent) ||\n j.JSXClosingElement?.check?.(parent)) &&\n parent.name === path.value\n )\n return;\n if (j.JSXAttribute.check(parent)) return;\n // The exported name of `export { api }` is the public alias, not a\n // reference; only the local side is renamed (to `aui as api`). A\n // source-bearing re-export binds in the other module, never here.\n if (j.ExportSpecifier.check(parent)) {\n const grandparent = path.parent.parent?.value;\n if (\n j.ExportNamedDeclaration.check(grandparent) &&\n grandparent.source != null\n )\n return;\n // Babel emits exportKind on ExportSpecifier for inline\n // `export { type api }`; ast-types' typings omit it.\n if (\n grandparent?.exportKind === \"type\" ||\n (parent as { exportKind?: string }).exportKind === \"type\"\n )\n return;\n if (parent.exported === path.value && parent.local !== path.value)\n return;\n }\n if (!bindsToRenamedApi(path)) return;\n referencePaths.push(path);\n });\n\n for (const path of referencePaths) {\n const parent = path.parent.value;\n if (\n (j.Property.check(parent) || j.ObjectProperty.check(parent)) &&\n parent.shorthand &&\n parent.value === path.value\n ) {\n // `{ api }` in an object literal: keep the key, rename the value\n parent.shorthand = false;\n parent.key = j.identifier(\"api\");\n parent.value = j.identifier(\"aui\");\n } else if (\n j.ExportSpecifier.check(parent) &&\n parent.local === path.value\n ) {\n // `export { api }` / `export { api as name }`: rename the local\n // binding, keep the public name. Replaced wholesale — recast keeps\n // the shorthand form (dropping the alias) when only the fields of\n // the original node change.\n path.parent.replace(\n j.exportSpecifier.from({\n local: j.identifier(\"aui\"),\n exported: j.Identifier.check(parent.exported)\n ? j.identifier(parent.exported.name)\n : parent.exported,\n }),\n );\n } else {\n path.value.name = \"aui\";\n }\n markAsChanged();\n }\n for (const idNode of renamedDeclaratorIds) {\n idNode.name = \"aui\";\n markAsChanged();\n }\n }\n\n // 4. Update hook call references (in case they're used as values)\n Object.entries(hookRenamingMap).forEach(([oldName, newName]) => {\n root.find(j.Identifier).forEach((path: any) => {\n if (path.value.name === oldName) {\n // Skip if already handled in imports\n if (j.ImportSpecifier.check(path.parent.value)) {\n return;\n }\n\n // This might be a reference to the hook as a value\n path.value.name = newName;\n markAsChanged();\n }\n });\n });\n\n // 5. Update JSX component names\n Object.entries(componentRenamingMap).forEach(([oldName, newName]) => {\n // Update JSX opening elements\n root.find(j.JSXOpeningElement).forEach((path: any) => {\n if (\n j.JSXIdentifier.check(path.value.name) &&\n path.value.name.name === oldName\n ) {\n path.value.name.name = newName;\n markAsChanged();\n }\n });\n\n // Update JSX closing elements\n root.find(j.JSXClosingElement).forEach((path: any) => {\n if (\n j.JSXIdentifier.check(path.value.name) &&\n path.value.name.name === oldName\n ) {\n path.value.name.name = newName;\n markAsChanged();\n }\n });\n\n // Update regular identifier references (for component references)\n root.find(j.Identifier).forEach((path: any) => {\n if (path.value.name === oldName) {\n // Skip if already handled in imports\n if (j.ImportSpecifier.check(path.parent.value)) {\n return;\n }\n\n // Skip JSX identifiers (already handled above)\n if (j.JSXIdentifier.check(path.value)) {\n return;\n }\n\n // This might be a reference to the component as a value\n path.value.name = newName;\n markAsChanged();\n }\n });\n });\n },\n);\n\nexport default migrateAssistantApiToAui;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assistant-api-to-aui.js","names":[],"sources":["../../../src/codemods/v0-12/assistant-api-to-aui.ts"],"sourcesContent":["import { createTransformer } from \"../utils/createTransformer\";\nimport { resolveBinding } from \"../utils/resolveBinding\";\n\n// Map of old hook names to new hook names\nconst hookRenamingMap: Record<string, string> = {\n useAssistantApi: \"useAui\",\n useAssistantState: \"useAuiState\",\n useAssistantEvent: \"useAuiEvent\",\n};\n\n// Map of old component names to new component names\nconst componentRenamingMap: Record<string, string> = {\n AssistantIf: \"AuiIf\",\n AssistantProvider: \"AuiProvider\",\n};\n\nconst migrateAssistantApiToAui = createTransformer(\n ({ j, root, markAsChanged }) => {\n root.find(j.ImportDeclaration).forEach((path: any) => {\n const source = path.value.source.value;\n if (typeof source !== \"string\" || !source.startsWith(\"@assistant-ui/\"))\n return;\n path.value.specifiers?.forEach((specifier: any, index: number) => {\n if (\n !j.ImportSpecifier.check(specifier) ||\n !j.Identifier.check(specifier.imported)\n )\n return;\n const oldName = specifier.imported.name;\n const importKind = (specifier as { importKind?: string }).importKind;\n const newName =\n hookRenamingMap[oldName] ?? componentRenamingMap[oldName];\n if (!newName) return;\n if (\n specifier.local?.name === oldName &&\n path.value.importKind !== \"type\" &&\n importKind !== \"type\"\n ) {\n const references = root\n .find(j.Identifier, { name: oldName })\n .paths()\n .filter((reference: any) => {\n const parent = reference.parent.value;\n const node = reference.value;\n if (parent.type.startsWith(\"Import\") || parent.id === node)\n return false;\n if (\n parent.key === node &&\n !parent.computed &&\n parent.value !== node\n )\n return false;\n if (parent.property === node && !parent.computed) return false;\n if (j.TSQualifiedName.check(parent) && parent.right === node)\n return false;\n if (\n j.JSXAttribute.check(parent) ||\n j.JSXNamespacedName.check(parent)\n )\n return false;\n if (j.ExportSpecifier.check(parent)) {\n if (\n reference.parent.parent.value.source ||\n parent.local !== node\n )\n return false;\n }\n return resolveBinding(j, reference, oldName) === specifier.local;\n });\n const canRename =\n !resolveBinding(j, path, newName) &&\n references.every(\n (reference: any) => !resolveBinding(j, reference, newName),\n );\n if (canRename) {\n for (const reference of references) {\n const parent = reference.parent.value;\n if (\n (j.Property.check(parent) || j.ObjectProperty.check(parent)) &&\n parent.shorthand\n ) {\n parent.shorthand = false;\n parent.key = j.identifier(oldName);\n parent.value = j.identifier(newName);\n } else if (j.ExportSpecifier.check(parent)) {\n reference.parent.replace(\n j.exportSpecifier.from({\n local: j.identifier(newName),\n exported: j.Identifier.check(parent.exported)\n ? j.identifier(parent.exported.name)\n : parent.exported,\n }),\n );\n } else {\n reference.value.name = newName;\n }\n }\n specifier.local.name = newName;\n }\n }\n const replacement: any = j.importSpecifier(\n j.identifier(newName),\n j.Identifier.check(specifier.local)\n ? j.identifier(specifier.local.name)\n : null,\n );\n replacement.importKind = importKind;\n replacement.comments = specifier.comments;\n path.get(\"specifiers\", index).replace(replacement);\n markAsChanged();\n });\n });\n\n const hookBindings = new Set<any>();\n root.find(j.ImportDeclaration).forEach((path) => {\n if (\n !String(path.value.source.value).startsWith(\"@assistant-ui/\") ||\n path.value.importKind === \"type\"\n )\n return;\n for (const specifier of path.value.specifiers ?? []) {\n if (\n j.ImportSpecifier.check(specifier) &&\n j.Identifier.check(specifier.imported) &&\n specifier.imported.name === \"useAui\" &&\n (specifier as { importKind?: string }).importKind !== \"type\" &&\n j.Identifier.check(specifier.local)\n )\n hookBindings.add(specifier.local);\n }\n });\n\n const renamedDeclaratorIds = new Set<any>();\n root.find(j.VariableDeclarator).forEach((path: any) => {\n const { id, init } = path.value;\n if (\n j.Identifier.check(id) &&\n id.name === \"api\" &&\n j.CallExpression.check(init) &&\n j.Identifier.check(init.callee) &&\n hookBindings.has(\n resolveBinding(j, path.get(\"init\", \"callee\"), init.callee.name),\n ) &&\n !resolveBinding(j, path, \"aui\")\n ) {\n renamedDeclaratorIds.add(id);\n }\n });\n\n // 3. Rename references governed by one of those declarators. Resolution\n // is lexical (nearest enclosing declaration wins) rather than via\n // ast-types scopes, which have no block granularity: a block-scoped\n // `const api = other()` inside the same function must shadow.\n if (renamedDeclaratorIds.size > 0) {\n const bindsToRenamedApi = (path: any): boolean =>\n renamedDeclaratorIds.has(resolveBinding(j, path, \"api\"));\n\n const referencePaths: any[] = [];\n root.find(j.Identifier, { name: \"api\" }).forEach((path: any) => {\n const parent = path.parent.value;\n if (j.ImportSpecifier.check(parent)) return;\n // Declaration names (variable, function, class, type alias,\n // interface) and TS type positions are not value references.\n if (parent.id === path.value) return;\n if (j.TSTypeReference?.check?.(parent)) return;\n if (j.TSQualifiedName?.check?.(parent)) return;\n // Any non-computed key position is a name, not a reference: object\n // properties, object/class methods, class properties, TS signatures.\n // Esprima-style shorthand reuses one node as key and value, so the\n // value position must survive the guard.\n if (\n parent.key === path.value &&\n !parent.computed &&\n parent.value !== path.value\n )\n return;\n if (\n j.MemberExpression.check(parent) &&\n parent.property === path.value &&\n !parent.computed\n )\n return;\n // JSXIdentifier extends Identifier, so JSX positions land here too:\n // member properties (<config.api/>), namespace names, and lowercase\n // element names (<api/> is an intrinsic tag) are not references.\n if (\n j.JSXMemberExpression?.check?.(parent) &&\n parent.property === path.value\n )\n return;\n if (j.JSXNamespacedName?.check?.(parent)) return;\n if (\n (j.JSXOpeningElement?.check?.(parent) ||\n j.JSXClosingElement?.check?.(parent)) &&\n parent.name === path.value\n )\n return;\n if (j.JSXAttribute.check(parent)) return;\n // The exported name of `export { api }` is the public alias, not a\n // reference; only the local side is renamed (to `aui as api`). A\n // source-bearing re-export binds in the other module, never here.\n if (j.ExportSpecifier.check(parent)) {\n const grandparent = path.parent.parent?.value;\n if (\n j.ExportNamedDeclaration.check(grandparent) &&\n grandparent.source != null\n )\n return;\n // Babel emits exportKind on ExportSpecifier for inline\n // `export { type api }`; ast-types' typings omit it.\n if (\n grandparent?.exportKind === \"type\" ||\n (parent as { exportKind?: string }).exportKind === \"type\"\n )\n return;\n if (parent.exported === path.value && parent.local !== path.value)\n return;\n }\n if (!bindsToRenamedApi(path)) return;\n referencePaths.push(path);\n });\n\n for (const path of referencePaths) {\n if (resolveBinding(j, path, \"aui\")) {\n renamedDeclaratorIds.delete(resolveBinding(j, path, \"api\"));\n }\n }\n\n for (const path of referencePaths) {\n if (!bindsToRenamedApi(path)) continue;\n const parent = path.parent.value;\n if (\n (j.Property.check(parent) || j.ObjectProperty.check(parent)) &&\n parent.shorthand &&\n parent.value === path.value\n ) {\n // `{ api }` in an object literal: keep the key, rename the value\n parent.shorthand = false;\n parent.key = j.identifier(\"api\");\n parent.value = j.identifier(\"aui\");\n } else if (\n j.ExportSpecifier.check(parent) &&\n parent.local === path.value\n ) {\n // `export { api }` / `export { api as name }`: rename the local\n // binding, keep the public name. Replaced wholesale — recast keeps\n // the shorthand form (dropping the alias) when only the fields of\n // the original node change.\n path.parent.replace(\n j.exportSpecifier.from({\n local: j.identifier(\"aui\"),\n exported: j.Identifier.check(parent.exported)\n ? j.identifier(parent.exported.name)\n : parent.exported,\n }),\n );\n } else {\n path.value.name = \"aui\";\n }\n markAsChanged();\n }\n for (const idNode of renamedDeclaratorIds) {\n idNode.name = \"aui\";\n markAsChanged();\n }\n }\n },\n);\n\nexport default migrateAssistantApiToAui;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
//#region src/codemods/v0-12/event-names-to-camelcase.d.ts
|
|
2
1
|
declare const migrateEventNamesToCamelCase: (fileInfo: import("jscodeshift/src/core").FileInfo, api: import("jscodeshift/src/core").API, options: any) => string | null;
|
|
3
|
-
|
|
4
|
-
export { migrateEventNamesToCamelCase as default };
|
|
2
|
+
export default migrateEventNamesToCamelCase;
|
|
5
3
|
//# sourceMappingURL=event-names-to-camelcase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-names-to-camelcase.d.ts","
|
|
1
|
+
{"version":3,"file":"event-names-to-camelcase.d.ts","sourceRoot":"","sources":["../../../src/codemods/v0-12/event-names-to-camelcase.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,4BAA4B,6HAsCjC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
//#region src/codemods/v0-12/primitive-if-to-aui-if.d.ts
|
|
2
1
|
declare const migratePrimitiveIfToAuiIf: (fileInfo: import("jscodeshift/src/core").FileInfo, api: import("jscodeshift/src/core").API, options: any) => string | null;
|
|
3
|
-
|
|
4
|
-
export { migratePrimitiveIfToAuiIf as default };
|
|
2
|
+
export default migratePrimitiveIfToAuiIf;
|
|
5
3
|
//# sourceMappingURL=primitive-if-to-aui-if.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitive-if-to-aui-if.d.ts","
|
|
1
|
+
{"version":3,"file":"primitive-if-to-aui-if.d.ts","sourceRoot":"","sources":["../../../src/codemods/v0-12/primitive-if-to-aui-if.ts"],"names":[],"mappings":"AAyLA,QAAA,MAAM,yBAAyB,6HAyJ9B,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
|
|
@@ -16,16 +16,16 @@ const primitiveMap = {
|
|
|
16
16
|
})
|
|
17
17
|
},
|
|
18
18
|
MessagePrimitive: {
|
|
19
|
-
user: () => ({
|
|
20
|
-
expression:
|
|
19
|
+
user: (v) => ({
|
|
20
|
+
expression: `s.message.role ${v === false ? "!==" : "==="} "user"`,
|
|
21
21
|
negated: false
|
|
22
22
|
}),
|
|
23
|
-
assistant: () => ({
|
|
24
|
-
expression:
|
|
23
|
+
assistant: (v) => ({
|
|
24
|
+
expression: `s.message.role ${v === false ? "!==" : "==="} "assistant"`,
|
|
25
25
|
negated: false
|
|
26
26
|
}),
|
|
27
|
-
system: () => ({
|
|
28
|
-
expression:
|
|
27
|
+
system: (v) => ({
|
|
28
|
+
expression: `s.message.role ${v === false ? "!==" : "==="} "system"`,
|
|
29
29
|
negated: false
|
|
30
30
|
}),
|
|
31
31
|
hasBranches: () => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitive-if-to-aui-if.js","names":[],"sources":["../../../src/codemods/v0-12/primitive-if-to-aui-if.ts"],"sourcesContent":["import { createTransformer } from \"../utils/createTransformer\";\n\ntype ConditionFragment = {\n expression: string;\n negated: boolean;\n};\n\n// Map ThreadPrimitive.If props to condition expressions\nconst threadPropMap: Record<\n string,\n (value: unknown) => ConditionFragment | null\n> = {\n empty: (v) => ({\n expression: \"s.thread.isEmpty\",\n negated: v === false,\n }),\n running: (v) => ({\n expression: \"s.thread.isRunning\",\n negated: v === false,\n }),\n disabled: (v) => ({\n expression: \"s.thread.isDisabled\",\n negated: v === false,\n }),\n};\n\n// Map MessagePrimitive.If props to condition expressions\nconst messagePropMap: Record<\n string,\n (value: unknown) => ConditionFragment | null\n> = {\n user: () => ({ expression: 's.message.role === \"user\"', negated: false }),\n assistant: () => ({\n expression: 's.message.role === \"assistant\"',\n negated: false,\n }),\n system: () => ({\n expression: 's.message.role === \"system\"',\n negated: false,\n }),\n hasBranches: () => ({\n expression: \"s.message.branchCount >= 2\",\n negated: false,\n }),\n copied: (v) => ({\n expression: \"s.message.isCopied\",\n negated: v === false,\n }),\n last: (v) => ({\n expression: \"s.message.isLast\",\n negated: v === false,\n }),\n lastOrHover: () => ({\n expression: \"s.message.isHovering || s.message.isLast\",\n negated: false,\n }),\n speaking: (v) => ({\n expression: \"s.message.speech != null\",\n negated: v === false,\n }),\n hasAttachments: (v) =>\n v === true\n ? {\n expression:\n 's.message.role === \"user\" && !!s.message.attachments?.length',\n negated: false,\n }\n : {\n expression:\n 's.message.role !== \"user\" || !s.message.attachments?.length',\n negated: false,\n },\n hasContent: (v) => ({\n expression: \"s.message.parts.length > 0\",\n negated: v === false,\n }),\n submittedFeedback: (v) => {\n if (v === null) {\n return {\n expression:\n \"(s.message.metadata.submittedFeedback?.type ?? null) === null\",\n negated: false,\n };\n }\n return {\n expression: `s.message.metadata.submittedFeedback?.type === \"${v}\"`,\n negated: false,\n };\n },\n};\n\n// Map ComposerPrimitive.If props to condition expressions\nconst composerPropMap: Record<\n string,\n (value: unknown) => ConditionFragment | null\n> = {\n editing: (v) => ({\n expression: \"s.composer.isEditing\",\n negated: v === false,\n }),\n dictation: (v) => ({\n expression: \"s.composer.dictation != null\",\n negated: v === false,\n }),\n};\n\nconst primitiveMap: Record<\n string,\n Record<string, (value: unknown) => ConditionFragment | null>\n> = {\n ThreadPrimitive: threadPropMap,\n MessagePrimitive: messagePropMap,\n ComposerPrimitive: composerPropMap,\n};\n\n// Map of XPrimitive.Component → fixed condition (no props needed)\nconst fixedConditionMap: Record<string, Record<string, string>> = {\n ThreadPrimitive: {\n Empty: \"s.thread.isEmpty\",\n },\n};\n\n// A prop value the maps cannot faithfully express as a static condition\n// (dynamic expressions, `{undefined}`); elements carrying one are skipped\n// so runtime behavior is never silently changed.\nconst UNSUPPORTED_VALUE: unique symbol = Symbol(\"unsupported\");\n\n/**\n * Extract the value of a JSX attribute.\n * - Boolean prop (no value): `<X.If user>` → `true`\n * - `{true}` / `{false}`: → `true` / `false`\n * - `{\"positive\"}`: → `\"positive\"`\n * - `{null}`: → `null`\n * - anything else (dynamic expressions): → UNSUPPORTED_VALUE\n */\nconst getAttrValue = (j: any, attr: any): unknown => {\n // Boolean attribute (no value), e.g. `<X.If user>`\n if (attr.value === null || attr.value === undefined) {\n return true;\n }\n\n // JSX expression container: `{true}`, `{false}`, `{\"positive\"}`, `{null}`\n if (j.JSXExpressionContainer.check(attr.value)) {\n const expr = attr.value.expression;\n if (j.BooleanLiteral.check(expr)) return expr.value;\n // NullLiteral bases Literal in ast-types but carries no `value` field,\n // so it must be recognized before the generic Literal branch.\n if (j.NullLiteral.check(expr)) return null;\n if (j.Literal.check(expr)) {\n if (expr.value === null) return null;\n return expr.value;\n }\n return UNSUPPORTED_VALUE;\n }\n\n // String literal\n if (j.StringLiteral.check(attr.value) || j.Literal.check(attr.value)) {\n return attr.value.value;\n }\n\n return UNSUPPORTED_VALUE;\n};\n\n// Composed as a syntax tree so the printer parenthesizes by precedence;\n// concatenated text lets `!` and `&&` reassociate a fragment's own operators.\nconst buildConditionString = (\n j: any,\n fragments: ConditionFragment[],\n): string => {\n const parseExpression = (source: string) =>\n j(`${source};`).find(j.ExpressionStatement).nodes()[0]!.expression;\n\n const condition = fragments\n .map((f) => {\n const expression = parseExpression(f.expression);\n return f.negated ? j.unaryExpression(\"!\", expression) : expression;\n })\n .reduce((left: any, right: any) => j.logicalExpression(\"&&\", left, right));\n\n return j(condition).toSource();\n};\n\nconst migratePrimitiveIfToAuiIf = createTransformer(\n ({ j, root, markAsChanged }) => {\n let needsAuiIfImport = false;\n\n // Track which primitive namespaces are imported\n const importedPrimitives = new Set<string>();\n root.find(j.ImportDeclaration).forEach((path: any) => {\n const source = path.value.source.value;\n if (typeof source === \"string\" && source.startsWith(\"@assistant-ui/\")) {\n path.value.specifiers?.forEach((specifier: any) => {\n if (j.ImportSpecifier.check(specifier)) {\n const name = String(\n specifier.local?.name ?? specifier.imported.name,\n );\n if (primitiveMap[name] || fixedConditionMap[name]) {\n importedPrimitives.add(name);\n }\n }\n });\n }\n });\n\n if (importedPrimitives.size === 0) return;\n\n // Opening and closing tags are rewritten together per element, so a\n // skipped element can never be left with a mismatched closing tag.\n const convertElementToAuiIf = (elementPath: any, conditionBody: string) => {\n const arrowFnAst = j(`(s) => ${conditionBody}`)\n .find(j.ArrowFunctionExpression)\n .paths()[0]!.value;\n\n const opening = elementPath.value.openingElement;\n opening.name = j.jsxIdentifier(\"AuiIf\");\n opening.attributes = [\n j.jsxAttribute(\n j.jsxIdentifier(\"condition\"),\n j.jsxExpressionContainer(arrowFnAst),\n ),\n ];\n if (elementPath.value.closingElement) {\n elementPath.value.closingElement.name = j.jsxIdentifier(\"AuiIf\");\n }\n\n needsAuiIfImport = true;\n markAsChanged();\n };\n\n // Process fixed-condition components: <ThreadPrimitive.Empty> → <AuiIf condition={...}>\n root.find(j.JSXElement).forEach((path: any) => {\n const name = path.value.openingElement.name;\n if (!j.JSXMemberExpression.check(name)) return;\n if (!j.JSXIdentifier.check(name.object)) return;\n if (!j.JSXIdentifier.check(name.property)) return;\n\n const primitiveName = name.object.name as string;\n const propertyName = name.property.name as string;\n const conditionBody = fixedConditionMap[primitiveName]?.[propertyName];\n if (!conditionBody) return;\n if (!importedPrimitives.has(primitiveName)) return;\n\n // Only transform if there are no props (other than children, which are implicit)\n const attrs: any[] = path.value.openingElement.attributes || [];\n if (attrs.length > 0) return;\n\n convertElementToAuiIf(path, conditionBody);\n });\n\n // Process JSX elements: <ThreadPrimitive.If ...> → <AuiIf condition={...}>\n root.find(j.JSXElement).forEach((path: any) => {\n const name = path.value.openingElement.name;\n\n // Check for `<XPrimitive.If ...>`\n if (!j.JSXMemberExpression.check(name)) return;\n if (!j.JSXIdentifier.check(name.object)) return;\n if (!j.JSXIdentifier.check(name.property)) return;\n if (name.property.name !== \"If\") return;\n\n const primitiveName = name.object.name;\n const propMap = primitiveMap[primitiveName];\n if (!propMap) return;\n if (!importedPrimitives.has(primitiveName)) return;\n\n // Extract props\n const attrs: any[] = path.value.openingElement.attributes || [];\n const fragments: ConditionFragment[] = [];\n let hasUnknownProp = false;\n\n for (const attr of attrs) {\n if (!j.JSXAttribute.check(attr)) {\n // JSX spread attributes — can't migrate\n hasUnknownProp = true;\n continue;\n }\n const propName =\n typeof attr.name.name === \"string\" ? attr.name.name : null;\n if (!propName) {\n // e.g. JSXNamespacedName — not expressible as a condition\n hasUnknownProp = true;\n continue;\n }\n\n const mapper = propMap[propName];\n if (!mapper) {\n hasUnknownProp = true;\n continue;\n }\n\n const value = getAttrValue(j, attr);\n if (value === UNSUPPORTED_VALUE) {\n hasUnknownProp = true;\n continue;\n }\n const fragment = mapper(value);\n if (fragment) {\n fragments.push(fragment);\n }\n }\n\n // If we couldn't map all props, skip this element\n if (hasUnknownProp || fragments.length === 0) return;\n\n convertElementToAuiIf(path, buildConditionString(j, fragments));\n });\n\n // Add AuiIf import if needed\n if (needsAuiIfImport) {\n let hasAuiIfImport = false;\n let assistantUiImport: any = null;\n\n root.find(j.ImportDeclaration).forEach((path: any) => {\n const source = path.value.source.value;\n if (typeof source === \"string\" && source.startsWith(\"@assistant-ui/\")) {\n assistantUiImport = path;\n path.value.specifiers?.forEach((specifier: any) => {\n if (\n j.ImportSpecifier.check(specifier) &&\n (specifier.imported.name === \"AuiIf\" ||\n specifier.local?.name === \"AuiIf\")\n ) {\n hasAuiIfImport = true;\n }\n });\n }\n });\n\n if (!hasAuiIfImport && assistantUiImport) {\n assistantUiImport.value.specifiers.push(\n j.importSpecifier(j.identifier(\"AuiIf\")),\n );\n markAsChanged();\n }\n }\n },\n);\n\nexport default migratePrimitiveIfToAuiIf;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"primitive-if-to-aui-if.js","names":[],"sources":["../../../src/codemods/v0-12/primitive-if-to-aui-if.ts"],"sourcesContent":["import { createTransformer } from \"../utils/createTransformer\";\n\ntype ConditionFragment = {\n expression: string;\n negated: boolean;\n};\n\n// Map ThreadPrimitive.If props to condition expressions\nconst threadPropMap: Record<\n string,\n (value: unknown) => ConditionFragment | null\n> = {\n empty: (v) => ({\n expression: \"s.thread.isEmpty\",\n negated: v === false,\n }),\n running: (v) => ({\n expression: \"s.thread.isRunning\",\n negated: v === false,\n }),\n disabled: (v) => ({\n expression: \"s.thread.isDisabled\",\n negated: v === false,\n }),\n};\n\n// Map MessagePrimitive.If props to condition expressions\nconst messagePropMap: Record<\n string,\n (value: unknown) => ConditionFragment | null\n> = {\n user: (v) => ({\n expression: `s.message.role ${v === false ? \"!==\" : \"===\"} \"user\"`,\n negated: false,\n }),\n assistant: (v) => ({\n expression: `s.message.role ${v === false ? \"!==\" : \"===\"} \"assistant\"`,\n negated: false,\n }),\n system: (v) => ({\n expression: `s.message.role ${v === false ? \"!==\" : \"===\"} \"system\"`,\n negated: false,\n }),\n hasBranches: () => ({\n expression: \"s.message.branchCount >= 2\",\n negated: false,\n }),\n copied: (v) => ({\n expression: \"s.message.isCopied\",\n negated: v === false,\n }),\n last: (v) => ({\n expression: \"s.message.isLast\",\n negated: v === false,\n }),\n lastOrHover: () => ({\n expression: \"s.message.isHovering || s.message.isLast\",\n negated: false,\n }),\n speaking: (v) => ({\n expression: \"s.message.speech != null\",\n negated: v === false,\n }),\n hasAttachments: (v) =>\n v === true\n ? {\n expression:\n 's.message.role === \"user\" && !!s.message.attachments?.length',\n negated: false,\n }\n : {\n expression:\n 's.message.role !== \"user\" || !s.message.attachments?.length',\n negated: false,\n },\n hasContent: (v) => ({\n expression: \"s.message.parts.length > 0\",\n negated: v === false,\n }),\n submittedFeedback: (v) => {\n if (v === null) {\n return {\n expression:\n \"(s.message.metadata.submittedFeedback?.type ?? null) === null\",\n negated: false,\n };\n }\n return {\n expression: `s.message.metadata.submittedFeedback?.type === \"${v}\"`,\n negated: false,\n };\n },\n};\n\n// Map ComposerPrimitive.If props to condition expressions\nconst composerPropMap: Record<\n string,\n (value: unknown) => ConditionFragment | null\n> = {\n editing: (v) => ({\n expression: \"s.composer.isEditing\",\n negated: v === false,\n }),\n dictation: (v) => ({\n expression: \"s.composer.dictation != null\",\n negated: v === false,\n }),\n};\n\nconst primitiveMap: Record<\n string,\n Record<string, (value: unknown) => ConditionFragment | null>\n> = {\n ThreadPrimitive: threadPropMap,\n MessagePrimitive: messagePropMap,\n ComposerPrimitive: composerPropMap,\n};\n\n// Map of XPrimitive.Component → fixed condition (no props needed)\nconst fixedConditionMap: Record<string, Record<string, string>> = {\n ThreadPrimitive: {\n Empty: \"s.thread.isEmpty\",\n },\n};\n\n// A prop value the maps cannot faithfully express as a static condition\n// (dynamic expressions, `{undefined}`); elements carrying one are skipped\n// so runtime behavior is never silently changed.\nconst UNSUPPORTED_VALUE: unique symbol = Symbol(\"unsupported\");\n\n/**\n * Extract the value of a JSX attribute.\n * - Boolean prop (no value): `<X.If user>` → `true`\n * - `{true}` / `{false}`: → `true` / `false`\n * - `{\"positive\"}`: → `\"positive\"`\n * - `{null}`: → `null`\n * - anything else (dynamic expressions): → UNSUPPORTED_VALUE\n */\nconst getAttrValue = (j: any, attr: any): unknown => {\n // Boolean attribute (no value), e.g. `<X.If user>`\n if (attr.value === null || attr.value === undefined) {\n return true;\n }\n\n // JSX expression container: `{true}`, `{false}`, `{\"positive\"}`, `{null}`\n if (j.JSXExpressionContainer.check(attr.value)) {\n const expr = attr.value.expression;\n if (j.BooleanLiteral.check(expr)) return expr.value;\n // NullLiteral bases Literal in ast-types but carries no `value` field,\n // so it must be recognized before the generic Literal branch.\n if (j.NullLiteral.check(expr)) return null;\n if (j.Literal.check(expr)) {\n if (expr.value === null) return null;\n return expr.value;\n }\n return UNSUPPORTED_VALUE;\n }\n\n // String literal\n if (j.StringLiteral.check(attr.value) || j.Literal.check(attr.value)) {\n return attr.value.value;\n }\n\n return UNSUPPORTED_VALUE;\n};\n\n// Composed as a syntax tree so the printer parenthesizes by precedence;\n// concatenated text lets `!` and `&&` reassociate a fragment's own operators.\nconst buildConditionString = (\n j: any,\n fragments: ConditionFragment[],\n): string => {\n const parseExpression = (source: string) =>\n j(`${source};`).find(j.ExpressionStatement).nodes()[0]!.expression;\n\n const condition = fragments\n .map((f) => {\n const expression = parseExpression(f.expression);\n return f.negated ? j.unaryExpression(\"!\", expression) : expression;\n })\n .reduce((left: any, right: any) => j.logicalExpression(\"&&\", left, right));\n\n return j(condition).toSource();\n};\n\nconst migratePrimitiveIfToAuiIf = createTransformer(\n ({ j, root, markAsChanged }) => {\n let needsAuiIfImport = false;\n\n // Track which primitive namespaces are imported\n const importedPrimitives = new Set<string>();\n root.find(j.ImportDeclaration).forEach((path: any) => {\n const source = path.value.source.value;\n if (typeof source === \"string\" && source.startsWith(\"@assistant-ui/\")) {\n path.value.specifiers?.forEach((specifier: any) => {\n if (j.ImportSpecifier.check(specifier)) {\n const name = String(\n specifier.local?.name ?? specifier.imported.name,\n );\n if (primitiveMap[name] || fixedConditionMap[name]) {\n importedPrimitives.add(name);\n }\n }\n });\n }\n });\n\n if (importedPrimitives.size === 0) return;\n\n // Opening and closing tags are rewritten together per element, so a\n // skipped element can never be left with a mismatched closing tag.\n const convertElementToAuiIf = (elementPath: any, conditionBody: string) => {\n const arrowFnAst = j(`(s) => ${conditionBody}`)\n .find(j.ArrowFunctionExpression)\n .paths()[0]!.value;\n\n const opening = elementPath.value.openingElement;\n opening.name = j.jsxIdentifier(\"AuiIf\");\n opening.attributes = [\n j.jsxAttribute(\n j.jsxIdentifier(\"condition\"),\n j.jsxExpressionContainer(arrowFnAst),\n ),\n ];\n if (elementPath.value.closingElement) {\n elementPath.value.closingElement.name = j.jsxIdentifier(\"AuiIf\");\n }\n\n needsAuiIfImport = true;\n markAsChanged();\n };\n\n // Process fixed-condition components: <ThreadPrimitive.Empty> → <AuiIf condition={...}>\n root.find(j.JSXElement).forEach((path: any) => {\n const name = path.value.openingElement.name;\n if (!j.JSXMemberExpression.check(name)) return;\n if (!j.JSXIdentifier.check(name.object)) return;\n if (!j.JSXIdentifier.check(name.property)) return;\n\n const primitiveName = name.object.name as string;\n const propertyName = name.property.name as string;\n const conditionBody = fixedConditionMap[primitiveName]?.[propertyName];\n if (!conditionBody) return;\n if (!importedPrimitives.has(primitiveName)) return;\n\n // Only transform if there are no props (other than children, which are implicit)\n const attrs: any[] = path.value.openingElement.attributes || [];\n if (attrs.length > 0) return;\n\n convertElementToAuiIf(path, conditionBody);\n });\n\n // Process JSX elements: <ThreadPrimitive.If ...> → <AuiIf condition={...}>\n root.find(j.JSXElement).forEach((path: any) => {\n const name = path.value.openingElement.name;\n\n // Check for `<XPrimitive.If ...>`\n if (!j.JSXMemberExpression.check(name)) return;\n if (!j.JSXIdentifier.check(name.object)) return;\n if (!j.JSXIdentifier.check(name.property)) return;\n if (name.property.name !== \"If\") return;\n\n const primitiveName = name.object.name;\n const propMap = primitiveMap[primitiveName];\n if (!propMap) return;\n if (!importedPrimitives.has(primitiveName)) return;\n\n // Extract props\n const attrs: any[] = path.value.openingElement.attributes || [];\n const fragments: ConditionFragment[] = [];\n let hasUnknownProp = false;\n\n for (const attr of attrs) {\n if (!j.JSXAttribute.check(attr)) {\n // JSX spread attributes — can't migrate\n hasUnknownProp = true;\n continue;\n }\n const propName =\n typeof attr.name.name === \"string\" ? attr.name.name : null;\n if (!propName) {\n // e.g. JSXNamespacedName — not expressible as a condition\n hasUnknownProp = true;\n continue;\n }\n\n const mapper = propMap[propName];\n if (!mapper) {\n hasUnknownProp = true;\n continue;\n }\n\n const value = getAttrValue(j, attr);\n if (value === UNSUPPORTED_VALUE) {\n hasUnknownProp = true;\n continue;\n }\n const fragment = mapper(value);\n if (fragment) {\n fragments.push(fragment);\n }\n }\n\n // If we couldn't map all props, skip this element\n if (hasUnknownProp || fragments.length === 0) return;\n\n convertElementToAuiIf(path, buildConditionString(j, fragments));\n });\n\n // Add AuiIf import if needed\n if (needsAuiIfImport) {\n let hasAuiIfImport = false;\n let assistantUiImport: any = null;\n\n root.find(j.ImportDeclaration).forEach((path: any) => {\n const source = path.value.source.value;\n if (typeof source === \"string\" && source.startsWith(\"@assistant-ui/\")) {\n assistantUiImport = path;\n path.value.specifiers?.forEach((specifier: any) => {\n if (\n j.ImportSpecifier.check(specifier) &&\n (specifier.imported.name === \"AuiIf\" ||\n specifier.local?.name === \"AuiIf\")\n ) {\n hasAuiIfImport = true;\n }\n });\n }\n });\n\n if (!hasAuiIfImport && assistantUiImport) {\n assistantUiImport.value.specifiers.push(\n j.importSpecifier(j.identifier(\"AuiIf\")),\n );\n markAsChanged();\n }\n }\n },\n);\n\nexport default migratePrimitiveIfToAuiIf;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
//#region src/codemods/v0-15/aui-accessor-calls-to-properties.d.ts
|
|
2
1
|
declare const auiAccessorCallsToProperties: (fileInfo: import("jscodeshift/src/core").FileInfo, api: import("jscodeshift/src/core").API, options: any) => string | null;
|
|
3
|
-
|
|
4
|
-
export { auiAccessorCallsToProperties as default };
|
|
2
|
+
export default auiAccessorCallsToProperties;
|
|
5
3
|
//# sourceMappingURL=aui-accessor-calls-to-properties.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aui-accessor-calls-to-properties.d.ts","
|
|
1
|
+
{"version":3,"file":"aui-accessor-calls-to-properties.d.ts","sourceRoot":"","sources":["../../../src/codemods/v0-15/aui-accessor-calls-to-properties.ts"],"names":[],"mappings":"AA6BA,QAAA,MAAM,4BAA4B,6HA0GjC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
|