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.
- package/README.md +22 -35
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +117 -134
- package/dist/index.js.map +1 -0
- package/dist/src/constants.js +211 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/errors.js +180 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/file-utils.d.ts +2 -2
- package/dist/src/file-utils.d.ts.map +1 -1
- package/dist/src/file-utils.js +394 -0
- package/dist/src/file-utils.js.map +1 -0
- package/dist/src/mod.d.ts +4 -4
- package/dist/src/mod.d.ts.map +1 -1
- package/dist/src/mod.js +7 -0
- package/dist/src/mod.js.map +1 -0
- package/dist/src/simple.d.ts +4 -4
- package/dist/src/simple.d.ts.map +1 -1
- package/dist/src/{simple.ts → simple.js} +193 -311
- package/dist/src/simple.js.map +1 -0
- package/dist/src/taglib.d.ts +3 -3
- package/dist/src/taglib.d.ts.map +1 -1
- package/dist/src/taglib.js +516 -0
- package/dist/src/taglib.js.map +1 -0
- package/dist/src/types.d.ts +2 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +239 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/file.js +65 -0
- package/dist/src/utils/file.js.map +1 -0
- package/dist/src/utils/write.js +49 -0
- package/dist/src/utils/write.js.map +1 -0
- package/dist/src/wasm-workers.d.ts +1 -1
- package/dist/src/wasm-workers.d.ts.map +1 -1
- package/dist/src/wasm-workers.js +148 -0
- package/dist/src/wasm-workers.js.map +1 -0
- package/dist/src/wasm.js +6 -0
- package/dist/src/wasm.js.map +1 -0
- package/dist/src/web-utils.d.ts +2 -2
- package/dist/src/web-utils.d.ts.map +1 -1
- package/{src/web-utils.ts → dist/src/web-utils.js} +102 -184
- package/dist/src/web-utils.js.map +1 -0
- package/dist/src/workers.d.ts +2 -2
- package/dist/src/workers.d.ts.map +1 -1
- package/dist/src/workers.js +389 -0
- package/dist/src/workers.js.map +1 -0
- package/dist/taglib-wrapper.js +8 -2528
- package/package.json +7 -10
- package/dist/index.ts +0 -221
- package/dist/src/constants.ts +0 -227
- package/dist/src/errors.ts +0 -254
- package/dist/src/file-utils.ts +0 -483
- package/dist/src/file.js +0 -52
- package/dist/src/global.d.ts +0 -12
- package/dist/src/mod.ts +0 -19
- package/dist/src/taglib.ts +0 -961
- package/dist/src/types.ts +0 -538
- package/dist/src/utils/file.ts +0 -86
- package/dist/src/utils/write.ts +0 -66
- package/dist/src/wasm-workers.ts +0 -176
- package/dist/src/wasm.ts +0 -133
- package/dist/src/web-utils.ts +0 -347
- package/dist/src/workers.ts +0 -461
- package/dist/src/write.js +0 -33
- package/index.ts +0 -221
- package/lib/taglib/COPYING.LGPL +0 -502
- package/lib/taglib/COPYING.MPL +0 -470
- package/lib/taglib/README.md +0 -24
- package/src/constants.ts +0 -227
- package/src/errors.ts +0 -254
- package/src/file-utils.ts +0 -483
- package/src/global.d.ts +0 -12
- package/src/mod.ts +0 -19
- package/src/simple.ts +0 -667
- package/src/taglib.ts +0 -961
- package/src/types.ts +0 -538
- package/src/utils/file.ts +0 -86
- package/src/utils/write.ts +0 -66
- package/src/wasm-workers.ts +0 -176
- package/src/wasm.ts +0 -133
- package/src/workers.ts +0 -461
package/src/wasm-workers.ts
DELETED
|
@@ -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
|