@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,319 @@
1
+ // Text editing shared by AVM1 and AVM2; each supplies its own notifications.
2
+ // After Ruffle's edit_text.rs and EditTextRestrict (https://github.com/ruffle-rs/ruffle):
3
+ // MIT OR Apache-2.0, Copyright (c) 2018-2022 Ruffle LLC and Ruffle contributors.
4
+ import { CONTENT } from "../display/display.js";
5
+ import { GUTTER } from "../text/layout.js";
6
+ const BACKSPACE = 8;
7
+ const ENTER = 13;
8
+ const END = 35;
9
+ const HOME = 36;
10
+ const LEFT = 37;
11
+ const UP = 38;
12
+ const RIGHT = 39;
13
+ const DOWN = 40;
14
+ const DELETE = 46;
15
+ /**
16
+ * The characters `text` is typed as under `restrict`, as Ruffle parses it
17
+ * (EditTextRestrict): null any; empty none; characters and ranges allowed,
18
+ * each `^` switching to those disallowed and back, a leading one first
19
+ * allowing all; `-` a range, from U+0000 where nothing is before it, its
20
+ * first character alone where nothing follows or it runs backwards; `\`
21
+ * the next character as itself. A letter it refuses is tried in the other
22
+ * case, ASCII only.
23
+ */
24
+ export function restrictText(restrict, text) {
25
+ if (restrict === null) {
26
+ return text;
27
+ }
28
+ const { allowed, disallowed } = parseRestrict(restrict);
29
+ const ok = (c) => allowed.some(([a, b]) => c >= a && c <= b) && !disallowed.some(([a, b]) => c >= a && c <= b);
30
+ let out = "";
31
+ for (const c of text) {
32
+ const candidates = [
33
+ c,
34
+ /[a-z]/.test(c) ? c.toUpperCase() : c,
35
+ /[A-Z]/.test(c) ? c.toLowerCase() : c,
36
+ ];
37
+ const chosen = candidates.find(ok);
38
+ if (chosen !== undefined) {
39
+ out += chosen;
40
+ }
41
+ }
42
+ return out;
43
+ }
44
+ function parseRestrict(restrict) {
45
+ const allowed = [];
46
+ const disallowed = [];
47
+ if (restrict === "") {
48
+ return { allowed, disallowed };
49
+ }
50
+ // Tokens: a character, or "-" and "^" unescaped; a trailing "\" is dropped.
51
+ const tokens = [];
52
+ const chars = [...restrict];
53
+ for (let i = 0; i < chars.length; i++) {
54
+ const c = chars[i];
55
+ if (c === "\\") {
56
+ if (i + 1 < chars.length) {
57
+ tokens.push(chars[++i]);
58
+ }
59
+ }
60
+ else if (c === "-" || c === "^") {
61
+ tokens.push({ op: c });
62
+ }
63
+ else {
64
+ tokens.push(c);
65
+ }
66
+ }
67
+ let current = [];
68
+ let last = null;
69
+ let allowing = true;
70
+ while (tokens.length > 0) {
71
+ const t = tokens.shift();
72
+ if (typeof t === "string") {
73
+ current.push([t, t]);
74
+ last = t;
75
+ continue;
76
+ }
77
+ if (t.op === "^") {
78
+ if (allowing) {
79
+ if (current.length === 0 && allowed.length === 0) {
80
+ allowed.push(["\0", "\u{10FFFF}"]);
81
+ }
82
+ else {
83
+ allowed.push(...current);
84
+ }
85
+ }
86
+ else {
87
+ disallowed.push(...current);
88
+ }
89
+ current = [];
90
+ allowing = !allowing;
91
+ last = null;
92
+ continue;
93
+ }
94
+ let start = "\0";
95
+ if (last !== null) {
96
+ current.pop();
97
+ start = last;
98
+ }
99
+ let end = start;
100
+ if (typeof tokens[0] === "string") {
101
+ end = tokens.shift();
102
+ }
103
+ current.push([start, end > start ? end : start]);
104
+ last = null;
105
+ }
106
+ (allowing ? allowed : disallowed).push(...current);
107
+ return { allowed, disallowed };
108
+ }
109
+ /** Edits a field, with the movie's input and change notifications. */
110
+ export class TextEditor {
111
+ changed;
112
+ input;
113
+ constructor(changed, input) {
114
+ this.changed = changed;
115
+ this.input = input;
116
+ }
117
+ /**
118
+ * A key's edit of the focused field: a character typed, a deletion, or
119
+ * the caret moved; a selectable field that takes no typing moves its
120
+ * caret and selection alone.
121
+ */
122
+ edit(field, k) {
123
+ const length = field.model.text.length;
124
+ const [begin, end] = field.selection;
125
+ const caret = field.caret;
126
+ const shortcut = !!k.ctrlKey && !k.altKey;
127
+ if (k.keyCode === UP || k.keyCode === DOWN) {
128
+ const to = lineMove(field, caret, k.keyCode === UP ? -1 : 1);
129
+ field.select(k.shiftKey ? field.anchor : to, to);
130
+ return true;
131
+ }
132
+ if (k.keyCode === LEFT || k.keyCode === RIGHT || k.keyCode === HOME || k.keyCode === END) {
133
+ const collapse = begin !== end && !k.shiftKey;
134
+ const to = k.keyCode === HOME
135
+ ? 0
136
+ : k.keyCode === END
137
+ ? length
138
+ : k.keyCode === LEFT
139
+ ? collapse
140
+ ? begin
141
+ : Math.max(0, caret - 1)
142
+ : collapse
143
+ ? end
144
+ : Math.min(length, caret + 1);
145
+ field.select(k.shiftKey ? field.anchor : to, to);
146
+ return true;
147
+ }
148
+ if (field.type !== "input") {
149
+ return false;
150
+ }
151
+ if (k.keyCode === BACKSPACE || k.keyCode === DELETE) {
152
+ const from = begin !== end ? begin : k.keyCode === BACKSPACE ? Math.max(0, caret - 1) : caret;
153
+ const to = begin !== end ? end : k.keyCode === DELETE ? Math.min(length, caret + 1) : caret;
154
+ if (from < to) {
155
+ this.replace(field, from, to, "");
156
+ }
157
+ return true;
158
+ }
159
+ if (shortcut) {
160
+ return false;
161
+ }
162
+ const text = k.keyCode === ENTER
163
+ ? field.multiline
164
+ ? "\r"
165
+ : ""
166
+ : k.charCode >= 32 && k.charCode <= 0x10ffff
167
+ ? String.fromCodePoint(k.charCode)
168
+ : "";
169
+ return text !== "" && this.type(field, text);
170
+ }
171
+ /**
172
+ * Typed text, as Ruffle takes it: nothing where maxChars leaves no room;
173
+ * else the input notification, which may cancel it, then what restrict
174
+ * lets through, cut to the room left, over the selection, and the change notification.
175
+ */
176
+ type(field, text) {
177
+ const room = () => {
178
+ const [b, e] = field.selection;
179
+ return field.maxChars > 0 ? field.maxChars - (field.model.text.length - (e - b)) : Infinity;
180
+ };
181
+ if (room() <= 0) {
182
+ return true;
183
+ }
184
+ const filtered = restrictText(field.restrict, text);
185
+ const [begin, end] = field.selection;
186
+ if (this.input && !this.input(field, text)) {
187
+ return true;
188
+ }
189
+ // The selection from before the event, within the text a listener may have shortened.
190
+ const length = field.model.text.length;
191
+ const from = Math.min(begin, length);
192
+ this.replace(field, from, Math.min(end, length), filtered.slice(0, Math.max(0, room())));
193
+ return true;
194
+ }
195
+ /** [from, to) of the field's text as `text`, the caret after it, and the change notification. */
196
+ replace(field, from, to, text) {
197
+ field.model.replace(from, to, text);
198
+ field.select(from + text.length, from + text.length);
199
+ field.invalidate(CONTENT);
200
+ this.changed(field);
201
+ }
202
+ }
203
+ /**
204
+ * Pasted text as a field takes it, as Ruffle's text_input: its line breaks
205
+ * as Flash's "\r", none at all in a single-line field, and no other
206
+ * control characters.
207
+ */
208
+ export function pasteable(multiline, text) {
209
+ const lines = text.replace(/\r\n?|\n/g, multiline ? "\r" : "");
210
+ // A control character other than "\r".
211
+ return lines.replace(/[^\P{Cc}\r]/gu, "");
212
+ }
213
+ /** The caret one line up (-1) or down (1) from `caret`, at the same x, or the text's start or end past the first or last. */
214
+ function lineMove(field, caret, by) {
215
+ const lines = field.layout.lines;
216
+ if (lines.length === 0) {
217
+ return 0;
218
+ }
219
+ const at = lines.findIndex((l) => caret < l.end);
220
+ const i = at < 0 ? lines.length - 1 : at;
221
+ const target = i + by;
222
+ if (target < 0) {
223
+ return 0;
224
+ }
225
+ if (target >= lines.length) {
226
+ return field.model.text.length;
227
+ }
228
+ const line = lines[i];
229
+ const c = line.chars[caret - line.start];
230
+ const x = c ? c.x : line.x + line.width;
231
+ const to = lines[target];
232
+ for (const ch of to.chars) {
233
+ if (ch.shown && x < ch.x + ch.advance / 2) {
234
+ return ch.index;
235
+ }
236
+ }
237
+ const text = field.model.text;
238
+ return to.end > to.start && (text[to.end - 1] === "\r" || text[to.end - 1] === "\n")
239
+ ? to.end - 1
240
+ : to.end;
241
+ }
242
+ /** The caret index nearest (x, y), in twips in the field: the nearer side of the character there, or its line's end. */
243
+ export function caretAt(field, x, y) {
244
+ const layout = field.layout;
245
+ if (layout.lines.length === 0) {
246
+ return 0;
247
+ }
248
+ const first = Math.min(Math.max(0, field.scrollV - 1), layout.lines.length - 1);
249
+ const dy = field.top * 20 - (layout.lines[first].y - GUTTER);
250
+ const dx = field.left * 20 - field.scrollH * 20;
251
+ let line = layout.lines[layout.lines.length - 1];
252
+ for (const l of layout.lines) {
253
+ if (y < dy + l.y + l.ascent + l.descent) {
254
+ line = l;
255
+ break;
256
+ }
257
+ }
258
+ for (const c of line.chars) {
259
+ if (c.shown && x < dx + c.x + c.advance / 2) {
260
+ return c.index;
261
+ }
262
+ }
263
+ // Past the line's last character: before the newline that ends it, if any.
264
+ const text = field.model.text;
265
+ return line.end > line.start && (text[line.end - 1] === "\r" || text[line.end - 1] === "\n")
266
+ ? line.end - 1
267
+ : line.end;
268
+ }
269
+ const words = new Intl.Segmenter(undefined, { granularity: "word" });
270
+ const blank = (t) => t.trim() === "";
271
+ /**
272
+ * What a click at `position` selects, as Ruffle's: the point itself, a
273
+ * double click's word, a triple click's line, from newline to newline.
274
+ * A word stops at whitespace on either side of the point.
275
+ */
276
+ export function selectionAt(field, position, clicks) {
277
+ const text = field.model.text;
278
+ if (clicks <= 1) {
279
+ return [position, position];
280
+ }
281
+ if (clicks === 2) {
282
+ const head = text.slice(0, position);
283
+ let from = 0;
284
+ if (head !== "" && blank(head[head.length - 1])) {
285
+ from = position;
286
+ }
287
+ else {
288
+ for (const w of words.segment(head)) {
289
+ if (!blank(w.segment)) {
290
+ from = w.index;
291
+ }
292
+ }
293
+ }
294
+ let to = text.length;
295
+ const tail = text.slice(position);
296
+ if (tail !== "" && blank(tail[0])) {
297
+ to = position;
298
+ }
299
+ else {
300
+ for (const w of words.segment(tail)) {
301
+ if (!blank(w.segment)) {
302
+ to = position + w.index + w.segment.length;
303
+ break;
304
+ }
305
+ }
306
+ }
307
+ return [from, to];
308
+ }
309
+ const newline = (c) => c === "\r" || c === "\n";
310
+ let from = position;
311
+ while (from > 0 && !newline(text[from - 1])) {
312
+ from--;
313
+ }
314
+ let to = position;
315
+ while (to < text.length && !newline(text[to])) {
316
+ to++;
317
+ }
318
+ return [from, to];
319
+ }
@@ -0,0 +1,209 @@
1
+ // Touches enter here, a point at a time, as the browser's pointer events
2
+ // give them. The primary touch moves the mouse, as Flash moves it for
3
+ // the first finger down whatever Multitouch.inputMode is, and in
4
+ // touchPoint mode every touch is a TouchEvent's too, in the mouse's
5
+ // order: a move, then out, over and rolls as the point moves on and off
6
+ // objects; over and rolls, then a begin; an end, and a tap where it ends
7
+ // on the object it began on. Each step's touch events come before its
8
+ // mouse events (docs/architecture/input.md, Touch).
9
+ import { toStage } from "../display/bounds.js";
10
+ import { apply, invert } from "../display/geometry.js";
11
+ import { dispatchEvent } from "../scripting/events.js";
12
+ import { pointerTarget } from "./pointer.js";
13
+ export class TouchInput {
14
+ stage;
15
+ scripting;
16
+ pointer;
17
+ /** How many touch events may show before the next frame: a begin or an end, as a press. */
18
+ redraws = 0;
19
+ points = new Map();
20
+ /** Each point's latest move, handled at the next flush as the pointer's are. */
21
+ moved = new Map();
22
+ /** The point that moves the mouse, until it ends. */
23
+ primary = null;
24
+ constructor(stage, scripting, pointer) {
25
+ this.stage = stage;
26
+ this.scripting = scripting;
27
+ this.pointer = pointer;
28
+ }
29
+ /** A move to handle at the next flush, as PointerInput.post. */
30
+ post(t) {
31
+ this.moved.set(t.id, t);
32
+ }
33
+ flush() {
34
+ if (this.moved.size === 0) {
35
+ return;
36
+ }
37
+ const moves = [...this.moved.values()];
38
+ this.moved.clear();
39
+ for (const t of moves) {
40
+ this.handle("move", t);
41
+ }
42
+ }
43
+ /** A touch begun, moved, lifted or taken back by the browser ("cancel"), which ends it without a tap or a click. */
44
+ handle(type, t) {
45
+ if (type === "move") {
46
+ this.moved.delete(t.id);
47
+ }
48
+ else {
49
+ this.flush();
50
+ }
51
+ let point = this.points.get(t.id);
52
+ if (type === "begin") {
53
+ // An id begun again whose end never came: what it was over hears it go first.
54
+ if (point) {
55
+ this.drop(t.id, point, t);
56
+ }
57
+ point = { over: null, began: null };
58
+ this.points.set(t.id, point);
59
+ // The browser's primary, as Flash's: the first finger down while none was.
60
+ if (t.primary) {
61
+ this.primary = t.id;
62
+ }
63
+ }
64
+ // A point whose begin the player missed, as one pressed before it bound.
65
+ if (!point) {
66
+ return;
67
+ }
68
+ const primary = this.primary === t.id;
69
+ const s = this.scripting;
70
+ if (s.inputMode === "touchPoint") {
71
+ this.touchEvents(type, t, point, primary);
72
+ }
73
+ if (primary && (s.inputMode !== "touchPoint" || s.mapTouchToMouse)) {
74
+ this.mouse(type, t);
75
+ }
76
+ if (type === "end" || type === "cancel") {
77
+ this.points.delete(t.id);
78
+ if (primary) {
79
+ this.primary = null;
80
+ }
81
+ }
82
+ }
83
+ /** Let go of a point that never ended: out of what it is over, and the mouse it pressed released where it is. */
84
+ drop(id, point, t) {
85
+ const primary = this.primary === id;
86
+ const s = this.scripting;
87
+ if (s.inputMode === "touchPoint") {
88
+ this.hover(point, null, t, primary);
89
+ }
90
+ if (primary) {
91
+ this.primary = null;
92
+ if (s.inputMode !== "touchPoint" || s.mapTouchToMouse) {
93
+ this.pointer.handle("up", {
94
+ x: s.mouseStageX,
95
+ y: s.mouseStageY,
96
+ button: 0,
97
+ buttons: 0,
98
+ canceled: true,
99
+ });
100
+ }
101
+ }
102
+ this.points.delete(id);
103
+ }
104
+ /** The mouse events of the primary touch: a press is a move there and a press, as a mouse's would be. */
105
+ mouse(type, t) {
106
+ const p = {
107
+ x: t.x,
108
+ y: t.y,
109
+ button: 0,
110
+ buttons: type === "begin" || type === "move" ? 1 : 0,
111
+ altKey: t.altKey,
112
+ ctrlKey: t.ctrlKey,
113
+ shiftKey: t.shiftKey,
114
+ time: t.time,
115
+ };
116
+ // A press where the mouse was elsewhere moves it there first, as Flash Player 32 did
117
+ // under a browser's touch emulation, and as it does for a mouse's press.
118
+ switch (type) {
119
+ case "begin":
120
+ this.pointer.handle("down", p);
121
+ break;
122
+ case "move":
123
+ this.pointer.handle("move", p);
124
+ break;
125
+ default:
126
+ this.pointer.handle("up", { ...p, canceled: type === "cancel" });
127
+ }
128
+ }
129
+ touchEvents(type, t, point, primary) {
130
+ const s = this.scripting;
131
+ const target = pointerTarget(this.stage, t.x, t.y, s.stageViewportWidth || s.stageWidth, s.stageViewportHeight || s.stageHeight, undefined, s.stageViewportX, s.stageViewportY);
132
+ // The empty stage takes the point's events, but no one is over it, as for the mouse.
133
+ const over = target === this.stage ? null : target;
134
+ // A move first, then the hover, in the mouse's order.
135
+ if (type === "move") {
136
+ if (target) {
137
+ this.send("touchMove", target, t, primary);
138
+ }
139
+ this.hover(point, over, t, primary);
140
+ return;
141
+ }
142
+ this.hover(point, over, t, primary);
143
+ this.redraws++;
144
+ if (type === "begin") {
145
+ point.began = target;
146
+ // A touch's begin and end are a user's gesture, as a press and a release are.
147
+ if (target) {
148
+ s.clipboard.gesture(() => this.send("touchBegin", target, t, primary));
149
+ }
150
+ return;
151
+ }
152
+ const canceled = type === "cancel";
153
+ s.clipboard.gesture(() => {
154
+ if (target) {
155
+ this.send("touchEnd", target, t, primary, true, null, canceled);
156
+ }
157
+ if (target && target === point.began && !canceled) {
158
+ this.send("touchTap", target, t, primary);
159
+ }
160
+ });
161
+ // A lifted finger is over nothing any more, unlike a mouse.
162
+ this.hover(point, null, t, primary);
163
+ }
164
+ /** Move the point's hover to `target`: out and roll outs from what it was over, roll overs and over on what it is. */
165
+ hover(point, target, t, primary) {
166
+ const previous = point.over;
167
+ if (target === previous) {
168
+ return;
169
+ }
170
+ const entered = new Set();
171
+ for (let d = target; d; d = d.parent) {
172
+ entered.add(d);
173
+ }
174
+ let common = this.stage;
175
+ if (previous && target) {
176
+ for (let d = previous; d; d = d.parent) {
177
+ if (entered.has(d)) {
178
+ common = d;
179
+ break;
180
+ }
181
+ }
182
+ }
183
+ if (previous) {
184
+ this.send("touchOut", previous, t, primary, true, target);
185
+ for (let d = previous; d && d !== common; d = d.parent) {
186
+ this.send("touchRollOut", d, t, primary, false, target);
187
+ }
188
+ }
189
+ if (target) {
190
+ for (let d = target; d && d !== common; d = d.parent) {
191
+ this.send("touchRollOver", d, t, primary, false, previous);
192
+ }
193
+ this.send("touchOver", target, t, primary, true, previous);
194
+ }
195
+ point.over = target;
196
+ }
197
+ send(type, target, t, primary, bubbles = true, related = null, canceled = false) {
198
+ if (!target.object) {
199
+ return;
200
+ }
201
+ const m = invert(toStage(target, this.stage));
202
+ const [x, y] = m ? apply(m, t.x, t.y) : [Number.NaN, Number.NaN];
203
+ const s = this.scripting;
204
+ const event = s.rt.construct(s.rt.classNamed("flash.events::TouchEvent"), type, bubbles, false, t.id, primary, x, y, t.width ?? Number.NaN, t.height ?? Number.NaN, t.pressure ?? Number.NaN, related?.object ?? null, !!t.ctrlKey, !!t.altKey, !!t.shiftKey,
205
+ // AIR's own: commandKey, controlKey, timestamp, touchIntent, samples, isTouchPointCanceled.
206
+ false, !!t.ctrlKey, Number.NaN, "unknown", null, canceled);
207
+ dispatchEvent(s, target.object, event);
208
+ }
209
+ }
@@ -0,0 +1,90 @@
1
+ // LocalConnection's registry is shared by the VMs of one player. Delivery
2
+ // uses their existing host-event queues: an idle registry does no frame work.
3
+ export const LOCAL_MESSAGE_LIMIT = 40 * 1024;
4
+ const lower = (name) => name.replace(/[A-Z]/g, (c) => c.toLowerCase());
5
+ export function localDomain(url) {
6
+ try {
7
+ const parsed = new URL(url);
8
+ return {
9
+ domain: parsed.protocol === "file:" || !parsed.hostname ? "localhost" : parsed.hostname,
10
+ secure: parsed.protocol === "https:",
11
+ };
12
+ }
13
+ catch {
14
+ return { domain: "localhost", secure: false };
15
+ }
16
+ }
17
+ export function localMethodAllowed(name) {
18
+ switch (name) {
19
+ case "send":
20
+ case "connect":
21
+ case "close":
22
+ case "allowDomain":
23
+ case "allowInsecureDomain":
24
+ case "domain":
25
+ return false;
26
+ default:
27
+ return name.length !== 0;
28
+ }
29
+ }
30
+ export class LocalConnections {
31
+ listeners = new Map();
32
+ connect(endpoint, name) {
33
+ if (!endpoint.alive() || endpoint.key !== null || name === "" || name.includes(":")) {
34
+ return false;
35
+ }
36
+ const key = lower(name.startsWith("_") ? name : `${endpoint.domain}:${name}`);
37
+ const previous = this.listeners.get(key);
38
+ if (previous?.alive()) {
39
+ return false;
40
+ }
41
+ if (previous) {
42
+ previous.key = null;
43
+ }
44
+ this.listeners.set(key, endpoint);
45
+ endpoint.key = key;
46
+ return true;
47
+ }
48
+ close(endpoint) {
49
+ const key = endpoint.key;
50
+ if (key === null) {
51
+ return false;
52
+ }
53
+ this.listeners.delete(key);
54
+ endpoint.key = null;
55
+ return true;
56
+ }
57
+ send(source, name, method, message) {
58
+ const key = lower(name.startsWith("_") || name.includes(":") ? name : `${source.domain}:${name}`);
59
+ // A receiver must exist both now and at delivery; another may replace it meanwhile.
60
+ const existed = this.listeners.get(key)?.alive() ?? false;
61
+ source.defer(() => {
62
+ if (!source.alive()) {
63
+ return;
64
+ }
65
+ const receiver = existed ? this.listeners.get(key) : undefined;
66
+ if (!receiver?.alive()) {
67
+ source.status(false);
68
+ return;
69
+ }
70
+ try {
71
+ source.status(true);
72
+ }
73
+ finally {
74
+ if (receiver.alive() &&
75
+ source.domain !== "" &&
76
+ receiver.domain !== "" &&
77
+ receiver.allows(source)) {
78
+ receiver.receive(method, message);
79
+ }
80
+ }
81
+ });
82
+ }
83
+ destroy(owner) {
84
+ for (const endpoint of this.listeners.values()) {
85
+ if (endpoint.owner === owner) {
86
+ this.close(endpoint);
87
+ }
88
+ }
89
+ }
90
+ }