@series-inc/rundot-syncplay 5.23.0-beta.7

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 (264) hide show
  1. package/README.md +610 -0
  2. package/dist/animation.d.ts +119 -0
  3. package/dist/animation.js +488 -0
  4. package/dist/asset-cooking.d.ts +82 -0
  5. package/dist/asset-cooking.js +364 -0
  6. package/dist/authority-room.d.ts +217 -0
  7. package/dist/authority-room.js +701 -0
  8. package/dist/bot-documents.d.ts +115 -0
  9. package/dist/bot-documents.js +549 -0
  10. package/dist/bot-primitives.d.ts +152 -0
  11. package/dist/bot-primitives.js +472 -0
  12. package/dist/browser.d.ts +57 -0
  13. package/dist/browser.js +53 -0
  14. package/dist/canonical.d.ts +12 -0
  15. package/dist/canonical.js +288 -0
  16. package/dist/certification.d.ts +455 -0
  17. package/dist/certification.js +1855 -0
  18. package/dist/chaos-certification.d.ts +56 -0
  19. package/dist/chaos-certification.js +1397 -0
  20. package/dist/cjs/animation.js +495 -0
  21. package/dist/cjs/asset-cooking.js +372 -0
  22. package/dist/cjs/authority-room.js +704 -0
  23. package/dist/cjs/bot-documents.js +556 -0
  24. package/dist/cjs/bot-primitives.js +482 -0
  25. package/dist/cjs/browser.js +96 -0
  26. package/dist/cjs/canonical.js +299 -0
  27. package/dist/cjs/certification.js +1860 -0
  28. package/dist/cjs/chaos-certification.js +1402 -0
  29. package/dist/cjs/collections.js +36 -0
  30. package/dist/cjs/collision.js +96 -0
  31. package/dist/cjs/commands.js +987 -0
  32. package/dist/cjs/config-bundle.js +491 -0
  33. package/dist/cjs/creator.js +30 -0
  34. package/dist/cjs/deterministic-primitives.js +134 -0
  35. package/dist/cjs/deterministic-session.js +1410 -0
  36. package/dist/cjs/ecs-lite.js +155 -0
  37. package/dist/cjs/effects-adapter.js +97 -0
  38. package/dist/cjs/engine-complete.js +2297 -0
  39. package/dist/cjs/engine-core-proof.js +70 -0
  40. package/dist/cjs/engine-parity-matrix.js +874 -0
  41. package/dist/cjs/engine-parity.js +3183 -0
  42. package/dist/cjs/engine-runtime.js +3141 -0
  43. package/dist/cjs/errors.js +22 -0
  44. package/dist/cjs/events.js +247 -0
  45. package/dist/cjs/examples/counter-duel.js +157 -0
  46. package/dist/cjs/examples/fixed-arena.js +368 -0
  47. package/dist/cjs/index.js +229 -0
  48. package/dist/cjs/input-authority.js +150 -0
  49. package/dist/cjs/input-button.js +256 -0
  50. package/dist/cjs/input-timeline.js +418 -0
  51. package/dist/cjs/instant-replay.js +66 -0
  52. package/dist/cjs/lag-compensation3d.js +837 -0
  53. package/dist/cjs/local-authority-server-runner.js +1121 -0
  54. package/dist/cjs/local-authority-wire.js +1497 -0
  55. package/dist/cjs/local-authority.js +817 -0
  56. package/dist/cjs/local-ws-adapter.js +150 -0
  57. package/dist/cjs/match-log.js +61 -0
  58. package/dist/cjs/math.js +157 -0
  59. package/dist/cjs/mock-network-adapter.js +26 -0
  60. package/dist/cjs/movement.js +703 -0
  61. package/dist/cjs/movement3d.js +1246 -0
  62. package/dist/cjs/multiclient-authority.js +308 -0
  63. package/dist/cjs/multiplayer-service.js +434 -0
  64. package/dist/cjs/navigation.js +347 -0
  65. package/dist/cjs/navmesh.js +1437 -0
  66. package/dist/cjs/networked-client.js +691 -0
  67. package/dist/cjs/networked-input-authority.js +443 -0
  68. package/dist/cjs/node.js +47 -0
  69. package/dist/cjs/number-lab.js +78 -0
  70. package/dist/cjs/offline-session.js +370 -0
  71. package/dist/cjs/package.json +1 -0
  72. package/dist/cjs/pause-resume.js +43 -0
  73. package/dist/cjs/physics-cert.js +426 -0
  74. package/dist/cjs/physics2d.js +751 -0
  75. package/dist/cjs/physics3d.js +1996 -0
  76. package/dist/cjs/prediction-culling.js +203 -0
  77. package/dist/cjs/protocol-lab.js +1299 -0
  78. package/dist/cjs/r3f-render-adapter.js +209 -0
  79. package/dist/cjs/random.js +59 -0
  80. package/dist/cjs/replay-bundle.js +1598 -0
  81. package/dist/cjs/replay-inspect.js +236 -0
  82. package/dist/cjs/replay-scoring.js +68 -0
  83. package/dist/cjs/replay.js +356 -0
  84. package/dist/cjs/reports.js +181 -0
  85. package/dist/cjs/rollback-history.js +251 -0
  86. package/dist/cjs/runtime-guards.js +111 -0
  87. package/dist/cjs/sample-lab.js +145 -0
  88. package/dist/cjs/sample-scenes.js +752 -0
  89. package/dist/cjs/schema-artifacts.js +359 -0
  90. package/dist/cjs/schema-codegen.js +544 -0
  91. package/dist/cjs/schema-dsl-binary.js +655 -0
  92. package/dist/cjs/schema.js +319 -0
  93. package/dist/cjs/sdk-offline.js +99 -0
  94. package/dist/cjs/session-promotion.js +74 -0
  95. package/dist/cjs/session-snapshot.js +265 -0
  96. package/dist/cjs/session-wire.js +216 -0
  97. package/dist/cjs/signals.js +103 -0
  98. package/dist/cjs/sparse-set.js +169 -0
  99. package/dist/cjs/synctest.js +136 -0
  100. package/dist/cjs/system-lifecycle.js +286 -0
  101. package/dist/cjs/timers.js +61 -0
  102. package/dist/cjs/tools/static-checker.js +1468 -0
  103. package/dist/cjs/types.js +2 -0
  104. package/dist/cjs/venus-mp-budget.js +125 -0
  105. package/dist/cjs/ws-frame.js +255 -0
  106. package/dist/cli.d.ts +2 -0
  107. package/dist/cli.js +11379 -0
  108. package/dist/collections.d.ts +9 -0
  109. package/dist/collections.js +30 -0
  110. package/dist/collision.d.ts +25 -0
  111. package/dist/collision.js +85 -0
  112. package/dist/commands.d.ts +137 -0
  113. package/dist/commands.js +977 -0
  114. package/dist/config-bundle.d.ts +89 -0
  115. package/dist/config-bundle.js +483 -0
  116. package/dist/creator.d.ts +20 -0
  117. package/dist/creator.js +11 -0
  118. package/dist/deterministic-primitives.d.ts +59 -0
  119. package/dist/deterministic-primitives.js +126 -0
  120. package/dist/deterministic-session.d.ts +197 -0
  121. package/dist/deterministic-session.js +1401 -0
  122. package/dist/ecs-lite.d.ts +26 -0
  123. package/dist/ecs-lite.js +152 -0
  124. package/dist/effects-adapter.d.ts +21 -0
  125. package/dist/effects-adapter.js +94 -0
  126. package/dist/engine-complete.d.ts +45 -0
  127. package/dist/engine-complete.js +2292 -0
  128. package/dist/engine-core-proof.d.ts +26 -0
  129. package/dist/engine-core-proof.js +66 -0
  130. package/dist/engine-parity-matrix.d.ts +300 -0
  131. package/dist/engine-parity-matrix.js +869 -0
  132. package/dist/engine-parity.d.ts +74 -0
  133. package/dist/engine-parity.js +3178 -0
  134. package/dist/engine-runtime.d.ts +351 -0
  135. package/dist/engine-runtime.js +3123 -0
  136. package/dist/errors.d.ts +11 -0
  137. package/dist/errors.js +17 -0
  138. package/dist/events.d.ts +45 -0
  139. package/dist/events.js +242 -0
  140. package/dist/examples/counter-duel.d.ts +43 -0
  141. package/dist/examples/counter-duel.js +150 -0
  142. package/dist/examples/fixed-arena.d.ts +110 -0
  143. package/dist/examples/fixed-arena.js +356 -0
  144. package/dist/index.d.ts +101 -0
  145. package/dist/index.js +66 -0
  146. package/dist/input-authority.d.ts +82 -0
  147. package/dist/input-authority.js +147 -0
  148. package/dist/input-button.d.ts +36 -0
  149. package/dist/input-button.js +249 -0
  150. package/dist/input-timeline.d.ts +65 -0
  151. package/dist/input-timeline.js +412 -0
  152. package/dist/instant-replay.d.ts +59 -0
  153. package/dist/instant-replay.js +62 -0
  154. package/dist/lag-compensation3d.d.ts +146 -0
  155. package/dist/lag-compensation3d.js +827 -0
  156. package/dist/local-authority-server-runner.d.ts +79 -0
  157. package/dist/local-authority-server-runner.js +1118 -0
  158. package/dist/local-authority-wire.d.ts +142 -0
  159. package/dist/local-authority-wire.js +1477 -0
  160. package/dist/local-authority.d.ts +160 -0
  161. package/dist/local-authority.js +810 -0
  162. package/dist/local-ws-adapter.d.ts +14 -0
  163. package/dist/local-ws-adapter.js +146 -0
  164. package/dist/match-log.d.ts +74 -0
  165. package/dist/match-log.js +57 -0
  166. package/dist/math.d.ts +41 -0
  167. package/dist/math.js +154 -0
  168. package/dist/mock-network-adapter.d.ts +13 -0
  169. package/dist/mock-network-adapter.js +23 -0
  170. package/dist/movement.d.ts +155 -0
  171. package/dist/movement.js +694 -0
  172. package/dist/movement3d.d.ts +195 -0
  173. package/dist/movement3d.js +1238 -0
  174. package/dist/multiclient-authority.d.ts +30 -0
  175. package/dist/multiclient-authority.js +305 -0
  176. package/dist/multiplayer-service.d.ts +153 -0
  177. package/dist/multiplayer-service.js +429 -0
  178. package/dist/navigation.d.ts +91 -0
  179. package/dist/navigation.js +338 -0
  180. package/dist/navmesh.d.ts +236 -0
  181. package/dist/navmesh.js +1423 -0
  182. package/dist/networked-client.d.ts +124 -0
  183. package/dist/networked-client.js +688 -0
  184. package/dist/networked-input-authority.d.ts +51 -0
  185. package/dist/networked-input-authority.js +439 -0
  186. package/dist/node.d.ts +22 -0
  187. package/dist/node.js +19 -0
  188. package/dist/number-lab.d.ts +15 -0
  189. package/dist/number-lab.js +75 -0
  190. package/dist/offline-session.d.ts +2 -0
  191. package/dist/offline-session.js +367 -0
  192. package/dist/pause-resume.d.ts +48 -0
  193. package/dist/pause-resume.js +40 -0
  194. package/dist/physics-cert.d.ts +40 -0
  195. package/dist/physics-cert.js +389 -0
  196. package/dist/physics2d.d.ts +142 -0
  197. package/dist/physics2d.js +741 -0
  198. package/dist/physics3d.d.ts +285 -0
  199. package/dist/physics3d.js +1979 -0
  200. package/dist/prediction-culling.d.ts +34 -0
  201. package/dist/prediction-culling.js +200 -0
  202. package/dist/protocol-lab.d.ts +115 -0
  203. package/dist/protocol-lab.js +1295 -0
  204. package/dist/r3f-render-adapter.d.ts +61 -0
  205. package/dist/r3f-render-adapter.js +203 -0
  206. package/dist/random.d.ts +13 -0
  207. package/dist/random.js +55 -0
  208. package/dist/replay-bundle.d.ts +150 -0
  209. package/dist/replay-bundle.js +1586 -0
  210. package/dist/replay-inspect.d.ts +60 -0
  211. package/dist/replay-inspect.js +228 -0
  212. package/dist/replay-scoring.d.ts +28 -0
  213. package/dist/replay-scoring.js +65 -0
  214. package/dist/replay.d.ts +17 -0
  215. package/dist/replay.js +351 -0
  216. package/dist/reports.d.ts +176 -0
  217. package/dist/reports.js +174 -0
  218. package/dist/rollback-history.d.ts +46 -0
  219. package/dist/rollback-history.js +247 -0
  220. package/dist/runtime-guards.d.ts +1 -0
  221. package/dist/runtime-guards.js +108 -0
  222. package/dist/sample-lab.d.ts +32 -0
  223. package/dist/sample-lab.js +134 -0
  224. package/dist/sample-scenes.d.ts +86 -0
  225. package/dist/sample-scenes.js +745 -0
  226. package/dist/schema-artifacts.d.ts +49 -0
  227. package/dist/schema-artifacts.js +356 -0
  228. package/dist/schema-codegen.d.ts +21 -0
  229. package/dist/schema-codegen.js +538 -0
  230. package/dist/schema-dsl-binary.d.ts +75 -0
  231. package/dist/schema-dsl-binary.js +648 -0
  232. package/dist/schema.d.ts +87 -0
  233. package/dist/schema.js +315 -0
  234. package/dist/sdk-offline.d.ts +34 -0
  235. package/dist/sdk-offline.js +96 -0
  236. package/dist/session-promotion.d.ts +26 -0
  237. package/dist/session-promotion.js +70 -0
  238. package/dist/session-snapshot.d.ts +95 -0
  239. package/dist/session-snapshot.js +255 -0
  240. package/dist/session-wire.d.ts +89 -0
  241. package/dist/session-wire.js +211 -0
  242. package/dist/signals.d.ts +31 -0
  243. package/dist/signals.js +99 -0
  244. package/dist/sparse-set.d.ts +34 -0
  245. package/dist/sparse-set.js +165 -0
  246. package/dist/synctest.d.ts +31 -0
  247. package/dist/synctest.js +133 -0
  248. package/dist/system-lifecycle.d.ts +72 -0
  249. package/dist/system-lifecycle.js +281 -0
  250. package/dist/timers.d.ts +17 -0
  251. package/dist/timers.js +53 -0
  252. package/dist/tools/index.d.ts +4 -0
  253. package/dist/tools/index.js +4 -0
  254. package/dist/tools/static-checker.d.ts +31 -0
  255. package/dist/tools/static-checker.js +1462 -0
  256. package/dist/tools/vite-plugin.d.ts +69 -0
  257. package/dist/tools/vite-plugin.js +203 -0
  258. package/dist/types.d.ts +148 -0
  259. package/dist/types.js +1 -0
  260. package/dist/venus-mp-budget.d.ts +29 -0
  261. package/dist/venus-mp-budget.js +122 -0
  262. package/dist/ws-frame.d.ts +49 -0
  263. package/dist/ws-frame.js +247 -0
  264. package/package.json +169 -0
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEcsLiteWorld = createEcsLiteWorld;
4
+ const canonical_js_1 = require("./canonical.js");
5
+ function createEcsLiteWorld(snapshot) {
6
+ const world = snapshot === undefined
7
+ ? { nextEntityId: 1, entities: [], components: new Map(), singletons: new Map() }
8
+ : mutableFromSnapshot(snapshot);
9
+ return {
10
+ createEntity() {
11
+ const entityId = world.nextEntityId;
12
+ world.nextEntityId += 1;
13
+ world.entities.push(entityId);
14
+ world.entities.sort((left, right) => left - right);
15
+ return entityId;
16
+ },
17
+ destroyEntity(entityId) {
18
+ requireEntity(world, entityId);
19
+ world.entities = world.entities.filter((candidate) => candidate !== entityId);
20
+ for (const componentName of Array.from(world.components.keys()).sort(compareStrings)) {
21
+ world.components.get(componentName)?.delete(String(entityId));
22
+ }
23
+ },
24
+ addComponent(entityId, componentName, value) {
25
+ requireEntity(world, entityId);
26
+ const entityKey = String(entityId);
27
+ const componentValues = world.components.get(componentName) ?? new Map();
28
+ componentValues.set(entityKey, (0, canonical_js_1.cloneCanonical)(value));
29
+ world.components.set(componentName, componentValues);
30
+ },
31
+ removeComponent(entityId, componentName) {
32
+ requireEntity(world, entityId);
33
+ world.components.get(componentName)?.delete(String(entityId));
34
+ },
35
+ getComponent(entityId, componentName) {
36
+ requireEntity(world, entityId);
37
+ const value = world.components.get(componentName)?.get(String(entityId));
38
+ return value === undefined ? undefined : (0, canonical_js_1.cloneCanonical)(value);
39
+ },
40
+ setSingleton(name, value) {
41
+ world.singletons.set(name, (0, canonical_js_1.cloneCanonical)(value));
42
+ },
43
+ getSingleton(name) {
44
+ const value = world.singletons.get(name);
45
+ return value === undefined ? undefined : (0, canonical_js_1.cloneCanonical)(value);
46
+ },
47
+ query(componentNames) {
48
+ const sortedNames = componentNames.slice().sort(compareStrings);
49
+ return world.entities.flatMap((entityId) => {
50
+ const components = {};
51
+ for (const componentName of sortedNames) {
52
+ const component = world.components.get(componentName)?.get(String(entityId));
53
+ if (component === undefined) {
54
+ return [];
55
+ }
56
+ components[componentName] = (0, canonical_js_1.cloneCanonical)(component);
57
+ }
58
+ return [{ entityId, components }];
59
+ });
60
+ },
61
+ snapshot() {
62
+ return snapshotFromMutable(world);
63
+ },
64
+ restore(snapshotToRestore) {
65
+ const restored = mutableFromSnapshot(snapshotToRestore);
66
+ world.nextEntityId = restored.nextEntityId;
67
+ world.entities = restored.entities;
68
+ world.components = restored.components;
69
+ world.singletons = restored.singletons;
70
+ },
71
+ checksum() {
72
+ return (0, canonical_js_1.defaultChecksum)(snapshotFromMutable(world));
73
+ },
74
+ };
75
+ }
76
+ function requireEntity(world, entityId) {
77
+ if (!world.entities.includes(entityId)) {
78
+ throw new Error(`Unknown ECS entity ${entityId}`);
79
+ }
80
+ }
81
+ function mutableFromSnapshot(snapshot) {
82
+ validateSnapshot(snapshot);
83
+ return {
84
+ nextEntityId: snapshot.nextEntityId,
85
+ entities: snapshot.entities.slice().sort((left, right) => left - right),
86
+ components: componentsMapFromSnapshot(snapshot.components),
87
+ singletons: new Map(Object.keys(snapshot.singletons)
88
+ .sort(compareStrings)
89
+ .map((key) => [key, (0, canonical_js_1.cloneCanonical)(snapshot.singletons[key])])),
90
+ };
91
+ }
92
+ function validateSnapshot(snapshot) {
93
+ validateEntityId(snapshot.nextEntityId, 'nextEntityId');
94
+ const entityIds = new Set();
95
+ let maxEntityId = 0;
96
+ for (const entityId of snapshot.entities) {
97
+ validateEntityId(entityId, 'entity');
98
+ if (entityIds.has(entityId)) {
99
+ throw new Error(`Duplicate ECS entity ${entityId}`);
100
+ }
101
+ entityIds.add(entityId);
102
+ maxEntityId = Math.max(maxEntityId, entityId);
103
+ }
104
+ if (snapshot.nextEntityId <= maxEntityId) {
105
+ throw new Error(`Invalid ECS nextEntityId ${snapshot.nextEntityId}`);
106
+ }
107
+ for (const componentName of Object.keys(snapshot.components).sort(compareStrings)) {
108
+ for (const entityKey of Object.keys(snapshot.components[componentName]).sort(compareStrings)) {
109
+ const entityId = Number(entityKey);
110
+ validateEntityId(entityId, `component ${componentName}`);
111
+ if (entityKey !== String(entityId)) {
112
+ throw new Error(`Invalid ECS component ${componentName} key ${entityKey}`);
113
+ }
114
+ if (!entityIds.has(entityId)) {
115
+ throw new Error(`Unknown ECS entity ${entityId} in component ${componentName}`);
116
+ }
117
+ }
118
+ }
119
+ }
120
+ function validateEntityId(entityId, label) {
121
+ if (!Number.isSafeInteger(entityId) || entityId < 1) {
122
+ throw new Error(`Invalid ECS ${label} ${entityId}`);
123
+ }
124
+ }
125
+ function snapshotFromMutable(world) {
126
+ const components = Object.fromEntries(Array.from(world.components.keys()).sort(compareStrings).map((componentName) => {
127
+ const values = world.components.get(componentName);
128
+ return [
129
+ componentName,
130
+ Object.fromEntries(Array.from(values.keys())
131
+ .sort((left, right) => Number(left) - Number(right))
132
+ .map((entityId) => [entityId, (0, canonical_js_1.cloneCanonical)(values.get(entityId))])),
133
+ ];
134
+ }));
135
+ const singletons = Object.fromEntries(Array.from(world.singletons.keys())
136
+ .sort(compareStrings)
137
+ .map((key) => [key, (0, canonical_js_1.cloneCanonical)(world.singletons.get(key))]));
138
+ return {
139
+ nextEntityId: world.nextEntityId,
140
+ entities: world.entities.slice().sort((left, right) => left - right),
141
+ components,
142
+ singletons,
143
+ };
144
+ }
145
+ function componentsMapFromSnapshot(components) {
146
+ return new Map(Object.keys(components).sort(compareStrings).map((componentName) => [
147
+ componentName,
148
+ new Map(Object.keys(components[componentName])
149
+ .sort((left, right) => Number(left) - Number(right))
150
+ .map((entityId) => [entityId, (0, canonical_js_1.cloneCanonical)(components[componentName][entityId])])),
151
+ ]));
152
+ }
153
+ function compareStrings(left, right) {
154
+ return left < right ? -1 : left > right ? 1 : 0;
155
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDeterministicEventEffectsAdapter = createDeterministicEventEffectsAdapter;
4
+ const canonical_js_1 = require("./canonical.js");
5
+ const collections_js_1 = require("./collections.js");
6
+ const errors_js_1 = require("./errors.js");
7
+ function createDeterministicEventEffectsAdapter(config) {
8
+ validateTarget(config.target);
9
+ const dispatched = [];
10
+ const seen = new Set();
11
+ const listeners = new Set();
12
+ return {
13
+ dispatch(records) {
14
+ const nextDispatches = [];
15
+ for (const record of records) {
16
+ const dedupeKey = `${record.sequence}:${record.predictionState}`;
17
+ if (seen.has(dedupeKey)) {
18
+ continue;
19
+ }
20
+ const effect = config.mapEvent(cloneEventRecord(record));
21
+ seen.add(dedupeKey);
22
+ if (effect === undefined) {
23
+ continue;
24
+ }
25
+ const dispatch = freezeEffectDispatch({
26
+ target: config.target,
27
+ record: cloneEventRecord(record),
28
+ effect: freezeEffectValue((0, canonical_js_1.cloneCanonical)(effect)),
29
+ });
30
+ dispatched.push(dispatch);
31
+ nextDispatches.push(dispatch);
32
+ for (const listener of listeners) {
33
+ listener(dispatch);
34
+ }
35
+ }
36
+ return nextDispatches;
37
+ },
38
+ getDispatched() {
39
+ return dispatched.map((dispatch) => freezeEffectDispatch({
40
+ target: dispatch.target,
41
+ record: cloneEventRecord(dispatch.record),
42
+ effect: freezeEffectValue((0, canonical_js_1.cloneCanonical)(dispatch.effect)),
43
+ }));
44
+ },
45
+ subscribe(listener) {
46
+ listeners.add(listener);
47
+ return () => {
48
+ listeners.delete(listener);
49
+ };
50
+ },
51
+ reset() {
52
+ dispatched.length = 0;
53
+ seen.clear();
54
+ },
55
+ };
56
+ }
57
+ function cloneEventRecord(record) {
58
+ return freezeEffectValue({
59
+ eventId: record.eventId,
60
+ frame: record.frame,
61
+ sequence: record.sequence,
62
+ payload: (0, canonical_js_1.cloneCanonical)(record.payload),
63
+ predictionState: record.predictionState,
64
+ dedupeKey: record.dedupeKey,
65
+ notHashedKeys: [...record.notHashedKeys],
66
+ deliveryScope: record.deliveryScope,
67
+ playerSlot: record.playerSlot,
68
+ });
69
+ }
70
+ function freezeEffectDispatch(dispatch) {
71
+ freezeEffectValue(dispatch.record);
72
+ freezeEffectValue(dispatch.effect);
73
+ return Object.freeze(dispatch);
74
+ }
75
+ function freezeEffectValue(value) {
76
+ if (value === null || typeof value !== 'object') {
77
+ return value;
78
+ }
79
+ if (Array.isArray(value)) {
80
+ for (const item of value) {
81
+ freezeEffectValue(item);
82
+ }
83
+ return Object.freeze(value);
84
+ }
85
+ const record = value;
86
+ for (const key of (0, collections_js_1.stableSortedKeys)(record)) {
87
+ freezeEffectValue(record[key]);
88
+ }
89
+ return Object.freeze(value);
90
+ }
91
+ function validateTarget(target) {
92
+ if (target !== 'r3f' && target !== 'audio' && target !== 'ui' && target !== 'custom') {
93
+ throw new errors_js_1.SyncplayError(`Unsupported deterministic effect target ${target}`, {
94
+ code: 'effects.target',
95
+ });
96
+ }
97
+ }