@stacksjs/buddy 0.70.164 → 0.70.166

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/commands/dev.js +28 -10
  2. package/package.json +46 -44
@@ -635,18 +635,36 @@ async function probeDevServerHttp(port) {
635
635
  return !1;
636
636
  }
637
637
  async function findAvailablePort(preferred, attempts = 20) {
638
- for (let port = preferred;port < preferred + attempts; port++) {
639
- let server;
640
- try {
641
- server = Bun.serve({ port, hostname: "0.0.0.0", reusePort: !1, fetch: () => new Response });
642
- } catch {
643
- continue;
644
- }
645
- server.stop(!0);
646
- return port;
647
- }
638
+ for (let port = preferred;port < preferred + attempts; port++)
639
+ if (await portIsFree(port))
640
+ return port;
648
641
  return preferred;
649
642
  }
643
+ async function portIsFree(port) {
644
+ for (const host of ["127.0.0.1", "::1"])
645
+ if (await someoneIsListening(port, host))
646
+ return !1;
647
+ let server;
648
+ try {
649
+ server = Bun.serve({ port, hostname: "0.0.0.0", reusePort: !1, fetch: () => new Response });
650
+ } catch {
651
+ return !1;
652
+ }
653
+ server.stop(!0);
654
+ return !0;
655
+ }
656
+ async function someoneIsListening(port, host) {
657
+ const { connect } = await import("node:net");
658
+ return new Promise((resolve) => {
659
+ const socket = connect({ port, host }), finish = (listening) => {
660
+ socket.destroy();
661
+ resolve(listening);
662
+ };
663
+ socket.setTimeout(300, () => finish(!1));
664
+ socket.once("connect", () => finish(!0));
665
+ socket.once("error", () => finish(!1));
666
+ });
667
+ }
650
668
  async function waitForPort(port, timeoutMs) {
651
669
  const deadline = Date.now() + timeoutMs;
652
670
  while (Date.now() < deadline) {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/buddy",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.70.164",
5
+ "version": "0.70.166",
6
6
  "description": "Meet Buddy. The Stacks runtime.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -91,56 +91,58 @@
91
91
  "prepublishOnly": "bun run build"
92
92
  },
93
93
  "dependencies": {
94
- "@stacksjs/actions": "^0.70.164",
95
- "@stacksjs/ai": "^0.70.164",
96
- "@stacksjs/alias": "^0.70.164",
97
- "@stacksjs/arrays": "^0.70.164",
98
- "@stacksjs/auth": "^0.70.164",
99
- "@stacksjs/build": "^0.70.164",
100
- "@stacksjs/cache": "^0.70.164",
101
- "@stacksjs/cli": "^0.70.164",
94
+ "@stacksjs/actions": "^0.70.166",
95
+ "@stacksjs/ai": "^0.70.166",
96
+ "@stacksjs/alias": "^0.70.166",
97
+ "@stacksjs/arrays": "^0.70.166",
98
+ "@stacksjs/auth": "^0.70.166",
99
+ "@stacksjs/build": "^0.70.166",
100
+ "@stacksjs/cache": "^0.70.166",
101
+ "@stacksjs/cli": "^0.70.166",
102
102
  "@stacksjs/clapp": "^0.2.12",
103
- "@stacksjs/cloud": "^0.70.164",
104
- "@stacksjs/collections": "^0.70.164",
105
- "@stacksjs/config": "^0.70.164",
106
- "@stacksjs/database": "^0.70.164",
107
- "@stacksjs/desktop": "^0.70.164",
108
- "@stacksjs/dns": "^0.70.164",
109
- "@stacksjs/email": "^0.70.164",
110
- "@stacksjs/enums": "^0.70.164",
111
- "@stacksjs/error-handling": "^0.70.164",
112
- "@stacksjs/events": "^0.70.164",
113
- "@stacksjs/git": "^0.70.164",
103
+ "@stacksjs/cloud": "^0.70.166",
104
+ "@stacksjs/collections": "^0.70.166",
105
+ "@stacksjs/config": "^0.70.166",
106
+ "@stacksjs/database": "^0.70.166",
107
+ "@stacksjs/desktop": "^0.70.166",
108
+ "@stacksjs/dns": "^0.70.166",
109
+ "@stacksjs/email": "^0.70.166",
110
+ "@stacksjs/enums": "^0.70.166",
111
+ "@stacksjs/error-handling": "^0.70.166",
112
+ "@stacksjs/events": "^0.70.166",
113
+ "@stacksjs/git": "^0.70.166",
114
114
  "@stacksjs/gitit": "^0.2.5",
115
- "@stacksjs/health": "^0.70.164",
115
+ "@stacksjs/health": "^0.70.166",
116
116
  "@stacksjs/dnsx": "^0.2.3",
117
117
  "@stacksjs/httx": "^0.1.10",
118
- "@stacksjs/lint": "^0.70.164",
119
- "@stacksjs/logging": "^0.70.164",
120
- "@stacksjs/notifications": "^0.70.164",
121
- "@stacksjs/objects": "^0.70.164",
122
- "@stacksjs/orm": "^0.70.164",
123
- "@stacksjs/path": "^0.70.164",
124
- "@stacksjs/skills": "^0.70.164",
125
- "@stacksjs/payments": "^0.70.164",
126
- "@stacksjs/realtime": "^0.70.164",
127
- "@stacksjs/router": "^0.70.164",
118
+ "@stacksjs/lint": "^0.70.166",
119
+ "@stacksjs/logging": "^0.70.166",
120
+ "@stacksjs/notifications": "^0.70.166",
121
+ "@stacksjs/objects": "^0.70.166",
122
+ "@stacksjs/orm": "^0.70.166",
123
+ "@stacksjs/path": "^0.70.166",
124
+ "@stacksjs/skills": "^0.70.166",
125
+ "@stacksjs/payments": "^0.70.166",
126
+ "@stacksjs/realtime": "^0.70.166",
127
+ "@stacksjs/router": "^0.70.166",
128
128
  "@stacksjs/rpx": "^0.11.31",
129
- "@stacksjs/search-engine": "^0.70.164",
130
- "@stacksjs/security": "^0.70.164",
131
- "@stacksjs/server": "^0.70.164",
132
- "@stacksjs/storage": "^0.70.164",
133
- "@stacksjs/strings": "^0.70.164",
134
- "@stacksjs/testing": "^0.70.164",
135
- "@stacksjs/tunnel": "^0.70.164",
136
- "@stacksjs/types": "^0.70.164",
137
- "@stacksjs/ui": "^0.70.164",
138
- "@stacksjs/utils": "^0.70.164",
139
- "@stacksjs/validation": "^0.70.164",
140
- "@stacksjs/ts-cloud": "^0.7.60"
129
+ "@stacksjs/search-engine": "^0.70.166",
130
+ "@stacksjs/security": "^0.70.166",
131
+ "@stacksjs/server": "^0.70.166",
132
+ "@stacksjs/storage": "^0.70.166",
133
+ "@stacksjs/strings": "^0.70.166",
134
+ "@stacksjs/testing": "^0.70.166",
135
+ "@stacksjs/tunnel": "^0.70.166",
136
+ "@stacksjs/types": "^0.70.166",
137
+ "@stacksjs/ui": "^0.70.166",
138
+ "@stacksjs/utils": "^0.70.166",
139
+ "@stacksjs/validation": "^0.70.166",
140
+ "@stacksjs/ts-cloud": "^0.7.60",
141
+ "ajv": "^8.20.0",
142
+ "ajv-formats": "^3.0.1"
141
143
  },
142
144
  "devDependencies": {
143
145
  "better-dx": "^0.2.17"
144
146
  },
145
147
  "web-types": "./web-types.json"
146
- }
148
+ }