@bitmagic/cli 0.1.60-dev.3 → 0.1.60-dev.4

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 (65) hide show
  1. package/README.md +67 -3
  2. package/dist/atomic-json.d.ts +18 -0
  3. package/dist/atomic-json.js +39 -0
  4. package/dist/atomic-json.js.map +1 -0
  5. package/dist/cli.d.ts +1 -1
  6. package/dist/commands/dev.js +79 -35
  7. package/dist/commands/dev.js.map +1 -1
  8. package/dist/commands/publish.d.ts +2 -0
  9. package/dist/commands/publish.js +1 -1
  10. package/dist/commands/publish.js.map +1 -1
  11. package/dist/commands/reload.d.ts +1 -1
  12. package/dist/commands/reload.js +14 -5
  13. package/dist/commands/reload.js.map +1 -1
  14. package/dist/commands/verify.js +134 -118
  15. package/dist/commands/verify.js.map +1 -1
  16. package/dist/editor/motion-panel.d.ts +2 -2
  17. package/dist/editor/motion-panel.js +27 -5
  18. package/dist/editor/motion-panel.js.map +1 -1
  19. package/dist/editor/reload-bus.d.ts +11 -23
  20. package/dist/editor/reload-bus.js +55 -8
  21. package/dist/editor/reload-bus.js.map +1 -1
  22. package/dist/editor/server.d.ts +10 -0
  23. package/dist/editor/server.js +46 -0
  24. package/dist/editor/server.js.map +1 -1
  25. package/dist/editor/shell-page.d.ts +10 -0
  26. package/dist/editor/shell-page.js +58 -3
  27. package/dist/editor/shell-page.js.map +1 -1
  28. package/dist/editor/tab-reuse.d.ts +23 -0
  29. package/dist/editor/tab-reuse.js +61 -0
  30. package/dist/editor/tab-reuse.js.map +1 -0
  31. package/dist/local-port.d.ts +8 -1
  32. package/dist/local-port.js +9 -2
  33. package/dist/local-port.js.map +1 -1
  34. package/dist/machine-lock.d.ts +56 -0
  35. package/dist/machine-lock.js +213 -0
  36. package/dist/machine-lock.js.map +1 -0
  37. package/dist/port-lane.d.ts +27 -0
  38. package/dist/port-lane.js +36 -1
  39. package/dist/port-lane.js.map +1 -1
  40. package/dist/process-alive.d.ts +13 -0
  41. package/dist/process-alive.js +24 -0
  42. package/dist/process-alive.js.map +1 -0
  43. package/dist/project/dev-handle.d.ts +6 -34
  44. package/dist/project/dev-handle.js +9 -59
  45. package/dist/project/dev-handle.js.map +1 -1
  46. package/dist/project/dev-ports.d.ts +67 -0
  47. package/dist/project/dev-ports.js +204 -0
  48. package/dist/project/dev-ports.js.map +1 -0
  49. package/dist/project/game-name.d.ts +9 -0
  50. package/dist/project/game-name.js +21 -0
  51. package/dist/project/game-name.js.map +1 -0
  52. package/dist/project/jobs.js +2 -1
  53. package/dist/project/jobs.js.map +1 -1
  54. package/dist/scaffold/project-files.js +8 -8
  55. package/dist/scaffold/project-files.js.map +1 -1
  56. package/dist/smoke/run.d.ts +4 -0
  57. package/dist/smoke/run.js +5 -2
  58. package/dist/smoke/run.js.map +1 -1
  59. package/dist/verify/iterate.d.ts +5 -0
  60. package/dist/verify/iterate.js +23 -20
  61. package/dist/verify/iterate.js.map +1 -1
  62. package/dist/verify/lock.d.ts +32 -0
  63. package/dist/verify/lock.js +54 -0
  64. package/dist/verify/lock.js.map +1 -0
  65. package/package.json +4 -4
@@ -12,6 +12,10 @@ export interface SmokeCheckOptions {
12
12
  /** Where console.log / screenshot.png land. */
13
13
  artifactDir: string;
14
14
  settleMs?: number;
15
+ /** The project, named to anyone queued behind this check's browser run (verify/lock.ts). */
16
+ root: string;
17
+ /** Where the waiting line goes. */
18
+ log: (message: string) => void;
15
19
  }
