@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,310 @@
1
+ // flash.external.ExternalInterface's AS2 face, as Ruffle's (https://github.com/
2
+ // ruffle-rs/ruffle) core/src/avm1/globals/external_interface.rs has it: MIT
3
+ // OR Apache-2.0, Copyright (c) 2018-2022 Ruffle LLC and Ruffle contributors.
4
+ // Values cross in Flash's ExternalInterface XML through the host's bridge
5
+ // (hosts.ts), as AS3's do: a call is offered to evalJS as JavaScript, then
6
+ // sent to callOut as an XML invocation, and the page's calls in come as
7
+ // one. The underscored helpers, which Flash's own AS2 class is built of
8
+ // and content can call, answer as Flash's do (the corpus's
9
+ // external_interface_* tests); _toAS and the rest read an XMLNode's
10
+ // nodeName, firstChild, childNodes and attributes by name, so they take
11
+ // any object shaped as one.
12
+ import { avm1 } from "../../../runtime/index.js";
13
+ import { escapeXml } from "./XMLNode.js";
14
+ /** XML's five characters and their entities, `&` first. */
15
+ const ESCAPES = [
16
+ ["&", "&"],
17
+ ['"', """],
18
+ ["'", "'"],
19
+ ["<", "&lt;"],
20
+ [">", "&gt;"],
21
+ ];
22
+ /** `text` with the five entities read back, `&amp;` last. */
23
+ function unescapeXml(text) {
24
+ let out = text;
25
+ for (let i = ESCAPES.length - 1; i >= 0; i--) {
26
+ out = out.replaceAll(ESCAPES[i][1], ESCAPES[i][0]);
27
+ }
28
+ return out;
29
+ }
30
+ const FLAGS = avm1.DONT_ENUM | avm1.DONT_DELETE | avm1.READ_ONLY;
31
+ /**
32
+ * The most elements of an array-like the converters read, whatever length
33
+ * it claims: a length a script made up must not keep a native loop from
34
+ * the script timeout (as TextFormat's tabStops reads at most 2^16). Flash
35
+ * reads them all, running into its timeout.
36
+ */
37
+ const MAX_ELEMENTS = 0x10000;
38
+ /**
39
+ * The most values one native call converts in all, elements, properties
40
+ * and objects: an object shared down a tree of them (a = [b, b], b = [c,
41
+ * c]...) is converted each time it is met, which grows exponentially in
42
+ * loops that never reach the script timeout. Past it, what is left is
43
+ * null (undefined for _toAS).
44
+ */
45
+ const MAX_WORK = 0x10000;
46
+ /** `flash.external.ExternalInterface`. */
47
+ export function externalInterfaceClass(host) {
48
+ const realm = host.realm;
49
+ const constr = realm.classOf(new avm1.Avm1Object(realm.objectProto), () => undefined, () => undefined);
50
+ /** What the native call converting now may still convert. */
51
+ let left = MAX_WORK;
52
+ /** Up to `n` of the work left, taken: what was. */
53
+ const spend = (n) => {
54
+ const k = Math.min(n, left);
55
+ left -= k;
56
+ return k;
57
+ };
58
+ /** `f`, a native call's conversions, with its own budget, the outer one's kept for after it. */
59
+ const budgeted = (f) => {
60
+ const outer = left;
61
+ left = MAX_WORK;
62
+ try {
63
+ return f();
64
+ }
65
+ finally {
66
+ left = outer;
67
+ }
68
+ };
69
+ const define = (name, f, flags = avm1.VERSION_8) => constr.define(name, realm.method((self, args, v) => budgeted(() => f(self, args, v))), FLAGS | flags);
70
+ /** A string argument, null where it is left out or makes an empty string. */
71
+ const text = (args, v, f) => {
72
+ if (args.length === 0) {
73
+ return null;
74
+ }
75
+ const out = f(avm1.stringOf(args[0], v));
76
+ return out === "" ? null : out;
77
+ };
78
+ const asObject = (x, v) => x instanceof avm1.Avm1Object ? x : realm.box(x, v);
79
+ /** How many elements of `o` to read: its length, capped, out of the work left. */
80
+ const lengthOf = (o, v) => spend(Math.min(MAX_ELEMENTS, Math.max(0, avm1.toNumber(avm1.get(o, "length", v), v) | 0)));
81
+ /**
82
+ * `f` of `o`, or `inside` where `o` is already being converted further
83
+ * out: an object that holds itself ends there, where Flash's recursion
84
+ * would run out of stack (as the page's toXml has it).
85
+ */
86
+ const open = new Set();
87
+ const once = (o, inside, f) => {
88
+ if (open.has(o) || spend(1) === 0) {
89
+ return inside;
90
+ }
91
+ open.add(o);
92
+ try {
93
+ return f();
94
+ }
95
+ finally {
96
+ open.delete(o);
97
+ }
98
+ };
99
+ const arrayToXml = (o, v) => {
100
+ const parts = ["<array>"];
101
+ const n = lengthOf(o, v);
102
+ for (let i = 0; i < n; i++) {
103
+ parts.push(`<property id="${i}">`, toXml(avm1.get(o, String(i), v), v), "</property>");
104
+ }
105
+ parts.push("</array>");
106
+ return parts.join("");
107
+ };
108
+ // Its own enumerable properties in for-in's order, their names as they are.
109
+ const objectToXml = (o, v) => {
110
+ const parts = ["<object>"];
111
+ const own = o.ownProperties();
112
+ for (let i = own.length - 1; i >= 0; i--) {
113
+ const p = own[i];
114
+ if ((p.flags & avm1.DONT_ENUM) === 0) {
115
+ if (spend(1) === 0) {
116
+ break;
117
+ }
118
+ parts.push(`<property id="${p.name}">`, toXml(avm1.get(o, p.name, v), v), "</property>");
119
+ }
120
+ }
121
+ parts.push("</object>");
122
+ return parts.join("");
123
+ };
124
+ // Its elements after the first, as Flash's skips the function's name.
125
+ const argumentsToXml = (o, v) => {
126
+ const parts = ["<arguments>"];
127
+ const n = lengthOf(o, v);
128
+ for (let i = 1; i < n; i++) {
129
+ parts.push(toXml(avm1.get(o, String(i), v), v));
130
+ }
131
+ parts.push("</arguments>");
132
+ return parts.join("");
133
+ };
134
+ // An object with an own length is an array, a String object among them.
135
+ const toXml = (x, v) => {
136
+ switch (typeof x) {
137
+ case "undefined":
138
+ return "<undefined/>";
139
+ case "boolean":
140
+ return x ? "<true/>" : "<false/>";
141
+ case "number":
142
+ return `<number>${avm1.stringOf(x, v)}</number>`;
143
+ case "string": {
144
+ const escaped = escapeXml(x);
145
+ return `<string>${escaped === "" ? "null" : escaped}</string>`;
146
+ }
147
+ }
148
+ if (!(x instanceof avm1.Avm1Object)) {
149
+ return "<null/>";
150
+ }
151
+ if (x.own("length", v) !== undefined) {
152
+ return once(x, "<null/>", () => arrayToXml(x, v));
153
+ }
154
+ return x instanceof avm1.Avm1Function ? "<null/>" : once(x, "<null/>", () => objectToXml(x, v));
155
+ };
156
+ const field = (o, name, v) => o instanceof avm1.Avm1Object ? avm1.get(o, name, v) : undefined;
157
+ /** A node's children as their own array, none where it has no childNodes. */
158
+ const children = (node, v) => {
159
+ const list = field(node, "childNodes", v);
160
+ if (!(list instanceof avm1.Avm1Object)) {
161
+ return [];
162
+ }
163
+ return Array.from({ length: lengthOf(list, v) }, (_, i) => avm1.get(list, String(i), v));
164
+ };
165
+ /** Each `<property id>` child's value, set on `into` by its id. */
166
+ const properties = (node, into, v) => {
167
+ for (const child of children(node, v)) {
168
+ if (field(child, "nodeName", v) === "property") {
169
+ const id = field(field(child, "attributes", v), "id", v);
170
+ avm1.set(into, avm1.stringOf(id, v), toAs(field(child, "firstChild", v), v), v);
171
+ }
172
+ }
173
+ return into;
174
+ };
175
+ // A node's name counts only as a string or a String object: one whose toString gives it does not.
176
+ const toAs = (node, v) => {
177
+ const raw = field(asObject(node, v), "nodeName", v);
178
+ const name = typeof raw === "string"
179
+ ? raw
180
+ : raw instanceof avm1.Avm1Object && typeof raw.primitive === "string"
181
+ ? raw.primitive
182
+ : null;
183
+ switch (name) {
184
+ case "null":
185
+ return null;
186
+ case "true":
187
+ return true;
188
+ case "false":
189
+ return false;
190
+ case "string":
191
+ return unescapeXml(avm1.stringOf(field(node, "firstChild", v), v));
192
+ case "number":
193
+ return avm1.toNumber(avm1.stringOf(field(node, "firstChild", v), v), v);
194
+ case "array":
195
+ case "object":
196
+ // A node that holds itself, as only a script's objects can, is undefined inside itself.
197
+ return node instanceof avm1.Avm1Object
198
+ ? once(node, undefined, () => properties(node, name === "array" ? realm.newArray([], v) : realm.newObject(v), v))
199
+ : properties(node, name === "array" ? realm.newArray([], v) : realm.newObject(v), v);
200
+ case "class":
201
+ return avm1.stringOf(field(node, "firstChild", v), v);
202
+ default:
203
+ return undefined;
204
+ }
205
+ };
206
+ const argumentsToAs = (node, v) => realm.newArray(children(node, v).map((child) => toAs(child, v)), v);
207
+ /** The element `text` holds, parsed by the realm's XML as content would parse it. */
208
+ const parse = (text, v) => {
209
+ const xml = realm.construct(avm1.get(realm.global, "XML", v), [], v);
210
+ if (!(xml instanceof avm1.Avm1Object)) {
211
+ return undefined;
212
+ }
213
+ avm1.set(xml, "ignoreWhite", true, v);
214
+ avm1.invoke(avm1.get(xml, "parseXML", v), xml, [text], v);
215
+ return avm1.get(xml, "firstChild", v);
216
+ };
217
+ const available = constr.add("available", undefined, FLAGS | avm1.VERSION_8);
218
+ available.get = realm.method(() => host.externalBridge() !== null);
219
+ available.set = realm.method(() => undefined);
220
+ // Only a function is a callback; the page's calls come as XML invocations and answer in XML.
221
+ define("addCallback", (_, args, v) => {
222
+ const bridge = host.externalBridge();
223
+ const method = args[2];
224
+ if (bridge === null || args.length < 3 || !(method instanceof avm1.Avm1Function)) {
225
+ return false;
226
+ }
227
+ // Reading the request, the call and writing its answer all run as AVM1 code: the XML class,
228
+ // a getter or a toString they meet are the content's.
229
+ const self = args[1];
230
+ bridge.addCallback(avm1.stringOf(args[0], v), (request) => host.callIn(() => budgeted(() => {
231
+ const invocation = parse(request, v);
232
+ const argsNode = children(invocation, v).find((child) => field(child, "nodeName", v) === "arguments");
233
+ const given = children(argsNode, v).map((child) => toAs(child, v));
234
+ return toXml(avm1.invoke(method, self, given, v), v);
235
+ })));
236
+ return true;
237
+ });
238
+ // The page's answer, null where there is no page or nothing answers.
239
+ define("call", (_, args, v) => {
240
+ const bridge = host.externalBridge();
241
+ if (bridge === null) {
242
+ return null;
243
+ }
244
+ const name = avm1.stringOf(args[0], v);
245
+ const rest = args.slice(1);
246
+ // As JavaScript only for a host that evaluates it; the web element's declines every call.
247
+ let answer = bridge.evalJS === undefined
248
+ ? null
249
+ : bridge.evalJS(`try { __flash__toXML(${name}(${rest.map((x) => toJs(x, v)).join(",")})) ; } catch (e) { "<undefined/>"; }`);
250
+ if (answer === null) {
251
+ // The name as it is, as AS3's playerglobal sends it: the page reads it so, an inline function among them.
252
+ const xml = rest.map((x) => toXml(x, v)).join("");
253
+ answer = bridge.callOut(`<invoke name="${name}" returntype="xml"><arguments>${xml}</arguments></invoke>`);
254
+ }
255
+ return answer === null ? null : toAs(parse(answer, v), v);
256
+ }, 0);
257
+ /** A value as JavaScript source, for a host that evaluates it. */
258
+ const toJs = (x, v) => {
259
+ switch (typeof x) {
260
+ case "undefined":
261
+ return "undefined";
262
+ case "boolean":
263
+ return String(x);
264
+ case "number":
265
+ return avm1.stringOf(x, v);
266
+ case "string":
267
+ return JSON.stringify(x);
268
+ }
269
+ if (!(x instanceof avm1.Avm1Object) || x instanceof avm1.Avm1Function) {
270
+ return "null";
271
+ }
272
+ return once(x, "null", () => x.own("length", v) !== undefined ? arrayToJs(x, v) : objectToJs(x, v));
273
+ };
274
+ const arrayToJs = (o, v) => `[${Array.from({ length: lengthOf(o, v) }, (_, i) => toJs(avm1.get(o, String(i), v), v)).join(",")}]`;
275
+ // Its keys quoted, so that none carries code into an eval.
276
+ const objectToJs = (o, v) => {
277
+ const parts = [];
278
+ const own = o.ownProperties();
279
+ for (let i = own.length - 1; i >= 0; i--) {
280
+ const p = own[i];
281
+ if ((p.flags & avm1.DONT_ENUM) === 0) {
282
+ if (spend(1) === 0) {
283
+ break;
284
+ }
285
+ parts.push(`${JSON.stringify(p.name)}:${toJs(avm1.get(o, p.name, v), v)}`);
286
+ }
287
+ }
288
+ return `({${parts.join(",")}})`;
289
+ };
290
+ define("_escapeXML", (_, args, v) => text(args, v, escapeXml));
291
+ define("_unescapeXML", (_, args, v) => text(args, v, unescapeXml));
292
+ define("_jsQuoteString", (_, args, v) => text(args, v, (s) => s.replaceAll('"', '\\"')));
293
+ define("_toXML", (_, args, v) => toXml(args[0], v));
294
+ define("_arrayToXML", (_, args, v) => arrayToXml(asObject(args[0], v), v));
295
+ define("_argumentsToXML", (_, args, v) => argumentsToXml(asObject(args[0], v), v));
296
+ define("_objectToXML", (_, args, v) => objectToXml(asObject(args[0], v), v));
297
+ define("_toAS", (_, args, v) => toAs(args[0], v));
298
+ define("_arrayToAS", (_, args, v) => properties(args[0], realm.newArray([], v), v));
299
+ define("_objectToAS", (_, args, v) => properties(args[0], realm.newObject(v), v));
300
+ define("_argumentsToAS", (_, args, v) => argumentsToAs(args[0], v));
301
+ define("_toJS", (_, args, v) => toJs(args[0], v));
302
+ define("_arrayToJS", (_, args, v) => arrayToJs(asObject(args[0], v), v));
303
+ define("_objectToJS", (_, args, v) => objectToJs(asObject(args[0], v), v));
304
+ define("_objectID", () => host.externalBridge()?.objectID ?? null);
305
+ // The host's bridge needs no script put on the page.
306
+ define("_initJS", () => undefined);
307
+ define("_evalJS", (_, args, v) => host.externalBridge()?.evalJS?.(avm1.stringOf(args[0], v)) ?? null);
308
+ define("_callOut", (_, args, v) => host.externalBridge()?.callOut(avm1.stringOf(args[0], v)) ?? null);
309
+ return constr;
310
+ }
@@ -0,0 +1,217 @@
1
+ // AS2's flash.net file references use the same dialogs and transfers as AS3's.
2
+ import { avm1 } from "../../../runtime/index.js";
3
+ import { FileReference } from "../../files.js";
4
+ export function fileReferenceClasses(movie) {
5
+ const realm = movie.realm;
6
+ const version = movie.version;
7
+ const states = new WeakMap();
8
+ const services = {
9
+ host: movie.fileHost,
10
+ signal: movie.fileLifetime.signal,
11
+ defer: (deliver) => movie.net.after(Promise.resolve(), deliver),
12
+ track: (task) => movie.net.after(task, () => { }),
13
+ fetch: (request, signal) => movie.net.request({
14
+ ...request,
15
+ method: request.method === "POST" ? "POST" : "GET",
16
+ headers: request.headers.map(([name, value]) => [name, value]),
17
+ }, "data", signal),
18
+ error: (id) => {
19
+ throw new Error(`Error #${id}`);
20
+ },
21
+ };
22
+ const notify = (self, name, args = []) => {
23
+ movie.callback(self, "broadcastMessage", [name, self, ...args]);
24
+ };
25
+ const state = (self) => {
26
+ let ref = states.get(self);
27
+ if (!ref) {
28
+ ref = new FileReference(services, (type, loaded, total, text) => {
29
+ switch (type) {
30
+ case "select":
31
+ notify(self, "onSelect");
32
+ break;
33
+ case "cancel":
34
+ notify(self, "onCancel");
35
+ break;
36
+ case "open":
37
+ notify(self, "onOpen");
38
+ break;
39
+ case "progress":
40
+ notify(self, "onProgress", [loaded, total]);
41
+ break;
42
+ case "httpStatus":
43
+ notify(self, "onHTTPError", [loaded]);
44
+ break;
45
+ case "complete":
46
+ notify(self, "onComplete");
47
+ break;
48
+ case "ioError":
49
+ notify(self, "onIOError");
50
+ break;
51
+ case "uploadCompleteData":
52
+ notify(self, "onUploadCompleteData", [text]);
53
+ break;
54
+ }
55
+ });
56
+ states.set(self, ref);
57
+ }
58
+ return ref;
59
+ };
60
+ const proto = new avm1.Avm1Object(realm.objectProto);
61
+ const construct = (self) => {
62
+ state(self);
63
+ avm1.initializeBroadcaster(self, realm, version);
64
+ return self;
65
+ };
66
+ const reference = realm.classOf(proto, construct, () => undefined);
67
+ const hidden = avm1.DONT_ENUM | avm1.DONT_DELETE;
68
+ const method = (name, fn) => proto.define(name, realm.method(fn), hidden);
69
+ const metadata = (name, read) => {
70
+ const p = proto.define(name, undefined, hidden);
71
+ p.get = realm.method((self) => {
72
+ const file = states.get(self)?.file;
73
+ return file ? read(file) : undefined;
74
+ });
75
+ p.set = realm.method(() => undefined);
76
+ };
77
+ metadata("name", (file) => file.name);
78
+ metadata("size", (file) => file.size);
79
+ metadata("type", (file) => {
80
+ const dot = file.name.lastIndexOf(".");
81
+ return dot < 0 ? "" : file.name.slice(dot);
82
+ });
83
+ metadata("creator", () => undefined);
84
+ metadata("creationDate", (file) => realm.construct(realm.Date.constr, [file.creationDate ?? file.modificationDate], version));
85
+ metadata("modificationDate", (file) => realm.construct(realm.Date.constr, [file.modificationDate], version));
86
+ const filters = (args) => {
87
+ if (args.length === 0) {
88
+ return [];
89
+ }
90
+ const value = args[0];
91
+ if (!(value instanceof avm1.Avm1Object) || !value.own("length", version)) {
92
+ return null;
93
+ }
94
+ const count = avm1.toNumber(avm1.get(value, "length", version), version) >>> 0;
95
+ if (count === 0) {
96
+ return null;
97
+ }
98
+ const result = [];
99
+ for (let i = 0; i < count; i++) {
100
+ const filter = avm1.get(value, String(i), version);
101
+ if (!(filter instanceof avm1.Avm1Object) ||
102
+ !filter.own("description", version) ||
103
+ !filter.own("extension", version)) {
104
+ return null;
105
+ }
106
+ const read = (name) => {
107
+ try {
108
+ return avm1.get(filter, name, version);
109
+ }
110
+ catch {
111
+ return undefined;
112
+ }
113
+ };
114
+ const description = read("description");
115
+ const extension = read("extension");
116
+ if (description == null || extension == null) {
117
+ return null;
118
+ }
119
+ const text = avm1.stringOf(description, version);
120
+ const pattern = avm1.stringOf(extension, version);
121
+ const mac = read("macType");
122
+ if (mac != null) {
123
+ avm1.stringOf(mac, version);
124
+ }
125
+ if (!text || !pattern) {
126
+ return null;
127
+ }
128
+ result.push({ description: text, extension: pattern });
129
+ }
130
+ return result;
131
+ };
132
+ method("browse", (self, args) => {
133
+ const chosen = filters(args);
134
+ if (chosen === null) {
135
+ return false;
136
+ }
137
+ try {
138
+ state(self).browse(chosen);
139
+ return true;
140
+ }
141
+ catch {
142
+ return false;
143
+ }
144
+ });
145
+ method("cancel", (self) => {
146
+ state(self).cancel();
147
+ });
148
+ method("download", (self, args) => {
149
+ if (!args.length) {
150
+ return false;
151
+ }
152
+ const url = avm1.stringOf(args[0], version);
153
+ const name = args.length > 1
154
+ ? avm1.stringOf(args[1], version)
155
+ : url.split(/[?#]/, 1)[0].split("/").pop() || "download";
156
+ try {
157
+ state(self).save(name, {
158
+ url: movie.net.resolve(url),
159
+ method: "GET",
160
+ headers: [],
161
+ body: null,
162
+ purpose: "data",
163
+ });
164
+ return true;
165
+ }
166
+ catch {
167
+ return false;
168
+ }
169
+ });
170
+ method("upload", (self, args) => {
171
+ if (!args.length || !state(self).file) {
172
+ return false;
173
+ }
174
+ try {
175
+ state(self).upload({
176
+ url: movie.net.resolve(avm1.stringOf(args[0], version)),
177
+ method: "POST",
178
+ headers: [],
179
+ body: null,
180
+ purpose: "data",
181
+ }, args.length > 1 ? avm1.stringOf(args[1], version) : "Filedata", avm1.toBoolean(args[2], version));
182
+ return true;
183
+ }
184
+ catch {
185
+ return false;
186
+ }
187
+ });
188
+ const listProto = new avm1.Avm1Object(realm.objectProto);
189
+ const list = realm.classOf(listProto, (self) => {
190
+ avm1.initializeBroadcaster(self, realm, version);
191
+ return self;
192
+ }, () => undefined);
193
+ listProto.define("browse", realm.method((self, args) => {
194
+ const chosen = filters(args);
195
+ if (chosen === null) {
196
+ return false;
197
+ }
198
+ try {
199
+ state(self).browse(chosen, true, (files) => {
200
+ const objects = files.map((file) => {
201
+ const object = realm.construct(reference, [], version);
202
+ state(object).file = file;
203
+ return object;
204
+ });
205
+ avm1.set(self, "fileList", realm.newArray(objects, version), version);
206
+ });
207
+ return true;
208
+ }
209
+ catch {
210
+ return false;
211
+ }
212
+ }), hidden);
213
+ const net = new avm1.Avm1Object(realm.objectProto);
214
+ net.define("FileReference", reference, 0);
215
+ net.define("FileReferenceList", list, 0);
216
+ return net;
217
+ }
@@ -0,0 +1,60 @@
1
+ // Key and Mouse, the keyboard's and the pointer's AS2 faces, as Ruffle's
2
+ // (https://github.com/ruffle-rs/ruffle) core/src/avm1/globals/key.rs and
3
+ // mouse.rs have them: MIT OR Apache-2.0, Copyright (c) 2018-2022 Ruffle LLC
4
+ // and Ruffle contributors. Each is a broadcaster: the player sends Key's
5
+ // listeners onKeyDown and onKeyUp, Mouse's onMouseDown, onMouseMove,
6
+ // onMouseUp and onMouseWheel (input.ts).
7
+ import { avm1 } from "../../../runtime/index.js";
8
+ /** Key's constants, its keys' codes. */
9
+ const KEYS = [
10
+ ["ALT", 18],
11
+ ["BACKSPACE", 8],
12
+ ["CAPSLOCK", 20],
13
+ ["CONTROL", 17],
14
+ ["DELETEKEY", 46],
15
+ ["DOWN", 40],
16
+ ["END", 35],
17
+ ["ENTER", 13],
18
+ ["ESCAPE", 27],
19
+ ["HOME", 36],
20
+ ["INSERT", 45],
21
+ ["LEFT", 37],
22
+ ["PGDN", 34],
23
+ ["PGUP", 33],
24
+ ["RIGHT", 39],
25
+ ["SHIFT", 16],
26
+ ["SPACE", 32],
27
+ ["TAB", 9],
28
+ ["UP", 38],
29
+ ];
30
+ const FIXED = avm1.DONT_ENUM | avm1.DONT_DELETE | avm1.READ_ONLY;
31
+ /** `_global.Key`. */
32
+ export function keyObject(realm, input, version) {
33
+ const key = new avm1.Avm1Object(realm.objectProto);
34
+ avm1.initializeBroadcaster(key, realm, version);
35
+ for (const [name, code] of KEYS) {
36
+ key.define(name, code, FIXED);
37
+ }
38
+ const code = (args, v) => args.length > 0 ? avm1.toNumber(args[0], v) | 0 : Number.NaN;
39
+ key.define("isDown", realm.method((_, args, v) => input.keyIsDown(code(args, v))), FIXED);
40
+ key.define("isToggled", realm.method((_, args, v) => input.keyToggled(code(args, v))), FIXED);
41
+ key.define("getAscii", realm.method(() => input.keyAscii), FIXED);
42
+ key.define("getCode", realm.method(() => input.keyCode), FIXED);
43
+ return key;
44
+ }
45
+ /**
46
+ * `_global.Mouse`: show and hide give 1 where the pointer showed before
47
+ * the call, else 0, as adl gives them (Ruffle gives the opposite).
48
+ */
49
+ export function mouseObject(realm, input, version) {
50
+ const mouse = new avm1.Avm1Object(realm.objectProto);
51
+ avm1.initializeBroadcaster(mouse, realm, version);
52
+ const showing = (shown) => () => {
53
+ const was = input.mouseShown;
54
+ input.mouseShown = shown;
55
+ return was ? 1 : 0;
56
+ };
57
+ mouse.define("show", realm.method(showing(true)), FIXED);
58
+ mouse.define("hide", realm.method(showing(false)), FIXED);
59
+ return mouse;
60
+ }