@warlock.js/core 5.3.1 → 5.3.2

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 (73) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/esm/cli/cli-commands.manager.mjs +2 -0
  3. package/esm/cli/cli-commands.manager.mjs.map +1 -1
  4. package/esm/cli/cli-commands.utils.mjs.map +1 -1
  5. package/esm/connectors/http-connector.d.mts.map +1 -1
  6. package/esm/connectors/http-connector.mjs +26 -4
  7. package/esm/connectors/http-connector.mjs.map +1 -1
  8. package/esm/database/create-database-action.mjs.map +1 -1
  9. package/esm/database/drop-tables-action.mjs.map +1 -1
  10. package/esm/database/migrate-action.mjs.map +1 -1
  11. package/esm/database/seed-command-action.mjs.map +1 -1
  12. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  13. package/esm/dev-server/boot-precondition-error.mjs +35 -0
  14. package/esm/dev-server/boot-precondition-error.mjs.map +1 -0
  15. package/esm/dev-server/development-server.mjs +6 -1
  16. package/esm/dev-server/development-server.mjs.map +1 -1
  17. package/esm/dev-server/files-orchestrator.mjs.map +1 -1
  18. package/esm/dev-server/health-checker/checkers/eslint-health-checker.mjs.map +1 -1
  19. package/esm/dev-server/health-checker/checkers/typescript-health-checker.mjs.map +1 -1
  20. package/esm/dev-server/start-development-server.mjs +3 -1
  21. package/esm/dev-server/start-development-server.mjs.map +1 -1
  22. package/esm/dev-server/supervisor.mjs +15 -0
  23. package/esm/dev-server/supervisor.mjs.map +1 -1
  24. package/esm/generations/add-command.action.mjs.map +1 -1
  25. package/esm/generations/features/access.feature.mjs.map +1 -1
  26. package/esm/generations/features/ai-anthropic.feature.mjs.map +1 -1
  27. package/esm/generations/features/ai-bedrock.feature.mjs.map +1 -1
  28. package/esm/generations/features/ai-google.feature.mjs.map +1 -1
  29. package/esm/generations/features/ai-ollama.feature.mjs.map +1 -1
  30. package/esm/generations/features/ai-openai.feature.mjs.map +1 -1
  31. package/esm/generations/features/ai-panoptic.feature.mjs.map +1 -1
  32. package/esm/generations/features/ai-tools.feature.mjs.map +1 -1
  33. package/esm/generations/features/ai-workspace.feature.mjs.map +1 -1
  34. package/esm/generations/features/ai.feature.mjs.map +1 -1
  35. package/esm/generations/features/herald.feature.mjs.map +1 -1
  36. package/esm/generations/features/image.feature.mjs.map +1 -1
  37. package/esm/generations/features/index.mjs.map +1 -1
  38. package/esm/generations/features/mail.feature.mjs.map +1 -1
  39. package/esm/generations/features/mongodb.feature.mjs.map +1 -1
  40. package/esm/generations/features/mysql.feature.mjs.map +1 -1
  41. package/esm/generations/features/notifications.feature.mjs.map +1 -1
  42. package/esm/generations/features/postgres.feature.mjs.map +1 -1
  43. package/esm/generations/features/react-email.feature.mjs.map +1 -1
  44. package/esm/generations/features/react.feature.mjs.map +1 -1
  45. package/esm/generations/features/redis.feature.mjs.map +1 -1
  46. package/esm/generations/features/s3.feature.mjs.map +1 -1
  47. package/esm/generations/features/scheduler.feature.mjs.map +1 -1
  48. package/esm/generations/features/ses.feature.mjs.map +1 -1
  49. package/esm/generations/features/shadcn.feature.mjs.map +1 -1
  50. package/esm/generations/features/socket.feature.mjs.map +1 -1
  51. package/esm/generations/features/tailwind.feature.mjs.map +1 -1
  52. package/esm/generations/features/test.feature.mjs.map +1 -1
  53. package/esm/generations/features/types.mjs.map +1 -1
  54. package/esm/generations/features/web.feature.mjs.map +1 -1
  55. package/esm/http/boot-port-preflight.d.mts.map +1 -1
  56. package/esm/http/boot-port-preflight.mjs +17 -3
  57. package/esm/http/boot-port-preflight.mjs.map +1 -1
  58. package/esm/http/resolve-bind-port.mjs +51 -0
  59. package/esm/http/resolve-bind-port.mjs.map +1 -0
  60. package/esm/tests/test-helpers.d.mts.map +1 -1
  61. package/esm/tests/test-helpers.mjs +4 -1
  62. package/esm/tests/test-helpers.mjs.map +1 -1
  63. package/esm/utils/detect-environment-overrides.mjs +67 -0
  64. package/esm/utils/detect-environment-overrides.mjs.map +1 -0
  65. package/esm/utils/load-environment.mjs +24 -0
  66. package/esm/utils/load-environment.mjs.map +1 -1
  67. package/esm/utils/report-environment-overrides.mjs +30 -0
  68. package/esm/utils/report-environment-overrides.mjs.map +1 -0
  69. package/esm/validation/types.d.mts +4 -1
  70. package/esm/validation/types.d.mts.map +1 -1
  71. package/llms-full.txt +10 -2
  72. package/package.json +12 -12
  73. package/skills/run-app/SKILL.md +10 -2
