@swf2es/native 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +313 -0
  3. package/README.md +489 -2
  4. package/dist/atf/binary.d.ts +2 -0
  5. package/dist/atf/binary.d.ts.map +1 -0
  6. package/dist/atf/binary.js +4 -0
  7. package/dist/atf/binary.js.map +1 -0
  8. package/dist/atf/index.d.ts +27 -0
  9. package/dist/atf/index.d.ts.map +1 -0
  10. package/dist/atf/index.js +158 -0
  11. package/dist/atf/index.js.map +1 -0
  12. package/dist/atf/jxr.d.ts +22 -0
  13. package/dist/atf/jxr.d.ts.map +1 -0
  14. package/dist/atf/jxr.js +60 -0
  15. package/dist/atf/jxr.js.map +1 -0
  16. package/dist/atf/parse.d.ts +65 -0
  17. package/dist/atf/parse.d.ts.map +1 -0
  18. package/dist/atf/parse.js +204 -0
  19. package/dist/atf/parse.js.map +1 -0
  20. package/dist/audio/binary.d.ts +2 -0
  21. package/dist/audio/binary.d.ts.map +1 -0
  22. package/dist/audio/binary.js +4 -0
  23. package/dist/audio/binary.js.map +1 -0
  24. package/dist/audio/index.d.ts +21 -0
  25. package/dist/audio/index.d.ts.map +1 -0
  26. package/dist/audio/index.js +73 -0
  27. package/dist/audio/index.js.map +1 -0
  28. package/dist/base64.d.ts +3 -0
  29. package/dist/base64.d.ts.map +1 -0
  30. package/dist/base64.js +10 -0
  31. package/dist/base64.js.map +1 -0
  32. package/dist/compress/binary.d.ts +2 -0
  33. package/dist/compress/binary.d.ts.map +1 -0
  34. package/dist/compress/binary.js +4 -0
  35. package/dist/compress/binary.js.map +1 -0
  36. package/dist/compress/index.d.ts +59 -0
  37. package/dist/compress/index.d.ts.map +1 -0
  38. package/dist/compress/index.js +146 -0
  39. package/dist/compress/index.js.map +1 -0
  40. package/dist/instance.d.ts +25 -0
  41. package/dist/instance.d.ts.map +1 -0
  42. package/dist/instance.js +50 -0
  43. package/dist/instance.js.map +1 -0
  44. package/dist/mp3/binary.d.ts +2 -0
  45. package/dist/mp3/binary.d.ts.map +1 -0
  46. package/dist/mp3/binary.js +4 -0
  47. package/dist/mp3/binary.js.map +1 -0
  48. package/dist/mp3/index.d.ts +20 -0
  49. package/dist/mp3/index.d.ts.map +1 -0
  50. package/dist/mp3/index.js +49 -0
  51. package/dist/mp3/index.js.map +1 -0
  52. package/dist/render/binary.d.ts +2 -0
  53. package/dist/render/binary.d.ts.map +1 -0
  54. package/dist/render/binary.js +4 -0
  55. package/dist/render/binary.js.map +1 -0
  56. package/dist/render/bitmap-kernel.d.ts +118 -0
  57. package/dist/render/bitmap-kernel.d.ts.map +1 -0
  58. package/dist/render/bitmap-kernel.js +592 -0
  59. package/dist/render/bitmap-kernel.js.map +1 -0
  60. package/dist/render/draw-kernel.d.ts +79 -0
  61. package/dist/render/draw-kernel.d.ts.map +1 -0
  62. package/dist/render/draw-kernel.js +205 -0
  63. package/dist/render/draw-kernel.js.map +1 -0
  64. package/dist/render/dxt-encoder.d.ts +19 -0
  65. package/dist/render/dxt-encoder.d.ts.map +1 -0
  66. package/dist/render/dxt-encoder.js +95 -0
  67. package/dist/render/dxt-encoder.js.map +1 -0
  68. package/dist/render/index.d.ts +6 -0
  69. package/dist/render/index.d.ts.map +1 -0
  70. package/dist/render/index.js +11 -0
  71. package/dist/render/index.js.map +1 -0
  72. package/dist/render/lines.d.ts +55 -0
  73. package/dist/render/lines.d.ts.map +1 -0
  74. package/dist/render/lines.js +123 -0
  75. package/dist/render/lines.js.map +1 -0
  76. package/dist/render/module.d.ts +11 -0
  77. package/dist/render/module.d.ts.map +1 -0
  78. package/dist/render/module.js +27 -0
  79. package/dist/render/module.js.map +1 -0
  80. package/dist/render/pixel-ops.d.ts +77 -0
  81. package/dist/render/pixel-ops.d.ts.map +1 -0
  82. package/dist/render/pixel-ops.js +236 -0
  83. package/dist/render/pixel-ops.js.map +1 -0
  84. package/dist/render/tessellator.d.ts +90 -0
  85. package/dist/render/tessellator.d.ts.map +1 -0
  86. package/dist/render/tessellator.js +251 -0
  87. package/dist/render/tessellator.js.map +1 -0
  88. package/package.json +53 -3
  89. package/src/atf/index.ts +212 -0
  90. package/src/atf/jxr.ts +83 -0
  91. package/src/atf/parse.ts +263 -0
  92. package/src/audio/index.ts +93 -0
  93. package/src/base64.ts +10 -0
  94. package/src/compress/index.ts +225 -0
  95. package/src/instance.ts +53 -0
  96. package/src/mp3/index.ts +71 -0
  97. package/src/render/bitmap-kernel.ts +856 -0
  98. package/src/render/draw-kernel.ts +268 -0
  99. package/src/render/dxt-encoder.ts +121 -0
  100. package/src/render/index.ts +37 -0
  101. package/src/render/lines.ts +161 -0
  102. package/src/render/module.ts +30 -0
  103. package/src/render/pixel-ops.ts +356 -0
  104. package/src/render/tessellator.ts +367 -0
  105. package/src/webassembly.d.ts +22 -0
