@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,144 @@
1
+ // How a module's source becomes its factory, under a script name of its
2
+ // own that its code's stack frames give, by which Runtime.codeDomain and
3
+ // Code.codeOrigin tell whose code runs.
4
+ import { avm2 } from "../../runtime/index.js";
5
+ const EXPORT = "export default ";
6
+ /**
7
+ * A module's factory, its source evaluated by a strict Function under the
8
+ * sourceURL `script`. Not imported: a document keeps every module it
9
+ * imports for as long as it lives, so the code of a SWF long let go would
10
+ * never be collected; a Function's goes once nothing refers to its
11
+ * functions. A module is one exported function and nothing else, so it
12
+ * runs the same returned from a strict Function, the names its code uses
13
+ * its own function's variables (see Lazy compilation in
14
+ * docs/architecture/compiler.md); its lines in a stack are its file's two further
15
+ * on, after Function's header.
16
+ */
17
+ export function evaluateFunction(module, script) {
18
+ return new Function(`"use strict"; return ${body(module)}//# sourceURL=${script}\n`)();
19
+ }
20
+ /**
21
+ * A module's factory and the script its frames name: evaluated by a
22
+ * Function under the sourceURL `script` where the engine's frames name a
23
+ * Function's code by it, as V8's and SpiderMonkey's do; else, in a
24
+ * document, as a classic script from a Blob URL of its own, which the
25
+ * frames name. JavaScriptCore's frames name no script for a Function's
26
+ * code, whatever its sourceURL, so that without a script, as in a Worker,
27
+ * which has no document, or once one is refused, every SWF's code is
28
+ * taken for the host's: its domain the main SWF's, for currentDomain, a
29
+ * load's default domain and the rest. A classic script's code, unlike an
30
+ * imported module's, goes with the SWF, as a Function's does. Only a
31
+ * script waits, for its load.
32
+ */
33
+ export function evaluate(module, script) {
34
+ if (framesNameFunctions() || scripts === "refused" || typeof document === "undefined") {
35
+ return { factory: evaluateFunction(module, script), script };
36
+ }
37
+ // Until one has run, one script at a time: a policy that refuses them
38
+ // then reports one refusal, not one for each module of the first SWF.
39
+ if (trial) {
40
+ return trial.then(() => evaluate(module, script));
41
+ }
42
+ const evaluated = viaScript(module, script);
43
+ if (scripts === "untried") {
44
+ trial = evaluated.then(() => {
45
+ trial = null;
46
+ }, () => {
47
+ trial = null;
48
+ });
49
+ }
50
+ return evaluated;
51
+ }
52
+ /**
53
+ * The module as a script, or, if the script did not run, by a Function:
54
+ * its error, if it has one, is the source's, which a script would give
55
+ * only to the page's onerror, and the scripts are left to be tried again;
56
+ * if the Function evaluates, scripts are what failed (refused by a
57
+ * Content-Security-Policy without blob: in script-src or by Trusted Types,
58
+ * never loaded, or loaded but not run, as by a DOM that runs none), and
59
+ * every module after is evaluated by a Function.
60
+ */
61
+ async function viaScript(module, script) {
62
+ const ran = await evaluateScript(module);
63
+ if (ran) {
64
+ scripts = "allowed";
65
+ return ran;
66
+ }
67
+ const factory = evaluateFunction(module, script);
68
+ scripts = "refused";
69
+ return { factory, script };
70
+ }
71
+ function body(module) {
72
+ if (!module.startsWith(EXPORT)) {
73
+ throw new Error("swf2es: a module that is not one exported function");
74
+ }
75
+ return module.slice(EXPORT.length);
76
+ }
77
+ const PROBE = "swf2es-probe.js";
78
+ let functionsNamed;
79
+ /**
80
+ * Whether the engine's frames name a Function's code by its sourceURL,
81
+ * asked of a Function once. One that cannot be made (a policy without
82
+ * 'unsafe-eval') leaves the modules to be evaluated by Function, refused
83
+ * as before, only imported ones loading.
84
+ */
85
+ function framesNameFunctions() {
86
+ if (functionsNamed === undefined) {
87
+ try {
88
+ const stack = new Function(`"use strict"; return new Error().stack\n//# sourceURL=${PROBE}\n`)();
89
+ functionsNamed = avm2.frameScripts(stack).includes(PROBE);
90
+ }
91
+ catch {
92
+ functionsNamed = true;
93
+ }
94
+ }
95
+ return functionsNamed;
96
+ }
97
+ /** Whether modules' scripts have run, or failed to where a Function did not. */
98
+ let scripts = "untried";
99
+ /** The first script while it settles, which the others wait for. */
100
+ let trial = null;
101
+ /** The property of its script element a module's script leaves its factory on. */
102
+ const FACTORY = "swf2esFactory";
103
+ /** How long a module's script may take to load and run, from a Blob URL. */
104
+ const SCRIPT_TIMEOUT = 5000;
105
+ /**
106
+ * A module's factory, its source evaluated as a classic script from a Blob
107
+ * URL, and that URL; null if the script did not run: refused, as setting
108
+ * its src may be (Trusted Types), failed, or not loaded in time, or loaded
109
+ * without a factory, as a source that does not parse is. The element and
110
+ * the URL are let go at once: the frames still name the URL, and nothing
111
+ * else keeps the code but its functions.
112
+ */
113
+ async function evaluateScript(module) {
114
+ const source = `"use strict";document.currentScript.${FACTORY}=${body(module)}\n`;
115
+ const url = URL.createObjectURL(new Blob([source], { type: "text/javascript" }));
116
+ const script = document.createElement("script");
117
+ let loaded;
118
+ try {
119
+ loaded = await new Promise((done) => {
120
+ const timer = setTimeout(() => done(false), SCRIPT_TIMEOUT);
121
+ const settle = (ok) => {
122
+ clearTimeout(timer);
123
+ done(ok);
124
+ };
125
+ script.onload = () => settle(true);
126
+ script.onerror = () => settle(false);
127
+ try {
128
+ script.src = url;
129
+ (document.head ?? document.documentElement).append(script);
130
+ }
131
+ catch {
132
+ settle(false);
133
+ }
134
+ });
135
+ }
136
+ finally {
137
+ script.remove();
138
+ URL.revokeObjectURL(url);
139
+ }
140
+ const factory = script[FACTORY];
141
+ return loaded && typeof factory === "function"
142
+ ? { factory: factory, script: url }
143
+ : null;
144
+ }
@@ -0,0 +1,172 @@
1
+ // Event dispatch, as Flash's: along a display object's parent chain,
2
+ // capture, target, bubble, to the listeners EventDispatcher keeps on each
3
+ // AS3 object; or to one object's own, as a broadcast reaches it. The
4
+ // player's input and frame events and playerglobal's dispatchEvent all
5
+ // go through it.
6
+ import { avm2 } from "../../runtime/index.js";
7
+ export const CAPTURING_PHASE = 1;
8
+ export const AT_TARGET = 2;
9
+ export const BUBBLING_PHASE = 3;
10
+ /** The fields of `s`'s events, found once playerglobal is loaded. */
11
+ export function eventFields(s) {
12
+ if (s.eventFields) {
13
+ return s.eventFields;
14
+ }
15
+ const cls = s.rt.classNamed("flash.events::Event");
16
+ const field = (as3, native) => avm2.instanceVarField(cls, as3) ?? native;
17
+ s.eventFields = {
18
+ type: field("_type", "$type"),
19
+ bubbles: field("_bubbles", "$bubbles"),
20
+ target: field("_target", "$target"),
21
+ currentTarget: field("_currentTarget", "$currentTarget"),
22
+ phase: field("_eventPhase", "$phase"),
23
+ stopped: field("_stopped", "$stopped"),
24
+ prevented: field("_prevented", "$prevented"),
25
+ };
26
+ return s.eventFields;
27
+ }
28
+ /** The display object `o` is the face of, if it is one. */
29
+ export const displayOf = (o) => o.$display ?? null;
30
+ // A listener's error is reported as uncaught, and the listeners after it
31
+ // still run: it never reaches the dispatcher, a script's dispatchEvent
32
+ // included, which returns as if none had thrown (as in Flash and Ruffle).
33
+ // `current` is `o` but where `o` stands in for another dispatcher, which
34
+ // its listeners see as the current target, as in Flash.
35
+ function invoke(s, f, o, event, phase, current = o) {
36
+ const list = o.$listeners?.get(event[f.type]);
37
+ if (!list) {
38
+ return;
39
+ }
40
+ event[f.currentTarget] = current;
41
+ event[f.phase] = phase;
42
+ // A copy: a listener may add or remove listeners. Not of one alone, read before it is called,
43
+ // which nothing it does could add to or take from what this dispatch calls: each frame's
44
+ // events reach thousands of objects so.
45
+ const listeners = list.length === 1 ? list : [...list];
46
+ const count = listeners.length;
47
+ for (let i = 0; i < count; i++) {
48
+ const l = listeners[i];
49
+ if (l.capture !== (phase === CAPTURING_PHASE)) {
50
+ continue;
51
+ }
52
+ try {
53
+ s.rt.call(l.fn, null, event);
54
+ }
55
+ catch (error) {
56
+ s.reportUncaught(error);
57
+ }
58
+ if (event[f.stopped] === 2) {
59
+ return;
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Whether `target` or an object above it listens for `type`, in any phase.
65
+ * Where none does, dispatching an event of the type runs no script, so
66
+ * none could tell whether it was made: the player's own events, one for
67
+ * each object put on the list or taken off, are made only where heard.
68
+ */
69
+ export function heard(target, type) {
70
+ if (target.$listeners?.get(type)?.length) {
71
+ return true;
72
+ }
73
+ for (let d = displayOf(target)?.parent; d; d = d.parent) {
74
+ if (d.object?.$listeners?.get(type)?.length) {
75
+ return true;
76
+ }
77
+ }
78
+ return false;
79
+ }
80
+ /** Dispatch `event` to `target`'s own listeners only, as a broadcast reaches each object: no capture, no bubble. */
81
+ export function dispatchTo(s, target, event) {
82
+ const f = eventFields(s);
83
+ event[f.target] = target.$target ?? target;
84
+ invoke(s, f, target, event, AT_TARGET);
85
+ }
86
+ /**
87
+ * Give `event` to one of `target`'s listeners, `fn`, at the target: as AIR
88
+ * gives each InvokeEvent listener the application's launch once it listens.
89
+ */
90
+ export function dispatchToListener(s, target, event, fn) {
91
+ const f = eventFields(s);
92
+ event[f.target] = target.$target ?? target;
93
+ event[f.currentTarget] = target;
94
+ event[f.phase] = AT_TARGET;
95
+ try {
96
+ s.rt.call(fn, null, event);
97
+ }
98
+ catch (error) {
99
+ s.reportUncaught(error);
100
+ }
101
+ }
102
+ /**
103
+ * Dispatch `event` from `target`, as EventDispatcher.dispatchEvent does; whether no listener
104
+ * prevented its default. A dispatcher that stands in for another, an
105
+ * EventDispatcher made with a target, dispatches as that one, along its
106
+ * parent chain, with its own listeners at the target.
107
+ */
108
+ export function dispatchEvent(s, target, event) {
109
+ const f = eventFields(s);
110
+ const owner = target.$target ?? target;
111
+ event[f.target] = owner;
112
+ // The ancestors of a display object, nearest first.
113
+ const ancestors = [];
114
+ for (let d = displayOf(owner)?.parent; d; d = d.parent) {
115
+ if (d.object) {
116
+ ancestors.push(d.object);
117
+ }
118
+ }
119
+ for (let i = ancestors.length - 1; i >= 0 && event[f.stopped] === 0; i--) {
120
+ invoke(s, f, ancestors[i], event, CAPTURING_PHASE);
121
+ }
122
+ if (event[f.stopped] === 0) {
123
+ invoke(s, f, target, event, AT_TARGET, owner);
124
+ }
125
+ if (event[f.bubbles]) {
126
+ for (const a of ancestors) {
127
+ if (event[f.stopped] !== 0) {
128
+ break;
129
+ }
130
+ invoke(s, f, a, event, BUBBLING_PHASE);
131
+ }
132
+ }
133
+ return !event[f.prevented];
134
+ }
135
+ /**
136
+ * Broadcast targets held weakly, in the order first added: a listener for
137
+ * ACTIVATE or DEACTIVATE keeps no object alive, nor its timeline playing.
138
+ * One collected drops out as it goes.
139
+ */
140
+ export class WeakTargets {
141
+ refs = new Set();
142
+ byObject = new WeakMap();
143
+ collected = new FinalizationRegistry((ref) => this.refs.delete(ref));
144
+ add(o) {
145
+ if (this.byObject.has(o)) {
146
+ return;
147
+ }
148
+ const ref = new WeakRef(o);
149
+ this.byObject.set(o, ref);
150
+ this.refs.add(ref);
151
+ this.collected.register(o, ref, ref);
152
+ }
153
+ delete(o) {
154
+ const ref = this.byObject.get(o);
155
+ if (ref) {
156
+ this.byObject.delete(o);
157
+ this.refs.delete(ref);
158
+ this.collected.unregister(ref);
159
+ }
160
+ }
161
+ /** Those still alive, in order, found first: a listener may add or remove others. */
162
+ live() {
163
+ const live = [];
164
+ for (const ref of this.refs) {
165
+ const o = ref.deref();
166
+ if (o) {
167
+ live.push(o);
168
+ }
169
+ }
170
+ return live;
171
+ }
172
+ }
@@ -0,0 +1,182 @@
1
+ /** The primordial's journal, kept while it may hand its modules to workers. */
2
+ export class ModuleRecorder {
3
+ ops = [];
4
+ modules = new Map();
5
+ /** Where in the journal each ABC's module was last compiled, by its index. */
6
+ places = new Map();
7
+ epoch = null;
8
+ frozen = null;
9
+ /** Whether calls are still journaled. */
10
+ open = true;
11
+ /** A call on the compiler of `epoch`; another epoch's, as by another player given it, ends the journal. */
12
+ op(text, epoch) {
13
+ if (!this.open) {
14
+ return;
15
+ }
16
+ this.epoch ??= epoch;
17
+ if (epoch !== this.epoch) {
18
+ this.open = false;
19
+ return;
20
+ }
21
+ this.ops.push(text);
22
+ }
23
+ /** ABC `index` compiled, read or imported: `module`, with its `log`, null where it has none to replay. */
24
+ compiled(index, epoch, module, log) {
25
+ this.op(`compile ${index}`, epoch);
26
+ if (!this.open || log === null) {
27
+ return;
28
+ }
29
+ this.places.set(index, this.ops.length - 1);
30
+ const text = module.text === undefined || typeof Blob !== "function"
31
+ ? module.text
32
+ : new Blob([module.text], { type: "text/javascript" });
33
+ this.modules.set(this.ops.length - 1, {
34
+ ...(text === undefined ? {} : { module: text }),
35
+ ...(module.url === undefined ? {} : { url: module.url }),
36
+ log,
37
+ });
38
+ }
39
+ /** Stop journaling, keeping what was: the ABCs added so far are `hashes`. */
40
+ freeze(hashes) {
41
+ if (this.frozen) {
42
+ return;
43
+ }
44
+ this.open = false;
45
+ this.frozen = { ops: this.ops, hashes: hashes.slice(), modules: [...this.modules] };
46
+ }
47
+ /** Let go of ABC `index`'s module, which did not load: a worker compiles it. */
48
+ forget(index) {
49
+ const place = this.places.get(index);
50
+ if (place === undefined) {
51
+ return;
52
+ }
53
+ this.modules.delete(place);
54
+ if (this.frozen) {
55
+ this.frozen.modules = this.frozen.modules.filter(([at]) => at !== place);
56
+ }
57
+ }
58
+ /** Stop journaling and let the modules go: no worker will be handed them. */
59
+ drop() {
60
+ this.open = false;
61
+ this.ops.length = 0;
62
+ this.modules.clear();
63
+ this.places.clear();
64
+ this.frozen = { ops: [], hashes: [], modules: [] };
65
+ }
66
+ /** What a worker is handed: null if nothing. */
67
+ handed(hashes) {
68
+ const handed = this.frozen ?? { ops: this.ops.slice(), hashes, modules: [...this.modules] };
69
+ return handed.modules.length ? handed : null;
70
+ }
71
+ }
72
+ /** A worker's side: its journal checked against the primordial's, and the logs of the modules it took, until replayed. */
73
+ export class ModuleHandover {
74
+ handed;
75
+ modules;
76
+ at = 0;
77
+ matching = true;
78
+ /** How many of the worker's ABCs are known to be the primordial's. */
79
+ same = 0;
80
+ pending = [];
81
+ /** A replay that failed: the domain is as no compile left it, and the compiler is not used again. */
82
+ failed = null;
83
+ constructor(handed) {
84
+ this.handed = handed;
85
+ this.modules = new Map(handed.modules);
86
+ }
87
+ /** A call on the worker's compiler, as the primordial journals one. */
88
+ op(text) {
89
+ if (this.matching) {
90
+ this.matching = this.handed.ops[this.at] === text;
91
+ this.at++;
92
+ }
93
+ }
94
+ /** A call the journal does not follow: nothing more is taken. */
95
+ stop() {
96
+ this.matching = false;
97
+ }
98
+ /**
99
+ * The primordial's module for ABC `index`, to load in place of compiling
100
+ * it, if its compile comes next in the primordial's journal and every
101
+ * ABC so far, `hashes`, is the primordial's; the compile is journaled
102
+ * then, and its log kept for replay. Null if not: the caller compiles.
103
+ */
104
+ take(index, hashes) {
105
+ const module = this.matching ? this.modules.get(this.at) : undefined;
106
+ if (module === undefined ||
107
+ this.handed.ops[this.at] !== `compile ${index}` ||
108
+ !this.sameAbcs(hashes)) {
109
+ return null;
110
+ }
111
+ this.modules.delete(this.at);
112
+ this.at++;
113
+ this.pending.push({ index, log: module.log });
114
+ return module;
115
+ }
116
+ sameAbcs(hashes) {
117
+ if (hashes.length > this.handed.hashes.length) {
118
+ return false;
119
+ }
120
+ while (this.same < hashes.length && hashes[this.same] === this.handed.hashes[this.same]) {
121
+ this.same++;
122
+ }
123
+ return this.same === hashes.length;
124
+ }
125
+ /**
126
+ * `codegen`, which before any call replays the logs of the modules taken
127
+ * so far, so that the domain is then as their compiles would have left it.
128
+ */
129
+ guard(codegen) {
130
+ const wrapped = new Map();
131
+ return new Proxy(codegen, {
132
+ get: (target, key) => {
133
+ const value = Reflect.get(target, key);
134
+ if (typeof value !== "function") {
135
+ return value;
136
+ }
137
+ let f = wrapped.get(key);
138
+ if (f === undefined) {
139
+ f = (...args) => {
140
+ this.flush(target);
141
+ return value.apply(target, args);
142
+ };
143
+ wrapped.set(key, f);
144
+ }
145
+ return f;
146
+ },
147
+ });
148
+ }
149
+ /** Replay the logs of the modules taken, in order; once one fails, every call fails. */
150
+ flush(codegen) {
151
+ if (this.failed) {
152
+ throw this.failed;
153
+ }
154
+ while (this.pending.length > 0) {
155
+ const { index, log } = this.pending[0];
156
+ if (!codegen.replay(log, index)) {
157
+ this.failed = new Error("swf2es: a module the primordial handed to a worker did not replay");
158
+ throw this.failed;
159
+ }
160
+ this.pending.shift();
161
+ }
162
+ }
163
+ }
164
+ /** The bytes of "WorkerDomain", the class an ABC names to make a worker. */
165
+ const WORKER_DOMAIN = Array.from("WorkerDomain", (c) => c.charCodeAt(0));
166
+ /** Whether any of `abcs` names WorkerDomain in its strings: only then may its SWF make a worker. */
167
+ export function namesWorkerDomain(abcs) {
168
+ const first = WORKER_DOMAIN[0];
169
+ for (const abc of abcs) {
170
+ const end = abc.length - WORKER_DOMAIN.length;
171
+ for (let at = abc.indexOf(first); at !== -1 && at <= end; at = abc.indexOf(first, at + 1)) {
172
+ let k = 1;
173
+ while (k < WORKER_DOMAIN.length && abc[at + k] === WORKER_DOMAIN[k]) {
174
+ k++;
175
+ }
176
+ if (k === WORKER_DOMAIN.length) {
177
+ return true;
178
+ }
179
+ }
180
+ }
181
+ return false;
182
+ }
@@ -0,0 +1,38 @@
1
+ // Deferred entries keep their module's bindings and code context.
2
+ import { avm2 } from "../../runtime/index.js";
3
+ // Entries that never read A still need their originating ABC for caller URL checks.
4
+ const methodAbcs = new WeakMap();
5
+ /** The entry builder given to one lazy module, bound to its compiler epoch and domain. */
6
+ export function methodCompiler(s, index, domain, script, epoch) {
7
+ return (body, bindings) => {
8
+ if (s.codegen.epoch !== epoch) {
9
+ throw new Error("the compiler was reset before a deferred method was compiled");
10
+ }
11
+ const source = s.codegen.compileMethods([body], index).get(body);
12
+ if (source === undefined) {
13
+ throw new Error(`a deferred method has no compiled entry: ${body}`);
14
+ }
15
+ const build = new Function("rt", "nn", "ac", "ns", "cls", "N", "S", "M", "V", "F", "A", `"use strict"; return ${source}\n//# sourceURL=${script}/$f${body}.js\n`);
16
+ const factory = s.rt.loadInto(domain, () => build(...bindings));
17
+ return (...args) => {
18
+ const method = factory(...args);
19
+ methodAbcs.set(method, bindings[10]);
20
+ return method;
21
+ };
22
+ };
23
+ }
24
+ /** Deferred entries need both Function construction and identifiable stack frames. */
25
+ export function supportsLazyCompilation() {
26
+ if (lazySupported === undefined) {
27
+ try {
28
+ const script = "swf2es-lazy-probe.js";
29
+ const stack = new Function(`return new Error().stack\n//# sourceURL=${script}\n`)();
30
+ lazySupported = avm2.frameScripts(stack).includes(script);
31
+ }
32
+ catch {
33
+ lazySupported = false;
34
+ }
35
+ }
36
+ return lazySupported;
37
+ }
38
+ let lazySupported;