create-nextblock 0.2.12 → 0.2.14

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.
@@ -189,28 +189,38 @@ async function runSetupWizard(projectDir, projectName) {
189
189
  clack.note('I will now open your browser to log into Supabase.');
190
190
  await execa('npx', ['supabase', 'login'], { stdio: 'inherit', cwd: projectPath });
191
191
 
192
- clack.note('Now, please select your NextBlock project in the browser.');
193
- const { stdout: linkStdout, stderr: linkStderr } = await execa('npx', ['supabase', 'link'], {
192
+ clack.note('Now, please select your NextBlock project when prompted.');
193
+ await execa('npx', ['supabase', 'link'], {
194
194
  cwd: projectPath,
195
+ stdio: 'inherit',
195
196
  });
196
- const linkOutput = `${linkStdout || ''}${linkStderr || ''}`;
197
- if (linkStdout) process.stdout.write(linkStdout);
198
- if (linkStderr) process.stderr.write(linkStderr);
199
197
 
200
198
  // Ensure supabase assets exist (config + migrations) after link in case the CLI created/overrode files
201
199
  await ensureSupabaseAssets(projectPath);
202
200
 
203
201
  const configTomlPath = resolve(projectPath, 'supabase', 'config.toml');
204
- const parsedRef = linkOutput.match(/Selected project:\s*([a-z0-9-]+)/i)?.[1];
205
- if (!parsedRef) {
206
- throw new Error('Could not read project ref from supabase link output. Please rerun `npx supabase link`.');
202
+ let projectId = null;
203
+ if (await fs.pathExists(configTomlPath)) {
204
+ const configToml = await fs.readFile(configTomlPath, 'utf8');
205
+ const projectMatch = configToml.match(/project_id\s*=\s*"([^"]+)"/);
206
+ if (projectMatch?.[1] && !projectMatch[1].includes('env(')) {
207
+ projectId = projectMatch[1];
208
+ }
207
209
  }
208
- const projectId = parsedRef;
209
210
 
210
- if (!(await fs.pathExists(configTomlPath))) {
211
- const configToml = `project_id = "env(SUPABASE_PROJECT_ID)"\n`;
212
- await fs.writeFile(configTomlPath, configToml);
213
- clack.note(`Created supabase/config.toml with project_id env binding for ${projectId}.`);
211
+ if (!projectId) {
212
+ const manual = await clack.text({
213
+ message:
214
+ 'Enter your Supabase project ref (found in the Supabase dashboard URL or the link output, e.g., abcdefghijklmnopqrstu):',
215
+ validate: (val) => (!val ? 'Project ref is required' : undefined),
216
+ });
217
+ if (clack.isCancel(manual)) {
218
+ handleWizardCancel('Setup cancelled.');
219
+ }
220
+ projectId = manual.trim();
221
+ const configContent = `project_id = "env(SUPABASE_PROJECT_ID)"\n`;
222
+ await fs.writeFile(configTomlPath, configContent);
223
+ clack.note('Created supabase/config.toml with project_id env binding.');
214
224
  }
215
225
 
216
226
  clack.note('Please go to your Supabase project dashboard to get the following secrets.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-nextblock",
3
- "version": "0.2.12",
3
+ "version": "0.2.14",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {