@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,200 @@
1
+ /**
2
+ * Compression as SWF files and ByteArray use it, synchronously and with no
3
+ * platform API, through @swf2es/native/compress: zlib itself for zlib and raw
4
+ * deflate, the LZMA SDK's encoder for LZMA, and an LZMA decoder after the
5
+ * SDK's specification.
6
+ */
7
+ import { CORRUPT, DICTIONARY, DONE, deflate, FULL, inflate, lzmaDecode, lzmaEncode, TRUNCATED, } from "../native/compress/index.js";
8
+ /** Data a decompressor cannot read: corrupt, truncated, or not what it says. */
9
+ export class CompressedDataError extends Error {
10
+ }
11
+ /**
12
+ * Data whose output does not fit: more than the decompressor's memory, or
13
+ * the page's, can hold. avmplus' ByteArray fails such an uncompress with
14
+ * MemoryError 1000, where it fails corrupt data with IOError 2058.
15
+ */
16
+ export class CompressedDataTooLargeError extends CompressedDataError {
17
+ }
18
+ /** `data` as a zlib stream, as zlib's deflate writes it at `level`, 9 by default, as avmplus' ByteArray. */
19
+ export function zlibCompress(data, level = 9) {
20
+ return deflate(data, level, false);
21
+ }
22
+ /** `data` as a raw deflate stream, with no zlib header or checksum. */
23
+ export function deflateCompress(data) {
24
+ return deflate(data, 9, true);
25
+ }
26
+ /** The most an inflate may write: as much as a wasm32 memory holds. */
27
+ const NO_LIMIT = 2 ** 32 - 1;
28
+ /** A failed decode's status as a CompressedDataError. */
29
+ function failure(result) {
30
+ switch (result.status) {
31
+ case TRUNCATED:
32
+ return new CompressedDataError("truncated");
33
+ case CORRUPT:
34
+ return new CompressedDataError(result.message ?? "corrupt");
35
+ case DICTIONARY:
36
+ return new CompressedDataError("needs a preset dictionary");
37
+ default:
38
+ return new CompressedDataTooLargeError("out of memory");
39
+ }
40
+ }
41
+ /**
42
+ * The bytes of a zlib stream (or, `raw`, of a raw deflate stream), up to its
43
+ * end: anything after is left, as zlib's inflate leaves it. The header is
44
+ * checked here, so that every way it can be wrong reads as avmplus' does.
45
+ */
46
+ export function zlibUncompress(data, raw = false) {
47
+ if (!raw) {
48
+ if (data.length < 2) {
49
+ throw new CompressedDataError("truncated");
50
+ }
51
+ const cmf = data[0];
52
+ const flg = data[1];
53
+ if ((cmf & 0x0f) !== 8 || cmf >> 4 > 7 || ((cmf << 8) | flg) % 31 !== 0) {
54
+ throw new CompressedDataError("incorrect header check");
55
+ }
56
+ if (flg & 0x20) {
57
+ throw new CompressedDataError("needs a preset dictionary");
58
+ }
59
+ }
60
+ const result = inflate(data, raw, NO_LIMIT);
61
+ if (result.status !== DONE) {
62
+ throw failure(result);
63
+ }
64
+ return result.bytes;
65
+ }
66
+ /** The size of an LZMA header: its 5 property bytes and the 8-byte length of what it holds. */
67
+ export const LZMA_HEADER = 13;
68
+ /** `data` as ByteArray's LZMA: the 5 property bytes, its length in 8 bytes, little-endian, and the stream. */
69
+ export function lzmaByteArrayCompress(data) {
70
+ return lzmaEncode(data);
71
+ }
72
+ /**
73
+ * ByteArray's LZMA, as avmplus reads it: the length its header gives must
74
+ * be what the stream holds. A length past 32 bits is not read here; the
75
+ * caller checks it first, as avmplus fails it before trying.
76
+ */
77
+ export function lzmaByteArrayUncompress(data) {
78
+ const length = (data[5] | (data[6] << 8) | (data[7] << 16) | (data[8] << 24)) >>> 0;
79
+ if (length > MAX_LZMA_RATIO * (data.length - LZMA_HEADER) + 4096) {
80
+ throw new CompressedDataError(`${length} bytes in a stream of ${data.length}`);
81
+ }
82
+ const result = lzmaDecode(data, 0, LZMA_HEADER, length);
83
+ if (result.status !== DONE) {
84
+ throw failure(result);
85
+ }
86
+ if (result.bytes.length !== length) {
87
+ throw new CompressedDataError("length mismatch");
88
+ }
89
+ return result.bytes;
90
+ }
91
+ /**
92
+ * More than LZMA can expand a byte to. Its best case, a long run of one
93
+ * byte, is matches of 273 bytes that each cost 14 decisions, each at least
94
+ * the 0.022 bits of LZMA's likeliest probability (2017/2048): 7090:1,
95
+ * which an encoder nears on 32 MB of zeros (6959:1). A header naming more
96
+ * than this of its stream is refused before decoding; one naming less is
97
+ * decoded, and a decoder that would read past the stream's end fails.
98
+ */
99
+ const MAX_LZMA_RATIO = 8192;
100
+ /**
101
+ * The first `length` bytes of a SWF as an uncompressed one, or fewer if it
102
+ * has fewer, decompressing only as far as they need: the header and the
103
+ * first tags, without trusting the header's file length, which a SWF of
104
+ * 30 bytes may give as 4 GB. Whatever cannot be read ends it early.
105
+ */
106
+ export function decompressSwfPrefix(swf, length) {
107
+ const signature = String.fromCharCode(swf[0], swf[1], swf[2]);
108
+ if (swf.length < 8 || signature === "FWS") {
109
+ return swf.subarray(0, length);
110
+ }
111
+ const fileLength = new DataView(swf.buffer, swf.byteOffset, swf.byteLength).getUint32(4, true);
112
+ // No further than the header's length, where decompressSwf stops too.
113
+ const want = Math.max(0, Math.min(length, fileLength) - 8);
114
+ const options = { offset: 8, partial: true };
115
+ let out = new Uint8Array(8);
116
+ // A kilobyte of the body first, as a header and the first tags need, and
117
+ // more only while the input runs out before the output: a large SWF is
118
+ // not copied whole for its first bytes. What decoded before any failure
119
+ // is kept, so a SWF cut short still has its start.
120
+ for (let input = 1024;; input *= 16) {
121
+ const end = Math.min(swf.length, (signature === "ZWS" ? 17 : 8) + input);
122
+ let result = null;
123
+ if (signature === "CWS") {
124
+ result = inflate(swf.subarray(8, end), false, want, options);
125
+ }
126
+ else if (signature === "ZWS" && swf.length >= 17) {
127
+ const size = Math.min(want, Math.max(0, fileLength - 8));
128
+ result = lzmaDecode(swf.subarray(0, end), 12, 17, size, options);
129
+ }
130
+ if (result === null) {
131
+ break;
132
+ }
133
+ out = result.bytes;
134
+ if (result.status !== TRUNCATED || end === swf.length) {
135
+ break;
136
+ }
137
+ }
138
+ out.set(swf.subarray(0, 8), 0);
139
+ out[0] = 0x46; // F
140
+ return out;
141
+ }
142
+ /**
143
+ * A SWF's bytes as an uncompressed one: the header as FWS, then the body,
144
+ * inflated for CWS, and for ZWS decoded from LZMA, whose header SWF writes
145
+ * differently (after the 8 bytes of the SWF header, a 4-byte compressed
146
+ * length and the 5 property bytes, and no 8-byte size).
147
+ */
148
+ export function decompressSwf(swf) {
149
+ const signature = String.fromCharCode(swf[0], swf[1], swf[2]);
150
+ if (signature === "FWS") {
151
+ return swf;
152
+ }
153
+ const fileLength = new DataView(swf.buffer, swf.byteOffset, swf.byteLength).getUint32(4, true);
154
+ if (fileLength < 8 && (signature === "CWS" || signature === "ZWS")) {
155
+ throw new CompressedDataError(`a file length of ${fileLength}, shorter than its header`);
156
+ }
157
+ let result;
158
+ if (signature === "CWS") {
159
+ // A byte past the header's length tells a longer body from one that
160
+ // fits, which then ends with its checksum checked.
161
+ result = inflate(swf.subarray(8), false, fileLength - 8 + 1, { offset: 8 });
162
+ if (result.status === TRUNCATED) {
163
+ // Some SWFs omit the Adler-32 trailer despite holding a complete deflate stream.
164
+ const raw = inflate(swf.subarray(10), true, fileLength - 8 + 1, { offset: 8 });
165
+ if ((raw.status === DONE || raw.status === FULL) && 10 + raw.used + 4 > swf.length) {
166
+ result = raw;
167
+ }
168
+ }
169
+ // A longer body, as a packer may leave bytes after the End tag inside
170
+ // the stream, is read as far as the header's length and no further, as
171
+ // Flash Player plays it, and as a ZWS's decoding stops.
172
+ if (result.status === FULL) {
173
+ result = { ...result, status: DONE, bytes: result.bytes.subarray(0, fileLength) };
174
+ }
175
+ }
176
+ else if (signature === "ZWS") {
177
+ if (swf.length < 17) {
178
+ throw new CompressedDataError("truncated");
179
+ }
180
+ // A length no stream that short can hold is refused before decoding;
181
+ // within it, the decoder stops where the stream does.
182
+ if (fileLength - 8 > MAX_LZMA_RATIO * (swf.length - 17) + 4096) {
183
+ throw new CompressedDataError(`a body of ${fileLength - 8} bytes in ${swf.length} of SWF`);
184
+ }
185
+ result = lzmaDecode(swf, 12, 17, fileLength - 8, { offset: 8 });
186
+ }
187
+ else {
188
+ throw new TypeError(`Not a SWF file (signature ${JSON.stringify(signature)})`);
189
+ }
190
+ if (result.status !== DONE) {
191
+ throw failure(result);
192
+ }
193
+ const file = result.bytes;
194
+ if (file.length !== fileLength) {
195
+ throw new CompressedDataError(`body of ${file.length - 8} bytes where the header says ${fileLength - 8}`);
196
+ }
197
+ file.set(swf.subarray(0, 8), 0);
198
+ file[0] = 0x46; // F
199
+ return file;
200
+ }
@@ -0,0 +1,305 @@
1
+ import { readColorTransform, readMatrix } from "./shape.js";
2
+ import { readTags, SwfReader } from "./swf.js";
3
+ import { DoABC, PlaceObject, PlaceObject3, PlaceObject4, RemoveObject, RemoveObject2, } from "./tags.js";
4
+ export function readString(r) {
5
+ const start = r.pos;
6
+ while (r.pos < r.end && r.bytes[r.pos] !== 0) {
7
+ r.pos++;
8
+ }
9
+ const s = utf8(r.bytes.subarray(start, r.pos));
10
+ r.pos++;
11
+ return s;
12
+ }
13
+ /**
14
+ * UTF-8 as SWF 6 and later write strings, read as avmplus' Utf8ToUtf16 does
15
+ * (fromUtf8 in the runtime): a malformed or overlong sequence is no
16
+ * sequence, and its first byte stands for itself.
17
+ */
18
+ export function utf8(bytes) {
19
+ let s = "";
20
+ const length = bytes.length;
21
+ for (let i = 0; i < length;) {
22
+ const b = bytes[i++];
23
+ // ASCII, and a continuation byte on its own, stand for themselves.
24
+ if (b < 0xc0) {
25
+ s += String.fromCharCode(b);
26
+ continue;
27
+ }
28
+ const n = b < 0xe0 ? 1 : b < 0xf0 ? 2 : 3;
29
+ const minimum = n === 1 ? 0x80 : n === 2 ? 0x800 : 0x10000;
30
+ let c = b & (n === 1 ? 0x1f : n === 2 ? 0x0f : 0x07);
31
+ let ok = i + n <= length;
32
+ for (let k = 0; ok && k < n; k++) {
33
+ const next = bytes[i + k];
34
+ ok = (next & 0xc0) === 0x80;
35
+ c = (c << 6) | (next & 0x3f);
36
+ }
37
+ if (!ok || c < minimum) {
38
+ s += String.fromCharCode(b);
39
+ continue;
40
+ }
41
+ i += n;
42
+ if (n === 3) {
43
+ // A surrogate pair however large the value, as avmplus makes one;
44
+ // fromCodePoint would refuse one past U+10FFFF.
45
+ const u = c - 0x10000;
46
+ s += String.fromCharCode(0xd800 + ((u >> 10) & 0x3ff), 0xdc00 + (u & 0x3ff));
47
+ }
48
+ else {
49
+ s += String.fromCharCode(c);
50
+ }
51
+ }
52
+ return s;
53
+ }
54
+ /**
55
+ * A PlaceObject 1 to 4 tag's body; given the SWF's
56
+ * action list, with the indices of its clip actions.
57
+ */
58
+ export function readPlace(bytes, tag, actions) {
59
+ const { place } = parsePlace(bytes, tag);
60
+ place.actions = actions?.byTag.get(tag.offset) ?? null;
61
+ place.corrupt = actions?.corruptEvents.get(tag.offset) ?? 0;
62
+ return place;
63
+ }
64
+ /** Where a PlaceObject 2 to 4's clip actions start, -1 without them, and its depth. */
65
+ export function clipActionsOffset(bytes, tag) {
66
+ const { place, clipActions } = parsePlace(bytes, tag);
67
+ return { depth: place.depth, offset: clipActions };
68
+ }
69
+ function parsePlace(bytes, tag) {
70
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
71
+ const place = {
72
+ depth: 0,
73
+ move: false,
74
+ character: null,
75
+ matrix: null,
76
+ colorTransform: null,
77
+ ratio: null,
78
+ name: null,
79
+ clipDepth: null,
80
+ className: null,
81
+ hasImage: false,
82
+ blendMode: null,
83
+ cacheAsBitmap: null,
84
+ visible: null,
85
+ opaqueBackground: null,
86
+ filters: null,
87
+ metaData: null,
88
+ actions: null,
89
+ corrupt: 0,
90
+ };
91
+ if (tag.code === PlaceObject) {
92
+ place.character = r.u16();
93
+ place.depth = r.u16();
94
+ place.matrix = readMatrix(r);
95
+ if (r.pos < r.end) {
96
+ place.colorTransform = readColorTransform(r, false);
97
+ }
98
+ return { place, clipActions: -1 };
99
+ }
100
+ const flags = r.u8();
101
+ const flags2 = tag.code === PlaceObject3 || tag.code === PlaceObject4 ? r.u8() : 0;
102
+ place.depth = r.u16();
103
+ place.move = (flags & 0x01) !== 0;
104
+ // SWF19 has a class name follow HasImage with a character; Flash reads
105
+ // one with HasImage only without a character, as Ruffle's reader notes.
106
+ const hasImage = (flags2 & 0x10) !== 0;
107
+ place.hasImage = hasImage;
108
+ if (flags2 & 0x08 || (hasImage && !(flags & 0x02))) {
109
+ place.className = readString(r);
110
+ }
111
+ if (flags & 0x02) {
112
+ place.character = r.u16();
113
+ }
114
+ if (flags & 0x04) {
115
+ place.matrix = readMatrix(r);
116
+ }
117
+ if (flags & 0x08) {
118
+ place.colorTransform = readColorTransform(r, true);
119
+ }
120
+ if (flags & 0x10) {
121
+ place.ratio = r.u16();
122
+ }
123
+ if (flags & 0x20) {
124
+ place.name = readString(r);
125
+ }
126
+ if (flags & 0x40) {
127
+ place.clipDepth = r.u16();
128
+ }
129
+ if (flags2 & 0x01) {
130
+ place.filters = readFilterBytes(r);
131
+ }
132
+ if (flags2 & 0x02) {
133
+ place.blendMode = r.u8();
134
+ }
135
+ if (flags2 & 0x04) {
136
+ place.cacheAsBitmap = r.u8() !== 0;
137
+ }
138
+ if (flags2 & 0x20) {
139
+ place.visible = r.u8() !== 0;
140
+ }
141
+ // The background follows its own flag, not HasVisible as SWF19 lays it out.
142
+ if (flags2 & 0x40) {
143
+ const a = r.u8();
144
+ const rgb = (r.u8() << 16) | (r.u8() << 8) | r.u8();
145
+ place.opaqueBackground = ((a << 24) | rgb) >>> 0;
146
+ }
147
+ const clipActions = flags & 0x80 && r.pos < r.end ? r.pos : -1;
148
+ if (tag.code === PlaceObject4) {
149
+ if (clipActions >= 0) {
150
+ // PlaceObject4 postdates SWF 6: its clip event flags are always 32 bits.
151
+ r.u16();
152
+ r.u32();
153
+ while (r.pos < r.end) {
154
+ const events = r.u32();
155
+ if (events === 0) {
156
+ break;
157
+ }
158
+ const length = r.u32();
159
+ // Flash still consumes keyPress's key code when its record says length 0.
160
+ r.pos += events & (1 << 17) ? Math.max(1, length) : length;
161
+ }
162
+ }
163
+ if (r.pos < r.end) {
164
+ place.metaData = bytes.subarray(r.pos, r.end);
165
+ }
166
+ }
167
+ return { place, clipActions };
168
+ }
169
+ /** Filter sizes by id, as FILTER's variants lay them out (6 and 7 have variable length). */
170
+ export function readFilterBytes(r) {
171
+ const start = r.pos;
172
+ const count = r.u8();
173
+ for (let i = 0; i < count && !r.overrun; i++) {
174
+ const id = r.u8();
175
+ switch (id) {
176
+ case 0:
177
+ r.pos += 23; // DropShadow
178
+ break;
179
+ case 1:
180
+ r.pos += 9; // Blur
181
+ break;
182
+ case 2:
183
+ r.pos += 15; // Glow
184
+ break;
185
+ case 3:
186
+ r.pos += 27; // Bevel
187
+ break;
188
+ case 4:
189
+ case 7: {
190
+ const stops = r.u8(); // GradientGlow, GradientBevel
191
+ r.pos += stops * 5 + 19;
192
+ break;
193
+ }
194
+ case 5: {
195
+ const x = r.u8(); // Convolution
196
+ const y = r.u8();
197
+ r.pos += 8 + x * y * 4 + 5;
198
+ break;
199
+ }
200
+ case 6:
201
+ r.pos += 80; // ColorMatrix
202
+ break;
203
+ }
204
+ }
205
+ return r.bytes.subarray(start, Math.min(r.pos, r.end));
206
+ }
207
+ /** A RemoveObject's or RemoveObject2's depth. */
208
+ export function readRemove(bytes, tag) {
209
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
210
+ if (tag.code === RemoveObject) {
211
+ r.u16();
212
+ }
213
+ else if (tag.code !== RemoveObject2) {
214
+ throw new Error(`tag ${tag.code} is not a remove`);
215
+ }
216
+ return r.u16();
217
+ }
218
+ export function readFrameLabel(bytes, tag) {
219
+ return readString(new SwfReader(bytes, tag.offset, tag.offset + tag.length));
220
+ }
221
+ /** An EncodedU32: seven bits a byte, low first, while the top bit is set. */
222
+ function encodedU32(r) {
223
+ let value = 0;
224
+ for (let shift = 0; shift < 35; shift += 7) {
225
+ const b = r.u8();
226
+ value += (b & 0x7f) * 2 ** shift;
227
+ if (!(b & 0x80)) {
228
+ break;
229
+ }
230
+ }
231
+ return value >>> 0;
232
+ }
233
+ /** DefineSceneAndFrameLabelData; a count past the tag's end stops where its bytes do. */
234
+ export function readSceneData(bytes, tag) {
235
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
236
+ const list = () => {
237
+ const out = [];
238
+ const count = encodedU32(r);
239
+ for (let i = 0; i < count && !r.overrun; i++) {
240
+ const frame = encodedU32(r);
241
+ const name = readString(r);
242
+ if (!r.overrun) {
243
+ out.push({ frame, name });
244
+ }
245
+ }
246
+ return out;
247
+ };
248
+ const scenes = list();
249
+ return { scenes, labels: list() };
250
+ }
251
+ /** A DefineSprite's id, frame count and its own tags. */
252
+ export function readSprite(bytes, tag) {
253
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
254
+ const id = r.u16();
255
+ const frameCount = r.u16();
256
+ return { id, frameCount, tags: readTags(bytes, r.pos, tag.offset + tag.length).tags };
257
+ }
258
+ /** DefineScalingGrid: the sprite or button it is for, and its grid, in twips, in the character's space. */
259
+ export function readScalingGrid(bytes, tag) {
260
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
261
+ const id = r.u16();
262
+ return { id, grid: r.rect() };
263
+ }
264
+ /** DefineBinaryData: a character's bytes, after its id and 4 reserved bytes, which a ByteArray subclass SymbolClass binds to it holds. */
265
+ export function readBinaryData(bytes, tag) {
266
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
267
+ const id = r.u16();
268
+ r.u32();
269
+ return {
270
+ id,
271
+ data: bytes.subarray(Math.min(r.pos, tag.offset + tag.length), tag.offset + tag.length),
272
+ };
273
+ }
274
+ /** SymbolClass's links, including multiple classes of one character; id 0 is the document class. */
275
+ export function readSymbolClass(bytes, tag) {
276
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
277
+ const count = r.u16();
278
+ const symbols = [];
279
+ for (let i = 0; i < count && !r.overrun; i++) {
280
+ const id = r.u16();
281
+ symbols.push([id, readString(r)]);
282
+ }
283
+ return symbols;
284
+ }
285
+ /** A DoABC's or DoABC2's ABC bytes, its name, and whether it is to be run lazily (kDoAbcLazyInitializeFlag). */
286
+ export function readDoAbc(bytes, tag) {
287
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
288
+ if (tag.code === DoABC) {
289
+ return { name: "", lazy: false, abc: bytes.subarray(tag.offset, tag.offset + tag.length) };
290
+ }
291
+ const flags = r.u32();
292
+ const name = readString(r);
293
+ return { name, lazy: (flags & 1) !== 0, abc: bytes.subarray(r.pos, tag.offset + tag.length) };
294
+ }
295
+ /** ExportAssets: the characters it names, each id with its name, in tag order. */
296
+ export function readExports(bytes, tag) {
297
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
298
+ const exports = [];
299
+ const n = r.end - r.pos >= 2 ? r.u16() : 0;
300
+ for (let i = 0; i < n && r.end - r.pos >= 2; i++) {
301
+ const id = r.u16();
302
+ exports.push({ id, name: readString(r) });
303
+ }
304
+ return exports;
305
+ }
@@ -0,0 +1,136 @@
1
+ // The filters a PlaceObject3 gives a display object, as the SWF stores
2
+ // them: FILTERLIST's records, with their fixed-point and float fields.
3
+ import { SwfReader } from "./swf.js";
4
+ function color(r) {
5
+ const red = r.u8();
6
+ const green = r.u8();
7
+ const blue = r.u8();
8
+ return { rgb: (red << 16) | (green << 8) | blue, alpha: r.u8() };
9
+ }
10
+ const fixed = (r) => (r.u32() | 0) / 65536;
11
+ const fixed8 = (r) => ((r.u16() << 16) >> 16) / 256;
12
+ function float(r) {
13
+ const v = new DataView(new ArrayBuffer(4));
14
+ v.setUint32(0, r.u32());
15
+ return v.getFloat32(0);
16
+ }
17
+ /** A FILTERLIST's filters, as far as the bytes go. */
18
+ export function readFilters(bytes) {
19
+ const r = new SwfReader(bytes, 0, bytes.length);
20
+ const count = r.u8();
21
+ const filters = [];
22
+ for (let i = 0; i < count && !r.overrun; i++) {
23
+ const id = r.u8();
24
+ let filter = null;
25
+ switch (id) {
26
+ case 0: {
27
+ const c = color(r);
28
+ const [blurX, blurY, angle, distance] = [fixed(r), fixed(r), fixed(r), fixed(r)];
29
+ const strength = fixed8(r);
30
+ const flags = r.u8();
31
+ filter = {
32
+ type: "dropShadow",
33
+ color: c,
34
+ blurX,
35
+ blurY,
36
+ angle,
37
+ distance,
38
+ strength,
39
+ inner: (flags & 0x80) !== 0,
40
+ knockout: (flags & 0x40) !== 0,
41
+ composite: (flags & 0x20) !== 0,
42
+ passes: flags & 0x1f,
43
+ };
44
+ break;
45
+ }
46
+ case 1: {
47
+ const [blurX, blurY] = [fixed(r), fixed(r)];
48
+ filter = { type: "blur", blurX, blurY, passes: r.u8() >> 3 };
49
+ break;
50
+ }
51
+ case 2: {
52
+ const c = color(r);
53
+ const [blurX, blurY] = [fixed(r), fixed(r)];
54
+ const strength = fixed8(r);
55
+ const flags = r.u8();
56
+ filter = {
57
+ type: "glow",
58
+ color: c,
59
+ blurX,
60
+ blurY,
61
+ strength,
62
+ inner: (flags & 0x80) !== 0,
63
+ knockout: (flags & 0x40) !== 0,
64
+ composite: (flags & 0x20) !== 0,
65
+ passes: flags & 0x1f,
66
+ };
67
+ break;
68
+ }
69
+ case 3:
70
+ case 4:
71
+ case 7: {
72
+ let colors;
73
+ let ratios;
74
+ if (id === 3) {
75
+ // The highlight, then the shadow: the SWF spec has them the other way, adl this.
76
+ const highlight = color(r);
77
+ colors = [color(r), highlight];
78
+ ratios = [];
79
+ }
80
+ else {
81
+ const n = r.u8();
82
+ colors = Array.from({ length: n }, () => color(r));
83
+ ratios = Array.from({ length: n }, () => r.u8());
84
+ }
85
+ const [blurX, blurY, angle, distance] = [fixed(r), fixed(r), fixed(r), fixed(r)];
86
+ const strength = fixed8(r);
87
+ const flags = r.u8();
88
+ filter = {
89
+ type: id === 3 ? "bevel" : id === 4 ? "gradientGlow" : "gradientBevel",
90
+ colors,
91
+ ratios,
92
+ blurX,
93
+ blurY,
94
+ angle,
95
+ distance,
96
+ strength,
97
+ inner: (flags & 0x80) !== 0,
98
+ knockout: (flags & 0x40) !== 0,
99
+ composite: (flags & 0x20) !== 0,
100
+ onTop: (flags & 0x10) !== 0,
101
+ passes: flags & 0x0f,
102
+ };
103
+ break;
104
+ }
105
+ case 5: {
106
+ const matrixX = r.u8();
107
+ const matrixY = r.u8();
108
+ const divisor = float(r);
109
+ const bias = float(r);
110
+ const matrix = Array.from({ length: matrixX * matrixY }, () => float(r));
111
+ const c = color(r);
112
+ const flags = r.u8();
113
+ filter = {
114
+ type: "convolution",
115
+ matrixX,
116
+ matrixY,
117
+ divisor,
118
+ bias,
119
+ matrix,
120
+ color: c,
121
+ clamp: (flags & 0x02) !== 0,
122
+ preserveAlpha: (flags & 0x01) !== 0,
123
+ };
124
+ break;
125
+ }
126
+ case 6:
127
+ filter = { type: "colorMatrix", matrix: Array.from({ length: 20 }, () => float(r)) };
128
+ break;
129
+ }
130
+ if (!filter || r.overrun) {
131
+ break;
132
+ }
133
+ filters.push(filter);
134
+ }
135
+ return filters;
136
+ }