package/llms-full.txt CHANGED
@@ -3586,7 +3586,7 @@ The third line is conditional on the parent having actually seen child output. W
3586
3586
 
3587
3587
  That distinction is the point of the change: an unhelpful "see above" printed above an empty terminal used to be the entire diagnostic.
3588
3588
 
3589
- **Port already in use.** The HTTP connector preflights the port immediately before `listen()`, so a collision is named rather than surfacing as a raw `EADDRINUSE` from inside Fastify:
3589
+ **Port already in use.** The port is preflighted twice: once **before the early-phase connectors**, so a collision is reported without waiting for the database to connect, and again in the HTTP connector immediately before `listen()`, because a port can be taken in the seconds between the two. Either way the collision is named rather than surfacing as a raw `EADDRINUSE` from inside Fastify:
3590
3590
 
3591
3591
  ```
3592
3592
  EADDRINUSE: Port 3000 is already in use on 127.0.0.1. Stop the dev server (or whatever
@@ -3594,7 +3594,15 @@ else is listening on port 3000) and run again, or start on a free port — e.g.
3594
3594
  startHttpTestServer({ port: 3001 }).
3595
3595
  ```
3596
3596
 
3597
- The connector logs it fatally and exits `1`; the supervisor forwards that text and then prints the failure summary above it. `EACCES` on the port is treated the same way as `EADDRINUSE` (a privileged port you may not bind is also "not available"); anything else the probe throws is rethrown untouched.
3597
+ **The process exits `78` (`EX_CONFIG`), and `warlock dev`'s supervisor treats that as terminal it prints once and stops rather than restarting.** That code is the counterpart of `75`, which a worker uses to ask for a fresh process. The distinction is the point: a code error is worth restarting, and a *startup precondition* a port held by something else, a port value that is not a port, a boot validator that rejected — cannot change because we tried again six seconds later. Retrying one only reprints the diagnostic and then scrolls it away.
3598
+
3599
+ `EACCES` on the port is treated the same way as `EADDRINUSE` (a privileged port you may not bind is also "not available"); anything else the probe throws is rethrown untouched.
3600
+
3601
+ **A configured port is normalised before anything binds.** `env()` coerces a `.env` value to a number only when it round-trips exactly, so `HTTP_PORT=03999`, `" 3999"`, `+3999` and `1e3` all arrive as strings. They are resolved to a canonical integer first — used for the preflight, for `listen()`, and for the port reported to a supervisor — and a value that cannot become a usable port fails naming it. When the raw value was not already canonical, one line says so:
3602
+
3603
+ ```
3604
+ Configured http.port "03999" normalised to 3999.
3605
+ ```
3598
3606
 
3599
3607
  ### How readiness is reported
3600
3608
 
package/package.json CHANGED
@@ -25,13 +25,13 @@
25
25
  "@mongez/slug": "^1.0.7",
26
26
  "@mongez/supportive-is": "^2.1.4",
27
27
  "@mongez/time-wizard": "^1.0.6",
