@percher/core 0.4.9 → 0.4.11

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 (144) hide show
  1. package/dist/ai-files-manifest.d.ts +1 -1
  2. package/dist/commands/account.d.ts +1 -1
  3. package/dist/commands/account.js +2 -2
  4. package/dist/commands/admin-reconcile-routes.d.ts +1 -1
  5. package/dist/commands/ai-files.d.ts +2 -2
  6. package/dist/commands/ai-files.js +2 -2
  7. package/dist/commands/alerts.d.ts +1 -1
  8. package/dist/commands/app-resources.d.ts +1 -1
  9. package/dist/commands/app-resources.js +2 -2
  10. package/dist/commands/app-topology.d.ts +1 -1
  11. package/dist/commands/app-topology.js +2 -2
  12. package/dist/commands/billing.d.ts +1 -1
  13. package/dist/commands/billing.js +1 -1
  14. package/dist/commands/cache.d.ts +1 -1
  15. package/dist/commands/cache.js +2 -2
  16. package/dist/commands/capabilities.d.ts +1 -1
  17. package/dist/commands/claim.d.ts +1 -1
  18. package/dist/commands/claim.d.ts.map +1 -1
  19. package/dist/commands/claim.js +14 -9
  20. package/dist/commands/claim.js.map +1 -1
  21. package/dist/commands/create.d.ts +2 -2
  22. package/dist/commands/create.js +2 -2
  23. package/dist/commands/dashboard.d.ts +1 -1
  24. package/dist/commands/dashboard.js +2 -2
  25. package/dist/commands/data-export.d.ts +1 -1
  26. package/dist/commands/data-export.js +3 -3
  27. package/dist/commands/data.d.ts +1 -1
  28. package/dist/commands/data.js +2 -2
  29. package/dist/commands/delete.d.ts +1 -1
  30. package/dist/commands/delete.js +2 -2
  31. package/dist/commands/deploys.d.ts +1 -1
  32. package/dist/commands/deploys.js +2 -2
  33. package/dist/commands/dev.d.ts +1 -1
  34. package/dist/commands/dev.js +3 -3
  35. package/dist/commands/diagnose.d.ts +1 -1
  36. package/dist/commands/diagnose.js +2 -2
  37. package/dist/commands/diff.d.ts +1 -1
  38. package/dist/commands/diff.js +2 -2
  39. package/dist/commands/doctor.d.ts +3 -3
  40. package/dist/commands/doctor.js +4 -4
  41. package/dist/commands/domains.d.ts +1 -1
  42. package/dist/commands/domains.js +2 -2
  43. package/dist/commands/env.d.ts +1 -1
  44. package/dist/commands/env.js +2 -2
  45. package/dist/commands/export.d.ts +1 -1
  46. package/dist/commands/export.js +2 -2
  47. package/dist/commands/forgejo.d.ts +1 -1
  48. package/dist/commands/forgejo.js +2 -2
  49. package/dist/commands/generate.d.ts +1 -1
  50. package/dist/commands/generate.js +1 -1
  51. package/dist/commands/github.d.ts +1 -1
  52. package/dist/commands/github.js +2 -2
  53. package/dist/commands/import-project.d.ts +1 -1
  54. package/dist/commands/import-project.js +2 -2
  55. package/dist/commands/init.d.ts +2 -2
  56. package/dist/commands/init.js +3 -3
  57. package/dist/commands/insights.d.ts +1 -1
  58. package/dist/commands/insights.js +2 -2
  59. package/dist/commands/inspect-link.d.ts +1 -1
  60. package/dist/commands/inspect-link.js +2 -2
  61. package/dist/commands/login.d.ts +1 -1
  62. package/dist/commands/login.js +1 -1
  63. package/dist/commands/logs.d.ts +1 -1
  64. package/dist/commands/logs.js +2 -2
  65. package/dist/commands/mcp.d.ts +1 -1
  66. package/dist/commands/migrate-supabase-map.d.ts +1 -1
  67. package/dist/commands/migrate-supabase-recipes.d.ts +28 -0
  68. package/dist/commands/migrate-supabase-recipes.d.ts.map +1 -0
  69. package/dist/commands/migrate-supabase-recipes.js +92 -0
  70. package/dist/commands/migrate-supabase-recipes.js.map +1 -0
  71. package/dist/commands/migrate-supabase-rewrite.d.ts +101 -0
  72. package/dist/commands/migrate-supabase-rewrite.d.ts.map +1 -0
  73. package/dist/commands/migrate-supabase-rewrite.js +459 -0
  74. package/dist/commands/migrate-supabase-rewrite.js.map +1 -0
  75. package/dist/commands/migrate-supabase-scaffold.d.ts +25 -0
  76. package/dist/commands/migrate-supabase-scaffold.d.ts.map +1 -0
  77. package/dist/commands/migrate-supabase-scaffold.js +234 -0
  78. package/dist/commands/migrate-supabase-scaffold.js.map +1 -0
  79. package/dist/commands/migrate-supabase-schema.d.ts +4 -4
  80. package/dist/commands/migrate-supabase-schema.js +4 -4
  81. package/dist/commands/migrate-supabase-scripts.d.ts +1 -1
  82. package/dist/commands/migrate-supabase-sdk.d.ts +34 -0
  83. package/dist/commands/migrate-supabase-sdk.d.ts.map +1 -1
  84. package/dist/commands/migrate-supabase-sdk.js +169 -0
  85. package/dist/commands/migrate-supabase-sdk.js.map +1 -1
  86. package/dist/commands/migrate-supabase-status.d.ts +92 -0
  87. package/dist/commands/migrate-supabase-status.d.ts.map +1 -0
  88. package/dist/commands/migrate-supabase-status.js +470 -0
  89. package/dist/commands/migrate-supabase-status.js.map +1 -0
  90. package/dist/commands/migrate-supabase-walker.d.ts +15 -1
  91. package/dist/commands/migrate-supabase-walker.d.ts.map +1 -1
  92. package/dist/commands/migrate-supabase-walker.js +49 -5
  93. package/dist/commands/migrate-supabase-walker.js.map +1 -1
  94. package/dist/commands/migrate-supabase.d.ts +2 -2
  95. package/dist/commands/migrate-supabase.js +1 -1
  96. package/dist/commands/open.d.ts +1 -1
  97. package/dist/commands/open.js +2 -2
  98. package/dist/commands/preview-branch.d.ts +1 -1
  99. package/dist/commands/preview-branch.js +2 -2
  100. package/dist/commands/publish-api-error.d.ts +1 -1
  101. package/dist/commands/publish-api-error.js +1 -1
  102. package/dist/commands/publish-failure.d.ts +3 -3
  103. package/dist/commands/publish-failure.js +3 -3
  104. package/dist/commands/publish.d.ts +3 -3
  105. package/dist/commands/publish.d.ts.map +1 -1
  106. package/dist/commands/publish.js +19 -21
  107. package/dist/commands/publish.js.map +1 -1
  108. package/dist/commands/push.d.ts +2 -2
  109. package/dist/commands/push.js +8 -8
  110. package/dist/commands/redeploy.d.ts +2 -2
  111. package/dist/commands/redeploy.js +4 -4
  112. package/dist/commands/rename.d.ts +1 -1
  113. package/dist/commands/rename.js +2 -2
  114. package/dist/commands/reproduce.d.ts +1 -1
  115. package/dist/commands/reproduce.js +1 -1
  116. package/dist/commands/reset-superuser.d.ts +1 -1
  117. package/dist/commands/reset-superuser.js +2 -2
  118. package/dist/commands/restore.d.ts +1 -1
  119. package/dist/commands/restore.js +2 -2
  120. package/dist/commands/resume.d.ts +1 -1
  121. package/dist/commands/resume.js +2 -2
  122. package/dist/commands/rollback.d.ts +1 -1
  123. package/dist/commands/rollback.js +2 -2
  124. package/dist/commands/sharing.d.ts +1 -1
  125. package/dist/commands/sharing.js +2 -2
  126. package/dist/commands/status.d.ts +1 -1
  127. package/dist/commands/transfers.d.ts +1 -1
  128. package/dist/commands/transfers.js +2 -2
  129. package/dist/commands/unsuspend.d.ts +1 -1
  130. package/dist/commands/versions.d.ts +1 -1
  131. package/dist/commands/versions.js +2 -2
  132. package/dist/commands/wait-deploy.d.ts +3 -3
  133. package/dist/commands/wait-deploy.js +3 -3
  134. package/dist/commands/whoami.d.ts +1 -1
  135. package/dist/detect.js +1 -1
  136. package/dist/index.d.ts +77 -74
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +76 -73
  139. package/dist/index.js.map +1 -1
  140. package/dist/poll-deployment.d.ts +1 -1
  141. package/dist/recovery.d.ts +1 -1
  142. package/dist/structured-error-codes.d.ts +1 -1
  143. package/dist/templates/ai-files/index.js +2 -2
  144. package/package.json +6 -3
