@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,581 @@
1
+ // Date, as avmplus' DateClass and Date: the time a Date holds, its fields
2
+ // by the indices Date.as asks for, the setters, its strings in avmplus'
3
+ // formats, which are not JavaScript's, and its own parser of them for
4
+ // Date.parse and new Date(string).
5
+ //
6
+ // The calendar is avmplus' own arithmetic, not JavaScript's Date: avmplus
7
+ // clips only some results to the time domain, and casts years and seconds
8
+ // to 32-bit ints, which wrap where JavaScript would give NaN. Local time is
9
+ // avmshell's on a POSIX host: the standard offset of now, plus an hour
10
+ // where the host's time zone says daylight saving is in effect, asked of the
11
+ // host (here through JavaScript's Date) with the time in 32-bit seconds.
12
+ // So no zone's history beyond its daylight saving applies, and none after
13
+ // 2038. Flash on Windows (WinPortUtils) applies the zone's rule of today
14
+ // to every year instead, 1900 and 2050 alike; avmshell is the reference.
15
+ //
16
+ // The calendar, local time and parseDate are translated from avmplus'
17
+ // core/Date.cpp, core/DateClass.cpp and VMPI/PosixPortUtils.cpp, and so subject
18
+ // to the Mozilla Public License, v. 2.0: http://mozilla.org/MPL/2.0/.
19
+ const AS3 = "http://adobe.com/AS3/2006/builtin";
20
+ const MONTHS = "JanFebMarAprMayJunJulAugSepOctNovDec";
21
+ const DAYS = "SunMonTueWedThuFriSat";
22
+ const MS_PER_DAY = 86400000;
23
+ const MS_PER_HOUR = 3600000;
24
+ const MS_PER_MINUTE = 60000;
25
+ const MS_PER_SECOND = 1000;
26
+ /** A double cast to a C int on x86: INT_MIN for NaN and anything out of range. */
27
+ function cInt(x) {
28
+ return x >= -2147483648 && x < 2147483648 ? Math.trunc(x) | 0 : -2147483648;
29
+ }
30
+ /** As MathUtils::toInt: ToInteger, but infinities kept. */
31
+ function toInt(x) {
32
+ if (Number.isNaN(x)) {
33
+ return 0;
34
+ }
35
+ return Number.isFinite(x) ? Math.trunc(x) : x;
36
+ }
37
+ /** As Date::TimeClip: NaN beyond 8.64e15 milliseconds, else an integer. */
38
+ function timeClip(t) {
39
+ if (!Number.isFinite(t) || Math.abs(t) > 8.64e15) {
40
+ return Number.NaN;
41
+ }
42
+ return Math.trunc(t) + 0;
43
+ }
44
+ const MONTH_OFFSET = [
45
+ [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365],
46
+ [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366],
47
+ ];
48
+ const day = (t) => Math.floor(t / MS_PER_DAY);
49
+ const dayFromYear = (year) => 365 * (year - 1970) +
50
+ Math.floor((year - 1969) / 4) -
51
+ Math.floor((year - 1901) / 100) +
52
+ Math.floor((year - 1601) / 400);
53
+ const timeFromYear = (year) => MS_PER_DAY * dayFromYear(year);
54
+ /** As IsLeapYear, of an int: 1 or 0, to index MONTH_OFFSET. */
55
+ const leap = (year) => year % 4 !== 0 ? 0 : year % 100 !== 0 ? 1 : year % 400 !== 0 ? 0 : 1;
56
+ function yearFromTime(t) {
57
+ const d = day(t);
58
+ let lo = (cInt(Math.floor(t < 0 ? d / 365 : d / 366)) + 1970) | 0;
59
+ let hi = (cInt(Math.ceil(t < 0 ? d / 366 : d / 365)) + 1970) | 0;
60
+ while (lo < hi) {
61
+ const pivot = cInt((lo + hi) / 2);
62
+ const pivotTime = timeFromYear(pivot);
63
+ if (pivotTime <= t) {
64
+ if (timeFromYear((pivot + 1) | 0) > t) {
65
+ return pivot;
66
+ }
67
+ lo = (pivot + 1) | 0;
68
+ }
69
+ else {
70
+ hi = (pivot - 1) | 0;
71
+ }
72
+ }
73
+ return lo;
74
+ }
75
+ const dayWithinYear = (t) => cInt(day(t) - dayFromYear(yearFromTime(t)));
76
+ function monthFromTime(t) {
77
+ const d = dayWithinYear(t);
78
+ const offsets = MONTH_OFFSET[leap(yearFromTime(t))];
79
+ let i = 0;
80
+ while (i < 11 && d >= offsets[i + 1]) {
81
+ i++;
82
+ }
83
+ return i;
84
+ }
85
+ const dateFromTime = (t) => dayWithinYear(t) - MONTH_OFFSET[leap(yearFromTime(t))][monthFromTime(t)] + 1;
86
+ /** C's (int) of a remainder, made non-negative by adding the divisor. */
87
+ function positive(r, n) {
88
+ const i = cInt(r);
89
+ return i < 0 ? i + n : i;
90
+ }
91
+ const weekDay = (t) => positive((day(t) + 4) % 7, 7);
92
+ const hourFromTime = (t) => positive(Math.floor((t + 0.5) / MS_PER_HOUR) % 24, 24);
93
+ const minFromTime = (t) => positive(Math.floor(t / MS_PER_MINUTE) % 60, 60);
94
+ const secFromTime = (t) => positive(Math.floor(t / MS_PER_SECOND) % 60, 60);
95
+ const msecFromTime = (t) => positive(t % MS_PER_SECOND, MS_PER_SECOND);
96
+ function timeWithinDay(t) {
97
+ const r = t % MS_PER_DAY;
98
+ return r < 0 ? r + MS_PER_DAY : r;
99
+ }
100
+ function makeDay(year, month, date) {
101
+ if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(date)) {
102
+ return Number.NaN;
103
+ }
104
+ let y = toInt(year);
105
+ let m = toInt(month);
106
+ y += Math.floor(m / 12);
107
+ m %= 12;
108
+ if (m < 0) {
109
+ m += 12;
110
+ }
111
+ const iMonth = cInt(Math.floor(m));
112
+ if (iMonth < 0 || iMonth >= 12) {
113
+ return Number.NaN;
114
+ }
115
+ const iYear = cInt(y);
116
+ return dayFromYear(iYear) + MONTH_OFFSET[leap(iYear)][iMonth] + (toInt(date) - 1);
117
+ }
118
+ function makeTime(hour, min, sec, ms) {
119
+ if (!Number.isFinite(hour) ||
120
+ !Number.isFinite(min) ||
121
+ !Number.isFinite(sec) ||
122
+ !Number.isFinite(ms)) {
123
+ return Number.NaN;
124
+ }
125
+ return (toInt(hour) * MS_PER_HOUR + toInt(min) * MS_PER_MINUTE + toInt(sec) * MS_PER_SECOND + toInt(ms));
126
+ }
127
+ function makeDate(d, time) {
128
+ if (!Number.isFinite(d) || !Number.isFinite(time)) {
129
+ return Number.NaN;
130
+ }
131
+ return toInt(d) * MS_PER_DAY + toInt(time);
132
+ }
133
+ /** The host's offset east of UTC at a time, in milliseconds, its zone's history included. */
134
+ const hostOffset = (ms) => -new Date(ms).getTimezoneOffset() * MS_PER_MINUTE;
135
+ const standardOffsets = new Map();
136
+ /** The host's standard offset in a year: the lesser of January's and July's, whichever has daylight saving. */
137
+ function standardOffset(year) {
138
+ let offset = standardOffsets.get(year);
139
+ if (offset === undefined) {
140
+ const jan = new Date(0);
141
+ jan.setUTCFullYear(year, 0, 1);
142
+ const jul = new Date(0);
143
+ jul.setUTCFullYear(year, 6, 1);
144
+ offset = Math.min(hostOffset(jan.getTime()), hostOffset(jul.getTime()));
145
+ standardOffsets.set(year, offset);
146
+ }
147
+ return offset;
148
+ }
149
+ let tza = 0;
150
+ let tzaUntil = Number.NEGATIVE_INFINITY;
151
+ /**
152
+ * As VMPI_getLocalTimeOffset: the standard offset of now, whatever the time
153
+ * asked about. Read again once a minute, as WinPortUtils does, since every
154
+ * local field reads it.
155
+ */
156
+ function localTZA() {
157
+ const now = Date.now();
158
+ if (now >= tzaUntil) {
159
+ tza = standardOffset(yearFromTime(now));
160
+ tzaUntil = now + MS_PER_MINUTE;
161
+ }
162
+ return tza;
163
+ }
164
+ // The last second daylightSavingTA was asked about: a Date's local getters ask about the same one.
165
+ let lastDstSecond = Number.NaN;
166
+ let lastDst = 0;
167
+ /**
168
+ * As VMPI_getDaylightSavingsTA: an hour where localtime_r says daylight
169
+ * saving is in effect, of the time in seconds in a 32-bit time_t. An offset
170
+ * at least half an hour past the year's standard one is daylight saving;
171
+ * a lesser change is the zone's own history, which avmshell does not see.
172
+ */
173
+ function daylightSavingTA(t) {
174
+ const ms = cInt(t / MS_PER_SECOND) * MS_PER_SECOND;
175
+ if (ms !== lastDstSecond) {
176
+ lastDstSecond = ms;
177
+ lastDst =
178
+ hostOffset(ms) - standardOffset(yearFromTime(ms)) >= 30 * MS_PER_MINUTE ? MS_PER_HOUR : 0;
179
+ }
180
+ return lastDst;
181
+ }
182
+ const localTime = (t) => t + localTZA() + daylightSavingTA(t);
183
+ /** As Date.cpp's UTC: local time to UTC, a time in the spring-forward gap an hour later. */
184
+ function utc(t) {
185
+ const adj = localTZA();
186
+ const dst = daylightSavingTA(t - adj);
187
+ if (dst !== 0 && daylightSavingTA(t - adj - MS_PER_HOUR) === 0) {
188
+ t += MS_PER_HOUR;
189
+ }
190
+ return t - adj - dst;
191
+ }
192
+ /** As Date::Date of fields: years below 100 are 1900's; the time is not clipped. */
193
+ function fromFields(n, local) {
194
+ const year = n[0] < 100 ? n[0] + 1900 : n[0];
195
+ const t = makeDate(makeDay(year, n[1], n[2]), makeTime(n[3], n[4], n[5], n[6]));
196
+ return local ? utc(t) : t;
197
+ }
198
+ /** Format's %2: two digits, as characters from '0', whatever the value. */
199
+ const pad2 = (n) => String.fromCharCode(48 + Math.trunc(n / 10), 48 + (n % 10));
200
+ /** As Date::toString, by its format index; empty if the time's fields are out of range. */
201
+ function format(t, index) {
202
+ if (Number.isNaN(t)) {
203
+ return "Invalid Date";
204
+ }
205
+ const time = index === 6 ? t : localTime(t);
206
+ const year = yearFromTime(time);
207
+ const month = monthFromTime(time);
208
+ const dow = weekDay(time);
209
+ if (month < 0 || month >= 12 || dow < 0 || dow >= 7) {
210
+ return "";
211
+ }
212
+ let delta = cInt((time - t) / MS_PER_MINUTE);
213
+ const sign = delta < 0 ? "-" : "+";
214
+ delta = Math.abs(delta);
215
+ const zone = `GMT${sign}${pad2(Math.trunc(delta / 60))}${pad2(delta % 60)}`;
216
+ const date = dateFromTime(time);
217
+ const hour24 = hourFromTime(time);
218
+ const hour12 = hour24 % 12 === 0 ? 12 : hour24 % 12;
219
+ const ampm = hour24 >= 12 ? "P" : "A";
220
+ const min = minFromTime(time);
221
+ const sec = secFromTime(time);
222
+ const dayName = DAYS.substr(dow * 3, 3);
223
+ const mon = MONTHS.substr(month * 3, 3);
224
+ const clock = `${pad2(hour24)}:${pad2(min)}:${pad2(sec)}`;
225
+ switch (index) {
226
+ case 0:
227
+ return `${dayName} ${mon} ${date} ${clock} ${zone} ${year}`;
228
+ case 1:
229
+ case 4:
230
+ return `${dayName} ${mon} ${date} ${year}`;
231
+ case 2:
232
+ return `${clock} ${zone}`;
233
+ case 3:
234
+ return `${dayName} ${mon} ${date} ${year} ${pad2(hour12)}:${pad2(min)}:${pad2(sec)} ${ampm}M`;
235
+ case 5:
236
+ return `${pad2(hour12)}:${pad2(min)}:${pad2(sec)} ${ampm}M`;
237
+ default:
238
+ return `${dayName} ${mon} ${date} ${clock} ${year} UTC`;
239
+ }
240
+ }
241
+ /** A Date's field by Date.as' index: UTC fields 0 to 7, local 8 to 15, the offset 16, the time 17. */
242
+ function field(t, index) {
243
+ if (Number.isNaN(t)) {
244
+ return Number.NaN;
245
+ }
246
+ if (index === 16) {
247
+ return (t - localTime(t)) / MS_PER_MINUTE;
248
+ }
249
+ if (index >= 17) {
250
+ return t;
251
+ }
252
+ const time = index >= 8 ? localTime(t) : t;
253
+ switch (index & 7) {
254
+ case 0:
255
+ return yearFromTime(time);
256
+ case 1:
257
+ return monthFromTime(time);
258
+ case 2:
259
+ return dateFromTime(time);
260
+ case 3:
261
+ return weekDay(time);
262
+ case 4:
263
+ return hourFromTime(time);
264
+ case 5:
265
+ return minFromTime(time);
266
+ case 6:
267
+ return secFromTime(time);
268
+ default:
269
+ return msecFromTime(time);
270
+ }
271
+ }
272
+ /**
273
+ * As DateObject::_set: the fields from setter `index`'s on, NaN for those
274
+ * not given; a NaN given makes the time NaN. Indices 1 to 3 set the date,
275
+ * 4 to 7 the time, negative ones in UTC.
276
+ */
277
+ function set(rt, time, index, args) {
278
+ const n = [Number.NaN, Number.NaN, Number.NaN, Number.NaN, Number.NaN, Number.NaN, Number.NaN];
279
+ const local = index > 0;
280
+ const first = Math.abs(index) - 1;
281
+ for (let i = 0; i < args.length && first + i < 7; i++) {
282
+ n[first + i] = rt.toNumber(args[i]);
283
+ if (Number.isNaN(n[first + i])) {
284
+ return Number.NaN;
285
+ }
286
+ }
287
+ let t = local ? localTime(time) : time;
288
+ if (first < 3) {
289
+ // As Date::setDate: a NaN time stays NaN unless a year is set, from 0.
290
+ if (Number.isNaN(time)) {
291
+ if (Number.isNaN(n[0])) {
292
+ return time;
293
+ }
294
+ t = 0;
295
+ }
296
+ const year = Number.isNaN(n[0]) ? yearFromTime(t) : n[0];
297
+ const month = Number.isNaN(n[1]) ? monthFromTime(t) : n[1];
298
+ const date = Number.isNaN(n[2]) ? dateFromTime(t) : n[2];
299
+ t = makeDate(makeDay(year, month, date), timeWithinDay(t));
300
+ }
301
+ else {
302
+ const hour = Number.isNaN(n[3]) ? hourFromTime(t) : n[3];
303
+ const min = Number.isNaN(n[4]) ? minFromTime(t) : n[4];
304
+ const sec = Number.isNaN(n[5]) ? secFromTime(t) : n[5];
305
+ const ms = Number.isNaN(n[6]) ? msecFromTime(t) : n[6];
306
+ t = makeDate(day(t), makeTime(hour, min, sec, ms));
307
+ }
308
+ return timeClip(local ? utc(t) : t);
309
+ }
310
+ const timeOf = (o) => o.$time ?? Number.NaN;
311
+ const KEYWORDS = "JanFebMarAprMayJunJulAugSepOctNovDecSunMonTueWedThuFriSatGMTUTC";
312
+ const UTC_KEYWORD = 12 + 7 + 1;
313
+ /** As parseDateKeyword: a month, UTC, AM or PM, or a day or GMT, which say nothing; false if none. */
314
+ function dateKeyword(word, f) {
315
+ if (word.length > 3) {
316
+ return false;
317
+ }
318
+ for (let i = 0; i < word.length; i++) {
319
+ const c = word.charCodeAt(i);
320
+ if (c < 65 || c > 122 || (c > 90 && c < 97)) {
321
+ return false;
322
+ }
323
+ }
324
+ if (word.length === 3) {
325
+ for (let x = 0; x < 7 + 12 + 2; x++) {
326
+ if (KEYWORDS.substr(x * 3, 3) === word) {
327
+ if (x < 12) {
328
+ f.month = x;
329
+ }
330
+ else if (x === UTC_KEYWORD) {
331
+ f.zone = 0;
332
+ }
333
+ return true;
334
+ }
335
+ }
336
+ return false;
337
+ }
338
+ if (word === "AM" || word === "PM") {
339
+ const valid = f.hour <= 12 && f.hour >= 0;
340
+ if (word === "AM" && f.hour === 12) {
341
+ f.hour = 0;
342
+ }
343
+ else if (word === "PM" && f.hour !== 12) {
344
+ f.hour += 12;
345
+ }
346
+ return valid;
347
+ }
348
+ return false;
349
+ }
350
+ /**
351
+ * As DateClass::stringToDateDouble: the formats its toString writes and a
352
+ * few others ("1/1/1999 13:30 PM"), by numbers and the separators before
353
+ * and after them, and three-letter keywords; NaN for anything else.
354
+ */
355
+ function parseDate(s) {
356
+ const f = { year: -1, month: -1, day: -1, hour: -1, min: -1, sec: -1, zone: -1 };
357
+ const length = s.length;
358
+ const code = (k) => s.charCodeAt(k);
359
+ const digit = (c) => c >= 48 && c <= 57;
360
+ const alpha = (c) => (c >= 65 && c <= 90) || (c >= 97 && c <= 122);
361
+ let prevc = 0;
362
+ let i = 0;
363
+ while (i < length) {
364
+ let c = code(i);
365
+ i++;
366
+ if (c <= 32 || c === 44 || c === 45) {
367
+ // Whitespace and delimiters; a '-' before a number is a zone's sign.
368
+ if (i < length && c === 45 && digit(code(i))) {
369
+ prevc = c;
370
+ }
371
+ }
372
+ else if (c === 47 || c === 58 || c === 43 || c === 45) {
373
+ prevc = c;
374
+ }
375
+ else if (digit(c)) {
376
+ // As parseDateNumber: a zone offset, a year, a month or day, a time unit.
377
+ // c is left the character after the digits, or the last digit at the end.
378
+ let n = c - 48;
379
+ while (i < length) {
380
+ c = code(i);
381
+ if (!digit(c)) {
382
+ break;
383
+ }
384
+ n = n * 10 + c - 48;
385
+ i++;
386
+ }
387
+ let valid = true;
388
+ if (prevc === 43 || prevc === 45) {
389
+ n = n < 24 ? n * 60 : (n % 100) + Math.trunc(n / 100) * 60;
390
+ if (prevc === 43) {
391
+ n = -n;
392
+ }
393
+ if (f.zone === 0 || f.zone === -1) {
394
+ f.zone = n;
395
+ }
396
+ else {
397
+ valid = false;
398
+ }
399
+ }
400
+ else if (n >= 70 || (prevc === 47 && f.month >= 0 && f.day >= 0 && f.year < 0)) {
401
+ if (f.year >= 0) {
402
+ valid = false;
403
+ }
404
+ else if (c <= 32 || c === 44 || c === 47 || i >= length) {
405
+ f.year = n < 100 ? n + 1900 : n;
406
+ }
407
+ else {
408
+ valid = false;
409
+ }
410
+ }
411
+ else if (c === 47) {
412
+ if (f.month < 0) {
413
+ f.month = n - 1;
414
+ }
415
+ else if (f.day < 0) {
416
+ f.day = n;
417
+ }
418
+ else {
419
+ valid = false;
420
+ }
421
+ }
422
+ else if (c === 58) {
423
+ if (f.hour < 0) {
424
+ f.hour = n;
425
+ }
426
+ else if (f.min < 0) {
427
+ f.min = n;
428
+ }
429
+ else {
430
+ valid = false;
431
+ }
432
+ }
433
+ else if (i < length && c !== 44 && c > 32 && c !== 45) {
434
+ valid = false;
435
+ }
436
+ else if (f.hour >= 0 && f.min < 0) {
437
+ f.min = n;
438
+ }
439
+ else if (f.min >= 0 && f.sec < 0) {
440
+ f.sec = n;
441
+ }
442
+ else if (f.day < 0) {
443
+ f.day = n;
444
+ }
445
+ else {
446
+ valid = false;
447
+ }
448
+ if (!valid) {
449
+ return Number.NaN;
450
+ }
451
+ prevc = 0;
452
+ }
453
+ else {
454
+ // A keyword, of letters.
455
+ const start = i - 1;
456
+ while (i < length && alpha(code(i))) {
457
+ i++;
458
+ }
459
+ if (i <= start + 1 || !dateKeyword(s.slice(start, i), f)) {
460
+ return Number.NaN;
461
+ }
462
+ prevc = 0;
463
+ }
464
+ }
465
+ if (f.year < 0 || f.month < 0 || f.day < 0) {
466
+ return Number.NaN;
467
+ }
468
+ const sec = Math.max(f.sec, 0);
469
+ const min = Math.max(f.min, 0);
470
+ const hour = Math.max(f.hour, 0);
471
+ // No zone: local time. Else UTC, and the offset east of it in minutes.
472
+ const fields = [f.year, f.month, f.day, hour, min, sec, 0];
473
+ if (f.zone === -1) {
474
+ return fromFields(fields, true);
475
+ }
476
+ return fromFields(fields, false) + f.zone * 60000;
477
+ }
478
+ /** As DateClass::construct: now, a time, a string, a Date, or local fields. */
479
+ function construct(rt, cls, args) {
480
+ const o = cls.$it.instance();
481
+ if (args.length === 0) {
482
+ o.$time = Date.now();
483
+ }
484
+ else if (args.length === 1) {
485
+ const v = args[0];
486
+ if (v?.$time !== undefined) {
487
+ o.$time = v.$time;
488
+ }
489
+ else {
490
+ // A string is parsed; anything else is a number, as AvmCore::number
491
+ // makes it, an object's string from valueOf too. Either is clipped,
492
+ // though Date.parse leaves its result unclipped.
493
+ o.$time = timeClip(typeof v === "string" ? parseDate(v) : rt.toNumber(v));
494
+ }
495
+ }
496
+ else {
497
+ const n = [0, 0, 1, 0, 0, 0, 0];
498
+ for (let i = 0; i < args.length && i < 7; i++) {
499
+ n[i] = rt.toNumber(args[i]);
500
+ }
501
+ o.$time = fromFields(n, true);
502
+ }
503
+ return o;
504
+ }
505
+ export const dateHook = {
506
+ construct,
507
+ // Date.prototype is a Date, of no time.
508
+ prototype: (_rt, cls) => {
509
+ const o = cls.$it.instance();
510
+ o.$time = Number.NaN;
511
+ return o;
512
+ },
513
+ // Date() called is the time now, as a string.
514
+ call: () => format(Date.now(), 0),
515
+ };
516
+ export function dateNatives() {
517
+ const natives = {
518
+ "Date.parse": (rt) => (s) => parseDate(rt.toString(s)),
519
+ "Date.UTC": (rt) => (...args) => {
520
+ const n = args.map((a) => rt.toNumber(a));
521
+ return fromFields([n[0], n[1], n[2] ?? 1, n[3] ?? 0, n[4] ?? 0, n[5] ?? 0, n[6] ?? 0], false);
522
+ },
523
+ "Date#Date::_get": () => function (index) {
524
+ return field(timeOf(this), index);
525
+ },
526
+ "Date#Date::_toString": () => function (index) {
527
+ return format(timeOf(this), index);
528
+ },
529
+ "Date#Date::_setTime": (rt) => function (v) {
530
+ this.$time = timeClip(rt.toNumber(v));
531
+ return this.$time;
532
+ },
533
+ [`Date#${AS3}::getTime`]: () => function () {
534
+ return timeOf(this);
535
+ },
536
+ [`Date#${AS3}::valueOf`]: () => function () {
537
+ return timeOf(this);
538
+ },
539
+ [`Date#${AS3}::getTimezoneOffset`]: () => function () {
540
+ return field(timeOf(this), 16);
541
+ },
542
+ };
543
+ // The getters by field, as their native names ask for them.
544
+ const getters = [
545
+ ["getUTCFullYear", 0],
546
+ ["getUTCMonth", 1],
547
+ ["getUTCDate", 2],
548
+ ["getUTCDay", 3],
549
+ ["getUTCHours", 4],
550
+ ["getUTCMinutes", 5],
551
+ ["getUTCSeconds", 6],
552
+ ["getUTCMilliseconds", 7],
553
+ ["getFullYear", 8],
554
+ ["getMonth", 9],
555
+ ["getDate", 10],
556
+ ["getDay", 11],
557
+ ["getHours", 12],
558
+ ["getMinutes", 13],
559
+ ["getSeconds", 14],
560
+ ["getMilliseconds", 15],
561
+ ];
562
+ for (const [name, index] of getters) {
563
+ natives[`Date#${AS3}::${name}`] = () => function () {
564
+ return field(timeOf(this), index);
565
+ };
566
+ }
567
+ // The setters, by DateObject's indices: 1 to 7 local, negated in UTC.
568
+ const setters = ["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"];
569
+ for (let i = 0; i < setters.length; i++) {
570
+ for (const [prefix, index] of [
571
+ ["", i + 1],
572
+ ["UTC", -(i + 1)],
573
+ ]) {
574
+ natives[`Date#Date::_set${prefix}${setters[i]}`] = (rt) => function (...args) {
575
+ this.$time = set(rt, timeOf(this), index, args);
576
+ return this.$time;
577
+ };
578
+ }
579
+ }
580
+ return natives;
581
+ }