@needle-tools/engine 4.5.0-alpha.3 → 4.5.0-alpha.4
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/CHANGELOG.md +22 -2
- package/dist/{needle-engine.bundle-ef2b8438.umd.cjs → needle-engine.bundle-1ea82d1b.umd.cjs} +74 -73
- package/dist/{needle-engine.bundle-9fe9a394.light.umd.cjs → needle-engine.bundle-5799046c.light.umd.cjs} +74 -73
- package/dist/{needle-engine.bundle-1b8f44f4.js → needle-engine.bundle-613ac05e.js} +923 -936
- package/dist/{needle-engine.bundle-d710d96f.light.js → needle-engine.bundle-82027067.light.js} +923 -936
- package/dist/{needle-engine.bundle-56f095f1.light.min.js → needle-engine.bundle-cb8d3ee9.light.min.js} +74 -73
- package/dist/{needle-engine.bundle-baacde19.min.js → needle-engine.bundle-e8936122.min.js} +74 -73
- package/dist/needle-engine.js +24 -24
- package/dist/needle-engine.light.js +24 -24
- package/dist/needle-engine.light.min.js +1 -1
- package/dist/needle-engine.light.umd.cjs +1 -1
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/lib/engine/engine_components.js +6 -14
- package/lib/engine/engine_components.js.map +1 -1
- package/lib/engine/engine_loaders.callbacks.d.ts +43 -9
- package/lib/engine/engine_loaders.callbacks.js +42 -12
- package/lib/engine/engine_loaders.callbacks.js.map +1 -1
- package/lib/engine/engine_loaders.js +18 -15
- package/lib/engine/engine_loaders.js.map +1 -1
- package/lib/engine/engine_utils_format.d.ts +5 -5
- package/lib/engine/engine_utils_format.js +31 -31
- package/lib/engine/engine_utils_format.js.map +1 -1
- package/package.json +1 -1
- package/plugins/vite/dependencies.js +1 -1
- package/src/engine/engine_components.ts +4 -12
- package/src/engine/engine_loaders.callbacks.ts +63 -17
- package/src/engine/engine_loaders.ts +17 -15
- package/src/engine/engine_utils_format.ts +45 -34
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
import { isDevEnvironment } from "./debug/index.js";
|
|
2
|
-
import {
|
|
2
|
+
import { registeredMimetypeCallbacks } from "./engine_loaders.callbacks.js";
|
|
3
3
|
import { getParam } from "./engine_utils.js";
|
|
4
4
|
|
|
5
5
|
const debug = getParam("debugfileformat");
|
|
6
|
-
|
|
7
6
|
/**
|
|
8
|
-
* The supported file types that can be determined by the engine. Used in {@link
|
|
7
|
+
* The supported file types that can be determined by the engine. Used in {@link tryDetermineMimetypeFromURL} and {@link tryDetermineMimetypeFromBinary}
|
|
9
8
|
*/
|
|
10
|
-
export
|
|
9
|
+
export type NeedleMimetype = "unknown" |
|
|
10
|
+
"model/gltf+json" |
|
|
11
|
+
"model/gltf-binary" |
|
|
12
|
+
"model/vrm" |
|
|
13
|
+
"model/vnd.usdz+zip" |
|
|
14
|
+
"model/vnd.usd+zip" |
|
|
15
|
+
"model/vnd.usda+zip" |
|
|
16
|
+
"model/fbx" |
|
|
17
|
+
"model/vnd.autodesk.fbx" |
|
|
18
|
+
"model/obj" |
|
|
19
|
+
`model/${string}`
|
|
20
|
+
| (string & {})
|
|
21
|
+
|
|
11
22
|
|
|
12
23
|
/**
|
|
13
24
|
* Tries to determine the file type of a file from its URL
|
|
@@ -21,7 +32,7 @@ export declare type FileType = "gltf" | "glb" | "vrm" | "fbx" | "obj" | "usdz" |
|
|
|
21
32
|
* const fileType = await tryDetermineFileTypeFromURL(url);
|
|
22
33
|
* console.log(fileType); // "glb"
|
|
23
34
|
*/
|
|
24
|
-
export async function
|
|
35
|
+
export async function tryDetermineMimetypeFromURL(url: string, opts: { useExtension: boolean }): Promise<NeedleMimetype> {
|
|
25
36
|
|
|
26
37
|
const { useExtension = true } = opts;
|
|
27
38
|
|
|
@@ -44,21 +55,21 @@ export async function tryDetermineFileTypeFromURL(url: string, opts: { useExtens
|
|
|
44
55
|
if (debug) console.debug("Use file extension to determine type: " + ext);
|
|
45
56
|
switch (ext) {
|
|
46
57
|
case "GLTF":
|
|
47
|
-
return "gltf"
|
|
58
|
+
return "model/gltf+json"
|
|
48
59
|
case "VRM":
|
|
49
|
-
return "vrm";
|
|
60
|
+
return "model/vrm";
|
|
50
61
|
case "GLB":
|
|
51
|
-
return "
|
|
62
|
+
return "model/gltf-binary";
|
|
52
63
|
case "FBX":
|
|
53
|
-
return "fbx";
|
|
64
|
+
return "model/fbx";
|
|
54
65
|
case "USD":
|
|
55
|
-
return "usd";
|
|
66
|
+
return "model/vnd.usd+zip";
|
|
56
67
|
case "USDA":
|
|
57
|
-
return "usda";
|
|
68
|
+
return "model/vnd.usda+zip";
|
|
58
69
|
case "USDZ":
|
|
59
|
-
return "usdz";
|
|
70
|
+
return "model/vnd.usdz+zip";
|
|
60
71
|
case "OBJ":
|
|
61
|
-
return "obj";
|
|
72
|
+
return "model/obj";
|
|
62
73
|
}
|
|
63
74
|
}
|
|
64
75
|
|
|
@@ -88,7 +99,7 @@ export async function tryDetermineFileTypeFromURL(url: string, opts: { useExtens
|
|
|
88
99
|
|
|
89
100
|
if (header?.ok) {
|
|
90
101
|
const data = await header.arrayBuffer();
|
|
91
|
-
const res =
|
|
102
|
+
const res = tryDetermineMimetypeFromBinary(originalUrl, data, header);
|
|
92
103
|
if (debug) console.log("Determined file type from header: " + res);
|
|
93
104
|
return res;
|
|
94
105
|
}
|
|
@@ -100,7 +111,7 @@ export async function tryDetermineFileTypeFromURL(url: string, opts: { useExtens
|
|
|
100
111
|
/** Attempts to determine the file type of a binary file by looking at the first few bytes of the file.
|
|
101
112
|
* @hidden
|
|
102
113
|
*/
|
|
103
|
-
export function
|
|
114
|
+
export function tryDetermineMimetypeFromBinary(url: string, data: ArrayBuffer, response: Response): NeedleMimetype {
|
|
104
115
|
|
|
105
116
|
if (data.byteLength < 4) {
|
|
106
117
|
return "unknown";
|
|
@@ -112,67 +123,67 @@ export function tryDetermineFileTypeFromBinary(url: string, data: ArrayBuffer, r
|
|
|
112
123
|
console.warn("Trying to determine file type from binary data\n", "\"" + new TextDecoder().decode(data) + "\"\n", bytes);
|
|
113
124
|
}
|
|
114
125
|
|
|
115
|
-
// GLTF
|
|
116
|
-
if (bytes[0] == 103 && bytes[1] == 108 && bytes[2] == 84 && bytes[3] == 70) {
|
|
126
|
+
// GLTF
|
|
127
|
+
if (bytes[0] == 103 && bytes[1] == 108 && bytes[2] == 84 && bytes[3] == 70 && bytes[4] == 10) {
|
|
128
|
+
// GLTF
|
|
117
129
|
console.debug("GLTF detected");
|
|
118
|
-
return "
|
|
130
|
+
return "model/gltf+json";
|
|
131
|
+
}
|
|
132
|
+
// GLB
|
|
133
|
+
else if (bytes[0] == 103 && bytes[1] == 108 && bytes[2] == 84 && bytes[3] == 70 && bytes[4] == 98) {
|
|
134
|
+
// GLB
|
|
135
|
+
console.debug("GLB detected");
|
|
136
|
+
return "model/gltf-binary";
|
|
119
137
|
}
|
|
120
138
|
// USDZ
|
|
121
139
|
if (bytes[0] == 80 && bytes[1] == 75 && bytes[2] == 3 && bytes[3] == 4) {
|
|
122
140
|
console.debug("USDZ detected");
|
|
123
|
-
return "usdz";
|
|
141
|
+
return "model/vnd.usdz+zip";
|
|
124
142
|
}
|
|
125
143
|
// USD
|
|
126
144
|
if (bytes[0] == 80 && bytes[1] == 88 && bytes[2] == 82 && bytes[3] == 45 && bytes[4] == 85 && bytes[5] == 83 && bytes[6] == 68 && bytes[7] == 67) {
|
|
127
145
|
console.debug("Binary USD detected");
|
|
128
|
-
return "usd";
|
|
146
|
+
return "model/vnd.usd+zip";
|
|
129
147
|
}
|
|
130
148
|
// USDA: check if the file starts with #usda
|
|
131
149
|
else if (bytes[0] == 35 && bytes[1] == 117 && bytes[2] == 115 && bytes[3] == 100 && bytes[4] == 97) {
|
|
132
150
|
console.debug("ASCII USD detected");
|
|
133
|
-
return "usda";
|
|
151
|
+
return "model/vnd.usda+zip";
|
|
134
152
|
}
|
|
135
153
|
// FBX
|
|
136
154
|
if (bytes[0] == 75 && bytes[1] == 97 && bytes[2] == 121 && bytes[3] == 100 && bytes[4] == 97 && bytes[5] == 114 && bytes[6] == 97 && bytes[7] == 32) {
|
|
137
155
|
console.debug("Binary FBX detected");
|
|
138
|
-
return "fbx";
|
|
156
|
+
return "model/fbx";
|
|
139
157
|
}
|
|
140
158
|
// ASCII FBX
|
|
141
159
|
else if (bytes[0] == 59 && bytes[1] == 32 && bytes[2] == 70 && bytes[3] == 66 && bytes[4] == 88 && bytes[5] == 32) {
|
|
142
160
|
console.debug("ASCII FBX detected");
|
|
143
|
-
return "fbx";
|
|
161
|
+
return "model/fbx";
|
|
144
162
|
}
|
|
145
163
|
// OBJ - in this case exported from blender it starts with "# Blender" - we only check the first 10 bytes, technically it could still be a different file so we should do this check at the end
|
|
146
164
|
else if (bytes[0] == 35 && bytes[1] == 32 && bytes[2] == 66 && bytes[3] == 108 && bytes[4] == 101 && bytes[5] == 110 && bytes[6] == 100 && bytes[7] == 101 && bytes[8] == 114 && bytes[9] == 32) {
|
|
147
165
|
console.debug("OBJ detected");
|
|
148
|
-
return "obj";
|
|
166
|
+
return "model/obj";
|
|
149
167
|
}
|
|
150
168
|
// Check if it starts "# Alias OBJ"
|
|
151
169
|
else if (bytes[0] == 35 && bytes[1] == 32 && bytes[2] == 65 && bytes[3] == 108 && bytes[4] == 105 && bytes[5] == 97 && bytes[6] == 115 && bytes[7] == 32 && bytes[8] == 79 && bytes[9] == 66 && bytes[10] == 74) {
|
|
152
170
|
console.debug("OBJ detected");
|
|
153
|
-
return "obj";
|
|
171
|
+
return "model/obj";
|
|
154
172
|
}
|
|
155
173
|
else if (response.headers.has("content-type")) {
|
|
156
174
|
const content_type = response.headers.get("content-type");
|
|
157
175
|
console.debug("Content-Type: " + content_type);
|
|
158
176
|
switch (content_type) {
|
|
159
177
|
case "model/gltf+json":
|
|
160
|
-
return "gltf";
|
|
161
178
|
case "model/gltf-binary":
|
|
162
|
-
return "glb";
|
|
163
179
|
case "model/vrm":
|
|
164
|
-
return "vrm";
|
|
165
180
|
case "model/vnd.usdz+zip":
|
|
166
|
-
return "usdz";
|
|
167
181
|
case "model/vnd.usd+zip":
|
|
168
|
-
return "usd";
|
|
169
182
|
case "model/vnd.usda+zip":
|
|
170
|
-
return "usda";
|
|
171
183
|
case "model/fbx":
|
|
172
184
|
case "model/vnd.autodesk.fbx":
|
|
173
|
-
return "fbx";
|
|
174
185
|
case "model/obj":
|
|
175
|
-
return
|
|
186
|
+
return content_type;
|
|
176
187
|
// case "model/stl":
|
|
177
188
|
// return "stl";
|
|
178
189
|
case "text/plain":
|
|
@@ -205,7 +216,7 @@ export function tryDetermineFileTypeFromBinary(url: string, data: ArrayBuffer, r
|
|
|
205
216
|
// return "gltf";
|
|
206
217
|
// }
|
|
207
218
|
|
|
208
|
-
for (const callback of
|
|
219
|
+
for (const callback of registeredMimetypeCallbacks) {
|
|
209
220
|
const mimetype = callback({
|
|
210
221
|
url: url,
|
|
211
222
|
response: response,
|