@frontera-sdk/cli 1.53.18 → 1.53.19
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.
- package/package.json +5 -5
- package/src/commands/app/dev.ts +5 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontera-sdk/cli",
|
|
3
|
-
"version": "1.53.
|
|
3
|
+
"version": "1.53.19",
|
|
4
4
|
"description": "The frontera CLI — scaffold, pull, save and deploy Frontera apps and automations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"frontera",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
|
-
"test": "bun test",
|
|
34
|
+
"test": "bun test --parallel",
|
|
35
35
|
"typecheck": "../../node_modules/typescript7/bin/tsc --noEmit",
|
|
36
36
|
"sync:sdk": "bun run scripts/sync-sdk.ts",
|
|
37
37
|
"sync:kit": "bun run scripts/sync-kit.ts",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@anthropic-ai/claude-agent-sdk": "^0.3.251",
|
|
42
42
|
"@faker-js/faker": "10.6.0",
|
|
43
|
-
"@frontera-sdk/core": "1.53.
|
|
44
|
-
"@frontera-sdk/functions": "1.53.
|
|
43
|
+
"@frontera-sdk/core": "1.53.19",
|
|
44
|
+
"@frontera-sdk/functions": "1.53.19",
|
|
45
45
|
"ai": "^6.0.319",
|
|
46
46
|
"axe-core": "4.12.1",
|
|
47
47
|
"gray-matter": "^4.0.3",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"yaml": "^2.9.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@frontera-sdk/forge-contracts": "1.53.
|
|
52
|
+
"@frontera-sdk/forge-contracts": "1.53.19",
|
|
53
53
|
"@types/bun": "^1.3.14",
|
|
54
54
|
"typescript": "^5.9.3"
|
|
55
55
|
}
|
package/src/commands/app/dev.ts
CHANGED
|
@@ -43,8 +43,9 @@ export function appPort(raw: string | undefined): number {
|
|
|
43
43
|
async function waitForApp(origin: string, process: Bun.Subprocess): Promise<void> {
|
|
44
44
|
const deadline = Date.now() + READY_TIMEOUT_MS
|
|
45
45
|
while (Date.now() < deadline) {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
// A server killed by a signal (Ctrl+C, a group TERM) has a signalCode and no exitCode.
|
|
47
|
+
if (process.exitCode !== null || process.signalCode !== null) {
|
|
48
|
+
throw new CliError(`App dev server exited with ${process.signalCode ?? `code ${process.exitCode}`}`, {
|
|
48
49
|
code: 'FAILURE',
|
|
49
50
|
hint: 'run `bun run dev` directly to inspect the framework error',
|
|
50
51
|
})
|
|
@@ -321,7 +322,8 @@ export const appDev: Command = {
|
|
|
321
322
|
forgetDevServer(home, project.slug, process.pid)
|
|
322
323
|
stop()
|
|
323
324
|
// Once the framework's server has exited (or after a while, whatever it does), what it wrote goes back.
|
|
324
|
-
|
|
325
|
+
// Unref'd: a pending wait would hold this process open for the whole STOP_WAIT_MS after the server exited.
|
|
326
|
+
await Promise.race([child.exited, new Promise((resolve) => setTimeout(resolve, STOP_WAIT_MS).unref())])
|
|
325
327
|
const { putBack, left } = kept.atStop()
|
|
326
328
|
for (const line of [putBackLine(putBack, 'stopped'), leftLine(left)]) if (line) ctx.output.note(`[dev] ${line}`)
|
|
327
329
|
if (aside) ctx.output.note(`[dev] ${aside.restore()}`)
|