taglib-wasm 0.3.13 → 0.3.15

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 (82) hide show
  1. package/README.md +22 -35
  2. package/dist/index.d.ts +10 -10
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +117 -134
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/constants.js +211 -0
  7. package/dist/src/constants.js.map +1 -0
  8. package/dist/src/errors.js +180 -0
  9. package/dist/src/errors.js.map +1 -0
  10. package/dist/src/file-utils.d.ts +2 -2
  11. package/dist/src/file-utils.d.ts.map +1 -1
  12. package/dist/src/file-utils.js +394 -0
  13. package/dist/src/file-utils.js.map +1 -0
  14. package/dist/src/mod.d.ts +4 -4
  15. package/dist/src/mod.d.ts.map +1 -1
  16. package/dist/src/mod.js +7 -0
  17. package/dist/src/mod.js.map +1 -0
  18. package/dist/src/simple.d.ts +4 -4
  19. package/dist/src/simple.d.ts.map +1 -1
  20. package/dist/src/{simple.ts → simple.js} +193 -311
  21. package/dist/src/simple.js.map +1 -0
  22. package/dist/src/taglib.d.ts +3 -3
  23. package/dist/src/taglib.d.ts.map +1 -1
  24. package/dist/src/taglib.js +516 -0
  25. package/dist/src/taglib.js.map +1 -0
  26. package/dist/src/types.d.ts +2 -2
  27. package/dist/src/types.d.ts.map +1 -1
  28. package/dist/src/types.js +239 -0
  29. package/dist/src/types.js.map +1 -0
  30. package/dist/src/utils/file.js +65 -0
  31. package/dist/src/utils/file.js.map +1 -0
  32. package/dist/src/utils/write.js +49 -0
  33. package/dist/src/utils/write.js.map +1 -0
  34. package/dist/src/wasm-workers.d.ts +1 -1
  35. package/dist/src/wasm-workers.d.ts.map +1 -1
  36. package/dist/src/wasm-workers.js +148 -0
  37. package/dist/src/wasm-workers.js.map +1 -0
  38. package/dist/src/wasm.js +6 -0
  39. package/dist/src/wasm.js.map +1 -0
  40. package/dist/src/web-utils.d.ts +2 -2
  41. package/dist/src/web-utils.d.ts.map +1 -1
  42. package/{src/web-utils.ts → dist/src/web-utils.js} +102 -184
  43. package/dist/src/web-utils.js.map +1 -0
  44. package/dist/src/workers.d.ts +2 -2
  45. package/dist/src/workers.d.ts.map +1 -1
  46. package/dist/src/workers.js +389 -0
  47. package/dist/src/workers.js.map +1 -0
  48. package/dist/taglib-wrapper.js +8 -2528
  49. package/package.json +7 -10
  50. package/dist/index.ts +0 -221
  51. package/dist/src/constants.ts +0 -227
  52. package/dist/src/errors.ts +0 -254
  53. package/dist/src/file-utils.ts +0 -483
  54. package/dist/src/file.js +0 -52
  55. package/dist/src/global.d.ts +0 -12
  56. package/dist/src/mod.ts +0 -19
  57. package/dist/src/taglib.ts +0 -961
  58. package/dist/src/types.ts +0 -538
  59. package/dist/src/utils/file.ts +0 -86
  60. package/dist/src/utils/write.ts +0 -66
  61. package/dist/src/wasm-workers.ts +0 -176
  62. package/dist/src/wasm.ts +0 -133
  63. package/dist/src/web-utils.ts +0 -347
  64. package/dist/src/workers.ts +0 -461
  65. package/dist/src/write.js +0 -33
  66. package/index.ts +0 -221
  67. package/lib/taglib/COPYING.LGPL +0 -502
  68. package/lib/taglib/COPYING.MPL +0 -470
  69. package/lib/taglib/README.md +0 -24
  70. package/src/constants.ts +0 -227
  71. package/src/errors.ts +0 -254
  72. package/src/file-utils.ts +0 -483
  73. package/src/global.d.ts +0 -12
  74. package/src/mod.ts +0 -19
  75. package/src/simple.ts +0 -667
  76. package/src/taglib.ts +0 -961
  77. package/src/types.ts +0 -538
  78. package/src/utils/file.ts +0 -86
  79. package/src/utils/write.ts +0 -66
  80. package/src/wasm-workers.ts +0 -176
  81. package/src/wasm.ts +0 -133
  82. package/src/workers.ts +0 -461