28
- "@warlock.js/auth": "5.3.1",
29
- "@warlock.js/cache": "5.3.1",
30
- "@warlock.js/cascade": "5.3.1",
31
- "@warlock.js/context": "5.3.1",
32
- "@warlock.js/logger": "5.3.1",
33
- "@warlock.js/seal": "5.3.1",
34
- "@warlock.js/fs": "5.3.1",
28
+ "@warlock.js/auth": "5.3.2",
29
+ "@warlock.js/cache": "5.3.2",
30
+ "@warlock.js/cascade": "5.3.2",
31
+ "@warlock.js/context": "5.3.2",
32
+ "@warlock.js/logger": "5.3.2",
33
+ "@warlock.js/seal": "5.3.2",
34
+ "@warlock.js/fs": "5.3.2",
35
35
  "chokidar": "^5.0.0",
36
36
  "dayjs": "^1.11.19",
37
37
  "es-module-lexer": "^2.0.0",
@@ -57,10 +57,10 @@
57
57
  "react": "^19.2.3",
58
58
  "react-dom": "^19.2.3",
59
59
  "@react-email/render": "^2.0.5",
60
- "@warlock.js/herald": "5.3.1",
61
- "@warlock.js/ai": "5.3.1",
62
- "@warlock.js/access": "5.3.1",
63
- "@warlock.js/notifications": "5.3.1"
60
+ "@warlock.js/herald": "5.3.2",
61
+ "@warlock.js/ai": "5.3.2",
62
+ "@warlock.js/access": "5.3.2",
63
+ "@warlock.js/notifications": "5.3.2"
64
64
  },
65
65
  "peerDependenciesMeta": {
66
66
  "sharp": {
@@ -123,7 +123,7 @@
123
123
  ],
124
124
  "author": "hassanzohdy",
125
125
  "license": "MIT",
126
- "version": "5.3.1",
126
+ "version": "5.3.2",
127
127
  "type": "module",
128
128
  "main": "./esm/index.mjs",
129
129
  "module": "./esm/index.mjs",
@@ -309,7 +309,7 @@ The third line is conditional on the parent having actually seen child output. W
309
309
 
310
310
  That distinction is the point of the change: an unhelpful "see above" printed above an empty terminal used to be the entire diagnostic.
311
311
 
312
- **Port already in use.** The HTTP connector preflights the port immediately before `listen()`, so a collision is named rather than surfacing as a raw `EADDRINUSE` from inside Fastify:
312
+ **Port already in use.** The port is preflighted twice: once **before the early-phase connectors**, so a collision is reported without waiting for the database to connect, and again in the HTTP connector immediately before `listen()`, because a port can be taken in the seconds between the two. Either way the collision is named rather than surfacing as a raw `EADDRINUSE` from inside Fastify:
313
313
 
314
314
  ```
315
315
  EADDRINUSE: Port 3000 is already in use on 127.0.0.1. Stop the dev server (or whatever
@@ -317,7 +317,15 @@ else is listening on port 3000) and run again, or start on a free port — e.g.
317
317
  startHttpTestServer({ port: 3001 }).
318
318
  ```
319
319
 
320
- The connector logs it fatally and exits `1`; the supervisor forwards that text and then prints the failure summary above it. `EACCES` on the port is treated the same way as `EADDRINUSE` (a privileged port you may not bind is also "not available"); anything else the probe throws is rethrown untouched.
320
+ **The process exits `78` (`EX_CONFIG`), and `warlock dev`'s supervisor treats that as terminal it prints once and stops rather than restarting.** That code is the counterpart of `75`, which a worker uses to ask for a fresh process. The distinction is the point: a code error is worth restarting, and a *startup precondition* a port held by something else, a port value that is not a port, a boot validator that rejected — cannot change because we tried again six seconds later. Retrying one only reprints the diagnostic and then scrolls it away.
321
+
322
+ `EACCES` on the port is treated the same way as `EADDRINUSE` (a privileged port you may not bind is also "not available"); anything else the probe throws is rethrown untouched.
323
+
324
+ **A configured port is normalised before anything binds.** `env()` coerces a `.env` value to a number only when it round-trips exactly, so `HTTP_PORT=03999`, `" 3999"`, `+3999` and `1e3` all arrive as strings. They are resolved to a canonical integer first — used for the preflight, for `listen()`, and for the port reported to a supervisor — and a value that cannot become a usable port fails naming it. When the raw value was not already canonical, one line says so:
325
+
326
+ ```
327
+ Configured http.port "03999" normalised to 3999.
328
+ ```
321
329
 
322
330
  ### How readiness is reported
323
331