@jfk-solutions/demo3d-file-format 1.0.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.
@@ -0,0 +1,96 @@
1
+ import { Demo3DBinaryBlock, type Demo3DScalarValue, Demo3DXmlElement } from "./xml.js";
2
+ import type { ZipEntryInfo } from "./zip.js";
3
+ export interface Demo3DTypeConstructor<T extends Demo3DTypedObject = Demo3DTypedObject> {
4
+ new (typeName: string, xml: Demo3DXmlElement): T;
5
+ }
6
+ export declare function registerDemo3DType(typeName: string, constructor: Demo3DTypeConstructor): void;
7
+ export declare function createTypedObject(xml: Demo3DXmlElement): Demo3DTypedObject;
8
+ export declare class Demo3DTypedObject {
9
+ readonly typeName: string;
10
+ readonly xml: Demo3DXmlElement;
11
+ constructor(typeName: string, xml: Demo3DXmlElement);
12
+ get name(): string | undefined;
13
+ get id(): string | undefined;
14
+ child(localName: string): Demo3DXmlElement | undefined;
15
+ value(localName: string): Demo3DScalarValue | undefined;
16
+ }
17
+ export declare class Demo3DUnknownObject extends Demo3DTypedObject {
18
+ }
19
+ export declare class Demo3DReference {
20
+ readonly id: string;
21
+ readonly typeName?: string | undefined;
22
+ readonly filter?: Demo3DXmlElement | undefined;
23
+ constructor(id: string, typeName?: string | undefined, filter?: Demo3DXmlElement | undefined);
24
+ }
25
+ export declare class Demo3DHeader {
26
+ readonly id?: string | undefined;
27
+ readonly locale?: string | undefined;
28
+ readonly product?: string | undefined;
29
+ readonly version?: string | undefined;
30
+ readonly edition?: string | undefined;
31
+ readonly lastModified?: string | undefined;
32
+ readonly hardwareId?: string | undefined;
33
+ constructor(id?: string | undefined, locale?: string | undefined, product?: string | undefined, version?: string | undefined, edition?: string | undefined, lastModified?: string | undefined, hardwareId?: string | undefined);
34
+ static fromXml(root: Demo3DXmlElement): Demo3DHeader;
35
+ }
36
+ export declare class Demo3DMaterial extends Demo3DTypedObject {
37
+ get diffuse(): number | undefined;
38
+ get textureReference(): string | undefined;
39
+ }
40
+ export declare class Demo3DMesh extends Demo3DTypedObject {
41
+ private readonly referenceId?;
42
+ readonly meshFormat?: string;
43
+ readonly vertexFormat?: string;
44
+ readonly indexFormat?: string;
45
+ readonly vertices?: Demo3DBinaryBlock;
46
+ readonly indices?: Demo3DBinaryBlock;
47
+ readonly auxiliary?: Demo3DBinaryBlock;
48
+ constructor(typeName: string, xml: Demo3DXmlElement, id?: string);
49
+ get id(): string | undefined;
50
+ }
51
+ export declare class Demo3DVisual extends Demo3DTypedObject {
52
+ readonly displayName?: string;
53
+ readonly layer?: string;
54
+ readonly localTransform?: readonly number[];
55
+ readonly initialLocalTransform?: readonly number[];
56
+ readonly properties?: Demo3DXmlElement;
57
+ readonly materials: readonly Demo3DMaterial[];
58
+ readonly children: Demo3DVisual[];
59
+ constructor(typeName: string, xml: Demo3DXmlElement);
60
+ }
61
+ export declare class Demo3DLayer extends Demo3DTypedObject {
62
+ private readonly referenceName?;
63
+ readonly color?: number;
64
+ readonly visible: boolean;
65
+ readonly presets: ReadonlyMap<string, boolean>;
66
+ constructor(typeName: string, xml: Demo3DXmlElement, referenceName?: string | undefined);
67
+ get name(): string;
68
+ }
69
+ export declare class Demo3DResource {
70
+ readonly path: string;
71
+ readonly entry: ZipEntryInfo;
72
+ readonly data?: Uint8Array | undefined;
73
+ constructor(path: string, entry: ZipEntryInfo, data?: Uint8Array | undefined);
74
+ }
75
+ export declare class Demo3DProject {
76
+ readonly root: Demo3DXmlElement;
77
+ readonly header: Demo3DHeader;
78
+ readonly meshes: readonly Demo3DMesh[];
79
+ readonly layers: readonly Demo3DLayer[];
80
+ readonly visuals: readonly Demo3DVisual[];
81
+ readonly typedObjects: readonly Demo3DTypedObject[];
82
+ readonly unknownTypes: ReadonlyMap<string, number>;
83
+ constructor(root: Demo3DXmlElement, header: Demo3DHeader, meshes: readonly Demo3DMesh[], layers: readonly Demo3DLayer[], visuals: readonly Demo3DVisual[], typedObjects: readonly Demo3DTypedObject[], unknownTypes: ReadonlyMap<string, number>);
84
+ }
85
+ export declare class Demo3DPackage {
86
+ readonly entries: readonly ZipEntryInfo[];
87
+ readonly modelEntryName: string;
88
+ readonly modelXml: string;
89
+ readonly model: Demo3DProject;
90
+ readonly thumbnail?: Demo3DResource | undefined;
91
+ readonly resources: readonly Demo3DResource[];
92
+ readonly buffers: readonly Demo3DResource[];
93
+ constructor(entries: readonly ZipEntryInfo[], modelEntryName: string, modelXml: string, model: Demo3DProject, thumbnail?: Demo3DResource | undefined, resources?: readonly Demo3DResource[], buffers?: readonly Demo3DResource[]);
94
+ }
95
+ export declare function extractProject(root: Demo3DXmlElement): Demo3DProject;
96
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/dist/model.js ADDED
@@ -0,0 +1,336 @@
1
+ import { Demo3DBinaryBlock, Demo3DXmlElement } from "./xml.js";
2
+ const typeRegistry = new Map();
3
+ export function registerDemo3DType(typeName, constructor) {
4
+ typeRegistry.set(typeName, constructor);
5
+ }
6
+ export function createTypedObject(xml) {
7
+ const typeName = xml.xsiType ?? "unknown";
8
+ const Constructor = typeRegistry.get(typeName) ?? Demo3DUnknownObject;
9
+ return new Constructor(typeName, xml);
10
+ }
11
+ export class Demo3DTypedObject {
12
+ typeName;
13
+ xml;
14
+ constructor(typeName, xml) {
15
+ this.typeName = typeName;
16
+ this.xml = xml;
17
+ }
18
+ get name() {
19
+ return this.xml.textOf("N") ?? this.xml.textOf("Name");
20
+ }
21
+ get id() {
22
+ return this.xml.textOf("Id") ?? this.xml.textOf("UID");
23
+ }
24
+ child(localName) {
25
+ return this.xml.child(localName);
26
+ }
27
+ value(localName) {
28
+ return this.xml.valueOf(localName);
29
+ }
30
+ }
31
+ export class Demo3DUnknownObject extends Demo3DTypedObject {
32
+ }
33
+ export class Demo3DReference {
34
+ id;
35
+ typeName;
36
+ filter;
37
+ constructor(id, typeName, filter) {
38
+ this.id = id;
39
+ this.typeName = typeName;
40
+ this.filter = filter;
41
+ }
42
+ }
43
+ export class Demo3DHeader {
44
+ id;
45
+ locale;
46
+ product;
47
+ version;
48
+ edition;
49
+ lastModified;
50
+ hardwareId;
51
+ constructor(id, locale, product, version, edition, lastModified, hardwareId) {
52
+ this.id = id;
53
+ this.locale = locale;
54
+ this.product = product;
55
+ this.version = version;
56
+ this.edition = edition;
57
+ this.lastModified = lastModified;
58
+ this.hardwareId = hardwareId;
59
+ }
60
+ static fromXml(root) {
61
+ const header = root.child("Header");
62
+ return new Demo3DHeader(header?.textOf("Id"), header?.textOf("Locale"), header?.textOf("Product"), header?.textOf("Version"), header?.textOf("Edition"), header?.textOf("LastModified"), header?.textOf("Hwid"));
63
+ }
64
+ }
65
+ export class Demo3DMaterial extends Demo3DTypedObject {
66
+ get diffuse() {
67
+ return numberValue(this.xml.valueOf("Diffuse"));
68
+ }
69
+ get textureReference() {
70
+ return (this.xml.child("TextureReference")?.textOf("Id") ??
71
+ this.xml.child("Texture")?.textOf("Id") ??
72
+ this.xml.textOf("TextureReference") ??
73
+ this.xml.textOf("Texture"));
74
+ }
75
+ }
76
+ export class Demo3DMesh extends Demo3DTypedObject {
77
+ referenceId;
78
+ meshFormat;
79
+ vertexFormat;
80
+ indexFormat;
81
+ vertices;
82
+ indices;
83
+ auxiliary;
84
+ constructor(typeName, xml, id) {
85
+ super(typeName, xml);
86
+ const meshData = xml.child("MeshData");
87
+ const vertices = meshData?.child("V");
88
+ const indices = meshData?.child("I");
89
+ this.referenceId = id;
90
+ this.meshFormat = stringValue(meshData?.valueOf("MF"));
91
+ this.vertexFormat = stringValue(vertices?.valueOf("VF"));
92
+ this.indexFormat = stringValue(indices?.valueOf("IF"));
93
+ this.vertices = binaryValue(vertices?.valueOf("D"));
94
+ this.indices = binaryValue(indices?.valueOf("D"));
95
+ this.auxiliary = binaryValue(meshData?.valueOf("A"));
96
+ }
97
+ get id() {
98
+ return this.referenceId ?? super.id;
99
+ }
100
+ }
101
+ export class Demo3DVisual extends Demo3DTypedObject {
102
+ displayName;
103
+ layer;
104
+ localTransform;
105
+ initialLocalTransform;
106
+ properties;
107
+ materials;
108
+ children = [];
109
+ constructor(typeName, xml) {
110
+ super(typeName, xml);
111
+ this.displayName = xml.textOf("N") ?? xml.textOf("Name");
112
+ this.layer = xml.child("P")?.textOf("Layer");
113
+ this.localTransform = numberArrayValue(xml.valueOf("LR"));
114
+ this.initialLocalTransform = numberArrayValue(xml.valueOf("ILR"));
115
+ this.properties = xml.child("P");
116
+ this.materials = findVisualMaterials(xml)
117
+ .map((node) => new Demo3DMaterial(node.xsiType ?? "e3d:MeshMaterial", node));
118
+ }
119
+ }
120
+ export class Demo3DLayer extends Demo3DTypedObject {
121
+ referenceName;
122
+ color;
123
+ visible;
124
+ presets;
125
+ constructor(typeName, xml, referenceName) {
126
+ super(typeName, xml);
127
+ this.referenceName = referenceName;
128
+ this.color = numberValue(xml.valueOf("Color"));
129
+ this.visible = booleanValue(xml.valueOf("Visible"), true);
130
+ this.presets = extractLayerPresets(xml.child("LayerPresets")?.child("C"));
131
+ }
132
+ get name() {
133
+ return super.name ?? this.referenceName ?? "";
134
+ }
135
+ }
136
+ export class Demo3DResource {
137
+ path;
138
+ entry;
139
+ data;
140
+ constructor(path, entry, data) {
141
+ this.path = path;
142
+ this.entry = entry;
143
+ this.data = data;
144
+ }
145
+ }
146
+ export class Demo3DProject {
147
+ root;
148
+ header;
149
+ meshes;
150
+ layers;
151
+ visuals;
152
+ typedObjects;
153
+ unknownTypes;
154
+ constructor(root, header, meshes, layers, visuals, typedObjects, unknownTypes) {
155
+ this.root = root;
156
+ this.header = header;
157
+ this.meshes = meshes;
158
+ this.layers = layers;
159
+ this.visuals = visuals;
160
+ this.typedObjects = typedObjects;
161
+ this.unknownTypes = unknownTypes;
162
+ }
163
+ }
164
+ export class Demo3DPackage {
165
+ entries;
166
+ modelEntryName;
167
+ modelXml;
168
+ model;
169
+ thumbnail;
170
+ resources;
171
+ buffers;
172
+ constructor(entries, modelEntryName, modelXml, model, thumbnail, resources = [], buffers = []) {
173
+ this.entries = entries;
174
+ this.modelEntryName = modelEntryName;
175
+ this.modelXml = modelXml;
176
+ this.model = model;
177
+ this.thumbnail = thumbnail;
178
+ this.resources = resources;
179
+ this.buffers = buffers;
180
+ }
181
+ }
182
+ export function extractProject(root) {
183
+ const typedObjects = collectTypedObjects(root);
184
+ const unknownTypes = new Map();
185
+ for (const typedObject of typedObjects) {
186
+ if (typedObject instanceof Demo3DUnknownObject) {
187
+ unknownTypes.set(typedObject.typeName, (unknownTypes.get(typedObject.typeName) ?? 0) + 1);
188
+ }
189
+ }
190
+ return new Demo3DProject(root, Demo3DHeader.fromXml(root), extractMeshes(root), extractLayers(root), extractVisualRoots(root), typedObjects, unknownTypes);
191
+ }
192
+ function extractLayers(root) {
193
+ const entries = root.child("LayerLibrary")?.child("Layers")?.children ?? [];
194
+ return entries.flatMap((entry) => {
195
+ const value = entry.child("val");
196
+ if (value?.xsiType !== "e3d:Layer") {
197
+ return [];
198
+ }
199
+ return [new Demo3DLayer(value.xsiType, value, entry.child("key")?.text)];
200
+ });
201
+ }
202
+ function extractLayerPresets(container) {
203
+ const presets = new Map();
204
+ for (const entry of container?.children ?? []) {
205
+ const name = entry.child("key")?.text;
206
+ if (name) {
207
+ presets.set(name, booleanValue(entry.child("val")?.value, true));
208
+ }
209
+ }
210
+ return presets;
211
+ }
212
+ function collectTypedObjects(root) {
213
+ return findDescendants(root, (node) => node.xsiType !== null).map(createTypedObject);
214
+ }
215
+ function extractMeshes(root) {
216
+ const meshes = [];
217
+ const entries = root.child("MeshLibrary")?.child("Meshes")?.children;
218
+ const candidates = entries ?? findDescendants(root, (node) => node.xsiType === "e3d:DictionaryEntry");
219
+ for (const entry of candidates) {
220
+ const value = entry.child("val");
221
+ if (value?.xsiType !== "e3d:Mesh") {
222
+ continue;
223
+ }
224
+ const id = entry.child("key")?.textOf("Id") ?? value.textOf("Id");
225
+ meshes.push(new Demo3DMesh("e3d:Mesh", value, id));
226
+ }
227
+ return meshes;
228
+ }
229
+ function findVisualMaterials(root) {
230
+ const found = [];
231
+ const stack = root.children.filter((child) => child.localName !== "C");
232
+ while (stack.length > 0) {
233
+ const node = stack.pop();
234
+ if (!node) {
235
+ continue;
236
+ }
237
+ if (node.xsiType === "e3d:MeshMaterial") {
238
+ found.push(node);
239
+ }
240
+ for (let index = node.children.length - 1; index >= 0; index -= 1) {
241
+ stack.push(node.children[index]);
242
+ }
243
+ }
244
+ return found;
245
+ }
246
+ function extractVisualRoots(root) {
247
+ const roots = [];
248
+ const rootChildren = root.child("Scene")?.child("C")?.children ?? root.child("C")?.children ?? findTopLevelVisualContainers(root);
249
+ for (const child of rootChildren) {
250
+ if (isVisualElement(child)) {
251
+ roots.push(buildVisual(child));
252
+ }
253
+ }
254
+ return roots;
255
+ }
256
+ function findTopLevelVisualContainers(root) {
257
+ const projectChildren = root.children.filter((child) => child.localName === "e" || child.localName === "Visual");
258
+ return projectChildren.length > 0 ? projectChildren : root.children;
259
+ }
260
+ function buildVisual(node) {
261
+ const visual = new Demo3DVisual(node.xsiType ?? "e3d:Visual", node);
262
+ const childContainer = node.child("C");
263
+ if (childContainer) {
264
+ for (const child of childContainer.children) {
265
+ if (isVisualElement(child)) {
266
+ visual.children.push(buildVisual(child));
267
+ }
268
+ }
269
+ }
270
+ return visual;
271
+ }
272
+ function isVisualElement(node) {
273
+ if (!node.xsiType) {
274
+ return false;
275
+ }
276
+ if (node.localName === "Visual") {
277
+ return true;
278
+ }
279
+ if (node.localName === "e" && (node.child("Id") || node.child("N") || node.child("P"))) {
280
+ return true;
281
+ }
282
+ return node.xsiType === "e3d:Visual" || node.xsiType.endsWith("Visual");
283
+ }
284
+ function findDescendants(root, predicate) {
285
+ const found = [];
286
+ const stack = [root];
287
+ while (stack.length > 0) {
288
+ const node = stack.pop();
289
+ if (!node) {
290
+ continue;
291
+ }
292
+ if (predicate(node)) {
293
+ found.push(node);
294
+ }
295
+ for (let index = node.children.length - 1; index >= 0; index -= 1) {
296
+ stack.push(node.children[index]);
297
+ }
298
+ }
299
+ return found;
300
+ }
301
+ function numberValue(value) {
302
+ if (typeof value === "number") {
303
+ return value;
304
+ }
305
+ if (typeof value !== "string" || value.trim().length === 0) {
306
+ return undefined;
307
+ }
308
+ const parsed = Number(value);
309
+ return Number.isFinite(parsed) ? parsed : undefined;
310
+ }
311
+ function stringValue(value) {
312
+ return typeof value === "string" ? value : undefined;
313
+ }
314
+ function binaryValue(value) {
315
+ return value instanceof Demo3DBinaryBlock ? value : undefined;
316
+ }
317
+ function numberArrayValue(value) {
318
+ return Array.isArray(value) ? value : undefined;
319
+ }
320
+ function booleanValue(value, fallback) {
321
+ if (typeof value === "boolean") {
322
+ return value;
323
+ }
324
+ if (typeof value === "number") {
325
+ return value !== 0;
326
+ }
327
+ if (typeof value === "string" && value.length > 0) {
328
+ return !(value === "0" || value.toLowerCase() === "false");
329
+ }
330
+ return fallback;
331
+ }
332
+ registerDemo3DType("e3d:Visual", Demo3DVisual);
333
+ registerDemo3DType("e3d:Mesh", Demo3DMesh);
334
+ registerDemo3DType("e3d:MeshMaterial", Demo3DMaterial);
335
+ registerDemo3DType("e3d:Layer", Demo3DLayer);
336
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAOvF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAiC,CAAC;AAE9D,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,WAAkC;IACrF,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAqB;IACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1C,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC;IACtE,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,OAAO,iBAAiB;IACA;IAAkC;IAA9D,YAA4B,QAAgB,EAAkB,GAAqB;QAAvD,aAAQ,GAAR,QAAQ,CAAQ;QAAkB,QAAG,GAAH,GAAG,CAAkB;IAAG,CAAC;IAEvF,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;CAAG;AAE7D,MAAM,OAAO,eAAe;IAER;IACA;IACA;IAHlB,YACkB,EAAU,EACV,QAAiB,EACjB,MAAyB;QAFzB,OAAE,GAAF,EAAE,CAAQ;QACV,aAAQ,GAAR,QAAQ,CAAS;QACjB,WAAM,GAAN,MAAM,CAAmB;IACxC,CAAC;CACL;AAED,MAAM,OAAO,YAAY;IAEL;IACA;IACA;IACA;IACA;IACA;IACA;IAPlB,YACkB,EAAW,EACX,MAAe,EACf,OAAgB,EAChB,OAAgB,EAChB,OAAgB,EAChB,YAAqB,EACrB,UAAmB;QANnB,OAAE,GAAF,EAAE,CAAS;QACX,WAAM,GAAN,MAAM,CAAS;QACf,YAAO,GAAP,OAAO,CAAS;QAChB,YAAO,GAAP,OAAO,CAAS;QAChB,YAAO,GAAP,OAAO,CAAS;QAChB,iBAAY,GAAZ,YAAY,CAAS;QACrB,eAAU,GAAV,UAAU,CAAS;IAClC,CAAC;IAEJ,MAAM,CAAC,OAAO,CAAC,IAAsB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,IAAI,YAAY,CACrB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EACpB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EACxB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EACzB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EACzB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EACzB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CACvB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IACnD,IAAI,OAAO;QACT,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAC3B,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IAC9B,WAAW,CAAU;IAC7B,UAAU,CAAU;IACpB,YAAY,CAAU;IACtB,WAAW,CAAU;IACrB,QAAQ,CAAqB;IAC7B,OAAO,CAAqB;IAC5B,SAAS,CAAqB;IAEvC,YAAY,QAAgB,EAAE,GAAqB,EAAE,EAAW;QAC9D,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAa,EAAE;QACb,OAAO,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,iBAAiB;IACxC,WAAW,CAAU;IACrB,KAAK,CAAU;IACf,cAAc,CAAqB;IACnC,qBAAqB,CAAqB;IAC1C,UAAU,CAAoB;IAC9B,SAAS,CAA4B;IACrC,QAAQ,GAAmB,EAAE,CAAC;IAEvC,YAAY,QAAgB,EAAE,GAAqB;QACjD,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC;aACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAKsB;IAJ7D,KAAK,CAAU;IACf,OAAO,CAAU;IACjB,OAAO,CAA+B;IAE/C,YAAY,QAAgB,EAAE,GAAqB,EAAmB,aAAsB;QAC1F,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAD+C,kBAAa,GAAb,aAAa,CAAS;QAE1F,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAa,IAAI;QACf,OAAO,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;IAChD,CAAC;CACF;AAED,MAAM,OAAO,cAAc;IAEP;IACA;IACA;IAHlB,YACkB,IAAY,EACZ,KAAmB,EACnB,IAAiB;QAFjB,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAc;QACnB,SAAI,GAAJ,IAAI,CAAa;IAChC,CAAC;CACL;AAED,MAAM,OAAO,aAAa;IAEN;IACA;IACA;IACA;IACA;IACA;IACA;IAPlB,YACkB,IAAsB,EACtB,MAAoB,EACpB,MAA6B,EAC7B,MAA8B,EAC9B,OAAgC,EAChC,YAA0C,EAC1C,YAAyC;QANzC,SAAI,GAAJ,IAAI,CAAkB;QACtB,WAAM,GAAN,MAAM,CAAc;QACpB,WAAM,GAAN,MAAM,CAAuB;QAC7B,WAAM,GAAN,MAAM,CAAwB;QAC9B,YAAO,GAAP,OAAO,CAAyB;QAChC,iBAAY,GAAZ,YAAY,CAA8B;QAC1C,iBAAY,GAAZ,YAAY,CAA6B;IACxD,CAAC;CACL;AAED,MAAM,OAAO,aAAa;IAEN;IACA;IACA;IACA;IACA;IACA;IACA;IAPlB,YACkB,OAAgC,EAChC,cAAsB,EACtB,QAAgB,EAChB,KAAoB,EACpB,SAA0B,EAC1B,YAAuC,EAAE,EACzC,UAAqC,EAAE;QANvC,YAAO,GAAP,OAAO,CAAyB;QAChC,mBAAc,GAAd,cAAc,CAAQ;QACtB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,UAAK,GAAL,KAAK,CAAe;QACpB,cAAS,GAAT,SAAS,CAAiB;QAC1B,cAAS,GAAT,SAAS,CAAgC;QACzC,YAAO,GAAP,OAAO,CAAgC;IACtD,CAAC;CACL;AAED,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,WAAW,YAAY,mBAAmB,EAAE,CAAC;YAC/C,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,OAAO,IAAI,aAAa,CACtB,IAAI,EACJ,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAC1B,aAAa,CAAC,IAAI,CAAC,EACnB,aAAa,CAAC,IAAI,CAAC,EACnB,kBAAkB,CAAC,IAAI,CAAC,EACxB,YAAY,EACZ,YAAY,CACb,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAsB;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC5E,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAuC;IAClE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;QACtC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAsB;IACjD,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,aAAa,CAAC,IAAsB;IAC3C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACrE,MAAM,UAAU,GAAG,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,qBAAqB,CAAC,CAAC;IAEtG,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QAED,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAsB;IACjD,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC;IAEvE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAsB;IAChD,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAElI,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAsB;IAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;IACjH,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,IAAsB;IACzC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,YAAY,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC5C,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,IAAsB;IAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CACtB,IAAsB,EACtB,SAA8C;IAE9C,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IAErB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAoC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,WAAW,CAAC,KAAoC;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,KAAoC;IACvD,OAAO,KAAK,YAAY,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAoC;IAC5D,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,KAAoC,EAAE,QAAiB;IAC3E,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC/C,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC3C,kBAAkB,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;AACvD,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type Demo3DInput } from "./binary.js";
2
+ import { Demo3DPackage } from "./model.js";
3
+ import { type ParseXmlDocument } from "./xml.js";
4
+ export interface ParseDemo3DOptions {
5
+ readonly parseXml?: ParseXmlDocument;
6
+ readonly xmlParser?: "fast" | "dom";
7
+ }
8
+ export declare function parseDemo3D(input: Demo3DInput, options?: ParseDemo3DOptions): Promise<Demo3DPackage>;
9
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAkC,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAmB,KAAK,gBAAgB,EAAwB,MAAM,UAAU,CAAC;AAGxF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACrC;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwC9G"}
package/dist/parser.js ADDED
@@ -0,0 +1,74 @@
1
+ import { decodeText, toUint8Array } from "./binary.js";
2
+ import { Demo3DUnsupportedError, Demo3DZipError } from "./errors.js";
3
+ import { parseDemo3DXmlFast } from "./fast-xml.js";
4
+ import { Demo3DPackage, Demo3DResource, extractProject } from "./model.js";
5
+ import { defaultParseXml, xmlDocumentToElement } from "./xml.js";
6
+ import { parseZip } from "./zip.js";
7
+ export async function parseDemo3D(input, options = {}) {
8
+ const bytes = toUint8Array(input);
9
+ const archive = parseZip(bytes);
10
+ const modelEntry = findModelEntry(archive.entries);
11
+ const resourceEntries = archive.entries.filter((entry) => isResourceEntry(entry.name));
12
+ const bufferEntries = archive.entries.filter((entry) => entry.name.toLowerCase().startsWith("buffers_md/"));
13
+ const thumbnailEntry = archive.entries.find((entry) => entry.name.toLowerCase() === "thumbnail.png");
14
+ const resourcePromises = new Map();
15
+ const loadResource = (entry) => {
16
+ let promise = resourcePromises.get(entry.name);
17
+ if (!promise) {
18
+ promise = toResource(entry);
19
+ resourcePromises.set(entry.name, promise);
20
+ }
21
+ return promise;
22
+ };
23
+ const resourcesPromise = Promise.all(resourceEntries.map(loadResource));
24
+ const buffersPromise = Promise.all(bufferEntries.map(loadResource));
25
+ const thumbnailPromise = thumbnailEntry ? loadResource(thumbnailEntry) : Promise.resolve(undefined);
26
+ const modelBytes = await modelEntry.arrayBuffer();
27
+ const modelXml = decodeText(modelBytes, "utf-8");
28
+ const root = options.parseXml || options.xmlParser === "dom"
29
+ ? xmlDocumentToElement((options.parseXml ?? defaultParseXml)(modelXml))
30
+ : parseDemo3DXmlFast(modelXml);
31
+ const model = extractProject(root);
32
+ const [resources, buffers, thumbnail] = await Promise.all([
33
+ resourcesPromise,
34
+ buffersPromise,
35
+ thumbnailPromise
36
+ ]);
37
+ return new Demo3DPackage(archive.entries.map(toEntryInfo), modelEntry.name, modelXml, model, thumbnail, resources, buffers);
38
+ }
39
+ function findModelEntry(entries) {
40
+ const modelEntries = entries.filter((entry) => entry.name.toLowerCase().endsWith(".demo3d"));
41
+ if (modelEntries.length === 0) {
42
+ throw new Demo3DZipError("No nested .demo3d XML model entry was found in the package.");
43
+ }
44
+ const preferred = modelEntries.find((entry) => entry.uncompressedSize > 0 && entry.name.indexOf("/") === -1);
45
+ const entry = preferred ?? modelEntries[0];
46
+ if (entry.uncompressedSize === 0) {
47
+ throw new Demo3DUnsupportedError(`Model entry "${entry.name}" is empty.`, "DEMO3D_EMPTY_MODEL");
48
+ }
49
+ return entry;
50
+ }
51
+ function isResourceEntry(path) {
52
+ const lower = path.toLowerCase();
53
+ return (lower.startsWith("userresources/") ||
54
+ lower.endsWith(".xlsx") ||
55
+ lower.endsWith(".png") ||
56
+ lower.endsWith(".jpg") ||
57
+ lower.endsWith(".jpeg") ||
58
+ lower.endsWith(".bmp") ||
59
+ lower.endsWith(".gif"));
60
+ }
61
+ function toEntryInfo(entry) {
62
+ return {
63
+ name: entry.name,
64
+ compressedSize: entry.compressedSize,
65
+ uncompressedSize: entry.uncompressedSize,
66
+ compressionMethod: entry.compressionMethod,
67
+ flags: entry.flags,
68
+ crc32: entry.crc32
69
+ };
70
+ }
71
+ async function toResource(entry) {
72
+ return new Demo3DResource(entry.name, toEntryInfo(entry), await entry.arrayBuffer());
73
+ }
74
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type * as Three from "three";
2
+ import { Demo3DMaterial, Demo3DMesh, Demo3DPackage, Demo3DProject } from "../model.js";
3
+ export { createDemo3DThreeRenderer, type Demo3DThreeCanvasRendererOptions, type Demo3DThreeModule, type Demo3DThreeRendererInstance, type Demo3DThreeRendererFallback, type Demo3DThreeRendererResult, type Demo3DThreeRenderBackend, type Demo3DThreeWebGPUModule } from "./renderer.js";
4
+ export type ThreeModule = typeof Three;
5
+ export interface Demo3DThreeWarning {
6
+ readonly code: string;
7
+ readonly message: string;
8
+ readonly sourceId?: string;
9
+ readonly sourceType?: string;
10
+ readonly xmlPath?: string;
11
+ }
12
+ export interface Demo3DThreeRendererOptions {
13
+ readonly three?: ThreeModule;
14
+ readonly loadThree?: () => Promise<ThreeModule>;
15
+ readonly showPlaceholders?: boolean;
16
+ readonly renderText?: boolean;
17
+ readonly renderProceduralBelts?: boolean;
18
+ readonly includeUnsupported?: boolean;
19
+ readonly includeSerializedRenderables?: boolean;
20
+ readonly maxSerializedRenderables?: number;
21
+ readonly onWarning?: (warning: Demo3DThreeWarning) => void;
22
+ }
23
+ export interface Demo3DThreeStats {
24
+ groups: number;
25
+ meshes: number;
26
+ geometries: number;
27
+ materials: number;
28
+ textures: number;
29
+ textVisuals: number;
30
+ drawingBlocks: number;
31
+ lines: number;
32
+ directVisuals: number;
33
+ proceduralBelts: number;
34
+ imageVisuals: number;
35
+ lights: number;
36
+ missingGeometryPlaceholders: number;
37
+ serializedRenderables: number;
38
+ unsupported: number;
39
+ }
40
+ export interface Demo3DThreeScene {
41
+ readonly three: ThreeModule;
42
+ readonly scene: Three.Scene;
43
+ readonly group: Three.Group;
44
+ readonly stats: Demo3DThreeStats;
45
+ readonly warnings: readonly Demo3DThreeWarning[];
46
+ }
47
+ export declare function createDemo3DThreeScene(parsed: Demo3DPackage | Demo3DProject, options?: Demo3DThreeRendererOptions): Promise<Demo3DThreeScene>;
48
+ export declare function createDemo3DThreeGroup(parsed: Demo3DPackage | Demo3DProject, options?: Demo3DThreeRendererOptions): Promise<Three.Group>;
49
+ export declare function decodeDemo3DThreeGeometry(mesh: Demo3DMesh, three: ThreeModule): Three.BufferGeometry;
50
+ export declare function createDemo3DThreeMaterial(material: Demo3DMaterial | undefined, three: ThreeModule): Three.Material;
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/three/index.ts"],"names":[],"mappings":"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"}