16
20
  export interface SmokeCheckPaths {
17
21
  harnessPath: string;
package/dist/smoke/run.js CHANGED
@@ -3,6 +3,7 @@ import * as path from 'path';
3
3
  import { classifyVerifyRun } from '../verify/classify.js';
4
4
  import { runHeadlessCheck } from '../verify/browser.js';
5
5
  import { renderSmokeHarness } from './harness.js';
6
+ import { withVerifyLock } from '../verify/lock.js';
6
7
  /**
7
8
  * How long to let the published game settle before observing it.
8
9
  *
@@ -32,14 +33,16 @@ export async function runSmokeCheck(options) {
32
33
  const paths = smokeArtifactPaths(options.artifactDir);
33
34
  fs.mkdirSync(options.artifactDir, { recursive: true });
34
35
  fs.writeFileSync(paths.harnessPath, renderSmokeHarness(options.publishedUrl));
35
- const observations = await runHeadlessCheck({
36
+ // Its own Chrome, so it queues behind — and holds off — a `bitmagic verify` measuring fps in
37
+ // another project, exactly as one verify does for another.
38
+ const observations = await withVerifyLock(options.root, 'publish', { info: options.log }, () => runHeadlessCheck({
36
39
  url: `file://${paths.harnessPath}`,
37
40
  screenshotPath: paths.screenshotPath,
38
41
  consolePath: paths.consolePath,
39
42
  settleMs: options.settleMs ?? SMOKE_SETTLE_MS,
40
43
  // The canvas lives in the embedded game, not in the harness page.
41
44
  probeFrameUrlIncludes: options.publishedUrl,
42
- });
45
+ }));
43
46
  return classifyVerifyRun(observations);
44
47
  }
45
48
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/smoke/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAgBtC,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC;QACnD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;QAClD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACzD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0B;IAC5D,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9E,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC;QAC1C,GAAG,EAAE,UAAU,KAAK,CAAC,WAAW,EAAE;QAClC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,eAAe;QAC7C,kEAAkE;QAClE,qBAAqB,EAAE,OAAO,CAAC,YAAY;KAC5C,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/smoke/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAoBtC,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC;QACnD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;QAClD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACzD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0B;IAC5D,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAE9E,6FAA6F;IAC7F,2DAA2D;IAC3D,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAC7F,gBAAgB,CAAC;QACf,GAAG,EAAE,UAAU,KAAK,CAAC,WAAW,EAAE;QAClC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,eAAe;QAC7C,kEAAkE;QAClE,qBAAqB,EAAE,OAAO,CAAC,YAAY;KAC5C,CAAC,CAAC,CAAC;IAEN,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACzC,CAAC"}
@@ -39,6 +39,11 @@ export interface VerifyWatchOptions extends VerifyRunSettings {
39
39
  mobilePrimary: boolean;
40
40
  output: Output;
41
41
  describeRunState: (observations: VerifyObservations) => string;
42
+ /**
43
+ * Runs one iteration's browser checks as the only verify on the machine (verify/lock.ts).
44
+ * Per iteration, never around the loop: two `--watch` loops in two projects then take turns.
45
+ */
46
+ lock?: <T>(fn: () => Promise<T>) => Promise<T>;
42
47
  }
