@moku-labs/game 0.15.29 → 0.15.31

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.
@@ -1,4 +1,4 @@
1
- import { m as StartedPage, r as GameConfig, t as AnyGameApp, u as PageOptions } from "../types-Cyu_jKop.mjs";
1
+ import { m as StartedPage, r as GameConfig, t as AnyGameApp, u as PageOptions } from "../types-DmU_qlvA.mjs";
2
2
 
3
3
  //#region src/app/page.d.ts
4
4
  /**
package/dist/app/page.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { r as systemSource, t as memory } from "../memory-CWlqhS7l.mjs";
2
2
  import { t as applyTo } from "../drafts-BawpSaVp.mjs";
3
3
  import { i as isControl } from "../dev-BNndV-hU.mjs";
4
- import { n as read, r as watch, t as sources } from "../sources-ncFMQIus.mjs";
4
+ import { n as read, r as watch, t as sources } from "../sources-DM5Zcl4o.mjs";
5
5
  import { t as resolveConfig } from "../config-B87aFTW-.mjs";
6
6
  //#region src/app/save.ts
7
7
  /**
@@ -1,6 +1,6 @@
1
1
  import { Mr as PlayerStateProvider } from "../types-D27I4Q7b.mjs";
2
- import { ht as PlatformProvider } from "../index-Cl5zwodk.mjs";
3
- import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-Cyu_jKop.mjs";
2
+ import { ht as PlatformProvider } from "../index-DMeqKGSu.mjs";
3
+ import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-DmU_qlvA.mjs";
4
4
  import { Back, Haptics, KeepAwake, Lifecycle, Store } from "@moku-labs/system";
5
5
 
6
6
  //#region src/app/system.d.ts
package/dist/app.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Dr as Json } from "./types-D27I4Q7b.mjs";
2
2
  import { U as StringTable } from "./types-BAp9HdR4.mjs";
3
- import { a as GameHandle, c as MemoryProvider, d as SaveKind, f as Scenario, g as SystemName, i as GameDefinition, l as PageAgent, n as GameApp, o as GamePluginConfigs, p as ScreenSeams, r as GameConfig, s as HeadlessSeams, v as WithGameState } from "./types-Cyu_jKop.mjs";
3
+ import { a as GameHandle, c as MemoryProvider, d as SaveKind, f as Scenario, g as SystemName, i as GameDefinition, l as PageAgent, n as GameApp, o as GamePluginConfigs, p as ScreenSeams, r as GameConfig, s as HeadlessSeams, v as WithGameState } from "./types-DmU_qlvA.mjs";
4
4
  import { AnyPluginInstance } from "@moku-labs/core";
5
5
 
6
6
  //#region src/app/define.d.ts
package/dist/app.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { Ft as audioPlugin, H as platformPlugin, i as screen, m as flattenFeatures, t as createApp, wt as effectsPlugin } from "./src-wyJYr12n.mjs";
1
+ import { Ft as audioPlugin, H as platformPlugin, i as screen, m as flattenFeatures, t as createApp, wt as effectsPlugin } from "./src-5qdNjLKN.mjs";
2
2
  import { t as memory } from "./memory-CWlqhS7l.mjs";
3
3
  import { n as isFakeClock, t as fakeClock } from "./fake-6mazmHK3.mjs";
4
4
  //#region src/app/define.ts
@@ -1,5 +1,5 @@
1
1
  import { $r as Time, D as DebugSwitches, Ir as Snapshot, Rr as StoreApi, Vr as Api, Y as Api$1, Yr as FrameRate, ar as FlowState, nn as Api$2, nr as Bookmark, ot as Captured, w as ScenesApi } from "./types-D27I4Q7b.mjs";
2
- import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-DjQkfbfZ.mjs";
2
+ import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-DHamyZq1.mjs";
3
3
  import { N as InputApi } from "./types-BAp9HdR4.mjs";
4
4
  import { t as HeadlessApp } from "./headless-f31cEZ7f.mjs";
5
5
  import { n as Command, r as ControlApp } from "./types-CgE5L_7f.mjs";
@@ -19,8 +19,8 @@ import { n as Command, r as ControlApp } from "./types-CgE5L_7f.mjs";
19
19
  */
