@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,205 @@
1
+ // TextField.StyleSheet, AS2's, as Ruffle's (https://github.com/ruffle-rs/
2
+ // ruffle) core/src/avm1/globals/style_sheet.rs has it: MIT OR Apache-2.0,
3
+ // Copyright (c) 2018-2022 Ruffle LLC and Ruffle contributors. A sheet keeps
4
+ // each style object given it, copied, in `_css`, and the TextFormat its
5
+ // `transform` makes of it in `_styles`, both by the selector as given; and
6
+ // natively each TextFormat's format by the selector in lower case, which
7
+ // styles the HTML of a field the sheet is given to.
8
+ import { avm1 } from "../../../runtime/index.js";
9
+ import { camelCase, fontList, parseCss } from "../../text/css.js";
10
+ import { emptyFormat } from "../../text/text.js";
11
+ import { startLoad } from "./LoadVars.js";
12
+ import { formatOf, newTextFormat } from "./TextFormat.js";
13
+ const sheets = new WeakMap();
14
+ /** The formats of a sheet by selector in lower case; null for any other value. */
15
+ export function stylesOf(value) {
16
+ return value instanceof avm1.Avm1Object ? (sheets.get(value) ?? null) : null;
17
+ }
18
+ const FIXED = avm1.DONT_ENUM | avm1.DONT_DELETE | avm1.READ_ONLY | avm1.VERSION_7;
19
+ /** `TextField.StyleSheet`. */
20
+ export function styleSheetClass(host) {
21
+ const realm = host.realm;
22
+ const proto = new avm1.Avm1Object(realm.objectProto);
23
+ const constr = realm.classOf(proto, (self) => {
24
+ sheets.set(self, new Map());
25
+ return self;
26
+ }, () => undefined);
27
+ const method = (name, fn) => proto.define(name, realm.method(fn), FIXED);
28
+ /** An object's enumerable properties on a new Object; null for anything else. */
29
+ const copy = (value, version) => {
30
+ if (!(value instanceof avm1.Avm1Object)) {
31
+ return null;
32
+ }
33
+ const out = new avm1.Avm1Object(realm.objectProto);
34
+ for (const key of avm1.keys(value, version)) {
35
+ avm1.set(out, key, avm1.get(value, key, version), version);
36
+ }
37
+ return out;
38
+ };
39
+ /** `self[name]` as an object, an empty one for a primitive. */
40
+ const stored = (self, name, version) => realm.box(avm1.get(self, name, version), version);
41
+ const setStyle = (self, name, style, version) => {
42
+ for (const key of ["_styles", "_css"]) {
43
+ if (!avm1.has(self, key, version)) {
44
+ avm1.set(self, key, realm.newArray([], version), version);
45
+ }
46
+ }
47
+ avm1.set(stored(self, "_css", version), name, copy(style, version), version);
48
+ const transform = avm1.get(self, "transform", version);
49
+ const format = transform instanceof avm1.Avm1Function
50
+ ? transform.call(self, [copy(style, version)], version)
51
+ : undefined;
52
+ avm1.set(stored(self, "_styles", version), name, format, version);
53
+ const change = formatOf(format);
54
+ if (change !== null) {
55
+ sheets.get(self)?.set(name.toLowerCase(), change);
56
+ }
57
+ };
58
+ method("setStyle", (self, args, version) => {
59
+ setStyle(self, avm1.stringOf(args[0], version), args[1], version);
60
+ return undefined;
61
+ });
62
+ method("clear", (self, _, version) => {
63
+ avm1.set(self, "_styles", realm.newArray([], version), version);
64
+ avm1.set(self, "_css", realm.newArray([], version), version);
65
+ return undefined;
66
+ });
67
+ method("getStyleNames", (self, _, version) => realm.newArray(avm1.keys(stored(self, "_css", version), version), version));
68
+ method("load", (self, args, version) => {
69
+ if (args.length === 0) {
70
+ return false;
71
+ }
72
+ // StyleSheet shares the loading state with LoadVars, but sends no HTTP status callback.
73
+ startLoad(host, self, { url: avm1.stringOf(args[0], version), method: "GET", headers: [], body: null }, version, false);
74
+ return true;
75
+ });
76
+ method("getStyle", (self, args, version) => copy(avm1.get(stored(self, "_css", version), avm1.stringOf(args[0], version), version), version));
77
+ method("transform", (_, args, version) => transform(realm, args, version));
78
+ /** Each rule of the CSS set as a style; false for CSS Flash rejects. */
79
+ const parse = (self, css, version) => {
80
+ const rules = parseCss(css);
81
+ if (rules === null) {
82
+ return false;
83
+ }
84
+ for (const [selector, properties] of rules) {
85
+ if (selector === "") {
86
+ continue;
87
+ }
88
+ const style = new avm1.Avm1Object(realm.objectProto);
89
+ for (const [key, value] of properties) {
90
+ avm1.set(style, camelCase(key), value, version);
91
+ }
92
+ setStyle(self, selector, style, version);
93
+ }
94
+ return true;
95
+ };
96
+ method("parseCSS", (self, args, version) => parse(self, avm1.stringOf(args[0], version), version));
97
+ method("parse", (self, args, version) => parse(self, avm1.stringOf(args[0], version), version));
98
+ const callbackFlags = avm1.DONT_ENUM | avm1.DONT_DELETE | avm1.VERSION_7;
99
+ proto.define("onLoad", realm.method(() => undefined), callbackFlags);
100
+ proto.define("onData", realm.method((self, args, version) => {
101
+ const data = args[0];
102
+ const result = data === null || data === undefined
103
+ ? false
104
+ : avm1.invoke(avm1.get(self, "parse", version), self, [data], version);
105
+ avm1.set(self, "loaded", result, version);
106
+ avm1.invoke(avm1.get(self, "onLoad", version), self, [result], version);
107
+ return undefined;
108
+ }), callbackFlags);
109
+ return constr;
110
+ }
111
+ /** A style object's TextFormat, by the TextFormat class `_global` has now; null for none given. */
112
+ function transform(realm, args, version) {
113
+ if (args.length === 0 || args[0] === undefined || args[0] === null) {
114
+ return null;
115
+ }
116
+ const textFormat = avm1.get(realm.global, "TextFormat", version);
117
+ const proto = textFormat instanceof avm1.Avm1Object ? avm1.get(textFormat, "prototype", version) : undefined;
118
+ const format = emptyFormat();
119
+ format.kerning = false;
120
+ const style = args[0];
121
+ if (style instanceof avm1.Avm1Object) {
122
+ styleFormat(style, format, version);
123
+ }
124
+ return proto instanceof avm1.Avm1Object
125
+ ? newTextFormat(proto, format)
126
+ : newTextFormat(realm.objectProto, format);
127
+ }
128
+ /** A number as parseInt reads it, any suffix after it ignored, to an int. */
129
+ const suffixed = (value, version) => avm1.parseIntAvm1(avm1.stringOf(value, version), undefined, false, version) | 0;
130
+ /** What a style object's CSS properties set in `format`. */
131
+ function styleFormat(style, format, version) {
132
+ const get = (name) => avm1.get(style, name, version);
133
+ // Some properties are read only where they convert to true.
134
+ const truthy = (name) => {
135
+ const v = get(name);
136
+ return avm1.toBoolean(v, version) ? v : undefined;
137
+ };
138
+ // #RRGGBB exactly, in a string.
139
+ const color = get("color");
140
+ if (typeof color === "string" && /^#[0-9a-fA-F]{6}$/.test(color)) {
141
+ format.color = Number.parseInt(color.slice(1), 16);
142
+ }
143
+ const display = get("display");
144
+ if (display !== undefined) {
145
+ const value = avm1.stringOf(display, version);
146
+ format.display = value === "none" || value === "inline" ? value : "block";
147
+ }
148
+ const family = truthy("fontFamily");
149
+ if (family !== undefined) {
150
+ format.font = fontList(avm1.stringOf(family, version));
151
+ }
152
+ const size = get("fontSize");
153
+ if (size !== undefined) {
154
+ const n = suffixed(size, version);
155
+ if (n > 0) {
156
+ format.size = n;
157
+ }
158
+ }
159
+ const fontStyle = avm1.stringOf(get("fontStyle"), version);
160
+ if (fontStyle === "normal" || fontStyle === "italic") {
161
+ format.italic = fontStyle === "italic";
162
+ }
163
+ const weight = avm1.stringOf(get("fontWeight"), version);
164
+ if (weight === "normal" || weight === "bold") {
165
+ format.bold = weight === "bold";
166
+ }
167
+ const kerning = get("kerning");
168
+ if (kerning !== undefined) {
169
+ format.kerning = kerning === "true" || suffixed(kerning, version) !== 0;
170
+ }
171
+ const leading = truthy("leading");
172
+ if (leading !== undefined) {
173
+ format.leading = suffixed(leading, version);
174
+ }
175
+ const spacing = truthy("letterSpacing");
176
+ if (spacing !== undefined) {
177
+ format.letterSpacing = avm1.parseIntAvm1(avm1.stringOf(spacing, version), undefined, false, version);
178
+ }
179
+ const left = truthy("marginLeft");
180
+ if (left !== undefined) {
181
+ format.leftMargin = Math.max(0, suffixed(left, version));
182
+ }
183
+ const right = truthy("marginRight");
184
+ if (right !== undefined) {
185
+ format.rightMargin = Math.max(0, suffixed(right, version));
186
+ }
187
+ const align = get("textAlign");
188
+ if (align !== undefined) {
189
+ const value = avm1.stringOf(align, version).toLowerCase();
190
+ if (["left", "center", "right", "justify"].includes(value)) {
191
+ format.align = value;
192
+ }
193
+ }
194
+ const decoration = get("textDecoration");
195
+ if (decoration !== undefined) {
196
+ const value = avm1.stringOf(decoration, version);
197
+ if (value === "none" || value === "underline") {
198
+ format.underline = value === "underline";
199
+ }
200
+ }
201
+ const indent = truthy("textIndent");
202
+ if (indent !== undefined) {
203
+ format.indent = suffixed(indent, version);
204
+ }
205
+ }
@@ -0,0 +1,396 @@
1
+ // TextField, AS2's, as Ruffle's (https://github.com/ruffle-rs/ruffle)
2
+ // core/src/avm1/globals/text_field.rs has it: MIT OR Apache-2.0, Copyright
3
+ // (c) 2018-2022 Ruffle LLC and Ruffle contributors. A field's AVM1 object
4
+ // reads and writes the player's TextObject, its text and formats a
5
+ // TextModel (text/text.ts) as AS3's TextField's are; its properties are
6
+ // accessors on the prototype, which find the field each time, so that any
7
+ // other object given them reads undefined.
8
+ import { avm1 } from "../../../runtime/index.js";
9
+ import { CONTENT, TextObject } from "../../display/display.js";
10
+ import { maxScrollV, shownLines } from "../../text/layout.js";
11
+ import { applied, emptyFormat } from "../../text/text.js";
12
+ import { filtersProperty } from "./filters.js";
13
+ import { DEPTH_BIAS } from "./MovieClip.js";
14
+ import { stylesOf } from "./StyleSheet.js";
15
+ import { formatOf, newTextFormat } from "./TextFormat.js";
16
+ const states = new WeakMap();
17
+ /** `field`'s AVM1 state, at first as its DefineEditText gives it. */
18
+ export function stateOf(field) {
19
+ let state = states.get(field);
20
+ if (state === undefined) {
21
+ const edit = field.definition?.definition;
22
+ state = {
23
+ html: edit?.html ?? false,
24
+ variable: edit?.variable ? edit.variable : null,
25
+ tabIndex: undefined,
26
+ styleSheet: undefined,
27
+ selected: false,
28
+ };
29
+ states.set(field, state);
30
+ }
31
+ return state;
32
+ }
33
+ /** The field `self` is the AVM1 object of, where it is one's. */
34
+ function fieldOf(self) {
35
+ if (!(self instanceof avm1.Avm1Object) || self.display === null) {
36
+ return null;
37
+ }
38
+ const d = self.display.live()?.display?.target;
39
+ return d instanceof TextObject ? d : null;
40
+ }
41
+ /** The text or the field changed: drawn again, and fitted to its text under autoSize. */
42
+ function changed(field) {
43
+ field.invalidate(CONTENT);
44
+ field.fit();
45
+ }
46
+ /** Whether the field's text is read as HTML: an HTML field's, or one with a style sheet. */
47
+ const isHtml = (field) => {
48
+ const state = stateOf(field);
49
+ return state.html || state.styleSheet !== undefined;
50
+ };
51
+ /**
52
+ * HTML read into the field: under a style sheet, styled by it, and kept,
53
+ * as htmlText gives it back and a new sheet styles it again.
54
+ */
55
+ function parseHtml(field, html) {
56
+ const styles = stylesOf(stateOf(field).styleSheet);
57
+ if (styles === null) {
58
+ field.model.setHtml(html, field.multiline);
59
+ return;
60
+ }
61
+ field.htmlSource = html;
62
+ field.model.setHtml(html, field.multiline, false, (selector) => styles.get(selector) ?? null);
63
+ }
64
+ /**
65
+ * `field`'s text set: as HTML under a style sheet. The text it has already
66
+ * changes nothing, its formats included (Ruffle's set_text).
67
+ */
68
+ function setText(field, text) {
69
+ if (text === field.model.text) {
70
+ return;
71
+ }
72
+ if (stateOf(field).styleSheet !== undefined) {
73
+ parseHtml(field, text);
74
+ }
75
+ else {
76
+ field.model.setText(text);
77
+ }
78
+ changed(field);
79
+ }
80
+ /**
81
+ * `field`'s text set as HTML, as htmlText and a bound variable set it, in
82
+ * a field not HTML as its text. The HTML it has already changes nothing.
83
+ */
84
+ export function setHtmlText(field, html) {
85
+ if (html === htmlTextOf(field)) {
86
+ return;
87
+ }
88
+ if (!isHtml(field)) {
89
+ setText(field, html);
90
+ return;
91
+ }
92
+ parseHtml(field, html);
93
+ changed(field);
94
+ }
95
+ /** The field's text as HTML, the HTML a sheet styled as it was set, where it is HTML; else its text. */
96
+ export function htmlTextOf(field) {
97
+ if (!isHtml(field)) {
98
+ return field.model.text;
99
+ }
100
+ return field.htmlSource ?? field.model.toHtml();
101
+ }
102
+ /** An index as Rust's `as usize` makes a u32 of a value: wrapped to 32 bits. */
103
+ const indexOf = (v, version) => avm1.toNumber(v, version) >>> 0;
104
+ /** A colour as Flash keeps one: 24 bits of a u32. */
105
+ const rgbOf = (v, version) => (avm1.toNumber(v, version) >>> 0) & 0xffffff;
106
+ /** `_global.TextField`. */
107
+ export function textFieldClass(host) {
108
+ const realm = host.realm;
109
+ const proto = new avm1.Avm1Object(realm.objectProto);
110
+ const constr = realm.classOf(proto, (self) => self, () => undefined);
111
+ /** `_global.TextFormat.prototype`, as it is now. */
112
+ const formatProto = (version) => {
113
+ const textFormat = avm1.get(realm.global, "TextFormat", version);
114
+ return textFormat instanceof avm1.Avm1Object
115
+ ? avm1.get(textFormat, "prototype", version)
116
+ : undefined;
117
+ };
118
+ const textFormat = (format, version) => {
119
+ const p = formatProto(version);
120
+ return p instanceof avm1.Avm1Object ? newTextFormat(p, format) : undefined;
121
+ };
122
+ const method = (name, flags, fn) => {
123
+ proto.define(name, realm.method((self, args, version) => {
124
+ const field = fieldOf(self);
125
+ return field === null ? undefined : fn(field, args, version);
126
+ }), avm1.DONT_ENUM | avm1.DONT_DELETE | flags);
127
+ };
128
+ const property = (name, get, set, flags = 0) => {
129
+ const p = proto.add(name, undefined, flags);
130
+ p.get = realm.method((self, _, version) => {
131
+ const field = fieldOf(self);
132
+ return field === null ? undefined : get(field, version);
133
+ });
134
+ if (set !== null) {
135
+ p.set = realm.method((self, args, version) => {
136
+ const field = fieldOf(self);
137
+ if (field !== null) {
138
+ set(field, args[0], version);
139
+ }
140
+ return undefined;
141
+ });
142
+ }
143
+ };
144
+ const flag = (name, get, set) => property(name, get, (field, value, version) => {
145
+ set(field, avm1.toBoolean(value, version));
146
+ changed(field);
147
+ });
148
+ // The selection replaced, at the start where there is none, the caret after what came in.
149
+ method("replaceSel", avm1.VERSION_6, (field, args, version) => {
150
+ const text = avm1.stringOf(args[0], version);
151
+ const state = stateOf(field);
152
+ const [begin, end] = state.selected ? field.selection : [0, 0];
153
+ state.selected = true;
154
+ field.model.replace(begin, end, text);
155
+ field.select(begin + text.length, begin + text.length);
156
+ changed(field);
157
+ host.textChanged(field);
158
+ return undefined;
159
+ });
160
+ // [begin, end), one character from begin, or the whole text.
161
+ method("getTextFormat", avm1.VERSION_6, (field, args, version) => {
162
+ const length = field.model.text.length;
163
+ let begin = 0;
164
+ let end = length;
165
+ if (args.length > 0) {
166
+ begin = indexOf(args[0], version);
167
+ end = args.length > 1 ? indexOf(args[1], version) : begin + 1;
168
+ }
169
+ end = Math.min(end, length);
170
+ if (begin >= end) {
171
+ return textFormat(emptyFormat(), version);
172
+ }
173
+ return textFormat(field.model.formatOf(begin, end), version);
174
+ });
175
+ method("setTextFormat", avm1.VERSION_6, (field, args, version) => {
176
+ const length = field.model.text.length;
177
+ let begin = 0;
178
+ let end = length;
179
+ let format;
180
+ if (args.length >= 3) {
181
+ begin = indexOf(args[0], version);
182
+ end = indexOf(args[1], version);
183
+ format = args[2];
184
+ }
185
+ else if (args.length === 2) {
186
+ begin = indexOf(args[0], version);
187
+ end = begin + 1;
188
+ format = args[1];
189
+ }
190
+ else if (args.length === 1) {
191
+ format = args[0];
192
+ }
193
+ else {
194
+ return undefined;
195
+ }
196
+ const change = formatOf(format);
197
+ end = Math.min(end, length);
198
+ if (change !== null && begin < end) {
199
+ field.model.setFormat(change, begin, end);
200
+ changed(field);
201
+ }
202
+ return undefined;
203
+ });
204
+ method("removeTextField", avm1.VERSION_6, (field) => {
205
+ host.remove(field);
206
+ return undefined;
207
+ });
208
+ method("getNewTextFormat", avm1.VERSION_6, (field, _, version) => textFormat(field.model.defaultFormat, version));
209
+ method("setNewTextFormat", avm1.VERSION_6, (field, args) => {
210
+ const change = formatOf(args[0]);
211
+ if (change !== null) {
212
+ field.model.defaultFormat = applied(field.model.defaultFormat, change);
213
+ }
214
+ return undefined;
215
+ });
216
+ method("getDepth", avm1.READ_ONLY | avm1.VERSION_6, (field) => field.depth === null ? undefined : field.depth - DEPTH_BIAS);
217
+ // The indices as Rust casts them to usize, NaN and below 0 to 0; a range backwards is none.
218
+ method("replaceText", avm1.VERSION_7, (field, args, version) => {
219
+ const model = field.model;
220
+ const usize = (v) => Math.max(0, Math.trunc(avm1.toNumber(v, version)) || 0);
221
+ const from = usize(args[0]);
222
+ const to = usize(args[1]);
223
+ const text = avm1.stringOf(args[2], version);
224
+ if (to < from) {
225
+ return undefined;
226
+ }
227
+ model.replace(Math.min(from, model.text.length), Math.min(to, model.text.length), text);
228
+ changed(field);
229
+ return undefined;
230
+ });
231
+ // An unknown one is left as it was.
232
+ property("gridFitType", (field) => field.gridFitType, (field, value, version) => {
233
+ const type = avm1.stringOf(value, version);
234
+ if (type === "pixel" || type === "subpixel" || type === "none") {
235
+ field.gridFitType = type;
236
+ field.invalidate(CONTENT);
237
+ }
238
+ }, avm1.VERSION_8);
239
+ property("antiAliasType", (field) => field.antiAliasType, (field, value, version) => {
240
+ const type = avm1.stringOf(value, version);
241
+ if ((type === "normal" || type === "advanced") && type !== field.antiAliasType) {
242
+ field.antiAliasType = type;
243
+ changed(field);
244
+ }
245
+ }, avm1.VERSION_8);
246
+ property("thickness", (field) => field.thickness, (field, value, version) => {
247
+ field.thickness = Math.fround(avm1.toNumber(value, version));
248
+ field.invalidate(CONTENT);
249
+ }, avm1.VERSION_8);
250
+ property("sharpness", (field) => field.sharpness, (field, value, version) => {
251
+ field.sharpness = Math.fround(avm1.toNumber(value, version));
252
+ field.invalidate(CONTENT);
253
+ }, avm1.VERSION_8);
254
+ // No AS2 filter draws yet: a field has none, and takes none.
255
+ property("filters", (_, version) => realm.newArray([], version), () => { }, avm1.DONT_DELETE | avm1.VERSION_8);
256
+ property("scroll", (field) => field.scrollV,
257
+ // NaN, a negative line and one past where Flash's count overflows are the first (Ruffle).
258
+ (field, value, version) => {
259
+ const n = avm1.toNumber(value, version);
260
+ const line = Number.isNaN(n) || n < 0 || n >= 767100486418433 ? 1 : Math.trunc(n);
261
+ field.scrollV = Math.max(1, Math.min(line, maxScrollV(field)));
262
+ field.invalidate(CONTENT);
263
+ });
264
+ property("maxscroll", (field) => maxScrollV(field), null);
265
+ property("borderColor", (field) => field.borderColor, (field, value, version) => {
266
+ field.borderColor = rgbOf(value, version);
267
+ changed(field);
268
+ });
269
+ property("backgroundColor", (field) => field.backgroundColor, (field, value, version) => {
270
+ field.backgroundColor = rgbOf(value, version);
271
+ changed(field);
272
+ });
273
+ // The new text's colour, and every character's.
274
+ property("textColor", (field) => field.model.defaultFormat.color, (field, value, version) => {
275
+ const color = rgbOf(value, version);
276
+ const model = field.model;
277
+ const change = emptyFormat();
278
+ change.color = color;
279
+ model.setFormat(change, 0, model.text.length);
280
+ model.defaultFormat = { ...model.defaultFormat, color };
281
+ changed(field);
282
+ });
283
+ // A u32, kept as an int; nothing is none.
284
+ property("tabIndex", (field) => {
285
+ const index = stateOf(field).tabIndex;
286
+ return index === undefined ? undefined : index >>> 0;
287
+ }, (field, value, version) => {
288
+ stateOf(field).tabIndex =
289
+ value === undefined || value === null ? undefined : avm1.toNumber(value, version) | 0;
290
+ });
291
+ property("autoSize", (field) => field.autoSize, (field, value, version) => {
292
+ let mode = "none";
293
+ if (typeof value === "boolean") {
294
+ mode = value ? "left" : "none";
295
+ }
296
+ else {
297
+ const name = avm1.stringOf(value, version).toLowerCase();
298
+ mode = name === "left" || name === "center" || name === "right" ? name : "none";
299
+ }
300
+ field.autoSize = mode;
301
+ field.fit();
302
+ });
303
+ property("text", (field) => field.model.text, (field, value, version) => {
304
+ setText(field, avm1.stringOf(value, version));
305
+ host.textChanged(field);
306
+ });
307
+ // Anything but input or dynamic, in any case, leaves it.
308
+ property("type", (field) => field.type, (field, value, version) => {
309
+ const type = avm1.stringOf(value, version).toLowerCase();
310
+ if (type === "input" || type === "dynamic") {
311
+ field.type = type;
312
+ changed(field);
313
+ }
314
+ });
315
+ // Read as HTML only in an HTML field; it does not change a bound variable.
316
+ property("htmlText", (field) => htmlTextOf(field), (field, value, version) => setHtmlText(field, avm1.stringOf(value, version)));
317
+ // None is null.
318
+ property("variable", (field) => stateOf(field).variable, (field, value, version) => {
319
+ const name = value === undefined || value === null ? null : avm1.stringOf(value, version);
320
+ stateOf(field).variable = name === "" ? null : name;
321
+ host.variableChanged(field);
322
+ });
323
+ property("hscroll", (field) => field.scrollH, (field, value, version) => {
324
+ field.scrollH = Math.max(0, avm1.toNumber(value, version) | 0);
325
+ field.invalidate(CONTENT);
326
+ });
327
+ property("maxhscroll", (field) => maxHScroll(field), null);
328
+ // None is null.
329
+ property("maxChars", (field) => (field.maxChars === 0 ? null : field.maxChars), (field, value, version) => {
330
+ field.maxChars = avm1.toNumber(value, version) | 0;
331
+ });
332
+ flag("embedFonts", (field) => field.embedFonts, (field, v) => {
333
+ field.embedFonts = v;
334
+ });
335
+ property("html", (field) => stateOf(field).html, (field, value, version) => {
336
+ stateOf(field).html = avm1.toBoolean(value, version);
337
+ });
338
+ flag("border", (field) => field.border, (field, v) => {
339
+ field.border = v;
340
+ });
341
+ flag("background", (field) => field.background, (field, v) => {
342
+ field.background = v;
343
+ });
344
+ flag("wordWrap", (field) => field.wordWrap, (field, v) => {
345
+ field.wordWrap = v;
346
+ });
347
+ flag("password", (field) => field.displayAsPassword, (field, v) => {
348
+ field.displayAsPassword = v;
349
+ });
350
+ flag("multiline", (field) => field.multiline, (field, v) => {
351
+ field.multiline = v;
352
+ });
353
+ flag("selectable", (field) => field.selectable, (field, v) => {
354
+ field.selectable = v;
355
+ });
356
+ property("length", (field) => field.model.text.length, null);
357
+ property("bottomScroll", (field) => field.scrollV + shownLines(field, field.scrollV - 1) - 1, null);
358
+ // In whole pixels, cut.
359
+ property("textWidth", (field) => Math.trunc(field.layout.width / 20), null);
360
+ property("textHeight", (field) => Math.trunc(field.layout.height / 20), null);
361
+ // None, and an empty one, is null.
362
+ property("restrict", (field) => field.restrict, (field, value, version) => {
363
+ const restrict = value === undefined || value === null ? "" : avm1.stringOf(value, version);
364
+ field.restrict = restrict === "" ? null : restrict;
365
+ });
366
+ flag("condenseWhite", (field) => field.condenseWhite, (field, v) => {
367
+ field.condenseWhite = v;
368
+ });
369
+ flag("mouseWheelEnabled", (field) => field.mouseWheelEnabled, (field, v) => {
370
+ field.mouseWheelEnabled = v;
371
+ });
372
+ // Any object but a clip, and nothing for anything else (Ruffle, whose clips are values of
373
+ // their own). The HTML a sheet styled is styled again by a new one, and forgotten with
374
+ // none (Ruffle's set_style_sheet).
375
+ property("styleSheet", (field) => stateOf(field).styleSheet, (field, value) => {
376
+ const sheet = value instanceof avm1.Avm1Object && value.typeOf() !== "movieclip";
377
+ stateOf(field).styleSheet = sheet ? value : undefined;
378
+ if (stateOf(field).styleSheet === undefined) {
379
+ field.htmlSource = null;
380
+ }
381
+ else if (field.htmlSource !== null) {
382
+ parseHtml(field, field.htmlSource);
383
+ }
384
+ changed(field);
385
+ });
386
+ filtersProperty(realm, proto, avm1.DONT_DELETE | avm1.VERSION_8, (self) => fieldOf(self), () => host.filterFaces);
387
+ return { constr, proto };
388
+ }
389
+ /** How far the text scrolls sideways: its width past the field's, in whole pixels. */
390
+ function maxHScroll(field) {
391
+ if (field.wordWrap) {
392
+ return 0;
393
+ }
394
+ const over = field.layout.width / 20 + 4 - field.width;
395
+ return over > 0 ? Math.trunc(over) : 0;
396
+ }