@swf2es/player-hosts 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +759 -0
  3. package/README.md +43 -2
  4. package/dist/indexeddb.d.ts +27 -0
  5. package/dist/indexeddb.d.ts.map +1 -0
  6. package/dist/indexeddb.js +170 -0
  7. package/dist/indexeddb.js.map +1 -0
  8. package/dist/node-worker.d.ts +2 -0
  9. package/dist/node-worker.d.ts.map +1 -0
  10. package/dist/node-worker.js +12 -0
  11. package/dist/node-worker.js.map +1 -0
  12. package/dist/node.d.ts +8 -0
  13. package/dist/node.d.ts.map +1 -0
  14. package/dist/node.js +43 -0
  15. package/dist/node.js.map +1 -0
  16. package/dist/precompiled.d.ts +31 -0
  17. package/dist/precompiled.d.ts.map +1 -0
  18. package/dist/precompiled.js +125 -0
  19. package/dist/precompiled.js.map +1 -0
  20. package/dist/stage3d.d.ts +13 -0
  21. package/dist/stage3d.d.ts.map +1 -0
  22. package/dist/stage3d.js +61 -0
  23. package/dist/stage3d.js.map +1 -0
  24. package/dist/thread/codegen/codegen.js +308 -0
  25. package/dist/thread/codegen/index.js +405 -0
  26. package/dist/thread/format/abc-names.js +126 -0
  27. package/dist/thread/format/actions.js +222 -0
  28. package/dist/thread/format/air-descriptor.js +63 -0
  29. package/dist/thread/format/api-versions.js +22 -0
  30. package/dist/thread/format/bitmap.js +199 -0
  31. package/dist/thread/format/button.js +60 -0
  32. package/dist/thread/format/compression.js +200 -0
  33. package/dist/thread/format/display.js +305 -0
  34. package/dist/thread/format/filters.js +136 -0
  35. package/dist/thread/format/font.js +168 -0
  36. package/dist/thread/format/index.js +26 -0
  37. package/dist/thread/format/pbj.js +484 -0
  38. package/dist/thread/format/shape.js +411 -0
  39. package/dist/thread/format/sound.js +91 -0
  40. package/dist/thread/format/swf.js +163 -0
  41. package/dist/thread/format/tags.js +58 -0
  42. package/dist/thread/format/text.js +135 -0
  43. package/dist/thread/format/zip.js +91 -0
  44. package/dist/thread/native/audio/binary.js +3 -0
  45. package/dist/thread/native/audio/index.js +72 -0
  46. package/dist/thread/native/base64.js +9 -0
  47. package/dist/thread/native/compress/binary.js +3 -0
  48. package/dist/thread/native/compress/index.js +145 -0
  49. package/dist/thread/native/instance.js +49 -0
  50. package/dist/thread/native/mp3/binary.js +3 -0
  51. package/dist/thread/native/mp3/index.js +48 -0
  52. package/dist/thread/native/render/binary.js +3 -0
  53. package/dist/thread/native/render/bitmap-kernel.js +591 -0
  54. package/dist/thread/native/render/draw-kernel.js +204 -0
  55. package/dist/thread/native/render/dxt-encoder.js +94 -0
  56. package/dist/thread/native/render/index.js +10 -0
  57. package/dist/thread/native/render/lines.js +122 -0
  58. package/dist/thread/native/render/module.js +26 -0
  59. package/dist/thread/native/render/pixel-ops.js +235 -0
  60. package/dist/thread/native/render/tessellator.js +250 -0
  61. package/dist/thread/player/avm1/amf.js +507 -0
  62. package/dist/thread/player/avm1/avm1.js +1304 -0
  63. package/dist/thread/player/avm1/bindings.js +214 -0
  64. package/dist/thread/player/avm1/classes.js +75 -0
  65. package/dist/thread/player/avm1/clips.js +229 -0
  66. package/dist/thread/player/avm1/compile.js +140 -0
  67. package/dist/thread/player/avm1/external.js +79 -0
  68. package/dist/thread/player/avm1/focus.js +278 -0
  69. package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
  70. package/dist/thread/player/avm1/globals/Button.js +31 -0
  71. package/dist/thread/player/avm1/globals/Color.js +115 -0
  72. package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
  73. package/dist/thread/player/avm1/globals/FileReference.js +217 -0
  74. package/dist/thread/player/avm1/globals/Key.js +60 -0
  75. package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
  76. package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
  77. package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
  78. package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
  79. package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
  80. package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
  81. package/dist/thread/player/avm1/globals/Selection.js +62 -0
  82. package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
  83. package/dist/thread/player/avm1/globals/Sound.js +238 -0
  84. package/dist/thread/player/avm1/globals/Stage.js +12 -0
  85. package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
  86. package/dist/thread/player/avm1/globals/TextField.js +396 -0
  87. package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
  88. package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
  89. package/dist/thread/player/avm1/globals/XML.js +396 -0
  90. package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
  91. package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
  92. package/dist/thread/player/avm1/globals/drawing.js +202 -0
  93. package/dist/thread/player/avm1/globals/filters.js +635 -0
  94. package/dist/thread/player/avm1/globals/geom.js +600 -0
  95. package/dist/thread/player/avm1/input.js +483 -0
  96. package/dist/thread/player/avm1/keyboard.js +113 -0
  97. package/dist/thread/player/avm1/loads.js +352 -0
  98. package/dist/thread/player/avm1/net.js +219 -0
  99. package/dist/thread/player/avm1/paths.js +104 -0
  100. package/dist/thread/player/avm1/pointer.js +512 -0
  101. package/dist/thread/player/avm1/queue.js +303 -0
  102. package/dist/thread/player/avm1/sound.js +106 -0
  103. package/dist/thread/player/avm1/swf.js +141 -0
  104. package/dist/thread/player/avm1/timers.js +113 -0
  105. package/dist/thread/player/bitmap/bitmap.js +627 -0
  106. package/dist/thread/player/bitmap/draw.js +68 -0
  107. package/dist/thread/player/bitmap/dxt.js +11 -0
  108. package/dist/thread/player/bitmap/filters.js +656 -0
  109. package/dist/thread/player/bitmap/images.js +240 -0
  110. package/dist/thread/player/bitmap/kernel.js +65 -0
  111. package/dist/thread/player/bitmap/ops.js +1239 -0
  112. package/dist/thread/player/bitmap/pixel-bender.js +911 -0
  113. package/dist/thread/player/bitmap/png.js +139 -0
  114. package/dist/thread/player/bitmap/turbulence.js +89 -0
  115. package/dist/thread/player/clock.js +182 -0
  116. package/dist/thread/player/display/bitmapobject.js +25 -0
  117. package/dist/thread/player/display/bounds.js +520 -0
  118. package/dist/thread/player/display/buttonobject.js +305 -0
  119. package/dist/thread/player/display/color.js +40 -0
  120. package/dist/thread/player/display/container.js +150 -0
  121. package/dist/thread/player/display/display.js +14 -0
  122. package/dist/thread/player/display/displayobject.js +664 -0
  123. package/dist/thread/player/display/drawing.js +613 -0
  124. package/dist/thread/player/display/filters.js +285 -0
  125. package/dist/thread/player/display/geometry.js +189 -0
  126. package/dist/thread/player/display/gradients.js +117 -0
  127. package/dist/thread/player/display/graphicsdata.js +592 -0
  128. package/dist/thread/player/display/instantiate.js +71 -0
  129. package/dist/thread/player/display/matrix3d.js +373 -0
  130. package/dist/thread/player/display/morph.js +226 -0
  131. package/dist/thread/player/display/movieclip.js +680 -0
  132. package/dist/thread/player/display/perspective.js +193 -0
  133. package/dist/thread/player/display/scale9.js +236 -0
  134. package/dist/thread/player/display/shapeobject.js +131 -0
  135. package/dist/thread/player/display/shapes.js +407 -0
  136. package/dist/thread/player/display/textobjects.js +222 -0
  137. package/dist/thread/player/display/timeline.js +471 -0
  138. package/dist/thread/player/display/value-lists.js +40 -0
  139. package/dist/thread/player/display/videoobject.js +6 -0
  140. package/dist/thread/player/display/walk.js +127 -0
  141. package/dist/thread/player/files.js +334 -0
  142. package/dist/thread/player/hosts.js +207 -0
  143. package/dist/thread/player/input/avm1.js +82 -0
  144. package/dist/thread/player/input/context-menu.js +63 -0
  145. package/dist/thread/player/input/keyboard.js +458 -0
  146. package/dist/thread/player/input/pointer.js +863 -0
  147. package/dist/thread/player/input/text-editor.js +319 -0
  148. package/dist/thread/player/input/touch.js +209 -0
  149. package/dist/thread/player/localconnection.js +90 -0
  150. package/dist/thread/player/media/audio.js +376 -0
  151. package/dist/thread/player/media/dynamic-sound.js +90 -0
  152. package/dist/thread/player/media/extract.js +135 -0
  153. package/dist/thread/player/media/mp3.js +152 -0
  154. package/dist/thread/player/media/sounds.js +507 -0
  155. package/dist/thread/player/media/streaming-audio.js +133 -0
  156. package/dist/thread/player/player.js +616 -0
  157. package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
  158. package/dist/thread/player/playerglobal/air-library.js +8 -0
  159. package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
  160. package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
  161. package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
  162. package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
  163. package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
  164. package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
  165. package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
  166. package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
  167. package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
  168. package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
  169. package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
  170. package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
  171. package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
  172. package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
  173. package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
  174. package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
  175. package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
  176. package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
  177. package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
  178. package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
  179. package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
  180. package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
  181. package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
  182. package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
  183. package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
  184. package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
  185. package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
  186. package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
  187. package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
  188. package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
  189. package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
  190. package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
  191. package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
  192. package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
  193. package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
  194. package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
  195. package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
  196. package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
  197. package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
  198. package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
  199. package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
  200. package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
  201. package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
  202. package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
  203. package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
  204. package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
  205. package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
  206. package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
  207. package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
  208. package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
  209. package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
  210. package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
  211. package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
  212. package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
  213. package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
  214. package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
  215. package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
  216. package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
  217. package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
  218. package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
  219. package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
  220. package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
  221. package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
  222. package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
  223. package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
  224. package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
  225. package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
  226. package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
  227. package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
  228. package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
  229. package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
  230. package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
  231. package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
  232. package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
  233. package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
  234. package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
  235. package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
  236. package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
  237. package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
  238. package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
  239. package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
  240. package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
  241. package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
  242. package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
  243. package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
  244. package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
  245. package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
  246. package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
  247. package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
  248. package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
  249. package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
  250. package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
  251. package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
  252. package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
  253. package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
  254. package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
  255. package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
  256. package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
  257. package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
  258. package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
  259. package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
  260. package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
  261. package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
  262. package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
  263. package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
  264. package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
  265. package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
  266. package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
  267. package/dist/thread/player/playerglobal/index.js +224 -0
  268. package/dist/thread/player/playerglobal/libraries.js +10 -0
  269. package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
  270. package/dist/thread/player/playerglobal/toplevel.js +122 -0
  271. package/dist/thread/player/scripting/clipboard.js +146 -0
  272. package/dist/thread/player/scripting/code.js +900 -0
  273. package/dist/thread/player/scripting/evaluate.js +144 -0
  274. package/dist/thread/player/scripting/events.js +172 -0
  275. package/dist/thread/player/scripting/handover.js +182 -0
  276. package/dist/thread/player/scripting/lazy.js +38 -0
  277. package/dist/thread/player/scripting/lifecycle.js +272 -0
  278. package/dist/thread/player/scripting/loads.js +860 -0
  279. package/dist/thread/player/scripting/sha256.js +95 -0
  280. package/dist/thread/player/scripting/symbols.js +348 -0
  281. package/dist/thread/player/scripting/timers.js +434 -0
  282. package/dist/thread/player/scripting/workers.js +923 -0
  283. package/dist/thread/player/scripting.js +1018 -0
  284. package/dist/thread/player/stage.js +4 -0
  285. package/dist/thread/player/text/csm.js +113 -0
  286. package/dist/thread/player/text/css.js +167 -0
  287. package/dist/thread/player/text/fonts.js +97 -0
  288. package/dist/thread/player/text/layout.js +393 -0
  289. package/dist/thread/player/text/static.js +109 -0
  290. package/dist/thread/player/text/text.js +431 -0
  291. package/dist/thread/player/workers/thread.js +159 -0
  292. package/dist/thread/player/workers/wire.js +198 -0
  293. package/dist/thread/player-hosts/web-worker.js +19 -0
  294. package/dist/thread/runtime/avm1/activation.js +89 -0
  295. package/dist/thread/runtime/avm1/case.js +249 -0
  296. package/dist/thread/runtime/avm1/clips.js +334 -0
  297. package/dist/thread/runtime/avm1/control.js +280 -0
  298. package/dist/thread/runtime/avm1/errors.js +50 -0
  299. package/dist/thread/runtime/avm1/functions.js +249 -0
  300. package/dist/thread/runtime/avm1/globals/array.js +549 -0
  301. package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
  302. package/dist/thread/runtime/avm1/globals/date.js +436 -0
  303. package/dist/thread/runtime/avm1/globals/global.js +344 -0
  304. package/dist/thread/runtime/avm1/globals/math.js +139 -0
  305. package/dist/thread/runtime/avm1/globals/number.js +93 -0
  306. package/dist/thread/runtime/avm1/globals/string.js +201 -0
  307. package/dist/thread/runtime/avm1/globals/timers.js +129 -0
  308. package/dist/thread/runtime/avm1/host.js +5 -0
  309. package/dist/thread/runtime/avm1/index.js +14 -0
  310. package/dist/thread/runtime/avm1/inheritance.js +132 -0
  311. package/dist/thread/runtime/avm1/numbers.js +298 -0
  312. package/dist/thread/runtime/avm1/objects.js +896 -0
  313. package/dist/thread/runtime/avm1/operators.js +170 -0
  314. package/dist/thread/runtime/avm1/realm.js +529 -0
  315. package/dist/thread/runtime/avm1/runtime.js +882 -0
  316. package/dist/thread/runtime/avm1/scope.js +385 -0
  317. package/dist/thread/runtime/avm1/urls.js +180 -0
  318. package/dist/thread/runtime/avm1/values.js +97 -0
  319. package/dist/thread/runtime/avm2/amf-classes.js +66 -0
  320. package/dist/thread/runtime/avm2/amf.js +801 -0
  321. package/dist/thread/runtime/avm2/array-conversion.js +100 -0
  322. package/dist/thread/runtime/avm2/builtin-library.js +21 -0
  323. package/dist/thread/runtime/avm2/cache-fill.js +86 -0
  324. package/dist/thread/runtime/avm2/classes.js +211 -0
  325. package/dist/thread/runtime/avm2/definitions.js +69 -0
  326. package/dist/thread/runtime/avm2/descriptors.js +5 -0
  327. package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
  328. package/dist/thread/runtime/avm2/domain-memory.js +75 -0
  329. package/dist/thread/runtime/avm2/domain.js +280 -0
  330. package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
  331. package/dist/thread/runtime/avm2/enumeration.js +393 -0
  332. package/dist/thread/runtime/avm2/errors.js +45 -0
  333. package/dist/thread/runtime/avm2/float-library.js +66 -0
  334. package/dist/thread/runtime/avm2/float.js +26 -0
  335. package/dist/thread/runtime/avm2/hooks.js +19 -0
  336. package/dist/thread/runtime/avm2/index.js +38 -0
  337. package/dist/thread/runtime/avm2/messages.js +177 -0
  338. package/dist/thread/runtime/avm2/method-factories.js +95 -0
  339. package/dist/thread/runtime/avm2/modules.js +105 -0
  340. package/dist/thread/runtime/avm2/names.js +248 -0
  341. package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
  342. package/dist/thread/runtime/avm2/natives/array.js +390 -0
  343. package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
  344. package/dist/thread/runtime/avm2/natives/case.js +88 -0
  345. package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
  346. package/dist/thread/runtime/avm2/natives/date.js +581 -0
  347. package/dist/thread/runtime/avm2/natives/define.js +130 -0
  348. package/dist/thread/runtime/avm2/natives/describe.js +351 -0
  349. package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
  350. package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
  351. package/dist/thread/runtime/avm2/natives/float.js +96 -0
  352. package/dist/thread/runtime/avm2/natives/index.js +64 -0
  353. package/dist/thread/runtime/avm2/natives/json.js +514 -0
  354. package/dist/thread/runtime/avm2/natives/number.js +162 -0
  355. package/dist/thread/runtime/avm2/natives/object.js +237 -0
  356. package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
  357. package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
  358. package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
  359. package/dist/thread/runtime/avm2/natives/shell.js +557 -0
  360. package/dist/thread/runtime/avm2/natives/sort.js +377 -0
  361. package/dist/thread/runtime/avm2/natives/string.js +132 -0
  362. package/dist/thread/runtime/avm2/natives/sync.js +821 -0
  363. package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
  364. package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
  365. package/dist/thread/runtime/avm2/natives/vector.js +406 -0
  366. package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
  367. package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
  368. package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
  369. package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
  370. package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
  371. package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
  372. package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
  373. package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
  374. package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
  375. package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
  376. package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
  377. package/dist/thread/runtime/avm2/number-strings.js +110 -0
  378. package/dist/thread/runtime/avm2/numbers.js +558 -0
  379. package/dist/thread/runtime/avm2/options.js +16 -0
  380. package/dist/thread/runtime/avm2/player-messages.js +550 -0
  381. package/dist/thread/runtime/avm2/property-cache.js +135 -0
  382. package/dist/thread/runtime/avm2/runtime.js +2644 -0
  383. package/dist/thread/runtime/avm2/traits.js +509 -0
  384. package/dist/thread/runtime/index.js +7 -0
  385. package/dist/web-worker.d.ts +2 -0
  386. package/dist/web-worker.d.ts.map +1 -0
  387. package/dist/web-worker.js +20 -0
  388. package/dist/web-worker.js.map +1 -0
  389. package/dist/websocket.d.ts +4 -0
  390. package/dist/websocket.d.ts.map +1 -0
  391. package/dist/websocket.js +27 -0
  392. package/dist/websocket.js.map +1 -0
  393. package/dist/workers.d.ts +35 -0
  394. package/dist/workers.d.ts.map +1 -0
  395. package/dist/workers.js +171 -0
  396. package/dist/workers.js.map +1 -0
  397. package/package.json +62 -3
  398. package/src/indexeddb.ts +227 -0
  399. package/src/node-worker.ts +13 -0
  400. package/src/node.ts +49 -0
  401. package/src/precompiled.ts +166 -0
  402. package/src/stage3d.ts +76 -0
  403. package/src/web-worker.ts +24 -0
  404. package/src/websocket.ts +32 -0
  405. package/src/workers.ts +255 -0