@@ -0,0 +1,71 @@
1
+ // The compiled module is shared; each extraction has its own small decoder state.
2
+ import { decodeBase64 } from "../base64.js";
3
+ import { binary } from "./binary.js";
4
+
5
+ interface Exports {
6
+ memory: WebAssembly.Memory;
7
+ input(): number;
8
+ output(): number;
9
+ decode(length: number): number;
10
+ channels(): number;
11
+ rate(): number;
12
+ }
13
+
14
+ let compiled: WebAssembly.Module | null = null;
15
+ let preparing: Promise<void> | null = null;
16
+
17
+ /**
18
+ * Compile before scripts run; the decoder itself is instantiated only on
19
+ * demand. Never rejects: an engine that cannot compile the module leaves
20
+ * MP3 decoding unavailable (mp3Available) rather than failing every load.
21
+ */
22
+ export function prepareMp3(): Promise<void> {
23
+ preparing ??= WebAssembly.compile(decodeBase64(binary)).then(
24
+ (module) => {
25
+ compiled = module;
26
+ },
27
+ () => {},
28
+ );
29
+
30
+ return preparing;
31
+ }
32
+
33
+ /** Whether prepareMp3 compiled the decoder, so an Mp3Decoder can be made. */
34
+ export function mp3Available(): boolean {
35
+ return compiled !== null;
36
+ }
37
+
38
+ /** A sequence of whole MP3 frames. PCM is overwritten by the next read, and must be copied out. */
39
+ export class Mp3Decoder {
40
+ private readonly wasm: Exports;
41
+ private readonly input: Uint8Array;
42
+ readonly pcm: Float32Array;
43
+
44
+ constructor() {
45
+ if (!compiled) {
46
+ throw new Error("prepareMp3 must finish before decoding");
47
+ }
48
+
49
+ this.wasm = new WebAssembly.Instance(compiled).exports as unknown as Exports;
50
+ this.input = new Uint8Array(this.wasm.memory.buffer, this.wasm.input(), 4096);
51
+ this.pcm = new Float32Array(this.wasm.memory.buffer, this.wasm.output(), 2304);
52
+ }
53
+
54
+ /** Decode one whole frame, keeping its bit reservoir and synthesis state for the next. */
55
+ read(bytes: Uint8Array): number {
56
+ if (bytes.length > this.input.length) {
57
+ return 0;
58
+ }
59
+
60
+ this.input.set(bytes);
61
+ return this.wasm.decode(bytes.length);
62
+ }
63
+
64
+ get channels(): number {
65
+ return this.wasm.channels();
66
+ }
67
+
68
+ get rate(): number {
69
+ return this.wasm.rate();
70
+ }
71
+ }