43
48
  /**
44
49
  * Run the watch loop until SIGINT/SIGTERM. The caller owns vite; everything spawned here —
@@ -75,6 +75,7 @@ export async function runVerifyWatch(options) {
75
75
  const message = error instanceof Error ? error.message : String(error);
76
76
  output.info(`✗ verify iteration failed: ${message}`);
77
77
  };
78
+ const lock = options.lock ?? ((fn) => fn());
78
79
  const scheduler = new VerifyIterationScheduler(async (reason) => {
79
80
  const startedAt = Date.now();
80
81
  // Before the check, not after: this names the state the browser is about to load. A file
@@ -85,27 +86,29 @@ export async function runVerifyWatch(options) {
85
86
  const runs = [];
86
87
  const states = [];
87
88
  let mobileParity;
88
- for (const platform of options.platforms) {
89
- const paths = verifyArtifactPaths(options.artifactDir, platform);
90
- const checkOptions = verifyCheckOptions(options, platform, paths);
91
- let observations = await session.check(checkOptions);
92
- let result = classifyVerifyRun(observations, { ...classifyContext, platform });
93
- let retriedWithSoftwareGl = false;
94
- if (!result.ok && !onSoftwareGl && shouldRetrySoftwareGl(observations, process.env)) {
95
- output.info('The WebGL context was lost — switching this watch to software rendering…');
96
- await session.close();
97
- session = await VerifyBrowserSession.launch(softwareGlLaunchPlan(process.env, options.renderer));
98
- onSoftwareGl = true;
99
- retriedWithSoftwareGl = true;
100
- observations = await session.check({ ...checkOptions, consolePath: paths.retryConsolePath });
101
- result = classifyVerifyRun(observations, { ...classifyContext, platform });
89
+ await lock(async () => {
90
+ for (const platform of options.platforms) {
91
+ const paths = verifyArtifactPaths(options.artifactDir, platform);
92
+ const checkOptions = verifyCheckOptions(options, platform, paths);
93
+ let observations = await session.check(checkOptions);
94
+ let result = classifyVerifyRun(observations, { ...classifyContext, platform });
95
+ let retriedWithSoftwareGl = false;
96
+ if (!result.ok && !onSoftwareGl && shouldRetrySoftwareGl(observations, process.env)) {
97
+ output.info('The WebGL context was lost — switching this watch to software rendering…');
98
+ await session.close();
99
+ session = await VerifyBrowserSession.launch(softwareGlLaunchPlan(process.env, options.renderer));
100
+ onSoftwareGl = true;
101
+ retriedWithSoftwareGl = true;
102
+ observations = await session.check({ ...checkOptions, consolePath: paths.retryConsolePath });
103
+ result = classifyVerifyRun(observations, { ...classifyContext, platform });
104
+ }
105
+ if (mobileParity === undefined)
106
+ mobileParity = observations.mobileParity;
107
+ runs.push(toVerifyPlatformRun(platform, result, observations, retriedWithSoftwareGl, paths, options.fast));
108
+ const state = options.describeRunState(observations);
109
+ states.push(options.platforms.length > 1 ? `${platform}: ${state}` : state);
102
110
  }
103
- if (mobileParity === undefined)
104
- mobileParity = observations.mobileParity;
105
- runs.push(toVerifyPlatformRun(platform, result, observations, retriedWithSoftwareGl, paths, options.fast));
106
- const state = options.describeRunState(observations);
107
- states.push(options.platforms.length > 1 ? `${platform}: ${state}` : state);
108
- }
111
+ });
109
112
  const merged = mergeVerifyPlatformRuns(runs, mobileParity);
110
113
  const outcome = decideVerifyOutcome(merged.result, fingerprint, new Date().toISOString(), merged.extras);
111
114
  // Recorded but never thrown: a failing iteration is information for the next edit, not the
@@ -1 +1 @@
1
- {"version":3,"file":"iterate.js","sourceRoot":"","sources":["../../src/verify/iterate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD;;;;;;GAMG;AACH,MAAM,OAAO,wBAAwB;IAKhB;IAEA;IANX,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAkB,IAAI,CAAC;IAErC,YACmB,GAAsC;IACvD,8FAA8F;IAC7E,UAAoC,GAAG,EAAE,GAAE,CAAC;QAF5C,QAAG,GAAH,GAAG,CAAmC;QAEtC,YAAO,GAAP,OAAO,CAAqC;IAC5D,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAkBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,IAAI,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClG,0FAA0F;IAC1F,8FAA8F;IAC9F,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAQ,EAAE;QACpD,0FAA0F;QAC1F,sEAAsE;QACtE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,yFAAyF;QACzF,0FAA0F;QAC1F,oCAAoC;QACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;QACjE,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,YAAgD,CAAC;QAErD,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACjE,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAElE,IAAI,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACrD,IAAI,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/E,IAAI,qBAAqB,GAAG,KAAK,CAAC;YAElC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpF,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;gBACxF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjG,YAAY,GAAG,IAAI,CAAC;gBACpB,qBAAqB,GAAG,IAAI,CAAC;gBAC7B,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC7F,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,YAAY,KAAK,SAAS;gBAAE,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3G,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,mBAAmB,CACjC,MAAM,CAAC,MAAM,EACb,WAAW,EACX,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACxB,MAAM,CAAC,MAAM,CACd,CAAC;QACF,2FAA2F;QAC3F,yFAAyF;QACzF,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,iBAAiB,OAAO,MAAM,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CACT,KAAK,QAAQ,CAAC,MAAM,WAAW,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM;kBACnE,GAAG,OAAO,MAAM,MAAM,GAAG,CAC5B,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAEzB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;QACxC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACnB,KAAK,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC3B,IAAI,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvC,oFAAoF;gBACpF,oDAAoD;gBACpD,cAAc,GAAG,IAAI,CAAC;gBACtB,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,IAAI,GAAG,GAAS,EAAE,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"iterate.js","sourceRoot":"","sources":["../../src/verify/iterate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD;;;;;;GAMG;AACH,MAAM,OAAO,wBAAwB;IAKhB;IAEA;IANX,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAkB,IAAI,CAAC;IAErC,YACmB,GAAsC;IACvD,8FAA8F;IAC7E,UAAoC,GAAG,EAAE,GAAE,CAAC;QAF5C,QAAG,GAAH,GAAG,CAAmC;QAEtC,YAAO,GAAP,OAAO,CAAqC;IAC5D,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAuBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,IAAI,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClG,0FAA0F;IAC1F,8FAA8F;IAC9F,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAQ,EAAE;QACpD,0FAA0F;QAC1F,sEAAsE;QACtE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAI,EAAoB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,yFAAyF;QACzF,0FAA0F;QAC1F,oCAAoC;QACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;QACjE,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,YAAgD,CAAC;QAErD,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;YACpB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACjE,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAElE,IAAI,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACrD,IAAI,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC/E,IAAI,qBAAqB,GAAG,KAAK,CAAC;gBAElC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpF,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;oBACxF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACjG,YAAY,GAAG,IAAI,CAAC;oBACpB,qBAAqB,GAAG,IAAI,CAAC;oBAC7B,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBAC7F,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7E,CAAC;gBAED,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,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3G,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,mBAAmB,CACjC,MAAM,CAAC,MAAM,EACb,WAAW,EACX,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACxB,MAAM,CAAC,MAAM,CACd,CAAC;QACF,2FAA2F;QAC3F,yFAAyF;QACzF,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,iBAAiB,OAAO,MAAM,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CACT,KAAK,QAAQ,CAAC,MAAM,WAAW,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM;kBACnE,GAAG,OAAO,MAAM,MAAM,GAAG,CAC5B,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAEzB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC;QACxC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACnB,KAAK,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC3B,IAAI,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvC,oFAAoF;gBACpF,oDAAoD;gBACpD,cAAc,GAAG,IAAI,CAAC;gBACtB,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,IAAI,GAAG,GAAS,EAAE,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * One verify at a time, machine-wide.
3
+ *
4
+ * `bitmagic verify` reads the game's frame rate off a real browser (browser.ts `measureFps`), and
5
+ * a creator making several games at once runs several verifies at once — each in its own folder,
6
+ * often started by an agent that has no idea about the others. Two headless Chromes settling on
7
+ * one laptop starve each other, and the verdict is then about the machine, not the game: "58 fps"
8
+ * becomes "23 fps" with nothing in the project to explain it.
9
+ *
10
+ * So every browser run takes the `verify` machine lock (machine-lock.ts) and the rest wait,
11
+ * visibly — the waiting line names who holds it, because an agent watching a verify that prints
12
+ * nothing for a minute concludes it hung. The hold is the browser run only, not the build in
13
+ * front of it; builds are short and a dev's `tsc --watch` runs unlocked beside every verify anyway.
14
+ *
15
+ * `BITMAGIC_NO_VERIFY_LOCK` opts out, for a CI matrix that parallelises on purpose and does not
16
+ * grade fps. It mirrors `BITMAGIC_NO_OPEN`: an env var rather than a flag, because the machine is
17
+ * what decides, not the run.
18
+ */
19
+ import { acquireMachineLock, type MachineLockDeps } from '../machine-lock.js';
20
+ import type { Output } from '../output.js';
21
+ export declare const NO_VERIFY_LOCK_ENV = "BITMAGIC_NO_VERIFY_LOCK";
22
+ export interface VerifyLockDeps {
23
+ env?: Record<string, string | undefined>;
24
+ acquire?: typeof acquireMachineLock;
25
+ lock?: MachineLockDeps;
26
+ }
27
+ /**
28
+ * Run `fn` as the only browser-driving verify on this machine.
29
+ *
30
+ * `command` is what a WAITER will be told is running — `verify`, `verify --watch`, `publish`.
31
+ */
32
+ export declare function withVerifyLock<T>(root: string, command: string, output: Pick<Output, 'info'>, fn: () => Promise<T>, deps?: VerifyLockDeps): Promise<T>;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * One verify at a time, machine-wide.
3
+ *
4
+ * `bitmagic verify` reads the game's frame rate off a real browser (browser.ts `measureFps`), and
5
+ * a creator making several games at once runs several verifies at once — each in its own folder,
6
+ * often started by an agent that has no idea about the others. Two headless Chromes settling on
7
+ * one laptop starve each other, and the verdict is then about the machine, not the game: "58 fps"
8
+ * becomes "23 fps" with nothing in the project to explain it.
9
+ *
10
+ * So every browser run takes the `verify` machine lock (machine-lock.ts) and the rest wait,
11
+ * visibly — the waiting line names who holds it, because an agent watching a verify that prints
12
+ * nothing for a minute concludes it hung. The hold is the browser run only, not the build in
13
+ * front of it; builds are short and a dev's `tsc --watch` runs unlocked beside every verify anyway.
14
+ *
15
+ * `BITMAGIC_NO_VERIFY_LOCK` opts out, for a CI matrix that parallelises on purpose and does not
16
+ * grade fps. It mirrors `BITMAGIC_NO_OPEN`: an env var rather than a flag, because the machine is
17
+ * what decides, not the run.
18
+ */
19
+ import { acquireMachineLock } from '../machine-lock.js';
20
+ export const NO_VERIFY_LOCK_ENV = 'BITMAGIC_NO_VERIFY_LOCK';
21
+ function describeHolder(holder) {
22
+ return `\`bitmagic ${holder.command}\` (pid ${holder.pid}) in ${holder.root}`;
23
+ }
24
+ /**
25
+ * Run `fn` as the only browser-driving verify on this machine.
26
+ *
27
+ * `command` is what a WAITER will be told is running — `verify`, `verify --watch`, `publish`.
28
+ */
29
+ export async function withVerifyLock(root, command, output, fn, deps = {}) {
30
+ const env = deps.env ?? process.env;
31
+ if (typeof env[NO_VERIFY_LOCK_ENV] === 'string' && env[NO_VERIFY_LOCK_ENV] !== '') {
32
+ return fn();
33
+ }
34
+ const acquire = deps.acquire ?? acquireMachineLock;
35
+ const lock = await acquire('verify', { root, command }, {
36
+ ...deps.lock,
37
+ onWait: (holder) => {
38
+ output.info(`Another ${describeHolder(holder)} is running — waiting for it, so this run's fps is `
39
+ + 'measured on a quiet machine…');
40
+ },
41
+ onStale: (holder) => {
42
+ output.info(`Ignoring a verify lock ${describeHolder(holder)} has held for over half an hour.`);
43
+ },
44
+ });
45
+ if (lock.waited)
46
+ output.info('Continuing.');
47
+ try {
48
+ return await fn();
49
+ }
50
+ finally {
51
+ lock.release();
52
+ }
53
+ }
54
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/verify/lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,kBAAkB,EAAyC,MAAM,oBAAoB,CAAC;AAG/F,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAQ5D,SAAS,cAAc,CAAC,MAAkB;IACxC,OAAO,cAAc,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,OAAe,EACf,MAA4B,EAC5B,EAAoB,EACpB,OAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC,kBAAkB,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;QAClF,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,kBAAkB,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACtD,GAAG,IAAI,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACjB,MAAM,CAAC,IAAI,CACT,WAAW,cAAc,CAAC,MAAM,CAAC,qDAAqD;kBACpF,8BAA8B,CACjC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAClB,MAAM,CAAC,IAAI,CAAC,0BAA0B,cAAc,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAClG,CAAC;KACF,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitmagic/cli",
3
- "version": "0.1.60-dev.3",
3
+ "version": "0.1.60-dev.4",
4
4
  "description": "Build Bitmagic games from your own agent tool",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Bitmagic Oy",
@@ -23,9 +23,9 @@
23
23
  "fflate": "^0.8.2",
24
24
  "playwright-core": "^1.59.1",
25
25
  "tar": "^7.4.3",
26
- "@bitmagic/animation-forger": "0.1.15-dev.3",
27
- "@bitmagic/world-forger": "0.1.20-dev.3",
28
- "@bitmagic/asset-core": "0.2.15-dev.3"
26
+ "@bitmagic/animation-forger": "0.1.15-dev.4",
27
+ "@bitmagic/world-forger": "0.1.20-dev.4",
28
+ "@bitmagic/asset-core": "0.2.15-dev.4"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@eslint/js": "^9.38.0",