@swf2es/player-hosts 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +759 -0
  3. package/README.md +43 -2
  4. package/dist/indexeddb.d.ts +27 -0
  5. package/dist/indexeddb.d.ts.map +1 -0
  6. package/dist/indexeddb.js +170 -0
  7. package/dist/indexeddb.js.map +1 -0
  8. package/dist/node-worker.d.ts +2 -0
  9. package/dist/node-worker.d.ts.map +1 -0
  10. package/dist/node-worker.js +12 -0
  11. package/dist/node-worker.js.map +1 -0
  12. package/dist/node.d.ts +8 -0
  13. package/dist/node.d.ts.map +1 -0
  14. package/dist/node.js +43 -0
  15. package/dist/node.js.map +1 -0
  16. package/dist/precompiled.d.ts +31 -0
  17. package/dist/precompiled.d.ts.map +1 -0
  18. package/dist/precompiled.js +125 -0
  19. package/dist/precompiled.js.map +1 -0
  20. package/dist/stage3d.d.ts +13 -0
  21. package/dist/stage3d.d.ts.map +1 -0
  22. package/dist/stage3d.js +61 -0
  23. package/dist/stage3d.js.map +1 -0
  24. package/dist/thread/codegen/codegen.js +308 -0
  25. package/dist/thread/codegen/index.js +405 -0
  26. package/dist/thread/format/abc-names.js +126 -0
  27. package/dist/thread/format/actions.js +222 -0
  28. package/dist/thread/format/air-descriptor.js +63 -0
  29. package/dist/thread/format/api-versions.js +22 -0
  30. package/dist/thread/format/bitmap.js +199 -0
  31. package/dist/thread/format/button.js +60 -0
  32. package/dist/thread/format/compression.js +200 -0
  33. package/dist/thread/format/display.js +305 -0
  34. package/dist/thread/format/filters.js +136 -0
  35. package/dist/thread/format/font.js +168 -0
  36. package/dist/thread/format/index.js +26 -0
  37. package/dist/thread/format/pbj.js +484 -0
  38. package/dist/thread/format/shape.js +411 -0
  39. package/dist/thread/format/sound.js +91 -0
  40. package/dist/thread/format/swf.js +163 -0
  41. package/dist/thread/format/tags.js +58 -0
  42. package/dist/thread/format/text.js +135 -0
  43. package/dist/thread/format/zip.js +91 -0
  44. package/dist/thread/native/audio/binary.js +3 -0
  45. package/dist/thread/native/audio/index.js +72 -0
  46. package/dist/thread/native/base64.js +9 -0
  47. package/dist/thread/native/compress/binary.js +3 -0
  48. package/dist/thread/native/compress/index.js +145 -0
  49. package/dist/thread/native/instance.js +49 -0
  50. package/dist/thread/native/mp3/binary.js +3 -0
  51. package/dist/thread/native/mp3/index.js +48 -0
  52. package/dist/thread/native/render/binary.js +3 -0
  53. package/dist/thread/native/render/bitmap-kernel.js +591 -0
  54. package/dist/thread/native/render/draw-kernel.js +204 -0
  55. package/dist/thread/native/render/dxt-encoder.js +94 -0
  56. package/dist/thread/native/render/index.js +10 -0
  57. package/dist/thread/native/render/lines.js +122 -0
  58. package/dist/thread/native/render/module.js +26 -0
  59. package/dist/thread/native/render/pixel-ops.js +235 -0
  60. package/dist/thread/native/render/tessellator.js +250 -0
  61. package/dist/thread/player/avm1/amf.js +507 -0
  62. package/dist/thread/player/avm1/avm1.js +1304 -0
  63. package/dist/thread/player/avm1/bindings.js +214 -0
  64. package/dist/thread/player/avm1/classes.js +75 -0
  65. package/dist/thread/player/avm1/clips.js +229 -0
  66. package/dist/thread/player/avm1/compile.js +140 -0
  67. package/dist/thread/player/avm1/external.js +79 -0
  68. package/dist/thread/player/avm1/focus.js +278 -0
  69. package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
  70. package/dist/thread/player/avm1/globals/Button.js +31 -0
  71. package/dist/thread/player/avm1/globals/Color.js +115 -0
  72. package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
  73. package/dist/thread/player/avm1/globals/FileReference.js +217 -0
  74. package/dist/thread/player/avm1/globals/Key.js +60 -0
  75. package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
  76. package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
  77. package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
  78. package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
  79. package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
  80. package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
  81. package/dist/thread/player/avm1/globals/Selection.js +62 -0
  82. package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
  83. package/dist/thread/player/avm1/globals/Sound.js +238 -0
  84. package/dist/thread/player/avm1/globals/Stage.js +12 -0
  85. package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
  86. package/dist/thread/player/avm1/globals/TextField.js +396 -0
  87. package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
  88. package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
  89. package/dist/thread/player/avm1/globals/XML.js +396 -0
  90. package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
  91. package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
  92. package/dist/thread/player/avm1/globals/drawing.js +202 -0
  93. package/dist/thread/player/avm1/globals/filters.js +635 -0
  94. package/dist/thread/player/avm1/globals/geom.js +600 -0
  95. package/dist/thread/player/avm1/input.js +483 -0
  96. package/dist/thread/player/avm1/keyboard.js +113 -0
  97. package/dist/thread/player/avm1/loads.js +352 -0
  98. package/dist/thread/player/avm1/net.js +219 -0
  99. package/dist/thread/player/avm1/paths.js +104 -0
  100. package/dist/thread/player/avm1/pointer.js +512 -0
  101. package/dist/thread/player/avm1/queue.js +303 -0
  102. package/dist/thread/player/avm1/sound.js +106 -0
  103. package/dist/thread/player/avm1/swf.js +141 -0
  104. package/dist/thread/player/avm1/timers.js +113 -0
  105. package/dist/thread/player/bitmap/bitmap.js +627 -0
  106. package/dist/thread/player/bitmap/draw.js +68 -0
  107. package/dist/thread/player/bitmap/dxt.js +11 -0
  108. package/dist/thread/player/bitmap/filters.js +656 -0
  109. package/dist/thread/player/bitmap/images.js +240 -0
  110. package/dist/thread/player/bitmap/kernel.js +65 -0
  111. package/dist/thread/player/bitmap/ops.js +1239 -0
  112. package/dist/thread/player/bitmap/pixel-bender.js +911 -0
  113. package/dist/thread/player/bitmap/png.js +139 -0
  114. package/dist/thread/player/bitmap/turbulence.js +89 -0
  115. package/dist/thread/player/clock.js +182 -0
  116. package/dist/thread/player/display/bitmapobject.js +25 -0
  117. package/dist/thread/player/display/bounds.js +520 -0
  118. package/dist/thread/player/display/buttonobject.js +305 -0
  119. package/dist/thread/player/display/color.js +40 -0
  120. package/dist/thread/player/display/container.js +150 -0
  121. package/dist/thread/player/display/display.js +14 -0
  122. package/dist/thread/player/display/displayobject.js +664 -0
  123. package/dist/thread/player/display/drawing.js +613 -0
  124. package/dist/thread/player/display/filters.js +285 -0
  125. package/dist/thread/player/display/geometry.js +189 -0
  126. package/dist/thread/player/display/gradients.js +117 -0
  127. package/dist/thread/player/display/graphicsdata.js +592 -0
  128. package/dist/thread/player/display/instantiate.js +71 -0
  129. package/dist/thread/player/display/matrix3d.js +373 -0
  130. package/dist/thread/player/display/morph.js +226 -0
  131. package/dist/thread/player/display/movieclip.js +680 -0
  132. package/dist/thread/player/display/perspective.js +193 -0
  133. package/dist/thread/player/display/scale9.js +236 -0
  134. package/dist/thread/player/display/shapeobject.js +131 -0
  135. package/dist/thread/player/display/shapes.js +407 -0
  136. package/dist/thread/player/display/textobjects.js +222 -0
  137. package/dist/thread/player/display/timeline.js +471 -0
  138. package/dist/thread/player/display/value-lists.js +40 -0
  139. package/dist/thread/player/display/videoobject.js +6 -0
  140. package/dist/thread/player/display/walk.js +127 -0
  141. package/dist/thread/player/files.js +334 -0
  142. package/dist/thread/player/hosts.js +207 -0
  143. package/dist/thread/player/input/avm1.js +82 -0
  144. package/dist/thread/player/input/context-menu.js +63 -0
  145. package/dist/thread/player/input/keyboard.js +458 -0
  146. package/dist/thread/player/input/pointer.js +863 -0
  147. package/dist/thread/player/input/text-editor.js +319 -0
  148. package/dist/thread/player/input/touch.js +209 -0
  149. package/dist/thread/player/localconnection.js +90 -0
  150. package/dist/thread/player/media/audio.js +376 -0
  151. package/dist/thread/player/media/dynamic-sound.js +90 -0
  152. package/dist/thread/player/media/extract.js +135 -0
  153. package/dist/thread/player/media/mp3.js +152 -0
  154. package/dist/thread/player/media/sounds.js +507 -0
  155. package/dist/thread/player/media/streaming-audio.js +133 -0
  156. package/dist/thread/player/player.js +616 -0
  157. package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
  158. package/dist/thread/player/playerglobal/air-library.js +8 -0
  159. package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
  160. package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
  161. package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
  162. package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
  163. package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
  164. package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
  165. package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
  166. package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
  167. package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
  168. package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
  169. package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
  170. package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
  171. package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
  172. package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
  173. package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
  174. package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
  175. package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
  176. package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
  177. package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
  178. package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
  179. package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
  180. package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
  181. package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
  182. package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
  183. package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
  184. package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
  185. package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
  186. package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
  187. package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
  188. package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
  189. package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
  190. package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
  191. package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
  192. package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
  193. package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
  194. package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
  195. package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
  196. package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
  197. package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
  198. package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
  199. package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
  200. package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
  201. package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
  202. package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
  203. package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
  204. package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
  205. package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
  206. package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
  207. package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
  208. package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
  209. package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
  210. package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
  211. package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
  212. package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
  213. package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
  214. package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
  215. package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
  216. package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
  217. package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
  218. package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
  219. package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
  220. package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
  221. package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
  222. package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
  223. package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
  224. package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
  225. package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
  226. package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
  227. package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
  228. package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
  229. package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
  230. package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
  231. package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
  232. package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
  233. package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
  234. package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
  235. package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
  236. package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
  237. package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
  238. package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
  239. package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
  240. package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
  241. package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
  242. package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
  243. package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
  244. package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
  245. package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
  246. package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
  247. package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
  248. package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
  249. package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
  250. package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
  251. package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
  252. package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
  253. package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
  254. package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
  255. package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
  256. package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
  257. package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
  258. package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
  259. package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
  260. package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
  261. package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
  262. package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
  263. package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
  264. package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
  265. package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
  266. package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
  267. package/dist/thread/player/playerglobal/index.js +224 -0
  268. package/dist/thread/player/playerglobal/libraries.js +10 -0
  269. package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
  270. package/dist/thread/player/playerglobal/toplevel.js +122 -0
  271. package/dist/thread/player/scripting/clipboard.js +146 -0
  272. package/dist/thread/player/scripting/code.js +900 -0
  273. package/dist/thread/player/scripting/evaluate.js +144 -0
  274. package/dist/thread/player/scripting/events.js +172 -0
  275. package/dist/thread/player/scripting/handover.js +182 -0
  276. package/dist/thread/player/scripting/lazy.js +38 -0
  277. package/dist/thread/player/scripting/lifecycle.js +272 -0
  278. package/dist/thread/player/scripting/loads.js +860 -0
  279. package/dist/thread/player/scripting/sha256.js +95 -0
  280. package/dist/thread/player/scripting/symbols.js +348 -0
  281. package/dist/thread/player/scripting/timers.js +434 -0
  282. package/dist/thread/player/scripting/workers.js +923 -0
  283. package/dist/thread/player/scripting.js +1018 -0
  284. package/dist/thread/player/stage.js +4 -0
  285. package/dist/thread/player/text/csm.js +113 -0
  286. package/dist/thread/player/text/css.js +167 -0
  287. package/dist/thread/player/text/fonts.js +97 -0
  288. package/dist/thread/player/text/layout.js +393 -0
  289. package/dist/thread/player/text/static.js +109 -0
  290. package/dist/thread/player/text/text.js +431 -0
  291. package/dist/thread/player/workers/thread.js +159 -0
  292. package/dist/thread/player/workers/wire.js +198 -0
  293. package/dist/thread/player-hosts/web-worker.js +19 -0
  294. package/dist/thread/runtime/avm1/activation.js +89 -0
  295. package/dist/thread/runtime/avm1/case.js +249 -0
  296. package/dist/thread/runtime/avm1/clips.js +334 -0
  297. package/dist/thread/runtime/avm1/control.js +280 -0
  298. package/dist/thread/runtime/avm1/errors.js +50 -0
  299. package/dist/thread/runtime/avm1/functions.js +249 -0
  300. package/dist/thread/runtime/avm1/globals/array.js +549 -0
  301. package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
  302. package/dist/thread/runtime/avm1/globals/date.js +436 -0
  303. package/dist/thread/runtime/avm1/globals/global.js +344 -0
  304. package/dist/thread/runtime/avm1/globals/math.js +139 -0
  305. package/dist/thread/runtime/avm1/globals/number.js +93 -0
  306. package/dist/thread/runtime/avm1/globals/string.js +201 -0
  307. package/dist/thread/runtime/avm1/globals/timers.js +129 -0
  308. package/dist/thread/runtime/avm1/host.js +5 -0
  309. package/dist/thread/runtime/avm1/index.js +14 -0
  310. package/dist/thread/runtime/avm1/inheritance.js +132 -0
  311. package/dist/thread/runtime/avm1/numbers.js +298 -0
  312. package/dist/thread/runtime/avm1/objects.js +896 -0
  313. package/dist/thread/runtime/avm1/operators.js +170 -0
  314. package/dist/thread/runtime/avm1/realm.js +529 -0
  315. package/dist/thread/runtime/avm1/runtime.js +882 -0
  316. package/dist/thread/runtime/avm1/scope.js +385 -0
  317. package/dist/thread/runtime/avm1/urls.js +180 -0
  318. package/dist/thread/runtime/avm1/values.js +97 -0
  319. package/dist/thread/runtime/avm2/amf-classes.js +66 -0
  320. package/dist/thread/runtime/avm2/amf.js +801 -0
  321. package/dist/thread/runtime/avm2/array-conversion.js +100 -0
  322. package/dist/thread/runtime/avm2/builtin-library.js +21 -0
  323. package/dist/thread/runtime/avm2/cache-fill.js +86 -0
  324. package/dist/thread/runtime/avm2/classes.js +211 -0
  325. package/dist/thread/runtime/avm2/definitions.js +69 -0
  326. package/dist/thread/runtime/avm2/descriptors.js +5 -0
  327. package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
  328. package/dist/thread/runtime/avm2/domain-memory.js +75 -0
  329. package/dist/thread/runtime/avm2/domain.js +280 -0
  330. package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
  331. package/dist/thread/runtime/avm2/enumeration.js +393 -0
  332. package/dist/thread/runtime/avm2/errors.js +45 -0
  333. package/dist/thread/runtime/avm2/float-library.js +66 -0
  334. package/dist/thread/runtime/avm2/float.js +26 -0
  335. package/dist/thread/runtime/avm2/hooks.js +19 -0
  336. package/dist/thread/runtime/avm2/index.js +38 -0
  337. package/dist/thread/runtime/avm2/messages.js +177 -0
  338. package/dist/thread/runtime/avm2/method-factories.js +95 -0
  339. package/dist/thread/runtime/avm2/modules.js +105 -0
  340. package/dist/thread/runtime/avm2/names.js +248 -0
  341. package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
  342. package/dist/thread/runtime/avm2/natives/array.js +390 -0
  343. package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
  344. package/dist/thread/runtime/avm2/natives/case.js +88 -0
  345. package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
  346. package/dist/thread/runtime/avm2/natives/date.js +581 -0
  347. package/dist/thread/runtime/avm2/natives/define.js +130 -0
  348. package/dist/thread/runtime/avm2/natives/describe.js +351 -0
  349. package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
  350. package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
  351. package/dist/thread/runtime/avm2/natives/float.js +96 -0
  352. package/dist/thread/runtime/avm2/natives/index.js +64 -0
  353. package/dist/thread/runtime/avm2/natives/json.js +514 -0
  354. package/dist/thread/runtime/avm2/natives/number.js +162 -0
  355. package/dist/thread/runtime/avm2/natives/object.js +237 -0
  356. package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
  357. package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
  358. package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
  359. package/dist/thread/runtime/avm2/natives/shell.js +557 -0
  360. package/dist/thread/runtime/avm2/natives/sort.js +377 -0
  361. package/dist/thread/runtime/avm2/natives/string.js +132 -0
  362. package/dist/thread/runtime/avm2/natives/sync.js +821 -0
  363. package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
  364. package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
  365. package/dist/thread/runtime/avm2/natives/vector.js +406 -0
  366. package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
  367. package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
  368. package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
  369. package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
  370. package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
  371. package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
  372. package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
  373. package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
  374. package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
  375. package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
  376. package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
  377. package/dist/thread/runtime/avm2/number-strings.js +110 -0
  378. package/dist/thread/runtime/avm2/numbers.js +558 -0
  379. package/dist/thread/runtime/avm2/options.js +16 -0
  380. package/dist/thread/runtime/avm2/player-messages.js +550 -0
  381. package/dist/thread/runtime/avm2/property-cache.js +135 -0
  382. package/dist/thread/runtime/avm2/runtime.js +2644 -0
  383. package/dist/thread/runtime/avm2/traits.js +509 -0
  384. package/dist/thread/runtime/index.js +7 -0
  385. package/dist/web-worker.d.ts +2 -0
  386. package/dist/web-worker.d.ts.map +1 -0
  387. package/dist/web-worker.js +20 -0
  388. package/dist/web-worker.js.map +1 -0
  389. package/dist/websocket.d.ts +4 -0
  390. package/dist/websocket.d.ts.map +1 -0
  391. package/dist/websocket.js +27 -0
  392. package/dist/websocket.js.map +1 -0
  393. package/dist/workers.d.ts +35 -0
  394. package/dist/workers.d.ts.map +1 -0
  395. package/dist/workers.js +171 -0
  396. package/dist/workers.js.map +1 -0
  397. package/package.json +62 -3
  398. package/src/indexeddb.ts +227 -0
  399. package/src/node-worker.ts +13 -0
  400. package/src/node.ts +49 -0
  401. package/src/precompiled.ts +166 -0
  402. package/src/stage3d.ts +76 -0
  403. package/src/web-worker.ts +24 -0
  404. package/src/websocket.ts +32 -0
  405. package/src/workers.ts +255 -0
