@percher/core 0.4.10 → 0.4.12

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 (155) hide show
  1. package/dist/ai-files-manifest.d.ts +1 -1
  2. package/dist/appstore-artifacts.d.ts +44 -0
  3. package/dist/appstore-artifacts.d.ts.map +1 -0
  4. package/dist/appstore-artifacts.js +142 -0
  5. package/dist/appstore-artifacts.js.map +1 -0
  6. package/dist/commands/account.d.ts +1 -1
  7. package/dist/commands/account.js +2 -2
  8. package/dist/commands/admin-reconcile-routes.d.ts +1 -1
  9. package/dist/commands/ai-files.d.ts +2 -2
  10. package/dist/commands/ai-files.js +2 -2
  11. package/dist/commands/alerts.d.ts +1 -1
  12. package/dist/commands/app-resources.d.ts +1 -1
  13. package/dist/commands/app-resources.js +2 -2
  14. package/dist/commands/app-topology.d.ts +1 -1
  15. package/dist/commands/app-topology.js +2 -2
  16. package/dist/commands/appstore-kit.d.ts +36 -0
  17. package/dist/commands/appstore-kit.d.ts.map +1 -0
  18. package/dist/commands/appstore-kit.js +93 -0
  19. package/dist/commands/appstore-kit.js.map +1 -0
  20. package/dist/commands/billing.d.ts +1 -1
  21. package/dist/commands/billing.js +1 -1
  22. package/dist/commands/cache.d.ts +1 -1
  23. package/dist/commands/cache.js +2 -2
  24. package/dist/commands/capabilities.d.ts +1 -1
  25. package/dist/commands/claim.d.ts +1 -1
  26. package/dist/commands/claim.js +1 -1
  27. package/dist/commands/create.d.ts +2 -2
  28. package/dist/commands/create.js +2 -2
  29. package/dist/commands/dashboard.d.ts +1 -1
  30. package/dist/commands/dashboard.js +2 -2
  31. package/dist/commands/data-export.d.ts +1 -1
  32. package/dist/commands/data-export.js +3 -3
  33. package/dist/commands/data.d.ts +1 -1
  34. package/dist/commands/data.js +2 -2
  35. package/dist/commands/delete.d.ts +1 -1
  36. package/dist/commands/delete.js +2 -2
  37. package/dist/commands/deploys.d.ts +1 -1
  38. package/dist/commands/deploys.js +2 -2
  39. package/dist/commands/dev.d.ts +1 -1
  40. package/dist/commands/dev.js +3 -3
  41. package/dist/commands/diagnose.d.ts +1 -1
  42. package/dist/commands/diagnose.js +2 -2
  43. package/dist/commands/diff.d.ts +1 -1
  44. package/dist/commands/diff.js +2 -2
  45. package/dist/commands/doctor.d.ts +3 -3
  46. package/dist/commands/doctor.js +4 -4
  47. package/dist/commands/domains.d.ts +1 -1
  48. package/dist/commands/domains.js +2 -2
  49. package/dist/commands/env.d.ts +1 -1
  50. package/dist/commands/env.js +2 -2
  51. package/dist/commands/export.d.ts +1 -1
  52. package/dist/commands/export.js +2 -2
  53. package/dist/commands/forgejo.d.ts +1 -1
  54. package/dist/commands/forgejo.js +2 -2
  55. package/dist/commands/generate.d.ts +1 -1
  56. package/dist/commands/generate.js +1 -1
  57. package/dist/commands/github.d.ts +1 -1
  58. package/dist/commands/github.js +2 -2
  59. package/dist/commands/import-project.d.ts +1 -1
  60. package/dist/commands/import-project.js +2 -2
  61. package/dist/commands/init.d.ts +2 -2
  62. package/dist/commands/init.js +3 -3
  63. package/dist/commands/insights.d.ts +1 -1
  64. package/dist/commands/insights.js +2 -2
  65. package/dist/commands/inspect-link.d.ts +1 -1
  66. package/dist/commands/inspect-link.js +2 -2
  67. package/dist/commands/login.d.ts +1 -1
  68. package/dist/commands/login.js +1 -1
  69. package/dist/commands/logs.d.ts +1 -1
  70. package/dist/commands/logs.js +2 -2
  71. package/dist/commands/mcp.d.ts +1 -1
  72. package/dist/commands/migrate-supabase-map.d.ts +1 -1
  73. package/dist/commands/migrate-supabase-recipes.d.ts +28 -0
  74. package/dist/commands/migrate-supabase-recipes.d.ts.map +1 -0
  75. package/dist/commands/migrate-supabase-recipes.js +92 -0
  76. package/dist/commands/migrate-supabase-recipes.js.map +1 -0
  77. package/dist/commands/migrate-supabase-rewrite.d.ts +8 -3
  78. package/dist/commands/migrate-supabase-rewrite.d.ts.map +1 -1
  79. package/dist/commands/migrate-supabase-rewrite.js +155 -11
  80. package/dist/commands/migrate-supabase-rewrite.js.map +1 -1
  81. package/dist/commands/migrate-supabase-scaffold.d.ts +25 -0
  82. package/dist/commands/migrate-supabase-scaffold.d.ts.map +1 -0
  83. package/dist/commands/migrate-supabase-scaffold.js +234 -0
  84. package/dist/commands/migrate-supabase-scaffold.js.map +1 -0
  85. package/dist/commands/migrate-supabase-schema.d.ts +4 -4
  86. package/dist/commands/migrate-supabase-schema.js +4 -4
  87. package/dist/commands/migrate-supabase-scripts.d.ts +1 -1
  88. package/dist/commands/migrate-supabase-sdk.d.ts +34 -0
  89. package/dist/commands/migrate-supabase-sdk.d.ts.map +1 -1
  90. package/dist/commands/migrate-supabase-sdk.js +169 -0
  91. package/dist/commands/migrate-supabase-sdk.js.map +1 -1
  92. package/dist/commands/migrate-supabase-status.d.ts +92 -0
  93. package/dist/commands/migrate-supabase-status.d.ts.map +1 -0
  94. package/dist/commands/migrate-supabase-status.js +470 -0
  95. package/dist/commands/migrate-supabase-status.js.map +1 -0
  96. package/dist/commands/migrate-supabase-walker.d.ts +15 -1
  97. package/dist/commands/migrate-supabase-walker.d.ts.map +1 -1
  98. package/dist/commands/migrate-supabase-walker.js +49 -5
  99. package/dist/commands/migrate-supabase-walker.js.map +1 -1
  100. package/dist/commands/migrate-supabase.d.ts +2 -2
  101. package/dist/commands/migrate-supabase.js +1 -1
  102. package/dist/commands/open.d.ts +1 -1
  103. package/dist/commands/open.js +2 -2
  104. package/dist/commands/preview-branch.d.ts +1 -1
  105. package/dist/commands/preview-branch.js +2 -2
  106. package/dist/commands/publish-api-error.d.ts +1 -1
  107. package/dist/commands/publish-api-error.js +1 -1
  108. package/dist/commands/publish-failure.d.ts +3 -3
  109. package/dist/commands/publish-failure.js +3 -3
  110. package/dist/commands/publish.d.ts +3 -3
  111. package/dist/commands/publish.js +13 -13
  112. package/dist/commands/push.d.ts +2 -2
  113. package/dist/commands/push.js +8 -8
  114. package/dist/commands/redeploy.d.ts +2 -2
  115. package/dist/commands/redeploy.js +4 -4
  116. package/dist/commands/rename.d.ts +1 -1
  117. package/dist/commands/rename.js +2 -2
  118. package/dist/commands/reproduce.d.ts +1 -1
  119. package/dist/commands/reproduce.js +1 -1
  120. package/dist/commands/reset-superuser.d.ts +1 -1
  121. package/dist/commands/reset-superuser.js +2 -2
  122. package/dist/commands/restore.d.ts +1 -1
  123. package/dist/commands/restore.js +2 -2
  124. package/dist/commands/resume.d.ts +1 -1
  125. package/dist/commands/resume.js +2 -2
  126. package/dist/commands/rollback.d.ts +1 -1
  127. package/dist/commands/rollback.js +2 -2
  128. package/dist/commands/sharing.d.ts +1 -1
  129. package/dist/commands/sharing.js +2 -2
  130. package/dist/commands/status.d.ts +1 -1
  131. package/dist/commands/transfers.d.ts +1 -1
  132. package/dist/commands/transfers.js +2 -2
  133. package/dist/commands/unsuspend.d.ts +1 -1
  134. package/dist/commands/versions.d.ts +1 -1
  135. package/dist/commands/versions.js +2 -2
  136. package/dist/commands/wait-deploy.d.ts +3 -3
  137. package/dist/commands/wait-deploy.js +3 -3
  138. package/dist/commands/whoami.d.ts +1 -1
  139. package/dist/detect.js +1 -1
  140. package/dist/errors.d.ts +1 -1
  141. package/dist/errors.d.ts.map +1 -1
  142. package/dist/errors.js.map +1 -1
  143. package/dist/index.d.ts +78 -75
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +77 -74
  146. package/dist/index.js.map +1 -1
  147. package/dist/plans.d.ts +0 -1
  148. package/dist/plans.d.ts.map +1 -1
  149. package/dist/plans.js +0 -6
  150. package/dist/plans.js.map +1 -1
  151. package/dist/poll-deployment.d.ts +1 -1
  152. package/dist/recovery.d.ts +1 -1
  153. package/dist/structured-error-codes.d.ts +1 -1
  154. package/dist/templates/ai-files/index.js +2 -2
  155. package/package.json +11 -3