@@ -1,176 +0,0 @@
1
- /**
2
- * @fileoverview WebAssembly module interface for Cloudflare Workers
3
- */
4
-
5
- import type { TagLibConfig, TagLibModule } from "./types.ts";
6
- import { TagLibInitializationError } from "./errors.ts";
7
-
8
- // Re-export TagLibModule for convenience
9
- export type { TagLibModule };
10
-
11
- /**
12
- * Default configuration for taglib-wasm module in Workers environment
13
- * Reduced memory limits to fit within Workers constraints
14
- */
15
- const DEFAULT_WORKERS_CONFIG: Required<TagLibConfig> = {
16
- memory: {
17
- initial: 8 * 1024 * 1024, // 8MB (reduced from 16MB)
18
- maximum: 64 * 1024 * 1024, // 64MB (reduced from 256MB)
19
- },
20
- debug: false,
21
- };
22
-
23
- /**
24
- * Load and initialize the TagLib WebAssembly module for Cloudflare Workers
25
- *
26
- * @param wasmBinary - The WebAssembly binary as Uint8Array
27
- * @param config - Optional configuration for the Wasm module
28
- * @returns Promise resolving to initialized TagLib module
29
- *
30
- * @example
31
- * ```typescript
32
- * import wasmBinary from "../build/taglib.wasm";
33
- *
34
- * const taglib = await loadTagLibModuleForWorkers(wasmBinary);
35
- * ```
36
- */
37
- export async function loadTagLibModuleForWorkers(
38
- wasmBinary: Uint8Array,
39
- config: TagLibConfig = {},
40
- ): Promise<TagLibModule> {
41
- const mergedConfig = { ...DEFAULT_WORKERS_CONFIG, ...config };
42
-
43
- // Create Emscripten module configuration for Workers
44
- const moduleConfig = {
45
- wasmBinary,
46
- wasmMemory: new WebAssembly.Memory({
47
- initial: mergedConfig.memory.initial! / (64 * 1024),
48
- maximum: mergedConfig.memory.maximum! / (64 * 1024),
49
- }),
50
- print: mergedConfig.debug ? console.log : () => {},
51
- printErr: mergedConfig.debug ? console.error : () => {},
52
- onRuntimeInitialized: () => {
53
- if (mergedConfig.debug) {
54
- console.log("taglib-wasm module initialized in Workers");
55
- }
56
- },
57
- // Workers-specific settings
58
- locateFile: () => {
59
- // Return empty string since we're providing wasmBinary directly
60
- return "";
61
- },
62
- // Disable file system access
63
- noFSInit: true,
64
- noExitRuntime: true,
65
- };
66
-
67
- try {
68
- // For Workers, we need to use a modified version of the Emscripten output
69
- // that doesn't include Node.js/CommonJS dependencies
70
- const TagLibWasm = await createWorkersCompatibleModule();
71
-
72
- if (typeof TagLibWasm !== "function") {
73
- throw new TagLibInitializationError(
74
- "Failed to load taglib-wasm module for Workers. " +
75
- "The module may not be properly bundled for the Workers environment.",
76
- );
77
- }
78
-
79
- const wasmInstance = await TagLibWasm(moduleConfig);
80
-
81
- // Ensure proper memory arrays are set up
82
- if (!wasmInstance.HEAPU8) {
83
- const buffer = wasmInstance.buffer || wasmInstance.wasmMemory?.buffer;
84
- if (buffer) {
85
- wasmInstance.HEAPU8 = new Uint8Array(buffer);
86
- wasmInstance.HEAP8 = new Int8Array(buffer);
87
- wasmInstance.HEAP16 = new Int16Array(buffer);
88
- wasmInstance.HEAP32 = new Int32Array(buffer);
89
- wasmInstance.HEAPU16 = new Uint16Array(buffer);
90
- wasmInstance.HEAPU32 = new Uint32Array(buffer);
91
- wasmInstance.HEAPF32 = new Float32Array(buffer);
92
- wasmInstance.HEAPF64 = new Float64Array(buffer);
93
- }
94
- }
95
-
96
- return wasmInstance as TagLibModule;
97
- } catch (error) {
98
- if (error instanceof TagLibInitializationError) {
99
- throw error;
100
- }
101
- throw new TagLibInitializationError(
102
- `Failed to load taglib-wasm for Workers: ${(error as Error).message}`,
103
- { error: (error as Error).message },
104
- );
105
- }
106
- }
107
-
108
- /**
109
- * Create a Workers-compatible version of the Emscripten module
110
- * This function loads the Wasm module without Node.js/CommonJS dependencies
111
- */
112
- async function createWorkersCompatibleModule(): Promise<any> {
113
- // In a real Workers environment, you would typically:
114
- // 1. Use a build process to create a Workers-compatible version of taglib.js
115
- // 2. Or inline the essential parts of the Emscripten runtime here
116
- // 3. Or use dynamic import with proper bundling
117
-
118
- // For now, we'll attempt to load the existing module with Workers compatibility
119
- try {
120
- // Try to import the existing module
121
- const wasmModule = await import("../build/taglib-wrapper.js");
122
- return wasmModule.default || wasmModule;
123
- } catch (error) {
124
- // If that fails, provide a fallback implementation
125
- throw new TagLibInitializationError(
126
- "Workers-compatible Wasm module not available. " +
127
- "Please build with Workers target or use a bundler that supports Wasm modules. " +
128
- `Original error: ${(error as Error).message}`,
129
- { error: (error as Error).message },
130
- );
131
- }
132
- }
133
-
134
- /**
135
- * Convert a C string pointer to JavaScript string (Workers-compatible)
136
- */
137
- export function cStringToJS(module: TagLibModule, ptr: number): string {
138
- if (ptr === 0) return "";
139
-
140
- const view = new Uint8Array(module.HEAPU8.buffer, ptr);
141
- let length = 0;
142
- while (view[length] !== 0) length++;
143
-
144
- return new TextDecoder().decode(view.subarray(0, length));
145
- }
146
-
147
- /**
148
- * Convert JavaScript string to C string (Workers-compatible)
149
- */
150
- export function jsToCString(module: TagLibModule, str: string): number {
151
- const encoder = new TextEncoder();
152
- const bytes = encoder.encode(str + "\0");
153
-
154
- // Use allocate if available, otherwise use _malloc
155
- if (module.allocate && module.ALLOC_NORMAL !== undefined) {
156
- return module.allocate(bytes, module.ALLOC_NORMAL);
157
- } else {
158
- const ptr = module._malloc(bytes.length);
159
- module.HEAPU8.set(bytes, ptr);
160
- return ptr;
161
- }
162
- }
163
-
164
- /**
165
- * Utility function to check if we're running in Cloudflare Workers
166
- */
167
- export function isCloudflareWorkers(): boolean {
168
- return (
169
- typeof globalThis !== "undefined" &&
170
- typeof globalThis.caches !== "undefined" &&
171
- typeof globalThis.Request !== "undefined" &&
172
- typeof globalThis.Response !== "undefined" &&
173
- typeof (globalThis as any).process === "undefined" &&
174
- typeof (globalThis as any).Deno === "undefined"
175
- );
176
- }
package/src/wasm.ts DELETED
@@ -1,133 +0,0 @@
1
- /**
2
- * @fileoverview WebAssembly module interface types for Emscripten
3
- */
4
-
5
- // Basic Emscripten module interface
6
- export interface EmscriptenModule {
7
- // Memory
8
- HEAP8: Int8Array;
9
- HEAP16: Int16Array;
10
- HEAP32: Int32Array;
11
- HEAPU8: Uint8Array;
12
- HEAPU16: Uint16Array;
13
- HEAPU32: Uint32Array;
14
- HEAPF32: Float32Array;
15
- HEAPF64: Float64Array;
16
-
17
- // Memory management
18
- _malloc(size: number): number;
19
- _free(ptr: number): void;
20
- allocate?(data: number[] | Uint8Array, allocator: number): number;
21
- ALLOC_NORMAL?: number;
22
-
23
- // String conversion
24
- ccall?(
25
- ident: string,
26
- returnType: string,
27
- argTypes: string[],
28
- args: any[],
29
- ): any;
30
- cwrap?(
31
- ident: string,
32
- returnType: string,
33
- argTypes: string[],
34
- ): (...args: any[]) => any;
35
-
36
- // File system (if enabled)
37
- FS?: any;
38
-
39
- // Runtime
40
- then?(callback: (module: EmscriptenModule) => void): void;
41
- onRuntimeInitialized?: () => void;
42
- }
43
-
44
- // Embind class interfaces
45
- export interface FileHandle {
46
- loadFromBuffer(data: Uint8Array): boolean;
47
- isValid(): boolean;
48
- save(): boolean;
49
- getFormat(): string;
50
- getProperties(): any;
51
- setProperties(props: any): void;
52
- getProperty(key: string): string;
53
- setProperty(key: string, value: string): void;
54
- isMP4(): boolean;
55
- getMP4Item(key: string): string;
56
- setMP4Item(key: string, value: string): void;
57
- removeMP4Item(key: string): void;
58
- getTag(): TagWrapper;
59
- getAudioProperties(): AudioPropertiesWrapper;
60
- }
61
-
62
- export interface TagWrapper {
63
- title(): string;
64
- artist(): string;
65
- album(): string;
66
- comment(): string;
67
- genre(): string;
68
- year(): number;
69
- track(): number;
70
- setTitle(value: string): void;
71
- setArtist(value: string): void;
72
- setAlbum(value: string): void;
73
- setComment(value: string): void;
74
- setGenre(value: string): void;
75
- setYear(value: number): void;
76
- setTrack(value: number): void;
77
- }
78
-
79
- export interface AudioPropertiesWrapper {
80
- lengthInSeconds(): number;
81
- lengthInMilliseconds(): number;
82
- bitrate(): number;
83
- sampleRate(): number;
84
- channels(): number;
85
- }
86
-
87
- export interface TagLibModule extends Omit<EmscriptenModule, "then"> {
88
- // Embind classes
89
- FileHandle: new () => FileHandle;
90
- TagWrapper: new () => TagWrapper;
91
- AudioPropertiesWrapper: new () => AudioPropertiesWrapper;
92
-
93
- // Embind functions
94
- createFileHandle(): FileHandle;
95
-
96
- // C-style functions (optional - used by Workers API)
97
- _taglib_file_new_from_buffer?(ptr: number, size: number): number;
98
- _taglib_file_delete?(fileId: number): void;
99
- _taglib_file_is_valid?(fileId: number): number;
100
- _taglib_file_format?(fileId: number): number;
101
- _taglib_file_tag?(fileId: number): number;
102
- _taglib_file_audioproperties?(fileId: number): number;
103
- _taglib_file_save?(fileId: number): number;
104
-
105
- _taglib_tag_title?(tagPtr: number): number;
106
- _taglib_tag_artist?(tagPtr: number): number;
107
- _taglib_tag_album?(tagPtr: number): number;
108
- _taglib_tag_comment?(tagPtr: number): number;
109
- _taglib_tag_genre?(tagPtr: number): number;
110
- _taglib_tag_year?(tagPtr: number): number;
111
- _taglib_tag_track?(tagPtr: number): number;
112
-
113
- _taglib_tag_set_title?(tagPtr: number, titlePtr: number): void;
114
- _taglib_tag_set_artist?(tagPtr: number, artistPtr: number): void;
115
- _taglib_tag_set_album?(tagPtr: number, albumPtr: number): void;
116
- _taglib_tag_set_comment?(tagPtr: number, commentPtr: number): void;
117
- _taglib_tag_set_genre?(tagPtr: number, genrePtr: number): void;
118
- _taglib_tag_set_year?(tagPtr: number, year: number): void;
119
- _taglib_tag_set_track?(tagPtr: number, track: number): void;
120
-
121
- _taglib_audioproperties_length?(propsPtr: number): number;
122
- _taglib_audioproperties_bitrate?(propsPtr: number): number;
123
- _taglib_audioproperties_samplerate?(propsPtr: number): number;
124
- _taglib_audioproperties_channels?(propsPtr: number): number;
125
- }
126
-
127
- export interface WasmModule extends EmscriptenModule {
128
- // Alias for compatibility
129
- FileHandle?: new () => FileHandle;
130
- createFileHandle?(): FileHandle;
131
- }
132
-
133
- // Module loading function removed for modular imports