20
20
  declare const commands: Readonly<{
21
21
  answer: Command<{
22
- intent: "string";
23
- payload: "json?";
22
+ readonly intent: "string";
23
+ readonly payload: "json?";
24
24
  }, boolean, ControlApp>;
25
25
  tap: Command<{
26
26
  key: "string?";
@@ -32,23 +32,23 @@ declare const commands: Readonly<{
32
32
  readonly ui: Pick<UiApi, "find">;
33
33
  }>;
34
34
  drag: Command<{
35
- from: "json";
36
- to: "json";
35
+ readonly from: "json";
36
+ readonly to: "json";
37
37
  }, boolean, HeadlessApp & {
38
38
  readonly log: import("@moku-labs/common/browser").LogApi;
39
39
  } & {
40
40
  readonly input: InputApi;
41
41
  }>;
42
42
  key: Command<{
43
- key: "string";
44
- shift: "boolean?";
43
+ readonly key: "string";
44
+ readonly shift: "boolean?";
45
45
  }, boolean, HeadlessApp & {
46
46
  readonly log: import("@moku-labs/common/browser").LogApi;
47
47
  } & {
48
48
  readonly input: InputApi;
49
49
  }>;
50
50
  walk: Command<{
51
- route: "json";
51
+ readonly route: "json";
52
52
  }, FlowState, ControlApp>;
53
53
  bookmark: Command<{}, Bookmark, HeadlessApp & {
54
54
  readonly log: import("@moku-labs/common/browser").LogApi;
@@ -56,8 +56,8 @@ declare const commands: Readonly<{
56
56
  readonly scenes?: ScenesApi;
57
57
  }>;
58
58
  restore: Command<{
59
- bookmark: "json?";
60
- repro: "json?";
59
+ readonly bookmark: "json?";
60
+ readonly repro: "json?";
61
61
  }, FlowState, HeadlessApp & {
62
62
  readonly log: import("@moku-labs/common/browser").LogApi;
63
63
  } & {
@@ -73,7 +73,7 @@ declare const commands: Readonly<{
73
73
  };
74
74
  }>;
75
75
  saveImport: Command<{
76
- save: "json";
76
+ readonly save: "json";
77
77
  }, {
78
78
  restored: boolean;
79
79
  }, HeadlessApp & {
@@ -86,8 +86,8 @@ declare const commands: Readonly<{
86
86
  };
87
87
  }>;
88
88
  step: Command<{
89
- frames: "number";
90
- deltaMs: "number?";
89
+ readonly frames: "number";
90
+ readonly deltaMs: "number?";
91
91
  }, Readonly<Time>, ControlApp>;
92
92
  pause: Command<{}, boolean, HeadlessApp & {
93
93
  readonly log: import("@moku-labs/common/browser").LogApi;
@@ -100,10 +100,10 @@ declare const commands: Readonly<{
100
100
  readonly lifecycle: Api;
101
101
  }>;
102
102
  capture: Command<{
103
- legend: "boolean?";
104
- layers: "json?";
105
- sheet: "json?";
106
- diff: "json?";
103
+ readonly legend: "boolean?";
104
+ readonly layers: "json?";
105
+ readonly sheet: "json?";
106
+ readonly diff: "json?";
107
107
  }, Captured | undefined, HeadlessApp & {
108
108
  readonly log: import("@moku-labs/common/browser").LogApi;
109
109
  } & {
@@ -112,17 +112,17 @@ declare const commands: Readonly<{
112
112
  readonly world: Api$2;
113
113
  }>;
114
114
  debug: Command<{
115
- nineSlice: "boolean?";
116
- verifyFrames: "boolean?";
117
- kept: "boolean?";
118
- overdraw: "boolean?";
115
+ readonly nineSlice: "boolean?";
116
+ readonly verifyFrames: "boolean?";
117
+ readonly kept: "boolean?";
118
+ readonly overdraw: "boolean?";
119
119
  }, DebugSwitches, HeadlessApp & {
120
120
  readonly log: import("@moku-labs/common/browser").LogApi;
121
121
  } & {
122
122
  readonly renderer: Api$1;
123
123
  }>;
124
124
  reducedMotion: Command<{
125
- on: "boolean";
125
+ readonly on: "boolean";
126
126
  }, boolean, HeadlessApp & {
127
127
  readonly log: import("@moku-labs/common/browser").LogApi;
128
128
  } & {
@@ -145,28 +145,28 @@ declare const commands: Readonly<{
145
145
  readonly ui: Pick<UiApi, "scroll">;
146
146
  }>;
147
147
  timeScale: Command<{
148
- scale: "number";
148
+ readonly scale: "number";
149
149
  }, Readonly<Time>, ControlApp>;
150
150
  frameRate: Command<{
151
- fps: "number?";
151
+ readonly fps: "number?";
152
152
  }, Readonly<FrameRate>, ControlApp>;
153
153
  mute: Command<{
154
- muted: "boolean";
154
+ readonly muted: "boolean";
155
155
  }, boolean, HeadlessApp & {
156
156
  readonly log: import("@moku-labs/common/browser").LogApi;
157
157
  } & {
158
158
  readonly audio?: AudioApi;
159
159
  }>;
160
160
  trace: Command<{
161
- path: "json";
161
+ readonly path: "json";
162
162
  }, boolean, HeadlessApp & {
163
163
  readonly log: import("@moku-labs/common/browser").LogApi;
164
164
  } & {
165
165
  readonly input: InputApi;
166
166
  }>;
167
167
  filter: Command<{
168
- kind: "string";
169
- on: "boolean";
168
+ readonly on: "boolean";
169
+ readonly kind: "string";
170
170
  }, readonly string[], HeadlessApp & {
171
171
  readonly log: import("@moku-labs/common/browser").LogApi;
172
172
  } & {
@@ -1,6 +1,6 @@
1
1
  import { t as HeadlessApp } from "./headless-f31cEZ7f.mjs";
2
2
  import { i as InputArguments, n as Command, o as InputSchema, s as Ran } from "./types-CgE5L_7f.mjs";
3
- import { t as commands } from "./commands-BOxMqhVe.mjs";
3
+ import { t as commands } from "./commands-C8N_rpwt.mjs";
4
4
  import { t as defineCommand } from "./define-CE1uxbe9.mjs";
5
5
 
6
6
  //#region src/plugins/flow/doors/dev.d.ts
package/dist/control.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  import { n as controlRefused, t as controlReadOnly } from "./dev-BNndV-hU.mjs";
2
- import { s as defineCommand } from "./session-CeKgO2hy.mjs";
3
- import { n as commands, t as run } from "./run-DRcc2SKF.mjs";
2
+ import { s as defineCommand } from "./session-DuZfGZWk.mjs";
3
+ import { n as commands, t as run } from "./run-BnriyKUu.mjs";
4
4
  export { commands, controlReadOnly, controlRefused, defineCommand, run };
@@ -1,5 +1,5 @@
1
1
  import { $n as FeaturePlugin, An as NumericFields, B as ShapeValue, Bn as EmitterIdOf, C as SceneSpec, Cn as TagType, Dr as Json, Dt as PassKind, En as Ease, F as NineSliceValue, Gn as TextStylesOf, Gr as State$4, Hn as HudKeysOf, Hr as Config$4, Jr as Config$8, K as TransformValue, L as OverlayValue, Ln as Api$2, Mn as ProjectionSpec, N as HudPartValue, Nn as ReducedMotion, Or as Root, Qn as FeatureDescription, Qr as ThermalReading, Rn as BundlesOf, Rr as StoreApi, S as SceneDefinition, Sn as SystemFor, Sr as State$2, T as State$7, Tn as DescriptionNode, Tr as Config$5, U as SpriteOptions, Ur as Events, Vn as GameTypes, Vr as Api$3, W as SpriteValue, Wn as State$3, Wr as PauseReason, X as Config$6, Xr as RateChange, Y as Api$4, Zr as State$8, _ as AnySceneProjection, _n as Mut, _r as Answer, _t as FrameRing, a as Config$1, an as State$9, bn as ResourceType, br as Config$2, c as LoadBundles, dr as Descriptor, dt as ViewportSize, er as FeatureTree, f as ReadyBundles, fn as ComponentType, fr as Effect, gt as FrameRecord, hr as Hint, i as BundleSpec, jn as ProjectionMotion, jr as Patch, kr as State$5, l as LoadReason, lr as SceneIdOf, m as Tier, mr as GuideOptions, ni as Events$1, nn as Api$6, o as DefineBundles, p as State$1, pn as ComponentValue, pr as EffectOptions, q as sprite, qn as defineFlow, qr as Api$5, r as BundleMap, ri as Require, rn as Config$9, rr as DefineNode, rt as State$6, t as Api, ti as Config$10, u as LoadResult, un as ComponentHandle, v as Config$7, vn as Narrowed, vr as Api$1, w as ScenesApi, x as LayerMap, xn as SystemDefinition, y as DefineScene, yn as QueryTerm, zn as Config$3, zr as RngApi } from "./types-D27I4Q7b.mjs";
2
- import { A as GlowValue, B as Target, C as BlurValue, D as FilterComponent, F as AnimPlayerValue, H as HapticKind, I as Config$11, K as defineAnimation, L as FramesValue, M as OutlineValue, N as UniformDeclaration, O as FilterSpec, P as AnimApi, Q as play, R as MotionKeyframe, S as AlphaValue, T as DisplacementValue, U as SfxDescriptor, W as Step, _ as State$12, a as AudioApi, b as EmitterDefinition, c as MusicDescriptor, d as State$11, f as VolumesFor, h as EffectsApi, j as NoiseValue, k as FilterValueOf, l as MusicOptions, lt as OverlayApi, m as Config$13, n as State$13, r as UiApi, s as Config$12, t as Config$14, w as ColorMatrixValue, x as EmitterValue, y as EmitterConfig, z as State$10 } from "./types-DjQkfbfZ.mjs";
2
+ import { A as GlowValue, B as Target, C as BlurValue, D as FilterComponent, F as AnimPlayerValue, H as HapticKind, I as Config$11, K as defineAnimation, L as FramesValue, M as OutlineValue, N as UniformDeclaration, O as FilterSpec, P as AnimApi, Q as play, R as MotionKeyframe, S as AlphaValue, T as DisplacementValue, U as SfxDescriptor, W as Step, _ as State$12, a as AudioApi, b as EmitterDefinition, c as MusicDescriptor, d as State$11, f as VolumesFor, h as EffectsApi, j as NoiseValue, k as FilterValueOf, l as MusicOptions, lt as OverlayApi, m as Config$13, n as State$13, r as UiApi, s as Config$12, t as Config$14, w as ColorMatrixValue, x as EmitterValue, y as EmitterConfig, z as State$10 } from "./types-DHamyZq1.mjs";
3
3
  import { B as Message, C as State$16, D as TextStyleInput, G as TypedTr, H as State$14, I as Argument, J as ResolvedStyle, L as Config$15, M as Config$16, N as InputApi, O as TextStyles, P as State$15, R as I18nApi, S as Point, T as TextBind, V as Part, W as TextKey, Y as Style, Z as WhenFlags, b as Config$17, g as IntrinsicElementsFor, h as defineTokens, j as defineComponent, k as TextValue, q as IsFlags, s as PopupComponent, v as BindField, w as TextApi, x as CountdownValue, y as BindOptions, z as IntlKit } from "./types-BAp9HdR4.mjs";
4
4
  import { Log } from "@moku-labs/common/browser";
5
5
  import { PluginCtx } from "@moku-labs/core";
@@ -1863,7 +1863,7 @@ declare function defineGame<Types extends GameTypes>(): {
1863
1863
  readonly textures: readonly Types["assets"][];
1864
1864
  }) => EmitterDefinition;
1865
1865
  Emitter: Narrowed<EmitterValue, {
1866
- effect?: EmitterIdOf<Types>;
1866
+ effect?: "" | EmitterIdOf<Types>;
1867
1867
  active?: boolean;
1868
1868
  }>;
1869
1869
  Displacement: Narrowed<DisplacementValue, Partial<Omit<DisplacementValue, "map">> & {
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { $t as ShaderWhat, Ar as types_d_exports$10, At as PerfChange, Bt as PerfLongFrameLine, Cr as types_d_exports$3, Ct as PERF_CAUSES, Dt as PassKind, E as types_d_exports$13, Et as PROBLEM_RULES, Fr as SaveUnreadableError, Ft as PerfEventLine, G as Transform, Gt as PerfStartupLine, H as SpriteBlend, Ht as PerfMeasured, I as Overlay, It as PerfEventName, J as AdaptiveScale, Jn as exit, Jt as PoolTrimDetail, Kn as types_d_exports$6, Kr as types_d_exports$9, Kt as PerfTelemetryLine, L as OverlayValue, Lt as PerfGapLine, M as HudPart, Mt as PerfCollectorLine, N as HudPartValue, Nt as PerfCounts, Ot as PassRecord, P as NineSlice, Pt as PerfDisplay, Qt as ShaderEventDetail, R as Parent, Rt as PerfHeaderLine, St as OverlayWhat, Tn as DescriptionNode, Tt as PERF_LOG_VERSION, Ut as PerfSampleLine, V as Sprite, Vt as PerfMarkLine, Wt as PerfSpikeLine, Xn as to, Xt as ProblemRule, Yn as slot, Yt as ProblemEventDetail, Z as MonitorConfig, Zn as type, Zt as SHADER_WHATS, _t as FrameRing, at as types_d_exports$12, bt as MonitorSections, ei as types_d_exports$15, en as WarmDetail, g as types_d_exports$1, gt as FrameRecord, ht as FrameReadout, j as Display, jt as PerfChangeEntry, kt as PerfCause, mt as FrameReadResult, nt as PoolTrim, on as types_d_exports$17, pt as FrameColumns, q as sprite, qt as PerfThermalLine, st as MonitorCounts, tn as DEMAND_REASONS, vt as LongFrameEntry, wt as PERF_GAP_BUCKETS, xt as OverlayEventDetail, yt as MONITOR_SECTIONS, z as Shape, zt as PerfLogLine } from "./types-D27I4Q7b.mjs";
2
- import { $ as sequence, E as FilterArea, G as HAPTIC_KINDS, H as HapticKind, J as frames, K as defineAnimation, Q as play, V as types_d_exports, X as mark, Y as haptic, Z as parallel, at as stopSfx, ct as wait, et as set, i as types_d_exports$16, it as stagger, nt as spawn, ot as tween, p as types_d_exports$2, q as external, rt as spawned, st as use, tt as sfx, ut as types_d_exports$4, v as types_d_exports$5 } from "./types-DjQkfbfZ.mjs";
2
+ import { $ as sequence, E as FilterArea, G as HAPTIC_KINDS, H as HapticKind, J as frames, K as defineAnimation, Q as play, V as types_d_exports, X as mark, Y as haptic, Z as parallel, at as stopSfx, ct as wait, et as set, i as types_d_exports$16, it as stagger, nt as spawn, ot as tween, p as types_d_exports$2, q as external, rt as spawned, st as use, tt as sfx, ut as types_d_exports$4, v as types_d_exports$5 } from "./types-DHamyZq1.mjs";
3
3
  import { A as types_d_exports$14, E as TextFormat, F as types_d_exports$8, K as types_d_exports$7, d as DebugTrigger, f as LocalWrite, h as defineTokens, j as defineComponent, m as popup, p as ScrollState, u as Box, x as CountdownValue, y as BindOptions } from "./types-BAp9HdR4.mjs";
4
- import { $ as system, A as Draggable, At as Text, B as Touchable, C as AnimPlayer, Ct as debugPlugin, D as defineBundles, Dt as animPlugin, E as defineScene, Et as assetsPlugin, F as PointerOver, G as Exiting, H as Traced, I as Pressable, J as Order, K as Layer, L as Pressed, M as Held, Mt as defineTextStyles, N as Hovered, Nt as label, O as load, Ot as projection, P as Pointer, Q as resource, R as Swipeable, S as defineMotion, St as effectsPlugin, T as Frames, Tt as audioPlugin, U as PASS_KINDS, V as Traceable, W as frameAt, X as component, Y as Tree, Z as mut, _ as defineStyle, _t as modelPlugin, a as defineEmitter, at as defineFeature, b as messageDuration, bt as i18nPlugin, c as Alpha, ct as uiPlugin, d as Displacement, dt as scenesPlugin, et as tag, f as Glow, ft as rendererPlugin, g as resolve, gt as types_d_exports$11, h as music, ht as PlatformProvider, i as screen, it as schedule, j as DropTarget, jt as bind, k as ready, kt as Countdown, l as Blur, lt as timePlugin, m as Outline, mt as BackResult, n as createPlugin, nt as guide, o as Emitter, ot as flattenFeatures, p as Noise, pt as platformPlugin, q as Now, r as defineGame, rt as hint, s as defineFilter, st as worldPlugin, t as createApp, tt as defineEffect, u as ColorMatrix, ut as textPlugin, v as tr, vt as lifecyclePlugin, w as Animation, wt as clockPlugin, x as cubicBezier, xt as flowPlugin, y as messageArgument, yt as inputPlugin, z as Tappable } from "./index-Cl5zwodk.mjs";
4
+ import { $ as system, A as Draggable, At as Text, B as Touchable, C as AnimPlayer, Ct as debugPlugin, D as defineBundles, Dt as animPlugin, E as defineScene, Et as assetsPlugin, F as PointerOver, G as Exiting, H as Traced, I as Pressable, J as Order, K as Layer, L as Pressed, M as Held, Mt as defineTextStyles, N as Hovered, Nt as label, O as load, Ot as projection, P as Pointer, Q as resource, R as Swipeable, S as defineMotion, St as effectsPlugin, T as Frames, Tt as audioPlugin, U as PASS_KINDS, V as Traceable, W as frameAt, X as component, Y as Tree, Z as mut, _ as defineStyle, _t as modelPlugin, a as defineEmitter, at as defineFeature, b as messageDuration, bt as i18nPlugin, c as Alpha, ct as uiPlugin, d as Displacement, dt as scenesPlugin, et as tag, f as Glow, ft as rendererPlugin, g as resolve, gt as types_d_exports$11, h as music, ht as PlatformProvider, i as screen, it as schedule, j as DropTarget, jt as bind, k as ready, kt as Countdown, l as Blur, lt as timePlugin, m as Outline, mt as BackResult, n as createPlugin, nt as guide, o as Emitter, ot as flattenFeatures, p as Noise, pt as platformPlugin, q as Now, r as defineGame, rt as hint, s as defineFilter, st as worldPlugin, t as createApp, tt as defineEffect, u as ColorMatrix, ut as textPlugin, v as tr, vt as lifecyclePlugin, w as Animation, wt as clockPlugin, x as cubicBezier, xt as flowPlugin, y as messageArgument, yt as inputPlugin, z as Tappable } from "./index-DMeqKGSu.mjs";
5
5
  export { type AdaptiveScale, Alpha, types_d_exports as Anim, AnimPlayer, Animation, types_d_exports$1 as Assets, types_d_exports$2 as Audio, type BackResult, type BindOptions, Blur, Box, types_d_exports$3 as Clock, ColorMatrix, Countdown, type CountdownValue, DEMAND_REASONS, types_d_exports$4 as Debug, DebugTrigger, type DescriptionNode, Displacement, Display, Draggable, DropTarget, types_d_exports$5 as Effects, Emitter, Exiting, type FilterArea, types_d_exports$6 as Flow, type FrameColumns, type FrameReadResult, type FrameReadout, type FrameRecord, type FrameRing, Frames, Glow, HAPTIC_KINDS, type HapticKind, Held, Hovered, HudPart, type HudPartValue, types_d_exports$7 as I18n, types_d_exports$8 as Input, Layer, types_d_exports$9 as Lifecycle, LocalWrite, type LongFrameEntry, MONITOR_SECTIONS, types_d_exports$10 as Model, type MonitorConfig, type MonitorCounts, type MonitorSections, NineSlice, Noise, Now, Order, Outline, Overlay, type OverlayEventDetail, type OverlayValue, type OverlayWhat, PASS_KINDS, PERF_CAUSES, PERF_GAP_BUCKETS, PERF_LOG_VERSION, PROBLEM_RULES, Parent, type PassKind, type PassRecord, type PerfCause, type PerfChange, type PerfChangeEntry, type PerfCollectorLine, type PerfCounts, type PerfDisplay, type PerfEventLine, type PerfEventName, type PerfGapLine, type PerfHeaderLine, type PerfLogLine, type PerfLongFrameLine, type PerfMarkLine, type PerfMeasured, type PerfSampleLine, type PerfSpikeLine, type PerfStartupLine, type PerfTelemetryLine, type PerfThermalLine, types_d_exports$11 as Platform, type PlatformProvider, Pointer, PointerOver, type PoolTrim, type PoolTrimDetail, Pressable, Pressed, type ProblemEventDetail, type ProblemRule, types_d_exports$12 as Renderer, SHADER_WHATS, SaveUnreadableError, types_d_exports$13 as Scenes, ScrollState, type ShaderEventDetail, type ShaderWhat, Shape, Sprite, type SpriteBlend, Swipeable, Tappable, Text, type TextFormat, types_d_exports$14 as TextTypes, types_d_exports$15 as Time, Touchable, Traceable, Traced, Transform, Tree, types_d_exports$16 as Ui, type WarmDetail, types_d_exports$17 as World, animPlugin, assetsPlugin, audioPlugin, bind, clockPlugin, component, createApp, createPlugin, cubicBezier, debugPlugin, defineAnimation, defineBundles, defineComponent, defineEffect, defineEmitter, defineFeature, defineFilter, defineGame, defineMotion, defineScene, defineStyle, defineTextStyles, defineTokens, effectsPlugin, exit, external, flattenFeatures, flowPlugin, frameAt, frames, guide, haptic, hint, i18nPlugin, inputPlugin, label, lifecyclePlugin, load, mark, messageArgument, messageDuration, modelPlugin, music, mut, parallel, platformPlugin, play, popup, projection, ready, rendererPlugin, resolve, resource, scenesPlugin, schedule, screen, sequence, set, sfx, slot, spawn, spawned, sprite, stagger, stopSfx, system, tag, textPlugin, timePlugin, to, tr, tween, type, uiPlugin, use, wait, worldPlugin };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as sfx, $t as flowPlugin, A as types_exports$7, At as Glow, B as defineMotion, Bt as Animation, C as types_exports$14, Ct as messageDuration, D as types_exports$10, Dt as Blur, E as types_exports$11, Et as Alpha, F as types_exports$2, Ft as audioPlugin, G as external, Gt as MONITOR_SECTIONS, H as platformPlugin, Ht as rendererPlugin, I as types_exports$1, It as scenesPlugin, J as mark, Jt as PERF_LOG_VERSION, K as frames, Kt as PERF_CAUSES, L as types_exports, Lt as assetsPlugin, M as types_exports$5, Mt as Outline, N as types_exports$4, Nt as defineFilter, O as types_exports$9, Ot as ColorMatrix, P as types_exports$3, Pt as debugPlugin, Q as set, Qt as worldPlugin, R as uiPlugin, Rt as animPlugin, S as types_exports$15, St as messageArgument, T as types_exports$12, Tt as Emitter, U as HAPTIC_KINDS, Ut as PASS_KINDS, V as textPlugin, Vt as Frames, W as defineAnimation, Wt as frameAt, X as play, Xt as SHADER_WHATS, Y as parallel, Yt as PROBLEM_RULES, Z as sequence, Zt as DEMAND_REASONS, _ as defineBundles, _t as Tappable, a as cubicBezier, an as modelPlugin, at as use, b as types_exports$17, bt as Traced, c as hint, cn as timePlugin, ct as Draggable, d as defineScene, dt as Hovered, et as spawn, f as tr, ft as Pointer, g as music, gt as Swipeable, h as defineEmitter, ht as Pressed, i as screen, in as type, it as tween, j as types_exports$6, jt as Noise, k as types_exports$8, kt as Displacement, l as schedule, ln as clockPlugin, lt as DropTarget, m as flattenFeatures, mt as Pressable, n as createPlugin, nn as slot, nt as stagger, o as defineEffect, on as SaveUnreadableError, ot as wait, p as defineFeature, pt as PointerOver, q as haptic, qt as PERF_GAP_BUCKETS, r as defineGame, rn as to, rt as stopSfx, s as guide, sn as lifecyclePlugin, st as inputPlugin, t as createApp, tn as exit, tt as spawned, u as projection, ut as Held, v as load, vt as Touchable, w as types_exports$13, wt as effectsPlugin, x as types_exports$16, xt as i18nPlugin, y as ready, yt as Traceable, z as resolve, zt as AnimPlayer } from "./src-wyJYr12n.mjs";
1
+ import { $ as sfx, $t as flowPlugin, A as types_exports$7, At as Glow, B as defineMotion, Bt as Animation, C as types_exports$14, Ct as messageDuration, D as types_exports$10, Dt as Blur, E as types_exports$11, Et as Alpha, F as types_exports$2, Ft as audioPlugin, G as external, Gt as MONITOR_SECTIONS, H as platformPlugin, Ht as rendererPlugin, I as types_exports$1, It as scenesPlugin, J as mark, Jt as PERF_LOG_VERSION, K as frames, Kt as PERF_CAUSES, L as types_exports, Lt as assetsPlugin, M as types_exports$5, Mt as Outline, N as types_exports$4, Nt as defineFilter, O as types_exports$9, Ot as ColorMatrix, P as types_exports$3, Pt as debugPlugin, Q as set, Qt as worldPlugin, R as uiPlugin, Rt as animPlugin, S as types_exports$15, St as messageArgument, T as types_exports$12, Tt as Emitter, U as HAPTIC_KINDS, Ut as PASS_KINDS, V as textPlugin, Vt as Frames, W as defineAnimation, Wt as frameAt, X as play, Xt as SHADER_WHATS, Y as parallel, Yt as PROBLEM_RULES, Z as sequence, Zt as DEMAND_REASONS, _ as defineBundles, _t as Tappable, a as cubicBezier, an as modelPlugin, at as use, b as types_exports$17, bt as Traced, c as hint, cn as timePlugin, ct as Draggable, d as defineScene, dt as Hovered, et as spawn, f as tr, ft as Pointer, g as music, gt as Swipeable, h as defineEmitter, ht as Pressed, i as screen, in as type, it as tween, j as types_exports$6, jt as Noise, k as types_exports$8, kt as Displacement, l as schedule, ln as clockPlugin, lt as DropTarget, m as flattenFeatures, mt as Pressable, n as createPlugin, nn as slot, nt as stagger, o as defineEffect, on as SaveUnreadableError, ot as wait, p as defineFeature, pt as PointerOver, q as haptic, qt as PERF_GAP_BUCKETS, r as defineGame, rn as to, rt as stopSfx, s as guide, sn as lifecyclePlugin, st as inputPlugin, t as createApp, tn as exit, tt as spawned, u as projection, ut as Held, v as load, vt as Touchable, w as types_exports$13, wt as effectsPlugin, x as types_exports$16, xt as i18nPlugin, y as ready, yt as Traceable, z as resolve, zt as AnimPlayer } from "./src-5qdNjLKN.mjs";
2
2
  import { $ as component, H as Shape, I as Display, J as Exiting, L as HudPart, Q as Tree, R as NineSlice, S as bind, T as label, U as Sprite, V as Parent, W as Transform, X as Now, Y as Layer, Z as Order, b as Countdown, d as LocalWrite, et as mut, g as popup, it as tag, l as DebugTrigger, nt as system, p as ScrollState, q as sprite, s as Box, tt as resource, v as defineTokens, w as defineTextStyles, x as Text, y as defineStyle, z as Overlay } from "./visual-ClVRMUAi.mjs";
3
3
  import { t as defineComponent } from "./component-DGg5DqKK.mjs";
4
4
  export { Alpha, types_exports as Anim, AnimPlayer, Animation, types_exports$1 as Assets, types_exports$2 as Audio, Blur, Box, types_exports$3 as Clock, ColorMatrix, Countdown, DEMAND_REASONS, types_exports$4 as Debug, DebugTrigger, Displacement, Display, Draggable, DropTarget, types_exports$5 as Effects, Emitter, Exiting, types_exports$6 as Flow, Frames, Glow, HAPTIC_KINDS, Held, Hovered, HudPart, types_exports$7 as I18n, types_exports$8 as Input, Layer, types_exports$9 as Lifecycle, LocalWrite, MONITOR_SECTIONS, types_exports$10 as Model, NineSlice, Noise, Now, Order, Outline, Overlay, PASS_KINDS, PERF_CAUSES, PERF_GAP_BUCKETS, PERF_LOG_VERSION, PROBLEM_RULES, Parent, types_exports$11 as Platform, Pointer, PointerOver, Pressable, Pressed, types_exports$12 as Renderer, SHADER_WHATS, SaveUnreadableError, types_exports$13 as Scenes, ScrollState, Shape, Sprite, Swipeable, Tappable, Text, types_exports$14 as TextTypes, types_exports$15 as Time, Touchable, Traceable, Traced, Transform, Tree, types_exports$16 as Ui, types_exports$17 as World, animPlugin, assetsPlugin, audioPlugin, bind, clockPlugin, component, createApp, createPlugin, cubicBezier, debugPlugin, defineAnimation, defineBundles, defineComponent, defineEffect, defineEmitter, defineFeature, defineFilter, defineGame, defineMotion, defineScene, defineStyle, defineTextStyles, defineTokens, effectsPlugin, exit, external, flattenFeatures, flowPlugin, frameAt, frames, guide, haptic, hint, i18nPlugin, inputPlugin, label, lifecyclePlugin, load, mark, messageArgument, messageDuration, modelPlugin, music, mut, parallel, platformPlugin, play, popup, projection, ready, rendererPlugin, resolve, resource, scenesPlugin, schedule, screen, sequence, set, sfx, slot, spawn, spawned, sprite, stagger, stopSfx, system, tag, textPlugin, timePlugin, to, tr, tween, type, uiPlugin, use, wait, worldPlugin };
@@ -1,5 +1,5 @@
1
1
  import { Ir as Snapshot, Un as Position, Y as Api$2, ct as RenderStats, dn as ComponentSchema, gn as FrameDiff, h as Usage, hn as EntitySnapshot, in as Explained, ir as FlowGraph, it as Under, nn as Api$1, or as JournalEntry, t as Api$3, wr as Api } from "./types-D27I4Q7b.mjs";
2
- import { a as AudioApi, g as EffectsStats, h as EffectsApi, r as UiApi, u as SoundEntry } from "./types-DjQkfbfZ.mjs";
2
+ import { a as AudioApi, g as EffectsStats, h as EffectsApi, r as UiApi, u as SoundEntry } from "./types-DHamyZq1.mjs";
3
3
  import { c as UiNode } from "./types-BAp9HdR4.mjs";
4
4
  import { t as HeadlessApp } from "./headless-f31cEZ7f.mjs";
5
5
  import { a as InputOf, c as Source, i as InputArguments, l as WatchApp, o as InputSchema, t as CheatEntry, u as WatchInput } from "./types-CgE5L_7f.mjs";
@@ -56,7 +56,7 @@ declare const sources: Readonly<{
56
56
  graph: Source<{}, FlowGraph, HeadlessApp>;
57
57
  position: Source<{}, Position, HeadlessApp>;
58
58
  history: Source<{
59
- last: "number?";
59
+ readonly last: "number?";
60
60
  }, readonly JournalEntry[], HeadlessApp>;
61
61
  tainted: Source<{}, boolean, HeadlessApp>;
62
62
  cheats: Source<{}, readonly CheatEntry[], HeadlessApp>;
@@ -64,8 +64,8 @@ declare const sources: Readonly<{
64
64
  readonly model: Api;
65
65
  }>;
66
66
  entities: Source<{
67
- owner: "string?";
68
- component: "string?";
67
+ readonly owner: "string?";
68
+ readonly component: "string?";
69
69
  }, EntitySnapshot[], HeadlessApp & {
70
70
  readonly world: Api$1;
71
71
  }>;
@@ -92,7 +92,7 @@ declare const sources: Readonly<{
92
92
  readonly renderer: Api$2;
93
93
  }>;
94
94
  sounds: Source<{
95
- last: "number?";
95
+ readonly last: "number?";
96
96
  }, readonly SoundEntry[], HeadlessApp & {
97
97
  readonly audio?: AudioApi;
98
98
  }>;
@@ -112,18 +112,18 @@ declare const sources: Readonly<{
112
112
  readonly assets: Api$3;
113
113
  }>;
114
114
  log: Source<{
115
- level: "string?";
115
+ readonly level: "string?";
116
116
  }, readonly import("@moku-labs/common/browser").LogEntry[], HeadlessApp & {
117
117
  readonly log: import("@moku-labs/common/browser").LogApi;
118
118
  }>;
119
119
  explain: Source<{
120
- entity: "number";
120
+ readonly entity: "number";
121
121
  }, Explained | undefined, HeadlessApp & {
122
122
  readonly world: Api$1;
123
123
  }>;
124
124
  diff: Source<{
125
- from: "number";
126
- to: "number";
125
+ readonly from: "number";
126
+ readonly to: "number";
127
127
  }, FrameDiff, HeadlessApp & {
128
128
  readonly world: Api$1;
129
129
  }>;
@@ -131,8 +131,8 @@ declare const sources: Readonly<{
131
131
  readonly world: Api$1;
132
132
  }>;
133
133
  at: Source<{
134
- x: "number";
135
- y: "number";
134
+ readonly x: "number";
135
+ readonly y: "number";
136
136
  }, readonly Under[], HeadlessApp & {
137
137
  readonly renderer: Api$2;
138
138
  readonly world: Api$1;
package/dist/inspect.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { c as defineSource } from "./session-CeKgO2hy.mjs";
2
- import { n as read, r as watch, t as sources } from "./sources-ncFMQIus.mjs";
1
+ import { c as defineSource } from "./session-DuZfGZWk.mjs";
2
+ import { n as read, r as watch, t as sources } from "./sources-DM5Zcl4o.mjs";
3
3
  import "./inspect-la_KkjCS.mjs";
4
4
  export { defineSource, read, sources, watch };
@@ -1,7 +1,7 @@
1
1
  import { a as sheetAlone, p as graphHash } from "./capture-PTJXDpxK.mjs";
2
2
  import { a as isDev, i as isControl, n as controlRefused, o as notInstalled, r as isAgent, t as controlReadOnly } from "./dev-BNndV-hU.mjs";
3
3
  import { n as reproBookmark } from "./headless-Bxxl_mQX.mjs";
4
- import { a as readTarget, i as isProjectionTarget, n as isTainted, o as inputOrEmpty, r as recordCheat, s as defineCommand } from "./session-CeKgO2hy.mjs";
4
+ import { a as readTarget, i as isProjectionTarget, l as inputSchema, n as isTainted, o as inputOrEmpty, r as recordCheat, s as defineCommand } from "./session-DuZfGZWk.mjs";
5
5
  //#region src/plugins/anim/control.ts
6
6
  /**
7
7
  * @file anim plugin — the anim command of the `/control` door: switch reduced motion. Dev and
@@ -21,7 +21,7 @@ import { a as readTarget, i as isProjectionTarget, n as isTainted, o as inputOrE
21
21
  const reducedMotionCommand = defineCommand({
22
22
  id: "game.reducedMotion",
23
23
  title: "Reduced motion",
24
- input: { on: "boolean" },
24
+ input: inputSchema(["on", "boolean"]),
25
25
  effect: "cosmetic",
26
26
  run: (app, { on }) => {
27
27
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -54,7 +54,7 @@ const reducedMotionCommand = defineCommand({
54
54
  const muteCommand = defineCommand({
55
55
  id: "game.mute",
56
56
  title: "Mute",
57
- input: { muted: "boolean" },
57
+ input: inputSchema(["muted", "boolean"]),
58
58
  effect: "cosmetic",
59
59
  run: (app, { muted }) => {
60
60
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -91,10 +91,7 @@ const muteCommand = defineCommand({
91
91
  const filterCommand = defineCommand({
92
92
  id: "game.filter",
93
93
  title: "Filter kind on or off",
94
- input: {
95
- kind: "string",
96
- on: "boolean"
97
- },
94
+ input: inputSchema(["kind", "string"], ["on", "boolean"]),
98
95
  effect: "cosmetic",
99
96
  run: (app, { kind, on }) => {
100
97
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -148,10 +145,7 @@ function readPath(value) {
148
145
  const dragCommand = defineCommand({
149
146
  id: "game.drag",
150
147
  title: "Drag",
151
- input: {
152
- from: "json",
153
- to: "json"
154
- },
148
+ input: inputSchema(["from", "json"], ["to", "json"]),
155
149
  effect: "route",
156
150
  run: (app, { from, to }) => {
157
151
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
@@ -173,7 +167,7 @@ const dragCommand = defineCommand({
173
167
  const traceCommand = defineCommand({
174
168
  id: "game.trace",
175
169
  title: "Trace",
176
- input: { path: "json" },
170
+ input: inputSchema(["path", "json"]),
177
171
  effect: "route",
178
172
  run: (app, { path }) => {
179
173
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
@@ -195,10 +189,7 @@ const traceCommand = defineCommand({
195
189
  const keyCommand = defineCommand({
196
190
  id: "game.key",
197
191
  title: "Press a key",
198
- input: {
199
- key: "string",
200
- shift: "boolean?"
201
- },
192
+ input: inputSchema(["key", "string"], ["shift", "boolean?"]),
202
193
  effect: "route",
203
194
  run: (app, { key, shift = false }) => {
204
195
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
@@ -789,12 +780,7 @@ async function captureDiff(app, options, diff, raw) {
789
780
  const captureCommand = defineCommand({
790
781
  id: "game.capture",
791
782
  title: "Capture",
792
- input: {
793
- legend: "boolean?",
794
- layers: "json?",
795
- sheet: "json?",
796
- diff: "json?"
797
- },
783
+ input: inputSchema(["legend", "boolean?"], ["layers", "json?"], ["sheet", "json?"], ["diff", "json?"]),
798
784
  effect: "read",
799
785
  run: (app, input) => {
800
786
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -834,12 +820,7 @@ const captureCommand = defineCommand({
834
820
  const debugCommand = defineCommand({
835
821
  id: "game.debug",
836
822
  title: "Debug drawing",
837
- input: {
838
- nineSlice: "boolean?",
839
- verifyFrames: "boolean?",
840
- kept: "boolean?",
841
- overdraw: "boolean?"
842
- },
823
+ input: inputSchema(["nineSlice", "boolean?"], ["verifyFrames", "boolean?"], ["kept", "boolean?"], ["overdraw", "boolean?"]),
843
824
  effect: "cosmetic",
844
825
  run: (app, { nineSlice, verifyFrames, kept, overdraw }) => {
845
826
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -901,10 +882,7 @@ function checkScale(scale) {
901
882
  const stepCommand = defineCommand({
902
883
  id: "game.step",
903
884
  title: "Step frames",
904
- input: {
905
- frames: "number",
906
- deltaMs: "number?"
907
- },
885
+ input: inputSchema(["frames", "number"], ["deltaMs", "number?"]),
908
886
  effect: "cosmetic",
909
887
  run: (app, { frames, deltaMs = FRAME_MS }) => {
910
888
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -930,7 +908,7 @@ const stepCommand = defineCommand({
930
908
  const timeScaleCommand = defineCommand({
931
909
  id: "game.timeScale",
932
910
  title: "Time scale",
933
- input: { scale: "number" },
911
+ input: inputSchema(["scale", "number"]),
934
912
  effect: "cosmetic",
935
913
  run: (app, { scale }) => {
936
914
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -960,7 +938,7 @@ const timeScaleCommand = defineCommand({
960
938
  const frameRateCommand = defineCommand({
961
939
  id: "game.frameRate",
962
940
  title: "Frame rate",
963
- input: { fps: "number?" },
941
+ input: inputSchema(["fps", "number?"]),
964
942
  effect: "cosmetic",
965
943
  run: (app, { fps }) => {
966
944
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_AGENT__ === "undefined" || !__MOKU_GAME_AGENT__)) throw controlRefused();
@@ -1189,10 +1167,7 @@ function startBookmark(app, save) {
1189
1167
  const answerCommand = defineCommand({
1190
1168
  id: "game.answer",
1191
1169
  title: "Answer",
1192
- input: {
1193
- intent: "string",
1194
- payload: "json?"
1195
- },
1170
+ input: inputSchema(["intent", "string"], ["payload", "json?"]),
1196
1171
  effect: "route",
1197
1172
  run: (app, { intent, payload }) => {
1198
1173
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
@@ -1219,7 +1194,7 @@ const answerCommand = defineCommand({
1219
1194
  const walkCommand = defineCommand({
1220
1195
  id: "game.walk",
1221
1196
  title: "Walk a route",
1222
- input: { route: "json" },
1197
+ input: inputSchema(["route", "json"]),
1223
1198
  effect: "route",
1224
1199
  run: (app, { route }) => {
1225
1200
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
@@ -1285,10 +1260,7 @@ const bookmarkCommand = defineCommand({
1285
1260
  const restoreCommand = defineCommand({
1286
1261
  id: "game.restore",
1287
1262
  title: "Restore",
1288
- input: {
1289
- bookmark: "json?",
1290
- repro: "json?"
1291
- },
1263
+ input: inputSchema(["bookmark", "json?"], ["repro", "json?"]),
1292
1264
  effect: "raw",
1293
1265
  run: (app, input) => {
1294
1266
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
@@ -1344,7 +1316,7 @@ const saveExportCommand = defineCommand({
1344
1316
  const saveImportCommand = defineCommand({
1345
1317
  id: "game.saveImport",
1346
1318
  title: "Import a save",
1347
- input: { save: "json" },
1319
+ input: inputSchema(["save", "json"]),
1348
1320
  effect: "raw",
1349
1321
  run: async (app, { save }) => {
1350
1322
  if ((typeof __MOKU_GAME_DEV__ === "undefined" || !__MOKU_GAME_DEV__) && (typeof __MOKU_GAME_CONTROL__ === "undefined" || !__MOKU_GAME_CONTROL__)) throw controlRefused();
@@ -13,6 +13,25 @@ function checkId(kind, id) {
13
13
  throw new Error(`[game] The ${kind} id "${id}" is not a dotted name.\n Name it like "game.position": camelCase words joined by dots.`);
14
14
  }
15
15
  /**
16
+ * Builds the input schema of a door without an object literal (F77). A literal such as
17
+ * `{ x: "number", y: "number" }` shares V8's hidden shape with the game's points and stores
18
+ * strings where they store numbers: V8 turns the fields of that shape tagged, and every fractional
19
+ * write into any `{ x, y }` then boxes a heap number. An object without a prototype is a
20
+ * dictionary and shares no shape with anything.
21
+ *
22
+ * @param entries - The fields, each `[name, kind]`.
23
+ * @returns The schema, an object without a prototype.
24
+ * @example
25
+ * ```ts
26
+ * inputSchema(["x", "number"], ["y", "number"]); // { x: "number", y: "number" }, no prototype
27
+ * ```
28
+ */
29
+ function inputSchema(...entries) {
30
+ const schema = Object.create(null);
31
+ for (const [name, kind] of entries) schema[name] = kind;
32
+ return schema;
33
+ }
34
+ /**
16
35
  * Declares a source: a read-only view the editor lists, reads and watches. The types flow from
17
36
  * the object: the input from `input`, the app from the `read` parameter, the output from its
18
37
  * result.
@@ -199,4 +218,4 @@ function recordCheat(app, id, input, frame) {
199
218
  sessions.set(app, session);
200
219
  }
201
220
  //#endregion
202
- export { readTarget as a, defineSource as c, isProjectionTarget as i, isTainted as n, inputOrEmpty as o, recordCheat as r, defineCommand as s, cheatsOf as t };
221
+ export { readTarget as a, defineSource as c, isProjectionTarget as i, inputSchema as l, isTainted as n, inputOrEmpty as o, recordCheat as r, defineCommand as s, cheatsOf as t };
@@ -1,6 +1,6 @@
1
1
  import { F as rootPoseOf, H as Shape, R as NineSlice, Y as Layer, j as parentOf, n as drawnRect, s as Box } from "./visual-ClVRMUAi.mjs";
2
2
  import { o as notInstalled } from "./dev-BNndV-hU.mjs";
3
- import { a as readTarget, c as defineSource, n as isTainted, o as inputOrEmpty, t as cheatsOf } from "./session-CeKgO2hy.mjs";
3
+ import { a as readTarget, c as defineSource, l as inputSchema, n as isTainted, o as inputOrEmpty, t as cheatsOf } from "./session-DuZfGZWk.mjs";
4
4
  //#region src/plugins/flow/doors/read.ts
5
5
  /**
6
6
  * @file flow/doors — `read` and `watch`, the `/inspect` side. Neither changes the game.
@@ -117,7 +117,7 @@ const assetsSource = defineSource({
117
117
  const soundsSource = defineSource({
118
118
  id: "game.sounds",
119
119
  title: "Sounds",
120
- input: { last: "number?" },
120
+ input: inputSchema(["last", "number?"]),
121
121
  changes: "frame",
122
122
  read: (app, { last }) => {
123
123
  if (app.audio === void 0) throw notInstalled("game.sounds", "audioPlugin");
@@ -283,10 +283,7 @@ const renderSource = defineSource({
283
283
  const atSource = defineSource({
284
284
  id: "game.at",
285
285
  title: "Under a point",
286
- input: {
287
- x: "number",
288
- y: "number"
289
- },
286
+ input: inputSchema(["x", "number"], ["y", "number"]),
290
287
  changes: "frame",
291
288
  read: (app, { x, y }) => {
292
289
  const point = app.renderer.viewport.toReference(x, y);
@@ -516,10 +513,7 @@ function carries(entity, component) {
516
513
  const entitiesSource = defineSource({
517
514
  id: "game.entities",
518
515
  title: "Entities",
519
- input: {
520
- owner: "string?",
521
- component: "string?"
522
- },
516
+ input: inputSchema(["owner", "string?"], ["component", "string?"]),
523
517
  changes: "frame",
524
518
  read: (app, { owner, component }) => app.world.ecs.snapshot().entities.filter((entity) => (owner === void 0 || entity.owner.name === owner) && (component === void 0 || carries(entity, component)))
525
519
  });
@@ -569,7 +563,7 @@ const projectionsSource = defineSource({
569
563
  const explainSource = defineSource({
570
564
  id: "game.explain",
571
565
  title: "Entity",
572
- input: { entity: "number" },
566
+ input: inputSchema(["entity", "number"]),
573
567
  changes: "frame",
574
568
  read: (app, { entity }) => {
575
569
  const row = app.world.ecs.snapshot().entities.find((candidate) => candidate.id === entity);
@@ -602,10 +596,7 @@ const explainSource = defineSource({
602
596
  const diffSource = defineSource({
603
597
  id: "game.diff",
604
598
  title: "Frame diff",
605
- input: {
606
- from: "number",
607
- to: "number"
608
- },
599
+ input: inputSchema(["from", "number"], ["to", "number"]),
609
600
  changes: "frame",
610
601
  read: (app, { from, to }) => app.world.ecs.diff(from, to)
611
602
  });
@@ -719,7 +710,7 @@ const positionSource = defineSource({
719
710
  const historySource = defineSource({
720
711
  id: "game.history",
721
712
  title: "History",
722
- input: { last: "number?" },
713
+ input: inputSchema(["last", "number?"]),
723
714
  changes: "edge",
724
715
  read: (app, { last }) => {
725
716
  const entries = app.flow.history();
@@ -771,7 +762,7 @@ const cheatsSource = defineSource({
771
762
  const logSource = defineSource({
772
763
  id: "game.log",
773
764
  title: "Log",
774
- input: { level: "string?" },
765
+ input: inputSchema(["level", "string?"]),
775
766
  changes: "frame",
776
767
  read: (app, { level }) => {
777
768
  const entries = app.log.trace();