create-avalon 0.1.21 → 0.1.22

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 +102 -109
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1226,120 +1226,113 @@ function generateNetlifyToml(config) {
1226
1226
  [build.environment]
1227
1227
  NODE_VERSION = "22"
1228
1228
  BUN_VERSION = "latest"
1229
- NITRO_PRESET = "netlify_edge"
1229
+ NITRO_PRESET = "netlify"
1230
1230
 
1231
- [dev]
1232
- command = "bunx --bun vite"
1233
- autoLaunch = false
1231
+ [functions]
1232
+ directory = ".netlify/functions-internal"
1233
+ node_bundler = "none"
1234
1234
 
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.
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
1238
1242
  `;
1239
1243
  }
1240
1244
  function generateBuildMjs() {
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
- `) + `
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);
1343
1336
  `;
1344
1337
  }
1345
1338
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-avalon",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "description": "Scaffold a new Avalon project with multi-framework islands architecture",
5
5
  "license": "MIT",
6
6
  "type": "module",