@@ -1,8 +1,11 @@
1
1
  import { mkdir, writeFile } from "node:fs/promises";
2
- import { dirname, join, relative, resolve } from "node:path";
2
+ import { dirname, join, relative, resolve, sep } from "node:path";
3
3
  import { z } from "zod";
4
- import { recoveryAsk, recoveryNone } from "../recovery";
5
- import { walkSupabaseProject, writeWalkResult, } from "./migrate-supabase-walker";
4
+ import { recoveryAsk, recoveryNone } from "../recovery.js";
5
+ import { renderRecipesSection } from "./migrate-supabase-recipes.js";
6
+ import { scaffoldPocketBaseClient } from "./migrate-supabase-scaffold.js";
7
+ import { analyzeMigration, renderMigrationChecklist } from "./migrate-supabase-status.js";
8
+ import { walkSupabaseProject, writeWalkResult, } from "./migrate-supabase-walker.js";
6
9
  /**
7
10
  * FUTURE9 Phase D chunk 3.3 — user-facing client-rewrite wiring.
8
11
  *
@@ -54,6 +57,10 @@ export const rewriteSupabaseClientInputSchema = z.object({
54
57
  .array(z.string())
55
58
  .optional()
56
59
  .describe("Extra Supabase client variable names to recognise (beyond `supabase`)."),
60
+ scaffoldClient: z
61
+ .boolean()
62
+ .optional()
63
+ .describe("Generate a PocketBase client module (src/lib/pocketbase.<ext>) and insert `import { pb }` into rewritten files. Default true when there are rewrites; pass false to opt out. Skips silently if a pb client already exists."),
57
64
  });
58
65
  export async function rewriteSupabaseClient(ctx, input) {
59
66
  const rootAbs = input.rootDir ? resolve(ctx.cwd, input.rootDir) : resolve(ctx.cwd);
@@ -90,13 +97,40 @@ export async function rewriteSupabaseClient(ctx, input) {
90
97
  flagsByPattern: {},
91
98
  packageJsonChanged: false,
92
99
  envFilesChanged: 0,
100
+ clientModule: null,
93
101
  skipped: [],
94
102
  recovery: recoveryNone(),
95
103
  summary: "No Supabase SDK calls found to rewrite. If you intend to keep Supabase as your backend, " +
96
104
  'set `[data] mode = "supabase"` in percher.toml instead.',
97
105
  };
98
106
  }
99
- const reportNeeded = flags.length > 0 || walk.skipped.length > 0;
107
+ // Any rewrite means the call sites now reference a `pb` client this
108
+ // tool does NOT create — so a report is always due when we rewrote
109
+ // something, to carry the "wire your PocketBase client" step, even
110
+ // with zero manual-review flags.
111
+ const hadRewrites = changed.length > 0;
112
+ // Phase C — scaffold a PocketBase client + insert imports so the rewritten
113
+ // files don't reference an undefined `pb`. Default on; skip when there were
114
+ // no rewrites (nothing references pb) or `scaffoldClient: false`. Insertions
115
+ // mutate walk.files in place BEFORE the report embed, so the embedded
116
+ // checklist reflects pb-now-wired. Backup still uses `source` (untouched).
117
+ const scaffoldEnabled = input.scaffoldClient !== false && hadRewrites;
118
+ const scaffold = scaffoldEnabled
119
+ ? scaffoldPocketBaseClient({
120
+ files: walk.files,
121
+ changedRelPaths: changed.map((f) => f.relativePath),
122
+ pbIdentifier: input.pbIdentifier,
123
+ })
124
+ : null;
125
+ if (scaffold) {
126
+ for (const [rel, content] of scaffold.importInsertions) {
127
+ const file = walk.files.find((f) => f.relativePath === rel);
128
+ if (file)
129
+ file.rewritten = content;
130
+ }
131
+ flags.push(...scaffold.flags);
132
+ }
133
+ const reportNeeded = hadRewrites || flags.length > 0 || walk.skipped.length > 0;
100
134
  const backupDir = apply && changed.length > 0 ? join(rootAbs, "migration-preview", "backup") : null;
101
135
  const rewriteTarget = apply
102
136
  ? rootAbs
@@ -104,6 +138,7 @@ export async function rewriteSupabaseClient(ctx, input) {
104
138
  ? resolve(ctx.cwd, input.outputDir)
105
139
  : join(rootAbs, "migration-preview", "rewritten");
106
140
  const filesWritten = [];
141
+ let clientModuleWritten = null;
107
142
  try {
108
143
  if (changed.length > 0) {
109
144
  // Apply mode: copy originals to the backup tree BEFORE overwriting,
@@ -129,6 +164,15 @@ export async function rewriteSupabaseClient(ctx, input) {
129
164
  for (const rel of out.written) {
130
165
  filesWritten.push(relative(ctx.cwd, join(rewriteTarget, rel)));
131
166
  }
167
+ // Write the scaffolded client module (a NEW file — not backed up).
168
+ if (scaffold?.clientModule) {
169
+ const moduleAbs = join(rewriteTarget, scaffold.clientModule.relativePath);
170
+ await mkdir(dirname(moduleAbs), { recursive: true });
171
+ await writeFile(moduleAbs, scaffold.clientModule.content, "utf8");
172
+ // Forward-slash-normalised — a stable cross-platform value for callers.
173
+ clientModuleWritten = relative(ctx.cwd, moduleAbs).split(sep).join("/");
174
+ filesWritten.push(clientModuleWritten);
175
+ }
132
176
  }
133
177
  // Durable report for everything the rewriter wouldn't touch. This
134
178
  // is the artifact a flag-only project gets instead of rewritten
@@ -136,7 +180,23 @@ export async function rewriteSupabaseClient(ctx, input) {
136
180
  if (reportNeeded) {
137
181
  const reportAbs = join(rootAbs, "migration-preview", "REWRITE_NOTES.md");
138
182
  await mkdir(dirname(reportAbs), { recursive: true });
139
- await writeFile(reportAbs, renderReport({ flags, skipped: walk.skipped }), "utf8");
183
+ // Embed the same checklist the status doctor renders, computed from
184
+ // the POST-rewrite files, so the artifact and `--status` agree.
185
+ const analysis = analyzeMigration(walk.files.map((f) => ({
186
+ relativePath: f.relativePath,
187
+ kind: f.kind,
188
+ source: f.rewritten,
189
+ })), { supabaseIdentifiers: input.supabaseIdentifiers, pbIdentifier: input.pbIdentifier });
190
+ await writeFile(reportAbs, renderReport({
191
+ flags,
192
+ skipped: walk.skipped,
193
+ hadRewrites,
194
+ migrationComplete: walk.summary.migrationComplete,
195
+ supabaseUsageRemaining: walk.summary.supabaseUsageRemaining,
196
+ checklist: renderMigrationChecklist(analysis.checks),
197
+ scaffoldedClient: scaffold?.clientModule?.relativePath ?? null,
198
+ scaffoldSkippedExisting: scaffold?.skippedReason === "pb_client_exists",
199
+ }), "utf8");
140
200
  filesWritten.push(relative(ctx.cwd, reportAbs));
141
201
  }
142
202
  }
@@ -150,7 +210,10 @@ export async function rewriteSupabaseClient(ctx, input) {
150
210
  flagsByPattern[flag.pattern] = (flagsByPattern[flag.pattern] ?? 0) + 1;
151
211
  }
152
212
  const recovery = reportNeeded
153
- ? recoveryAsk({ prompt: buildPrompt(flags, walk.skipped.length), reasonCode: "unknown" })
213
+ ? recoveryAsk({
214
+ prompt: buildPrompt(flags, walk.skipped.length, hadRewrites, clientModuleWritten),
215
+ reasonCode: "unknown",
216
+ })
154
217
  : recoveryNone();
155
218
  return {
156
219
  status: "ok",
@@ -164,11 +227,26 @@ export async function rewriteSupabaseClient(ctx, input) {
164
227
  flagsByPattern,
165
228
  packageJsonChanged: walk.summary.packageJsonChanged,
166
229
  envFilesChanged: walk.summary.envFilesChanged,
230
+ clientModule: clientModuleWritten,
167
231
  skipped: walk.skipped,
168
232
  recovery,
169
- summary: renderSummary({ mode, changed: changed.length, walk, flagCount: flags.length }),
233
+ summary: renderSummary({
234
+ mode,
235
+ changed: changed.length,
236
+ walk,
237
+ flagCount: flags.length,
238
+ clientModule: clientModuleWritten,
239
+ }),
170
240
  };
171
241
  }
242
+ /**
243
+ * Whether the project is fully migrated (dep/env safe to drop) or still
244
+ * hybrid. Mirrors the walker's `migrationComplete` so callers don't reach
245
+ * into `summary`.
246
+ */
247
+ function isHybrid(walk) {
248
+ return !walk.summary.migrationComplete && walk.summary.supabaseUsageRemaining > 0;
249
+ }
172
250
  /** Collect the manual-review / unsupported flags across the project, with file + line. */
