@swf2es/player-hosts 0.0.0-stage → 0.1.1

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,483 @@
1
+ // An AVM1 movie's input as its scripts see it: Key's state and its
2
+ // listeners, keyPress's buttons and clips, Mouse's listeners and wheel,
3
+ // and the pointer's button events to buttons and to clips in button mode,
4
+ // in Ruffle's (https://github.com/ruffle-rs/ruffle) order (Avm1Button,
5
+ // MovieClip's event_dispatch: MIT OR Apache-2.0, Copyright (c) 2018-2022
6
+ // Ruffle LLC and Ruffle contributors). avm1/keyboard.ts and
7
+ // avm1/pointer.ts turn the host's events into these.
8
+ import { ButtonCondition, ClipEvent } from "../../format/index.js";
9
+ import { avm1 } from "../../runtime/index.js";
10
+ import { ButtonObject, Container, MovieClip } from "../display/display.js";
11
+ import { ClipNative, nativeOf } from "./globals/MovieClip.js";
12
+ import { BLOCK, NO_ARGS, NO_BLOCKS, NORMAL, NOTIFY, Queued } from "./queue.js";
13
+ import { handlersOfButton, NO_HANDLERS } from "./swf.js";
14
+ /** The pointer's events that make a clip a button where its clip actions have one (Ruffle's BUTTON_EVENT_FLAGS). */
15
+ const BUTTON_EVENTS = ClipEvent.press |
16
+ ClipEvent.release |
17
+ ClipEvent.releaseOutside |
18
+ ClipEvent.rollOver |
19
+ ClipEvent.rollOut |
20
+ ClipEvent.dragOver |
21
+ ClipEvent.dragOut |
22
+ ClipEvent.keyPress;
23
+ /** The AS2 methods that make a clip a button where its object, or what it inherits, has one. */
24
+ const BUTTON_METHODS = [
25
+ "onPress",
26
+ "onRelease",
27
+ "onReleaseOutside",
28
+ "onRollOver",
29
+ "onRollOut",
30
+ "onDragOver",
31
+ "onDragOut",
32
+ ];
33
+ /** BUTTON_METHODS as a SWF from 7 names them, and as one up to 6 does, folded. */
34
+ const BUTTON_NAMES = new Set(BUTTON_METHODS);
35
+ const BUTTON_NAMES_FOLDED = new Set(BUTTON_METHODS.map((name) => avm1.fold(name)));
36
+ // Objects never given one of them are passed by (buttonMode).
37
+ avm1.markNames(BUTTON_METHODS);
38
+ /** The most prototypes a lookup walks, as the runtime's. */
39
+ const DEPTH = 255;
40
+ /** The button transition each of the pointer's events is, by the event's bit (Ruffle's Avm1Button). */
41
+ const CONDITIONS = new Map([
42
+ [ClipEvent.rollOver, ButtonCondition.idleToOverUp],
43
+ [ClipEvent.rollOut, ButtonCondition.overUpToIdle],
44
+ [ClipEvent.press, ButtonCondition.overUpToOverDown],
45
+ [ClipEvent.release, ButtonCondition.overDownToOverUp],
46
+ [ClipEvent.releaseOutside, ButtonCondition.outDownToIdle],
47
+ [ClipEvent.dragOut, ButtonCondition.overDownToOutDown],
48
+ [ClipEvent.dragOver, ButtonCondition.outDownToOverDown],
49
+ ]);
50
+ /** The frame label a clip in button mode goes to and stops at on each of the pointer's events. */
51
+ const LABELS = new Map([
52
+ [ClipEvent.rollOut, "_up"],
53
+ [ClipEvent.releaseOutside, "_up"],
54
+ [ClipEvent.rollOver, "_over"],
55
+ [ClipEvent.release, "_over"],
56
+ [ClipEvent.dragOut, "_over"],
57
+ [ClipEvent.press, "_down"],
58
+ [ClipEvent.dragOver, "_down"],
59
+ ]);
60
+ /** What Mouse's listeners hear of the pointer's clip events. */
61
+ const MOUSE_MESSAGES = new Map([
62
+ [ClipEvent.mouseMove, "onMouseMove"],
63
+ [ClipEvent.mouseDown, "onMouseDown"],
64
+ [ClipEvent.mouseUp, "onMouseUp"],
65
+ ]);
66
+ /** The state a button goes to on each of the pointer's events (Ruffle's Avm1Button: a drag out shows over). */
67
+ const BUTTON_STATES = new Map([
68
+ [ClipEvent.rollOver, "over"],
69
+ [ClipEvent.rollOut, "up"],
70
+ [ClipEvent.press, "down"],
71
+ [ClipEvent.release, "over"],
72
+ [ClipEvent.releaseOutside, "up"],
73
+ [ClipEvent.dragOut, "over"],
74
+ [ClipEvent.dragOver, "down"],
75
+ ]);
76
+ /** The movie's keys and pointer, as its scripts see them. */
77
+ export class Avm1Input {
78
+ movie;
79
+ /** The keys down by Flash's codes, the mouse's buttons among them as 1, 2 and 4. */
80
+ keysDown = new Set();
81
+ /**
82
+ * The keys toggled on, by their codes: each press of a key, a mouse
83
+ * button's too, turns it on or off, Caps Lock's as any other's (the
84
+ * corpus's `key_isToggled`).
85
+ */
86
+ toggled = new Set();
87
+ keyCode = 0;
88
+ keyAscii = 0;
89
+ shown = true;
90
+ /** `_global.Key` and `_global.Mouse`, whose listeners the player sends their messages. */
91
+ keyFace = null;
92
+ mouseFace = null;
93
+ constructor(movie) {
94
+ this.movie = movie;
95
+ }
96
+ keyIsDown(code) {
97
+ return this.keysDown.has(code);
98
+ }
99
+ keyToggled(code) {
100
+ return this.toggled.has(code);
101
+ }
102
+ /**
103
+ * Every key let go, with no event, as the player loses focus
104
+ * (Player.setActive): their releases go elsewhere and never come. The
105
+ * mouse's buttons, 1, 2 and 4, stay the pointer's, which tells their
106
+ * releases. What is toggled stays, as a release toggles nothing.
107
+ */
108
+ releaseKeys() {
109
+ for (const code of this.keysDown) {
110
+ if (code !== 1 && code !== 2 && code !== 4) {
111
+ this.keysDown.delete(code);
112
+ }
113
+ }
114
+ }
115
+ get mouseShown() {
116
+ return this.shown;
117
+ }
118
+ set mouseShown(shown) {
119
+ this.shown = shown;
120
+ this.movie.pointer?.updateCursor();
121
+ }
122
+ /** A mouse button, as the pointer gives it (0 left, 1 middle, 2 right), down or up: Key's 1, 4 or 2. */
123
+ mouseButton(button, down) {
124
+ const code = button === 0 ? 1 : button === 1 ? 4 : button === 2 ? 2 : 0;
125
+ if (code === 0) {
126
+ return;
127
+ }
128
+ this.keyState(code, down);
129
+ }
130
+ /**
131
+ * A key down or up in Key's state: the last key, a press toggling it
132
+ * unless it was already down (a held key's repeats do not), as Ruffle's
133
+ * input state has it.
134
+ */
135
+ keyState(code, down) {
136
+ this.keyCode = code;
137
+ if (code === 0) {
138
+ return;
139
+ }
140
+ if (!down) {
141
+ this.keysDown.delete(code);
142
+ return;
143
+ }
144
+ if (!this.keysDown.has(code) && !this.toggled.delete(code)) {
145
+ this.toggled.add(code);
146
+ }
147
+ this.keysDown.add(code);
148
+ }
149
+ /**
150
+ * A key pressed or let go (avm1/keyboard.ts), as Ruffle orders it:
151
+ * every clip's keyDown or keyUp clip actions, as they are drawn, then Key's
152
+ * listeners' onKeyDown or onKeyUp; then, for a press of a key that
153
+ * `press` is a keyPress of, the first button or clip in the order they
154
+ * are drawn whose keyPress it is runs its actions for it. The queue runs
155
+ * once. Whether a keyPress ran.
156
+ */
157
+ key(down, keyCode, charCode, press, typed = 0, shift = false) {
158
+ if (this.movie.halted || !this.movie.loaded) {
159
+ return false;
160
+ }
161
+ this.keyState(keyCode, down);
162
+ this.keyAscii = charCode;
163
+ this.movie.timers.begin();
164
+ try {
165
+ // To the clips as they are drawn, the lowest first, what is in one before it (Ruffle's order).
166
+ // What has the focus also hears onKeyDown or onKeyUp, from SWF 6, while the highlight is active.
167
+ const event = down ? ClipEvent.keyDown : ClipEvent.keyUp;
168
+ const focused = this.movie.focusTracker.focusedObject;
169
+ const heard = this.movie.version >= 6 &&
170
+ this.movie.focusTracker.highlight !== "inactive" &&
171
+ focused !== null &&
172
+ this.flag(focused, "enabled")
173
+ ? focused
174
+ : null;
175
+ const visit = (d) => {
176
+ if (d instanceof Container) {
177
+ for (const child of d.children) {
178
+ visit(child);
179
+ }
180
+ }
181
+ if (d instanceof MovieClip) {
182
+ this.movie.dispatch(d, event, d === heard);
183
+ }
184
+ else if (d instanceof ButtonObject && d === heard) {
185
+ this.movie.method(d, event, false);
186
+ }
187
+ };
188
+ for (const level of this.movie.levelClips()) {
189
+ visit(level);
190
+ }
191
+ this.notify(this.keyFace, down ? "onKeyDown" : "onKeyUp");
192
+ const pressed = down && press !== 0 && this.queueKeyPress(press);
193
+ // A key no keyPress took: Tab moves the focus, after what is queued runs; Enter and Space
194
+ // press what has it.
195
+ let used = pressed;
196
+ if (down && !pressed && keyCode === 9) {
197
+ this.movie.queue.run();
198
+ // A movie with nothing to tab to leaves Tab to the page.
199
+ used = this.movie.focusTracker.tab(shift);
200
+ }
201
+ else if (down && !pressed && (keyCode === 13 || typed === 32)) {
202
+ // A press it made keeps the page from acting on the key too: Space would scroll it.
203
+ used = this.movie.focusTracker.activate();
204
+ }
205
+ this.movie.queue.run();
206
+ return used;
207
+ }
208
+ finally {
209
+ this.movie.timers.end();
210
+ }
211
+ }
212
+ /** Text typed with no key events (avm1/keyboard.ts): a keyPress of its character, as `key` runs one. */
213
+ keyPress(press) {
214
+ if (this.movie.halted || !this.movie.loaded || press === 0) {
215
+ return false;
216
+ }
217
+ this.movie.timers.begin();
218
+ try {
219
+ const pressed = this.queueKeyPress(press) || (press === 32 && this.movie.focusTracker.activate());
220
+ this.movie.queue.run();
221
+ return pressed;
222
+ }
223
+ finally {
224
+ this.movie.timers.end();
225
+ }
226
+ }
227
+ /**
228
+ * The first button or clip, as they are drawn, the lowest first and what
229
+ * is in one before it, whose keyPress is `press`: a button's condition
230
+ * blocks with that key, enabled or not, with its parent as target; a
231
+ * clip's `on (keyPress)` clip actions. A hidden clip takes none, nor what
232
+ * is in it, a hidden button none while it is up, and a button in a button
233
+ * none. Whether one was queued.
234
+ */
235
+ queueKeyPress(press) {
236
+ const visit = (d, inButton) => {
237
+ const button = d instanceof ButtonObject ? d : null;
238
+ if (!d.visible && (button === null || button.state === "up")) {
239
+ return false;
240
+ }
241
+ if (d instanceof Container) {
242
+ for (const child of d.children) {
243
+ if (visit(child, inButton || button !== null)) {
244
+ return true;
245
+ }
246
+ }
247
+ }
248
+ if (button) {
249
+ const id = button.character?.id;
250
+ let found = false;
251
+ if (!inButton && button.parent !== null && id !== undefined) {
252
+ const swf = this.movie.swfOf(button);
253
+ for (const h of handlersOfButton(swf, id)) {
254
+ if (h.key === press) {
255
+ this.movie.queue.enqueue(NORMAL, new Queued(BLOCK, button.parent, swf, h.block));
256
+ found = true;
257
+ }
258
+ }
259
+ }
260
+ return found;
261
+ }
262
+ const native = d instanceof MovieClip ? nativeOf(d) : null;
263
+ if (native !== null && this.movie.swfOf(d).version >= 5) {
264
+ let found = false;
265
+ for (const h of native.handlers ?? NO_HANDLERS) {
266
+ if (h.events & ClipEvent.keyPress && h.key === press) {
267
+ this.movie.queue.enqueue(NORMAL, new Queued(BLOCK, d, native.swf, h.block));
268
+ found = true;
269
+ }
270
+ }
271
+ return found;
272
+ }
273
+ return false;
274
+ };
275
+ return this.movie.levelClips().some((level) => visit(level, false));
276
+ }
277
+ /** `object`'s listeners told `name` with `args`, queued after what is queued now. */
278
+ notify(object, name, args = NO_ARGS) {
279
+ if (object !== null && this.movie.root !== null) {
280
+ this.movie.queue.enqueue(NORMAL, new Queued(NOTIFY, this.movie.root, null, 0, 0, false, name, NO_BLOCKS, object, args));
281
+ }
282
+ }
283
+ /** Whether Mouse has listeners, which the wheel would tell: the page keeps it otherwise. */
284
+ get mouseHeard() {
285
+ const face = this.mouseFace;
286
+ const listeners = face === null ? undefined : avm1.get(face, "_listeners", this.movie.version);
287
+ return (listeners instanceof avm1.Avm1Object &&
288
+ avm1.toNumber(avm1.get(listeners, "length", this.movie.version), this.movie.version) > 0);
289
+ }
290
+ /** The wheel turned by `delta` lines over `target`: Mouse's listeners' onMouseWheel, then the queue runs. */
291
+ mouseWheel(delta, target) {
292
+ if (this.movie.halted || !this.movie.loaded) {
293
+ return;
294
+ }
295
+ this.movie.timers.begin();
296
+ try {
297
+ this.notify(this.mouseFace, "onMouseWheel", [delta, target?.avm1 ?? undefined]);
298
+ this.movie.queue.run();
299
+ }
300
+ finally {
301
+ this.movie.timers.end();
302
+ }
303
+ }
304
+ /**
305
+ * Whether the pointer takes `clip` as a button (Ruffle's is_button_mode):
306
+ * its clip actions have one of the pointer's button events, or, below
307
+ * the root, its object has one of their AS2 methods, its own or
308
+ * inherited, a class's among them.
309
+ */
310
+ buttonMode(clip) {
311
+ const native = nativeOf(clip);
312
+ for (const h of native?.handlers ?? NO_HANDLERS) {
313
+ if (h.events & BUTTON_EVENTS) {
314
+ return true;
315
+ }
316
+ }
317
+ const face = clip.avm1;
318
+ const version = this.movie.version;
319
+ if (face === null || clip === this.movie.root || version < 6) {
320
+ return false;
321
+ }
322
+ // avm1.has for each name, the pointer asking it of every clip it passes:
323
+ // the clip's children by name, which its object finds after its own
324
+ // properties, looked over once for all the names; then along the chain
325
+ // only the objects ever given one of them, and any with locals it
326
+ // makes as asked, an activation's, or a display object's own side.
327
+ const names = version > 6 ? BUTTON_NAMES : BUTTON_NAMES_FOLDED;
328
+ if (face.display !== null) {
329
+ for (const child of clip.children) {
330
+ const name = child.name;
331
+ if (name !== "" && names.has(version > 6 ? name : avm1.fold(name))) {
332
+ return true;
333
+ }
334
+ }
335
+ }
336
+ let o = face;
337
+ for (let depth = 0; o instanceof avm1.Avm1Object && depth < DEPTH; depth++) {
338
+ if (o.marked || o.lazy !== null) {
339
+ for (const name of BUTTON_METHODS) {
340
+ if (o.own(name, version) !== undefined) {
341
+ return true;
342
+ }
343
+ }
344
+ }
345
+ if (depth > 0 && o.display !== null) {
346
+ for (const name of BUTTON_METHODS) {
347
+ if (o.display.get(name, version) !== avm1.ABSENT) {
348
+ return true;
349
+ }
350
+ }
351
+ }
352
+ o = o.protoFor(version);
353
+ }
354
+ return false;
355
+ }
356
+ /** A button's or clip's AS2 flag, `enabled` or `useHandCursor`: true where it is undefined, as Flash reads it. */
357
+ flag(d, name) {
358
+ const value = this.read(d, name);
359
+ return value === undefined || avm1.toBoolean(value, this.movie.version);
360
+ }
361
+ /** What a clip's `hitArea` names, a clip or button the pointer tests in its place; null for none. */
362
+ hitArea(clip) {
363
+ if (this.movie.version < 6) {
364
+ return null;
365
+ }
366
+ const area = this.read(clip, "hitArea");
367
+ const display = area instanceof avm1.Avm1Object ? area.display : null;
368
+ return display instanceof ClipNative ? display.target : null;
369
+ }
370
+ /**
371
+ * `d`'s AVM1 object's property `name`, read as code reads it, in an
372
+ * activation of `d`'s, as a getter `addProperty` gave it may be AVM1
373
+ * code; undefined where it has no object, or the read throws. Within
374
+ * a script, the begin and end go for nothing: the script's own hold.
375
+ */
376
+ read(d, name) {
377
+ const face = d.avm1;
378
+ const cx = this.movie.halted ? null : this.movie.activationOf(d);
379
+ if (face === null || cx === null) {
380
+ return undefined;
381
+ }
382
+ let value;
383
+ this.movie.timers.begin();
384
+ try {
385
+ this.movie.rt.call(cx, () => {
386
+ value = avm1.get(face, name, this.movie.version);
387
+ });
388
+ }
389
+ finally {
390
+ this.movie.timers.end();
391
+ }
392
+ return value;
393
+ }
394
+ /**
395
+ * The pointer's button events, each to its object, in the order given,
396
+ * then the queue runs once. A button runs its condition blocks for the
397
+ * transition, with its parent as target, plays the transition's sound
398
+ * and changes state, then, from SWF 6, its AS2 method; a clip in button
399
+ * mode goes to the event's frame label, if it has one, and stops, then
400
+ * runs its clip actions and method for it. Ruffle's order (Avm1Button
401
+ * and MovieClip's event_dispatch).
402
+ */
403
+ buttonEvents(events) {
404
+ if (this.movie.halted || !this.movie.loaded || events.length === 0) {
405
+ return;
406
+ }
407
+ this.movie.timers.begin();
408
+ try {
409
+ for (const [d, event] of events) {
410
+ this.buttonDispatch(d, event);
411
+ }
412
+ this.movie.queue.run();
413
+ }
414
+ finally {
415
+ this.movie.timers.end();
416
+ }
417
+ }
418
+ /** One of the pointer's button events to `d`, a button or a clip in button mode, queued. */
419
+ buttonDispatch(d, event) {
420
+ if (this.movie.removed(d)) {
421
+ return;
422
+ }
423
+ if (d instanceof ButtonObject) {
424
+ this.buttonEvent(d, event);
425
+ }
426
+ else if (d instanceof MovieClip) {
427
+ const label = LABELS.get(event);
428
+ const timeline = this.movie.timeline(d);
429
+ const frame = label === undefined ? undefined : timeline.labelFrame(label);
430
+ if (frame !== undefined) {
431
+ timeline.goto(frame, false);
432
+ }
433
+ this.movie.dispatch(d, event);
434
+ }
435
+ }
436
+ buttonEvent(button, event) {
437
+ const condition = CONDITIONS.get(event) ?? 0;
438
+ const parent = button.parent;
439
+ const id = button.character?.id;
440
+ if (parent !== null && id !== undefined) {
441
+ const swf = this.movie.swfOf(button);
442
+ for (const h of handlersOfButton(swf, id)) {
443
+ if (h.conditions & condition) {
444
+ this.movie.queue.enqueue(NORMAL, new Queued(BLOCK, parent, swf, h.block));
445
+ }
446
+ }
447
+ }
448
+ const state = BUTTON_STATES.get(event);
449
+ if (state !== undefined && state !== button.state) {
450
+ // A drag's transitions are silent.
451
+ button.setState(state, event !== ClipEvent.dragOut && event !== ClipEvent.dragOver);
452
+ }
453
+ this.movie.method(button, event, false);
454
+ }
455
+ /**
456
+ * Broadcast a pointer's event (avm1/pointer.ts): every clip's clip
457
+ * actions for it, the newest first, then Mouse's listeners, then the
458
+ * queue runs. A key's go by `key`.
459
+ */
460
+ clipEvent(event) {
461
+ if (this.movie.halted || !this.movie.loaded) {
462
+ return;
463
+ }
464
+ this.movie.timers.begin();
465
+ try {
466
+ for (let i = this.movie.clips.length - 1; i >= 0; i--) {
467
+ const clip = this.movie.clips[i];
468
+ if (!this.movie.removed(clip)) {
469
+ this.movie.dispatch(clip, event);
470
+ }
471
+ }
472
+ // Mouse's listeners after every clip's, as Ruffle queues them.
473
+ const message = MOUSE_MESSAGES.get(event);
474
+ if (message !== undefined) {
475
+ this.notify(this.mouseFace, message);
476
+ }
477
+ this.movie.queue.run();
478
+ }
479
+ finally {
480
+ this.movie.timers.end();
481
+ }
482
+ }
483
+ }
@@ -0,0 +1,113 @@
1
+ // The keyboard of an AVM1 movie: each key goes to Key, its clips' keyDown
2
+ // and keyUp clip actions, and a press to the first button or clip whose
3
+ // keyPress it is (input.ts's key). A keyPress's key is Flash's own code, as
4
+ // Ruffle's ButtonKeyCode has it (https://github.com/ruffle-rs/ruffle,
5
+ // core/src/events.rs: MIT OR Apache-2.0, Copyright (c) 2018-2022 Ruffle
6
+ // LLC and Ruffle contributors): a printable character's ASCII code, or one
7
+ // of the editing keys' below 20. A host whose text comes apart from its
8
+ // keys (the corpus's replay) gives the character by `text`.
9
+ import { TextObject } from "../display/display.js";
10
+ import { pasteable, TextEditor } from "../input/text-editor.js";
11
+ /** The editing keys' keyPress codes, by Flash's key codes. */
12
+ const KEY_PRESSES = new Map([
13
+ [37, 1], // Left
14
+ [39, 2], // Right
15
+ [36, 3], // Home
16
+ [35, 4], // End
17
+ [45, 5], // Insert
18
+ [46, 6], // Delete
19
+ [8, 8], // Backspace
20
+ [13, 13], // Enter
21
+ [38, 14], // Up
22
+ [40, 15], // Down
23
+ [33, 16], // Page Up
24
+ [34, 17], // Page Down
25
+ [9, 18], // Tab
26
+ [27, 19], // Escape
27
+ ]);
28
+ /** A printable ASCII character's keyPress code, its own; 0 for any other. */
29
+ const printable = (charCode) => (charCode >= 32 && charCode <= 126 ? charCode : 0);
30
+ export class Avm1Keyboard {
31
+ avm1;
32
+ handled = 0;
33
+ editor = new TextEditor((field) => {
34
+ const movie = this.avm1;
35
+ movie.timers.begin();
36
+ try {
37
+ field.fit();
38
+ movie.textChanged(field);
39
+ if (field.avm1) {
40
+ movie.callback(field.avm1, "broadcastMessage", ["onChanged", field.avm1]);
41
+ }
42
+ movie.queue.run();
43
+ }
44
+ finally {
45
+ movie.timers.end();
46
+ }
47
+ });
48
+ constructor(avm1) {
49
+ this.avm1 = avm1;
50
+ }
51
+ /** A key: its keyPress, where it is one, the editing key's, else, with edits, its character's. */
52
+ handle(type, k, edits = true) {
53
+ this.handled++;
54
+ if (type === "up") {
55
+ this.avm1.input.key(false, k.keyCode, k.charCode, 0);
56
+ return false;
57
+ }
58
+ const typed = edits ? printable(k.charCode) : 0;
59
+ const press = KEY_PRESSES.get(k.keyCode) ?? typed;
60
+ const used = this.avm1.input.key(true, k.keyCode, k.charCode, press, typed, !!k.shiftKey);
61
+ return used || (edits && k.keyCode !== 9 && this.edit(k));
62
+ }
63
+ text(k) {
64
+ this.handled++;
65
+ const used = this.avm1.input.keyPress(printable(k.charCode));
66
+ return used || this.edit(k);
67
+ }
68
+ field() {
69
+ const d = this.avm1.focused;
70
+ return !this.avm1.halted && d instanceof TextObject && !this.avm1.removed(d) ? d : null;
71
+ }
72
+ edit(k) {
73
+ const field = this.field();
74
+ if (!field || (field.type !== "input" && !field.selectable)) {
75
+ return false;
76
+ }
77
+ if (k.ctrlKey && !k.altKey && k.keyCode === 65) {
78
+ if (field.selectable) {
79
+ field.select(0, field.model.text.length);
80
+ }
81
+ return true;
82
+ }
83
+ return this.editor.edit(field, k);
84
+ }
85
+ copy(cut = false) {
86
+ this.handled++;
87
+ const field = this.field();
88
+ if (!field || field.displayAsPassword || (cut && field.type !== "input")) {
89
+ return null;
90
+ }
91
+ const [from, to] = field.selection;
92
+ if (from === to) {
93
+ return null;
94
+ }
95
+ const data = { text: field.model.text.slice(from, to).replace(/\r\n?/g, "\n") };
96
+ if (cut) {
97
+ this.editor.replace(field, from, to, "");
98
+ }
99
+ return data;
100
+ }
101
+ paste(data = null) {
102
+ this.handled++;
103
+ const field = this.field();
104
+ if (field?.type !== "input" || !data) {
105
+ return false;
106
+ }
107
+ const text = pasteable(field.multiline, data.text);
108
+ if (text !== "") {
109
+ this.editor.type(field, text);
110
+ }
111
+ return true;
112
+ }
113
+ }