assistant-ui 0.0.117 → 0.0.118

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 (125) hide show
  1. package/dist/codemods/utils/createTransformer.d.ts +10 -12
  2. package/dist/codemods/utils/createTransformer.d.ts.map +1 -1
  3. package/dist/codemods/utils/resolveBinding.d.ts +3 -0
  4. package/dist/codemods/utils/resolveBinding.d.ts.map +1 -0
  5. package/dist/codemods/utils/resolveBinding.js +78 -0
  6. package/dist/codemods/utils/resolveBinding.js.map +1 -0
  7. package/dist/codemods/v0-11/content-part-to-message-part.d.ts +1 -3
  8. package/dist/codemods/v0-11/content-part-to-message-part.d.ts.map +1 -1
  9. package/dist/codemods/v0-12/assistant-api-to-aui.d.ts +1 -3
  10. package/dist/codemods/v0-12/assistant-api-to-aui.d.ts.map +1 -1
  11. package/dist/codemods/v0-12/assistant-api-to-aui.js +51 -99
  12. package/dist/codemods/v0-12/assistant-api-to-aui.js.map +1 -1
  13. package/dist/codemods/v0-12/event-names-to-camelcase.d.ts +1 -3
  14. package/dist/codemods/v0-12/event-names-to-camelcase.d.ts.map +1 -1
  15. package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts +1 -3
  16. package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts.map +1 -1
  17. package/dist/codemods/v0-15/aui-accessor-calls-to-properties.d.ts +1 -3
  18. package/dist/codemods/v0-15/aui-accessor-calls-to-properties.d.ts.map +1 -1
  19. package/dist/codemods/v0-15/aui-accessor-calls-to-properties.js +33 -5
  20. package/dist/codemods/v0-15/aui-accessor-calls-to-properties.js.map +1 -1
  21. package/dist/codemods/v0-8/ui-package-split.d.ts +1 -3
  22. package/dist/codemods/v0-8/ui-package-split.d.ts.map +1 -1
  23. package/dist/codemods/v0-9/edge-package-split.d.ts +1 -3
  24. package/dist/codemods/v0-9/edge-package-split.d.ts.map +1 -1
  25. package/dist/commands/add.d.ts +10 -12
  26. package/dist/commands/add.d.ts.map +1 -1
  27. package/dist/commands/add.js +3 -3
  28. package/dist/commands/agent.d.ts +0 -2
  29. package/dist/commands/agent.d.ts.map +1 -1
  30. package/dist/commands/agent.js +16 -13
  31. package/dist/commands/agent.js.map +1 -1
  32. package/dist/commands/create.d.ts +33 -28
  33. package/dist/commands/create.d.ts.map +1 -1
  34. package/dist/commands/create.js +19 -15
  35. package/dist/commands/create.js.map +1 -1
  36. package/dist/commands/doctor.d.ts +8 -10
  37. package/dist/commands/doctor.d.ts.map +1 -1
  38. package/dist/commands/info.d.ts +2 -4
  39. package/dist/commands/info.d.ts.map +1 -1
  40. package/dist/commands/info.js +3 -3
  41. package/dist/commands/init.d.ts +5 -6
  42. package/dist/commands/init.d.ts.map +1 -1
  43. package/dist/commands/init.js +2 -2
  44. package/dist/commands/mcp.d.ts +0 -2
  45. package/dist/commands/mcp.d.ts.map +1 -1
  46. package/dist/commands/mcp.js +2 -2
  47. package/dist/commands/update.d.ts +0 -2
  48. package/dist/commands/update.d.ts.map +1 -1
  49. package/dist/commands/update.js +1 -1
  50. package/dist/commands/upgrade.d.ts +4 -6
  51. package/dist/commands/upgrade.d.ts.map +1 -1
  52. package/dist/index.d.ts +3 -1
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/lib/agent-skill.d.ts +8 -6
  55. package/dist/lib/agent-skill.d.ts.map +1 -1
  56. package/dist/lib/agent-skill.js +78 -2
  57. package/dist/lib/agent-skill.js.map +1 -1
  58. package/dist/lib/create-project.d.ts +22 -20
  59. package/dist/lib/create-project.d.ts.map +1 -1
  60. package/dist/lib/create-project.js +91 -5
  61. package/dist/lib/create-project.js.map +1 -1
  62. package/dist/lib/handle-cli-error.d.ts +0 -2
  63. package/dist/lib/handle-cli-error.d.ts.map +1 -1
  64. package/dist/lib/install-ai-sdk-lib.d.ts +0 -2
  65. package/dist/lib/install-ai-sdk-lib.d.ts.map +1 -1
  66. package/dist/lib/install-edge-lib.d.ts +0 -2
  67. package/dist/lib/install-edge-lib.d.ts.map +1 -1
  68. package/dist/lib/run-spawn.d.ts +11 -12
  69. package/dist/lib/run-spawn.d.ts.map +1 -1
  70. package/dist/lib/run-spawn.js +25 -10
  71. package/dist/lib/run-spawn.js.map +1 -1
  72. package/dist/lib/transform-options.d.ts +4 -6
  73. package/dist/lib/transform-options.d.ts.map +1 -1
  74. package/dist/lib/transform.d.ts +11 -13
  75. package/dist/lib/transform.d.ts.map +1 -1
  76. package/dist/lib/transform.js +19 -35
  77. package/dist/lib/transform.js.map +1 -1
  78. package/dist/lib/upgrade.d.ts +2 -4
  79. package/dist/lib/upgrade.d.ts.map +1 -1
  80. package/dist/lib/upgrade.js +6 -11
  81. package/dist/lib/upgrade.js.map +1 -1
  82. package/dist/lib/utils/config.d.ts +14 -16
  83. package/dist/lib/utils/config.d.ts.map +1 -1
  84. package/dist/lib/utils/file-scanner.d.ts +8 -10
  85. package/dist/lib/utils/file-scanner.d.ts.map +1 -1
  86. package/dist/lib/utils/logger.d.ts +6 -8
  87. package/dist/lib/utils/logger.d.ts.map +1 -1
  88. package/dist/lib/utils/package-installer.d.ts +5 -7
  89. package/dist/lib/utils/package-installer.d.ts.map +1 -1
  90. package/dist/lib/utils/package-json.d.ts +0 -2
  91. package/dist/lib/utils/package-json.d.ts.map +1 -1
  92. package/dist/lib/utils/package-manager.d.ts +2 -4
  93. package/dist/lib/utils/package-manager.d.ts.map +1 -1
  94. package/dist/lib/utils/package-manager.js +13 -2
  95. package/dist/lib/utils/package-manager.js.map +1 -1
  96. package/dist/lib/utils/registry.d.ts +0 -2
  97. package/dist/lib/utils/registry.d.ts.map +1 -1
  98. package/dist/lib/utils/workspace.d.ts +0 -2
  99. package/dist/lib/utils/workspace.d.ts.map +1 -1
  100. package/dist/program.d.ts +0 -2
  101. package/dist/program.d.ts.map +1 -1
  102. package/dist/program.js +6 -6
  103. package/dist/run.d.ts +0 -2
  104. package/dist/run.d.ts.map +1 -1
  105. package/package.json +2 -3
  106. package/src/codemods/utils/resolveBinding.test.ts +107 -0
  107. package/src/codemods/utils/resolveBinding.ts +130 -0
  108. package/src/codemods/v0-12/__tests__/assistant-api-to-aui.test.ts +256 -0
  109. package/src/codemods/v0-12/assistant-api-to-aui.ts +125 -225
  110. package/src/codemods/v0-15/__tests__/aui-accessor-calls-to-properties.test.ts +101 -0
  111. package/src/codemods/v0-15/aui-accessor-calls-to-properties.ts +60 -5
  112. package/src/commands/agent.ts +15 -22
  113. package/src/commands/create.ts +24 -15
  114. package/src/lib/agent-skill.ts +103 -1
  115. package/src/lib/create-project.ts +99 -4
  116. package/src/lib/run-spawn.test.ts +47 -0
  117. package/src/lib/run-spawn.ts +29 -17
  118. package/src/lib/transform-files.test.ts +71 -0
  119. package/src/lib/transform.test.ts +69 -1
  120. package/src/lib/transform.ts +23 -38
  121. package/src/lib/upgrade.ts +9 -13
  122. package/src/lib/utils/package-manager.ts +24 -1
  123. package/plugin/.claude-plugin/plugin.json +0 -8
  124. package/plugin/skills/assistant-ui/SKILL.md +0 -199
  125. package/plugin/skills/assistant-ui/shipables.json +0 -22
@@ -1,22 +1,21 @@
1
- //#region src/lib/run-spawn.d.ts
2
1
  export declare class SpawnExitError extends Error {
3
- code: number;
4
- stderr: string;
5
- constructor(code: number, stderr?: string);
2
+ code: number;
3
+ stderr: string;
4
+ stdout: string;
5
+ constructor(code: number, stderr?: string, stdout?: string);
6
6
  }
7
7
  export declare class SpawnSignalError extends Error {
8
- signal: NodeJS.Signals;
9
- forwarded: boolean;
10
- constructor(signal: NodeJS.Signals, forwarded: boolean);
8
+ signal: NodeJS.Signals;
9
+ forwarded: boolean;
10
+ constructor(signal: NodeJS.Signals, forwarded: boolean);
11
11
  }
12
12
  export interface SpawnResult {
13
- code: number | null;
14
- signal: NodeJS.Signals | null;
15
- stdout: string;
16
- stderr: string;
13
+ code: number | null;
14
+ signal: NodeJS.Signals | null;
15
+ stdout: string;
16
+ stderr: string;
17
17
  }
18
18
  export declare const hasActiveSpawn: () => boolean;
