create-avalon 0.1.20 → 0.1.21

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 (2) hide show
  1. package/dist/cli.js +109 -102
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1226,113 +1226,120 @@ function generateNetlifyToml(config) {
1226
1226
  [build.environment]
1227
1227
  NODE_VERSION = "22"
1228
1228
  BUN_VERSION = "latest"
1229
- NITRO_PRESET = "netlify"
1229
+ NITRO_PRESET = "netlify_edge"
1230
1230
 
1231
- [functions]
1232
- directory = ".netlify/functions-internal"
1233
- node_bundler = "none"
1231
+ [dev]
1232
+ command = "bunx --bun vite"
1233
+ autoLaunch = false
1234
1234
 
1235
- # SSR catch-all Netlify checks for a matching static/prerendered file
1236
- # first (force=false is the default in netlify.toml). Only requests with
1237
- # no static file hit the server function.
1238
- [[redirects]]
1239
- from = "/*"
1240
- to = "/.netlify/functions/server"
1241
- status = 200
1235
+ # Edge functions are configured via .netlify/edge-functions/manifest.json
1236
+ # generated by Nitro at build time. The manifest routes "/*" to the
1237
+ # "server" edge function with static-file exclusion rules.
1242
1238
  `;
1243
1239
  }
1244
1240
  function generateBuildMjs() {
1245
- return `/**
1246
- * Netlify build wrapper.
1247
- *
1248
- * Vite/Nitro leaves open handles after the build completes, preventing
1249
- * the Node process from exiting. This wrapper detects when the build
1250
- * output is ready, kills the entire process group, then runs post-build.
1251
- */
1252
-
1253
- import { spawn, execSync } from 'node:child_process';
1254
- import { existsSync, rmSync } from 'node:fs';
1255
- import { join } from 'node:path';
1256
-
1257
- const CWD = process.cwd();
1258
- const NITRO_JSON = join(CWD, '.netlify', 'functions-internal', 'nitro.json');
1259
- const SERVER_MJS = join(CWD, '.netlify', 'functions-internal', 'server', 'server.mjs');
1260
- const OUTPUT_SSR = join(CWD, '.output', 'server', '_ssr', 'ssr.mjs');
1261
-
1262
- console.log('[build] Starting vite build...');
1263
-
1264
- for (const dir of ['.netlify', '.output', 'netlify']) {
1265
- const full = join(CWD, dir);
1266
- if (existsSync(full)) {
1267
- rmSync(full, { recursive: true, force: true });
1268
- console.log(\`[build] Cleaned stale \${dir}/\`);
1269
- }
1270
- }
1271
-
1272
- const child = spawn('bunx', ['--bun', 'vite', 'build'], {
1273
- cwd: CWD,
1274
- stdio: 'inherit',
1275
- detached: true,
1276
- });
1277
-
1278
- const childPid = child.pid;
1279
- let done = false;
1280
-
1281
- function killTree() {
1282
- try { process.kill(-childPid, 'SIGKILL'); } catch {}
1283
- try { child.kill('SIGKILL'); } catch {}
1284
- }
1285
-
1286
- function finish() {
1287
- if (done) return;
1288
- done = true;
1289
- clearInterval(poll);
1290
- clearTimeout(absoluteTimeout);
1291
- killTree();
1292
-
1293
- setTimeout(() => {
1294
- console.log('[build] Running post-build...');
1295
- try {
1296
- execSync('node post-build.mjs', { cwd: CWD, stdio: 'inherit', timeout: 120_000 });
1297
- } catch (err) {
1298
- console.error('[build] post-build warning:', err.message);
1299
- }
1300
-
1301
- const V1_SERVER = join(CWD, '.netlify', 'v1', 'functions', 'server', 'server.mjs');
1302
- if (existsSync(V1_SERVER)) console.log('[build] ✅ Server function found (v1 API)');
1303
- else if (existsSync(SERVER_MJS)) console.log('[build] ✅ Server function found (legacy)');
1304
- else if (existsSync(OUTPUT_SSR)) console.log('[build] ✅ SSR bundle found');
1305
- else console.error('[build] No server output found');
1306
-
1307
- console.log('[build] ✅ Complete');
1308
- process.exit(0);
1309
- }, 500);
1310
- }
1311
-
1312
- child.on('exit', (code) => {
1313
- console.log(\`[build] vite build exited with code \${code}\`);
1314
- finish();
1315
- });
1316
-
1317
- child.on('error', (err) => {
1318
- console.error('[build] spawn error:', err);
1319
- process.exit(1);
1320
- });
1321
-
1322
- const poll = setInterval(() => {
1323
- const netlifyReady = existsSync(NITRO_JSON) && existsSync(SERVER_MJS);
1324
- const nodeServerReady = existsSync(OUTPUT_SSR);
1325
- if (netlifyReady || nodeServerReady) {
1326
- console.log(\`[build] Output detected (\${netlifyReady ? 'netlify' : 'node-server'}), waiting 3s for final writes...\`);
1327
- clearInterval(poll);
1328
- setTimeout(finish, 3_000);
1329
- }
1330
- }, 1_000);
1331
-
1332
- const absoluteTimeout = setTimeout(() => {
1333
- console.error('[build] Timeout killing build');
1334
- finish();
1335
- }, 240_000);
1241
+ const lines = [
1242
+ `/**`,
1243
+ ` * Netlify build wrapper.`,
1244
+ ` *`,
1245
+ ` * Vite/Nitro leaves open handles after the build completes, preventing`,
1246
+ ` * the Node process from exiting. This wrapper detects when the build`,
1247
+ ` * output is ready, kills the entire process group, then runs post-build.`,
1248
+ ` */`,
1249
+ ``,
1250
+ `import { spawn, execSync } from 'node:child_process';`,
1251
+ `import { existsSync, rmSync } from 'node:fs';`,
1252
+ `import { join } from 'node:path';`,
1253
+ ``,
1254
+ `const CWD = process.cwd();`,
1255
+ `const EDGE_SERVER = join(CWD, '.netlify', 'edge-functions', 'server', 'server.js');`,
1256
+ `const EDGE_MANIFEST = join(CWD, '.netlify', 'edge-functions', 'manifest.json');`,
1257
+ `const NETLIFY_MAIN = join(CWD, '.netlify', 'functions-internal', 'main.mjs');`,
1258
+ `const NETLIFY_SERVER = join(CWD, '.netlify', 'functions-internal', 'server', 'server.mjs');`,
1259
+ `const OUTPUT_SSR = join(CWD, '.output', 'server', '_ssr', 'ssr.mjs');`,
1260
+ ``,
1261
+ `console.log('[build] Starting vite build...');`,
1262
+ ``,
1263
+ `for (const dir of ['.netlify', '.output', 'netlify']) {`,
1264
+ ` const full = join(CWD, dir);`,
1265
+ ` if (existsSync(full)) {`,
1266
+ " rmSync(full, { recursive: true, force: true });",
1267
+ " console.log(`[build] Cleaned stale ${dir}/`);",
1268
+ ` }`,
1269
+ `}`,
1270
+ ``,
1271
+ `const child = spawn('bunx', ['--bun', 'vite', 'build'], {`,
1272
+ ` cwd: CWD,`,
1273
+ ` stdio: 'inherit',`,
1274
+ ` detached: true,`,
1275
+ `});`,
1276
+ ``,
1277
+ `const childPid = child.pid;`,
1278
+ `let done = false;`,
1279
+ ``,
1280
+ `function killTree() {`,
1281
+ ` try { process.kill(-childPid, 'SIGKILL'); } catch {}`,
1282
+ ` try { child.kill('SIGKILL'); } catch {}`,
1283
+ `}`,
1284
+ ``,
1285
+ `function finish() {`,
1286
+ ` if (done) return;`,
1287
+ ` done = true;`,
1288
+ ` clearInterval(poll);`,
1289
+ ` clearTimeout(absoluteTimeout);`,
1290
+ ` killTree();`,
1291
+ ``,
1292
+ ` setTimeout(() => {`,
1293
+ ` console.log('[build] Running post-build...');`,
1294
+ ` try {`,
1295
+ ` execSync('node post-build.mjs', { cwd: CWD, stdio: 'inherit', timeout: 120_000 });`,
1296
+ ` } catch (err) {`,
1297
+ ` console.error('[build] post-build warning:', err.message);`,
1298
+ ` }`,
1299
+ ``,
1300
+ ` if (existsSync(EDGE_SERVER) && existsSync(EDGE_MANIFEST))`,
1301
+ ` console.log('[build] Edge function found');`,
1302
+ ` else if (existsSync(NETLIFY_SERVER))`,
1303
+ ` console.log('[build] ✅ Server function found (netlify v2)');`,
1304
+ ` else if (existsSync(OUTPUT_SSR))`,
1305
+ ` console.log('[build] ✅ SSR bundle found');`,
1306
+ ` else`,
1307
+ ` console.error('[build] ❌ No server output found');`,
1308
+ ``,
1309
+ ` console.log('[build] Complete');`,
1310
+ ` process.exit(0);`,
1311
+ ` }, 500);`,
1312
+ `}`,
1313
+ ``,
1314
+ "child.on('exit', (code) => {",
1315
+ " console.log(`[build] vite build exited with code ${code}`);",
1316
+ ` finish();`,
1317
+ `});`,
1318
+ ``,
1319
+ "child.on('error', (err) => {",
1320
+ ` console.error('[build] spawn error:', err);`,
1321
+ ` process.exit(1);`,
1322
+ `});`,
1323
+ ``,
1324
+ `const poll = setInterval(() => {`,
1325
+ ` const edgeReady = existsSync(EDGE_SERVER) && existsSync(EDGE_MANIFEST);`,
1326
+ ` const netlifyReady = existsSync(NETLIFY_MAIN) && existsSync(NETLIFY_SERVER);`,
1327
+ ` const nodeServerReady = existsSync(OUTPUT_SSR);`,
1328
+ ` if (edgeReady || netlifyReady || nodeServerReady) {`,
1329
+ " const kind = edgeReady ? 'netlify-edge' : netlifyReady ? 'netlify' : 'node-server';",
1330
+ " console.log(`[build] Output detected (${kind}), waiting 3s for final writes...`);",
1331
+ ` clearInterval(poll);`,
1332
+ ` setTimeout(finish, 3_000);`,
1333
+ ` }`,
1334
+ `}, 1_000);`,
1335
+ ``,
1336
+ `const absoluteTimeout = setTimeout(() => {`,
1337
+ ` console.error('[build] Timeout — killing build');`,
1338
+ ` finish();`,
1339
+ `}, 240_000);`
1340
+ ];
1341
+ return lines.join(`
1342
+ `) + `
1336
1343
  `;
1337
1344
  }
1338
1345
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-avalon",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "Scaffold a new Avalon project with multi-framework islands architecture",
5
5
  "license": "MIT",
6
6
  "type": "module",