@@ -0,0 +1,459 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join, relative, resolve, sep } from "node:path";
3
+ import { z } from "zod";
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";
9
+ /**
10
+ * FUTURE9 Phase D chunk 3.3 — user-facing client-rewrite wiring.
11
+ *
12
+ * Ties the existing project walker (`walkSupabaseProject`) and writer
13
+ * (`writeWalkResult`) into one command the CLI + MCP can call. Phase D
14
+ * shipped as library functions in 2026-05; this is the deferred
15
+ * surface that makes it reachable.
16
+ *
17
+ * Two modes, mirroring the dry-run/apply posture of every other
18
+ * migration phase:
19
+ *
20
+ * - preview (default): rewritten copies of every changed file land
21
+ * under `./migration-preview/rewritten/`, mirroring the project
22
+ * tree. The project itself is untouched — the user diffs the
23
+ * preview against their working tree before committing.
24
+ * - apply (`apply: true`): changed files are overwritten in place.
25
+ * Originals are copied to `./migration-preview/backup/` FIRST, so
26
+ * a botched rewrite is always recoverable even outside git.
27
+ *
28
+ * The rewrite is AST-based and high-confidence for auth + CRUD. Two
29
+ * kinds of call still need a human; both are recorded as flags (file +
30
+ * line) collected into a `migration-preview/REWRITE_NOTES.md` report
31
+ * rather than inline markers:
32
+ * - manual_review — rewritten to PocketBase, but the semantics differ
33
+ * (e.g. onAuthStateChange event shape, filter escaping, pagination).
34
+ * - unsupported — no PocketBase equivalent (storage, realtime, rpc,
35
+ * edge functions); LEFT UNTOUCHED for the user to replace by hand.
36
+ * A project that only triggers flags produces no/partial rewrites but is
37
+ * still actionable — it is not "nothing found".
38
+ */
39
+ export const rewriteSupabaseClientInputSchema = z.object({
40
+ rootDir: z
41
+ .string()
42
+ .optional()
43
+ .describe("Project root to rewrite. Relative paths resolve against ctx.cwd. Defaults to ctx.cwd."),
44
+ outputDir: z
45
+ .string()
46
+ .optional()
47
+ .describe("Where preview-mode writes the rewritten tree. Ignored when `apply` is true. Defaults to `<root>/migration-preview/rewritten`."),
48
+ apply: z
49
+ .boolean()
50
+ .optional()
51
+ .describe("When true, overwrite changed files in place (originals backed up to `migration-preview/backup/` first). Default false = preview only."),
52
+ pbIdentifier: z
53
+ .string()
54
+ .optional()
55
+ .describe("PocketBase client variable name to emit. Defaults to `pb`."),
56
+ supabaseIdentifiers: z
57
+ .array(z.string())
58
+ .optional()
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."),
64
+ });
65
+ export async function rewriteSupabaseClient(ctx, input) {
66
+ const rootAbs = input.rootDir ? resolve(ctx.cwd, input.rootDir) : resolve(ctx.cwd);
67
+ const apply = input.apply === true;
68
+ const mode = apply ? "apply" : "preview";
69
+ ctx.status(`Scanning ${relative(ctx.cwd, rootAbs) || "."} for Supabase SDK calls...`);
70
+ let walk;
71
+ try {
72
+ walk = await walkSupabaseProject({
73
+ rootDir: rootAbs,
74
+ pbIdentifier: input.pbIdentifier,
75
+ supabaseIdentifiers: input.supabaseIdentifiers,
76
+ });
77
+ }
78
+ catch (err) {
79
+ return failure(rootAbs, mode, err, `Couldn't scan ${relative(ctx.cwd, rootAbs) || "."}: check the path exists and is readable, then re-run.`);
80
+ }
81
+ const changed = walk.files.filter((f) => f.changed);
82
+ const flags = collectManualFlags(walk);
83
+ // "Nothing found" is ONLY true when there's no rewrite, no manual-
84
+ // review flag, AND no unparseable file. Flag-only Supabase usage
85
+ // (storage / realtime / rpc / edge functions) changes no file but is
86
+ // still actionable — don't claim there was nothing here.
87
+ if (changed.length === 0 && flags.length === 0 && walk.skipped.length === 0) {
88
+ return {
89
+ status: "ok",
90
+ mode,
91
+ rootDir: rootAbs,
92
+ writtenTo: rootAbs,
93
+ backupDir: null,
94
+ filesWritten: [],
95
+ changedCount: 0,
96
+ flags: [],
97
+ flagsByPattern: {},
98
+ packageJsonChanged: false,
99
+ envFilesChanged: 0,
100
+ clientModule: null,
101
+ skipped: [],
102
+ recovery: recoveryNone(),
103
+ summary: "No Supabase SDK calls found to rewrite. If you intend to keep Supabase as your backend, " +
104
+ 'set `[data] mode = "supabase"` in percher.toml instead.',
105
+ };
106
+ }
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;
134
+ const backupDir = apply && changed.length > 0 ? join(rootAbs, "migration-preview", "backup") : null;
135
+ const rewriteTarget = apply
136
+ ? rootAbs
137
+ : input.outputDir
138
+ ? resolve(ctx.cwd, input.outputDir)
139
+ : join(rootAbs, "migration-preview", "rewritten");
140
+ const filesWritten = [];
141
+ let clientModuleWritten = null;
142
+ try {
143
+ if (changed.length > 0) {
144
+ // Apply mode: copy originals to the backup tree BEFORE overwriting,
145
+ // so a half-finished apply is always recoverable. The backup reuses
146
+ // writeWalkResult's path-traversal guard by handing it a result
147
+ // whose `rewritten` is the untouched source.
148
+ if (apply && backupDir) {
149
+ ctx.status(`Backing up ${changed.length} original file(s) to migration-preview/backup/...`);
150
+ await writeWalkResult({
151
+ result: { ...walk, files: changed.map((f) => ({ ...f, rewritten: f.source })) },
152
+ targetDir: backupDir,
153
+ changedOnly: false,
154
+ });
155
+ }
156
+ ctx.status(apply
157
+ ? `Rewriting ${changed.length} file(s) in place...`
158
+ : `Writing ${changed.length} rewritten file(s) to migration-preview/rewritten/...`);
159
+ const out = await writeWalkResult({
160
+ result: walk,
161
+ targetDir: rewriteTarget,
162
+ changedOnly: true,
163
+ });
164
+ for (const rel of out.written) {
165
+ filesWritten.push(relative(ctx.cwd, join(rewriteTarget, rel)));
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
+ }
176
+ }
177
+ // Durable report for everything the rewriter wouldn't touch. This
178
+ // is the artifact a flag-only project gets instead of rewritten
179
+ // files — the rewriter inserts no inline markers.
180
+ if (reportNeeded) {
181
+ const reportAbs = join(rootAbs, "migration-preview", "REWRITE_NOTES.md");
182
+ await mkdir(dirname(reportAbs), { recursive: true });
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");
200
+ filesWritten.push(relative(ctx.cwd, reportAbs));
201
+ }
202
+ }
203
+ catch (err) {
204
+ return failure(rootAbs, mode, err, apply
205
+ ? "The in-place rewrite failed partway. Your originals are safe — restore from `migration-preview/backup/` and re-run."
206
+ : "Couldn't write the rewritten preview. Check the output directory is writeable and re-run.");
207
+ }
208
+ const flagsByPattern = {};
209
+ for (const flag of flags) {
210
+ flagsByPattern[flag.pattern] = (flagsByPattern[flag.pattern] ?? 0) + 1;
211
+ }
212
+ const recovery = reportNeeded
213
+ ? recoveryAsk({
214
+ prompt: buildPrompt(flags, walk.skipped.length, hadRewrites, clientModuleWritten),
215
+ reasonCode: "unknown",
216
+ })
217
+ : recoveryNone();
218
+ return {
219
+ status: "ok",
220
+ mode,
221
+ rootDir: rootAbs,
222
+ writtenTo: changed.length > 0 ? rewriteTarget : rootAbs,
223
+ backupDir,
224
+ filesWritten,
225
+ changedCount: changed.length,
226
+ flags,
227
+ flagsByPattern,
228
+ packageJsonChanged: walk.summary.packageJsonChanged,
229
+ envFilesChanged: walk.summary.envFilesChanged,
230
+ clientModule: clientModuleWritten,
231
+ skipped: walk.skipped,
232
+ recovery,
233
+ summary: renderSummary({
234
+ mode,
235
+ changed: changed.length,
236
+ walk,
237
+ flagCount: flags.length,
238
+ clientModule: clientModuleWritten,
239
+ }),
240
+ };
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
+ }
250
+ /** Collect the manual-review / unsupported flags across the project, with file + line. */
251
+ function collectManualFlags(walk) {
252
+ const out = [];
253
+ for (const file of walk.files) {
254
+ for (const flag of file.flags) {
255
+ if (flag.kind === "manual_review" || flag.kind === "unsupported") {
256
+ out.push({
257
+ file: file.relativePath,
258
+ line: flag.line,
259
+ column: flag.column,
260
+ kind: flag.kind,
261
+ pattern: flag.pattern,
262
+ note: flag.note,
263
+ });
264
+ }
265
+ }
266
+ }
267
+ return out;
268
+ }
269
+ function buildPrompt(flags, skippedCount, hadRewrites, clientModule) {
270
+ const rewritten = flags.filter((f) => f.kind === "manual_review").length;
271
+ const untouched = flags.filter((f) => f.kind === "unsupported").length;
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
+ }
279
+ if (rewritten > 0) {
280
+ bits.push(`${rewritten} rewritten to PocketBase but with semantics that differ from Supabase`);
281
+ }
282
+ if (untouched > 0) {
283
+ bits.push(`${untouched} left untouched (no PocketBase equivalent — storage, realtime, rpc, or edge functions)`);
284
+ }
285
+ if (skippedCount > 0) {
286
+ bits.push(`${skippedCount} file${skippedCount === 1 ? "" : "s"} couldn't be parsed`);
287
+ }
288
+ return `Before deploying, work through migration-preview/REWRITE_NOTES.md: ${bits.join("; ")}.`;
289
+ }
290
+ function renderSummary(args) {
291
+ const parts = [];
292
+ if (args.changed > 0) {
293
+ const where = args.mode === "apply"
294
+ ? "rewritten in place (originals in `migration-preview/backup/`)"
295
+ : "written to `migration-preview/rewritten/` for review";
296
+ parts.push(`${args.changed} file${args.changed === 1 ? "" : "s"} ${where}.`);
297
+ }
298
+ else {
299
+ parts.push("No files needed automatic rewriting.");
300
+ }
301
+ if (args.clientModule) {
302
+ parts.push(`Scaffolded a PocketBase client at \`${args.clientModule}\` and imported it.`);
303
+ }
304
+ if (args.walk.summary.packageJsonChanged) {
305
+ parts.push("`package.json` swapped `@supabase/supabase-js` → `pocketbase`.");
306
+ }
307
+ if (args.walk.summary.envFilesChanged > 0) {
308
+ parts.push(`${args.walk.summary.envFilesChanged} .env file${args.walk.summary.envFilesChanged === 1 ? "" : "s"} stubbed with PocketBase keys.`);
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
+ }
316
+ if (args.flagCount > 0) {
317
+ parts.push(`${args.flagCount} pattern${args.flagCount === 1 ? "" : "s"} need manual review — see \`migration-preview/REWRITE_NOTES.md\`.`);
318
+ }
319
+ if (args.walk.skipped.length > 0) {
320
+ parts.push(`${args.walk.skipped.length} file${args.walk.skipped.length === 1 ? "" : "s"} couldn't be parsed (listed in \`REWRITE_NOTES.md\`).`);
321
+ }
322
+ return parts.join(" ");
323
+ }
324
+ /** The migration-preview/REWRITE_NOTES.md report: pb-client setup + every flagged location + unparseable file. */
325
+ function renderReport(args) {
326
+ const lines = [];
327
+ lines.push("# Supabase → PocketBase — review notes");
328
+ lines.push("");
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.");
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
+ }
377
+ const rewritten = args.flags.filter((f) => f.kind === "manual_review");
378
+ const untouched = args.flags.filter((f) => f.kind === "unsupported");
379
+ if (rewritten.length > 0) {
380
+ lines.push("## Rewritten — verify the semantics");
381
+ lines.push("");
382
+ lines.push("These calls were converted to PocketBase, but the behaviour isn't identical (event shapes, filter escaping, pagination). Confirm each still does what you intend.");
383
+ lines.push("");
384
+ appendFlagsByFile(lines, rewritten);
385
+ }
386
+ if (untouched.length > 0) {
387
+ lines.push("## Left untouched — rewrite by hand");
388
+ lines.push("");
389
+ lines.push("These have no clean PocketBase equivalent, so they remain as Supabase calls in your source. Replace each one yourself.");
390
+ lines.push("");
391
+ appendFlagsByFile(lines, untouched);
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);
397
+ if (args.skipped.length > 0) {
398
+ lines.push("## Files that couldn't be parsed");
399
+ lines.push("");
400
+ lines.push("These were skipped — review them manually for Supabase calls the rewriter missed.");
401
+ lines.push("");
402
+ for (const file of args.skipped) {
403
+ lines.push(`- \`${file.relativePath}\` — ${file.reason}${file.detail ? `: ${file.detail}` : ""}`);
404
+ }
405
+ lines.push("");
406
+ }
407
+ return lines.join("\n");
408
+ }
409
+ /** Append a `### file` block per file, each flag as a `- Lline pattern — note` bullet. */
410
+ function appendFlagsByFile(lines, flags) {
411
+ const byFile = new Map();
412
+ for (const flag of flags) {
413
+ const list = byFile.get(flag.file) ?? [];
414
+ list.push(flag);
415
+ byFile.set(flag.file, list);
416
+ }
417
+ for (const [file, fileFlags] of byFile) {
418
+ lines.push(`### \`${file}\``);
419
+ lines.push("");
420
+ for (const flag of fileFlags) {
421
+ const loc = flag.line !== undefined
422
+ ? `L${flag.line}${flag.column !== undefined ? `:${flag.column}` : ""}`
423
+ : "(location unknown)";
424
+ lines.push(`- ${loc} \`${flag.pattern}\` — ${flag.note}`);
425
+ }
426
+ lines.push("");
427
+ }
428
+ }
429
+ function failure(rootAbs, mode, err, suggestion) {
430
+ const message = err instanceof Error ? err.message : String(err);
431
+ return {
432
+ status: "failed",
433
+ mode,
434
+ rootDir: rootAbs,
435
+ writtenTo: rootAbs,
436
+ backupDir: null,
437
+ filesWritten: [],
438
+ changedCount: 0,
439
+ flags: [],
440
+ flagsByPattern: {},
441
+ packageJsonChanged: false,
442
+ envFilesChanged: 0,
443
+ clientModule: null,
444
+ skipped: [],
445
+ recovery: recoveryAsk({
446
+ prompt: `${suggestion} (${message})`,
447
+ reasonCode: "unknown",
448
+ retryable: true,
449
+ }),
450
+ summary: `Client rewrite failed: ${message}`,
451
+ error: {
452
+ code: "rewrite_failed",
453
+ title: "Supabase client rewrite failed",
454
+ explanation: message,
455
+ suggestion,
456
+ },
457
+ };
458
+ }
459
+ //# sourceMappingURL=migrate-supabase-rewrite.js.map
@@ -0,0 +1 @@
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"}