@swf2es/player-hosts 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/LICENSE.third-party +759 -0
- package/README.md +43 -2
- package/dist/indexeddb.d.ts +27 -0
- package/dist/indexeddb.d.ts.map +1 -0
- package/dist/indexeddb.js +170 -0
- package/dist/indexeddb.js.map +1 -0
- package/dist/node-worker.d.ts +2 -0
- package/dist/node-worker.d.ts.map +1 -0
- package/dist/node-worker.js +12 -0
- package/dist/node-worker.js.map +1 -0
- package/dist/node.d.ts +8 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +43 -0
- package/dist/node.js.map +1 -0
- package/dist/precompiled.d.ts +31 -0
- package/dist/precompiled.d.ts.map +1 -0
- package/dist/precompiled.js +125 -0
- package/dist/precompiled.js.map +1 -0
- package/dist/stage3d.d.ts +13 -0
- package/dist/stage3d.d.ts.map +1 -0
- package/dist/stage3d.js +61 -0
- package/dist/stage3d.js.map +1 -0
- package/dist/thread/codegen/codegen.js +308 -0
- package/dist/thread/codegen/index.js +405 -0
- package/dist/thread/format/abc-names.js +126 -0
- package/dist/thread/format/actions.js +222 -0
- package/dist/thread/format/air-descriptor.js +63 -0
- package/dist/thread/format/api-versions.js +22 -0
- package/dist/thread/format/bitmap.js +199 -0
- package/dist/thread/format/button.js +60 -0
- package/dist/thread/format/compression.js +200 -0
- package/dist/thread/format/display.js +305 -0
- package/dist/thread/format/filters.js +136 -0
- package/dist/thread/format/font.js +168 -0
- package/dist/thread/format/index.js +26 -0
- package/dist/thread/format/pbj.js +484 -0
- package/dist/thread/format/shape.js +411 -0
- package/dist/thread/format/sound.js +91 -0
- package/dist/thread/format/swf.js +163 -0
- package/dist/thread/format/tags.js +58 -0
- package/dist/thread/format/text.js +135 -0
- package/dist/thread/format/zip.js +91 -0
- package/dist/thread/native/audio/binary.js +3 -0
- package/dist/thread/native/audio/index.js +72 -0
- package/dist/thread/native/base64.js +9 -0
- package/dist/thread/native/compress/binary.js +3 -0
- package/dist/thread/native/compress/index.js +145 -0
- package/dist/thread/native/instance.js +49 -0
- package/dist/thread/native/mp3/binary.js +3 -0
- package/dist/thread/native/mp3/index.js +48 -0
- package/dist/thread/native/render/binary.js +3 -0
- package/dist/thread/native/render/bitmap-kernel.js +591 -0
- package/dist/thread/native/render/draw-kernel.js +204 -0
- package/dist/thread/native/render/dxt-encoder.js +94 -0
- package/dist/thread/native/render/index.js +10 -0
- package/dist/thread/native/render/lines.js +122 -0
- package/dist/thread/native/render/module.js +26 -0
- package/dist/thread/native/render/pixel-ops.js +235 -0
- package/dist/thread/native/render/tessellator.js +250 -0
- package/dist/thread/player/avm1/amf.js +507 -0
- package/dist/thread/player/avm1/avm1.js +1304 -0
- package/dist/thread/player/avm1/bindings.js +214 -0
- package/dist/thread/player/avm1/classes.js +75 -0
- package/dist/thread/player/avm1/clips.js +229 -0
- package/dist/thread/player/avm1/compile.js +140 -0
- package/dist/thread/player/avm1/external.js +79 -0
- package/dist/thread/player/avm1/focus.js +278 -0
- package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
- package/dist/thread/player/avm1/globals/Button.js +31 -0
- package/dist/thread/player/avm1/globals/Color.js +115 -0
- package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
- package/dist/thread/player/avm1/globals/FileReference.js +217 -0
- package/dist/thread/player/avm1/globals/Key.js +60 -0
- package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
- package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
- package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
- package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
- package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
- package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
- package/dist/thread/player/avm1/globals/Selection.js +62 -0
- package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
- package/dist/thread/player/avm1/globals/Sound.js +238 -0
- package/dist/thread/player/avm1/globals/Stage.js +12 -0
- package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
- package/dist/thread/player/avm1/globals/TextField.js +396 -0
- package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
- package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
- package/dist/thread/player/avm1/globals/XML.js +396 -0
- package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
- package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
- package/dist/thread/player/avm1/globals/drawing.js +202 -0
- package/dist/thread/player/avm1/globals/filters.js +635 -0
- package/dist/thread/player/avm1/globals/geom.js +600 -0
- package/dist/thread/player/avm1/input.js +483 -0
- package/dist/thread/player/avm1/keyboard.js +113 -0
- package/dist/thread/player/avm1/loads.js +352 -0
- package/dist/thread/player/avm1/net.js +219 -0
- package/dist/thread/player/avm1/paths.js +104 -0
- package/dist/thread/player/avm1/pointer.js +512 -0
- package/dist/thread/player/avm1/queue.js +303 -0
- package/dist/thread/player/avm1/sound.js +106 -0
- package/dist/thread/player/avm1/swf.js +141 -0
- package/dist/thread/player/avm1/timers.js +113 -0
- package/dist/thread/player/bitmap/bitmap.js +627 -0
- package/dist/thread/player/bitmap/draw.js +68 -0
- package/dist/thread/player/bitmap/dxt.js +11 -0
- package/dist/thread/player/bitmap/filters.js +656 -0
- package/dist/thread/player/bitmap/images.js +240 -0
- package/dist/thread/player/bitmap/kernel.js +65 -0
- package/dist/thread/player/bitmap/ops.js +1239 -0
- package/dist/thread/player/bitmap/pixel-bender.js +911 -0
- package/dist/thread/player/bitmap/png.js +139 -0
- package/dist/thread/player/bitmap/turbulence.js +89 -0
- package/dist/thread/player/clock.js +182 -0
- package/dist/thread/player/display/bitmapobject.js +25 -0
- package/dist/thread/player/display/bounds.js +520 -0
- package/dist/thread/player/display/buttonobject.js +305 -0
- package/dist/thread/player/display/color.js +40 -0
- package/dist/thread/player/display/container.js +150 -0
- package/dist/thread/player/display/display.js +14 -0
- package/dist/thread/player/display/displayobject.js +664 -0
- package/dist/thread/player/display/drawing.js +613 -0
- package/dist/thread/player/display/filters.js +285 -0
- package/dist/thread/player/display/geometry.js +189 -0
- package/dist/thread/player/display/gradients.js +117 -0
- package/dist/thread/player/display/graphicsdata.js +592 -0
- package/dist/thread/player/display/instantiate.js +71 -0
- package/dist/thread/player/display/matrix3d.js +373 -0
- package/dist/thread/player/display/morph.js +226 -0
- package/dist/thread/player/display/movieclip.js +680 -0
- package/dist/thread/player/display/perspective.js +193 -0
- package/dist/thread/player/display/scale9.js +236 -0
- package/dist/thread/player/display/shapeobject.js +131 -0
- package/dist/thread/player/display/shapes.js +407 -0
- package/dist/thread/player/display/textobjects.js +222 -0
- package/dist/thread/player/display/timeline.js +471 -0
- package/dist/thread/player/display/value-lists.js +40 -0
- package/dist/thread/player/display/videoobject.js +6 -0
- package/dist/thread/player/display/walk.js +127 -0
- package/dist/thread/player/files.js +334 -0
- package/dist/thread/player/hosts.js +207 -0
- package/dist/thread/player/input/avm1.js +82 -0
- package/dist/thread/player/input/context-menu.js +63 -0
- package/dist/thread/player/input/keyboard.js +458 -0
- package/dist/thread/player/input/pointer.js +863 -0
- package/dist/thread/player/input/text-editor.js +319 -0
- package/dist/thread/player/input/touch.js +209 -0
- package/dist/thread/player/localconnection.js +90 -0
- package/dist/thread/player/media/audio.js +376 -0
- package/dist/thread/player/media/dynamic-sound.js +90 -0
- package/dist/thread/player/media/extract.js +135 -0
- package/dist/thread/player/media/mp3.js +152 -0
- package/dist/thread/player/media/sounds.js +507 -0
- package/dist/thread/player/media/streaming-audio.js +133 -0
- package/dist/thread/player/player.js +616 -0
- package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
- package/dist/thread/player/playerglobal/air-library.js +8 -0
- package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
- package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
- package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
- package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
- package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
- package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
- package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
- package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
- package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
- package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
- package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
- package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
- package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
- package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
- package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
- package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
- package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
- package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
- package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
- package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
- package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
- package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
- package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
- package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
- package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
- package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
- package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
- package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
- package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
- package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
- package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
- package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
- package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
- package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
- package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
- package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
- package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
- package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
- package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
- package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
- package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
- package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
- package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
- package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
- package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
- package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
- package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
- package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
- package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
- package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
- package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
- package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
- package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
- package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
- package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
- package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
- package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
- package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
- package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
- package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
- package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
- package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
- package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
- package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
- package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
- package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
- package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
- package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
- package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
- package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
- package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
- package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
- package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
- package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
- package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
- package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
- package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
- package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
- package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
- package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
- package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
- package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
- package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
- package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
- package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
- package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
- package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
- package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
- package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
- package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
- package/dist/thread/player/playerglobal/index.js +224 -0
- package/dist/thread/player/playerglobal/libraries.js +10 -0
- package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
- package/dist/thread/player/playerglobal/toplevel.js +122 -0
- package/dist/thread/player/scripting/clipboard.js +146 -0
- package/dist/thread/player/scripting/code.js +900 -0
- package/dist/thread/player/scripting/evaluate.js +144 -0
- package/dist/thread/player/scripting/events.js +172 -0
- package/dist/thread/player/scripting/handover.js +182 -0
- package/dist/thread/player/scripting/lazy.js +38 -0
- package/dist/thread/player/scripting/lifecycle.js +272 -0
- package/dist/thread/player/scripting/loads.js +860 -0
- package/dist/thread/player/scripting/sha256.js +95 -0
- package/dist/thread/player/scripting/symbols.js +348 -0
- package/dist/thread/player/scripting/timers.js +434 -0
- package/dist/thread/player/scripting/workers.js +923 -0
- package/dist/thread/player/scripting.js +1018 -0
- package/dist/thread/player/stage.js +4 -0
- package/dist/thread/player/text/csm.js +113 -0
- package/dist/thread/player/text/css.js +167 -0
- package/dist/thread/player/text/fonts.js +97 -0
- package/dist/thread/player/text/layout.js +393 -0
- package/dist/thread/player/text/static.js +109 -0
- package/dist/thread/player/text/text.js +431 -0
- package/dist/thread/player/workers/thread.js +159 -0
- package/dist/thread/player/workers/wire.js +198 -0
- package/dist/thread/player-hosts/web-worker.js +19 -0
- package/dist/thread/runtime/avm1/activation.js +89 -0
- package/dist/thread/runtime/avm1/case.js +249 -0
- package/dist/thread/runtime/avm1/clips.js +334 -0
- package/dist/thread/runtime/avm1/control.js +280 -0
- package/dist/thread/runtime/avm1/errors.js +50 -0
- package/dist/thread/runtime/avm1/functions.js +249 -0
- package/dist/thread/runtime/avm1/globals/array.js +549 -0
- package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
- package/dist/thread/runtime/avm1/globals/date.js +436 -0
- package/dist/thread/runtime/avm1/globals/global.js +344 -0
- package/dist/thread/runtime/avm1/globals/math.js +139 -0
- package/dist/thread/runtime/avm1/globals/number.js +93 -0
- package/dist/thread/runtime/avm1/globals/string.js +201 -0
- package/dist/thread/runtime/avm1/globals/timers.js +129 -0
- package/dist/thread/runtime/avm1/host.js +5 -0
- package/dist/thread/runtime/avm1/index.js +14 -0
- package/dist/thread/runtime/avm1/inheritance.js +132 -0
- package/dist/thread/runtime/avm1/numbers.js +298 -0
- package/dist/thread/runtime/avm1/objects.js +896 -0
- package/dist/thread/runtime/avm1/operators.js +170 -0
- package/dist/thread/runtime/avm1/realm.js +529 -0
- package/dist/thread/runtime/avm1/runtime.js +882 -0
- package/dist/thread/runtime/avm1/scope.js +385 -0
- package/dist/thread/runtime/avm1/urls.js +180 -0
- package/dist/thread/runtime/avm1/values.js +97 -0
- package/dist/thread/runtime/avm2/amf-classes.js +66 -0
- package/dist/thread/runtime/avm2/amf.js +801 -0
- package/dist/thread/runtime/avm2/array-conversion.js +100 -0
- package/dist/thread/runtime/avm2/builtin-library.js +21 -0
- package/dist/thread/runtime/avm2/cache-fill.js +86 -0
- package/dist/thread/runtime/avm2/classes.js +211 -0
- package/dist/thread/runtime/avm2/definitions.js +69 -0
- package/dist/thread/runtime/avm2/descriptors.js +5 -0
- package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
- package/dist/thread/runtime/avm2/domain-memory.js +75 -0
- package/dist/thread/runtime/avm2/domain.js +280 -0
- package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
- package/dist/thread/runtime/avm2/enumeration.js +393 -0
- package/dist/thread/runtime/avm2/errors.js +45 -0
- package/dist/thread/runtime/avm2/float-library.js +66 -0
- package/dist/thread/runtime/avm2/float.js +26 -0
- package/dist/thread/runtime/avm2/hooks.js +19 -0
- package/dist/thread/runtime/avm2/index.js +38 -0
- package/dist/thread/runtime/avm2/messages.js +177 -0
- package/dist/thread/runtime/avm2/method-factories.js +95 -0
- package/dist/thread/runtime/avm2/modules.js +105 -0
- package/dist/thread/runtime/avm2/names.js +248 -0
- package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
- package/dist/thread/runtime/avm2/natives/array.js +390 -0
- package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
- package/dist/thread/runtime/avm2/natives/case.js +88 -0
- package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
- package/dist/thread/runtime/avm2/natives/date.js +581 -0
- package/dist/thread/runtime/avm2/natives/define.js +130 -0
- package/dist/thread/runtime/avm2/natives/describe.js +351 -0
- package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
- package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
- package/dist/thread/runtime/avm2/natives/float.js +96 -0
- package/dist/thread/runtime/avm2/natives/index.js +64 -0
- package/dist/thread/runtime/avm2/natives/json.js +514 -0
- package/dist/thread/runtime/avm2/natives/number.js +162 -0
- package/dist/thread/runtime/avm2/natives/object.js +237 -0
- package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
- package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
- package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
- package/dist/thread/runtime/avm2/natives/shell.js +557 -0
- package/dist/thread/runtime/avm2/natives/sort.js +377 -0
- package/dist/thread/runtime/avm2/natives/string.js +132 -0
- package/dist/thread/runtime/avm2/natives/sync.js +821 -0
- package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
- package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
- package/dist/thread/runtime/avm2/natives/vector.js +406 -0
- package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
- package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
- package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
- package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
- package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
- package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
- package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
- package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
- package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
- package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
- package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
- package/dist/thread/runtime/avm2/number-strings.js +110 -0
- package/dist/thread/runtime/avm2/numbers.js +558 -0
- package/dist/thread/runtime/avm2/options.js +16 -0
- package/dist/thread/runtime/avm2/player-messages.js +550 -0
- package/dist/thread/runtime/avm2/property-cache.js +135 -0
- package/dist/thread/runtime/avm2/runtime.js +2644 -0
- package/dist/thread/runtime/avm2/traits.js +509 -0
- package/dist/thread/runtime/index.js +7 -0
- package/dist/web-worker.d.ts +2 -0
- package/dist/web-worker.d.ts.map +1 -0
- package/dist/web-worker.js +20 -0
- package/dist/web-worker.js.map +1 -0
- package/dist/websocket.d.ts +4 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +27 -0
- package/dist/websocket.js.map +1 -0
- package/dist/workers.d.ts +35 -0
- package/dist/workers.d.ts.map +1 -0
- package/dist/workers.js +171 -0
- package/dist/workers.js.map +1 -0
- package/package.json +62 -3
- package/src/indexeddb.ts +227 -0
- package/src/node-worker.ts +13 -0
- package/src/node.ts +49 -0
- package/src/precompiled.ts +166 -0
- package/src/stage3d.ts +76 -0
- package/src/web-worker.ts +24 -0
- package/src/websocket.ts +32 -0
- package/src/workers.ts +255 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// SWF tag codes, as the specification numbers them. The player reads these
|
|
2
|
+
// first; any other tag is kept by its code.
|
|
3
|
+
export const End = 0;
|
|
4
|
+
export const ShowFrame = 1;
|
|
5
|
+
export const DefineShape = 2;
|
|
6
|
+
export const PlaceObject = 4;
|
|
7
|
+
export const RemoveObject = 5;
|
|
8
|
+
export const DefineBits = 6;
|
|
9
|
+
export const DefineButton = 7;
|
|
10
|
+
export const JPEGTables = 8;
|
|
11
|
+
export const SetBackgroundColor = 9;
|
|
12
|
+
export const DefineFont = 10;
|
|
13
|
+
export const DefineText = 11;
|
|
14
|
+
export const DoAction = 12;
|
|
15
|
+
export const DefineFontInfo = 13;
|
|
16
|
+
export const DefineSound = 14;
|
|
17
|
+
export const StartSound = 15;
|
|
18
|
+
export const DefineButtonSound = 17;
|
|
19
|
+
export const SoundStreamHead = 18;
|
|
20
|
+
export const SoundStreamBlock = 19;
|
|
21
|
+
export const DefineBitsLossless = 20;
|
|
22
|
+
export const DefineBitsJPEG2 = 21;
|
|
23
|
+
export const DefineShape2 = 22;
|
|
24
|
+
export const DefineButtonCxform = 23;
|
|
25
|
+
export const PlaceObject2 = 26;
|
|
26
|
+
export const RemoveObject2 = 28;
|
|
27
|
+
export const DefineShape3 = 32;
|
|
28
|
+
export const DefineText2 = 33;
|
|
29
|
+
export const DefineButton2 = 34;
|
|
30
|
+
export const DefineBitsJPEG3 = 35;
|
|
31
|
+
export const DefineBitsLossless2 = 36;
|
|
32
|
+
export const DefineEditText = 37;
|
|
33
|
+
export const DefineSprite = 39;
|
|
34
|
+
export const FrameLabel = 43;
|
|
35
|
+
export const SoundStreamHead2 = 45;
|
|
36
|
+
export const DefineMorphShape = 46;
|
|
37
|
+
export const DefineFont2 = 48;
|
|
38
|
+
export const ExportAssets = 56;
|
|
39
|
+
export const ScriptLimits = 65;
|
|
40
|
+
export const DoInitAction = 59;
|
|
41
|
+
export const DefineFontInfo2 = 62;
|
|
42
|
+
export const FileAttributes = 69;
|
|
43
|
+
export const PlaceObject3 = 70;
|
|
44
|
+
export const DoABC = 72;
|
|
45
|
+
export const DefineFontAlignZones = 73;
|
|
46
|
+
export const CSMTextSettings = 74;
|
|
47
|
+
export const DefineFont3 = 75;
|
|
48
|
+
export const SymbolClass = 76;
|
|
49
|
+
export const DefineScalingGrid = 78;
|
|
50
|
+
export const DoABC2 = 82;
|
|
51
|
+
export const DefineShape4 = 83;
|
|
52
|
+
export const DefineMorphShape2 = 84;
|
|
53
|
+
export const DefineSceneAndFrameLabelData = 86;
|
|
54
|
+
export const DefineBinaryData = 87;
|
|
55
|
+
export const StartSound2 = 89;
|
|
56
|
+
export const DefineBitsJPEG4 = 90;
|
|
57
|
+
export const DefineFont4 = 91;
|
|
58
|
+
export const PlaceObject4 = 94;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// The text characters a SWF places on its timeline: editable text
|
|
2
|
+
// (DefineEditText) and static text (DefineText, DefineText2).
|
|
3
|
+
import { readString, utf8 } from "./display.js";
|
|
4
|
+
import { readMatrix } from "./shape.js";
|
|
5
|
+
import { SwfReader } from "./swf.js";
|
|
6
|
+
import { DefineText2 } from "./tags.js";
|
|
7
|
+
/** DefineEditText (tag 37), including every conditional field before its variable and text. */
|
|
8
|
+
export function readEditText(bytes, tag) {
|
|
9
|
+
const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
|
|
10
|
+
const id = r.u16();
|
|
11
|
+
const bounds = r.rect();
|
|
12
|
+
const flags = r.u8();
|
|
13
|
+
const flags2 = r.u8();
|
|
14
|
+
const hasText = (flags & 0x80) !== 0;
|
|
15
|
+
const hasFont = (flags & 0x01) !== 0;
|
|
16
|
+
const hasFontClass = (flags2 & 0x80) !== 0;
|
|
17
|
+
const fontId = hasFont ? r.u16() : null;
|
|
18
|
+
const fontClass = hasFontClass ? readString(r) : null;
|
|
19
|
+
const fontHeight = hasFont || hasFontClass ? r.u16() : null;
|
|
20
|
+
const color = flags & 0x04 ? r.u32() : null;
|
|
21
|
+
const maxLength = flags & 0x02 ? r.u16() : null;
|
|
22
|
+
let align = 0;
|
|
23
|
+
let leftMargin = 0;
|
|
24
|
+
let rightMargin = 0;
|
|
25
|
+
let indent = 0;
|
|
26
|
+
let leading = 0;
|
|
27
|
+
if (flags2 & 0x20) {
|
|
28
|
+
align = r.u8();
|
|
29
|
+
leftMargin = r.u16();
|
|
30
|
+
rightMargin = r.u16();
|
|
31
|
+
// Signed, as Flash reads it, though the specification says UI16: a hanging indent is negative.
|
|
32
|
+
indent = r.s16();
|
|
33
|
+
leading = r.s16();
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
id,
|
|
37
|
+
bounds,
|
|
38
|
+
variable: readString(r),
|
|
39
|
+
text: hasText ? readString(r) : "",
|
|
40
|
+
color,
|
|
41
|
+
fontId,
|
|
42
|
+
fontClass,
|
|
43
|
+
fontHeight,
|
|
44
|
+
align,
|
|
45
|
+
leftMargin,
|
|
46
|
+
rightMargin,
|
|
47
|
+
indent,
|
|
48
|
+
leading,
|
|
49
|
+
maxLength,
|
|
50
|
+
wordWrap: (flags & 0x40) !== 0,
|
|
51
|
+
multiline: (flags & 0x20) !== 0,
|
|
52
|
+
password: (flags & 0x10) !== 0,
|
|
53
|
+
readOnly: (flags & 0x08) !== 0,
|
|
54
|
+
autoSize: (flags2 & 0x40) !== 0,
|
|
55
|
+
selectable: (flags2 & 0x10) === 0,
|
|
56
|
+
border: (flags2 & 0x08) !== 0,
|
|
57
|
+
html: (flags2 & 0x02) !== 0,
|
|
58
|
+
useOutlines: (flags2 & 0x01) !== 0,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/** DefineFont2 (48) or DefineFont3 (75): the id, flags, language, then the name, a length-prefixed string. */
|
|
62
|
+
export function readFontName(bytes, tag) {
|
|
63
|
+
const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
|
|
64
|
+
const id = r.u16();
|
|
65
|
+
const flags = r.u8();
|
|
66
|
+
r.u8();
|
|
67
|
+
const length = r.u8();
|
|
68
|
+
const start = r.pos;
|
|
69
|
+
let end = Math.min(start + length, r.end);
|
|
70
|
+
// A trailing NUL, which some tools write, is no part of the name.
|
|
71
|
+
while (end > start && bytes[end - 1] === 0) {
|
|
72
|
+
end--;
|
|
73
|
+
}
|
|
74
|
+
const name = utf8(bytes.subarray(start, end));
|
|
75
|
+
return { id, name, bold: (flags & 0x01) !== 0, italic: (flags & 0x02) !== 0 };
|
|
76
|
+
}
|
|
77
|
+
/** DefineText (11) or DefineText2 (33, whose colours have alpha), up to its end record or the tag's end. */
|
|
78
|
+
export function readStaticText(bytes, tag) {
|
|
79
|
+
const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
|
|
80
|
+
const alpha = tag.code === DefineText2;
|
|
81
|
+
const id = r.u16();
|
|
82
|
+
const bounds = r.rect();
|
|
83
|
+
const matrix = readMatrix(r);
|
|
84
|
+
const glyphBits = r.u8();
|
|
85
|
+
const advanceBits = r.u8();
|
|
86
|
+
const records = [];
|
|
87
|
+
for (;;) {
|
|
88
|
+
const flags = r.u8();
|
|
89
|
+
if (flags === 0 || r.overrun) {
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
const font = flags & 0x08 ? r.u16() : null;
|
|
93
|
+
let color = null;
|
|
94
|
+
if (flags & 0x04) {
|
|
95
|
+
const red = r.u8();
|
|
96
|
+
const green = r.u8();
|
|
97
|
+
const blue = r.u8();
|
|
98
|
+
const a = alpha ? r.u8() : 255;
|
|
99
|
+
color = ((a << 24) | (red << 16) | (green << 8) | blue) >>> 0;
|
|
100
|
+
}
|
|
101
|
+
const x = flags & 0x01 ? r.s16() : null;
|
|
102
|
+
const y = flags & 0x02 ? r.s16() : null;
|
|
103
|
+
const height = font !== null ? r.u16() : null;
|
|
104
|
+
const count = r.u8();
|
|
105
|
+
const glyphs = [];
|
|
106
|
+
for (let i = 0; i < count && !r.overrun; i++) {
|
|
107
|
+
glyphs.push({ index: r.ub(glyphBits), advance: r.sb(advanceBits) });
|
|
108
|
+
}
|
|
109
|
+
// A record the tag's end cuts off is left out, not read as zeros.
|
|
110
|
+
if (r.overrun) {
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
r.align();
|
|
114
|
+
records.push({ font, color, x, y, height, glyphs });
|
|
115
|
+
}
|
|
116
|
+
return { id, bounds, matrix, records };
|
|
117
|
+
}
|
|
118
|
+
export function readCsmTextSettings(bytes, tag) {
|
|
119
|
+
const r = new SwfReader(bytes, tag.offset, tag.offset + tag.length);
|
|
120
|
+
const id = r.u16();
|
|
121
|
+
const flags = r.u8();
|
|
122
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
123
|
+
const float = () => {
|
|
124
|
+
const at = r.pos;
|
|
125
|
+
r.pos += 4;
|
|
126
|
+
return at + 4 <= r.end ? view.getFloat32(at, true) : 0;
|
|
127
|
+
};
|
|
128
|
+
return {
|
|
129
|
+
id,
|
|
130
|
+
useFlashType: flags >> 6 === 1,
|
|
131
|
+
gridFit: (flags >> 3) & 7,
|
|
132
|
+
thickness: float(),
|
|
133
|
+
sharpness: float(),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// A ZIP archive's files, as an AIR package (`.air`) and any zip of an
|
|
2
|
+
// application's folder hold them: the central directory read from the
|
|
3
|
+
// archive's end, each file stored or deflated. Enough for what packagers
|
|
4
|
+
// write; ZIP64, encryption and the other methods are refused.
|
|
5
|
+
import { zlibUncompress } from "./compression.js";
|
|
6
|
+
import { utf8 } from "./display.js";
|
|
7
|
+
const END_SIGNATURE = 0x06054b50;
|
|
8
|
+
const CENTRAL_SIGNATURE = 0x02014b50;
|
|
9
|
+
const LOCAL_SIGNATURE = 0x04034b50;
|
|
10
|
+
/** The end record's size without its comment, and the most its comment may add. */
|
|
11
|
+
const END_SIZE = 22;
|
|
12
|
+
const MAX_COMMENT = 0xffff;
|
|
13
|
+
const STORED = 0;
|
|
14
|
+
const DEFLATED = 8;
|
|
15
|
+
export class ZipError extends Error {
|
|
16
|
+
name = "ZipError";
|
|
17
|
+
}
|
|
18
|
+
/** The files of the archive `zip`, in its central directory's order. */
|
|
19
|
+
export function readZip(zip) {
|
|
20
|
+
const view = new DataView(zip.buffer, zip.byteOffset, zip.byteLength);
|
|
21
|
+
const end = findEnd(zip, view);
|
|
22
|
+
const count = view.getUint16(end + 10, true);
|
|
23
|
+
let at = view.getUint32(end + 16, true);
|
|
24
|
+
const entries = [];
|
|
25
|
+
for (let i = 0; i < count; i++) {
|
|
26
|
+
if (at + 46 > zip.length || view.getUint32(at, true) !== CENTRAL_SIGNATURE) {
|
|
27
|
+
throw new ZipError("the central directory is cut short");
|
|
28
|
+
}
|
|
29
|
+
const method = view.getUint16(at + 10, true);
|
|
30
|
+
const time = view.getUint16(at + 12, true);
|
|
31
|
+
const date = view.getUint16(at + 14, true);
|
|
32
|
+
const compressed = view.getUint32(at + 20, true);
|
|
33
|
+
const size = view.getUint32(at + 24, true);
|
|
34
|
+
const nameLength = view.getUint16(at + 28, true);
|
|
35
|
+
const extraLength = view.getUint16(at + 30, true);
|
|
36
|
+
const commentLength = view.getUint16(at + 32, true);
|
|
37
|
+
const local = view.getUint32(at + 42, true);
|
|
38
|
+
const name = utf8(zip.subarray(at + 46, at + 46 + nameLength));
|
|
39
|
+
if (compressed === 0xffffffff || size === 0xffffffff || local === 0xffffffff) {
|
|
40
|
+
throw new ZipError(`${name}: ZIP64 archives are not read`);
|
|
41
|
+
}
|
|
42
|
+
if ((view.getUint16(at + 8, true) & 1) !== 0) {
|
|
43
|
+
throw new ZipError(`${name}: encrypted`);
|
|
44
|
+
}
|
|
45
|
+
if (method !== STORED && method !== DEFLATED) {
|
|
46
|
+
throw new ZipError(`${name}: compression method ${method} is not read`);
|
|
47
|
+
}
|
|
48
|
+
entries.push({
|
|
49
|
+
name,
|
|
50
|
+
size,
|
|
51
|
+
modified: dosTime(date, time),
|
|
52
|
+
bytes: () => entryBytes(zip, view, name, local, method, compressed, size),
|
|
53
|
+
});
|
|
54
|
+
at += 46 + nameLength + extraLength + commentLength;
|
|
55
|
+
}
|
|
56
|
+
return entries;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Where the end of central directory record starts: the last signature
|
|
60
|
+
* whose comment the archive holds, as some tools leave bytes after it.
|
|
61
|
+
*/
|
|
62
|
+
function findEnd(zip, view) {
|
|
63
|
+
const last = zip.length - END_SIZE;
|
|
64
|
+
for (let at = last; at >= 0 && at >= last - MAX_COMMENT; at--) {
|
|
65
|
+
if (view.getUint32(at, true) === END_SIGNATURE &&
|
|
66
|
+
at + END_SIZE + view.getUint16(at + 20, true) <= zip.length) {
|
|
67
|
+
return at;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
throw new ZipError("not a ZIP archive: no end of central directory");
|
|
71
|
+
}
|
|
72
|
+
function entryBytes(zip, view, name, local, method, compressed, size) {
|
|
73
|
+
if (local + 30 > zip.length || view.getUint32(local, true) !== LOCAL_SIGNATURE) {
|
|
74
|
+
throw new ZipError(`${name}: no local header where the directory says`);
|
|
75
|
+
}
|
|
76
|
+
// The local header's own name and extra lengths, which may differ from the directory's.
|
|
77
|
+
const start = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);
|
|
78
|
+
if (start + compressed > zip.length) {
|
|
79
|
+
throw new ZipError(`${name}: cut short`);
|
|
80
|
+
}
|
|
81
|
+
const data = zip.subarray(start, start + compressed);
|
|
82
|
+
const bytes = method === STORED ? data.slice() : zlibUncompress(data, true);
|
|
83
|
+
if (bytes.length !== size) {
|
|
84
|
+
throw new ZipError(`${name}: ${bytes.length} bytes where the directory says ${size}`);
|
|
85
|
+
}
|
|
86
|
+
return bytes;
|
|
87
|
+
}
|
|
88
|
+
/** A DOS date and time (2-second steps) as ms since 1970, read as local time. */
|
|
89
|
+
function dosTime(date, time) {
|
|
90
|
+
return new Date(1980 + (date >> 9), ((date >> 5) & 15) - 1, date & 31, time >> 11, (time >> 5) & 63, (time & 31) * 2).getTime();
|
|
91
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by packages/native/build.ts; its Nellymoser decoder is translated from FFmpeg's, under the MIT licence.
|
|
2
|
+
// inputs: 8b384e6410cd54c8e5b379d9035b9b6625f62d7e346430c88b06732ab35d1d09
|
|
3
|
+
export const binary = "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";
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// SWF's ADPCM and Nellymoser sound, decoded synchronously in one module
|
|
2
|
+
// that imports nothing (src/audio/root.zig), kept as compress's is: each
|
|
3
|
+
// call copies its input into the module's memory, decodes there in an
|
|
4
|
+
// arena reset first, and copies the samples out. A Nellymoser stream's
|
|
5
|
+
// state stays here between its calls, copied in and out with each.
|
|
6
|
+
import { KeptInstance } from "../instance.js";
|
|
7
|
+
import { binary } from "./binary.js";
|
|
8
|
+
const kept = new KeptInstance(binary);
|
|
9
|
+
/** `data` in the module's memory, after a reset; 0 if it does not fit. */
|
|
10
|
+
function input(x, data) {
|
|
11
|
+
x.reset();
|
|
12
|
+
const at = x.alloc(data.length);
|
|
13
|
+
if (at !== 0) {
|
|
14
|
+
new Uint8Array(x.memory.buffer, at, data.length).set(data);
|
|
15
|
+
}
|
|
16
|
+
return at;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* SWF's ADPCM as 16-bit samples, channels interleaved: a code size, then
|
|
20
|
+
* packets of a header per channel (a 16-bit sample and a 6-bit step index)
|
|
21
|
+
* and 4095 codes, the header's sample the packet's first, as adl gives it
|
|
22
|
+
* (Ruffle's decoder leaves it out). It ends where the bits do; none where
|
|
23
|
+
* the module cannot have the memory.
|
|
24
|
+
*/
|
|
25
|
+
export function decodeAdpcm(data, channels) {
|
|
26
|
+
return kept.call((x) => {
|
|
27
|
+
const at = input(x, data);
|
|
28
|
+
const n = at === 0 ? -1 : x.decodeAdpcm(at, data.length, channels);
|
|
29
|
+
return n <= 0
|
|
30
|
+
? new Int16Array(0)
|
|
31
|
+
: new Int16Array(x.memory.buffer, x.resultPointer(), n).slice();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** The samples a Nellymoser block decodes to. */
|
|
35
|
+
export const NELLYMOSER_SAMPLES = 256;
|
|
36
|
+
/** Nellymoser's blocks into samples, the overlap carried from one call to the next, as a stream's blocks need. */
|
|
37
|
+
export class NellymoserDecoder {
|
|
38
|
+
/** The stream's state as the module keeps it, made at the first call. */
|
|
39
|
+
#state = null;
|
|
40
|
+
/**
|
|
41
|
+
* `data`'s whole 64-byte blocks as samples from -1 to 1, 256 a block;
|
|
42
|
+
* none where the module cannot have the memory, the stream's state then
|
|
43
|
+
* as it was.
|
|
44
|
+
*/
|
|
45
|
+
decode(data) {
|
|
46
|
+
return kept.call((x) => {
|
|
47
|
+
x.reset();
|
|
48
|
+
const size = x.nellymoserStateSize();
|
|
49
|
+
const state = x.alloc(size);
|
|
50
|
+
if (state === 0) {
|
|
51
|
+
return new Float32Array(0);
|
|
52
|
+
}
|
|
53
|
+
if (this.#state) {
|
|
54
|
+
new Uint8Array(x.memory.buffer, state, size).set(this.#state);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
x.nellymoserStart(state);
|
|
58
|
+
}
|
|
59
|
+
const at = x.alloc(data.length);
|
|
60
|
+
if (at === 0) {
|
|
61
|
+
return new Float32Array(0);
|
|
62
|
+
}
|
|
63
|
+
new Uint8Array(x.memory.buffer, at, data.length).set(data);
|
|
64
|
+
const n = x.decodeNellymoser(at, data.length, state);
|
|
65
|
+
if (n < 0) {
|
|
66
|
+
return new Float32Array(0);
|
|
67
|
+
}
|
|
68
|
+
this.#state = new Uint8Array(x.memory.buffer, state, size).slice();
|
|
69
|
+
return new Float32Array(x.memory.buffer, x.resultPointer(), n).slice();
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Base64 to bytes with a plain loop: Uint8Array.from with a callback takes some 8 times as long. */
|
|
2
|
+
export function decodeBase64(text) {
|
|
3
|
+
const raw = atob(text);
|
|
4
|
+
const bytes = new Uint8Array(raw.length);
|
|
5
|
+
for (let i = 0; i < raw.length; i++) {
|
|
6
|
+
bytes[i] = raw.charCodeAt(i);
|
|
7
|
+
}
|
|
8
|
+
return bytes;
|
|
9
|
+
}
|