@@ -0,0 +1,139 @@
1
+ // The global functions, bugzilla, and Error.
2
+ import { formatClassName } from "../names.js";
3
+ import { errorMessages } from "../player-messages.js";
4
+ import { plain } from "./define.js";
5
+ import { qualifiedClassName } from "./object.js";
6
+ /** A String argument as avmplus has it: null, as undefined coerced to String is, as "null". */
7
+ const text = (rt, s) => s === null || s === undefined ? "null" : rt.toString(s);
8
+ /**
9
+ * A native of one String argument whose default is "undefined", as the URI
10
+ * functions and escape and unescape declare it: none given is the default,
11
+ * where an undefined given is coerced to null. A function, not an arrow,
12
+ * for `arguments`, and so that its length is 1.
13
+ */
14
+ const ofText = (f) => (rt) => function (s) {
15
+ // biome-ignore lint/complexity/noArguments: how many were given, which a rest parameter would make its length 0
16
+ return f(rt, arguments.length === 0 ? "undefined" : text(rt, s));
17
+ };
18
+ /**
19
+ * As Toplevel's URI functions, which are ECMAScript 3's, as JavaScript's
20
+ * are (bugzilla 609416, the fix for surrogate pairs, in effect as avmshell
21
+ * runs): JavaScript's own, with URIError 1052, naming the function, for a
22
+ * malformed URI.
23
+ */
24
+ const uri = (name, f) => ofText((rt, s) => {
25
+ try {
26
+ return f(s);
27
+ }
28
+ catch (e) {
29
+ if (!(e instanceof URIError)) {
30
+ throw e;
31
+ }
32
+ const decoded = f === decodeURI || f === decodeURIComponent ? surrogates(s, f) : null;
33
+ if (decoded === null) {
34
+ throw rt.error("URIError", 1052, name);
35
+ }
36
+ return decoded;
37
+ }
38
+ });
39
+ /** A UTF-8 encoded surrogate, which JavaScript's decoding refuses. */
40
+ const ENCODED_SURROGATE = /%[eE][dD]%[aAbB][0-9a-fA-F]%[89aAbB][0-9a-fA-F]/g;
41
+ /**
42
+ * As Toplevel::decode, which decodes a surrogate's code point as any other
43
+ * (Utf8ToUcs4): the parts between them JavaScript's, or null if one fails.
44
+ */
45
+ function surrogates(s, f) {
46
+ const out = [];
47
+ let at = 0;
48
+ for (const m of s.matchAll(ENCODED_SURROGATE)) {
49
+ const b1 = Number.parseInt(m[0].slice(4, 6), 16);
50
+ const b2 = Number.parseInt(m[0].slice(7, 9), 16);
51
+ out.push(s.slice(at, m.index), String.fromCharCode(0xd000 | ((b1 & 0x3f) << 6) | (b2 & 0x3f)));
52
+ at = m.index + m[0].length;
53
+ }
54
+ if (at === 0) {
55
+ return null;
56
+ }
57
+ out.push(s.slice(at));
58
+ try {
59
+ return out.map((part, i) => (i % 2 === 0 ? f(part) : part)).join("");
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ export const toplevelNatives = {
66
+ // Global functions
67
+ isNaN: (rt) => (v) => Number.isNaN(rt.toNumber(v)),
68
+ isFinite: (rt) => (v) => Number.isFinite(rt.toNumber(v)),
69
+ parseInt: (rt) => (s, radix) => Number.parseInt(rt.toString(s), rt.toInt(radix)),
70
+ parseFloat: (rt) => (s) => Number.parseFloat(rt.toString(s)),
71
+ decodeURI: uri("decodeURI", decodeURI),
72
+ decodeURIComponent: uri("decodeURIComponent", decodeURIComponent),
73
+ encodeURI: uri("encodeURI", encodeURI),
74
+ encodeURIComponent: uri("encodeURIComponent", encodeURIComponent),
75
+ // As Toplevel::escape and unescape, which are ECMAScript's B.2.1 and B.2.2,
76
+ // as JavaScript's are: the same unescaped set, %XX and %uXXXX.
77
+ escape: ofText((_rt, s) => escape(s)),
78
+ unescape: ofText((_rt, s) => unescape(s)),
79
+ "avmplus::getQualifiedClassName": (rt) => (v) => qualifiedClassName(rt, v),
80
+ "avmplus::getQualifiedSuperclassName": (rt) => (v) => {
81
+ // null's and void's traits have no base.
82
+ if (v === null || v === undefined) {
83
+ return null;
84
+ }
85
+ const cls = v !== null && typeof v === "object" && v.$it ? v : rt.traitsOf(v).cls;
86
+ const base = cls?.$base;
87
+ return base ? formatClassName(base.$it.name) : null;
88
+ },
89
+ // As Toplevel::bugzilla: the bug fixes the builtins' AS3 asks about, all
90
+ // in effect at the latest SWF version, as avmshell runs.
91
+ bugzilla: plain((n) => n === 504525 || n === 574600 || n === 661330),
92
+ // Error
93
+ // Error.throwError fills in the template's %n: in debugger mode it has some.
94
+ // The debugger player writes the template as it is, %1 and all; an id it has no text for is the number alone.
95
+ "Error.getErrorMessage": (rt) => (id) => rt.debugger && errorMessages[id] ? `Error #${id}: ${errorMessages[id]}` : `Error #${id}`,
96
+ "Error#getStackTrace": plain(() => null),
97
+ };
98
+ /**
99
+ * The native error classes, which construct an error when called, as
100
+ * ErrorClass::call does: Error("x") is new Error("x"), not a coercion.
101
+ * flash.errors' are AS3 classes, and coerce.
102
+ */
103
+ const constructs = { call: (rt, cls, args) => rt.constructClass(cls, args) };
104
+ /**
105
+ * An AS3 error's JavaScript error, made with it: where it was made, the
106
+ * compiled method's name in it, for a host to show (Runtime.stackOf). The
107
+ * release player has no stack trace for AS3 to read, and getStackTrace
108
+ * still gives null.
109
+ */
110
+ const errorClass = {
111
+ ...constructs,
112
+ create: (traits) => {
113
+ const o = Object.create(traits.proto);
114
+ // V8 keeps 10 frames, and the runtime's own take most of those before the first AS3 one.
115
+ const engine = Error;
116
+ const limit = engine.stackTraceLimit;
117
+ engine.stackTraceLimit = 48;
118
+ Object.defineProperty(o, "$jsError", { value: new Error() });
119
+ engine.stackTraceLimit = limit;
120
+ return o;
121
+ },
122
+ };
123
+ export const errorHooks = {
124
+ ...Object.fromEntries([
125
+ "DefinitionError",
126
+ "EvalError",
127
+ "RangeError",
128
+ "ReferenceError",
129
+ "SecurityError",
130
+ "SyntaxError",
131
+ "TypeError",
132
+ "URIError",
133
+ "VerifyError",
134
+ "UninitializedError",
135
+ "ArgumentError",
136
+ ].map((name) => [name, constructs])),
137
+ // Its subclasses inherit its create: one of their own would replace it.
138
+ Error: errorClass,
139
+ };
@@ -0,0 +1,46 @@
1
+ // A Vector's elements, as the kind of its elements keeps them in V8.
2
+ //
3
+ // V8 merges the array maps a store site sees into the most general of
4
+ // them: a site that has stored into an array of objects moves an array of
5
+ // doubles that it stores into to objects too, each double boxed from then
6
+ // on. A site that every Vector's elements pass through, as push's would
7
+ // be, so makes every Vector.<Number>'s elements objects once a
8
+ // Vector.<String> has been through it. Each kind stores through a function
9
+ // of its own, and its elements start in the most general elements kind
10
+ // they will take, so that no store moves them: a double's for uint and
11
+ // Number, which a small integer cannot always hold, and an object's for
12
+ // the others.
13
+ export function storeInt(a, i, x) {
14
+ a[i] = x;
15
+ }
16
+ export function storeDouble(a, i, x) {
17
+ a[i] = x;
18
+ }
19
+ export function storeObject(a, i, x) {
20
+ a[i] = x;
21
+ }
22
+ // `length` elements of the kind's default, packed, each kind from an
23
+ // array literal of its own.
24
+ export function intElements(length) {
25
+ const a = [];
26
+ while (a.length < length) {
27
+ a.push(0);
28
+ }
29
+ return a;
30
+ }
31
+ export function doubleElements(length) {
32
+ const a = [0.5];
33
+ a.pop();
34
+ while (a.length < length) {
35
+ a.push(0);
36
+ }
37
+ return a;
38
+ }
39
+ export function objectElements(length) {
40
+ const a = [null];
41
+ a.pop();
42
+ while (a.length < length) {
43
+ a.push(null);
44
+ }
45
+ return a;
46
+ }
@@ -0,0 +1,406 @@
1
+ // The Vectors: one implementation, over their element conversions.
2
+ import { arrayIndex, NS_Public, namespace, qname } from "../names.js";
3
+ import { boundKey, methodKey } from "../traits.js";
4
+ import { AS3, eachElement, elements, getElement, isObject, lengthOf, plain, } from "./define.js";
5
+ import { FloatVector, setFloatElement } from "./float-vector.js";
6
+ import { sort } from "./sort.js";
7
+ import { doubleElements, intElements, objectElements, storeDouble, storeInt, storeObject, } from "./vector-elements.js";
8
+ const VEC = "__AS3__.vec";
9
+ export const vectorNatives = {};
10
+ export const vectorHooks = {
11
+ [`${VEC}::Vector`]: {
12
+ apply: (rt, _factory, params) => vectorOf(rt, params[0] ?? null),
13
+ // As VectorClass::construct: only a Vector of some type is constructed.
14
+ construct: (rt) => {
15
+ throw rt.error("TypeError", 1007);
16
+ },
17
+ },
18
+ };
19
+ // The Vectors: one implementation, over their element conversions, and
20
+ // their elements as each kind keeps them (see vector-elements.ts).
21
+ const VECTORS = [
22
+ ["Vector$int", (rt, _cls, v) => rt.toInt(v), 0, intElements, storeInt],
23
+ ["Vector$uint", (rt, _cls, v) => rt.toUint(v), 0, doubleElements, storeDouble],
24
+ ["Vector$double", (rt, _cls, v) => rt.toNumber(v), 0, doubleElements, storeDouble],
25
+ // Vector.<*> holds Objects, as ObjectVectorObject does: undefined is null there.
26
+ [
27
+ "Vector$object",
28
+ (rt, cls, v) => rt.coerce(v, cls.$param ?? "Object"),
29
+ null,
30
+ objectElements,
31
+ storeObject,
32
+ ],
33
+ ];
34
+ for (const [kind, , , elementsOf, store] of VECTORS) {
35
+ const c = `${VEC}::${kind}`;
36
+ const own = `${VEC}:${kind}`;
37
+ vectorNatives[`${c}#get:length`] = plain(function () {
38
+ return this.$a.length;
39
+ });
40
+ vectorNatives[`${c}#set:length`] = (rt) => function (n) {
41
+ if (this.$fixed) {
42
+ throw rt.error("RangeError", 1126);
43
+ }
44
+ const length = rt.toUint(n);
45
+ const a = this.$a;
46
+ if (a instanceof FloatVector) {
47
+ a.length = length;
48
+ }
49
+ else if (length === 0) {
50
+ // A new array: V8 empties one by a call into its runtime.
51
+ this.$a = elementsOf(0);
52
+ }
53
+ else if (length < a.length) {
54
+ a.length = length;
55
+ }
56
+ else if (length > a.length) {
57
+ // Pushed, not a length set then filled, so that V8 keeps it packed.
58
+ const fill = this.$traits.cls.$fill;
59
+ while (a.length < length) {
60
+ a.push(fill);
61
+ }
62
+ }
63
+ };
64
+ vectorNatives[`${c}#get:fixed`] = plain(function () {
65
+ return this.$fixed;
66
+ });
67
+ vectorNatives[`${c}#set:fixed`] = plain(function (fixed) {
68
+ this.$fixed = !!fixed;
69
+ });
70
+ vectorNatives[`${c}#${AS3}::push`] = (rt) => function (...args) {
71
+ if (this.$fixed) {
72
+ throw rt.error("RangeError", 1126);
73
+ }
74
+ // Each at the length there is before it, set as an element: after
75
+ // its conversion, which can run AS3 that changes the Vector.
76
+ const cls = this.$traits.cls;
77
+ const convert = cls.$convert;
78
+ for (let k = 0; k < args.length; k++) {
79
+ const i = this.$a.length;
80
+ const x = convert(rt, cls, args[k]);
81
+ const a = this.$a;
82
+ if (i > a.length || (i === a.length && this.$fixed)) {
83
+ throw rt.error("RangeError", 1125, i, a.length);
84
+ }
85
+ if (a instanceof FloatVector) {
86
+ setFloatElement(rt, this, i, x);
87
+ }
88
+ else {
89
+ store(a, i, x);
90
+ }
91
+ }
92
+ return this.$a.length;
93
+ };
94
+ vectorNatives[`${c}#${AS3}::pop`] = (rt) => function () {
95
+ if (this.$fixed) {
96
+ throw rt.error("RangeError", 1126);
97
+ }
98
+ const a = this.$a;
99
+ return a.length ? (a instanceof FloatVector ? rt.float(a.pop()) : a.pop()) : empty(this);
100
+ };
101
+ // As TypedVectorObject::AS3_insertAt and AS3_removeAt: a negative index
102
+ // counts from the end, no further back than 0; an insert past the end
103
+ // appends; a removal past the end is a RangeError, as an element get is.
104
+ vectorNatives[`${c}#${AS3}::insertAt`] = (rt) => function (index, element) {
105
+ if (this.$fixed) {
106
+ throw rt.error("RangeError", 1126);
107
+ }
108
+ const cls = this.$traits.cls;
109
+ const x = cls.$convert(rt, cls, element);
110
+ const a = this.$a;
111
+ const i = rt.toInt(index);
112
+ a.splice(i < 0 ? Math.max(0, a.length + i) : Math.min(i, a.length), 0, x);
113
+ };
114
+ vectorNatives[`${c}#${AS3}::removeAt`] = (rt) => function (index) {
115
+ if (this.$fixed) {
116
+ throw rt.error("RangeError", 1126);
117
+ }
118
+ const a = this.$a;
119
+ const i = rt.toInt(index);
120
+ const at = i < 0 ? Math.max(0, a.length + i) : i;
121
+ if (at >= a.length) {
122
+ throw rt.error("RangeError", 1125, at, a.length);
123
+ }
124
+ const value = a.splice(at, 1)[0];
125
+ return a instanceof FloatVector ? rt.float(value) : value;
126
+ };
127
+ vectorNatives[`${c}#${AS3}::shift`] = (rt) => function () {
128
+ if (this.$fixed) {
129
+ throw rt.error("RangeError", 1126);
130
+ }
131
+ const a = this.$a;
132
+ return a.length ? (a instanceof FloatVector ? rt.float(a.shift()) : a.shift()) : empty(this);
133
+ };
134
+ vectorNatives[`${c}#${AS3}::unshift`] = (rt) => function (...args) {
135
+ if (this.$fixed) {
136
+ throw rt.error("RangeError", 1126);
137
+ }
138
+ // Room made first, then each converted and written in its place.
139
+ const cls = this.$traits.cls;
140
+ this.$a.unshift(...args.map(() => cls.$fill));
141
+ for (let k = 0; k < args.length; k++) {
142
+ writeElement(this, k, cls.$convert(rt, cls, args[k]), store);
143
+ }
144
+ return this.$a.length;
145
+ };
146
+ vectorNatives[`${c}#${own}::newThisType`] = (rt) => function () {
147
+ return rt.constructClass(this.$traits.cls, []);
148
+ };
149
+ vectorNatives[`${c}#${own}::_reverse`] = plain(function () {
150
+ this.$a.reverse();
151
+ return this;
152
+ });
153
+ vectorNatives[`${c}#${own}::_spliceHelper`] = (rt) => function (insert, insertCount, deleteCount, args, offset) {
154
+ // As unshift: room made, then each item converted, as the Vector's
155
+ // type does, and written in its place.
156
+ const cls = this.$traits.cls;
157
+ const at = rt.toUint(insert);
158
+ const count = rt.toUint(insertCount);
159
+ const from = rt.toUint(offset);
160
+ const items = args?.$a ?? [];
161
+ this.$a.splice(at, rt.toUint(deleteCount), ...new Array(count).fill(cls.$fill));
162
+ for (let k = 0; k < count; k++) {
163
+ const value = items instanceof FloatVector
164
+ ? rt.getProperty(args, rt.publicName(from + k))
165
+ : items[from + k];
166
+ writeElement(this, at + k, cls.$convert(rt, cls, value), store);
167
+ }
168
+ };
169
+ vectorNatives[`${c}.${own}::_sort`] = (rt) => (o, args) => sort(rt, o, elements(args));
170
+ vectorNatives[`${c}.${own}::_every`] = (rt) => (o, f, receiver) => eachElement(rt, o, f, receiver, (result) => (result === true ? undefined : false)) ?? true;
171
+ vectorNatives[`${c}.${own}::_some`] = (rt) => (o, f, receiver) => eachElement(rt, o, f, receiver, (result) => (result === true ? true : undefined)) ?? false;
172
+ vectorNatives[`${c}.${own}::_forEach`] = (rt) => (o, f, receiver) => {
173
+ eachElement(rt, o, f, receiver, () => undefined);
174
+ };
175
+ // As TypedVectorObject's _map and _filter: a new Vector of the same type,
176
+ // a method closure called whatever the receiver.
177
+ vectorNatives[`${c}#${own}::_map`] = (rt) => function (f, receiver) {
178
+ const cls = this.$traits.cls;
179
+ const r = rt.constructClass(cls, [this.$a.length]);
180
+ let i = 0;
181
+ eachElement(rt, this, f, receiver, (result) => {
182
+ const value = cls.$convert(rt, cls, result);
183
+ if (r.$a instanceof FloatVector) {
184
+ r.$a.data[i++] = value;
185
+ }
186
+ else {
187
+ store(r.$a, i++, value);
188
+ }
189
+ }, true);
190
+ return r;
191
+ };
192
+ vectorNatives[`${c}#${own}::_filter`] = (rt) => function (f, receiver) {
193
+ const r = rt.constructClass(this.$traits.cls, []);
194
+ eachElement(rt, this, f, receiver, (result, element) => {
195
+ if (result === true) {
196
+ r.$a.push(element);
197
+ }
198
+ }, true);
199
+ return r;
200
+ };
201
+ }
202
+ for (const [kind, convert, fill, elementsOf, store] of VECTORS) {
203
+ vectorHooks[`${VEC}::${kind}`] = {
204
+ create: (traits) => {
205
+ const o = Object.create(traits.proto);
206
+ o.$a = elementsOf(0);
207
+ o.$fixed = false;
208
+ return o;
209
+ },
210
+ // As VectorBaseObject: any name but an index is refused, 1069 or 1056.
211
+ refusesNames: true,
212
+ getIndex: (o, i, rt) => {
213
+ if (i >= o.$a.length) {
214
+ throw rt.error("RangeError", 1125, i, o.$a.length);
215
+ }
216
+ return o.$a[i];
217
+ },
218
+ hasIndex: (o, i) => i < o.$a.length,
219
+ // As VectorBaseObject::getVectorIndex: a name starting with a digit or
220
+ // "-" that is a number is an index, and must be a whole one from 0 up.
221
+ index: (o, name, rt) => {
222
+ const i = arrayIndex(name);
223
+ if (i >= 0) {
224
+ return i;
225
+ }
226
+ const c = name.charCodeAt(0);
227
+ if (name.length === 0 || !((c >= 0x30 && c <= 0x39) || c === 0x2d)) {
228
+ return -1;
229
+ }
230
+ const d = rt.toNumber(name);
231
+ if (Number.isNaN(d)) {
232
+ return -1;
233
+ }
234
+ if ((d | 0) === d && d >= 0) {
235
+ return d;
236
+ }
237
+ throw rt.error("RangeError", 1125, rt.toString(d), o.$a.length);
238
+ },
239
+ setIndex: (o, i, v, rt) => rt.setElement(o, i, convert(rt, o.$traits.cls, v), store),
240
+ construct: (rt, cls, args) => {
241
+ prepareVector(rt, cls, convert, fill);
242
+ const o = cls.$it.instance();
243
+ const length = args.length ? rt.toUint(args[0]) : 0;
244
+ o.$a = cls.$param === "float" ? new FloatVector(length) : elementsOf(length);
245
+ o.$fixed = rt.toBoolean(args[1]);
246
+ return o;
247
+ },
248
+ // As VectorClass::call: a Vector of this class is itself; any other
249
+ // object is read as an array-like, its length and then each index, a
250
+ // ByteArray's bytes included; a primitive or null cannot convert.
251
+ call: (rt, cls, args) => {
252
+ prepareVector(rt, cls, convert, fill);
253
+ if (args.length !== 1) {
254
+ throw rt.error("ArgumentError", 1112, args.length);
255
+ }
256
+ const source = args[0];
257
+ if (!isObject(source)) {
258
+ throw rt.error("TypeError", 1034, rt.describe(source), cls.$it.name);
259
+ }
260
+ if (source.$traits === cls.$it) {
261
+ return source;
262
+ }
263
+ // Each element as a get of the source's, as its conversion may change
264
+ // the source: past a Vector's end, a RangeError.
265
+ const o = cls.$it.instance();
266
+ const length = lengthOf(rt, source);
267
+ const a = cls.$param === "float" ? new FloatVector() : elementsOf(0);
268
+ for (let i = 0; i < length; i++) {
269
+ // The storage read here too, where only this loop's sources are
270
+ // seen, as getElement reads it for every walk's.
271
+ const elements = source.$a;
272
+ const value = elements !== undefined && i in elements ? elements[i] : getElement(rt, source, i);
273
+ a.push(cls.$convert(rt, cls, value));
274
+ }
275
+ o.$a = a;
276
+ return o;
277
+ },
278
+ };
279
+ }
280
+ /**
281
+ * Element i of Vector o written as unshift and splice write what they
282
+ * insert, into the elements it has after the conversion, grown to it with
283
+ * the fill value if the conversion shrank them.
284
+ */
285
+ function writeElement(o, i, x, store) {
286
+ const a = o.$a;
287
+ if (a instanceof FloatVector) {
288
+ if (i >= a.length) {
289
+ a.length = i + 1;
290
+ }
291
+ a.data[i] = x;
292
+ return;
293
+ }
294
+ while (a.length <= i) {
295
+ a.push(o.$traits.cls.$fill);
296
+ }
297
+ store(a, i, x);
298
+ }
299
+ /**
300
+ * What pop and shift give of an empty Vector, as TypedVectorConstants'
301
+ * undefinedValue: undefined for objects, else the fill value, 0.
302
+ */
303
+ const empty = (v) => v.$traits.cls.$fill === null ? undefined : v.$traits.cls.$fill;
304
+ /** A Vector class's element conversion and fill value, kept on the class for its natives. */
305
+ function prepareVector(rt, cls, convert, fill) {
306
+ if (!cls.$convert) {
307
+ cls.$convert = convert;
308
+ cls.$fill = cls.$param === "float" ? rt.float(0) : fill;
309
+ cls.$rt = rt;
310
+ if (cls.$param === "float") {
311
+ cls.$convert = (rt, _cls, value) => rt.toNumber(value);
312
+ cls.$it.getIndex = (o, i, rt) => {
313
+ const a = o.$a;
314
+ if (i >= a.length) {
315
+ throw rt.error("RangeError", 1125, i, a.length);
316
+ }
317
+ return rt.float(a.data[i]);
318
+ };
319
+ cls.$it.setIndex = (o, i, value, rt) => setFloatElement(rt, o, i, rt.toNumber(value));
320
+ floatSearchMethods(rt, cls);
321
+ }
322
+ }
323
+ }
324
+ /** Vector.<T>: the specialized classes for int, uint and Number, else Vector$object's for T; made once each. */
325
+ function vectorOf(rt, param) {
326
+ const made = rt.vectorClasses.get(param);
327
+ if (made) {
328
+ return made;
329
+ }
330
+ const cls = makeVector(rt, param);
331
+ rt.vectorClasses.set(param, cls);
332
+ return cls;
333
+ }
334
+ function makeVector(rt, param) {
335
+ const kind = param === null
336
+ ? "Vector$object"
337
+ : param.$it.name === "int"
338
+ ? "Vector$int"
339
+ : param.$it.name === "uint"
340
+ ? "Vector$uint"
341
+ : param.$it.name === "Number"
342
+ ? "Vector$double"
343
+ : "Vector$object";
344
+ // The specialized classes are internal to their package.
345
+ const base = rt.resolve(rt.cls(rt.ns(1, VEC), kind));
346
+ const [, convert, fill] = VECTORS.find(([k]) => k === kind) ?? VECTORS[3];
347
+ prepareVector(rt, base, convert, fill);
348
+ if (kind !== "Vector$object" || param === null) {
349
+ return base;
350
+ }
351
+ let cls = rt.specialized.get(param);
352
+ if (!cls) {
353
+ cls = rt.specializeVector(base, param);
354
+ prepareVector(rt, cls, convert, fill);
355
+ rt.specialized.set(param, cls);
356
+ // A class's instances, as coerce checks them, by the traits found once.
357
+ const ref = cls.$param;
358
+ if (typeof ref === "object") {
359
+ const traits = param.$it;
360
+ cls.$convert = (rt, _cls, v) => {
361
+ if (v === null || v === undefined) {
362
+ return null;
363
+ }
364
+ return v.$traits === traits || rt.isInstanceOf(v, traits) ? v : rt.coerce(v, ref);
365
+ };
366
+ }
367
+ }
368
+ return cls;
369
+ }
370
+ /** Float vectors coerce search values to float; the generic object's AS3 methods do not. */
371
+ function floatSearchMethods(rt, cls) {
372
+ const proto = rt.objectTraits.instance();
373
+ proto.$p = cls.$prototype;
374
+ proto.$d.set("constructor", cls);
375
+ proto.$dontEnum = new Set(["constructor", "indexOf", "lastIndexOf"]);
376
+ cls.$prototype = proto;
377
+ cls.$it.proto.$p = proto;
378
+ for (const name of ["indexOf", "lastIndexOf"]) {
379
+ const search = function (value, from = name === "indexOf" ? 0 : 0x7fffffff) {
380
+ const needle = Math.fround(rt.toNumber(value));
381
+ const raw = rt.toInt(from);
382
+ const elements = this.$a;
383
+ const start = raw < 0 ? Math.max(elements.length + raw, 0) : Math.min(raw, elements.length);
384
+ if (name === "indexOf") {
385
+ for (let i = start; i < elements.length; i++) {
386
+ if (elements.data[i] === needle) {
387
+ return i;
388
+ }
389
+ }
390
+ }
391
+ else {
392
+ for (let i = Math.min(start, elements.length - 1); i >= 0; i--) {
393
+ if (elements.data[i] === needle) {
394
+ return i;
395
+ }
396
+ }
397
+ }
398
+ return -1;
399
+ };
400
+ Object.assign(search, { $min: 1, $max: 2, $length: 2 });
401
+ const binding = cls.$it.find(qname(namespace(NS_Public, AS3), name));
402
+ cls.$it.proto[methodKey(binding >> 3)] = search;
403
+ cls.$it.proto[boundKey(binding >> 3)] = search;
404
+ proto.$d.set(name, rt.newFunctionObject(search, null));
405
+ }
406
+ }