19
19
  export declare function runSpawn(command: string, args: string[], cwd?: string): Promise<void>;
20
20
  export declare function runSpawnCapture(command: string, args: string[], cwd?: string): Promise<SpawnResult>;
21
- //#endregion
22
21
  //# sourceMappingURL=run-spawn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-spawn.d.ts","names":[],"sources":["../../src/lib/run-spawn.ts"],"mappings":";qBAEa,uBAAuB;EAClC;EACA;EAEY,YAAA,cAAc;;qBAWf,yBAAyB;EACpC,QAAQ,OAAO;EACf;EAEY,YAAA,QAAQ,OAAO,SAAS;;iBAOrB;EACf;EACA,QAAQ,OAAO;EACf;EACA;;qBAOW;wBAiFG,SACd,iBACA,gBACA,eACC;wBAWa,gBACd,iBACA,gBACA,eACC,QAAQ"}
1
+ {"version":3,"file":"run-spawn.d.ts","sourceRoot":"","sources":["../../src/lib/run-spawn.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAe,SAAQ,KAAK;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;gBAEH,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,EAAE,MAAM,SAAK;CAWnD;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;gBAEP,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO;CAKvD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,eAAO,MAAM,cAAc,QAAO,OAA2B,CAAC;AA0F9D,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,CAAC,CAEtB"}
@@ -3,10 +3,13 @@ import { spawn } from "cross-spawn";
3
3
  var SpawnExitError = class extends Error {
4
4
  code;
5
5
  stderr;
6
- constructor(code, stderr = "") {
7
- super(stderr ? `Process exited with code ${code}\n${stderr}` : `Process exited with code ${code}`);
6
+ stdout;
7
+ constructor(code, stderr = "", stdout = "") {
8
+ const output = [stdout, stderr].filter(Boolean).join("\n");
9
+ super(output ? `Process exited with code ${code}\n${output}` : `Process exited with code ${code}`);
8
10
  this.code = code;
9
11
  this.stderr = stderr;
12
+ this.stdout = stdout;
10
13
  }
11
14
  };
12
15
  var SpawnSignalError = class extends Error {
@@ -31,6 +34,7 @@ function spawnProcess(command, args, cwd, captureOutput) {
31
34
  cwd
32
35
  });
33
36
  let forwardedSignal = null;
37
+ let escalated = false;
34
38
  let settled = false;
35
39
  let stdout = "";
36
40
  let stderr = "";
@@ -49,15 +53,23 @@ function spawnProcess(command, args, cwd, captureOutput) {
49
53
  process.off("SIGINT", onSigint);
50
54
  process.off("SIGTERM", onSigterm);
51
55
  };
52
- const rejectWithSignal = (signal) => {
56
+ const rejectForwardedSignal = () => {
57
+ if (settled || forwardedSignal === null) return false;
53
58
  settled = true;
59
+ child.stdout?.destroy();
60
+ child.stderr?.destroy();
54
61
  cleanup();
55
- reject(new SpawnSignalError(signal, forwardedSignal !== null));
62
+ reject(new SpawnSignalError(forwardedSignal, true));
63
+ return true;
56
64
  };
57
65
  const forwardSignal = (signal) => {
58
66
  if (forwardedSignal !== null) {
59
- child.kill("SIGKILL");
60
- rejectWithSignal(forwardedSignal);
67
+ if (!escalated) {
68
+ escalated = true;
69
+ child.kill("SIGKILL");
70
+ return;
71
+ }
72
+ rejectForwardedSignal();
61
73
  return;
62
74
  }
63
75
  forwardedSignal = signal;
@@ -70,17 +82,20 @@ function spawnProcess(command, args, cwd, captureOutput) {
70
82
  process.on("SIGTERM", onSigterm);
71
83
  child.on("error", (error) => {
72
84
  if (settled) return;
85
+ if (rejectForwardedSignal()) return;
73
86
  settled = true;
74
87
  cleanup();
75
- if (forwardedSignal !== null) reject(new SpawnSignalError(forwardedSignal, true));
76
- else reject(error);
88
+ reject(error);
89
+ });
90
+ child.on("exit", () => {
91
+ rejectForwardedSignal();
77
92
  });
78
93
  child.on("close", (code, signal) => {
79
94
  if (settled) return;
95
+ if (rejectForwardedSignal()) return;
80
96
  settled = true;
81
97
  cleanup();
82
- if (forwardedSignal !== null) reject(new SpawnSignalError(forwardedSignal, true));
83
- else resolve({
98
+ resolve({
84
99
  code,
85
100
  signal: signal ?? null,
86
101
  stdout,
@@ -1 +1 @@
1
- {"version":3,"file":"run-spawn.js","names":[],"sources":["../../src/lib/run-spawn.ts"],"sourcesContent":["import { spawn } from \"cross-spawn\";\n\nexport class SpawnExitError extends Error {\n code: number;\n stderr: string;\n\n constructor(code: number, stderr = \"\") {\n super(\n stderr\n ? `Process exited with code ${code}\\n${stderr}`\n : `Process exited with code ${code}`,\n );\n this.code = code;\n this.stderr = stderr;\n }\n}\n\nexport class SpawnSignalError extends Error {\n signal: NodeJS.Signals;\n forwarded: boolean;\n\n constructor(signal: NodeJS.Signals, forwarded: boolean) {\n super(`Process terminated by ${signal}`);\n this.signal = signal;\n this.forwarded = forwarded;\n }\n}\n\nexport interface SpawnResult {\n code: number | null;\n signal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n}\n\nlet activeSpawns = 0;\n\n// A spawn that is forwarding a signal owns termination for that window, so\n// callers with their own cleanup listeners defer to it instead of racing it.\nexport const hasActiveSpawn = (): boolean => activeSpawns > 0;\n\nfunction spawnProcess(\n command: string,\n args: string[],\n cwd: string | undefined,\n captureOutput: boolean,\n): Promise<SpawnResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n stdio: captureOutput ? [\"ignore\", \"pipe\", \"pipe\"] : \"inherit\",\n cwd,\n });\n let forwardedSignal: NodeJS.Signals | null = null;\n let settled = false;\n let stdout = \"\";\n let stderr = \"\";\n\n if (captureOutput) {\n child.stdout?.setEncoding(\"utf8\");\n child.stdout?.on(\"data\", (chunk: string) => {\n stdout += chunk;\n });\n child.stderr?.setEncoding(\"utf8\");\n child.stderr?.on(\"data\", (chunk: string) => {\n stderr += chunk;\n });\n }\n\n const cleanup = () => {\n activeSpawns -= 1;\n process.off(\"SIGINT\", onSigint);\n process.off(\"SIGTERM\", onSigterm);\n };\n\n const rejectWithSignal = (signal: NodeJS.Signals) => {\n settled = true;\n cleanup();\n reject(new SpawnSignalError(signal, forwardedSignal !== null));\n };\n\n const forwardSignal = (signal: NodeJS.Signals) => {\n if (forwardedSignal !== null) {\n child.kill(\"SIGKILL\");\n rejectWithSignal(forwardedSignal);\n return;\n }\n\n forwardedSignal = signal;\n child.kill(signal);\n };\n const onSigint = () => forwardSignal(\"SIGINT\");\n const onSigterm = () => forwardSignal(\"SIGTERM\");\n\n activeSpawns += 1;\n process.on(\"SIGINT\", onSigint);\n process.on(\"SIGTERM\", onSigterm);\n\n child.on(\"error\", (error) => {\n if (settled) return;\n settled = true;\n cleanup();\n if (forwardedSignal !== null) {\n reject(new SpawnSignalError(forwardedSignal, true));\n } else {\n reject(error);\n }\n });\n child.on(\"close\", (code, signal) => {\n if (settled) return;\n settled = true;\n cleanup();\n if (forwardedSignal !== null) {\n reject(new SpawnSignalError(forwardedSignal, true));\n } else {\n resolve({ code, signal: signal ?? null, stdout, stderr });\n }\n });\n });\n}\n\nexport function runSpawn(\n command: string,\n args: string[],\n cwd?: string,\n): Promise<void> {\n return spawnProcess(command, args, cwd, false).then(({ code, signal }) => {\n if (signal != null) {\n throw new SpawnSignalError(signal, false);\n }\n if (code !== 0) {\n throw new SpawnExitError(code || 1);\n }\n });\n}\n\nexport function runSpawnCapture(\n command: string,\n args: string[],\n cwd?: string,\n): Promise<SpawnResult> {\n return spawnProcess(command, args, cwd, true);\n}\n"],"mappings":";;AAEA,IAAa,iBAAb,cAAoC,MAAM;CACxC;CACA;CAEA,YAAY,MAAc,SAAS,IAAI;EACrC,MACE,SACI,4BAA4B,KAAK,IAAI,WACrC,4BAA4B,MAClC;EACA,KAAK,OAAO;EACZ,KAAK,SAAS;CAChB;AACF;AAEA,IAAa,mBAAb,cAAsC,MAAM;CAC1C;CACA;CAEA,YAAY,QAAwB,WAAoB;EACtD,MAAM,yBAAyB,QAAQ;EACvC,KAAK,SAAS;EACd,KAAK,YAAY;CACnB;AACF;AASA,IAAI,eAAe;AAInB,MAAa,uBAAgC,eAAe;AAE5D,SAAS,aACP,SACA,MACA,KACA,eACsB;CACtB,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,QAAQ,MAAM,SAAS,MAAM;GACjC,OAAO,gBAAgB;IAAC;IAAU;IAAQ;GAAM,IAAI;GACpD;EACF,CAAC;EACD,IAAI,kBAAyC;EAC7C,IAAI,UAAU;EACd,IAAI,SAAS;EACb,IAAI,SAAS;EAEb,IAAI,eAAe;GACjB,MAAM,QAAQ,YAAY,MAAM;GAChC,MAAM,QAAQ,GAAG,SAAS,UAAkB;IAC1C,UAAU;GACZ,CAAC;GACD,MAAM,QAAQ,YAAY,MAAM;GAChC,MAAM,QAAQ,GAAG,SAAS,UAAkB;IAC1C,UAAU;GACZ,CAAC;EACH;EAEA,MAAM,gBAAgB;GACpB,gBAAgB;GAChB,QAAQ,IAAI,UAAU,QAAQ;GAC9B,QAAQ,IAAI,WAAW,SAAS;EAClC;EAEA,MAAM,oBAAoB,WAA2B;GACnD,UAAU;GACV,QAAQ;GACR,OAAO,IAAI,iBAAiB,QAAQ,oBAAoB,IAAI,CAAC;EAC/D;EAEA,MAAM,iBAAiB,WAA2B;GAChD,IAAI,oBAAoB,MAAM;IAC5B,MAAM,KAAK,SAAS;IACpB,iBAAiB,eAAe;IAChC;GACF;GAEA,kBAAkB;GAClB,MAAM,KAAK,MAAM;EACnB;EACA,MAAM,iBAAiB,cAAc,QAAQ;EAC7C,MAAM,kBAAkB,cAAc,SAAS;EAE/C,gBAAgB;EAChB,QAAQ,GAAG,UAAU,QAAQ;EAC7B,QAAQ,GAAG,WAAW,SAAS;EAE/B,MAAM,GAAG,UAAU,UAAU;GAC3B,IAAI,SAAS;GACb,UAAU;GACV,QAAQ;GACR,IAAI,oBAAoB,MACtB,OAAO,IAAI,iBAAiB,iBAAiB,IAAI,CAAC;QAElD,OAAO,KAAK;EAEhB,CAAC;EACD,MAAM,GAAG,UAAU,MAAM,WAAW;GAClC,IAAI,SAAS;GACb,UAAU;GACV,QAAQ;GACR,IAAI,oBAAoB,MACtB,OAAO,IAAI,iBAAiB,iBAAiB,IAAI,CAAC;QAElD,QAAQ;IAAE;IAAM,QAAQ,UAAU;IAAM;IAAQ;GAAO,CAAC;EAE5D,CAAC;CACH,CAAC;AACH;AAEA,SAAgB,SACd,SACA,MACA,KACe;CACf,OAAO,aAAa,SAAS,MAAM,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,aAAa;EACxE,IAAI,UAAU,MACZ,MAAM,IAAI,iBAAiB,QAAQ,KAAK;EAE1C,IAAI,SAAS,GACX,MAAM,IAAI,eAAe,QAAQ,CAAC;CAEtC,CAAC;AACH;AAEA,SAAgB,gBACd,SACA,MACA,KACsB;CACtB,OAAO,aAAa,SAAS,MAAM,KAAK,IAAI;AAC9C"}
1
+ {"version":3,"file":"run-spawn.js","names":[],"sources":["../../src/lib/run-spawn.ts"],"sourcesContent":["import { spawn } from \"cross-spawn\";\n\nexport class SpawnExitError extends Error {\n code: number;\n stderr: string;\n stdout: string;\n\n constructor(code: number, stderr = \"\", stdout = \"\") {\n const output = [stdout, stderr].filter(Boolean).join(\"\\n\");\n super(\n output\n ? `Process exited with code ${code}\\n${output}`\n : `Process exited with code ${code}`,\n );\n this.code = code;\n this.stderr = stderr;\n this.stdout = stdout;\n }\n}\n\nexport class SpawnSignalError extends Error {\n signal: NodeJS.Signals;\n forwarded: boolean;\n\n constructor(signal: NodeJS.Signals, forwarded: boolean) {\n super(`Process terminated by ${signal}`);\n this.signal = signal;\n this.forwarded = forwarded;\n }\n}\n\nexport interface SpawnResult {\n code: number | null;\n signal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n}\n\nlet activeSpawns = 0;\n\n// A spawn that is forwarding a signal owns termination for that window, so\n// callers with their own cleanup listeners defer to it instead of racing it.\nexport const hasActiveSpawn = (): boolean => activeSpawns > 0;\n\nfunction spawnProcess(\n command: string,\n args: string[],\n cwd: string | undefined,\n captureOutput: boolean,\n): Promise<SpawnResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n stdio: captureOutput ? [\"ignore\", \"pipe\", \"pipe\"] : \"inherit\",\n cwd,\n });\n let forwardedSignal: NodeJS.Signals | null = null;\n let escalated = false;\n let settled = false;\n let stdout = \"\";\n let stderr = \"\";\n\n if (captureOutput) {\n child.stdout?.setEncoding(\"utf8\");\n child.stdout?.on(\"data\", (chunk: string) => {\n stdout += chunk;\n });\n child.stderr?.setEncoding(\"utf8\");\n child.stderr?.on(\"data\", (chunk: string) => {\n stderr += chunk;\n });\n }\n\n const cleanup = () => {\n activeSpawns -= 1;\n process.off(\"SIGINT\", onSigint);\n process.off(\"SIGTERM\", onSigterm);\n };\n\n const rejectForwardedSignal = () => {\n if (settled || forwardedSignal === null) return false;\n settled = true;\n child.stdout?.destroy();\n child.stderr?.destroy();\n cleanup();\n reject(new SpawnSignalError(forwardedSignal, true));\n return true;\n };\n\n const forwardSignal = (signal: NodeJS.Signals) => {\n if (forwardedSignal !== null) {\n if (!escalated) {\n escalated = true;\n child.kill(\"SIGKILL\");\n return;\n }\n\n rejectForwardedSignal();\n return;\n }\n\n forwardedSignal = signal;\n child.kill(signal);\n };\n const onSigint = () => forwardSignal(\"SIGINT\");\n const onSigterm = () => forwardSignal(\"SIGTERM\");\n\n activeSpawns += 1;\n process.on(\"SIGINT\", onSigint);\n process.on(\"SIGTERM\", onSigterm);\n\n child.on(\"error\", (error) => {\n if (settled) return;\n if (rejectForwardedSignal()) return;\n settled = true;\n cleanup();\n reject(error);\n });\n // \"close\" waits for stdio pipes, which a grandchild can hold open after\n // the child is reaped, so a forwarded signal settles on \"exit\".\n child.on(\"exit\", () => {\n rejectForwardedSignal();\n });\n child.on(\"close\", (code, signal) => {\n if (settled) return;\n if (rejectForwardedSignal()) return;\n settled = true;\n cleanup();\n resolve({ code, signal: signal ?? null, stdout, stderr });\n });\n });\n}\n\nexport function runSpawn(\n command: string,\n args: string[],\n cwd?: string,\n): Promise<void> {\n return spawnProcess(command, args, cwd, false).then(({ code, signal }) => {\n if (signal != null) {\n throw new SpawnSignalError(signal, false);\n }\n if (code !== 0) {\n throw new SpawnExitError(code || 1);\n }\n });\n}\n\nexport function runSpawnCapture(\n command: string,\n args: string[],\n cwd?: string,\n): Promise<SpawnResult> {\n return spawnProcess(command, args, cwd, true);\n}\n"],"mappings":";;AAEA,IAAa,iBAAb,cAAoC,MAAM;CACxC;CACA;CACA;CAEA,YAAY,MAAc,SAAS,IAAI,SAAS,IAAI;EAClD,MAAM,SAAS,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,IAAI;EACzD,MACE,SACI,4BAA4B,KAAK,IAAI,WACrC,4BAA4B,MAClC;EACA,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,SAAS;CAChB;AACF;AAEA,IAAa,mBAAb,cAAsC,MAAM;CAC1C;CACA;CAEA,YAAY,QAAwB,WAAoB;EACtD,MAAM,yBAAyB,QAAQ;EACvC,KAAK,SAAS;EACd,KAAK,YAAY;CACnB;AACF;AASA,IAAI,eAAe;AAInB,MAAa,uBAAgC,eAAe;AAE5D,SAAS,aACP,SACA,MACA,KACA,eACsB;CACtB,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,QAAQ,MAAM,SAAS,MAAM;GACjC,OAAO,gBAAgB;IAAC;IAAU;IAAQ;GAAM,IAAI;GACpD;EACF,CAAC;EACD,IAAI,kBAAyC;EAC7C,IAAI,YAAY;EAChB,IAAI,UAAU;EACd,IAAI,SAAS;EACb,IAAI,SAAS;EAEb,IAAI,eAAe;GACjB,MAAM,QAAQ,YAAY,MAAM;GAChC,MAAM,QAAQ,GAAG,SAAS,UAAkB;IAC1C,UAAU;GACZ,CAAC;GACD,MAAM,QAAQ,YAAY,MAAM;GAChC,MAAM,QAAQ,GAAG,SAAS,UAAkB;IAC1C,UAAU;GACZ,CAAC;EACH;EAEA,MAAM,gBAAgB;GACpB,gBAAgB;GAChB,QAAQ,IAAI,UAAU,QAAQ;GAC9B,QAAQ,IAAI,WAAW,SAAS;EAClC;EAEA,MAAM,8BAA8B;GAClC,IAAI,WAAW,oBAAoB,MAAM,OAAO;GAChD,UAAU;GACV,MAAM,QAAQ,QAAQ;GACtB,MAAM,QAAQ,QAAQ;GACtB,QAAQ;GACR,OAAO,IAAI,iBAAiB,iBAAiB,IAAI,CAAC;GAClD,OAAO;EACT;EAEA,MAAM,iBAAiB,WAA2B;GAChD,IAAI,oBAAoB,MAAM;IAC5B,IAAI,CAAC,WAAW;KACd,YAAY;KACZ,MAAM,KAAK,SAAS;KACpB;IACF;IAEA,sBAAsB;IACtB;GACF;GAEA,kBAAkB;GAClB,MAAM,KAAK,MAAM;EACnB;EACA,MAAM,iBAAiB,cAAc,QAAQ;EAC7C,MAAM,kBAAkB,cAAc,SAAS;EAE/C,gBAAgB;EAChB,QAAQ,GAAG,UAAU,QAAQ;EAC7B,QAAQ,GAAG,WAAW,SAAS;EAE/B,MAAM,GAAG,UAAU,UAAU;GAC3B,IAAI,SAAS;GACb,IAAI,sBAAsB,GAAG;GAC7B,UAAU;GACV,QAAQ;GACR,OAAO,KAAK;EACd,CAAC;EAGD,MAAM,GAAG,cAAc;GACrB,sBAAsB;EACxB,CAAC;EACD,MAAM,GAAG,UAAU,MAAM,WAAW;GAClC,IAAI,SAAS;GACb,IAAI,sBAAsB,GAAG;GAC7B,UAAU;GACV,QAAQ;GACR,QAAQ;IAAE;IAAM,QAAQ,UAAU;IAAM;IAAQ;GAAO,CAAC;EAC1D,CAAC;CACH,CAAC;AACH;AAEA,SAAgB,SACd,SACA,MACA,KACe;CACf,OAAO,aAAa,SAAS,MAAM,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,aAAa;EACxE,IAAI,UAAU,MACZ,MAAM,IAAI,iBAAiB,QAAQ,KAAK;EAE1C,IAAI,SAAS,GACX,MAAM,IAAI,eAAe,QAAQ,CAAC;CAEtC,CAAC;AACH;AAEA,SAAgB,gBACd,SACA,MACA,KACsB;CACtB,OAAO,aAAa,SAAS,MAAM,KAAK,IAAI;AAC9C"}
@@ -1,9 +1,7 @@
1
- //#region src/lib/transform-options.d.ts
2
1
  export interface TransformOptions {
3
- dry?: boolean;
4
- print?: boolean;
5
- verbose?: boolean;
6
- jscodeshift?: string;
2
+ dry?: boolean;
3
+ print?: boolean;
4
+ verbose?: boolean;
5
+ jscodeshift?: string;
7
6
  }
8
- //#endregion
9
7
  //# sourceMappingURL=transform-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform-options.d.ts","names":[],"sources":["../../src/lib/transform-options.ts"],"mappings":";iBAAiB;EACf;EACA;EACA;EACA"}
1
+ {"version":3,"file":"transform-options.d.ts","sourceRoot":"","sources":["../../src/lib/transform-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,23 +1,21 @@
1
- import { TransformOptions } from "./transform-options.js";
2
- //#region src/lib/transform.d.ts
1
+ import type { TransformOptions } from "./transform-options.js";
3
2
  /**
4
- * Gets the list of files that need to be processed in the codebase
5
- * Only includes files that contain "assistant-ui" to optimize performance
3
+ * Gets relevant source files from an explicit file or directory target.
4
+ * Directory scans only include files containing "assistant-ui".
6
5
  */
7
- export declare function getRelevantFiles(cwd: string): string[];
6
+ export declare function getRelevantFiles(source: string): string[];
8
7
  /**
9
8
  * Counts the number of files that need to be processed
10
9
  */
11
- export declare function countFilesToProcess(cwd: string): number;
10
+ export declare function countFilesToProcess(source: string): number;
12
11
  export type TransformErrors = {
13
- transform: string;
14
- filename: string;
15
- summary: string;
12
+ transform: string;
13
+ filename: string;
14
+ summary: string;
16
15
  }[];
17
16
  export declare function transform(codemod: string, source: string, transformOptions: TransformOptions, options?: {
18
- logStatus: boolean;
19
- onProgress?: (processedFiles: number) => void;
20
- relevantFiles?: string[];
17
+ logStatus: boolean;
18
+ onProgress?: (processedFiles: number) => void;
19
+ relevantFiles?: string[];
21
20
  }): Promise<TransformErrors>;
22
- //#endregion
23
21
  //# sourceMappingURL=transform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","names":[],"sources":["../../src/lib/transform.ts"],"mappings":";;;;;;wBAkBgB,iBAAiB;;;;wBA6BjB,oBAAoB;YAsCxB;EACV;EACA;EACA;;wBAoBoB,UACpB,iBACA,gBACA,kBAAkB,kBAClB;EACE;EACA,cAAc;EACd;IAED,QAAQ"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/lib/transform.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,+BAA4B;AAW5D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAqCD,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,EAAE,CAAC;AAEJ,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,GAAE;IACP,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CACJ,GACtB,OAAO,CAAC,eAAe,CAAC,CAwC1B"}
@@ -6,16 +6,17 @@ import debug from "debug";
6
6
  import { fileURLToPath } from "node:url";
7
7
  //#region src/lib/transform.ts
8
8
  const log = debug("codemod:transform");
9
- const error = debug("codemod:transform:error");
10
9
  const __filename = fileURLToPath(import.meta.url);
11
10
  const __dirname = path.dirname(__filename);
12
11
  /**
13
- * Gets the list of files that need to be processed in the codebase
14
- * Only includes files that contain "assistant-ui" to optimize performance
12
+ * Gets relevant source files from an explicit file or directory target.
13
+ * Directory scans only include files containing "assistant-ui".
15
14
  */
16
- function getRelevantFiles(cwd) {
15
+ function getRelevantFiles(source) {
16
+ const target = path.resolve(source);
17
+ if (fs$1.statSync(target).isFile()) return /\.(js|jsx|ts|tsx)$/.test(target) ? [target] : [];
17
18
  return sync("**/*.{js,jsx,ts,tsx}", {
18
- cwd,
19
+ cwd: target,
19
20
  ignore: [
20
21
  "**/node_modules/**",
21
22
  "**/dist/**",
@@ -23,19 +24,19 @@ function getRelevantFiles(cwd) {
23
24
  "**/*.min.js",
24
25
  "**/*.bundle.js"
25
26
  ]
26
- }).filter((file) => {
27
+ }).map((file) => path.join(target, file)).filter((file) => {
27
28
  try {
28
- return fs$1.readFileSync(path.join(cwd, file), "utf8").includes("assistant-ui");
29
+ return fs$1.readFileSync(file, "utf8").includes("assistant-ui");
29
30
  } catch {
30
31
  return false;
31
32
  }
32
- }).map((file) => path.join(cwd, file));
33
+ });
33
34
  }
34
35
  /**
35
36
  * Counts the number of files that need to be processed
36
37
  */
37
- function countFilesToProcess(cwd) {
38
- return getRelevantFiles(cwd).length;
38
+ function countFilesToProcess(source) {
39
+ return getRelevantFiles(source).length;
39
40
  }
40
41
  function buildCommand(codemodPath, targetFiles, options) {
41
42
  const command = [
@@ -45,7 +46,8 @@ function buildCommand(codemodPath, targetFiles, options) {
45
46
  codemodPath,
46
47
  ...targetFiles,
47
48
  "--parser",
48
- "tsx"
49
+ "tsx",
50
+ "--fail-on-error"
49
51
  ];
50
52
  if (options.dry) command.push("--dry");
51
53
  if (options.print) command.push("--print");
@@ -53,24 +55,6 @@ function buildCommand(codemodPath, targetFiles, options) {
53
55
  if (options.jscodeshift) command.push(options.jscodeshift);
54
56
  return command;
55
57
  }
56
- function parseErrors(transform, output) {
57
- const errors = [];
58
- const errorRegex = /ERR (.+) Transformation error/g;
59
- const syntaxErrorRegex = /SyntaxError: .+/g;
60
- for (const match of output.matchAll(errorRegex)) {
61
- const filename = match[1];
62
- const syntaxErrorMatch = syntaxErrorRegex.exec(output);
63
- if (syntaxErrorMatch) {
64
- const summary = syntaxErrorMatch[0];
65
- errors.push({
66
- transform,
67
- filename,
68
- summary
69
- });
70
- }
71
- }
72
- return errors;
73
- }
74
58
  async function transform(codemod, source, transformOptions, options = { logStatus: true }) {
75
59
  if (options.logStatus) log(`Applying codemod '${codemod}': ${source}`);
76
60
  const codemodPath = path.resolve(__dirname, `../codemods/${codemod}.js`);
@@ -83,17 +67,17 @@ async function transform(codemod, source, transformOptions, options = { logStatu
83
67
  const command = buildCommand(codemodPath, targetFiles, transformOptions);
84
68
  const result = await runSpawnCapture(command[0], command.slice(1));
85
69
  if (result.signal !== null) throw new SpawnSignalError(result.signal, false);
86
- if (result.code !== 0) throw new SpawnExitError(result.code || 1, result.stderr);
70
+ if (result.code !== 0) {
71
+ const failure = new SpawnExitError(result.code || 1, result.stderr, result.stdout);
72
+ failure.message = `Codemod '${codemod}' failed\n${failure.message}`;
73
+ throw failure;
74
+ }
87
75
  const { stdout } = result;
88
76
  if (options.onProgress) {
89
77
  const processedFiles = (stdout.match(/Processing file/g) || []).length;
90
78
  options.onProgress(processedFiles);
91
79
  }
92
- const errors = parseErrors(codemod, stdout);
93
- if (options.logStatus && errors.length > 0) errors.forEach(({ transform, filename, summary }) => {
94
- error(`Error applying codemod [codemod=${transform}, path=${filename}, summary=${summary}]`);
95
- });
96
- return errors;
80
+ return [];
97
81
  }
98
82
  //#endregion
99
83
  export { countFilesToProcess, getRelevantFiles, transform };
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","names":["globSync","fs"],"sources":["../../src/lib/transform.ts"],"sourcesContent":["import debug from \"debug\";\nimport path from \"node:path\";\nimport type { TransformOptions } from \"./transform-options\";\nimport { fileURLToPath } from \"node:url\";\nimport * as fs from \"node:fs\";\nimport { sync as globSync } from \"glob\";\nimport { runSpawnCapture, SpawnExitError, SpawnSignalError } from \"./run-spawn\";\n\nconst log = debug(\"codemod:transform\");\nconst error = debug(\"codemod:transform:error\");\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * Gets the list of files that need to be processed in the codebase\n * Only includes files that contain \"assistant-ui\" to optimize performance\n */\nexport function getRelevantFiles(cwd: string): string[] {\n const pattern = \"**/*.{js,jsx,ts,tsx}\";\n const files = globSync(pattern, {\n cwd,\n ignore: [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/*.min.js\",\n \"**/*.bundle.js\",\n ],\n });\n\n // Filter files to only include those containing \"assistant-ui\"\n const relevantFiles = files.filter((file) => {\n try {\n const content = fs.readFileSync(path.join(cwd, file), \"utf8\");\n return content.includes(\"assistant-ui\");\n } catch {\n return false;\n }\n });\n\n return relevantFiles.map((file) => path.join(cwd, file));\n}\n\n/**\n * Counts the number of files that need to be processed\n */\nexport function countFilesToProcess(cwd: string): number {\n return getRelevantFiles(cwd).length;\n}\n\nfunction buildCommand(\n codemodPath: string,\n targetFiles: string[],\n options: TransformOptions,\n): string[] {\n const command = [\n \"npx\",\n \"jscodeshift\",\n \"-t\",\n codemodPath,\n ...targetFiles,\n \"--parser\",\n \"tsx\",\n ];\n\n if (options.dry) {\n command.push(\"--dry\");\n }\n\n if (options.print) {\n command.push(\"--print\");\n }\n\n if (options.verbose) {\n command.push(\"--verbose\");\n }\n\n if (options.jscodeshift) {\n command.push(options.jscodeshift);\n }\n\n return command;\n}\n\nexport type TransformErrors = {\n transform: string;\n filename: string;\n summary: string;\n}[];\n\nfunction parseErrors(transform: string, output: string): TransformErrors {\n const errors: TransformErrors = [];\n const errorRegex = /ERR (.+) Transformation error/g;\n const syntaxErrorRegex = /SyntaxError: .+/g;\n\n for (const match of output.matchAll(errorRegex)) {\n const filename = match[1]!;\n const syntaxErrorMatch = syntaxErrorRegex.exec(output);\n if (syntaxErrorMatch) {\n const summary = syntaxErrorMatch[0];\n errors.push({ transform, filename, summary });\n }\n }\n\n return errors;\n}\n\nexport async function transform(\n codemod: string,\n source: string,\n transformOptions: TransformOptions,\n options: {\n logStatus: boolean;\n onProgress?: (processedFiles: number) => void;\n relevantFiles?: string[];\n } = { logStatus: true },\n): Promise<TransformErrors> {\n if (options.logStatus) {\n log(`Applying codemod '${codemod}': ${source}`);\n }\n const codemodPath = path.resolve(__dirname, `../codemods/${codemod}.js`);\n\n // Use pre-computed relevant files if provided, otherwise get them\n const targetFiles = options.relevantFiles || getRelevantFiles(source);\n\n if (targetFiles.length === 0) {\n log(`No relevant files found for codemod '${codemod}'`);\n return [];\n }\n\n log(`Found ${targetFiles.length} relevant files for codemod '${codemod}'`);\n\n const command = buildCommand(codemodPath, targetFiles, transformOptions);\n\n const result = await runSpawnCapture(command[0]!, command.slice(1));\n if (result.signal !== null) {\n throw new SpawnSignalError(result.signal, false);\n }\n if (result.code !== 0) {\n throw new SpawnExitError(result.code || 1, result.stderr);\n }\n\n const { stdout } = result;\n\n if (options.onProgress) {\n const processedFiles = (stdout.match(/Processing file/g) || []).length;\n options.onProgress(processedFiles);\n }\n\n const errors = parseErrors(codemod, stdout);\n if (options.logStatus && errors.length > 0) {\n errors.forEach(({ transform, filename, summary }) => {\n error(\n `Error applying codemod [codemod=${transform}, path=${filename}, summary=${summary}]`,\n );\n });\n }\n return errors;\n}\n"],"mappings":";;;;;;;AAQA,MAAM,MAAM,MAAM,mBAAmB;AACrC,MAAM,QAAQ,MAAM,yBAAyB;AAE7C,MAAM,aAAa,cAAc,YAAY,GAAG;AAChD,MAAM,YAAY,KAAK,QAAQ,UAAU;;;;;AAMzC,SAAgB,iBAAiB,KAAuB;CAuBtD,OArBcA,KAAS,wBAAS;EAC9B;EACA,QAAQ;GACN;GACA;GACA;GACA;GACA;EACF;CACF,CAG0B,CAAC,CAAC,QAAQ,SAAS;EAC3C,IAAI;GAEF,OADgBC,KAAG,aAAa,KAAK,KAAK,KAAK,IAAI,GAAG,MACzC,CAAC,CAAC,SAAS,cAAc;EACxC,QAAQ;GACN,OAAO;EACT;CACF,CAEmB,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,KAAK,IAAI,CAAC;AACzD;;;;AAKA,SAAgB,oBAAoB,KAAqB;CACvD,OAAO,iBAAiB,GAAG,CAAC,CAAC;AAC/B;AAEA,SAAS,aACP,aACA,aACA,SACU;CACV,MAAM,UAAU;EACd;EACA;EACA;EACA;EACA,GAAG;EACH;EACA;CACF;CAEA,IAAI,QAAQ,KACV,QAAQ,KAAK,OAAO;CAGtB,IAAI,QAAQ,OACV,QAAQ,KAAK,SAAS;CAGxB,IAAI,QAAQ,SACV,QAAQ,KAAK,WAAW;CAG1B,IAAI,QAAQ,aACV,QAAQ,KAAK,QAAQ,WAAW;CAGlC,OAAO;AACT;AAQA,SAAS,YAAY,WAAmB,QAAiC;CACvE,MAAM,SAA0B,CAAC;CACjC,MAAM,aAAa;CACnB,MAAM,mBAAmB;CAEzB,KAAK,MAAM,SAAS,OAAO,SAAS,UAAU,GAAG;EAC/C,MAAM,WAAW,MAAM;EACvB,MAAM,mBAAmB,iBAAiB,KAAK,MAAM;EACrD,IAAI,kBAAkB;GACpB,MAAM,UAAU,iBAAiB;GACjC,OAAO,KAAK;IAAE;IAAW;IAAU;GAAQ,CAAC;EAC9C;CACF;CAEA,OAAO;AACT;AAEA,eAAsB,UACpB,SACA,QACA,kBACA,UAII,EAAE,WAAW,KAAK,GACI;CAC1B,IAAI,QAAQ,WACV,IAAI,qBAAqB,QAAQ,KAAK,QAAQ;CAEhD,MAAM,cAAc,KAAK,QAAQ,WAAW,eAAe,QAAQ,IAAI;CAGvE,MAAM,cAAc,QAAQ,iBAAiB,iBAAiB,MAAM;CAEpE,IAAI,YAAY,WAAW,GAAG;EAC5B,IAAI,wCAAwC,QAAQ,EAAE;EACtD,OAAO,CAAC;CACV;CAEA,IAAI,SAAS,YAAY,OAAO,+BAA+B,QAAQ,EAAE;CAEzE,MAAM,UAAU,aAAa,aAAa,aAAa,gBAAgB;CAEvE,MAAM,SAAS,MAAM,gBAAgB,QAAQ,IAAK,QAAQ,MAAM,CAAC,CAAC;CAClE,IAAI,OAAO,WAAW,MACpB,MAAM,IAAI,iBAAiB,OAAO,QAAQ,KAAK;CAEjD,IAAI,OAAO,SAAS,GAClB,MAAM,IAAI,eAAe,OAAO,QAAQ,GAAG,OAAO,MAAM;CAG1D,MAAM,EAAE,WAAW;CAEnB,IAAI,QAAQ,YAAY;EACtB,MAAM,kBAAkB,OAAO,MAAM,kBAAkB,KAAK,CAAC,EAAA,CAAG;EAChE,QAAQ,WAAW,cAAc;CACnC;CAEA,MAAM,SAAS,YAAY,SAAS,MAAM;CAC1C,IAAI,QAAQ,aAAa,OAAO,SAAS,GACvC,OAAO,SAAS,EAAE,WAAW,UAAU,cAAc;EACnD,MACE,mCAAmC,UAAU,SAAS,SAAS,YAAY,QAAQ,EACrF;CACF,CAAC;CAEH,OAAO;AACT"}
1
+ {"version":3,"file":"transform.js","names":["fs","globSync"],"sources":["../../src/lib/transform.ts"],"sourcesContent":["import debug from \"debug\";\nimport path from \"node:path\";\nimport type { TransformOptions } from \"./transform-options\";\nimport { fileURLToPath } from \"node:url\";\nimport * as fs from \"node:fs\";\nimport { sync as globSync } from \"glob\";\nimport { runSpawnCapture, SpawnExitError, SpawnSignalError } from \"./run-spawn\";\n\nconst log = debug(\"codemod:transform\");\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * Gets relevant source files from an explicit file or directory target.\n * Directory scans only include files containing \"assistant-ui\".\n */\nexport function getRelevantFiles(source: string): string[] {\n const target = path.resolve(source);\n if (fs.statSync(target).isFile()) {\n return /\\.(js|jsx|ts|tsx)$/.test(target) ? [target] : [];\n }\n\n const pattern = \"**/*.{js,jsx,ts,tsx}\";\n const files = globSync(pattern, {\n cwd: target,\n ignore: [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"**/*.min.js\",\n \"**/*.bundle.js\",\n ],\n }).map((file) => path.join(target, file));\n\n const relevantFiles = files.filter((file) => {\n try {\n const content = fs.readFileSync(file, \"utf8\");\n return content.includes(\"assistant-ui\");\n } catch {\n return false;\n }\n });\n\n return relevantFiles;\n}\n\n/**\n * Counts the number of files that need to be processed\n */\nexport function countFilesToProcess(source: string): number {\n return getRelevantFiles(source).length;\n}\n\nfunction buildCommand(\n codemodPath: string,\n targetFiles: string[],\n options: TransformOptions,\n): string[] {\n const command = [\n \"npx\",\n \"jscodeshift\",\n \"-t\",\n codemodPath,\n ...targetFiles,\n \"--parser\",\n \"tsx\",\n \"--fail-on-error\",\n ];\n\n if (options.dry) {\n command.push(\"--dry\");\n }\n\n if (options.print) {\n command.push(\"--print\");\n }\n\n if (options.verbose) {\n command.push(\"--verbose\");\n }\n\n if (options.jscodeshift) {\n command.push(options.jscodeshift);\n }\n\n return command;\n}\n\nexport type TransformErrors = {\n transform: string;\n filename: string;\n summary: string;\n}[];\n\nexport async function transform(\n codemod: string,\n source: string,\n transformOptions: TransformOptions,\n options: {\n logStatus: boolean;\n onProgress?: (processedFiles: number) => void;\n relevantFiles?: string[];\n } = { logStatus: true },\n): Promise<TransformErrors> {\n if (options.logStatus) {\n log(`Applying codemod '${codemod}': ${source}`);\n }\n const codemodPath = path.resolve(__dirname, `../codemods/${codemod}.js`);\n\n // Use pre-computed relevant files if provided, otherwise get them\n const targetFiles = options.relevantFiles || getRelevantFiles(source);\n\n if (targetFiles.length === 0) {\n log(`No relevant files found for codemod '${codemod}'`);\n return [];\n }\n\n log(`Found ${targetFiles.length} relevant files for codemod '${codemod}'`);\n\n const command = buildCommand(codemodPath, targetFiles, transformOptions);\n\n const result = await runSpawnCapture(command[0]!, command.slice(1));\n if (result.signal !== null) {\n throw new SpawnSignalError(result.signal, false);\n }\n if (result.code !== 0) {\n const failure = new SpawnExitError(\n result.code || 1,\n result.stderr,\n result.stdout,\n );\n failure.message = `Codemod '${codemod}' failed\\n${failure.message}`;\n throw failure;\n }\n\n const { stdout } = result;\n\n if (options.onProgress) {\n const processedFiles = (stdout.match(/Processing file/g) || []).length;\n options.onProgress(processedFiles);\n }\n\n return [];\n}\n"],"mappings":";;;;;;;AAQA,MAAM,MAAM,MAAM,mBAAmB;AAErC,MAAM,aAAa,cAAc,YAAY,GAAG;AAChD,MAAM,YAAY,KAAK,QAAQ,UAAU;;;;;AAMzC,SAAgB,iBAAiB,QAA0B;CACzD,MAAM,SAAS,KAAK,QAAQ,MAAM;CAClC,IAAIA,KAAG,SAAS,MAAM,CAAC,CAAC,OAAO,GAC7B,OAAO,qBAAqB,KAAK,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC;CAwBzD,OApBcC,KAAS,wBAAS;EAC9B,KAAK;EACL,QAAQ;GACN;GACA;GACA;GACA;GACA;EACF;CACF,CAAC,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,QAAQ,IAAI,CAEb,CAAC,CAAC,QAAQ,SAAS;EAC3C,IAAI;GAEF,OADgBD,KAAG,aAAa,MAAM,MACzB,CAAC,CAAC,SAAS,cAAc;EACxC,QAAQ;GACN,OAAO;EACT;CACF,CAEmB;AACrB;;;;AAKA,SAAgB,oBAAoB,QAAwB;CAC1D,OAAO,iBAAiB,MAAM,CAAC,CAAC;AAClC;AAEA,SAAS,aACP,aACA,aACA,SACU;CACV,MAAM,UAAU;EACd;EACA;EACA;EACA;EACA,GAAG;EACH;EACA;EACA;CACF;CAEA,IAAI,QAAQ,KACV,QAAQ,KAAK,OAAO;CAGtB,IAAI,QAAQ,OACV,QAAQ,KAAK,SAAS;CAGxB,IAAI,QAAQ,SACV,QAAQ,KAAK,WAAW;CAG1B,IAAI,QAAQ,aACV,QAAQ,KAAK,QAAQ,WAAW;CAGlC,OAAO;AACT;AAQA,eAAsB,UACpB,SACA,QACA,kBACA,UAII,EAAE,WAAW,KAAK,GACI;CAC1B,IAAI,QAAQ,WACV,IAAI,qBAAqB,QAAQ,KAAK,QAAQ;CAEhD,MAAM,cAAc,KAAK,QAAQ,WAAW,eAAe,QAAQ,IAAI;CAGvE,MAAM,cAAc,QAAQ,iBAAiB,iBAAiB,MAAM;CAEpE,IAAI,YAAY,WAAW,GAAG;EAC5B,IAAI,wCAAwC,QAAQ,EAAE;EACtD,OAAO,CAAC;CACV;CAEA,IAAI,SAAS,YAAY,OAAO,+BAA+B,QAAQ,EAAE;CAEzE,MAAM,UAAU,aAAa,aAAa,aAAa,gBAAgB;CAEvE,MAAM,SAAS,MAAM,gBAAgB,QAAQ,IAAK,QAAQ,MAAM,CAAC,CAAC;CAClE,IAAI,OAAO,WAAW,MACpB,MAAM,IAAI,iBAAiB,OAAO,QAAQ,KAAK;CAEjD,IAAI,OAAO,SAAS,GAAG;EACrB,MAAM,UAAU,IAAI,eAClB,OAAO,QAAQ,GACf,OAAO,QACP,OAAO,MACT;EACA,QAAQ,UAAU,YAAY,QAAQ,YAAY,QAAQ;EAC1D,MAAM;CACR;CAEA,MAAM,EAAE,WAAW;CAEnB,IAAI,QAAQ,YAAY;EACtB,MAAM,kBAAkB,OAAO,MAAM,kBAAkB,KAAK,CAAC,EAAA,CAAG;EAChE,QAAQ,WAAW,cAAc;CACnC;CAEA,OAAO,CAAC;AACV"}
@@ -1,11 +1,9 @@
1
- import { TransformOptions } from "./transform-options.js";
2
- //#region src/lib/upgrade.d.ts
1
+ import type { TransformOptions } from "./transform-options.js";
3
2
  /**
4
3
  * Runs the upgrade cycle:
5
4
  * - Runs each codemod in the bundle.
6
5
  * - Displays progress using cli-progress.
7
- * - After codemods run, checks if any file now imports from the new packages and prompts for install.
6
+ * - Outside dry mode, checks for new package imports and prompts for install.
8
7
  */
9
8
  export declare function upgrade(options: TransformOptions): Promise<void>;
10
- //#endregion
11
9
  //# sourceMappingURL=upgrade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","names":[],"sources":["../../src/lib/upgrade.ts"],"mappings":";;;;;;;;wBA0BsB,QAAQ,SAAS,mBAAgB"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/lib/upgrade.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,+BAA4B;AAiB5D;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,gBAAgB,iBA+DtD"}
@@ -14,12 +14,11 @@ const bundle = [
14
14
  "v0-15/aui-accessor-calls-to-properties"
15
15
  ];
16
16
  const log = debug("codemod:upgrade");
17
- const error = debug("codemod:upgrade:error");
18
17
  /**
19
18
  * Runs the upgrade cycle:
20
19
  * - Runs each codemod in the bundle.
21
20
  * - Displays progress using cli-progress.
22
- * - After codemods run, checks if any file now imports from the new packages and prompts for install.
21
+ * - Outside dry mode, checks for new package imports and prompts for install.
23
22
  */
24
23
  async function upgrade(options) {
25
24
  const cwd = process.cwd();
@@ -36,11 +35,10 @@ async function upgrade(options) {
36
35
  gracefulExit: true
37
36
  }, Presets.shades_classic);
38
37
  bar.start(totalWork, 0, { status: "Starting..." });
39
- const allErrors = [];
40
38
  try {
41
39
  for (const codemod of bundle) {
42
40
  bar.update(completedWork, { status: `Running ${codemod}...` });
43
- const errors = await transform(codemod, cwd, options, {
41
+ await transform(codemod, cwd, options, {
44
42
  logStatus: false,
45
43
  onProgress: (processedFiles) => {
46
44
  completedWork = bundle.indexOf(codemod) * fileCount + processedFiles;
@@ -48,19 +46,16 @@ async function upgrade(options) {
48
46
  },
49
47
  relevantFiles
50
48
  });
51
- allErrors.push(...errors);
52
49
  completedWork = (bundle.indexOf(codemod) + 1) * fileCount;
53
50
  bar.update(completedWork, { status: `Completed ${codemod}` });
54
51
  }
55
- bar.update(totalWork, { status: "Checking dependencies..." });
52
+ bar.update(totalWork, { status: options.dry ? "Preview complete" : "Checking dependencies..." });
56
53
  } finally {
57
54
  bar.stop();
58
55
  }
59
- if (allErrors.length > 0) {
60
- log("Some codemods did not apply successfully to all files. Details:");
61
- allErrors.forEach(({ transform, filename, summary }) => {
62
- error(`codemod=${transform}, path=${filename}, summary=${summary}`);
63
- });
56
+ if (options.dry) {
57
+ logger.success("Dry run complete. No files were changed.");
58
+ return;
64
59
  }
65
60
  logger.info("Checking for package dependencies...");
66
61
  await installEdgeLib();
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","names":[],"sources":["../../src/lib/upgrade.ts"],"sourcesContent":["import debug from \"debug\";\nimport { transform, type TransformErrors, getRelevantFiles } from \"./transform\";\nimport type { TransformOptions } from \"./transform-options\";\nimport { SingleBar, Presets } from \"cli-progress\";\nimport installEdgeLib from \"./install-edge-lib\";\nimport installAiSdkLib from \"./install-ai-sdk-lib\";\nimport { logger } from \"./utils/logger\";\n\nconst bundle = [\n \"v0-9/edge-package-split\",\n \"v0-11/content-part-to-message-part\",\n \"v0-12/assistant-api-to-aui\",\n \"v0-12/event-names-to-camelcase\",\n \"v0-12/primitive-if-to-aui-if\",\n \"v0-15/aui-accessor-calls-to-properties\",\n];\n\nconst log = debug(\"codemod:upgrade\");\nconst error = debug(\"codemod:upgrade:error\");\n\n/**\n * Runs the upgrade cycle:\n * - Runs each codemod in the bundle.\n * - Displays progress using cli-progress.\n * - After codemods run, checks if any file now imports from the new packages and prompts for install.\n */\nexport async function upgrade(options: TransformOptions) {\n const cwd = process.cwd();\n log(\"Starting upgrade...\");\n\n // Find relevant files once to avoid duplicate work\n logger.info(\"Analyzing codebase...\");\n const relevantFiles = getRelevantFiles(cwd);\n const fileCount = relevantFiles.length;\n logger.info(`Found ${fileCount} files to process.`);\n\n // Calculate total work units (files × codemods)\n const totalWork = fileCount * bundle.length;\n let completedWork = 0;\n\n const bar = new SingleBar(\n {\n format: \"Progress |{bar}| {percentage}% | ETA: {eta}s || {status}\",\n hideCursor: true,\n gracefulExit: true,\n },\n Presets.shades_classic,\n );\n\n bar.start(totalWork, 0, { status: \"Starting...\" });\n const allErrors: TransformErrors = [];\n\n try {\n for (const codemod of bundle) {\n bar.update(completedWork, { status: `Running ${codemod}...` });\n\n // Use a custom progress callback to update the progress bar\n const errors = await transform(codemod, cwd, options, {\n logStatus: false,\n onProgress: (processedFiles: number) => {\n completedWork = bundle.indexOf(codemod) * fileCount + processedFiles;\n bar.update(Math.min(completedWork, totalWork), {\n status: `Running ${codemod} (${processedFiles}/${fileCount} files)`,\n });\n },\n relevantFiles, // Pass the pre-computed relevant files\n });\n\n allErrors.push(...errors);\n completedWork = (bundle.indexOf(codemod) + 1) * fileCount;\n bar.update(completedWork, { status: `Completed ${codemod}` });\n }\n\n bar.update(totalWork, { status: \"Checking dependencies...\" });\n } finally {\n bar.stop();\n }\n\n if (allErrors.length > 0) {\n log(\"Some codemods did not apply successfully to all files. Details:\");\n allErrors.forEach(({ transform, filename, summary }) => {\n error(`codemod=${transform}, path=${filename}, summary=${summary}`);\n });\n }\n\n // After codemods run, check if files import from the new packages and prompt for install.\n logger.info(\"Checking for package dependencies...\");\n await installEdgeLib();\n await installAiSdkLib();\n\n log(\"Upgrade complete.\");\n logger.success(\"Upgrade complete!\");\n}\n"],"mappings":";;;;;;;AAQA,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,MAAM,MAAM,iBAAiB;AACnC,MAAM,QAAQ,MAAM,uBAAuB;;;;;;;AAQ3C,eAAsB,QAAQ,SAA2B;CACvD,MAAM,MAAM,QAAQ,IAAI;CACxB,IAAI,qBAAqB;CAGzB,OAAO,KAAK,uBAAuB;CACnC,MAAM,gBAAgB,iBAAiB,GAAG;CAC1C,MAAM,YAAY,cAAc;CAChC,OAAO,KAAK,SAAS,UAAU,mBAAmB;CAGlD,MAAM,YAAY,YAAY,OAAO;CACrC,IAAI,gBAAgB;CAEpB,MAAM,MAAM,IAAI,UACd;EACE,QAAQ;EACR,YAAY;EACZ,cAAc;CAChB,GACA,QAAQ,cACV;CAEA,IAAI,MAAM,WAAW,GAAG,EAAE,QAAQ,cAAc,CAAC;CACjD,MAAM,YAA6B,CAAC;CAEpC,IAAI;EACF,KAAK,MAAM,WAAW,QAAQ;GAC5B,IAAI,OAAO,eAAe,EAAE,QAAQ,WAAW,QAAQ,KAAK,CAAC;GAG7D,MAAM,SAAS,MAAM,UAAU,SAAS,KAAK,SAAS;IACpD,WAAW;IACX,aAAa,mBAA2B;KACtC,gBAAgB,OAAO,QAAQ,OAAO,IAAI,YAAY;KACtD,IAAI,OAAO,KAAK,IAAI,eAAe,SAAS,GAAG,EAC7C,QAAQ,WAAW,QAAQ,IAAI,eAAe,GAAG,UAAU,SAC7D,CAAC;IACH;IACA;GACF,CAAC;GAED,UAAU,KAAK,GAAG,MAAM;GACxB,iBAAiB,OAAO,QAAQ,OAAO,IAAI,KAAK;GAChD,IAAI,OAAO,eAAe,EAAE,QAAQ,aAAa,UAAU,CAAC;EAC9D;EAEA,IAAI,OAAO,WAAW,EAAE,QAAQ,2BAA2B,CAAC;CAC9D,UAAU;EACR,IAAI,KAAK;CACX;CAEA,IAAI,UAAU,SAAS,GAAG;EACxB,IAAI,iEAAiE;EACrE,UAAU,SAAS,EAAE,WAAW,UAAU,cAAc;GACtD,MAAM,WAAW,UAAU,SAAS,SAAS,YAAY,SAAS;EACpE,CAAC;CACH;CAGA,OAAO,KAAK,sCAAsC;CAClD,MAAM,eAAe;CACrB,MAAM,gBAAgB;CAEtB,IAAI,mBAAmB;CACvB,OAAO,QAAQ,mBAAmB;AACpC"}
1
+ {"version":3,"file":"upgrade.js","names":[],"sources":["../../src/lib/upgrade.ts"],"sourcesContent":["import debug from \"debug\";\nimport { transform, getRelevantFiles } from \"./transform\";\nimport type { TransformOptions } from \"./transform-options\";\nimport { SingleBar, Presets } from \"cli-progress\";\nimport installEdgeLib from \"./install-edge-lib\";\nimport installAiSdkLib from \"./install-ai-sdk-lib\";\nimport { logger } from \"./utils/logger\";\n\nconst bundle = [\n \"v0-9/edge-package-split\",\n \"v0-11/content-part-to-message-part\",\n \"v0-12/assistant-api-to-aui\",\n \"v0-12/event-names-to-camelcase\",\n \"v0-12/primitive-if-to-aui-if\",\n \"v0-15/aui-accessor-calls-to-properties\",\n];\n\nconst log = debug(\"codemod:upgrade\");\n\n/**\n * Runs the upgrade cycle:\n * - Runs each codemod in the bundle.\n * - Displays progress using cli-progress.\n * - Outside dry mode, checks for new package imports and prompts for install.\n */\nexport async function upgrade(options: TransformOptions) {\n const cwd = process.cwd();\n log(\"Starting upgrade...\");\n\n // Find relevant files once to avoid duplicate work\n logger.info(\"Analyzing codebase...\");\n const relevantFiles = getRelevantFiles(cwd);\n const fileCount = relevantFiles.length;\n logger.info(`Found ${fileCount} files to process.`);\n\n // Calculate total work units (files × codemods)\n const totalWork = fileCount * bundle.length;\n let completedWork = 0;\n\n const bar = new SingleBar(\n {\n format: \"Progress |{bar}| {percentage}% | ETA: {eta}s || {status}\",\n hideCursor: true,\n gracefulExit: true,\n },\n Presets.shades_classic,\n );\n\n bar.start(totalWork, 0, { status: \"Starting...\" });\n\n try {\n for (const codemod of bundle) {\n bar.update(completedWork, { status: `Running ${codemod}...` });\n\n // Use a custom progress callback to update the progress bar\n await transform(codemod, cwd, options, {\n logStatus: false,\n onProgress: (processedFiles: number) => {\n completedWork = bundle.indexOf(codemod) * fileCount + processedFiles;\n bar.update(Math.min(completedWork, totalWork), {\n status: `Running ${codemod} (${processedFiles}/${fileCount} files)`,\n });\n },\n relevantFiles, // Pass the pre-computed relevant files\n });\n\n completedWork = (bundle.indexOf(codemod) + 1) * fileCount;\n bar.update(completedWork, { status: `Completed ${codemod}` });\n }\n\n bar.update(totalWork, {\n status: options.dry ? \"Preview complete\" : \"Checking dependencies...\",\n });\n } finally {\n bar.stop();\n }\n\n if (options.dry) {\n logger.success(\"Dry run complete. No files were changed.\");\n return;\n }\n\n logger.info(\"Checking for package dependencies...\");\n await installEdgeLib();\n await installAiSdkLib();\n\n log(\"Upgrade complete.\");\n logger.success(\"Upgrade complete!\");\n}\n"],"mappings":";;;;;;;AAQA,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,MAAM,MAAM,iBAAiB;;;;;;;AAQnC,eAAsB,QAAQ,SAA2B;CACvD,MAAM,MAAM,QAAQ,IAAI;CACxB,IAAI,qBAAqB;CAGzB,OAAO,KAAK,uBAAuB;CACnC,MAAM,gBAAgB,iBAAiB,GAAG;CAC1C,MAAM,YAAY,cAAc;CAChC,OAAO,KAAK,SAAS,UAAU,mBAAmB;CAGlD,MAAM,YAAY,YAAY,OAAO;CACrC,IAAI,gBAAgB;CAEpB,MAAM,MAAM,IAAI,UACd;EACE,QAAQ;EACR,YAAY;EACZ,cAAc;CAChB,GACA,QAAQ,cACV;CAEA,IAAI,MAAM,WAAW,GAAG,EAAE,QAAQ,cAAc,CAAC;CAEjD,IAAI;EACF,KAAK,MAAM,WAAW,QAAQ;GAC5B,IAAI,OAAO,eAAe,EAAE,QAAQ,WAAW,QAAQ,KAAK,CAAC;GAG7D,MAAM,UAAU,SAAS,KAAK,SAAS;IACrC,WAAW;IACX,aAAa,mBAA2B;KACtC,gBAAgB,OAAO,QAAQ,OAAO,IAAI,YAAY;KACtD,IAAI,OAAO,KAAK,IAAI,eAAe,SAAS,GAAG,EAC7C,QAAQ,WAAW,QAAQ,IAAI,eAAe,GAAG,UAAU,SAC7D,CAAC;IACH;IACA;GACF,CAAC;GAED,iBAAiB,OAAO,QAAQ,OAAO,IAAI,KAAK;GAChD,IAAI,OAAO,eAAe,EAAE,QAAQ,aAAa,UAAU,CAAC;EAC9D;EAEA,IAAI,OAAO,WAAW,EACpB,QAAQ,QAAQ,MAAM,qBAAqB,2BAC7C,CAAC;CACH,UAAU;EACR,IAAI,KAAK;CACX;CAEA,IAAI,QAAQ,KAAK;EACf,OAAO,QAAQ,0CAA0C;EACzD;CACF;CAEA,OAAO,KAAK,sCAAsC;CAClD,MAAM,eAAe;CACrB,MAAM,gBAAgB;CAEtB,IAAI,mBAAmB;CACvB,OAAO,QAAQ,mBAAmB;AACpC"}
@@ -1,22 +1,20 @@
1
- //#region src/lib/utils/config.d.ts
2
1
  export interface AssistantUIConfig {
3
- $schema?: string;
4
- style?: string;
5
- tailwind?: {
6
- config?: string;
7
- css?: string;
8
- baseColor?: string;
9
- cssVariables?: boolean;
10
- };
11
- aliases?: {
12
- components?: string;
13
- utils?: string;
14
- ui?: string;
15
- lib?: string;
16
- };
2
+ $schema?: string;
3
+ style?: string;
4
+ tailwind?: {
5
+ config?: string;
6
+ css?: string;
7
+ baseColor?: string;
8
+ cssVariables?: boolean;
9
+ };
10
+ aliases?: {
11
+ components?: string;
12
+ utils?: string;
13
+ ui?: string;
14
+ lib?: string;
15
+ };
17
16
  }
18
17
  export declare function getConfig(cwd?: string): AssistantUIConfig | null;
19
18
  export declare function saveConfig(config: AssistantUIConfig, cwd?: string): void;
20
19
  export declare function hasConfig(cwd?: string): boolean;
21
- //#endregion
22
20
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","names":[],"sources":["../../../src/lib/utils/config.ts"],"mappings":";iBAIiB;EACf;EACA;EACA;IACE;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;;;wBASY,UACd,eACC;wBAmBa,WACd,QAAQ,mBACR;wBAMc,UAAU"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAOD,wBAAgB,SAAS,CACvB,GAAG,GAAE,MAAsB,GAC1B,iBAAiB,GAAG,IAAI,CAiB1B;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,iBAAiB,EACzB,GAAG,GAAE,MAAsB,GAC1B,IAAI,CAGN;AAED,wBAAgB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAI9D"}
@@ -1,18 +1,16 @@
1
- //#region src/lib/utils/file-scanner.d.ts
2
1
  export interface ScanOptions {
3
- cwd?: string;
4
- pattern?: string;
5
- ignore?: string[];
2
+ cwd?: string;
3
+ pattern?: string;
4
+ ignore?: string[];
6
5
  }
7
6
  export declare function readProjectFiles(pattern: string, options: {
8
- cwd: string;
9
- ignore?: string[];
7
+ cwd: string;
8
+ ignore?: string[];
10
9
  }): Generator<{
11
- file: string;
12
- fullPath: string;
13
- content: string;
10
+ file: string;
11
+ fullPath: string;
12
+ content: string;
14
13
  }>;
15
14
  export declare function scanForImport(importPattern: string | string[], options?: ScanOptions): boolean;
16
15
  export declare function getFilesContaining(searchString: string, options?: ScanOptions): string[];
17
- //#endregion
18
16
  //# sourceMappingURL=file-scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-scanner.d.ts","names":[],"sources":["../../../src/lib/utils/file-scanner.ts"],"mappings":";iBAIiB;EACf;EACA;EACA;;wBAGe,iBACf,iBACA;EAAW;EAAa;IACvB;EAAY;EAAc;EAAkB;;wBAc/B,cACd,kCACA,UAAS;wBAuBK,mBACd,sBACA,UAAS"}
1
+ {"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/file-scanner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAiB,gBAAgB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1C,SAAS,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAYhE;AAED,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,EAChC,OAAO,GAAE,WAAgB,GACxB,OAAO,CAoBT;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,WAAgB,GACxB,MAAM,EAAE,CAqBV"}
@@ -1,11 +1,9 @@
1
- //#region src/lib/utils/logger.d.ts
2
1
  export declare const logger: {
3
- info: (message: string) => void;
4
- success: (message: string) => void;
5
- error: (message: string) => void;
6
- warn: (message: string) => void;
7
- step: (message: string) => void;
8
- break: () => void;
2
+ info: (message: string) => void;
3
+ success: (message: string) => void;
4
+ error: (message: string) => void;
5
+ warn: (message: string) => void;
6
+ step: (message: string) => void;
7
+ break: () => void;
9
8
  };
10
- //#endregion
11
9
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","names":[],"sources":["../../../src/lib/utils/logger.ts"],"mappings":";qBAEa;EACK,OAAA;EAGG,UAAA;EAGF,QAAA;EAGD,OAAA;EAGA,OAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,MAAM;uBAGH,MAAM;qBAGR,MAAM;oBAGP,MAAM;oBAGN,MAAM;;CAMvB,CAAC"}
@@ -1,11 +1,9 @@
1
- //#region src/lib/utils/package-installer.d.ts
2
1
  export interface PackageInstallConfig {
3
- packageName: string;
4
- importPatterns: string[];
5
- promptMessage: string;
6
- skipMessage: string;
7
- notFoundMessage: string;
2
+ packageName: string;
3
+ importPatterns: string[];
4
+ promptMessage: string;
5
+ skipMessage: string;
6
+ notFoundMessage: string;
8
7
  }
9
8
  export declare function installPackageIfNeeded(config: PackageInstallConfig): Promise<void>;
10
- //#endregion
11
9
  //# sourceMappingURL=package-installer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-installer.d.ts","names":[],"sources":["../../../src/lib/utils/package-installer.ts"],"mappings":";iBAQiB;EACf;EACA;EACA;EACA;EACA;;wBAGoB,uBACpB,QAAQ,uBACP"}
1
+ {"version":3,"file":"package-installer.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/package-installer.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -1,4 +1,2 @@
1
- //#region src/lib/utils/package-json.d.ts
2
1
  export declare function logPackageJsonParseError(packageJsonPath: string, commandName: string): void;
3
- //#endregion
4
2
  //# sourceMappingURL=package-json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.d.ts","names":[],"sources":["../../../src/lib/utils/package-json.ts"],"mappings":";wBAEgB,yBACd,yBACA"}
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/package-json.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,QAOpB"}
@@ -1,13 +1,11 @@
1
- //#region src/lib/utils/package-manager.d.ts
2
1
  export type PackageManagerName = "npm" | "pnpm" | "yarn" | "bun";
3
2
  export declare function askQuestion(query: string): Promise<string>;
4
3
  export declare function isPackageInstalled(pkg: string, cwd?: string): boolean;
5
4
  export interface InstallCommand {
6
- command: string;
7
- args: string[];
5
+ command: string;
6
+ args: string[];
8
7
  }
9
8
  export declare function getInstallCommand(packageName: string | string[], cwd?: string): Promise<InstallCommand>;
10
9
  export declare function resolvePackageManagerForCwd(cwd: string, packageManager?: PackageManagerName): Promise<PackageManagerName>;
11
10
  export declare function installPackage(packageName: string, cwd?: string): Promise<boolean>;
12
- //#endregion
13
11
  //# sourceMappingURL=package-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.d.ts","names":[],"sources":["../../../src/lib/utils/package-manager.ts"],"mappings":";YAOY;wBAEI,YAAY,gBAAgB;wBAa5B,mBACd,aACA;iBAmBe;EACf;EACA;;wBAGoB,kBACpB,gCACA,eACC,QAAQ;wBAyBW,4BACpB,aACA,iBAAiB,qBAChB,QAAQ;wBAWW,eACpB,qBACA,eACC"}
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/package-manager.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC1D;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAgBT;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAazB;AAYD,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,kBAAkB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAS7B;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAUlB"}