173
251
  function collectManualFlags(walk) {
174
252
  const out = [];
@@ -188,10 +266,16 @@ function collectManualFlags(walk) {
188
266
  }
189
267
  return out;
190
268
  }
191
- function buildPrompt(flags, skippedCount) {
269
+ function buildPrompt(flags, skippedCount, hadRewrites, clientModule) {
192
270
  const rewritten = flags.filter((f) => f.kind === "manual_review").length;
193
271
  const untouched = flags.filter((f) => f.kind === "unsupported").length;
194
272
  const bits = [];
273
+ if (clientModule) {
274
+ bits.push(`review the scaffolded PocketBase client at \`${clientModule}\``);
275
+ }
276
+ else if (hadRewrites) {
277
+ bits.push("create the `pb` PocketBase client the rewritten code now uses (it isn't created for you)");
278
+ }
195
279
  if (rewritten > 0) {
196
280
  bits.push(`${rewritten} rewritten to PocketBase but with semantics that differ from Supabase`);
197
281
  }
@@ -201,7 +285,7 @@ function buildPrompt(flags, skippedCount) {
201
285
  if (skippedCount > 0) {
202
286
  bits.push(`${skippedCount} file${skippedCount === 1 ? "" : "s"} couldn't be parsed`);
203
287
  }
204
- return `Some locations need review: ${bits.join("; ")}. Each is listed with its file and line in migration-preview/REWRITE_NOTES.md — check them before deploying.`;
288
+ return `Before deploying, work through migration-preview/REWRITE_NOTES.md: ${bits.join("; ")}.`;
205
289
  }
206
290
  function renderSummary(args) {
207
291
  const parts = [];
@@ -214,12 +298,21 @@ function renderSummary(args) {
214
298
  else {
215
299
  parts.push("No files needed automatic rewriting.");
216
300
  }
301
+ if (args.clientModule) {
302
+ parts.push(`Scaffolded a PocketBase client at \`${args.clientModule}\` and imported it.`);
303
+ }
217
304
  if (args.walk.summary.packageJsonChanged) {
218
305
  parts.push("`package.json` swapped `@supabase/supabase-js` → `pocketbase`.");
219
306
  }
220
307
  if (args.walk.summary.envFilesChanged > 0) {
221
308
  parts.push(`${args.walk.summary.envFilesChanged} .env file${args.walk.summary.envFilesChanged === 1 ? "" : "s"} stubbed with PocketBase keys.`);
222
309
  }
310
+ if (isHybrid(args.walk)) {
311
+ // Hybrid: some Supabase calls were left untouched on purpose, so the
312
+ // dep + env are kept (dropping them would break the app). Say so —
313
+ // silently keeping them reads like the rewrite missed a step.
314
+ parts.push(`Hybrid migration — ${args.walk.summary.supabaseUsageRemaining} Supabase reference${args.walk.summary.supabaseUsageRemaining === 1 ? "" : "s"} still need${args.walk.summary.supabaseUsageRemaining === 1 ? "s" : ""} \`@supabase/supabase-js\`, so the dependency + Supabase env were kept. Drop them once the rest is migrated.`);
315
+ }
223
316
  if (args.flagCount > 0) {
224
317
  parts.push(`${args.flagCount} pattern${args.flagCount === 1 ? "" : "s"} need manual review — see \`migration-preview/REWRITE_NOTES.md\`.`);
225
318
  }
@@ -228,13 +321,59 @@ function renderSummary(args) {
228
321
  }
229
322
  return parts.join(" ");
230
323
  }
231
- /** The migration-preview/REWRITE_NOTES.md report: every flagged location + unparseable file. */
324
+ /** The migration-preview/REWRITE_NOTES.md report: pb-client setup + every flagged location + unparseable file. */
232
325
  function renderReport(args) {
233
326
  const lines = [];
234
327
  lines.push("# Supabase → PocketBase — review notes");
235
328
  lines.push("");
236
- lines.push("The automated rewrite handled auth and CRUD. The locations below still need a human: some were rewritten but their semantics differ from Supabase, others have no PocketBase equivalent and were left untouched. There are no inline markers — work from this list.");
329
+ lines.push("The automated rewrite converted the high-confidence auth and CRUD call sites. It does NOT create your PocketBase client, and the items below still need a human. There are no inline markers — work from this list.");
237
330
  lines.push("");
331
+ if (args.checklist) {
332
+ lines.push("## Status checklist");
333
+ lines.push("");
334
+ lines.push("Same scoreboard as `percher migrate-from-supabase --status`:");
335
+ lines.push("");
336
+ lines.push("```");
337
+ lines.push(args.checklist);
338
+ lines.push("```");
339
+ lines.push("");
340
+ }
341
+ if (!args.migrationComplete && args.supabaseUsageRemaining > 0) {
342
+ lines.push("## Hybrid state — Supabase kept on purpose");
343
+ lines.push("");
344
+ lines.push(`${args.supabaseUsageRemaining} Supabase reference${args.supabaseUsageRemaining === 1 ? "" : "s"} (storage / realtime / rpc / edge functions / un-mapped auth, or files still importing \`@supabase/*\`) ${args.supabaseUsageRemaining === 1 ? "was" : "were"} left in place because ${args.supabaseUsageRemaining === 1 ? "it has" : "they have"} no clean PocketBase equivalent. While they remain, your app needs **both** SDKs:`);
345
+ lines.push("");
346
+ lines.push("- `package.json` still depends on `@supabase/supabase-js` (and `pocketbase` once you add it) — **this is correct**, don't remove the Supabase dep yet.");
347
+ lines.push("- your Supabase env vars (`SUPABASE_*` / `VITE_SUPABASE_*` / …) were **kept** — they're still needed by the calls below.");
348
+ lines.push("");
349
+ lines.push("Once you've migrated every item in this report, drop `@supabase/supabase-js` and the Supabase env keys. Run `percher migrate-from-supabase --status` to check what's left.");
350
+ lines.push("");
351
+ }
352
+ if (args.scaffoldedClient) {
353
+ lines.push("## PocketBase client (scaffolded for you)");
354
+ lines.push("");
355
+ lines.push(`A PocketBase client was generated at \`${args.scaffoldedClient}\` and \`import { pb } from "…"\` was inserted into the rewritten files. Review the URL accessor — it's a working default, adjust it to match your framework if needed.`);
356
+ lines.push("");
357
+ }
358
+ else if (args.hadRewrites) {
359
+ lines.push("## Wire the PocketBase client (required first)");
360
+ lines.push("");
361
+ lines.push(args.scaffoldSkippedExisting
362
+ ? "The rewritten call sites use a `pb` client. Your project already exports one, so no module was generated — make sure each rewritten file imports `pb` from it."
363
+ : "The rewritten call sites now use a `pb` client this tool did not create — until you add it, they reference an undefined `pb` and the app won't run.");
364
+ lines.push("");
365
+ lines.push("1. Replace your Supabase client setup with a PocketBase one, exported under the same name the rewrites use (`pb`):");
366
+ lines.push("");
367
+ lines.push("```js");
368
+ lines.push('import PocketBase from "pocketbase";');
369
+ lines.push("// Percher injects POCKETBASE_URL / VITE_POCKETBASE_URL at deploy time.");
370
+ lines.push("export const pb = new PocketBase(import.meta.env.VITE_POCKETBASE_URL ?? process.env.POCKETBASE_URL);");
371
+ lines.push("```");
372
+ lines.push("");
373
+ lines.push("2. Import `pb` in the rewritten files from wherever you export it.");
374
+ lines.push("3. Remove the leftover `@supabase/*` imports (the `createClient(...)` setup, `@supabase/ssr` helpers, etc.) once nothing else needs them.");
375
+ lines.push("");
376
+ }
238
377
  const rewritten = args.flags.filter((f) => f.kind === "manual_review");
239
378
  const untouched = args.flags.filter((f) => f.kind === "unsupported");
240
379
  if (rewritten.length > 0) {
@@ -251,6 +390,10 @@ function renderReport(args) {
251
390
  lines.push("");
252
391
  appendFlagsByFile(lines, untouched);
253
392
  }
393
+ // Concrete PB recipes for the divergent auth patterns present.
394
+ const recipeLines = renderRecipesSection(args.flags.map((f) => f.pattern));
395
+ for (const line of recipeLines)
396
+ lines.push(line);
254
397
  if (args.skipped.length > 0) {
255
398
  lines.push("## Files that couldn't be parsed");
256
399
  lines.push("");
@@ -297,6 +440,7 @@ function failure(rootAbs, mode, err, suggestion) {
297
440
  flagsByPattern: {},
298
441
  packageJsonChanged: false,
299
442
  envFilesChanged: 0,
443
+ clientModule: null,
300
444
  skipped: [],
301
445
  recovery: recoveryAsk({
302
446
  prompt: `${suggestion} (${message})`,
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-supabase-rewrite.js","sourceRoot":"","sources":["../../src/commands/migrate-supabase-rewrite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate-supabase-rewrite.js","sourceRoot":"","sources":["../../src/commands/migrate-supabase-rewrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { RewriteClientFlag } from "./migrate-supabase-rewrite.js";
2
+ import type { WalkedFile } from "./migrate-supabase-walker.js";
3
+ export interface ScaffoldClientInput {
4
+ /** The walk's files — used to detect an existing pb client + path collisions. */
5
+ files: WalkedFile[];
6
+ /** Project root relative paths (forward-slash) of files the rewriter changed. */
7
+ changedRelPaths: string[];
8
+ /** PocketBase identifier the rewrites emit. Defaults to `pb`. */
9
+ pbIdentifier?: string;
10
+ }
11
+ export interface ScaffoldClientResult {
12
+ /** The new client module to write, or null when one already exists / couldn't be placed. */
13
+ clientModule: {
14
+ relativePath: string;
15
+ content: string;
16
+ } | null;
17
+ /** relPath → rewritten content with the `pb` import inserted. */
18
+ importInsertions: Map<string, string>;
19
+ /** manual_review flags (e.g. "delete the old Supabase client module"). */
20
+ flags: RewriteClientFlag[];
21
+ /** Why no module was generated, when applicable. */
22
+ skippedReason?: "pb_client_exists" | "target_path_taken";
23
+ }
24
+ export declare function scaffoldPocketBaseClient(input: ScaffoldClientInput): ScaffoldClientResult;
25
+ //# sourceMappingURL=migrate-supabase-scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-supabase-scaffold.d.ts","sourceRoot":"","sources":["../../src/commands/migrate-supabase-scaffold.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA4B5D,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,iFAAiF;IACjF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,4FAA4F;IAC5F,YAAY,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D,iEAAiE;IACjE,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,0EAA0E;IAC1E,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,oDAAoD;IACpD,aAAa,CAAC,EAAE,kBAAkB,GAAG,mBAAmB,CAAC;CAC1D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CA8DzF"}
@@ -0,0 +1,234 @@
1
+ import { posix } from "node:path";
2
+ import jscodeshift, {} from "jscodeshift";
3
+ /**
4
+ * Phase C — auto PocketBase client + import insertion.
5
+ *
6
+ * After the rewriter converts call sites to `pb.*`, those files reference a
7
+ * `pb` client that doesn't exist yet (the dangling-pb FAIL the status doctor
8
+ * reports). This closes that gap mechanically:
9
+ *
10
+ * 1. Generate a PARALLEL client module (`src/lib/pocketbase.<ext>`) — a
11
+ * NEW file, never a rewrite of the existing Supabase client. Other files
12
+ * (untouched storage/rpc/realtime call sites) may still import the old
13
+ * `supabase` client; clobbering it would break them and contradicts the
14
+ * hybrid model. The old module is left intact and flagged "delete once
15
+ * everything's migrated".
16
+ * 2. Insert `import { pb } from "<relative path>"` into each rewritten file
17
+ * that references `pb` without a binding.
18
+ *
19
+ * Skips creating a module silently when the project already exports a `pb`
20
+ * client (imports point at the existing one instead). Everything here is a
21
+ * "working default" — boilerplate the user may tweak — not a guess at their
22
+ * exact config.
23
+ */
24
+ const tsx = jscodeshift.withParser("tsx");
25
+ const CLIENT_FACTORIES = new Set(["createClient", "createBrowserClient", "createServerClient"]);
26
+ export function scaffoldPocketBaseClient(input) {
27
+ const pbName = input.pbIdentifier ?? "pb";
28
+ const codeFiles = input.files.filter((f) => f.kind === "code");
29
+ const flags = [];
30
+ // Flag the existing Supabase client module(s) for eventual deletion.
31
+ for (const file of codeFiles) {
32
+ if (isSupabaseClientModule(file.source)) {
33
+ flags.push({
34
+ file: file.relativePath,
35
+ kind: "manual_review",
36
+ pattern: "supabase.client_module",
37
+ note: "This module sets up the Supabase client. It's kept while any Supabase call remains; once everything is migrated to PocketBase, delete it and the imports that reference it.",
38
+ });
39
+ }
40
+ }
41
+ // If a pb client already exists, import from it instead of generating one.
42
+ const existing = codeFiles.find((f) => exportsBinding(f.rewritten, pbName));
43
+ let targetRelNoExt;
44
+ let clientModule = null;
45
+ let skippedReason;
46
+ if (existing) {
47
+ targetRelNoExt = stripExt(existing.relativePath);
48
+ skippedReason = "pb_client_exists";
49
+ }
50
+ else {
51
+ const ext = pickExtension(codeFiles);
52
+ const baseNoExt = pickModuleBase(codeFiles);
53
+ const targetRel = `${baseNoExt}.${ext}`;
54
+ // Collision with a non-pb-client file at the exact path → don't clobber.
55
+ if (input.files.some((f) => f.relativePath === targetRel)) {
56
+ flags.push({
57
+ file: targetRel,
58
+ kind: "manual_review",
59
+ pattern: "scaffold.path_taken",
60
+ note: `Couldn't auto-create a PocketBase client — \`${targetRel}\` already exists. Create one that exports \`${pbName}\` and import it in the rewritten files.`,
61
+ });
62
+ return {
63
+ clientModule: null,
64
+ importInsertions: new Map(),
65
+ flags,
66
+ skippedReason: "target_path_taken",
67
+ };
68
+ }
69
+ targetRelNoExt = baseNoExt;
70
+ clientModule = { relativePath: targetRel, content: renderClientModule(pbName, codeFiles) };
71
+ }
72
+ // Insert the import into every changed file that references pb without a binding.
73
+ const importInsertions = new Map();
74
+ const changed = new Set(input.changedRelPaths);
75
+ for (const file of codeFiles) {
76
+ if (!changed.has(file.relativePath))
77
+ continue;
78
+ if (file.relativePath === clientModule?.relativePath)
79
+ continue; // never self-import
80
+ if (!referencesUnboundIdentifier(file.rewritten, pbName))
81
+ continue;
82
+ const importPath = computeImportPath(file.relativePath, targetRelNoExt);
83
+ const next = insertNamedImport(file.rewritten, pbName, importPath);
84
+ if (next !== null)
85
+ importInsertions.set(file.relativePath, next);
86
+ }
87
+ return { clientModule, importInsertions, flags, ...(skippedReason ? { skippedReason } : {}) };
88
+ }
89
+ /** PocketBase client module body. Accessor matches the project shape. */
90
+ function renderClientModule(pbName, codeFiles) {
91
+ const usesViteEnv = codeFiles.some((f) => f.source.includes("import.meta.env"));
92
+ const accessor = usesViteEnv
93
+ ? "import.meta.env.VITE_POCKETBASE_URL"
94
+ : "process.env.POCKETBASE_URL";
95
+ return [
96
+ 'import PocketBase from "pocketbase";',
97
+ "",
98
+ "// Percher injects the PocketBase URL at deploy time. This is a working",
99
+ "// default — adjust the URL accessor to match your framework if needed.",
100
+ `export const ${pbName} = new PocketBase(${accessor});`,
101
+ "",
102
+ ].join("\n");
103
+ }
104
+ /** `ts` if the project has any TS file, else `js`. */
105
+ function pickExtension(codeFiles) {
106
+ return codeFiles.some((f) => f.relativePath.endsWith(".ts") || f.relativePath.endsWith(".tsx"))
107
+ ? "ts"
108
+ : "js";
109
+ }
110
+ /** Where to place the generated module — under src/ when the project uses it. */
111
+ function pickModuleBase(codeFiles) {
112
+ const hasSrc = codeFiles.some((f) => f.relativePath.startsWith("src/"));
113
+ return hasSrc ? "src/lib/pocketbase" : "lib/pocketbase";
114
+ }
115
+ function stripExt(relPath) {
116
+ const dot = relPath.lastIndexOf(".");
117
+ return dot > relPath.lastIndexOf("/") ? relPath.slice(0, dot) : relPath;
118
+ }
119
+ /** Relative, extensionless import specifier from one file to the module. */
120
+ function computeImportPath(fromFileRel, targetRelNoExt) {
121
+ let rel = posix.relative(posix.dirname(fromFileRel), targetRelNoExt);
122
+ if (!rel.startsWith("."))
123
+ rel = `./${rel}`;
124
+ return rel;
125
+ }
126
+ /** Insert `import { name } from "spec"` at the top of the file. Returns the
127
+ * new source, or null if it couldn't parse (caller leaves the file as-is). */
128
+ function insertNamedImport(source, name, spec) {
129
+ let root;
130
+ try {
131
+ root = tsx(source);
132
+ }
133
+ catch {
134
+ return null;
135
+ }
136
+ const decl = jscodeshift.importDeclaration([jscodeshift.importSpecifier(jscodeshift.identifier(name))], jscodeshift.literal(spec));
137
+ const program = root.get().node.program;
138
+ program.body.unshift(decl);
139
+ return root.toSource({ quote: "double" });
140
+ }
141
+ /** True when `name` is read as a member object (`name.x`) but never bound. */
142
+ function referencesUnboundIdentifier(source, name) {
143
+ let root;
144
+ try {
145
+ root = tsx(source);
146
+ }
147
+ catch {
148
+ return false;
149
+ }
150
+ let declared = false;
151
+ root.find(jscodeshift.ImportDeclaration).forEach((p) => {
152
+ for (const spec of p.node.specifiers ?? []) {
153
+ if (spec.local?.name === name)
154
+ declared = true;
155
+ }
156
+ });
157
+ root.find(jscodeshift.VariableDeclarator).forEach((p) => {
158
+ if (p.node.id.type === "Identifier" && p.node.id.name === name) {
159
+ declared = true;
160
+ }
161
+ });
162
+ let used = false;
163
+ root.find(jscodeshift.MemberExpression).forEach((p) => {
164
+ const obj = p.node.object;
165
+ if (obj.type === "Identifier" && obj.name === name)
166
+ used = true;
167
+ });
168
+ return used && !declared;
169
+ }
170
+ /** True when the module exports a binding named `name` (the existing pb client). */
171
+ function exportsBinding(source, name) {
172
+ if (!source.includes(`export`) || !source.includes(name))
173
+ return false;
174
+ let root;
175
+ try {
176
+ root = tsx(source);
177
+ }
178
+ catch {
179
+ return false;
180
+ }
181
+ let found = false;
182
+ root.find(jscodeshift.ExportNamedDeclaration).forEach((p) => {
183
+ const node = p.node;
184
+ // export const name = ...
185
+ if (node.declaration?.type === "VariableDeclaration") {
186
+ for (const d of node.declaration.declarations) {
187
+ if (d.type === "VariableDeclarator" &&
188
+ d.id.type === "Identifier" &&
189
+ d.id.name === name) {
190
+ found = true;
191
+ }
192
+ }
193
+ }
194
+ // export { name } / export { x as name }
195
+ for (const spec of node.specifiers ?? []) {
196
+ const exported = spec.exported;
197
+ if (exported?.type === "Identifier" && exported.name === name) {
198
+ found = true;
199
+ }
200
+ }
201
+ });
202
+ return found;
203
+ }
204
+ /** True when the file imports `@supabase/*` AND calls a client factory — i.e.
205
+ * it's a Supabase client-setup module, not just a consumer. */
206
+ function isSupabaseClientModule(source) {
207
+ if (!source.includes("@supabase/"))
208
+ return false;
209
+ let root;
210
+ try {
211
+ root = tsx(source);
212
+ }
213
+ catch {
214
+ return false;
215
+ }
216
+ let importsSupabase = false;
217
+ root.find(jscodeshift.ImportDeclaration).forEach((p) => {
218
+ const src = p.node.source.value;
219
+ if (typeof src === "string" && src.startsWith("@supabase/"))
220
+ importsSupabase = true;
221
+ });
222
+ if (!importsSupabase)
223
+ return false;
224
+ let callsFactory = false;
225
+ root.find(jscodeshift.CallExpression).forEach((p) => {
226
+ const callee = p.node.callee;
227
+ if (callee.type === "Identifier" &&
228
+ CLIENT_FACTORIES.has(callee.name)) {
229
+ callsFactory = true;
230
+ }
231
+ });
232
+ return callsFactory;
233
+ }
234
+ //# sourceMappingURL=migrate-supabase-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-supabase-scaffold.js","sourceRoot":"","sources":["../../src/commands/migrate-supabase-scaffold.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { z } from "zod";
2
- import type { Context } from "../context";
3
- import { type AskUserRecovery, type NoneRecovery, type ToolRecovery } from "../recovery";
4
- import { type InspectSupabaseError } from "./migrate-supabase";
5
- import { type MigrationPreview } from "./migrate-supabase-map";
2
+ import type { Context } from "../context.js";
3
+ import { type AskUserRecovery, type NoneRecovery, type ToolRecovery } from "../recovery.js";
4
+ import { type InspectSupabaseError } from "./migrate-supabase.js";
5
+ import { type MigrationPreview } from "./migrate-supabase-map.js";
6
6
  /**
7
7
  * FUTURE9 Phase B chunk 2 — schema migration write step.
8
8
  *