@series-inc/stowkit-reader 0.1.41

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.
@@ -0,0 +1,539 @@
1
+ /**
2
+ * Performance logging utility
3
+ * Centralized configuration for all performance logs
4
+ */
5
+ class PerfLogger {
6
+ /**
7
+ * Enable performance logging across all StowKit modules
8
+ */
9
+ static enable() {
10
+ this.enabled = true;
11
+ }
12
+ /**
13
+ * Disable performance logging across all StowKit modules
14
+ */
15
+ static disable() {
16
+ this.enabled = false;
17
+ }
18
+ /**
19
+ * Check if performance logging is enabled
20
+ */
21
+ static isEnabled() {
22
+ return this.enabled;
23
+ }
24
+ /**
25
+ * Set a custom logging function
26
+ * @param logger - Function to call for each log message (receives formatted string)
27
+ */
28
+ static setCustomLogger(logger) {
29
+ this.customLogger = logger;
30
+ }
31
+ /**
32
+ * Log a performance message (only if enabled)
33
+ */
34
+ static log(message) {
35
+ if (this.enabled) {
36
+ if (this.customLogger) {
37
+ this.customLogger(message);
38
+ }
39
+ else {
40
+ console.log(message);
41
+ }
42
+ }
43
+ }
44
+ /**
45
+ * Log a performance error (always logged regardless of setting)
46
+ */
47
+ static error(message) {
48
+ console.error(message);
49
+ }
50
+ /**
51
+ * Log a performance warning (always logged regardless of setting)
52
+ */
53
+ static warn(message) {
54
+ console.warn(message);
55
+ }
56
+ }
57
+ PerfLogger.enabled = false;
58
+ PerfLogger.customLogger = null;
59
+
60
+ /**
61
+ * StowKit Reader - WebAssembly-based reader for .stow asset packs
62
+ */
63
+ var AssetType;
64
+ (function (AssetType) {
65
+ AssetType[AssetType["UNKNOWN"] = 0] = "UNKNOWN";
66
+ AssetType[AssetType["STATIC_MESH"] = 1] = "STATIC_MESH";
67
+ AssetType[AssetType["TEXTURE_2D"] = 2] = "TEXTURE_2D";
68
+ AssetType[AssetType["AUDIO"] = 3] = "AUDIO";
69
+ AssetType[AssetType["MATERIAL_SCHEMA"] = 4] = "MATERIAL_SCHEMA";
70
+ AssetType[AssetType["SKINNED_MESH"] = 5] = "SKINNED_MESH";
71
+ AssetType[AssetType["ANIMATION_CLIP"] = 6] = "ANIMATION_CLIP";
72
+ })(AssetType || (AssetType = {}));
73
+ class StowKitReader {
74
+ constructor(wasmUrl = '/stowkit/stowkit_reader.wasm') {
75
+ this.wasm = null;
76
+ this.memory = null;
77
+ this.isReady = false;
78
+ this.currentFile = null;
79
+ this.assetNameMap = new Map();
80
+ this.wasmUrl = wasmUrl;
81
+ }
82
+ /**
83
+ * Initialize the WASM module
84
+ */
85
+ async init() {
86
+ const wasmFile = `${this.wasmUrl}?v=${Date.now()}`;
87
+ const response = await fetch(wasmFile);
88
+ const bytes = await response.arrayBuffer();
89
+ const imports = {
90
+ env: {
91
+ js_console_log: (ptr, len) => {
92
+ const msg = this._readString(ptr, len);
93
+ console.log('[StowKit]', msg);
94
+ },
95
+ js_console_error: (ptr, len) => {
96
+ const msg = this._readString(ptr, len);
97
+ console.error('[StowKit Error]', msg);
98
+ }
99
+ }
100
+ };
101
+ const { instance } = await WebAssembly.instantiate(bytes, imports);
102
+ this.wasm = instance.exports;
103
+ this.memory = this.wasm.memory;
104
+ this.isReady = true;
105
+ // Validate required exports
106
+ const required = ['allocateMemory', 'freeMemory', 'openStowFromMemory', 'getAssetCount', 'parseSkinnedMeshGeometry'];
107
+ const missing = required.filter(fn => typeof this.wasm[fn] !== 'function');
108
+ if (missing.length > 0) {
109
+ throw new Error(`Missing WASM exports: ${missing.join(', ')}`);
110
+ }
111
+ return this;
112
+ }
113
+ /**
114
+ * Open a .stow file from an ArrayBuffer or File
115
+ */
116
+ async open(fileOrBuffer) {
117
+ if (!this.isReady)
118
+ throw new Error('StowKit not initialized. Call init() first.');
119
+ if (this.currentFile) {
120
+ this.close();
121
+ }
122
+ let buffer;
123
+ if (fileOrBuffer instanceof ArrayBuffer) {
124
+ buffer = fileOrBuffer;
125
+ }
126
+ else if (fileOrBuffer instanceof File) {
127
+ buffer = await fileOrBuffer.arrayBuffer();
128
+ this.currentFile = fileOrBuffer.name;
129
+ }
130
+ else {
131
+ throw new Error('Expected ArrayBuffer or File');
132
+ }
133
+ const bytes = new Uint8Array(buffer);
134
+ const ptr = this._allocate(bytes.length);
135
+ try {
136
+ // Copy data to WASM memory
137
+ new Uint8Array(this.memory.buffer, ptr, bytes.length).set(bytes);
138
+ // Open the reader
139
+ const result = this.wasm.openStowFromMemory(ptr, bytes.length);
140
+ if (result !== 0) {
141
+ throw new Error('Failed to open .stow file - invalid format or corrupted');
142
+ }
143
+ return true;
144
+ }
145
+ finally {
146
+ this._free(ptr, bytes.length);
147
+ }
148
+ }
149
+ /**
150
+ * Get the total number of assets
151
+ */
152
+ getAssetCount() {
153
+ if (!this.isReady)
154
+ return 0;
155
+ return this.wasm.getAssetCount();
156
+ }
157
+ /**
158
+ * Get info about all assets
159
+ */
160
+ listAssets() {
161
+ const count = this.getAssetCount();
162
+ const assets = [];
163
+ for (let i = 0; i < count; i++) {
164
+ const info = this.getAssetInfo(i);
165
+ if (!info)
166
+ continue;
167
+ // Get name from WASM parse functions (they already return stringId)
168
+ let name;
169
+ if (info.metadata_size > 0) {
170
+ let parsed = null;
171
+ switch (info.type) {
172
+ case 1: // Static Mesh
173
+ parsed = this.parseMeshMetadata(i);
174
+ break;
175
+ case 2: // Texture
176
+ parsed = this.parseTextureMetadata(i);
177
+ break;
178
+ case 3: // Audio
179
+ parsed = this.parseAudioMetadata(i);
180
+ break;
181
+ case 4: // Material Schema
182
+ parsed = this.parseMaterialSchemaMetadata(i);
183
+ break;
184
+ case 5: // Skinned Mesh
185
+ parsed = this.parseSkinnedMeshMetadata(i);
186
+ break;
187
+ case 6: // Animation
188
+ parsed = this.parseAnimationMetadata(i);
189
+ break;
190
+ }
191
+ if (parsed?.stringId) {
192
+ const parts = parsed.stringId.split('/');
193
+ name = parts[parts.length - 1];
194
+ }
195
+ }
196
+ // Use cached name if available
197
+ if (!name && this.assetNameMap.has(i)) {
198
+ name = this.assetNameMap.get(i);
199
+ }
200
+ const asset = {
201
+ ...info,
202
+ index: i,
203
+ name,
204
+ id: this._getAssetId(info),
205
+ hasMetadata: info.metadata_size > 0,
206
+ dataSize: info.data_size,
207
+ metadataSize: info.metadata_size
208
+ };
209
+ assets.push(asset);
210
+ }
211
+ return assets;
212
+ }
213
+ /**
214
+ * Get detailed info about a specific asset
215
+ */
216
+ getAssetInfo(index) {
217
+ if (!this.isReady || index < 0 || index >= this.getAssetCount()) {
218
+ return null;
219
+ }
220
+ const ptr = this._allocate(40); // Size of AssetDirectoryEntry struct (8+4+8+8+8+4 = 40 bytes)
221
+ try {
222
+ const result = this.wasm.getAssetInfo(index, ptr, 40); // Pass the size as third argument!
223
+ if (result < 0) {
224
+ console.error(`Failed to get info for asset ${index}`);
225
+ return null;
226
+ }
227
+ const view = new DataView(this.memory.buffer, ptr, 40);
228
+ // Note: assetUID at offset 0 (8 bytes) - skipping as we don't need it here
229
+ // assetType at offset 8 (4 bytes)
230
+ // dataOffset at offset 12 (8 bytes)
231
+ // dataSize at offset 20 (8 bytes)
232
+ // metadataOffset at offset 28 (8 bytes)
233
+ // metadataSize at offset 36 (4 bytes)
234
+ return {
235
+ index,
236
+ type: view.getUint32(8, true),
237
+ // Convert BigInt to number - safe for reasonable file sizes
238
+ data_offset: Number(view.getBigUint64(12, true)),
239
+ data_size: Number(view.getBigUint64(20, true)),
240
+ metadata_offset: Number(view.getBigUint64(28, true)),
241
+ metadata_size: view.getUint32(36, true),
242
+ };
243
+ }
244
+ finally {
245
+ this._free(ptr, 40);
246
+ }
247
+ }
248
+ /**
249
+ * Read the binary data of an asset
250
+ */
251
+ readAssetData(index) {
252
+ if (!this.isReady)
253
+ return null;
254
+ const info = this.getAssetInfo(index);
255
+ if (!info || !info.data_size)
256
+ return null;
257
+ const ptr = this._allocate(info.data_size);
258
+ try {
259
+ const result = this.wasm.readAssetData(index, ptr, info.data_size);
260
+ if (result < 0) {
261
+ console.error(`Failed to read data for asset ${index}`);
262
+ return null;
263
+ }
264
+ // Return a copy of the data
265
+ const data = new Uint8Array(this.memory.buffer, ptr, result);
266
+ return new Uint8Array(data);
267
+ }
268
+ finally {
269
+ this._free(ptr, info.data_size);
270
+ }
271
+ }
272
+ /**
273
+ * Read metadata of an asset (if available)
274
+ */
275
+ readAssetMetadata(index) {
276
+ if (!this.isReady)
277
+ return null;
278
+ const info = this.getAssetInfo(index);
279
+ if (!info || !info.metadata_size) {
280
+ return null;
281
+ }
282
+ const ptr = this._allocate(info.metadata_size);
283
+ try {
284
+ const result = this.wasm.readAssetMetadata(index, ptr, info.metadata_size);
285
+ if (result < 0) {
286
+ console.error(`Failed to read metadata for asset ${index}`);
287
+ return null;
288
+ }
289
+ // Return a copy of the metadata
290
+ const data = new Uint8Array(this.memory.buffer, ptr, result);
291
+ return new Uint8Array(data);
292
+ }
293
+ finally {
294
+ this._free(ptr, info.metadata_size);
295
+ }
296
+ }
297
+ /**
298
+ * Parse texture metadata using WASM (includes tags)
299
+ */
300
+ parseTextureMetadata(index) {
301
+ if (!this.isReady || !this.wasm.parseTextureMetadata)
302
+ return null;
303
+ const ptr = this._allocate(512);
304
+ try {
305
+ const result = this.wasm.parseTextureMetadata(index, ptr, 512);
306
+ if (result < 0)
307
+ return null;
308
+ const jsonStr = this._readString(ptr, result);
309
+ return JSON.parse(jsonStr);
310
+ }
311
+ finally {
312
+ this._free(ptr, 512);
313
+ }
314
+ }
315
+ /**
316
+ * Parse audio metadata using WASM (includes tags)
317
+ */
318
+ parseAudioMetadata(index) {
319
+ if (!this.isReady || !this.wasm.parseAudioMetadata)
320
+ return null;
321
+ const ptr = this._allocate(512);
322
+ try {
323
+ const result = this.wasm.parseAudioMetadata(index, ptr, 512);
324
+ if (result < 0)
325
+ return null;
326
+ const jsonStr = this._readString(ptr, result);
327
+ return JSON.parse(jsonStr);
328
+ }
329
+ finally {
330
+ this._free(ptr, 512);
331
+ }
332
+ }
333
+ /**
334
+ * Parse static mesh metadata using WASM (includes tags)
335
+ */
336
+ parseMeshMetadata(index) {
337
+ if (!this.isReady || !this.wasm.parseMeshMetadata)
338
+ return null;
339
+ const ptr = this._allocate(512);
340
+ try {
341
+ const result = this.wasm.parseMeshMetadata(index, ptr, 512);
342
+ if (result < 0)
343
+ return null;
344
+ const jsonStr = this._readString(ptr, result);
345
+ return JSON.parse(jsonStr);
346
+ }
347
+ finally {
348
+ this._free(ptr, 512);
349
+ }
350
+ }
351
+ /**
352
+ * Parse animation clip metadata using WASM
353
+ */
354
+ parseAnimationMetadata(index) {
355
+ if (!this.isReady || !this.wasm.parseAnimationClipMetadata)
356
+ return null;
357
+ const ptr = this._allocate(16384);
358
+ try {
359
+ const result = this.wasm.parseAnimationClipMetadata(index, ptr, 16384);
360
+ if (result < 0)
361
+ return null;
362
+ const jsonStr = this._readString(ptr, result);
363
+ return JSON.parse(jsonStr);
364
+ }
365
+ finally {
366
+ this._free(ptr, 16384);
367
+ }
368
+ }
369
+ /**
370
+ * Parse skinned mesh metadata using WASM (partial - returns bone info)
371
+ */
372
+ parseSkinnedMeshMetadata(index) {
373
+ if (!this.isReady || !this.wasm.parseSkinnedMeshMetadata)
374
+ return null;
375
+ const ptr = this._allocate(4096);
376
+ try {
377
+ const result = this.wasm.parseSkinnedMeshMetadata(index, ptr, 4096);
378
+ if (result < 0)
379
+ return null;
380
+ const jsonStr = this._readString(ptr, result);
381
+ return JSON.parse(jsonStr);
382
+ }
383
+ finally {
384
+ this._free(ptr, 4096);
385
+ }
386
+ }
387
+ /**
388
+ * Parse material schema metadata using WASM
389
+ */
390
+ parseMaterialSchemaMetadata(index) {
391
+ if (!this.isReady || !this.wasm.parseMaterialSchemaMetadata)
392
+ return null;
393
+ const ptr = this._allocate(8192);
394
+ try {
395
+ const result = this.wasm.parseMaterialSchemaMetadata(index, ptr, 8192);
396
+ if (result < 0)
397
+ return null;
398
+ const jsonStr = this._readString(ptr, result);
399
+ return JSON.parse(jsonStr);
400
+ }
401
+ finally {
402
+ this._free(ptr, 8192);
403
+ }
404
+ }
405
+ /**
406
+ * Find an asset by its canonical path (string ID)
407
+ * Returns the asset index or -1 if not found
408
+ */
409
+ findAssetByPath(path) {
410
+ if (!this.isReady || !this.wasm.findAssetByPath) {
411
+ console.error('findAssetByPath not available');
412
+ return -1;
413
+ }
414
+ // Convert string to bytes
415
+ const encoder = new TextEncoder();
416
+ const pathBytes = encoder.encode(path);
417
+ const ptr = this._allocate(pathBytes.length);
418
+ try {
419
+ // Copy path to WASM memory
420
+ new Uint8Array(this.memory.buffer, ptr, pathBytes.length).set(pathBytes);
421
+ // Call WASM function
422
+ return this.wasm.findAssetByPath(ptr, pathBytes.length);
423
+ }
424
+ finally {
425
+ this._free(ptr, pathBytes.length);
426
+ }
427
+ }
428
+ /**
429
+ * Parse skinned mesh geometry using WASM (10-50x faster than JavaScript!)
430
+ * Returns combined vertex/index buffers ready for Three.js
431
+ */
432
+ parseSkinnedMeshGeometryFast(metadataBlob, dataBlob) {
433
+ if (!this.isReady || !this.wasm.parseSkinnedMeshGeometry)
434
+ return null;
435
+ // Allocate input buffers
436
+ const metaPtr = this._allocate(metadataBlob.length);
437
+ const dataPtr = this._allocate(dataBlob.length);
438
+ // Estimate output size
439
+ const maxOutputSize = 8 + (100000 * (12 + 12 + 8 + 16 + 16)) + (300000 * 4);
440
+ const outPtr = this._allocate(maxOutputSize);
441
+ try {
442
+ // Copy input data
443
+ new Uint8Array(this.memory.buffer, metaPtr, metadataBlob.length).set(metadataBlob);
444
+ new Uint8Array(this.memory.buffer, dataPtr, dataBlob.length).set(dataBlob);
445
+ // Call WASM function
446
+ const result = this.wasm.parseSkinnedMeshGeometry(metaPtr, metadataBlob.length, dataPtr, dataBlob.length, outPtr, maxOutputSize);
447
+ if (result < 0) {
448
+ console.error('Failed to parse skinned mesh geometry');
449
+ return null;
450
+ }
451
+ // Read header
452
+ const view = new DataView(this.memory.buffer, outPtr, result);
453
+ const vertexCount = view.getUint32(0, true);
454
+ const indexCount = view.getUint32(4, true);
455
+ let offset = 8;
456
+ // Read positions
457
+ const positions = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 3);
458
+ offset += vertexCount * 12;
459
+ // Read normals
460
+ const normals = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 3);
461
+ offset += vertexCount * 12;
462
+ // Read uvs
463
+ const uvs = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 2);
464
+ offset += vertexCount * 8;
465
+ // Read skinIndices
466
+ const skinIndices = new Uint32Array(this.memory.buffer, outPtr + offset, vertexCount * 4);
467
+ offset += vertexCount * 16;
468
+ // Read skinWeights
469
+ const skinWeights = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 4);
470
+ offset += vertexCount * 16;
471
+ // Read indices
472
+ const indices = new Uint32Array(this.memory.buffer, outPtr + offset, indexCount);
473
+ // Copy to new arrays (WASM memory will be freed)
474
+ return {
475
+ vertexCount,
476
+ indexCount,
477
+ positions: new Float32Array(positions),
478
+ normals: new Float32Array(normals),
479
+ uvs: new Float32Array(uvs),
480
+ skinIndices: new Uint32Array(skinIndices),
481
+ skinWeights: new Float32Array(skinWeights),
482
+ indices: new Uint32Array(indices)
483
+ };
484
+ }
485
+ finally {
486
+ this._free(metaPtr, metadataBlob.length);
487
+ this._free(dataPtr, dataBlob.length);
488
+ this._free(outPtr, maxOutputSize);
489
+ }
490
+ }
491
+ /**
492
+ * Close the current file and free resources
493
+ */
494
+ close() {
495
+ if (this.isReady && this.wasm.closeStow) {
496
+ this.wasm.closeStow();
497
+ }
498
+ this.currentFile = null;
499
+ this.assetNameMap.clear();
500
+ }
501
+ /**
502
+ * Set a custom name for an asset (for UI display)
503
+ */
504
+ setAssetName(index, name) {
505
+ this.assetNameMap.set(index, name);
506
+ }
507
+ // Private helper methods
508
+ _allocate(size) {
509
+ const ptr = this.wasm.allocateMemory(size);
510
+ if (!ptr)
511
+ throw new Error(`Failed to allocate ${size} bytes`);
512
+ return ptr;
513
+ }
514
+ _free(ptr, size) {
515
+ this.wasm.freeMemory(ptr, size);
516
+ }
517
+ _readString(ptr, len) {
518
+ const bytes = new Uint8Array(this.memory.buffer, ptr, len);
519
+ return new TextDecoder().decode(bytes);
520
+ }
521
+ _getAssetId(info) {
522
+ // Create a unique ID based on offsets
523
+ return BigInt(info.data_offset);
524
+ }
525
+ /**
526
+ * Format bytes for display
527
+ */
528
+ static formatBytes(bytes) {
529
+ if (bytes === 0)
530
+ return '0 B';
531
+ const k = 1024;
532
+ const sizes = ['B', 'KB', 'MB', 'GB'];
533
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
534
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
535
+ }
536
+ }
537
+
538
+ export { AssetType, PerfLogger, StowKitReader, StowKitReader as default };
539
+ //# sourceMappingURL=stowkit-reader.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stowkit-reader.esm.js","sources":["../src/PerfLogger.ts","../src/index.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}