@swf2es/player-hosts 0.0.0-stage → 0.1.0

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 (405) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +759 -0
  3. package/README.md +43 -2
  4. package/dist/indexeddb.d.ts +27 -0
  5. package/dist/indexeddb.d.ts.map +1 -0
  6. package/dist/indexeddb.js +170 -0
  7. package/dist/indexeddb.js.map +1 -0
  8. package/dist/node-worker.d.ts +2 -0
  9. package/dist/node-worker.d.ts.map +1 -0
  10. package/dist/node-worker.js +12 -0
  11. package/dist/node-worker.js.map +1 -0
  12. package/dist/node.d.ts +8 -0
  13. package/dist/node.d.ts.map +1 -0
  14. package/dist/node.js +43 -0
  15. package/dist/node.js.map +1 -0
  16. package/dist/precompiled.d.ts +31 -0
  17. package/dist/precompiled.d.ts.map +1 -0
  18. package/dist/precompiled.js +125 -0
  19. package/dist/precompiled.js.map +1 -0
  20. package/dist/stage3d.d.ts +13 -0
  21. package/dist/stage3d.d.ts.map +1 -0
  22. package/dist/stage3d.js +61 -0
  23. package/dist/stage3d.js.map +1 -0
  24. package/dist/thread/codegen/codegen.js +308 -0
  25. package/dist/thread/codegen/index.js +405 -0
  26. package/dist/thread/format/abc-names.js +126 -0
  27. package/dist/thread/format/actions.js +222 -0
  28. package/dist/thread/format/air-descriptor.js +63 -0
  29. package/dist/thread/format/api-versions.js +22 -0
  30. package/dist/thread/format/bitmap.js +199 -0
  31. package/dist/thread/format/button.js +60 -0
  32. package/dist/thread/format/compression.js +200 -0
  33. package/dist/thread/format/display.js +305 -0
  34. package/dist/thread/format/filters.js +136 -0
  35. package/dist/thread/format/font.js +168 -0
  36. package/dist/thread/format/index.js +26 -0
  37. package/dist/thread/format/pbj.js +484 -0
  38. package/dist/thread/format/shape.js +411 -0
  39. package/dist/thread/format/sound.js +91 -0
  40. package/dist/thread/format/swf.js +163 -0
  41. package/dist/thread/format/tags.js +58 -0
  42. package/dist/thread/format/text.js +135 -0
  43. package/dist/thread/format/zip.js +91 -0
  44. package/dist/thread/native/audio/binary.js +3 -0
  45. package/dist/thread/native/audio/index.js +72 -0
  46. package/dist/thread/native/base64.js +9 -0
  47. package/dist/thread/native/compress/binary.js +3 -0
  48. package/dist/thread/native/compress/index.js +145 -0
  49. package/dist/thread/native/instance.js +49 -0
  50. package/dist/thread/native/mp3/binary.js +3 -0
  51. package/dist/thread/native/mp3/index.js +48 -0
  52. package/dist/thread/native/render/binary.js +3 -0
  53. package/dist/thread/native/render/bitmap-kernel.js +591 -0
  54. package/dist/thread/native/render/draw-kernel.js +204 -0
  55. package/dist/thread/native/render/dxt-encoder.js +94 -0
  56. package/dist/thread/native/render/index.js +10 -0
  57. package/dist/thread/native/render/lines.js +122 -0
  58. package/dist/thread/native/render/module.js +26 -0
  59. package/dist/thread/native/render/pixel-ops.js +235 -0
  60. package/dist/thread/native/render/tessellator.js +250 -0
  61. package/dist/thread/player/avm1/amf.js +507 -0
  62. package/dist/thread/player/avm1/avm1.js +1304 -0
  63. package/dist/thread/player/avm1/bindings.js +214 -0
  64. package/dist/thread/player/avm1/classes.js +75 -0
  65. package/dist/thread/player/avm1/clips.js +229 -0
  66. package/dist/thread/player/avm1/compile.js +140 -0
  67. package/dist/thread/player/avm1/external.js +79 -0
  68. package/dist/thread/player/avm1/focus.js +278 -0
  69. package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
  70. package/dist/thread/player/avm1/globals/Button.js +31 -0
  71. package/dist/thread/player/avm1/globals/Color.js +115 -0
  72. package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
  73. package/dist/thread/player/avm1/globals/FileReference.js +217 -0
  74. package/dist/thread/player/avm1/globals/Key.js +60 -0
  75. package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
  76. package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
  77. package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
  78. package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
  79. package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
  80. package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
  81. package/dist/thread/player/avm1/globals/Selection.js +62 -0
  82. package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
  83. package/dist/thread/player/avm1/globals/Sound.js +238 -0
  84. package/dist/thread/player/avm1/globals/Stage.js +12 -0
  85. package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
  86. package/dist/thread/player/avm1/globals/TextField.js +396 -0
  87. package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
  88. package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
  89. package/dist/thread/player/avm1/globals/XML.js +396 -0
  90. package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
  91. package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
  92. package/dist/thread/player/avm1/globals/drawing.js +202 -0
  93. package/dist/thread/player/avm1/globals/filters.js +635 -0
  94. package/dist/thread/player/avm1/globals/geom.js +600 -0
  95. package/dist/thread/player/avm1/input.js +483 -0
  96. package/dist/thread/player/avm1/keyboard.js +113 -0
  97. package/dist/thread/player/avm1/loads.js +352 -0
  98. package/dist/thread/player/avm1/net.js +219 -0
  99. package/dist/thread/player/avm1/paths.js +104 -0
  100. package/dist/thread/player/avm1/pointer.js +512 -0
  101. package/dist/thread/player/avm1/queue.js +303 -0
  102. package/dist/thread/player/avm1/sound.js +106 -0
  103. package/dist/thread/player/avm1/swf.js +141 -0
  104. package/dist/thread/player/avm1/timers.js +113 -0
  105. package/dist/thread/player/bitmap/bitmap.js +627 -0
  106. package/dist/thread/player/bitmap/draw.js +68 -0
  107. package/dist/thread/player/bitmap/dxt.js +11 -0
  108. package/dist/thread/player/bitmap/filters.js +656 -0
  109. package/dist/thread/player/bitmap/images.js +240 -0
  110. package/dist/thread/player/bitmap/kernel.js +65 -0
  111. package/dist/thread/player/bitmap/ops.js +1239 -0
  112. package/dist/thread/player/bitmap/pixel-bender.js +911 -0
  113. package/dist/thread/player/bitmap/png.js +139 -0
  114. package/dist/thread/player/bitmap/turbulence.js +89 -0
  115. package/dist/thread/player/clock.js +182 -0
  116. package/dist/thread/player/display/bitmapobject.js +25 -0
  117. package/dist/thread/player/display/bounds.js +520 -0
  118. package/dist/thread/player/display/buttonobject.js +305 -0
  119. package/dist/thread/player/display/color.js +40 -0
  120. package/dist/thread/player/display/container.js +150 -0
  121. package/dist/thread/player/display/display.js +14 -0
  122. package/dist/thread/player/display/displayobject.js +664 -0
  123. package/dist/thread/player/display/drawing.js +613 -0
  124. package/dist/thread/player/display/filters.js +285 -0
  125. package/dist/thread/player/display/geometry.js +189 -0
  126. package/dist/thread/player/display/gradients.js +117 -0
  127. package/dist/thread/player/display/graphicsdata.js +592 -0
  128. package/dist/thread/player/display/instantiate.js +71 -0
  129. package/dist/thread/player/display/matrix3d.js +373 -0
  130. package/dist/thread/player/display/morph.js +226 -0
  131. package/dist/thread/player/display/movieclip.js +680 -0
  132. package/dist/thread/player/display/perspective.js +193 -0
  133. package/dist/thread/player/display/scale9.js +236 -0
  134. package/dist/thread/player/display/shapeobject.js +131 -0
  135. package/dist/thread/player/display/shapes.js +407 -0
  136. package/dist/thread/player/display/textobjects.js +222 -0
  137. package/dist/thread/player/display/timeline.js +471 -0
  138. package/dist/thread/player/display/value-lists.js +40 -0
  139. package/dist/thread/player/display/videoobject.js +6 -0
  140. package/dist/thread/player/display/walk.js +127 -0
  141. package/dist/thread/player/files.js +334 -0
  142. package/dist/thread/player/hosts.js +207 -0
  143. package/dist/thread/player/input/avm1.js +82 -0
  144. package/dist/thread/player/input/context-menu.js +63 -0
  145. package/dist/thread/player/input/keyboard.js +458 -0
  146. package/dist/thread/player/input/pointer.js +863 -0
  147. package/dist/thread/player/input/text-editor.js +319 -0
  148. package/dist/thread/player/input/touch.js +209 -0
  149. package/dist/thread/player/localconnection.js +90 -0
  150. package/dist/thread/player/media/audio.js +376 -0
  151. package/dist/thread/player/media/dynamic-sound.js +90 -0
  152. package/dist/thread/player/media/extract.js +135 -0
  153. package/dist/thread/player/media/mp3.js +152 -0
  154. package/dist/thread/player/media/sounds.js +507 -0
  155. package/dist/thread/player/media/streaming-audio.js +133 -0
  156. package/dist/thread/player/player.js +616 -0
  157. package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
  158. package/dist/thread/player/playerglobal/air-library.js +8 -0
  159. package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
  160. package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
  161. package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
  162. package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
  163. package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
  164. package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
  165. package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
  166. package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
  167. package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
  168. package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
  169. package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
  170. package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
  171. package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
  172. package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
  173. package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
  174. package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
  175. package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
  176. package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
  177. package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
  178. package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
  179. package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
  180. package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
  181. package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
  182. package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
  183. package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
  184. package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
  185. package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
  186. package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
  187. package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
  188. package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
  189. package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
  190. package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
  191. package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
  192. package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
  193. package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
  194. package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
  195. package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
  196. package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
  197. package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
  198. package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
  199. package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
  200. package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
  201. package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
  202. package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
  203. package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
  204. package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
  205. package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
  206. package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
  207. package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
  208. package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
  209. package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
  210. package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
  211. package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
  212. package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
  213. package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
  214. package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
  215. package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
  216. package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
  217. package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
  218. package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
  219. package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
  220. package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
  221. package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
  222. package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
  223. package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
  224. package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
  225. package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
  226. package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
  227. package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
  228. package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
  229. package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
  230. package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
  231. package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
  232. package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
  233. package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
  234. package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
  235. package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
  236. package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
  237. package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
  238. package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
  239. package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
  240. package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
  241. package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
  242. package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
  243. package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
  244. package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
  245. package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
  246. package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
  247. package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
  248. package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
  249. package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
  250. package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
  251. package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
  252. package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
  253. package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
  254. package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
  255. package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
  256. package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
  257. package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
  258. package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
  259. package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
  260. package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
  261. package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
  262. package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
  263. package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
  264. package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
  265. package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
  266. package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
  267. package/dist/thread/player/playerglobal/index.js +224 -0
  268. package/dist/thread/player/playerglobal/libraries.js +10 -0
  269. package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
  270. package/dist/thread/player/playerglobal/toplevel.js +122 -0
  271. package/dist/thread/player/scripting/clipboard.js +146 -0
  272. package/dist/thread/player/scripting/code.js +900 -0
  273. package/dist/thread/player/scripting/evaluate.js +144 -0
  274. package/dist/thread/player/scripting/events.js +172 -0
  275. package/dist/thread/player/scripting/handover.js +182 -0
  276. package/dist/thread/player/scripting/lazy.js +38 -0
  277. package/dist/thread/player/scripting/lifecycle.js +272 -0
  278. package/dist/thread/player/scripting/loads.js +860 -0
  279. package/dist/thread/player/scripting/sha256.js +95 -0
  280. package/dist/thread/player/scripting/symbols.js +348 -0
  281. package/dist/thread/player/scripting/timers.js +434 -0
  282. package/dist/thread/player/scripting/workers.js +923 -0
  283. package/dist/thread/player/scripting.js +1018 -0
  284. package/dist/thread/player/stage.js +4 -0
  285. package/dist/thread/player/text/csm.js +113 -0
  286. package/dist/thread/player/text/css.js +167 -0
  287. package/dist/thread/player/text/fonts.js +97 -0
  288. package/dist/thread/player/text/layout.js +393 -0
  289. package/dist/thread/player/text/static.js +109 -0
  290. package/dist/thread/player/text/text.js +431 -0
  291. package/dist/thread/player/workers/thread.js +159 -0
  292. package/dist/thread/player/workers/wire.js +198 -0
  293. package/dist/thread/player-hosts/web-worker.js +19 -0
  294. package/dist/thread/runtime/avm1/activation.js +89 -0
  295. package/dist/thread/runtime/avm1/case.js +249 -0
  296. package/dist/thread/runtime/avm1/clips.js +334 -0
  297. package/dist/thread/runtime/avm1/control.js +280 -0
  298. package/dist/thread/runtime/avm1/errors.js +50 -0
  299. package/dist/thread/runtime/avm1/functions.js +249 -0
  300. package/dist/thread/runtime/avm1/globals/array.js +549 -0
  301. package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
  302. package/dist/thread/runtime/avm1/globals/date.js +436 -0
  303. package/dist/thread/runtime/avm1/globals/global.js +344 -0
  304. package/dist/thread/runtime/avm1/globals/math.js +139 -0
  305. package/dist/thread/runtime/avm1/globals/number.js +93 -0
  306. package/dist/thread/runtime/avm1/globals/string.js +201 -0
  307. package/dist/thread/runtime/avm1/globals/timers.js +129 -0
  308. package/dist/thread/runtime/avm1/host.js +5 -0
  309. package/dist/thread/runtime/avm1/index.js +14 -0
  310. package/dist/thread/runtime/avm1/inheritance.js +132 -0
  311. package/dist/thread/runtime/avm1/numbers.js +298 -0
  312. package/dist/thread/runtime/avm1/objects.js +896 -0
  313. package/dist/thread/runtime/avm1/operators.js +170 -0
  314. package/dist/thread/runtime/avm1/realm.js +529 -0
  315. package/dist/thread/runtime/avm1/runtime.js +882 -0
  316. package/dist/thread/runtime/avm1/scope.js +385 -0
  317. package/dist/thread/runtime/avm1/urls.js +180 -0
  318. package/dist/thread/runtime/avm1/values.js +97 -0
  319. package/dist/thread/runtime/avm2/amf-classes.js +66 -0
  320. package/dist/thread/runtime/avm2/amf.js +801 -0
  321. package/dist/thread/runtime/avm2/array-conversion.js +100 -0
  322. package/dist/thread/runtime/avm2/builtin-library.js +21 -0
  323. package/dist/thread/runtime/avm2/cache-fill.js +86 -0
  324. package/dist/thread/runtime/avm2/classes.js +211 -0
  325. package/dist/thread/runtime/avm2/definitions.js +69 -0
  326. package/dist/thread/runtime/avm2/descriptors.js +5 -0
  327. package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
  328. package/dist/thread/runtime/avm2/domain-memory.js +75 -0
  329. package/dist/thread/runtime/avm2/domain.js +280 -0
  330. package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
  331. package/dist/thread/runtime/avm2/enumeration.js +393 -0
  332. package/dist/thread/runtime/avm2/errors.js +45 -0
  333. package/dist/thread/runtime/avm2/float-library.js +66 -0
  334. package/dist/thread/runtime/avm2/float.js +26 -0
  335. package/dist/thread/runtime/avm2/hooks.js +19 -0
  336. package/dist/thread/runtime/avm2/index.js +38 -0
  337. package/dist/thread/runtime/avm2/messages.js +177 -0
  338. package/dist/thread/runtime/avm2/method-factories.js +95 -0
  339. package/dist/thread/runtime/avm2/modules.js +105 -0
  340. package/dist/thread/runtime/avm2/names.js +248 -0
  341. package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
  342. package/dist/thread/runtime/avm2/natives/array.js +390 -0
  343. package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
  344. package/dist/thread/runtime/avm2/natives/case.js +88 -0
  345. package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
  346. package/dist/thread/runtime/avm2/natives/date.js +581 -0
  347. package/dist/thread/runtime/avm2/natives/define.js +130 -0
  348. package/dist/thread/runtime/avm2/natives/describe.js +351 -0
  349. package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
  350. package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
  351. package/dist/thread/runtime/avm2/natives/float.js +96 -0
  352. package/dist/thread/runtime/avm2/natives/index.js +64 -0
  353. package/dist/thread/runtime/avm2/natives/json.js +514 -0
  354. package/dist/thread/runtime/avm2/natives/number.js +162 -0
  355. package/dist/thread/runtime/avm2/natives/object.js +237 -0
  356. package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
  357. package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
  358. package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
  359. package/dist/thread/runtime/avm2/natives/shell.js +557 -0
  360. package/dist/thread/runtime/avm2/natives/sort.js +377 -0
  361. package/dist/thread/runtime/avm2/natives/string.js +132 -0
  362. package/dist/thread/runtime/avm2/natives/sync.js +821 -0
  363. package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
  364. package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
  365. package/dist/thread/runtime/avm2/natives/vector.js +406 -0
  366. package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
  367. package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
  368. package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
  369. package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
  370. package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
  371. package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
  372. package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
  373. package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
  374. package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
  375. package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
  376. package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
  377. package/dist/thread/runtime/avm2/number-strings.js +110 -0
  378. package/dist/thread/runtime/avm2/numbers.js +558 -0
  379. package/dist/thread/runtime/avm2/options.js +16 -0
  380. package/dist/thread/runtime/avm2/player-messages.js +550 -0
  381. package/dist/thread/runtime/avm2/property-cache.js +135 -0
  382. package/dist/thread/runtime/avm2/runtime.js +2644 -0
  383. package/dist/thread/runtime/avm2/traits.js +509 -0
  384. package/dist/thread/runtime/index.js +7 -0
  385. package/dist/web-worker.d.ts +2 -0
  386. package/dist/web-worker.d.ts.map +1 -0
  387. package/dist/web-worker.js +20 -0
  388. package/dist/web-worker.js.map +1 -0
  389. package/dist/websocket.d.ts +4 -0
  390. package/dist/websocket.d.ts.map +1 -0
  391. package/dist/websocket.js +27 -0
  392. package/dist/websocket.js.map +1 -0
  393. package/dist/workers.d.ts +35 -0
  394. package/dist/workers.d.ts.map +1 -0
  395. package/dist/workers.js +171 -0
  396. package/dist/workers.js.map +1 -0
  397. package/package.json +62 -3
  398. package/src/indexeddb.ts +227 -0
  399. package/src/node-worker.ts +13 -0
  400. package/src/node.ts +49 -0
  401. package/src/precompiled.ts +166 -0
  402. package/src/stage3d.ts +76 -0
  403. package/src/web-worker.ts +24 -0
  404. package/src/websocket.ts +32 -0
  405. package/src/workers.ts +255 -0
