@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,168 @@
1
+ // DefineFont through DefineFont3: a font's glyphs, the outlines a field that
2
+ // embeds it draws, and its layout, the advances, kerning, ascent and
3
+ // descent a field's text is laid out by.
4
+ import { readString, utf8 } from "./display.js";
5
+ import { readRecords } from "./shape.js";
6
+ import { SwfReader } from "./swf.js";
7
+ import { DefineFont, DefineFont3, DefineFontInfo2 } from "./tags.js";
8
+ import { readFontName } from "./text.js";
9
+ /** DefineFont4 (91): a name, style, and optional OpenType CFF bytes. */
10
+ export function readFont4(bytes, tag) {
11
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
12
+ const id = r.u16();
13
+ const flags = r.u8();
14
+ const name = readString(r);
15
+ return {
16
+ id,
17
+ name,
18
+ bold: (flags & 1) !== 0,
19
+ italic: (flags & 2) !== 0,
20
+ data: flags & 4 ? bytes.subarray(r.pos, r.end) : null,
21
+ };
22
+ }
23
+ /** DefineFont (10), whose first offset gives the glyph count; its name and codes come separately. */
24
+ function readFont1(bytes, tag) {
25
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
26
+ const font = {
27
+ id: r.u16(),
28
+ name: "",
29
+ bold: false,
30
+ italic: false,
31
+ em: 1024,
32
+ glyphs: [],
33
+ layout: false,
34
+ ascent: 0,
35
+ descent: 0,
36
+ leading: 0,
37
+ kerning: new Map(),
38
+ };
39
+ const table = r.pos;
40
+ const first = r.u16();
41
+ if (r.overrun || first < 2 || first % 2 !== 0 || table + first > r.end) {
42
+ return font;
43
+ }
44
+ const offsets = [first];
45
+ for (let i = 1; i < first / 2; i++) {
46
+ const offset = r.u16();
47
+ if (offset < offsets[i - 1] || table + offset > r.end) {
48
+ return font;
49
+ }
50
+ offsets.push(offset);
51
+ }
52
+ offsets.push(r.end - table);
53
+ for (let i = 0; i < offsets.length - 1; i++) {
54
+ const start = offsets[i];
55
+ const end = offsets[i + 1];
56
+ const records = readRecords(new SwfReader(bytes, table + start, table + end), 1).records;
57
+ font.glyphs.push({ code: -1, records, advance: 0, bounds: null });
58
+ }
59
+ return font;
60
+ }
61
+ /** DefineFontInfo (13) or DefineFontInfo2 (62); the latter has a language byte before its codes. */
62
+ export function readFontInfo(bytes, tag) {
63
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
64
+ const id = r.u16();
65
+ const length = r.u8();
66
+ const name = utf8(bytes.subarray(r.pos, Math.min(r.pos + length, r.end))).replace(/\0+$/, "");
67
+ r.pos += length;
68
+ const flags = r.u8();
69
+ if (tag.code === DefineFontInfo2) {
70
+ r.u8();
71
+ }
72
+ const codes = [];
73
+ const size = flags & 1 ? 2 : 1;
74
+ while (r.pos + size <= r.end) {
75
+ codes.push(size === 2 ? r.u16() : r.u8());
76
+ }
77
+ return { id, name, bold: (flags & 2) !== 0, italic: (flags & 4) !== 0, codes };
78
+ }
79
+ /** DefineFont (10), DefineFont2 (48) or DefineFont3 (75), as far as the tag goes. */
80
+ export function readFont(bytes, tag) {
81
+ if (tag.code === DefineFont) {
82
+ return readFont1(bytes, tag);
83
+ }
84
+ const named = readFontName(bytes, tag);
85
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
86
+ r.u16();
87
+ const flags = r.u8();
88
+ r.u8();
89
+ r.pos += 1 + r.u8();
90
+ const hasLayout = (flags & 0x80) !== 0;
91
+ const wideOffsets = (flags & 0x08) !== 0;
92
+ const wideCodes = (flags & 0x04) !== 0;
93
+ const count = r.u16();
94
+ const table = r.pos;
95
+ const offset = () => (wideOffsets ? r.u32() : r.u16());
96
+ const offsets = [];
97
+ for (let i = 0; i < count; i++) {
98
+ offsets.push(offset());
99
+ }
100
+ const codeTable = count > 0 ? offset() : 0;
101
+ const glyphs = [];
102
+ for (let i = 0; i < count; i++) {
103
+ const shape = new SwfReader(bytes, table + offsets[i], tag.offset + tag.length);
104
+ glyphs.push({ code: 0, records: readRecords(shape, 1).records, advance: 0, bounds: null });
105
+ }
106
+ const font = {
107
+ ...named,
108
+ em: tag.code === DefineFont3 ? 20480 : 1024,
109
+ glyphs,
110
+ layout: false,
111
+ ascent: 0,
112
+ descent: 0,
113
+ leading: 0,
114
+ kerning: new Map(),
115
+ };
116
+ if (count > 0) {
117
+ r.pos = table + codeTable;
118
+ }
119
+ const code = () => (wideCodes ? r.u16() : r.u8());
120
+ for (const glyph of glyphs) {
121
+ glyph.code = code();
122
+ }
123
+ if (!hasLayout || r.overrun) {
124
+ return font;
125
+ }
126
+ font.ascent = r.u16();
127
+ font.descent = r.u16();
128
+ font.leading = r.s16();
129
+ for (const glyph of glyphs) {
130
+ glyph.advance = r.s16();
131
+ }
132
+ for (const glyph of glyphs) {
133
+ glyph.bounds = r.rect();
134
+ }
135
+ const pairs = r.u16();
136
+ for (let i = 0; i < pairs && !r.overrun; i++) {
137
+ const first = code();
138
+ const second = code();
139
+ font.kerning.set((first << 16) | second, r.s16());
140
+ }
141
+ font.layout = !r.overrun;
142
+ return font;
143
+ }
144
+ /** The glyph for a character, by a binary search of the code table, as Flash finds it: null for one the font lacks. */
145
+ export function glyphOf(font, code) {
146
+ let lo = 0;
147
+ let hi = font.glyphs.length - 1;
148
+ while (lo <= hi) {
149
+ const mid = (lo + hi) >> 1;
150
+ const c = font.glyphs[mid].code;
151
+ if (c === code) {
152
+ return font.glyphs[mid];
153
+ }
154
+ if (c < code) {
155
+ lo = mid + 1;
156
+ }
157
+ else {
158
+ hi = mid - 1;
159
+ }
160
+ }
161
+ return null;
162
+ }
163
+ /** DefineFontAlignZones (73): the font it is for and its CSM hint; the zones themselves are not read. */
164
+ export function readFontAlignZones(bytes, tag) {
165
+ const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
166
+ const id = r.u16();
167
+ return { id, csmHint: r.u8() >> 6 };
168
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Parsers for the SWF container and its tags: shapes, fonts, text, bitmaps,
3
+ * sounds, buttons and filters, a DoABC's bytes, which codegen parses, and
4
+ * the AVM1 action blocks, which it compiles; and Pixel Bender's bytecode,
5
+ * which a script hands flash.display.Shader. Also an AIR application's
6
+ * descriptor, and the ZIP archives AIR packages are.
7
+ * The compiler and the player both use this package, so it must stay free of
8
+ * DOM and node APIs.
9
+ */
10
+ export { abcReferences } from "./abc-names.js";
11
+ export { ButtonCondition, ClipEvent, readActions, } from "./actions.js";
12
+ export { readAirDescriptor } from "./air-descriptor.js";
13
+ export { AIR_API_VERSION, API_VERSION, checkApiVersion } from "./api-versions.js";
14
+ export { isBitmapTag, readBitmap } from "./bitmap.js";
15
+ export { BUTTON_DOWN, BUTTON_HIT_TEST, BUTTON_OVER, BUTTON_UP, readButton, } from "./button.js";
16
+ export { CompressedDataError, CompressedDataTooLargeError, decompressSwf, decompressSwfPrefix, deflateCompress, LZMA_HEADER, lzmaByteArrayCompress, lzmaByteArrayUncompress, zlibCompress, zlibUncompress, } from "./compression.js";
17
+ export { readBinaryData, readDoAbc, readExports, readFrameLabel, readPlace, readRemove, readScalingGrid, readSceneData, readSprite, readString, readSymbolClass, } from "./display.js";
18
+ export { readFilters } from "./filters.js";
19
+ export { glyphOf, readFont, readFont4, readFontAlignZones, readFontInfo, } from "./font.js";
20
+ export { PBJ_RULES, PBJ_STRING, PBJ_TYPE_SIZES, PBJ_TYPES, PbjError, PbjOp, pbjFloatType, readPbj, } from "./pbj.js";
21
+ export { IDENTITY, readColorTransform, readMatrix, readMorphShape, readShape, } from "./shape.js";
22
+ export { readButtonSound, readSound, readSoundInfo, readSoundStreamBlock, readSoundStreamHead, readStartSound, } from "./sound.js";
23
+ export { backgroundColor, fileAttributes, isAs3, readSwf, readSwfHeader, readTags, SwfReader, } from "./swf.js";
24
+ export * as tags from "./tags.js";
25
+ export { readCsmTextSettings, readEditText, readFontName, readStaticText, } from "./text.js";
26
+ export { readZip, ZipError } from "./zip.js";
@@ -0,0 +1,484 @@
1
+ // Pixel Bender bytecode (PBJ), as flash.display.Shader takes it: the
2
+ // kernel's metadata, parameters and image inputs, then its operations. The
3
+ // layout is Ruffle's (https://github.com/ruffle-rs/ruffle)
4
+ // render/pixel_bender/src/parser.rs, itself after pbjas and Haxe's
5
+ // format.pbj: MIT OR Apache-2.0, Copyright (c) 2018-2022 Ruffle LLC and
6
+ // Ruffle contributors. What Flash refuses, and with which error, is
7
+ // adl's: bytes that end inside an opcode are EOFError 2030, and anything
8
+ // else it will not run, ArgumentError 2004, kernels Ruffle accepts among
9
+ // them (each operation's register kinds and sizes, PBJ_RULES).
10
+ import { utf8 } from "./display.js";
11
+ /** The parameter and metadata types, by their PBJ code, as ShaderParameterType names them. */
12
+ export const PBJ_TYPES = [
13
+ null,
14
+ "float",
15
+ "float2",
16
+ "float3",
17
+ "float4",
18
+ "matrix2x2",
19
+ "matrix3x3",
20
+ "matrix4x4",
21
+ "int",
22
+ "int2",
23
+ "int3",
24
+ "int4",
25
+ "string",
26
+ "bool",
27
+ "bool2",
28
+ "bool3",
29
+ "bool4",
30
+ ];
31
+ export const PBJ_STRING = 0xc;
32
+ /** How many numbers a value of each type holds, by code; 0 for a string. */
33
+ export const PBJ_TYPE_SIZES = [0, 1, 2, 3, 4, 4, 9, 16, 1, 2, 3, 4, 0, 1, 2, 3, 4];
34
+ /** Whether a type's numbers are floats, by code. */
35
+ export function pbjFloatType(type) {
36
+ return type >= 0x1 && type <= 0x7;
37
+ }
38
+ export const PbjOp = {
39
+ nop: 0x00,
40
+ add: 0x01,
41
+ sub: 0x02,
42
+ mul: 0x03,
43
+ rcp: 0x04,
44
+ div: 0x05,
45
+ atan2: 0x06,
46
+ pow: 0x07,
47
+ mod: 0x08,
48
+ min: 0x09,
49
+ max: 0x0a,
50
+ step: 0x0b,
51
+ sin: 0x0c,
52
+ cos: 0x0d,
53
+ tan: 0x0e,
54
+ asin: 0x0f,
55
+ acos: 0x10,
56
+ atan: 0x11,
57
+ exp: 0x12,
58
+ exp2: 0x13,
59
+ log: 0x14,
60
+ log2: 0x15,
61
+ sqrt: 0x16,
62
+ rsqrt: 0x17,
63
+ abs: 0x18,
64
+ sign: 0x19,
65
+ floor: 0x1a,
66
+ ceil: 0x1b,
67
+ fract: 0x1c,
68
+ mov: 0x1d,
69
+ floatToInt: 0x1e,
70
+ intToFloat: 0x1f,
71
+ matMatMul: 0x20,
72
+ vecMatMul: 0x21,
73
+ matVecMul: 0x22,
74
+ normalize: 0x23,
75
+ length: 0x24,
76
+ distance: 0x25,
77
+ dot: 0x26,
78
+ cross: 0x27,
79
+ equal: 0x28,
80
+ notEqual: 0x29,
81
+ lessThan: 0x2a,
82
+ lessThanEqual: 0x2b,
83
+ logicalNot: 0x2c,
84
+ logicalAnd: 0x2d,
85
+ logicalOr: 0x2e,
86
+ logicalXor: 0x2f,
87
+ sampleNearest: 0x30,
88
+ sampleLinear: 0x31,
89
+ load: 0x32,
90
+ select: 0x33,
91
+ if: 0x34,
92
+ else: 0x35,
93
+ endIf: 0x36,
94
+ floatToBool: 0x37,
95
+ boolToFloat: 0x38,
96
+ intToBool: 0x39,
97
+ boolToInt: 0x3a,
98
+ vectorEqual: 0x3b,
99
+ vectorNotEqual: 0x3c,
100
+ any: 0x3d,
101
+ all: 0x3e,
102
+ kernelMetadata: 0xa0,
103
+ parameter: 0xa1,
104
+ parameterMetadata: 0xa2,
105
+ texture: 0xa3,
106
+ name: 0xa4,
107
+ version: 0xa5,
108
+ };
109
+ /** Why Flash refuses a kernel: EOFError 2030 for bytes that end too soon, ArgumentError 2004 for anything else. */
110
+ export class PbjError extends Error {
111
+ errorID;
112
+ constructor(errorID) {
113
+ super(errorID === 2030 ? "End of file was encountered." : "One of the parameters is invalid.");
114
+ this.errorID = errorID;
115
+ }
116
+ }
117
+ const F = 1;
118
+ const I = 2;
119
+ const FF = [F, F];
120
+ const FF_II = [F, F, I, I];
121
+ const SAME_FLOAT = { kinds: FF, sizes: "same" };
122
+ const SAME_EITHER = { kinds: FF_II, sizes: "same" };
123
+ export const PBJ_RULES = new Map([
124
+ [PbjOp.add, SAME_EITHER],
125
+ [PbjOp.sub, SAME_EITHER],
126
+ [PbjOp.mul, SAME_EITHER],
127
+ [PbjOp.div, SAME_EITHER],
128
+ [PbjOp.mov, SAME_EITHER],
129
+ [PbjOp.equal, SAME_EITHER],
130
+ [PbjOp.notEqual, SAME_EITHER],
131
+ [PbjOp.lessThan, SAME_EITHER],
132
+ [PbjOp.lessThanEqual, SAME_EITHER],
133
+ [PbjOp.matMatMul, SAME_FLOAT],
134
+ [PbjOp.vecMatMul, { kinds: [F, F, F, I, I, F, I, I], sizes: "scalar" }],
135
+ [PbjOp.matVecMul, { kinds: [F, F, F, I, I, F, I, I], sizes: "scalar" }],
136
+ [PbjOp.normalize, { kinds: FF, sizes: "vector" }],
137
+ [PbjOp.length, { kinds: FF, sizes: "length" }],
138
+ [PbjOp.distance, { kinds: FF, sizes: "vector" }],
139
+ [PbjOp.cross, { kinds: FF, sizes: "cross" }],
140
+ [PbjOp.floatToInt, { kinds: [I, F], sizes: "same" }],
141
+ [PbjOp.intToFloat, { kinds: [F, I], sizes: "same" }],
142
+ [PbjOp.logicalNot, { kinds: [I, I], sizes: "scalar" }],
143
+ [PbjOp.logicalAnd, { kinds: [I, I], sizes: "scalar" }],
144
+ [PbjOp.logicalOr, { kinds: [I, I], sizes: "scalar" }],
145
+ [PbjOp.logicalXor, { kinds: [I, I], sizes: "scalar" }],
146
+ [PbjOp.floatToBool, { kinds: [I, F], sizes: "any" }],
147
+ [PbjOp.boolToFloat, { kinds: [F, I], sizes: "any" }],
148
+ [PbjOp.intToBool, { kinds: [I, I], sizes: "any" }],
149
+ [PbjOp.boolToInt, { kinds: [F, I], sizes: "any" }],
150
+ [PbjOp.vectorEqual, { kinds: FF_II, sizes: "any" }],
151
+ [PbjOp.vectorNotEqual, { kinds: FF_II, sizes: "any" }],
152
+ [PbjOp.any, { kinds: [I, I], sizes: "any" }],
153
+ [PbjOp.all, { kinds: [I, I], sizes: "any" }],
154
+ ]);
155
+ for (let op = PbjOp.rcp; op <= PbjOp.fract; op++) {
156
+ if (op !== PbjOp.div) {
157
+ PBJ_RULES.set(op, SAME_FLOAT);
158
+ }
159
+ }
160
+ PBJ_RULES.set(PbjOp.dot, SAME_FLOAT);
161
+ /** The operations adl takes on matrices, each column as its registers hold it. */
162
+ const MATRIX_OPS = [
163
+ PbjOp.add,
164
+ PbjOp.sub,
165
+ PbjOp.mul,
166
+ PbjOp.mov,
167
+ PbjOp.matMatMul,
168
+ PbjOp.matVecMul,
169
+ PbjOp.vecMatMul,
170
+ ];
171
+ function sizesFit(rule, dst, src) {
172
+ switch (rule.sizes) {
173
+ case "same":
174
+ return dst === src;
175
+ case "any":
176
+ return true;
177
+ case "scalar":
178
+ return dst === 1 && src === 1;
179
+ case "vector":
180
+ return dst === src && src >= 2;
181
+ case "length":
182
+ return dst === 1 && src >= 2;
183
+ case "cross":
184
+ return dst === 3 && src === 3;
185
+ }
186
+ }
187
+ function kindsFit(rule, dst, src) {
188
+ const d = dst.int ? I : F;
189
+ const s = src.int ? I : F;
190
+ for (let i = 0; i < rule.kinds.length; i += 2) {
191
+ if (rule.kinds[i] === d && rule.kinds[i + 1] === s) {
192
+ return true;
193
+ }
194
+ }
195
+ return false;
196
+ }
197
+ class Reader {
198
+ bytes;
199
+ at = 0;
200
+ view;
201
+ constructor(bytes) {
202
+ this.bytes = bytes;
203
+ this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
204
+ }
205
+ get done() {
206
+ return this.at >= this.bytes.length;
207
+ }
208
+ need(n) {
209
+ const at = this.at;
210
+ if (at + n > this.bytes.length) {
211
+ throw new PbjError(2030);
212
+ }
213
+ this.at += n;
214
+ return at;
215
+ }
216
+ u8() {
217
+ return this.bytes[this.need(1)];
218
+ }
219
+ u16() {
220
+ return this.view.getUint16(this.need(2), true);
221
+ }
222
+ u24() {
223
+ const at = this.need(3);
224
+ return this.bytes[at] | (this.bytes[at + 1] << 8) | (this.bytes[at + 2] << 16);
225
+ }
226
+ i32() {
227
+ return this.view.getInt32(this.need(4), true);
228
+ }
229
+ /** A float, big-endian, unlike every other number in PBJ. */
230
+ f32() {
231
+ return this.view.getFloat32(this.need(4), false);
232
+ }
233
+ skip(n) {
234
+ this.need(n);
235
+ }
236
+ /** A string to its terminating zero, in UTF-8. */
237
+ cstring() {
238
+ const start = this.at;
239
+ while (this.u8() !== 0) {
240
+ // Up to the zero.
241
+ }
242
+ return utf8(this.bytes.subarray(start, this.at - 1));
243
+ }
244
+ string(length) {
245
+ return utf8(this.bytes.subarray(this.need(length), this.at));
246
+ }
247
+ }
248
+ /** A destination: a register of the channels its 4-bit mask writes, r first. */
249
+ function destination(value, mask) {
250
+ const channels = [];
251
+ for (let c = 0; c < 4; c++) {
252
+ if (mask & (8 >> c)) {
253
+ channels.push(c);
254
+ }
255
+ }
256
+ return {
257
+ index: value & 0x7fff,
258
+ int: (value & 0x8000) !== 0,
259
+ channels,
260
+ size: channels.length,
261
+ matrix: 0,
262
+ };
263
+ }
264
+ /** A source: its register in the low 16 bits, the swizzle's four channels in the high 8. */
265
+ function source(value, size) {
266
+ const swizzle = value >>> 16;
267
+ const channels = [];
268
+ for (let i = 0; i < 4; i++) {
269
+ channels.push((swizzle >> (6 - i * 2)) & 3);
270
+ }
271
+ return { index: value & 0x7fff, int: (value & 0x8000) !== 0, channels, size, matrix: 0 };
272
+ }
273
+ function matrix(value, size) {
274
+ return {
275
+ index: value & 0x7fff,
276
+ int: (value & 0x8000) !== 0,
277
+ channels: [],
278
+ size: 1,
279
+ matrix: size,
280
+ };
281
+ }
282
+ function metadataValue(r, type) {
283
+ if (type === PBJ_STRING) {
284
+ return r.cstring();
285
+ }
286
+ const values = [];
287
+ for (let i = 0; i < PBJ_TYPE_SIZES[type]; i++) {
288
+ values.push(pbjFloatType(type) ? r.f32() : r.u16());
289
+ }
290
+ return values;
291
+ }
292
+ /**
293
+ * The kernel `bytes` hold, or PbjError with the error Flash refuses it
294
+ * with. Every byte is read: PBJ has no length, so it ends with the bytes.
295
+ */
296
+ export function readPbj(bytes) {
297
+ const r = new Reader(bytes);
298
+ const kernel = {
299
+ name: null,
300
+ metadata: [],
301
+ parameters: [],
302
+ inputs: [],
303
+ operations: [],
304
+ };
305
+ /** The parameter the second metadata opcode adds to: the last one, but for an input after it. */
306
+ let owner = null;
307
+ let depth = 0;
308
+ const elses = [];
309
+ const refuse = () => {
310
+ throw new PbjError(2004);
311
+ };
312
+ while (!r.done) {
313
+ const op = r.u8();
314
+ switch (op) {
315
+ case PbjOp.version: {
316
+ if (r.i32() !== 1) {
317
+ refuse();
318
+ }
319
+ break;
320
+ }
321
+ case PbjOp.name: {
322
+ kernel.name = r.string(r.u16());
323
+ break;
324
+ }
325
+ case PbjOp.kernelMetadata:
326
+ case PbjOp.parameterMetadata: {
327
+ const type = r.u8();
328
+ const key = r.cstring();
329
+ if (type === 0 || type >= PBJ_TYPES.length) {
330
+ // adl reads on past what it cannot size, to the end.
331
+ throw new PbjError(2030);
332
+ }
333
+ const value = metadataValue(r, type);
334
+ if (op === PbjOp.kernelMetadata) {
335
+ if (type !== PBJ_STRING && type !== 0x8) {
336
+ refuse();
337
+ }
338
+ kernel.metadata.push({ key, type, value });
339
+ }
340
+ else {
341
+ owner?.metadata.push({ key, type, value });
342
+ }
343
+ break;
344
+ }
345
+ case PbjOp.parameter: {
346
+ const qualifier = r.u8();
347
+ const type = r.u8();
348
+ const reg = r.u16();
349
+ const mask = r.u8();
350
+ const name = r.cstring();
351
+ const output = qualifier === 2;
352
+ if (type === PBJ_STRING || name === "name" || (output && !pbjFloatType(type))) {
353
+ refuse();
354
+ }
355
+ const size = type - 0x5 + 2;
356
+ const register = size >= 2 && size <= 4 ? matrix(reg, size) : destination(reg, mask & 0xf);
357
+ const parameter = { name, type, output, register, metadata: [] };
358
+ if (output && register.matrix) {
359
+ refuse();
360
+ }
361
+ kernel.parameters.push(parameter);
362
+ owner = parameter;
363
+ break;
364
+ }
365
+ case PbjOp.texture: {
366
+ const index = r.u8();
367
+ const channels = r.u8();
368
+ kernel.inputs.push({ name: r.cstring(), index, channels });
369
+ owner = null;
370
+ break;
371
+ }
372
+ case PbjOp.nop: {
373
+ // Both words read first: a nop cut short is EOFError 2030, whatever its bytes.
374
+ const first = r.u24();
375
+ const second = r.u24();
376
+ if (first !== 0 || second !== 0) {
377
+ refuse();
378
+ }
379
+ break;
380
+ }
381
+ case PbjOp.load: {
382
+ const dst = destination(r.u16(), r.u8() >> 4);
383
+ const value = dst.int ? r.i32() & 0xffff : r.f32();
384
+ if (dst.size === 0) {
385
+ refuse();
386
+ }
387
+ kernel.operations.push({ op, dst, value });
388
+ break;
389
+ }
390
+ case PbjOp.sampleNearest:
391
+ case PbjOp.sampleLinear: {
392
+ const reg = r.u16();
393
+ const mask = r.u8();
394
+ const src = source(r.u24(), (mask & 3) + 1);
395
+ const texture = r.u8();
396
+ const dst = destination(reg, mask >> 4);
397
+ // adl takes an int coordinate, and a texture never declared, which then has no input.
398
+ if (dst.int || dst.size === 0) {
399
+ refuse();
400
+ }
401
+ kernel.operations.push({ op, dst, src, texture });
402
+ break;
403
+ }
404
+ case PbjOp.if: {
405
+ r.skip(3);
406
+ const src = source(r.u24(), 1);
407
+ r.skip(1);
408
+ if (!src.int) {
409
+ refuse();
410
+ }
411
+ depth++;
412
+ elses.push(false);
413
+ kernel.operations.push({ op, src });
414
+ break;
415
+ }
416
+ case PbjOp.else:
417
+ case PbjOp.endIf: {
418
+ r.skip(7);
419
+ if (depth === 0 || (op === PbjOp.else && elses[elses.length - 1])) {
420
+ refuse();
421
+ }
422
+ if (op === PbjOp.else) {
423
+ elses[elses.length - 1] = true;
424
+ }
425
+ else {
426
+ depth--;
427
+ elses.pop();
428
+ }
429
+ kernel.operations.push({ op });
430
+ break;
431
+ }
432
+ case PbjOp.select: {
433
+ const dst = destination(r.u16(), r.u8() >> 4);
434
+ const condition = source(r.u24(), 1);
435
+ r.skip(1);
436
+ const a = source(r.u24(), dst.size);
437
+ r.skip(1);
438
+ const b = source(r.u24(), dst.size);
439
+ r.skip(1);
440
+ if (!condition.int || dst.int !== a.int || a.int !== b.int || dst.size === 0) {
441
+ refuse();
442
+ }
443
+ kernel.operations.push({ op, dst, condition, a, b });
444
+ break;
445
+ }
446
+ default: {
447
+ const reg = r.u16();
448
+ const mask = r.u8();
449
+ const value = r.u24();
450
+ r.skip(1);
451
+ const rule = PBJ_RULES.get(op) ?? refuse();
452
+ const size = (mask & 3) + 1;
453
+ const bits = (mask >> 2) & 3;
454
+ if (bits === 0) {
455
+ const dst = destination(reg, mask >> 4);
456
+ const src = source(value, size);
457
+ if (dst.size === 0 || !kindsFit(rule, dst, src) || !sizesFit(rule, dst.size, src.size)) {
458
+ refuse();
459
+ }
460
+ kernel.operations.push({ op, dst, src });
461
+ break;
462
+ }
463
+ // A matrix: its size in the mask, and no swizzle.
464
+ const n = bits + 1;
465
+ const src = matrix(value, n);
466
+ const vector = op === PbjOp.matVecMul || op === PbjOp.vecMatMul;
467
+ const dst = vector ? destination(reg, mask >> 4) : matrix(reg, n);
468
+ if (!MATRIX_OPS.includes(op) ||
469
+ value >>> 16 !== 0 ||
470
+ size !== 1 ||
471
+ src.int ||
472
+ dst.int ||
473
+ (vector ? dst.size !== n : mask >> 4 !== 0)) {
474
+ refuse();
475
+ }
476
+ kernel.operations.push({ op, dst, src });
477
+ }
478
+ }
479
+ }
480
+ if (depth !== 0 || !kernel.parameters.some((p) => p.output)) {
481
+ refuse();
482
+ }
483
+ return kernel;
484
+ }