@@ -0,0 +1,463 @@
1
+ // flash.globalization.DateTimeFormatter. Flash formats by a pattern of
2
+ // LDML letters, the locale's or a script's own, which it interprets the way
3
+ // Windows' GetDateFormat does: a Gregorian calendar, European digits, the
4
+ // styles long and medium alike. The locale's patterns are read off Intl's
5
+ // parts, and its names come from Intl; the pattern is interpreted here.
6
+ import { avm2 } from "../../../../runtime/index.js";
7
+ import { availableLocales, ILLEGAL_ARGUMENT_ERROR, NO_ERROR, nonNull, PATTERN_SYNTAX_ERROR, resolveLocale, stringVector, UNSUPPORTED_ERROR, USING_FALLBACK_WARNING, } from "./locale.js";
8
+ const STYLES = ["long", "medium", "short", "none"];
9
+ const CUSTOM = "custom";
10
+ // Friday, 5 January 2024, 03:04:05 UTC: every field tells its width, being under ten.
11
+ const SAMPLE = Date.UTC(2024, 0, 5, 3, 4, 5);
12
+ const dateData = new Map();
13
+ function localeData(locale) {
14
+ let data = dateData.get(locale);
15
+ if (data) {
16
+ return data;
17
+ }
18
+ const format = (options) => new Intl.DateTimeFormat(locale, {
19
+ ...options,
20
+ timeZone: "UTC",
21
+ calendar: "gregory",
22
+ numberingSystem: "latn",
23
+ });
24
+ const names = (options, dates) => {
25
+ const f = format(options);
26
+ return dates.map((t) => f.format(t));
27
+ };
28
+ const months = Array.from({ length: 12 }, (_, m) => Date.UTC(2024, m, 1));
29
+ const weekdays = Array.from({ length: 7 }, (_, d) => Date.UTC(2024, 0, 7 + d));
30
+ const long = names({ month: "long" }, months);
31
+ // A month's name beside a day, where ICU has one: Finnish's "tammikuuta".
32
+ const withDay = format({ day: "numeric", month: "long" });
33
+ const genitive = months.map((t, m) => {
34
+ const name = withDay.formatToParts(t).find((p) => p.type === "month")?.value ?? "";
35
+ return /^\d*$/.test(name) ? long[m] : name;
36
+ });
37
+ const shortWeekdays = names({ weekday: "short" }, weekdays);
38
+ const narrowWeekdays = names({ weekday: "narrow" }, weekdays);
39
+ const periods = format({ hour: "numeric", hour12: true });
40
+ const eras = format({ era: "short", year: "numeric" });
41
+ const part = (f, t, type) => f.formatToParts(t).find((p) => p.type === type)?.value ?? "";
42
+ const info = new Intl.Locale(locale);
43
+ data = {
44
+ months: long,
45
+ genitiveMonths: genitive,
46
+ shortMonths: names({ month: "short" }, months),
47
+ weekdays: names({ weekday: "long" }, weekdays),
48
+ shortWeekdays,
49
+ shortestWeekdays: shortestNames(shortWeekdays, narrowWeekdays),
50
+ periods: [
51
+ part(periods, SAMPLE, "dayPeriod"),
52
+ part(periods, SAMPLE + 12 * 3600000, "dayPeriod"),
53
+ ],
54
+ eras: [part(eras, Date.UTC(-1, 0, 1), "era"), part(eras, SAMPLE, "era")],
55
+ firstWeekday: ((info.getWeekInfo?.() ?? info.weekInfo)?.firstDay ?? 7) % 7,
56
+ date: {
57
+ long: patternOf(format({ dateStyle: "full" })),
58
+ short: patternOf(format({ year: "numeric", month: "numeric", day: "numeric" })),
59
+ },
60
+ time: {
61
+ long: patternOf(format({ timeStyle: "medium" })),
62
+ short: patternOf(format({ timeStyle: "short" })),
63
+ },
64
+ };
65
+ dateData.set(locale, data);
66
+ return data;
67
+ }
68
+ /**
69
+ * Windows' shortest weekday names are CLDR's short width ("Su", "DO", "周日"),
70
+ * which Intl does not give: in a cased script the short names cut to two
71
+ * letters; in others the short ones of two characters at most, else the
72
+ * narrow ones; the short ones wherever that would name two days alike
73
+ * (Vietnamese "Th", Portuguese "qu").
74
+ */
75
+ function shortestNames(short, narrow) {
76
+ const names = short.map((name, d) => {
77
+ const chars = [...name];
78
+ if (/^[\p{Lu}\p{Ll}]/u.test(name)) {
79
+ return chars.slice(0, 2).join("");
80
+ }
81
+ return chars.length <= 2 ? name : narrow[d];
82
+ });
83
+ return new Set(names).size === names.length ? names : short;
84
+ }
85
+ const HOURS = { h12: "h", h23: "H", h11: "K", h24: "k" };
86
+ /** The pattern of Intl's format, read off its parts for the sample. */
87
+ function patternOf(f) {
88
+ const hour = HOURS[f.resolvedOptions().hourCycle ?? "h23"];
89
+ const twice = (letter, value) => letter.repeat(value.length > 1 ? 2 : 1);
90
+ return f
91
+ .formatToParts(SAMPLE)
92
+ .map(({ type, value }) => {
93
+ switch (type) {
94
+ case "weekday":
95
+ return "EEEE";
96
+ case "month":
97
+ return /^\d+$/.test(value) ? twice("M", value) : "MMMM";
98
+ case "day":
99
+ return twice("d", value);
100
+ case "year":
101
+ return value.length === 2 ? "yy" : "yyyy";
102
+ case "hour":
103
+ return twice(hour, value);
104
+ case "minute":
105
+ return "mm";
106
+ case "second":
107
+ return "ss";
108
+ case "dayPeriod":
109
+ return "a";
110
+ case "era":
111
+ return "G";
112
+ case "literal":
113
+ // CLDR's narrow space before a day period, where Windows has a plain one; Windows
114
+ // quotes the cased letters (" 'de' ", " 'г'."), not those of scripts without case.
115
+ return value
116
+ .replaceAll("\u202f", " ")
117
+ .replaceAll("'", "''")
118
+ .replace(/[\p{Lu}\p{Ll}\p{Lt}]+/gu, (letters) => `'${letters}'`);
119
+ default:
120
+ return "";
121
+ }
122
+ })
123
+ .join("");
124
+ }
125
+ // The letters Flash formats, with the longest run of each it keeps and what a longer one becomes.
126
+ const LETTERS = {
127
+ y: [5, 5],
128
+ M: [5, 4],
129
+ d: [2, 2],
130
+ E: [5, 4],
131
+ a: [1, 1],
132
+ h: [2, 2],
133
+ H: [2, 2],
134
+ K: [2, 2],
135
+ k: [2, 2],
136
+ m: [2, 2],
137
+ s: [2, 2],
138
+ G: [1, 1],
139
+ };
140
+ // Letters Flash knows but cannot format: they come out empty.
141
+ const UNSUPPORTED = "DSzZvQwWF";
142
+ const STATUS_RANK = [NO_ERROR, USING_FALLBACK_WARNING, UNSUPPORTED_ERROR];
143
+ const BUFFER_OVERFLOW_ERROR = "bufferOverflowError";
144
+ // The letters that make a pattern one of the date, which formats only Windows' dates.
145
+ const DATE_LETTERS = "yMdEGDQwF";
146
+ const TIME_LETTERS = "hHkKmsaS";
147
+ // The longest pattern Flash takes.
148
+ const PATTERN_MAX = 255;
149
+ /**
150
+ * A pattern's fields, the pattern as Flash keeps it and its status: a run
151
+ * too long is shortened and an unclosed quote closed, with a fallback
152
+ * warning, and the pattern so kept is what formats; an unknown letter or a
153
+ * pattern too long makes it a syntax error, and Flash keeps none of it. A
154
+ * NUL ends it, Flash's being a C string.
155
+ */
156
+ function parsePattern(given) {
157
+ if (given.length > PATTERN_MAX) {
158
+ return { fields: [], kept: "", status: PATTERN_SYNTAX_ERROR };
159
+ }
160
+ const pattern = given.split("\0")[0];
161
+ const fields = [];
162
+ let unclosed = false;
163
+ let kept = "";
164
+ let status = NO_ERROR;
165
+ const raise = (to) => {
166
+ if (STATUS_RANK.indexOf(to) > STATUS_RANK.indexOf(status)) {
167
+ status = to;
168
+ }
169
+ };
170
+ for (let i = 0; i < pattern.length;) {
171
+ const c = pattern[i];
172
+ if (c === "'") {
173
+ let text = "";
174
+ let j = i + 1;
175
+ if (pattern[j] === "'") {
176
+ text = "'";
177
+ j++;
178
+ }
179
+ else {
180
+ for (;;) {
181
+ if (j >= pattern.length) {
182
+ raise(USING_FALLBACK_WARNING);
183
+ unclosed = true;
184
+ break;
185
+ }
186
+ if (pattern[j] === "'") {
187
+ if (pattern[j + 1] !== "'") {
188
+ j++;
189
+ break;
190
+ }
191
+ j++;
192
+ }
193
+ text += pattern[j];
194
+ j++;
195
+ }
196
+ }
197
+ fields.push({ letter: "", count: 0, text });
198
+ kept += text === "'" && j === i + 2 ? "''" : `'${text.replaceAll("'", "''")}'`;
199
+ i = j;
200
+ continue;
201
+ }
202
+ if (!/[A-Za-z]/.test(c)) {
203
+ fields.push({ letter: "", count: 0, text: c });
204
+ kept += c;
205
+ i++;
206
+ continue;
207
+ }
208
+ let count = 1;
209
+ while (pattern[i + count] === c) {
210
+ count++;
211
+ }
212
+ i += count;
213
+ const limits = LETTERS[c];
214
+ if (limits) {
215
+ if (count > limits[0]) {
216
+ count = limits[1];
217
+ raise(USING_FALLBACK_WARNING);
218
+ }
219
+ // Windows has no lone y, nor hours counted from zero to eleven or one to twenty-four.
220
+ if ((c === "y" && count === 1) || c === "K" || c === "k") {
221
+ raise(USING_FALLBACK_WARNING);
222
+ }
223
+ }
224
+ else if (UNSUPPORTED.includes(c)) {
225
+ raise(UNSUPPORTED_ERROR);
226
+ }
227
+ else {
228
+ return { fields: [], kept: "", status: PATTERN_SYNTAX_ERROR };
229
+ }
230
+ fields.push({ letter: c, count, text: "" });
231
+ kept += c.repeat(count);
232
+ }
233
+ // Closing a quote can take the pattern past what Flash holds: it keeps none of it.
234
+ if (kept.length > PATTERN_MAX) {
235
+ return { fields: [], kept: "", status: BUFFER_OVERFLOW_ERROR };
236
+ }
237
+ return { fields: unclosed ? parsePattern(kept).fields : fields, kept, status };
238
+ }
239
+ const pad = (n) => (n < 10 ? `0${n}` : `${n}`);
240
+ // Windows' dates: from 1601, its first FILETIME, to 30828, its last year, a year past 65535
241
+ // wrapping as a 16-bit SYSTEMTIME's does; the last is its last FILETIME's day, 14 September.
242
+ const FIRST_YEAR = 1601;
243
+ const LAST_YEAR = 30828;
244
+ // Four hundred Gregorian years, after which dates, weekdays and times repeat.
245
+ const CYCLE_MS = 146097 * 86400000;
246
+ const CYCLE_YEARS = 400;
247
+ /**
248
+ * A time's fields, as a JavaScript Date and its year: a local time past
249
+ * JavaScript's range is moved by whole cycles into it, its year kept apart.
250
+ */
251
+ function fieldsOf(t) {
252
+ const cycles = Math.abs(t) > 8.64e15 ? Math.trunc(t / CYCLE_MS) : 0;
253
+ const date = new Date(t - cycles * CYCLE_MS);
254
+ return { date, year: date.getUTCFullYear() + cycles * CYCLE_YEARS };
255
+ }
256
+ /** The date as Windows takes it, or null for one it refuses. */
257
+ function windowsDate({ date, year }) {
258
+ const wrapped = year % 65536;
259
+ const last = wrapped === LAST_YEAR &&
260
+ (date.getUTCMonth() > 8 || (date.getUTCMonth() === 8 && date.getUTCDate() > 14));
261
+ if (year < 0 || wrapped < FIRST_YEAR || wrapped > LAST_YEAR || last) {
262
+ return null;
263
+ }
264
+ const day = new Date(date.getTime());
265
+ day.setUTCFullYear(wrapped);
266
+ return day;
267
+ }
268
+ /** A date's fields formatted by a pattern's; `fields` hold the time's fields as UTC's. */
269
+ function formatDate(fields, t, data) {
270
+ const year = t.getUTCFullYear();
271
+ const hours = t.getUTCHours();
272
+ const number = (n, count) => (count > 1 ? pad(n) : `${n}`);
273
+ // Windows names a month by its genitive beside a day: the nearest field either way is one.
274
+ const besideDay = (i) => [-1, 1].some((step) => {
275
+ let j = i + step;
276
+ while (fields[j] && fields[j].letter === "") {
277
+ j += step;
278
+ }
279
+ return fields[j]?.letter === "d";
280
+ });
281
+ return fields
282
+ .map(({ letter, count, text }, i) => {
283
+ switch (letter) {
284
+ case "":
285
+ return text;
286
+ case "y":
287
+ return count === 2 ? pad(year % 100) : `${year}`;
288
+ case "M":
289
+ return count < 3
290
+ ? number(t.getUTCMonth() + 1, count)
291
+ : count === 3
292
+ ? data.shortMonths[t.getUTCMonth()]
293
+ : (besideDay(i) ? data.genitiveMonths : data.months)[t.getUTCMonth()];
294
+ case "d":
295
+ return number(t.getUTCDate(), count);
296
+ case "E":
297
+ return (count < 4 ? data.shortWeekdays : data.weekdays)[t.getUTCDay()];
298
+ case "a":
299
+ return data.periods[hours < 12 ? 0 : 1];
300
+ case "h":
301
+ case "K":
302
+ return number(hours % 12 || 12, count);
303
+ case "H":
304
+ case "k":
305
+ return number(hours, count);
306
+ case "m":
307
+ return number(t.getUTCMinutes(), count);
308
+ case "s":
309
+ return number(t.getUTCSeconds(), count);
310
+ case "G":
311
+ return data.eras[year > 0 ? 1 : 0];
312
+ default:
313
+ return "";
314
+ }
315
+ })
316
+ .join("");
317
+ }
318
+ class DateSettings {
319
+ status;
320
+ locale;
321
+ data;
322
+ dateStyle = "long";
323
+ timeStyle = "long";
324
+ pattern = "";
325
+ fields = [];
326
+ constructor(locale) {
327
+ this.locale = locale;
328
+ this.status = locale.status;
329
+ this.data = localeData(locale.actual);
330
+ }
331
+ setStyles(dateStyle, timeStyle) {
332
+ this.dateStyle = dateStyle;
333
+ this.timeStyle = timeStyle;
334
+ const pick = (style, patterns) => style === "none" ? "" : style === "short" ? patterns.short : patterns.long;
335
+ this.pattern = [pick(dateStyle, this.data.date), pick(timeStyle, this.data.time)]
336
+ .filter((p) => p !== "")
337
+ .join(" ");
338
+ this.fields = parsePattern(this.pattern).fields;
339
+ }
340
+ }
341
+ export function dateTimeFormatterNatives(s) {
342
+ const natives = {};
343
+ const settings = (o) => o.$settings;
344
+ const style = (value, name) => {
345
+ if (!STYLES.includes(nonNull(s, value, name)) && value !== CUSTOM) {
346
+ throw s.rt.error("ArgumentError", 2008, "DateTimeFormatterStyle");
347
+ }
348
+ return value;
349
+ };
350
+ const names = (o, nameStyle, context) => {
351
+ const f = settings(o);
352
+ nonNull(s, nameStyle, "nameStyle");
353
+ nonNull(s, context, "context");
354
+ if (!["full", "longAbbreviation", "shortAbbreviation"].includes(nameStyle) ||
355
+ !["format", "standalone"].includes(context)) {
356
+ throw s.rt.error("ArgumentError", 2008, "invalid style or context");
357
+ }
358
+ f.status = NO_ERROR;
359
+ return { data: f.data, full: nameStyle === "full", short: nameStyle === "shortAbbreviation" };
360
+ };
361
+ class DateTimeFormatterNatives {
362
+ static getAvailableLocaleIDNames() {
363
+ return availableLocales(s);
364
+ }
365
+ "flash.globalization:DateTimeFormatter::ctor"(name, dateStyle, timeStyle) {
366
+ const locale = resolveLocale(s, nonNull(s, name, "requestedLocaleIDName"));
367
+ const date = style(dateStyle, "dateStyle");
368
+ const time = style(timeStyle, "timeStyle");
369
+ if (date === CUSTOM || time === CUSTOM) {
370
+ throw s.rt.error("TypeError", 2007, "Constructor Failed");
371
+ }
372
+ this.$settings = new DateSettings(locale);
373
+ this.$settings.setStyles(date, time);
374
+ }
375
+ get lastOperationStatus() {
376
+ return settings(this).status;
377
+ }
378
+ get requestedLocaleIDName() {
379
+ return settings(this).locale.requested;
380
+ }
381
+ get actualLocaleIDName() {
382
+ return settings(this).locale.actual;
383
+ }
384
+ setDateTimeStyles(dateStyle, timeStyle) {
385
+ const f = settings(this);
386
+ const date = style(dateStyle, "dateStyle");
387
+ const time = style(timeStyle, "timeStyle");
388
+ if (date === CUSTOM || time === CUSTOM) {
389
+ f.status = ILLEGAL_ARGUMENT_ERROR;
390
+ return;
391
+ }
392
+ f.setStyles(date, time);
393
+ f.status = NO_ERROR;
394
+ }
395
+ getDateStyle() {
396
+ settings(this).status = NO_ERROR;
397
+ return settings(this).dateStyle;
398
+ }
399
+ getTimeStyle() {
400
+ settings(this).status = NO_ERROR;
401
+ return settings(this).timeStyle;
402
+ }
403
+ getDateTimePattern() {
404
+ settings(this).status = NO_ERROR;
405
+ return settings(this).pattern;
406
+ }
407
+ setDateTimePattern(pattern) {
408
+ const f = settings(this);
409
+ const parsed = parsePattern(nonNull(s, pattern, "pattern"));
410
+ f.status = parsed.status;
411
+ if (parsed.status === PATTERN_SYNTAX_ERROR) {
412
+ return;
413
+ }
414
+ f.pattern = parsed.kept;
415
+ f.fields = parsed.fields;
416
+ f.dateStyle = CUSTOM;
417
+ f.timeStyle = CUSTOM;
418
+ }
419
+ "flash.globalization:DateTimeFormatter::formatImplementation"(date, utc) {
420
+ const f = settings(this);
421
+ const time = nonNull(s, date, "dateTime").$time;
422
+ // Local time is the runtime's, as Date's own getters give it.
423
+ const asked = utc || Number.isNaN(time)
424
+ ? 0
425
+ : s.rt.getProperty(date, s.rt.publicName("timezoneOffset"));
426
+ const offset = Number.isNaN(asked) ? new Date(time).getTimezoneOffset() : asked;
427
+ // A pattern with the date formats only Windows' dates; one of the time alone any. An
428
+ // invalid date is, as adl has it, midnight of 1 January 1970 to a pattern without the
429
+ // date in UTC and to one of the date alone in local time, and refused otherwise.
430
+ const has = (letters) => f.fields.some(({ letter }) => letter !== "" && letters.includes(letter));
431
+ const dated = has(DATE_LETTERS);
432
+ const invalid = Number.isNaN(time);
433
+ const fields = fieldsOf(invalid ? 0 : time - offset * 60000);
434
+ const refused = invalid && (utc ? dated : !dated || has(TIME_LETTERS));
435
+ const day = refused ? null : dated ? windowsDate(fields) : fields.date;
436
+ if (!day) {
437
+ f.status = ILLEGAL_ARGUMENT_ERROR;
438
+ return "";
439
+ }
440
+ f.status = NO_ERROR;
441
+ return formatDate(f.fields, day, f.data);
442
+ }
443
+ // ASC keeps no defaults for natives: these are Flash's.
444
+ getMonthNames(nameStyle = "full", context = "standalone") {
445
+ const { data, full } = names(this, nameStyle, context);
446
+ return stringVector(s, (full
447
+ ? context === "format"
448
+ ? data.genitiveMonths
449
+ : data.months
450
+ : data.shortMonths).slice());
451
+ }
452
+ getWeekdayNames(nameStyle = "full", context = "standalone") {
453
+ const { data, full, short } = names(this, nameStyle, context);
454
+ return stringVector(s, (full ? data.weekdays : short ? data.shortestWeekdays : data.shortWeekdays).slice());
455
+ }
456
+ getFirstWeekday() {
457
+ settings(this).status = NO_ERROR;
458
+ return settings(this).data.firstWeekday;
459
+ }
460
+ }
461
+ avm2.registerNativeClass(natives, "flash.globalization::DateTimeFormatter", DateTimeFormatterNatives);
462
+ return natives;
463
+ }
@@ -0,0 +1,144 @@
1
+ // flash.globalization.LocaleID: a locale name taken apart, the script and
2
+ // region it leaves out filled in with Intl's likely ones.
3
+ import { avm2 } from "../../../../runtime/index.js";
4
+ import { canonicalName, keywordsOf, NAME_PARTS, NO_ERROR, nonNull, stringVector, vectorStrings, } from "./locale.js";
5
+ const UNKNOWN_LANGUAGES = ["und", "ji", "jw", "sh"];
6
+ const RTL_SCRIPTS = /^(Adlm|Arab|Hebr|Mand|Nkoo|Rohg|Syrc|Thaa)$/;
7
+ function parseName(given) {
8
+ const canonical = canonicalName(given);
9
+ const base = canonical.split("@")[0];
10
+ const keywords = keywordsOf(canonical);
11
+ const m = keywords ? NAME_PARTS.exec(base) : null;
12
+ if (!keywords || !m) {
13
+ // Flash keeps a name it cannot take apart whole as its language, and a region after a
14
+ // language it could read.
15
+ const [first, second = ""] = canonical.split(/[-_. ]+/);
16
+ return {
17
+ name: canonical,
18
+ language: canonical,
19
+ script: "",
20
+ region: /^[a-z]{2,8}$/.test(first) && /^[a-z]{2}$/.test(second) ? second : "",
21
+ variant: "",
22
+ keywords: {},
23
+ };
24
+ }
25
+ const language = m[1].toLowerCase();
26
+ const script = m[2] && m[2][0].toUpperCase() + m[2].slice(1).toLowerCase();
27
+ const region = m[3]?.toUpperCase();
28
+ let likely;
29
+ try {
30
+ // The language as named, with its script and region; und has none, nor the deprecated
31
+ // codes Windows does not know (it knows iw, in and tl).
32
+ if (!UNKNOWN_LANGUAGES.includes(language)) {
33
+ likely = new Intl.Locale([language, script, region].filter(Boolean).join("-")).maximize();
34
+ }
35
+ }
36
+ catch { }
37
+ return {
38
+ name: canonical,
39
+ language,
40
+ script: script ?? likely?.script ?? "",
41
+ region: region ?? likely?.region ?? "",
42
+ variant: m[4]
43
+ .split(/[-_. ]+/)
44
+ .filter(Boolean)
45
+ .map((v) => v.toUpperCase())
46
+ .join("-"),
47
+ keywords,
48
+ };
49
+ }
50
+ function preference(name) {
51
+ const full = canonicalName(name).split("@")[0];
52
+ try {
53
+ const l = new Intl.Locale(full);
54
+ // und, no language, matches only itself.
55
+ if (l.language === "und") {
56
+ return { name, named: full, maximized: full, language: full, regional: false };
57
+ }
58
+ const max = l.maximize();
59
+ const implied = new Intl.Locale(l.region ? `${l.language}-${l.region}` : l.language).maximize();
60
+ const script = l.script !== implied.script ? l.script : undefined;
61
+ return {
62
+ name,
63
+ named: [l.language, script, l.region].filter(Boolean).join("-"),
64
+ maximized: max.baseName,
65
+ language: `${max.language}-${max.script}`,
66
+ regional: l.region !== undefined,
67
+ };
68
+ }
69
+ catch {
70
+ return { name, named: full, maximized: full, language: full, regional: false };
71
+ }
72
+ }
73
+ /**
74
+ * Flash's order of preference: for each locale wanted, those it has of the
75
+ * same language and script, the same locale first, then those its likely
76
+ * locale is, then another locale wanted, then the language's in other
77
+ * regions, then the language alone.
78
+ */
79
+ function preferred(want, have) {
80
+ const haves = have.map(preference);
81
+ const wants = want.map(preference);
82
+ const out = [];
83
+ for (const w of wants) {
84
+ const rank = (h) => {
85
+ if (h.named === w.named) {
86
+ return 0;
87
+ }
88
+ if (h.maximized === w.maximized) {
89
+ return 1;
90
+ }
91
+ if (wants.some((other) => other.named === h.named)) {
92
+ return 2;
93
+ }
94
+ return h.regional ? 3 : 4;
95
+ };
96
+ const same = haves.filter((h) => h.language === w.language);
97
+ for (const h of same.sort((a, b) => rank(a) - rank(b))) {
98
+ if (!out.includes(h.name)) {
99
+ out.push(h.name);
100
+ }
101
+ }
102
+ }
103
+ return out;
104
+ }
105
+ export function localeIDNatives(s) {
106
+ const natives = {};
107
+ class LocaleIDNatives {
108
+ static determinePreferredLocales(want, have, keyword = "userinterface") {
109
+ nonNull(s, want, "want");
110
+ nonNull(s, have, "have");
111
+ nonNull(s, keyword, "keyword");
112
+ return stringVector(s, preferred(vectorStrings(want), vectorStrings(have)));
113
+ }
114
+ "flash.globalization:LocaleID::ctor"(name) {
115
+ this.$parts = parseName(nonNull(s, name, "name"));
116
+ }
117
+ get name() {
118
+ return this.$parts.name;
119
+ }
120
+ get lastOperationStatus() {
121
+ return NO_ERROR;
122
+ }
123
+ getLanguage() {
124
+ return this.$parts.language;
125
+ }
126
+ getScript() {
127
+ return this.$parts.script;
128
+ }
129
+ getRegion() {
130
+ return this.$parts.region;
131
+ }
132
+ getVariant() {
133
+ return this.$parts.variant;
134
+ }
135
+ getKeysAndValues() {
136
+ return s.rt.newObject(Object.entries(this.$parts.keywords).flat());
137
+ }
138
+ isRightToLeft() {
139
+ return RTL_SCRIPTS.test(this.$parts.script);
140
+ }
141
+ }
142
+ avm2.registerNativeClass(natives, "flash.globalization::LocaleID", LocaleIDNatives);
143
+ return natives;
144
+ }