@@ -0,0 +1,512 @@
1
+ // The pointer of an AVM1 movie, by AVM1's rules rather than AS3's (Ruffle's
2
+ // player.rs update_mouse_state, and Avm1Button's and MovieClip's mouse picks
3
+ // and event dispatches, at the corpus's commit; MIT OR Apache-2.0,
4
+ // Copyright (c) 2018-2022 Ruffle LLC and Ruffle contributors). Selectable fields,
5
+ // buttons and clips in button mode take it. An input first goes to every
6
+ // clip as its clip event (mouseMove, mouseDown, mouseUp); then the object
7
+ // under it is picked again and gets its button events: rolls as the hover
8
+ // moves, drags while the button is down, a press, and a release or a
9
+ // release outside.
10
+ import { ClipEvent } from "../../format/index.js";
11
+ import { hitsPoint, toStage } from "../display/bounds.js";
12
+ import { ButtonObject, MovieClip, TextObject, } from "../display/display.js";
13
+ import { apply, invert } from "../display/geometry.js";
14
+ import { dragTo, } from "../input/pointer.js";
15
+ import { caretAt } from "../input/text-editor.js";
16
+ import { stateOf } from "./globals/TextField.js";
17
+ export class Avm1Pointer {
18
+ stage;
19
+ avm1;
20
+ root;
21
+ redraws = 0;
22
+ /** An AS3 host chooses which loaded movie may pick buttons; global mouse events still reach all. */
23
+ pickable = true;
24
+ onCursor = null;
25
+ hover = null;
26
+ pressed = null;
27
+ hoverAt = null;
28
+ pressedAt = null;
29
+ /** Whether the left button is down after a press here. */
30
+ held = false;
31
+ /** Where the pointer last was over the player; null before it came, or once it left. */
32
+ last = null;
33
+ moved = null;
34
+ shown = "default";
35
+ drag = null;
36
+ selection = null;
37
+ constructor(stage, avm1, root = null) {
38
+ this.stage = stage;
39
+ this.avm1 = avm1;
40
+ this.root = root;
41
+ avm1.pointer = this;
42
+ }
43
+ /** One drag at a time: a new one takes over from any other. */
44
+ startDrag(target, lockCenter, bounds) {
45
+ const [left, top, right, bottom] = bounds ?? [];
46
+ this.drag = {
47
+ target,
48
+ lockCenter,
49
+ bounds: bounds
50
+ ? {
51
+ xMin: Math.min(left, right),
52
+ yMin: Math.min(top, bottom),
53
+ xMax: Math.max(left, right),
54
+ yMax: Math.max(top, bottom),
55
+ }
56
+ : null,
57
+ lastX: this.last?.x ?? 0,
58
+ lastY: this.last?.y ?? 0,
59
+ };
60
+ this.dragged();
61
+ }
62
+ stopDrag() {
63
+ this.dragged();
64
+ this.drag = null;
65
+ }
66
+ /**
67
+ * The dragged clip brought to where the pointer is, and its `_droptarget`
68
+ * the topmost clip or button under the pointer, the dragged clip left
69
+ * out, as Ruffle picks it; a drag of one taken off the stage ends.
70
+ */
71
+ dragged() {
72
+ const drag = this.drag;
73
+ if (drag === null) {
74
+ return;
75
+ }
76
+ const d = drag.target;
77
+ if (!this.onStage(d)) {
78
+ this.drag = null;
79
+ return;
80
+ }
81
+ const x = this.last?.x ?? 0;
82
+ const y = this.last?.y ?? 0;
83
+ if (dragTo(this.stage, drag, x, y)) {
84
+ this.redraws++;
85
+ }
86
+ if (d instanceof MovieClip) {
87
+ const visible = d.visible;
88
+ d.visible = false;
89
+ try {
90
+ this.avm1.dropTargets.set(d, this.pick(x, y, true));
91
+ }
92
+ finally {
93
+ d.visible = visible;
94
+ }
95
+ }
96
+ }
97
+ get captured() {
98
+ return this.held;
99
+ }
100
+ cursor() {
101
+ return this.shown;
102
+ }
103
+ post(p) {
104
+ this.moved = p;
105
+ }
106
+ flush() {
107
+ const p = this.moved;
108
+ if (p) {
109
+ this.handle("move", p);
110
+ }
111
+ }
112
+ /**
113
+ * The wheel over the player: a move to `p` first, then Mouse's listeners'
114
+ * onMouseWheel with the delta and what is under the pointer. The SWF
115
+ * takes it where Mouse has listeners; the page scrolls otherwise.
116
+ */
117
+ wheel(p, delta) {
118
+ this.handle("move", p);
119
+ if (delta === 0 || !this.avm1.input.mouseHeard) {
120
+ return false;
121
+ }
122
+ this.avm1.input.mouseWheel(delta, this.hover);
123
+ return true;
124
+ }
125
+ /** The host broadcasts first, before either VM chooses the button an event reaches. */
126
+ broadcast(type, p) {
127
+ this.last = p;
128
+ this.position(p);
129
+ if (type !== "move") {
130
+ this.avm1.input.mouseButton(p.button ?? 0, type === "down");
131
+ }
132
+ if (type === "move") {
133
+ this.avm1.clipEvent(ClipEvent.mouseMove);
134
+ }
135
+ else if ((p.button ?? 0) === 0) {
136
+ this.avm1.clipEvent(type === "down" ? ClipEvent.mouseDown : ClipEvent.mouseUp);
137
+ }
138
+ }
139
+ position(p) {
140
+ if (!this.root) {
141
+ this.avm1.mouseX = p.x;
142
+ this.avm1.mouseY = p.y;
143
+ return;
144
+ }
145
+ const inverse = this.root.parent && invert(toStage(this.root.parent, this.stage));
146
+ const [x, y] = inverse ? apply(inverse, p.x, p.y) : [p.x, p.y];
147
+ this.avm1.mouseX = x;
148
+ this.avm1.mouseY = y;
149
+ }
150
+ /** Reconcile an AS3 host's pick before it dispatches its own mouse events. */
151
+ sync(p, pickable) {
152
+ this.last = p;
153
+ this.position(p);
154
+ this.pickable = pickable;
155
+ this.frameEnded(true);
156
+ }
157
+ handle(type, p, broadcast = true) {
158
+ // A move posted before this input comes first; a move given now replaces it.
159
+ if (type === "move") {
160
+ this.moved = null;
161
+ }
162
+ else {
163
+ this.flush();
164
+ }
165
+ this.replaced();
166
+ // Left with the button up: nothing is under it. With the button down, Flash keeps the mouse.
167
+ if (type === "leave") {
168
+ if (!this.held) {
169
+ this.last = null;
170
+ this.send(this.hoverTo(null, []));
171
+ }
172
+ return;
173
+ }
174
+ const at = this.last;
175
+ if (broadcast && type === "move" && at && at.x === p.x && at.y === p.y) {
176
+ return;
177
+ }
178
+ this.last = p;
179
+ const left = (p.button ?? 0) === 0;
180
+ // Every clip's clip event first, and what they queue runs, before the pick.
181
+ if (broadcast) {
182
+ this.broadcast(type, p);
183
+ }
184
+ else {
185
+ this.position(p);
186
+ }
187
+ this.dragged();
188
+ // The button's state first, which the hover's events follow, as Ruffle has it.
189
+ const held = this.held;
190
+ if (left && type !== "move") {
191
+ this.held = type === "down";
192
+ }
193
+ const events = this.hoverTo(this.pick(p.x, p.y), []);
194
+ if (left && type === "down") {
195
+ this.selection = null;
196
+ const field = this.hover instanceof TextObject ? this.hover : null;
197
+ if (field || this.avm1.focused instanceof TextObject) {
198
+ this.avm1.focus(field);
199
+ }
200
+ if (field) {
201
+ const position = this.textPosition(field, p.x, p.y);
202
+ stateOf(field).selected = true;
203
+ field.select(position, position);
204
+ this.selection = { field, anchor: position };
205
+ }
206
+ this.pressed = this.hover;
207
+ this.pressedAt = this.hoverAt;
208
+ if (this.hover) {
209
+ events.push([this.hover, ClipEvent.press]);
210
+ }
211
+ }
212
+ else if (left && type === "up" && held) {
213
+ this.selection = null;
214
+ const pressed = this.pressed;
215
+ const hover = this.hover;
216
+ this.pressed = null;
217
+ this.pressedAt = null;
218
+ if (pressed && hover && same(pressed, hover)) {
219
+ events.push([pressed, ClipEvent.release]);
220
+ }
221
+ else {
222
+ // Released elsewhere, or after a press on nothing: what is under it is rolled over.
223
+ if (pressed) {
224
+ events.push([pressed, ClipEvent.releaseOutside]);
225
+ }
226
+ if (hover && !events.some(([d, e]) => d === hover && e === ClipEvent.rollOver)) {
227
+ events.push([hover, ClipEvent.rollOver]);
228
+ }
229
+ }
230
+ }
231
+ const selection = this.selection;
232
+ if (type === "move" && this.held && selection && this.onStage(selection.field)) {
233
+ selection.field.select(selection.anchor, this.textPosition(selection.field, p.x, p.y));
234
+ this.redraws++;
235
+ }
236
+ this.send(events);
237
+ // After the input and what it ran, as Ruffle resets the focus's highlight.
238
+ this.avm1.focusTracker.pointerInput(type, p.button ?? 0);
239
+ }
240
+ textPosition(field, x, y) {
241
+ const inverse = invert(toStage(field, this.stage));
242
+ const [localX, localY] = inverse ? apply(inverse, x, y) : [0, 0];
243
+ return caretAt(field, localX * 20, localY * 20);
244
+ }
245
+ /**
246
+ * After a frame: what is under a pointer that has not moved, picked
247
+ * again where nothing was or the hover was hidden or removed, as
248
+ * Ruffle's update does, so a button that comes under an idle pointer
249
+ * gets its roll over, and one hidden from under it its roll out.
250
+ */
251
+ frameEnded(repick = false) {
252
+ this.replaced();
253
+ this.dragged();
254
+ const p = this.last;
255
+ const hover = this.hover;
256
+ if (p === null || (!repick && hover?.visible && this.onStage(hover))) {
257
+ return;
258
+ }
259
+ this.send(this.hoverTo(this.pick(p.x, p.y), []));
260
+ }
261
+ /**
262
+ * The hover moved to `target`: with the button up, a roll out of what it
263
+ * was over and a roll over of what it is over; with it down, a drag out
264
+ * of the one and a drag over of the other, the pressed object's as the
265
+ * pointer leaves it and comes back, any other's as a menu's items have
266
+ * them, but while a script drags a clip (Ruffle's order: the pressed
267
+ * object's drag over before the drag out of what the pointer left).
268
+ */
269
+ hoverTo(target, events) {
270
+ const hover = this.hover;
271
+ if (target === hover) {
272
+ return events;
273
+ }
274
+ if (!this.held) {
275
+ if (hover) {
276
+ events.push([hover, ClipEvent.rollOut]);
277
+ }
278
+ if (target) {
279
+ events.push([target, ClipEvent.rollOver]);
280
+ }
281
+ }
282
+ else {
283
+ const pressed = this.pressed;
284
+ const menu = this.drag === null;
285
+ if (target && target === pressed) {
286
+ events.push([target, ClipEvent.dragOver]);
287
+ }
288
+ if (hover && (hover === pressed || menu)) {
289
+ events.push([hover, ClipEvent.dragOut]);
290
+ }
291
+ if (target && target !== pressed && menu) {
292
+ events.push([target, ClipEvent.dragOver]);
293
+ }
294
+ }
295
+ this.hover = target;
296
+ this.hoverAt = target ? spotOf(target) : null;
297
+ return events;
298
+ }
299
+ /**
300
+ * A hover or a pressed object taken off the stage, a goto having made it
301
+ * again at its depth, is the one made again, in its state, as Ruffle has
302
+ * it: a button a press's goto remakes still takes the release.
303
+ */
304
+ replaced() {
305
+ this.hover = this.again(this.hover, this.hoverAt);
306
+ this.pressed = this.again(this.pressed, this.pressedAt);
307
+ }
308
+ again(d, spot) {
309
+ if (d === null || this.onStage(d)) {
310
+ return d;
311
+ }
312
+ const found = spot && this.onStage(spot.parent)
313
+ ? spot.parent.children.find((c) => c !== d && c.depth === spot.depth && c.character?.id === spot.id)
314
+ : undefined;
315
+ if (found instanceof ButtonObject && d instanceof ButtonObject && found.state !== d.state) {
316
+ found.setState(d.state, false);
317
+ }
318
+ return found ?? null;
319
+ }
320
+ /**
321
+ * The events to their objects: a hidden button up gets none, one not up
322
+ * all, and a hidden clip only its release outside; one disabled gets
323
+ * none, a button going up unless the event is to over, and the pointer
324
+ * letting go of it, so that enabled again under the pointer it gets its
325
+ * roll over (Ruffle's filter_clip_event and Avm1Button's). Then the
326
+ * cursor follows what is under it.
327
+ */
328
+ send(events) {
329
+ const kept = [];
330
+ for (const event of events) {
331
+ const [d, e] = event;
332
+ const button = d instanceof ButtonObject ? d : null;
333
+ if (!d.visible && (button ? button.state === "up" : e !== ClipEvent.releaseOutside)) {
334
+ continue;
335
+ }
336
+ if (!this.avm1.input.flag(d, "enabled")) {
337
+ if (button) {
338
+ this.letGo(button, e);
339
+ }
340
+ continue;
341
+ }
342
+ kept.push(event);
343
+ }
344
+ if (kept.length > 0) {
345
+ this.redraws++;
346
+ this.avm1.input.buttonEvents(kept);
347
+ }
348
+ this.updateCursor();
349
+ }
350
+ /** A disabled button let go of, up unless the event would show it over. */
351
+ letGo(button, e) {
352
+ if (this.hover === button) {
353
+ this.hover = null;
354
+ this.hoverAt = null;
355
+ }
356
+ if (this.pressed === button) {
357
+ this.pressed = null;
358
+ this.pressedAt = null;
359
+ }
360
+ const over = e === ClipEvent.rollOver || e === ClipEvent.release || e === ClipEvent.dragOut;
361
+ if (!over && button.state !== "up") {
362
+ button.setState("up", false);
363
+ this.redraws++;
364
+ }
365
+ }
366
+ /**
367
+ * What takes the pointer at (x, y) on the stage: the topmost button or
368
+ * clip in button mode there, searched from the topmost level down
369
+ * (Ruffle's mouse_pick_avm1).
370
+ */
371
+ pick(x, y, any = false) {
372
+ return any || this.pickable ? this.targetAt(x, y, any) : null;
373
+ }
374
+ /** Whether this movie has a button or selectable field under the host's pointer. */
375
+ hit(x, y) {
376
+ return this.targetAt(x, y) !== null;
377
+ }
378
+ targetAt(x, y, any = false) {
379
+ if (this.root) {
380
+ return this.pickIn(this.root, x, y, any);
381
+ }
382
+ const children = this.stage.children;
383
+ for (let i = children.length - 1; i >= 0; i--) {
384
+ const found = this.pickIn(children[i], x, y, any);
385
+ if (found) {
386
+ return found;
387
+ }
388
+ }
389
+ return null;
390
+ }
391
+ /**
392
+ * What `d` picks at (x, y): with `any`, as `_droptarget` names it, also
393
+ * a clip whose own drawing is there, the topmost of what is in it
394
+ * deciding, and one in button mode by its own drawing, not its hitArea.
395
+ */
396
+ pickIn(d, x, y, any = false) {
397
+ if (!d.visible || d.clipDepth > 0 || d.maskOf) {
398
+ return null;
399
+ }
400
+ if (!any && d instanceof TextObject) {
401
+ return d.selectable && hitsPoint(d, x, y, false, this.stage) ? d : null;
402
+ }
403
+ // A button: what is in the state it shows first, a clip in button mode
404
+ // there taking the pointer from it, then its hit test state, tested as
405
+ // its child, whatever state it shows.
406
+ if (d instanceof ButtonObject) {
407
+ const shown = this.pickChildren(d, x, y, any);
408
+ if (shown) {
409
+ return shown;
410
+ }
411
+ const area = d.hitTestState;
412
+ if (!area) {
413
+ return null;
414
+ }
415
+ const parent = area.parent;
416
+ area.parent = d;
417
+ try {
418
+ return hitsPoint(area, x, y, true, this.stage) ? d : null;
419
+ }
420
+ finally {
421
+ area.parent = parent;
422
+ }
423
+ }
424
+ if (!(d instanceof MovieClip)) {
425
+ return null;
426
+ }
427
+ // A clip in button mode takes the pointer itself, its children's
428
+ // buttons with it, where its hitArea, or else it, is drawn; where it
429
+ // misses, its children may still be hit.
430
+ if (this.avm1.input.buttonMode(d)) {
431
+ const area = any ? null : this.avm1.input.hitArea(d);
432
+ if (hitsPoint(area ?? d, x, y, true, this.stage)) {
433
+ return d;
434
+ }
435
+ }
436
+ return this.pickChildren(d, x, y, any);
437
+ }
438
+ pickChildren(d, x, y, any) {
439
+ const children = d.children;
440
+ for (let i = children.length - 1; i >= 0; i--) {
441
+ const child = children[i];
442
+ const found = child instanceof MovieClip ||
443
+ child instanceof ButtonObject ||
444
+ (!any && child instanceof TextObject)
445
+ ? this.pickIn(child, x, y, any)
446
+ : any && d instanceof MovieClip && this.drawnAt(child, x, y)
447
+ ? d
448
+ : null;
449
+ if (found) {
450
+ return found;
451
+ }
452
+ }
453
+ return null;
454
+ }
455
+ /** Whether `d`, a shape or anything but a clip or button, draws at (x, y), shown and no mask. */
456
+ drawnAt(d, x, y) {
457
+ return d.visible && d.clipDepth === 0 && !d.maskOf && hitsPoint(d, x, y, true, this.stage);
458
+ }
459
+ /** Whether `d` is still on the stage, not taken off since it was picked. */
460
+ onStage(d) {
461
+ let o = d;
462
+ while (o && o !== this.stage) {
463
+ o = o.parent;
464
+ }
465
+ return o === this.stage;
466
+ }
467
+ /**
468
+ * The hand over a button whose useHandCursor and enabled are true, and
469
+ * over a clip whose nearest ancestor in button mode, itself perhaps, has
470
+ * them so; the arrow elsewhere, and nothing while Mouse.hide holds.
471
+ */
472
+ updateCursor() {
473
+ let cursor = this.avm1.input.mouseShown ? "default" : "none";
474
+ const hover = this.avm1.input.mouseShown ? this.hover : null;
475
+ if (hover instanceof TextObject) {
476
+ cursor = "text";
477
+ }
478
+ else if (hover instanceof ButtonObject) {
479
+ cursor = this.hand(hover) ? "pointer" : "default";
480
+ }
481
+ else {
482
+ for (let o = hover; o && o !== this.stage; o = o.parent) {
483
+ if (o instanceof MovieClip && this.avm1.input.buttonMode(o)) {
484
+ cursor = this.hand(o) ? "pointer" : "default";
485
+ break;
486
+ }
487
+ }
488
+ }
489
+ if (cursor !== this.shown) {
490
+ this.shown = cursor;
491
+ this.onCursor?.(cursor);
492
+ }
493
+ }
494
+ hand(d) {
495
+ return this.avm1.input.flag(d, "useHandCursor") && this.avm1.input.flag(d, "enabled");
496
+ }
497
+ }
498
+ function spotOf(d) {
499
+ return d.parent ? { parent: d.parent, depth: d.depth, id: d.character?.id } : null;
500
+ }
501
+ /**
502
+ * Whether a release is on what was pressed: the same object, or one a goto
503
+ * made again in its place, at its depth, of its character, as Ruffle's
504
+ * check_display_object_equality has it.
505
+ */
506
+ function same(a, b) {
507
+ return (a === b ||
508
+ (a.parent === b.parent &&
509
+ a.depth === b.depth &&
510
+ a.character !== null &&
511
+ a.character?.id === b.character?.id));
512
+ }