@bitmagic/cli 0.1.59-dev.11 → 0.1.59-dev.13
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/README.md +62 -15
- package/dist/cli.d.ts +3 -3
- package/dist/commands/dev.d.ts +2 -2
- package/dist/commands/dev.js +38 -19
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/forge.d.ts +4 -3
- package/dist/commands/forge.js +9 -7
- package/dist/commands/forge.js.map +1 -1
- package/dist/commands/init.js +2 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/reload.d.ts +1 -1
- package/dist/commands/reload.js +6 -3
- package/dist/commands/reload.js.map +1 -1
- package/dist/commands/verify.js +17 -6
- package/dist/commands/verify.js.map +1 -1
- package/dist/editor/design.js +70 -0
- package/dist/editor/design.js.map +1 -1
- package/dist/editor/server.d.ts +1 -1
- package/dist/editor/shell-page.js +92 -6
- package/dist/editor/shell-page.js.map +1 -1
- package/dist/forge/voxelize-session.js +5 -4
- package/dist/forge/voxelize-session.js.map +1 -1
- package/dist/local-port.d.ts +36 -11
- package/dist/local-port.js +43 -14
- package/dist/local-port.js.map +1 -1
- package/dist/mobile/dev-cert.js +2 -1
- package/dist/mobile/dev-cert.js.map +1 -1
- package/dist/port-lane.d.ts +59 -0
- package/dist/port-lane.js +66 -0
- package/dist/port-lane.js.map +1 -0
- package/dist/project/dev-handle.d.ts +6 -1
- package/dist/project/dev-handle.js +11 -3
- package/dist/project/dev-handle.js.map +1 -1
- package/dist/scaffold/project-files.js +6 -2
- package/dist/scaffold/project-files.js.map +1 -1
- package/package.json +4 -4
package/dist/commands/verify.js
CHANGED
|
@@ -4,7 +4,9 @@ import * as path from 'path';
|
|
|
4
4
|
import { spawn, spawnSync } from 'child_process';
|
|
5
5
|
import { CliError } from '../errors.js';
|
|
6
6
|
import { loadProjectContext, projectBin } from '../project/context.js';
|
|
7
|
-
import {
|
|
7
|
+
import { readLiveDevHandle } from '../project/dev-handle.js';
|
|
8
|
+
import { reservePortInLane, laneExhaustedMessage } from '../local-port.js';
|
|
9
|
+
import { currentPortLane } from '../port-lane.js';
|
|
8
10
|
import { browserLaunchPlan, shouldRetrySoftwareGl, softwareGlLaunchPlan, } from '../browser-gl.js';
|
|
9
11
|
import { runHeadlessCheck } from '../verify/browser.js';
|
|
10
12
|
import { verifyCheckOptions } from '../verify/check-options.js';
|
|
@@ -27,12 +29,18 @@ const DEFAULT_SETTLE_MS = 15_000;
|
|
|
27
29
|
* and verify then reports a game that loads and renders while the player falls through the floor
|
|
28
30
|
* forever. Verify's whole job is to answer "did this break", so it must not be the thing breaking
|
|
29
31
|
* it. See local-port.ts.
|
|
32
|
+
*
|
|
33
|
+
* `exclude` carries the ports a `bitmagic dev` is already serving this project on. Verify is meant
|
|
34
|
+
* to be run WHILE dev is open — the README says to leave it running — and the lane split only rules
|
|
35
|
+
* out the other release line's dev server, not this one's. Without this the only thing between a
|
|
36
|
+
* verify run and the dev server it is testing alongside is the scan's random offset and vite's
|
|
37
|
+
* `--strictPort` failing loudly.
|
|
30
38
|
*/
|
|
31
|
-
async function freePort() {
|
|
32
|
-
const
|
|
39
|
+
async function freePort(exclude = new Set()) {
|
|
40
|
+
const lane = currentPortLane();
|
|
41
|
+
const port = await reservePortInLane(lane, exclude);
|
|
33
42
|
if (port === null) {
|
|
34
|
-
throw new CliError(
|
|
35
|
-
+ 'range the asset CDN allows as an origin. Stop whatever is holding them and verify again.');
|
|
43
|
+
throw new CliError(laneExhaustedMessage(lane, 'Stop whatever is holding them and verify again.'));
|
|
36
44
|
}
|
|
37
45
|
return port;
|
|
38
46
|
}
|
|
@@ -197,7 +205,10 @@ export const verifyCommand = defineCommand({
|
|
|
197
205
|
if (!keeping.has(stale))
|
|
198
206
|
fs.rmSync(stale, { force: true });
|
|
199
207
|
}
|
|
200
|
-
|
|
208
|
+
// A `bitmagic dev` serving this project holds two ports in this same lane, and the README
|
|
209
|
+
// tells creators to leave it open — so its own numbers are the likeliest collision verify has.
|
|
210
|
+
const dev = readLiveDevHandle(context.root);
|
|
211
|
+
const port = await freePort(dev === null ? new Set() : new Set([dev.gamePort, dev.editorPort]));
|
|
201
212
|
const runSettings = {
|
|
202
213
|
port,
|
|
203
214
|
renderer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAA2B,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC;;;;;;;;GAQG;AACH,KAAK,UAAU,QAAQ;IACrB,MAAM,IAAI,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC5C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,QAAQ,CAChB,wBAAwB,qBAAqB,QAAQ,qBAAqB,iBAAiB;cACzF,0FAA0F,CAC7F,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,KAAmB,EAAE,SAAuB;IACrE,OAAO,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QACtC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,CAAC,mDAAmD;YAChF,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO;YACvB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,CACJ,IAAI,QAAQ,CACV,mDAAmD,IAAI,IAAI;gBACzD,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAChC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,IAAI,QAAQ,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,GAAuB;IAC/C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC;IACpD,MAAM,IAAI,QAAQ,CAAC,+CAA+C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC;AAED;qGACqG;AACrG,SAAS,eAAe,CAAC,GAAuB;IAC9C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,iBAAiB,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,QAAQ,CAChB,4DAA4D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,YAAgC;IACxD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CACR,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;YACrC,CAAC,CAAC,cAAc,OAAO,GAAG;YAC1B,CAAC,CAAC,kBAAkB,OAAO,OAAO,CACrC,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,GAAG,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,SAAS,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,gFAAgF;QAChF,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,OAAO,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,iBAAiB,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;IAC/F,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC,iBAAiB,yBAAyB;kBACrF,iDAAiD;SACtD;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8EAA8E;SAC5F;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+EAA+E;kBACxF,yEAAyE;kBACzE,0EAA0E;SAC/E;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yEAAyE;kBAClF,yDAAyD;SAC9D;QACD,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,2EAA2E;kBACpF,uCAAuC;SAC5C;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,kEAAkE;SAChF;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;QAClC,wFAAwF;QACxF,gFAAgF;QAChF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QAC9D,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1E,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,QAAQ,CAAC,0CAA0C,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,+EAA+E;gBAC/E,MAAM,IAAI,QAAQ,CAAC,8CAA8C,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,sBAAsB,CAAC,eAAe,EAAE,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5F,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,cAAc,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG;YACrE,CAAC,CAAC,IAAI,CAAC,IAAI,CACd,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,2FAA2F;QAC3F,wFAAwF;QACxF,2FAA2F;QAC3F,kEAAkE;QAClE,MAAM,OAAO,GAAG,IAAI;YAClB,CAAC,CAAC,IAAI,GAAG,EAAU;YACnB,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3F,KAAK,MAAM,KAAK,IAAI,wBAAwB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAsB;YACrC,IAAI;YACJ,QAAQ;YACR,QAAQ;YACR,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;QACF,IAAI,MAAgC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,EAAE;gBAC7D,GAAG,EAAE,OAAO,CAAC,IAAI;gBACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;gBAC3B,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;aAC5C,CAAC,CAAC;YAEH,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,cAAc,CAAC;oBACnB,GAAG,WAAW;oBACd,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,GAAG;oBACH,WAAW;oBACX,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,MAAM;oBACN,gBAAgB;iBACjB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAwB,EAAE,CAAC;YACrC,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,0FAA0F;YAC1F,qFAAqF;YACrF,IAAI,YAAgD,CAAC;YAErD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACzD,MAAM,YAAY,GAAG,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACtE,IAAI,YAAY,GAAG,MAAM,gBAAgB,CAAC;oBACxC,GAAG,YAAY;oBACf,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;iBACjD,CAAC,CAAC;gBACH,IAAI,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;gBAE9F,IAAI,qBAAqB,GAAG,KAAK,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnE,uFAAuF;oBACvF,wFAAwF;oBACxF,qFAAqF;oBACrF,qDAAqD;oBACrD,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;oBACnF,YAAY,GAAG,MAAM,gBAAgB,CAAC;wBACpC,GAAG,YAAY;wBACf,WAAW,EAAE,KAAK,CAAC,gBAAgB;wBACnC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;qBACpD,CAAC,CAAC;oBACH,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;oBAC1F,qBAAqB,GAAG,IAAI,CAAC;gBAC/B,CAAC;gBAED,MAAM,eAAe,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,IAAI,YAAY,CAAC;gBACvE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,QAAQ,gBAAgB,eAAe,UAAU,CAAC,CAAC;gBACpF,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAEzD,IAAI,YAAY,KAAK,SAAS;oBAAE,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;gBACzE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gBACnG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAClC,IAAI,CAAC,IAAI;oBAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,mBAAmB,CACjC,MAAM,CAAC,MAAM,EACb,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAChC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACxB,MAAM,CAAC,MAAM,CACd,CAAC;YACF,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE;gBACnD,KAAK,EAAE,iBAAiB;gBACxB,sFAAsF;gBACtF,oCAAoC;gBACpC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;aACrC,CAAC,CAAC;YACH,oFAAoF;YACpF,4EAA4E;YAC5E,uFAAuF;YACvF,yFAAyF;YACzF,2BAA2B;YAC3B,MAAM,SAAS,GAAG,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC;gBACZ,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;gBACjC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;gBACjC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;gBACvC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;gBACjC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;gBAC3C,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;gBACnC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY;gBACzC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;gBACjC,qBAAqB,EAAE,OAAO,CAAC,MAAM,CAAC,qBAAqB;gBAC3D,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;gBAC7B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;gBACjC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;gBAC7B,WAAW;gBACX,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc;aAC5D,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/editor/design.js
CHANGED
|
@@ -147,6 +147,76 @@ export const BITMAGIC_CONTROLS_CSS = `
|
|
|
147
147
|
.bm-pill--ghost { background: transparent; border-color: var(--bm-text-dim); color: var(--bm-text-muted); }
|
|
148
148
|
.bm-pill--ghost:hover:not(:disabled) { background: transparent; border-color: var(--bm-text); color: var(--bm-text); }
|
|
149
149
|
|
|
150
|
+
/* Pressed — a toggle whose panel is open. Deliberately NOT Aquamarine: the accent is already
|
|
151
|
+
spent on the active tab, and DESIGN.md does not stack accents. The pill reads as pushed in. */
|
|
152
|
+
.bm-pill--pressed { background: var(--bm-surface-card); border-color: var(--bm-text-dim); }
|
|
153
|
+
|
|
154
|
+
/* === Circular icon button =================================================================
|
|
155
|
+
DESIGN.md's "Toolbar / header icon controls". Filled rather than transparent, because in the
|
|
156
|
+
dev view it sits among filled pills rather than on the engine's own panel. */
|
|
157
|
+
.bm-icon-btn {
|
|
158
|
+
background: var(--bm-surface-alt);
|
|
159
|
+
color: var(--bm-text);
|
|
160
|
+
border: 1px solid var(--bm-border);
|
|
161
|
+
border-radius: 50%;
|
|
162
|
+
width: 26px;
|
|
163
|
+
height: 26px;
|
|
164
|
+
padding: 0;
|
|
165
|
+
display: flex;
|
|
166
|
+
align-items: center;
|
|
167
|
+
justify-content: center;
|
|
168
|
+
font-family: var(--bm-font);
|
|
169
|
+
font-size: 15px;
|
|
170
|
+
line-height: 1;
|
|
171
|
+
cursor: pointer;
|
|
172
|
+
transition: background .15s ease, border-color .15s ease, color .15s ease;
|
|
173
|
+
}
|
|
174
|
+
.bm-icon-btn:hover:not(:disabled) { background: var(--bm-surface-card); border-color: var(--bm-text-dim); }
|
|
175
|
+
.bm-icon-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px rgba(160, 218, 185, .45); }
|
|
176
|
+
|
|
177
|
+
/* === Vertical separator (toolbar) ========================================================= */
|
|
178
|
+
.bm-separator-v { width: 1px; align-self: stretch; margin: 12px 4px; background: var(--bm-border); }
|
|
179
|
+
|
|
180
|
+
/* === Dropdown menu ========================================================================
|
|
181
|
+
The overflow behind a toolbar's rare actions, so the bar stops growing a pill per feature.
|
|
182
|
+
Elevated (2) in DESIGN.md's depth scale — shadow-card is the dropdown one, shadow-dialog
|
|
183
|
+
belongs to modals. Rows are sentence-case Regular: this is content voice, not label voice,
|
|
184
|
+
which is why they are the one control here that is not uppercase. */
|
|
185
|
+
.bm-menu-wrap { position: relative; display: flex; align-items: center; }
|
|
186
|
+
.bm-menu {
|
|
187
|
+
display: none;
|
|
188
|
+
position: absolute;
|
|
189
|
+
top: 100%;
|
|
190
|
+
right: 0;
|
|
191
|
+
margin-top: 8px;
|
|
192
|
+
z-index: 20;
|
|
193
|
+
min-width: 200px;
|
|
194
|
+
padding: 6px;
|
|
195
|
+
background: var(--bm-surface);
|
|
196
|
+
border: 1px solid var(--bm-border-muted);
|
|
197
|
+
border-radius: 8px;
|
|
198
|
+
box-shadow: var(--bm-shadow-card);
|
|
199
|
+
}
|
|
200
|
+
.bm-menu.show { display: flex; flex-direction: column; }
|
|
201
|
+
.bm-menu-item {
|
|
202
|
+
background: transparent;
|
|
203
|
+
color: var(--bm-text);
|
|
204
|
+
border: none;
|
|
205
|
+
border-radius: 4px;
|
|
206
|
+
padding: 10px 12px;
|
|
207
|
+
font-family: var(--bm-font);
|
|
208
|
+
font-size: 14px;
|
|
209
|
+
font-weight: 400;
|
|
210
|
+
text-align: left;
|
|
211
|
+
white-space: nowrap;
|
|
212
|
+
cursor: pointer;
|
|
213
|
+
transition: background .15s ease;
|
|
214
|
+
}
|
|
215
|
+
.bm-menu-item:hover:not(:disabled) { background: var(--bm-border-muted); }
|
|
216
|
+
.bm-menu-item:focus-visible { outline: none; background: var(--bm-border-muted);
|
|
217
|
+
box-shadow: 0 0 0 2px rgba(160, 218, 185, .45); }
|
|
218
|
+
.bm-menu-item:disabled { opacity: .5; cursor: default; }
|
|
219
|
+
|
|
150
220
|
/* === Input ================================================================================ */
|
|
151
221
|
.bm-input {
|
|
152
222
|
background: var(--bm-surface-alt);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/editor/design.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4FAA4F;AAC5F,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,EAAE,EAAE,SAAS;IACb,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IAEtB,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IAEvB,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,SAAS;IAEtB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IAEjB,YAAY,EAAE,+BAA+B;IAC7C,UAAU,EAAE,8BAA8B;IAC1C,QAAQ,EAAE,oCAAoC;IAC9C,QAAQ,EAAE,kCAAkC;IAC5C,cAAc,EAAE,yBAAyB;IACzC,gBAAgB,EAAE,8DAA8D;IAEhF,IAAI,EAAE,8EAA8E;IACpF,QAAQ,EAAE,gDAAgD;CAClD,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;0HAEwF,CAAC;AAE3H,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;eAGpB,EAAE,CAAC,EAAE;oBACA,EAAE,CAAC,OAAO;wBACN,EAAE,CAAC,UAAU;yBACZ,EAAE,CAAC,WAAW;iBACtB,EAAE,CAAC,WAAW;uBACR,EAAE,CAAC,SAAS;qBACd,EAAE,CAAC,OAAO;mBACZ,EAAE,CAAC,MAAM;yBACH,EAAE,CAAC,WAAW;iBACtB,EAAE,CAAC,IAAI;uBACD,EAAE,CAAC,SAAS;iBAClB,EAAE,CAAC,IAAI;uBACD,EAAE,CAAC,SAAS;oBACf,EAAE,CAAC,OAAO;mBACX,EAAE,CAAC,MAAM;;;;;;;0BAOF,EAAE,CAAC,YAAY;wBACjB,EAAE,CAAC,UAAU;sBACf,EAAE,CAAC,QAAQ;sBACX,EAAE,CAAC,QAAQ;iBAChB,EAAE,CAAC,IAAI;sBACF,EAAE,CAAC,QAAQ;;CAEhC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/editor/design.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4FAA4F;AAC5F,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,EAAE,EAAE,SAAS;IACb,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IAEtB,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IAEvB,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,SAAS;IAEtB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IAEjB,YAAY,EAAE,+BAA+B;IAC7C,UAAU,EAAE,8BAA8B;IAC1C,QAAQ,EAAE,oCAAoC;IAC9C,QAAQ,EAAE,kCAAkC;IAC5C,cAAc,EAAE,yBAAyB;IACzC,gBAAgB,EAAE,8DAA8D;IAEhF,IAAI,EAAE,8EAA8E;IACpF,QAAQ,EAAE,gDAAgD;CAClD,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;0HAEwF,CAAC;AAE3H,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;eAGpB,EAAE,CAAC,EAAE;oBACA,EAAE,CAAC,OAAO;wBACN,EAAE,CAAC,UAAU;yBACZ,EAAE,CAAC,WAAW;iBACtB,EAAE,CAAC,WAAW;uBACR,EAAE,CAAC,SAAS;qBACd,EAAE,CAAC,OAAO;mBACZ,EAAE,CAAC,MAAM;yBACH,EAAE,CAAC,WAAW;iBACtB,EAAE,CAAC,IAAI;uBACD,EAAE,CAAC,SAAS;iBAClB,EAAE,CAAC,IAAI;uBACD,EAAE,CAAC,SAAS;oBACf,EAAE,CAAC,OAAO;mBACX,EAAE,CAAC,MAAM;;;;;;;0BAOF,EAAE,CAAC,YAAY;wBACjB,EAAE,CAAC,UAAU;sBACf,EAAE,CAAC,QAAQ;sBACX,EAAE,CAAC,QAAQ;iBAChB,EAAE,CAAC,IAAI;sBACF,EAAE,CAAC,QAAQ;;CAEhC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqInB,EAAE,CAAC,cAAc;;;;;;;kCAOD,EAAE,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDpD,CAAC"}
|
package/dist/editor/server.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface EditorServerOptions {
|
|
|
20
20
|
log?: (message: string) => void;
|
|
21
21
|
}
|
|
22
22
|
export interface EditorServer {
|
|
23
|
-
/** The URL to open
|
|
23
|
+
/** The URL to open — the shell port this install's lane resolved to (port-lane.ts). */
|
|
24
24
|
readonly url: string;
|
|
25
25
|
/** Where editor actions are journalled, so the startup banner can point an agent at it. */
|
|
26
26
|
readonly journalPath: string;
|
|
@@ -146,6 +146,13 @@ ${BITMAGIC_CONTROLS_CSS}
|
|
|
146
146
|
#auto { display: flex; align-items: center; gap: 6px; font-size: 12px;
|
|
147
147
|
color: var(--bm-text-muted); cursor: pointer; }
|
|
148
148
|
#auto input { margin: 0; accent-color: var(--bm-aqua); }
|
|
149
|
+
/* The Published pill used to un-dim itself when a publish landed, which is how a creator learnt
|
|
150
|
+
it had finished. Behind a menu that signal would be invisible, so the trigger carries it:
|
|
151
|
+
Aquamarine, the same "something landed" this page already uses for a fresh asset row. */
|
|
152
|
+
#more { position: relative; }
|
|
153
|
+
#more.news::after { content: ''; position: absolute; top: -1px; right: -1px;
|
|
154
|
+
width: 6px; height: 6px; border-radius: 50%;
|
|
155
|
+
background: var(--bm-aqua); border: 1px solid var(--bm-surface); }
|
|
149
156
|
.banner { display: none; align-items: center; gap: 12px; flex: none; padding: 10px 16px;
|
|
150
157
|
background: var(--bm-tint-warning); border-bottom: 1px solid var(--bm-pumpkin);
|
|
151
158
|
color: var(--bm-text); }
|
|
@@ -251,11 +258,18 @@ ${BOOT_LOADER_CSS}
|
|
|
251
258
|
<input id="auto-toggle" type="checkbox" checked> Auto-reload
|
|
252
259
|
</label>
|
|
253
260
|
<span id="status"><span id="dot"></span><span id="status-text">Loading…</span></span>
|
|
254
|
-
<
|
|
255
|
-
<button id="assets-toggle" class="bm-pill" type="button" title="Show the assets in this project and what is being made">Assets</button>
|
|
256
|
-
<
|
|
257
|
-
<button id="
|
|
258
|
-
|
|
261
|
+
<span class="bm-separator-v"></span>
|
|
262
|
+
<button id="assets-toggle" class="bm-pill" type="button" aria-pressed="true" title="Show the assets in this project and what is being made">Assets</button>
|
|
263
|
+
<span class="bm-separator-v"></span>
|
|
264
|
+
<button id="shot" class="bm-pill" type="button" title="Copy the current frame to the clipboard (S)">Screenshot</button>
|
|
265
|
+
<button id="reload" class="bm-pill" type="button" title="Reload the game (R)">Reload</button>
|
|
266
|
+
<div class="bm-menu-wrap">
|
|
267
|
+
<button id="more" class="bm-icon-btn" type="button" aria-haspopup="true" aria-expanded="false" aria-label="More actions" title="More actions">⋯</button>
|
|
268
|
+
<div id="more-menu" class="bm-menu">
|
|
269
|
+
<button id="publish-toggle" class="bm-menu-item" type="button" disabled>Published…</button>
|
|
270
|
+
${recording ? ' <button id="record" class="bm-menu-item" type="button">Record gameplay…</button>\n' : ''} <button id="motion" class="bm-menu-item" type="button">Record motion…</button>
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
259
273
|
</div>
|
|
260
274
|
<div id="build-banner" class="banner">
|
|
261
275
|
<span id="build-message"></span>
|
|
@@ -318,6 +332,8 @@ ${ASSET_DETAIL_HTML}
|
|
|
318
332
|
var TAB_KEY = 'bitmagic.dev.tab';
|
|
319
333
|
var AUTO_KEY = 'bitmagic.dev.autoReload';
|
|
320
334
|
var ASSETS_KEY = 'bitmagic.dev.assets';
|
|
335
|
+
// The publish the creator has already been shown, so the trigger's dot means NEW, not "exists".
|
|
336
|
+
var SEEN_PUBLISH_KEY = 'bitmagic.dev.seenPublish';
|
|
321
337
|
// Dev line only — see recordingAvailable() in recording-sink.ts. On a release build the pill and
|
|
322
338
|
// the panel are not in the document at all, so this also guards the lookups below finding null.
|
|
323
339
|
var RECORDING_ENABLED = ${recording ? 'true' : 'false'};
|
|
@@ -330,6 +346,8 @@ ${ASSET_DETAIL_HTML}
|
|
|
330
346
|
var statusText = document.getElementById('status-text');
|
|
331
347
|
var banner = document.getElementById('banner');
|
|
332
348
|
var publishToggle = document.getElementById('publish-toggle');
|
|
349
|
+
var moreButton = document.getElementById('more');
|
|
350
|
+
var moreMenu = document.getElementById('more-menu');
|
|
333
351
|
var publishOverlay = document.getElementById('publish-overlay');
|
|
334
352
|
var publishUrl = document.getElementById('publish-url');
|
|
335
353
|
var publishVisibility = document.getElementById('publish-visibility');
|
|
@@ -1121,6 +1139,9 @@ ${ASSET_DETAIL_HTML}
|
|
|
1121
1139
|
publishToggle.title = lastPublish
|
|
1122
1140
|
? 'Where this game is published'
|
|
1123
1141
|
: 'Publish the game to get a link and a QR code';
|
|
1142
|
+
// The pill used to carry this by un-dimming in the bar. Inside a menu nobody would see it, so
|
|
1143
|
+
// the trigger wears a dot until the creator has opened the menu on this particular publish.
|
|
1144
|
+
moreButton.classList.toggle('news', !!lastPublish && readPref(SEEN_PUBLISH_KEY, '') !== lastPublish.at);
|
|
1124
1145
|
if (!lastPublish && publishOverlay.classList.contains('show')) closePublish();
|
|
1125
1146
|
}
|
|
1126
1147
|
|
|
@@ -1148,7 +1169,9 @@ ${ASSET_DETAIL_HTML}
|
|
|
1148
1169
|
publishOverlay.classList.remove('show');
|
|
1149
1170
|
// Drop the image so a session that publishes repeatedly does not keep every code it drew.
|
|
1150
1171
|
publishQr.removeAttribute('src');
|
|
1151
|
-
publishToggle
|
|
1172
|
+
// Not publishToggle: it lives inside the menu, which is closed by now, and focusing a hidden
|
|
1173
|
+
// element drops focus to the body. The trigger is the thing that is still on screen.
|
|
1174
|
+
moreButton.focus();
|
|
1152
1175
|
}
|
|
1153
1176
|
|
|
1154
1177
|
/**
|
|
@@ -2046,11 +2069,35 @@ ${ASSET_DETAIL_HTML}
|
|
|
2046
2069
|
// The page had no keyboard handling at all before this, so #hq-overlay gains Escape with it.
|
|
2047
2070
|
document.addEventListener('keydown', function (event) {
|
|
2048
2071
|
if (event.key !== 'Escape') return;
|
|
2072
|
+
// Innermost first. The motion and publish dialogs were missing from this chain entirely —
|
|
2073
|
+
// they only closed on their own button or the backdrop.
|
|
2074
|
+
if (closeMore()) return;
|
|
2049
2075
|
if (closeAssetDetail()) return;
|
|
2050
2076
|
if (closeRecordingPanel()) return;
|
|
2077
|
+
if (closeMotionPanel()) return;
|
|
2078
|
+
if (publishOverlay.classList.contains('show')) { closePublish(); return; }
|
|
2051
2079
|
hqOverlay.classList.remove('show');
|
|
2052
2080
|
});
|
|
2053
2081
|
|
|
2082
|
+
/**
|
|
2083
|
+
* Reload and Screenshot are the two things pressed all session, so they get a key each.
|
|
2084
|
+
*
|
|
2085
|
+
* Bare letters, because every modifier combination worth having is the browser's (Cmd+R, Cmd+S).
|
|
2086
|
+
* That means guarding the cases where a letter is text rather than a command: a field, or a
|
|
2087
|
+
* dialog that is up. Note the game iframe is a different origin, so once the creator clicks into
|
|
2088
|
+
* the game these stop firing until they click the chrome again — nothing here can see those keys,
|
|
2089
|
+
* which is exactly why the recorder's own F9 is bound inside the engine instead.
|
|
2090
|
+
*/
|
|
2091
|
+
document.addEventListener('keydown', function (event) {
|
|
2092
|
+
if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;
|
|
2093
|
+
var target = event.target;
|
|
2094
|
+
if (target && (target.isContentEditable || /^(?:INPUT|TEXTAREA|SELECT)$/.test(target.tagName))) return;
|
|
2095
|
+
if (document.querySelector('.bm-overlay.show')) return;
|
|
2096
|
+
var key = event.key.toLowerCase();
|
|
2097
|
+
if (key === 'r') { event.preventDefault(); reloadUnlessSculpting(); }
|
|
2098
|
+
else if (key === 's') { event.preventDefault(); takeScreenshot(); }
|
|
2099
|
+
});
|
|
2100
|
+
|
|
2054
2101
|
/**
|
|
2055
2102
|
* Lend the cached thumbnails to the engine's own asset palette.
|
|
2056
2103
|
*
|
|
@@ -2098,10 +2145,36 @@ ${ASSET_DETAIL_HTML}
|
|
|
2098
2145
|
function setAssetsOpen(open) {
|
|
2099
2146
|
assetsOpen = open;
|
|
2100
2147
|
document.body.classList.toggle('assets-closed', !open);
|
|
2148
|
+
// A toggle that looks identical in both states is a button that lies about what it did.
|
|
2149
|
+
assetsToggle.classList.toggle('bm-pill--pressed', open);
|
|
2150
|
+
assetsToggle.setAttribute('aria-pressed', open ? 'true' : 'false');
|
|
2101
2151
|
writePref(ASSETS_KEY, open ? '1' : '0');
|
|
2102
2152
|
if (open) void refreshAssets();
|
|
2103
2153
|
}
|
|
2104
2154
|
|
|
2155
|
+
/**
|
|
2156
|
+
* The overflow menu.
|
|
2157
|
+
*
|
|
2158
|
+
* The bar had grown a pill per feature, and two of them were called Record. What is left in the
|
|
2159
|
+
* bar is what a creator touches in a normal session; what opens a dialog and is reached once a
|
|
2160
|
+
* week lives here, so the next feature adds a row rather than a seventh pill.
|
|
2161
|
+
*/
|
|
2162
|
+
function openMore() {
|
|
2163
|
+
moreMenu.classList.add('show');
|
|
2164
|
+
moreButton.setAttribute('aria-expanded', 'true');
|
|
2165
|
+
// Opening the menu IS seeing the publish, so the dot has done its job.
|
|
2166
|
+
if (lastPublish) writePref(SEEN_PUBLISH_KEY, lastPublish.at);
|
|
2167
|
+
moreButton.classList.remove('news');
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2170
|
+
/** Returns whether it was open — the Escape chain's contract, like closeRecordingPanel. */
|
|
2171
|
+
function closeMore() {
|
|
2172
|
+
if (!moreMenu.classList.contains('show')) return false;
|
|
2173
|
+
moreMenu.classList.remove('show');
|
|
2174
|
+
moreButton.setAttribute('aria-expanded', 'false');
|
|
2175
|
+
return true;
|
|
2176
|
+
}
|
|
2177
|
+
|
|
2105
2178
|
/**
|
|
2106
2179
|
* Screenshot → clipboard.
|
|
2107
2180
|
*
|
|
@@ -2307,6 +2380,19 @@ ${ASSET_DETAIL_HTML}
|
|
|
2307
2380
|
if (autoReload) banner.classList.remove('show');
|
|
2308
2381
|
});
|
|
2309
2382
|
|
|
2383
|
+
moreButton.addEventListener('click', function () {
|
|
2384
|
+
if (!closeMore()) openMore();
|
|
2385
|
+
});
|
|
2386
|
+
// One delegate for every row, present and future: a click that lands on a row's button closes
|
|
2387
|
+
// the menu, and the row's own handler opens whatever it opens.
|
|
2388
|
+
moreMenu.addEventListener('click', function (event) {
|
|
2389
|
+
if (event.target.tagName === 'BUTTON' && !event.target.disabled) closeMore();
|
|
2390
|
+
});
|
|
2391
|
+
// Anywhere outside the trigger and the menu dismisses it, the way a dropdown is expected to.
|
|
2392
|
+
document.addEventListener('click', function (event) {
|
|
2393
|
+
if (!event.target.closest || !event.target.closest('.bm-menu-wrap')) closeMore();
|
|
2394
|
+
});
|
|
2395
|
+
|
|
2310
2396
|
publishToggle.addEventListener('click', openPublish);
|
|
2311
2397
|
publishClose.addEventListener('click', closePublish);
|
|
2312
2398
|
// Click the backdrop to dismiss, like every other dialog on this page.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-page.js","sourceRoot":"","sources":["../../src/editor/shell-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,EACL,qBAAqB,EAAE,kBAAkB,GAC1C,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE7F,oGAAoG;AACpG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,SAAS,sBAAsB;IAC7B,OAAO;QACL,6BAA6B,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG;QACjE,iCAAiC,qBAAqB,CAAC,QAAQ,EAAE,GAAG;QACpE,8BAA8B,kBAAkB,CAAC,QAAQ,EAAE,GAAG;KAC/D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,kGAAkG;AAClG,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAiBD,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,OAAO,GAAG,oBAAoB,OAAO,CAAC,QAAQ,2BAA2B,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACpH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,OAAO;;;;wBAIe,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;EAChD,kBAAkB;;EAElB,mBAAmB;EACnB,qBAAqB
|
|
1
|
+
{"version":3,"file":"shell-page.js","sourceRoot":"","sources":["../../src/editor/shell-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,EACL,qBAAqB,EAAE,kBAAkB,GAC1C,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE7F,oGAAoG;AACpG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,SAAS,sBAAsB;IAC7B,OAAO;QACL,6BAA6B,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG;QACjE,iCAAiC,qBAAqB,CAAC,QAAQ,EAAE,GAAG;QACpE,8BAA8B,kBAAkB,CAAC,QAAQ,EAAE,GAAG;KAC/D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,kGAAkG;AAClG,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAiBD,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,OAAO,GAAG,oBAAoB,OAAO,CAAC,QAAQ,2BAA2B,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACpH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,OAAO;;;;wBAIe,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;EAChD,kBAAkB;;EAElB,mBAAmB;EACnB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6HrB,gBAAgB;EAChB,iBAAiB;EACjB,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;EACpC,gBAAgB;EAChB,eAAe;;;;;;uBAMM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;EAmB/C,SAAS,CAAC,CAAC,CAAC,4FAA4F,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;EAwB7G,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;EAyBhB,kBAAkB;EAClB,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;EACrC,iBAAiB;EACjB,iBAAiB;;;;mBAIA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;kBACxB,gBAAgB;yBACT,qBAAqB;2BACnB,gBAAgB;;IAEvC,sBAAsB,EAAE;;;;;;;;4BAQA,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+gEtD,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqChB,CAAC;AACF,CAAC"}
|
|
@@ -30,7 +30,8 @@ import { spawn, spawnSync } from 'child_process';
|
|
|
30
30
|
import { CliError } from '../errors.js';
|
|
31
31
|
import { ForgeBrowserHost, readProjectGameData } from './browser-host.js';
|
|
32
32
|
import { startUploadProxy } from './upload-proxy.js';
|
|
33
|
-
import {
|
|
33
|
+
import { reservePortInLane, laneExhaustedMessage } from '../local-port.js';
|
|
34
|
+
import { currentPortLane } from '../port-lane.js';
|
|
34
35
|
import { projectBin } from '../project/context.js';
|
|
35
36
|
import { waitForServer } from '../verify/wait-for-server.js';
|
|
36
37
|
/** Voxelizing a dense mesh is minutes of work in the browser, not seconds. */
|
|
@@ -58,10 +59,10 @@ export function buildProject(context, log, consequence, retryHint) {
|
|
|
58
59
|
export async function withVoxelizeSession(options, body) {
|
|
59
60
|
const { context, environment, token, log, subject, retryHint } = options;
|
|
60
61
|
buildProject(context, log, `${subject} cannot be voxelized`, retryHint);
|
|
61
|
-
const
|
|
62
|
+
const lane = currentPortLane();
|
|
63
|
+
const port = await reservePortInLane(lane);
|
|
62
64
|
if (port === null) {
|
|
63
|
-
throw new CliError(
|
|
64
|
-
+ `Stop something in that range and retry.\n${retryHint}`);
|
|
65
|
+
throw new CliError(laneExhaustedMessage(lane, `Stop something in that range and retry.\n${retryHint}`));
|
|
65
66
|
}
|
|
66
67
|
const vite = projectBin(context.root, 'vite');
|
|
67
68
|
let server;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voxelize-session.js","sourceRoot":"","sources":["../../src/forge/voxelize-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"voxelize-session.js","sourceRoot":"","sources":["../../src/forge/voxelize-session.ts"],"names":[],"mappings":"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"}
|
package/dist/local-port.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PortLane } from './port-lane.js';
|
|
1
2
|
/**
|
|
2
3
|
* The port window the platform's bucket CORS policy allowlists as an origin.
|
|
3
4
|
*
|
|
@@ -5,8 +6,14 @@
|
|
|
5
6
|
* project served on localhost is making CROSS-ORIGIN requests for them. The bucket answers with
|
|
6
7
|
* `Access-Control-Allow-Origin` only for the origins named in its CORS config — the portal and
|
|
7
8
|
* creator hosts, plus `http://localhost:3000`–`3199` (roleverse-infra,
|
|
8
|
-
* the portal-cdn terragrunt config per environment). `bitmagic dev`
|
|
9
|
-
*
|
|
9
|
+
* the portal-cdn terragrunt config per environment). Everything `bitmagic dev`, `verify`, `forge`
|
|
10
|
+
* and `generate` bind sits inside it; anything that asks the OS for an ephemeral port
|
|
11
|
+
* (`listen(0)` → 49xxx+) falls outside it.
|
|
12
|
+
*
|
|
13
|
+
* Nothing here picks a number, though. The window is split in half so a dev-line and a release-line
|
|
14
|
+
* install cannot take each other's ports (port-lane.ts), and every function below scans the LANE it
|
|
15
|
+
* is handed, never the whole window. The bounds here remain the outer limit: they are what an
|
|
16
|
+
* explicit `--port` is checked against, because a creator naming a port is entitled to either half.
|
|
10
17
|
*
|
|
11
18
|
* The failure is quiet and easy to misread. The fetch is blocked, `WorldGenerator` falls back to
|
|
12
19
|
* an empty voxel world, the level's terrain simply is not there, and the symptom is a player
|
|
@@ -24,20 +31,38 @@ export declare const CORS_ALLOWED_PORT_MAX = 3199;
|
|
|
24
31
|
* other, and being told the rule once, at the point of the mistake, beats discovering it as a
|
|
25
32
|
* terrain-less world. (The shell itself fetches nothing from the CDN, so its own check is purely
|
|
26
33
|
* that kindness.)
|
|
34
|
+
*
|
|
35
|
+
* Checked against the whole window, deliberately not against this install's lane. The lane governs
|
|
36
|
+
* where a DEFAULT drifts to, which is a question about avoiding the other install; naming a port
|
|
37
|
+
* outright is a statement that you know what is on the machine, and refusing it because the other
|
|
38
|
+
* line nominally owns that half would make the flag a suggestion for no benefit.
|
|
27
39
|
*/
|
|
28
40
|
export declare function parseLocalPort(value: string | undefined, fallback: number, flag: string): number;
|
|
29
41
|
/**
|
|
30
|
-
* A free port
|
|
42
|
+
* A free port in this install's lane, or `null` when every port in the lane is taken.
|
|
31
43
|
*
|
|
32
44
|
* Returning `null` rather than silently falling back to an ephemeral port is deliberate: the
|
|
33
45
|
* caller can then say what the consequence is, instead of the run proceeding to a level with no
|
|
34
46
|
* terrain and no explanation.
|
|
35
47
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
48
|
+
* It never spills into the other lane either, for the same class of reason. A lane is a promise
|
|
49
|
+
* that the other install's ports are still there when it starts; taking them because they happen to
|
|
50
|
+
* be free right now would break that promise at exactly the moment two installs are busiest, and
|
|
51
|
+
* quietly. A hundred held ports is a machine with a problem to report, not a lane to abandon.
|
|
52
|
+
*
|
|
53
|
+
* The scan starts at a pseudo-random offset so two concurrent runs do not both take the lane's
|
|
54
|
+
* first port and race; `tryListen` closing before the caller binds leaves a window either way,
|
|
55
|
+
* which is why callers must handle a bind failure rather than trusting this.
|
|
56
|
+
*/
|
|
57
|
+
export declare function reservePortInLane(lane: PortLane, exclude?: ReadonlySet<number>): Promise<number | null>;
|
|
58
|
+
/**
|
|
59
|
+
* What to say when a lane is full — the one message that has to explain why the numbers it names
|
|
60
|
+
* are narrower than the 3000-3199 everything else talks about.
|
|
61
|
+
*
|
|
62
|
+
* Without the second sentence this reads as a bug to anyone who knows the CDN allows two hundred
|
|
63
|
+
* ports and has just been told a hundred of them are the limit.
|
|
39
64
|
*/
|
|
40
|
-
export declare function
|
|
65
|
+
export declare function laneExhaustedMessage(lane: PortLane, remedy: string): string;
|
|
41
66
|
/** Whether this exact port is free right now. Same TOCTOU caveat as above. */
|
|
42
67
|
export declare function isPortFree(port: number): Promise<boolean>;
|
|
43
68
|
/**
|
|
@@ -45,12 +70,12 @@ export declare function isPortFree(port: number): Promise<boolean>;
|
|
|
45
70
|
*
|
|
46
71
|
* Only ever called for a port the creator did NOT ask for by name. An explicit `--port` is a
|
|
47
72
|
* request, and quietly serving somewhere else would make the flag a suggestion — those still fail
|
|
48
|
-
* loudly. The default is different: nobody chose
|
|
49
|
-
* `bitmagic dev` dying because some unrelated process holds it is a bad trade now that
|
|
50
|
-
* it as a background task whose output nobody reads.
|
|
73
|
+
* loudly. The default is different: nobody chose the lane's `gamePort`, it is just where we start
|
|
74
|
+
* looking, and `bitmagic dev` dying because some unrelated process holds it is a bad trade now that
|
|
75
|
+
* agents run it as a background task whose output nobody reads.
|
|
51
76
|
*
|
|
52
77
|
* Drifting is only safe because of two things that did not exist when these ports were fixed:
|
|
53
78
|
* `.bitmagic/dev.json` records what was actually bound (so `bitmagic reload` still finds it), and
|
|
54
79
|
* `dev` opens the browser itself (so nobody has to know the number).
|
|
55
80
|
*/
|
|
56
|
-
export declare function resolveDevPort(preferred: number, exclude?: ReadonlySet<number>): Promise<number | null>;
|
|
81
|
+
export declare function resolveDevPort(preferred: number, lane: PortLane, exclude?: ReadonlySet<number>): Promise<number | null>;
|
package/dist/local-port.js
CHANGED
|
@@ -7,8 +7,14 @@ import { CliError } from './errors.js';
|
|
|
7
7
|
* project served on localhost is making CROSS-ORIGIN requests for them. The bucket answers with
|
|
8
8
|
* `Access-Control-Allow-Origin` only for the origins named in its CORS config — the portal and
|
|
9
9
|
* creator hosts, plus `http://localhost:3000`–`3199` (roleverse-infra,
|
|
10
|
-
* the portal-cdn terragrunt config per environment). `bitmagic dev`
|
|
11
|
-
*
|
|
10
|
+
* the portal-cdn terragrunt config per environment). Everything `bitmagic dev`, `verify`, `forge`
|
|
11
|
+
* and `generate` bind sits inside it; anything that asks the OS for an ephemeral port
|
|
12
|
+
* (`listen(0)` → 49xxx+) falls outside it.
|
|
13
|
+
*
|
|
14
|
+
* Nothing here picks a number, though. The window is split in half so a dev-line and a release-line
|
|
15
|
+
* install cannot take each other's ports (port-lane.ts), and every function below scans the LANE it
|
|
16
|
+
* is handed, never the whole window. The bounds here remain the outer limit: they are what an
|
|
17
|
+
* explicit `--port` is checked against, because a creator naming a port is entitled to either half.
|
|
12
18
|
*
|
|
13
19
|
* The failure is quiet and easy to misread. The fetch is blocked, `WorldGenerator` falls back to
|
|
14
20
|
* an empty voxel world, the level's terrain simply is not there, and the symptom is a player
|
|
@@ -26,6 +32,11 @@ export const CORS_ALLOWED_PORT_MAX = 3199;
|
|
|
26
32
|
* other, and being told the rule once, at the point of the mistake, beats discovering it as a
|
|
27
33
|
* terrain-less world. (The shell itself fetches nothing from the CDN, so its own check is purely
|
|
28
34
|
* that kindness.)
|
|
35
|
+
*
|
|
36
|
+
* Checked against the whole window, deliberately not against this install's lane. The lane governs
|
|
37
|
+
* where a DEFAULT drifts to, which is a question about avoiding the other install; naming a port
|
|
38
|
+
* outright is a statement that you know what is on the machine, and refusing it because the other
|
|
39
|
+
* line nominally owns that half would make the flag a suggestion for no benefit.
|
|
29
40
|
*/
|
|
30
41
|
export function parseLocalPort(value, fallback, flag) {
|
|
31
42
|
if (value === undefined)
|
|
@@ -52,21 +63,26 @@ function tryListen(port) {
|
|
|
52
63
|
});
|
|
53
64
|
}
|
|
54
65
|
/**
|
|
55
|
-
* A free port
|
|
66
|
+
* A free port in this install's lane, or `null` when every port in the lane is taken.
|
|
56
67
|
*
|
|
57
68
|
* Returning `null` rather than silently falling back to an ephemeral port is deliberate: the
|
|
58
69
|
* caller can then say what the consequence is, instead of the run proceeding to a level with no
|
|
59
70
|
* terrain and no explanation.
|
|
60
71
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
72
|
+
* It never spills into the other lane either, for the same class of reason. A lane is a promise
|
|
73
|
+
* that the other install's ports are still there when it starts; taking them because they happen to
|
|
74
|
+
* be free right now would break that promise at exactly the moment two installs are busiest, and
|
|
75
|
+
* quietly. A hundred held ports is a machine with a problem to report, not a lane to abandon.
|
|
76
|
+
*
|
|
77
|
+
* The scan starts at a pseudo-random offset so two concurrent runs do not both take the lane's
|
|
78
|
+
* first port and race; `tryListen` closing before the caller binds leaves a window either way,
|
|
79
|
+
* which is why callers must handle a bind failure rather than trusting this.
|
|
64
80
|
*/
|
|
65
|
-
export async function
|
|
66
|
-
const span =
|
|
81
|
+
export async function reservePortInLane(lane, exclude = new Set()) {
|
|
82
|
+
const span = lane.max - lane.min + 1;
|
|
67
83
|
const start = Math.floor(Math.random() * span);
|
|
68
84
|
for (let i = 0; i < span; i += 1) {
|
|
69
|
-
const port =
|
|
85
|
+
const port = lane.min + ((start + i) % span);
|
|
70
86
|
if (exclude.has(port))
|
|
71
87
|
continue;
|
|
72
88
|
const bound = await tryListen(port);
|
|
@@ -75,6 +91,19 @@ export async function reserveCorsAllowedPort(exclude = new Set()) {
|
|
|
75
91
|
}
|
|
76
92
|
return null;
|
|
77
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* What to say when a lane is full — the one message that has to explain why the numbers it names
|
|
96
|
+
* are narrower than the 3000-3199 everything else talks about.
|
|
97
|
+
*
|
|
98
|
+
* Without the second sentence this reads as a bug to anyone who knows the CDN allows two hundred
|
|
99
|
+
* ports and has just been told a hundred of them are the limit.
|
|
100
|
+
*/
|
|
101
|
+
export function laneExhaustedMessage(lane, remedy) {
|
|
102
|
+
return (`Every port from ${lane.min} to ${lane.max} is in use. That is this CLI's half of the `
|
|
103
|
+
+ `${CORS_ALLOWED_PORT_MIN}-${CORS_ALLOWED_PORT_MAX} window the asset CDN allows as an origin — `
|
|
104
|
+
+ 'the other half is left free so a bitmagic from the other release line can run beside this '
|
|
105
|
+
+ `one. ${remedy}`);
|
|
106
|
+
}
|
|
78
107
|
/** Whether this exact port is free right now. Same TOCTOU caveat as above. */
|
|
79
108
|
export async function isPortFree(port) {
|
|
80
109
|
return (await tryListen(port)) !== null;
|
|
@@ -84,17 +113,17 @@ export async function isPortFree(port) {
|
|
|
84
113
|
*
|
|
85
114
|
* Only ever called for a port the creator did NOT ask for by name. An explicit `--port` is a
|
|
86
115
|
* request, and quietly serving somewhere else would make the flag a suggestion — those still fail
|
|
87
|
-
* loudly. The default is different: nobody chose
|
|
88
|
-
* `bitmagic dev` dying because some unrelated process holds it is a bad trade now that
|
|
89
|
-
* it as a background task whose output nobody reads.
|
|
116
|
+
* loudly. The default is different: nobody chose the lane's `gamePort`, it is just where we start
|
|
117
|
+
* looking, and `bitmagic dev` dying because some unrelated process holds it is a bad trade now that
|
|
118
|
+
* agents run it as a background task whose output nobody reads.
|
|
90
119
|
*
|
|
91
120
|
* Drifting is only safe because of two things that did not exist when these ports were fixed:
|
|
92
121
|
* `.bitmagic/dev.json` records what was actually bound (so `bitmagic reload` still finds it), and
|
|
93
122
|
* `dev` opens the browser itself (so nobody has to know the number).
|
|
94
123
|
*/
|
|
95
|
-
export async function resolveDevPort(preferred, exclude = new Set()) {
|
|
124
|
+
export async function resolveDevPort(preferred, lane, exclude = new Set()) {
|
|
96
125
|
if (!exclude.has(preferred) && await isPortFree(preferred))
|
|
97
126
|
return preferred;
|
|
98
|
-
return
|
|
127
|
+
return reservePortInLane(lane, exclude);
|
|
99
128
|
}
|
|
100
129
|
//# sourceMappingURL=local-port.js.map
|