jww-parser 2025.12.3 → 2025.12.7
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/LICENSE +202 -0
- package/README.mbt.md +1 -0
- package/dist/index.cjs +10800 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +10 -946
- package/dist/index.mjs +10794 -722
- package/dist/index.mjs.map +1 -0
- package/dist/moonbit.d.ts +57 -0
- package/package.json +35 -40
- package/README.md +0 -138
- package/dist/index.d.mts +0 -947
- package/dist/index.js +0 -768
- package/wasm/jww-parser.wasm +0 -0
- package/wasm/wasm_exec.js +0 -575
package/dist/index.d.ts
CHANGED
|
@@ -1,947 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
* JWW (Jw_cad) file parser and DXF converter
|
|
3
|
-
*
|
|
4
|
-
* This module provides functionality to parse JWW binary files
|
|
5
|
-
* and convert them to DXF format using WebAssembly.
|
|
6
|
-
*
|
|
7
|
-
* @packageDocumentation
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Error codes for JWW parser operations
|
|
11
|
-
*/
|
|
12
|
-
declare enum JwwErrorCode {
|
|
13
|
-
/** Parser has not been initialized */
|
|
14
|
-
NOT_INITIALIZED = "NOT_INITIALIZED",
|
|
15
|
-
/** WASM module failed to load */
|
|
16
|
-
WASM_LOAD_FAILED = "WASM_LOAD_FAILED",
|
|
17
|
-
/** WASM functions not available after timeout */
|
|
18
|
-
WASM_TIMEOUT = "WASM_TIMEOUT",
|
|
19
|
-
/** Invalid JWW file signature */
|
|
20
|
-
INVALID_SIGNATURE = "INVALID_SIGNATURE",
|
|
21
|
-
/** Unsupported JWW version */
|
|
22
|
-
UNSUPPORTED_VERSION = "UNSUPPORTED_VERSION",
|
|
23
|
-
/** General parse error */
|
|
24
|
-
PARSE_ERROR = "PARSE_ERROR",
|
|
25
|
-
/** DXF conversion error */
|
|
26
|
-
CONVERSION_ERROR = "CONVERSION_ERROR",
|
|
27
|
-
/** Validation error */
|
|
28
|
-
VALIDATION_ERROR = "VALIDATION_ERROR",
|
|
29
|
-
/** Memory allocation error */
|
|
30
|
-
MEMORY_ERROR = "MEMORY_ERROR",
|
|
31
|
-
/** Invalid argument provided */
|
|
32
|
-
INVALID_ARGUMENT = "INVALID_ARGUMENT"
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Base error class for JWW parser errors
|
|
36
|
-
*/
|
|
37
|
-
declare class JwwParserError extends Error {
|
|
38
|
-
/** Error code identifying the error type */
|
|
39
|
-
readonly code: JwwErrorCode;
|
|
40
|
-
/** Original error that caused this error, if any */
|
|
41
|
-
readonly cause?: Error;
|
|
42
|
-
/** Additional context about the error */
|
|
43
|
-
readonly context?: Record<string, unknown>;
|
|
44
|
-
/** Timestamp when the error occurred */
|
|
45
|
-
readonly timestamp: Date;
|
|
46
|
-
constructor(code: JwwErrorCode, message: string, options?: {
|
|
47
|
-
cause?: Error;
|
|
48
|
-
context?: Record<string, unknown>;
|
|
49
|
-
});
|
|
50
|
-
/**
|
|
51
|
-
* Returns a detailed string representation of the error
|
|
52
|
-
*/
|
|
53
|
-
toDetailedString(): string;
|
|
54
|
-
/**
|
|
55
|
-
* Converts the error to a plain object for logging/serialization
|
|
56
|
-
*/
|
|
57
|
-
toJSON(): Record<string, unknown>;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Error thrown when the parser is not initialized
|
|
61
|
-
*/
|
|
62
|
-
declare class NotInitializedError extends JwwParserError {
|
|
63
|
-
constructor();
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Error thrown when WASM module fails to load
|
|
67
|
-
*/
|
|
68
|
-
declare class WasmLoadError extends JwwParserError {
|
|
69
|
-
constructor(message: string, cause?: Error);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Error thrown when file validation fails
|
|
73
|
-
*/
|
|
74
|
-
declare class ValidationError extends JwwParserError {
|
|
75
|
-
/** Specific validation issues found */
|
|
76
|
-
readonly issues: ValidationIssue[];
|
|
77
|
-
constructor(message: string, issues: ValidationIssue[]);
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Error thrown during parsing
|
|
81
|
-
*/
|
|
82
|
-
declare class ParseError extends JwwParserError {
|
|
83
|
-
/** Byte offset where the error occurred, if available */
|
|
84
|
-
readonly offset?: number;
|
|
85
|
-
/** Section being parsed when the error occurred */
|
|
86
|
-
readonly section?: string;
|
|
87
|
-
constructor(message: string, options?: {
|
|
88
|
-
cause?: Error;
|
|
89
|
-
offset?: number;
|
|
90
|
-
section?: string;
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Complete JWW document structure
|
|
95
|
-
*/
|
|
96
|
-
interface JwwDocument {
|
|
97
|
-
/** JWW file version number */
|
|
98
|
-
Version: number;
|
|
99
|
-
/** Document memo/comments */
|
|
100
|
-
Memo: string;
|
|
101
|
-
/** Paper size code */
|
|
102
|
-
PaperSize: number;
|
|
103
|
-
/** Layer groups (16 groups) */
|
|
104
|
-
LayerGroups: JwwLayerGroup[];
|
|
105
|
-
/** All entities in the document */
|
|
106
|
-
Entities: JwwEntity[];
|
|
107
|
-
/** Block definitions */
|
|
108
|
-
Blocks: JwwBlock[];
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* JWW layer group containing 16 layers
|
|
112
|
-
*/
|
|
113
|
-
interface JwwLayerGroup {
|
|
114
|
-
/** Layer group name */
|
|
115
|
-
Name: string;
|
|
116
|
-
/** Layers within this group (16 layers) */
|
|
117
|
-
Layers: JwwLayer[];
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* JWW layer within a layer group
|
|
121
|
-
*/
|
|
122
|
-
interface JwwLayer {
|
|
123
|
-
/** Layer name */
|
|
124
|
-
Name: string;
|
|
125
|
-
/** Whether the layer is visible */
|
|
126
|
-
Visible: boolean;
|
|
127
|
-
/** Whether the layer is locked */
|
|
128
|
-
Locked: boolean;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Base interface for all JWW entities
|
|
132
|
-
*/
|
|
133
|
-
interface JwwEntityBase {
|
|
134
|
-
/** Entity type discriminator */
|
|
135
|
-
Type: string;
|
|
136
|
-
/** Curve attribute number */
|
|
137
|
-
Group: number;
|
|
138
|
-
/** Line type/style */
|
|
139
|
-
PenStyle: number;
|
|
140
|
-
/** Color code */
|
|
141
|
-
PenColor: number;
|
|
142
|
-
/** Line width */
|
|
143
|
-
PenWidth: number;
|
|
144
|
-
/** Layer index within the group (0-15) */
|
|
145
|
-
Layer: number;
|
|
146
|
-
/** Layer group index (0-15) */
|
|
147
|
-
LayerGroup: number;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* JWW Line entity
|
|
151
|
-
*/
|
|
152
|
-
interface JwwLine extends JwwEntityBase {
|
|
153
|
-
Type: "Line";
|
|
154
|
-
/** Start X coordinate */
|
|
155
|
-
X1: number;
|
|
156
|
-
/** Start Y coordinate */
|
|
157
|
-
Y1: number;
|
|
158
|
-
/** End X coordinate */
|
|
159
|
-
X2: number;
|
|
160
|
-
/** End Y coordinate */
|
|
161
|
-
Y2: number;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* JWW Arc entity (includes circles and ellipses)
|
|
165
|
-
*/
|
|
166
|
-
interface JwwArc extends JwwEntityBase {
|
|
167
|
-
Type: "Arc";
|
|
168
|
-
/** Center X coordinate */
|
|
169
|
-
CenterX: number;
|
|
170
|
-
/** Center Y coordinate */
|
|
171
|
-
CenterY: number;
|
|
172
|
-
/** Arc radius */
|
|
173
|
-
Radius: number;
|
|
174
|
-
/** Start angle in degrees */
|
|
175
|
-
StartAngle: number;
|
|
176
|
-
/** End angle in degrees */
|
|
177
|
-
EndAngle: number;
|
|
178
|
-
/** Flatness ratio (1.0 for circles, other values for ellipses) */
|
|
179
|
-
Flatness: number;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* JWW Point entity
|
|
183
|
-
*/
|
|
184
|
-
interface JwwPoint extends JwwEntityBase {
|
|
185
|
-
Type: "Point";
|
|
186
|
-
/** X coordinate */
|
|
187
|
-
X: number;
|
|
188
|
-
/** Y coordinate */
|
|
189
|
-
Y: number;
|
|
190
|
-
/** Point code/type */
|
|
191
|
-
Code: number;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* JWW Text entity
|
|
195
|
-
*/
|
|
196
|
-
interface JwwText extends JwwEntityBase {
|
|
197
|
-
Type: "Text";
|
|
198
|
-
/** Text insertion X coordinate */
|
|
199
|
-
X: number;
|
|
200
|
-
/** Text insertion Y coordinate */
|
|
201
|
-
Y: number;
|
|
202
|
-
/** Text content */
|
|
203
|
-
Text: string;
|
|
204
|
-
/** Font name */
|
|
205
|
-
FontName: string;
|
|
206
|
-
/** Text height */
|
|
207
|
-
Height: number;
|
|
208
|
-
/** Text width (character width) */
|
|
209
|
-
Width: number;
|
|
210
|
-
/** Rotation angle in degrees */
|
|
211
|
-
Angle: number;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* JWW Solid (filled polygon) entity
|
|
215
|
-
*/
|
|
216
|
-
interface JwwSolid extends JwwEntityBase {
|
|
217
|
-
Type: "Solid";
|
|
218
|
-
/** Array of [x, y] coordinate pairs */
|
|
219
|
-
Points: [number, number][];
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* JWW Block reference entity
|
|
223
|
-
*/
|
|
224
|
-
interface JwwBlockRef extends JwwEntityBase {
|
|
225
|
-
Type: "Block";
|
|
226
|
-
/** Insertion X coordinate */
|
|
227
|
-
X: number;
|
|
228
|
-
/** Insertion Y coordinate */
|
|
229
|
-
Y: number;
|
|
230
|
-
/** X scale factor */
|
|
231
|
-
ScaleX: number;
|
|
232
|
-
/** Y scale factor */
|
|
233
|
-
ScaleY: number;
|
|
234
|
-
/** Rotation angle in degrees */
|
|
235
|
-
Angle: number;
|
|
236
|
-
/** Referenced block definition number */
|
|
237
|
-
BlockNumber: number;
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Union type of all JWW entity types
|
|
241
|
-
*/
|
|
242
|
-
type JwwEntity = JwwLine | JwwArc | JwwPoint | JwwText | JwwSolid | JwwBlockRef;
|
|
243
|
-
/**
|
|
244
|
-
* JWW block definition
|
|
245
|
-
*/
|
|
246
|
-
interface JwwBlock {
|
|
247
|
-
/** Block name */
|
|
248
|
-
Name: string;
|
|
249
|
-
/** Entities within the block */
|
|
250
|
-
Entities: JwwEntity[];
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* DXF document structure
|
|
254
|
-
*/
|
|
255
|
-
interface DxfDocument {
|
|
256
|
-
/** DXF layers */
|
|
257
|
-
Layers: DxfLayer[];
|
|
258
|
-
/** All entities in the document */
|
|
259
|
-
Entities: DxfEntity[];
|
|
260
|
-
/** Block definitions */
|
|
261
|
-
Blocks: DxfBlock[];
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* DXF layer definition
|
|
265
|
-
*/
|
|
266
|
-
interface DxfLayer {
|
|
267
|
-
/** Layer name */
|
|
268
|
-
Name: string;
|
|
269
|
-
/** ACI color code (1-255) */
|
|
270
|
-
Color: number;
|
|
271
|
-
/** Whether the layer is frozen */
|
|
272
|
-
Frozen: boolean;
|
|
273
|
-
/** Whether the layer is locked */
|
|
274
|
-
Locked: boolean;
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Base interface for all DXF entities
|
|
278
|
-
*/
|
|
279
|
-
interface DxfEntityBase {
|
|
280
|
-
/** Entity type (LINE, CIRCLE, ARC, etc.) */
|
|
281
|
-
Type: string;
|
|
282
|
-
/** Layer name */
|
|
283
|
-
Layer: string;
|
|
284
|
-
/** Optional ACI color code */
|
|
285
|
-
Color?: number;
|
|
286
|
-
/** Optional line type name */
|
|
287
|
-
LineType?: string;
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* DXF LINE entity
|
|
291
|
-
*/
|
|
292
|
-
interface DxfLine extends DxfEntityBase {
|
|
293
|
-
Type: "LINE";
|
|
294
|
-
/** Start X coordinate */
|
|
295
|
-
X1: number;
|
|
296
|
-
/** Start Y coordinate */
|
|
297
|
-
Y1: number;
|
|
298
|
-
/** Start Z coordinate */
|
|
299
|
-
Z1?: number;
|
|
300
|
-
/** End X coordinate */
|
|
301
|
-
X2: number;
|
|
302
|
-
/** End Y coordinate */
|
|
303
|
-
Y2: number;
|
|
304
|
-
/** End Z coordinate */
|
|
305
|
-
Z2?: number;
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* DXF CIRCLE entity
|
|
309
|
-
*/
|
|
310
|
-
interface DxfCircle extends DxfEntityBase {
|
|
311
|
-
Type: "CIRCLE";
|
|
312
|
-
/** Center X coordinate */
|
|
313
|
-
CenterX: number;
|
|
314
|
-
/** Center Y coordinate */
|
|
315
|
-
CenterY: number;
|
|
316
|
-
/** Center Z coordinate */
|
|
317
|
-
CenterZ?: number;
|
|
318
|
-
/** Circle radius */
|
|
319
|
-
Radius: number;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* DXF ARC entity
|
|
323
|
-
*/
|
|
324
|
-
interface DxfArc extends DxfEntityBase {
|
|
325
|
-
Type: "ARC";
|
|
326
|
-
/** Center X coordinate */
|
|
327
|
-
CenterX: number;
|
|
328
|
-
/** Center Y coordinate */
|
|
329
|
-
CenterY: number;
|
|
330
|
-
/** Center Z coordinate */
|
|
331
|
-
CenterZ?: number;
|
|
332
|
-
/** Arc radius */
|
|
333
|
-
Radius: number;
|
|
334
|
-
/** Start angle in degrees */
|
|
335
|
-
StartAngle: number;
|
|
336
|
-
/** End angle in degrees */
|
|
337
|
-
EndAngle: number;
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* DXF ELLIPSE entity
|
|
341
|
-
*/
|
|
342
|
-
interface DxfEllipse extends DxfEntityBase {
|
|
343
|
-
Type: "ELLIPSE";
|
|
344
|
-
/** Center X coordinate */
|
|
345
|
-
CenterX: number;
|
|
346
|
-
/** Center Y coordinate */
|
|
347
|
-
CenterY: number;
|
|
348
|
-
/** Center Z coordinate */
|
|
349
|
-
CenterZ?: number;
|
|
350
|
-
/** Major axis X component (relative to center) */
|
|
351
|
-
MajorAxisX: number;
|
|
352
|
-
/** Major axis Y component (relative to center) */
|
|
353
|
-
MajorAxisY: number;
|
|
354
|
-
/** Major axis Z component (relative to center) */
|
|
355
|
-
MajorAxisZ?: number;
|
|
356
|
-
/** Minor to major axis ratio (0 to 1) */
|
|
357
|
-
MinorRatio: number;
|
|
358
|
-
/** Start parameter (0 to 2*PI) */
|
|
359
|
-
StartParam: number;
|
|
360
|
-
/** End parameter (0 to 2*PI) */
|
|
361
|
-
EndParam: number;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* DXF POINT entity
|
|
365
|
-
*/
|
|
366
|
-
interface DxfPoint extends DxfEntityBase {
|
|
367
|
-
Type: "POINT";
|
|
368
|
-
/** X coordinate */
|
|
369
|
-
X: number;
|
|
370
|
-
/** Y coordinate */
|
|
371
|
-
Y: number;
|
|
372
|
-
/** Z coordinate */
|
|
373
|
-
Z?: number;
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* DXF TEXT entity
|
|
377
|
-
*/
|
|
378
|
-
interface DxfText extends DxfEntityBase {
|
|
379
|
-
Type: "TEXT";
|
|
380
|
-
/** Insertion X coordinate */
|
|
381
|
-
X: number;
|
|
382
|
-
/** Insertion Y coordinate */
|
|
383
|
-
Y: number;
|
|
384
|
-
/** Insertion Z coordinate */
|
|
385
|
-
Z?: number;
|
|
386
|
-
/** Text height */
|
|
387
|
-
Height: number;
|
|
388
|
-
/** Text content */
|
|
389
|
-
Content: string;
|
|
390
|
-
/** Rotation angle in degrees */
|
|
391
|
-
Rotation?: number;
|
|
392
|
-
/** Text style name */
|
|
393
|
-
Style?: string;
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* DXF MTEXT (multiline text) entity
|
|
397
|
-
*/
|
|
398
|
-
interface DxfMText extends DxfEntityBase {
|
|
399
|
-
Type: "MTEXT";
|
|
400
|
-
/** Insertion X coordinate */
|
|
401
|
-
X: number;
|
|
402
|
-
/** Insertion Y coordinate */
|
|
403
|
-
Y: number;
|
|
404
|
-
/** Insertion Z coordinate */
|
|
405
|
-
Z?: number;
|
|
406
|
-
/** Text height */
|
|
407
|
-
Height: number;
|
|
408
|
-
/** Text content (with formatting codes) */
|
|
409
|
-
Content: string;
|
|
410
|
-
/** Rotation angle in degrees */
|
|
411
|
-
Rotation?: number;
|
|
412
|
-
/** Reference rectangle width */
|
|
413
|
-
Width?: number;
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* DXF SOLID entity (filled triangle or quadrilateral)
|
|
417
|
-
*/
|
|
418
|
-
interface DxfSolid extends DxfEntityBase {
|
|
419
|
-
Type: "SOLID";
|
|
420
|
-
/** First corner X */
|
|
421
|
-
X1: number;
|
|
422
|
-
/** First corner Y */
|
|
423
|
-
Y1: number;
|
|
424
|
-
/** Second corner X */
|
|
425
|
-
X2: number;
|
|
426
|
-
/** Second corner Y */
|
|
427
|
-
Y2: number;
|
|
428
|
-
/** Third corner X */
|
|
429
|
-
X3: number;
|
|
430
|
-
/** Third corner Y */
|
|
431
|
-
Y3: number;
|
|
432
|
-
/** Fourth corner X (same as third for triangles) */
|
|
433
|
-
X4: number;
|
|
434
|
-
/** Fourth corner Y (same as third for triangles) */
|
|
435
|
-
Y4: number;
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* DXF INSERT entity (block reference)
|
|
439
|
-
*/
|
|
440
|
-
interface DxfInsert extends DxfEntityBase {
|
|
441
|
-
Type: "INSERT";
|
|
442
|
-
/** Block name */
|
|
443
|
-
BlockName: string;
|
|
444
|
-
/** Insertion X coordinate */
|
|
445
|
-
X: number;
|
|
446
|
-
/** Insertion Y coordinate */
|
|
447
|
-
Y: number;
|
|
448
|
-
/** Insertion Z coordinate */
|
|
449
|
-
Z?: number;
|
|
450
|
-
/** X scale factor */
|
|
451
|
-
ScaleX?: number;
|
|
452
|
-
/** Y scale factor */
|
|
453
|
-
ScaleY?: number;
|
|
454
|
-
/** Z scale factor */
|
|
455
|
-
ScaleZ?: number;
|
|
456
|
-
/** Rotation angle in degrees */
|
|
457
|
-
Rotation?: number;
|
|
458
|
-
}
|
|
459
|
-
/**
|
|
460
|
-
* DXF POLYLINE vertex
|
|
461
|
-
*/
|
|
462
|
-
interface DxfVertex {
|
|
463
|
-
/** X coordinate */
|
|
464
|
-
X: number;
|
|
465
|
-
/** Y coordinate */
|
|
466
|
-
Y: number;
|
|
467
|
-
/** Z coordinate */
|
|
468
|
-
Z?: number;
|
|
469
|
-
/** Bulge factor (for curved segments) */
|
|
470
|
-
Bulge?: number;
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* DXF LWPOLYLINE entity
|
|
474
|
-
*/
|
|
475
|
-
interface DxfLwPolyline extends DxfEntityBase {
|
|
476
|
-
Type: "LWPOLYLINE";
|
|
477
|
-
/** Whether the polyline is closed */
|
|
478
|
-
Closed: boolean;
|
|
479
|
-
/** Polyline vertices */
|
|
480
|
-
Vertices: DxfVertex[];
|
|
481
|
-
}
|
|
482
|
-
/**
|
|
483
|
-
* Union type of all DXF entity types
|
|
484
|
-
*/
|
|
485
|
-
type DxfEntity = DxfLine | DxfCircle | DxfArc | DxfEllipse | DxfPoint | DxfText | DxfMText | DxfSolid | DxfInsert | DxfLwPolyline | (DxfEntityBase & Record<string, unknown>);
|
|
486
|
-
/**
|
|
487
|
-
* DXF block definition
|
|
488
|
-
*/
|
|
489
|
-
interface DxfBlock {
|
|
490
|
-
/** Block name */
|
|
491
|
-
Name: string;
|
|
492
|
-
/** Base point X coordinate */
|
|
493
|
-
BaseX?: number;
|
|
494
|
-
/** Base point Y coordinate */
|
|
495
|
-
BaseY?: number;
|
|
496
|
-
/** Base point Z coordinate */
|
|
497
|
-
BaseZ?: number;
|
|
498
|
-
/** Entities within the block */
|
|
499
|
-
Entities: DxfEntity[];
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* Progress stages during parsing
|
|
503
|
-
*/
|
|
504
|
-
type ProgressStage = "loading" | "parsing_header" | "parsing_layers" | "parsing_entities" | "parsing_blocks" | "converting" | "complete";
|
|
505
|
-
/**
|
|
506
|
-
* Progress information during parsing
|
|
507
|
-
*/
|
|
508
|
-
interface ProgressInfo {
|
|
509
|
-
/** Current stage of parsing */
|
|
510
|
-
stage: ProgressStage;
|
|
511
|
-
/** Progress within the current stage (0-100) */
|
|
512
|
-
progress: number;
|
|
513
|
-
/** Overall progress (0-100) */
|
|
514
|
-
overallProgress: number;
|
|
515
|
-
/** Optional message about current operation */
|
|
516
|
-
message?: string;
|
|
517
|
-
/** Number of entities processed so far */
|
|
518
|
-
entitiesProcessed?: number;
|
|
519
|
-
/** Total number of entities (if known) */
|
|
520
|
-
totalEntities?: number;
|
|
521
|
-
/** Elapsed time in milliseconds */
|
|
522
|
-
elapsedMs: number;
|
|
523
|
-
/** Estimated remaining time in milliseconds (if available) */
|
|
524
|
-
estimatedRemainingMs?: number;
|
|
525
|
-
}
|
|
526
|
-
/**
|
|
527
|
-
* Callback function for reporting progress
|
|
528
|
-
*/
|
|
529
|
-
type ProgressCallback = (progress: ProgressInfo) => void;
|
|
530
|
-
/**
|
|
531
|
-
* Options for parsing JWW files
|
|
532
|
-
*/
|
|
533
|
-
interface ParseOptions {
|
|
534
|
-
/**
|
|
535
|
-
* Enable streaming mode for lower memory usage
|
|
536
|
-
* When enabled, entities are processed in chunks
|
|
537
|
-
* @default false
|
|
538
|
-
*/
|
|
539
|
-
streamingMode?: boolean;
|
|
540
|
-
/**
|
|
541
|
-
* Skip parsing of specific entity types
|
|
542
|
-
* Useful for improving performance when not all entities are needed
|
|
543
|
-
*/
|
|
544
|
-
skipEntityTypes?: Array<JwwEntity["Type"]>;
|
|
545
|
-
/**
|
|
546
|
-
* Only parse entities on specific layer groups
|
|
547
|
-
* Array of layer group indices (0-15)
|
|
548
|
-
*/
|
|
549
|
-
layerGroupFilter?: number[];
|
|
550
|
-
/**
|
|
551
|
-
* Only parse entities on specific layers
|
|
552
|
-
* Format: { layerGroup: layerIndex[] }
|
|
553
|
-
*/
|
|
554
|
-
layerFilter?: Record<number, number[]>;
|
|
555
|
-
/**
|
|
556
|
-
* Limit the number of entities to parse
|
|
557
|
-
* Useful for previewing large files
|
|
558
|
-
*/
|
|
559
|
-
maxEntities?: number;
|
|
560
|
-
/**
|
|
561
|
-
* Include block definitions in the output
|
|
562
|
-
* @default true
|
|
563
|
-
*/
|
|
564
|
-
includeBlocks?: boolean;
|
|
565
|
-
/**
|
|
566
|
-
* Expand block references inline (replaces INSERT with actual entities)
|
|
567
|
-
* Warning: May significantly increase output size
|
|
568
|
-
* @default false
|
|
569
|
-
*/
|
|
570
|
-
expandBlockReferences?: boolean;
|
|
571
|
-
/**
|
|
572
|
-
* Progress callback function
|
|
573
|
-
* Called periodically during parsing with progress information
|
|
574
|
-
*/
|
|
575
|
-
onProgress?: ProgressCallback;
|
|
576
|
-
/**
|
|
577
|
-
* Abort signal for cancelling the parse operation
|
|
578
|
-
*/
|
|
579
|
-
signal?: AbortSignal;
|
|
580
|
-
}
|
|
581
|
-
/**
|
|
582
|
-
* Options for DXF conversion
|
|
583
|
-
*/
|
|
584
|
-
interface ConvertOptions extends ParseOptions {
|
|
585
|
-
/**
|
|
586
|
-
* Convert temporary points (Code > 0)
|
|
587
|
-
* @default false
|
|
588
|
-
*/
|
|
589
|
-
includeTemporaryPoints?: boolean;
|
|
590
|
-
/**
|
|
591
|
-
* Color mapping override
|
|
592
|
-
* Maps JWW color codes to DXF ACI colors
|
|
593
|
-
*/
|
|
594
|
-
colorMapping?: Record<number, number>;
|
|
595
|
-
/**
|
|
596
|
-
* Layer naming pattern
|
|
597
|
-
* Use {group} and {layer} placeholders
|
|
598
|
-
* @default "{group}-{layer}"
|
|
599
|
-
*/
|
|
600
|
-
layerNamePattern?: string;
|
|
601
|
-
/**
|
|
602
|
-
* Precision for coordinate values (decimal places)
|
|
603
|
-
* @default 6
|
|
604
|
-
*/
|
|
605
|
-
precision?: number;
|
|
606
|
-
}
|
|
607
|
-
/**
|
|
608
|
-
* Severity level for validation issues
|
|
609
|
-
*/
|
|
610
|
-
type ValidationSeverity = "error" | "warning" | "info";
|
|
611
|
-
/**
|
|
612
|
-
* A single validation issue
|
|
613
|
-
*/
|
|
614
|
-
interface ValidationIssue {
|
|
615
|
-
/** Severity of the issue */
|
|
616
|
-
severity: ValidationSeverity;
|
|
617
|
-
/** Issue code */
|
|
618
|
-
code: string;
|
|
619
|
-
/** Human-readable message */
|
|
620
|
-
message: string;
|
|
621
|
-
/** Byte offset where the issue was found, if applicable */
|
|
622
|
-
offset?: number;
|
|
623
|
-
/** Additional details */
|
|
624
|
-
details?: Record<string, unknown>;
|
|
625
|
-
}
|
|
626
|
-
/**
|
|
627
|
-
* Result of file validation
|
|
628
|
-
*/
|
|
629
|
-
interface ValidationResult {
|
|
630
|
-
/** Whether the file is valid (no errors) */
|
|
631
|
-
valid: boolean;
|
|
632
|
-
/** File format version, if detected */
|
|
633
|
-
version?: number;
|
|
634
|
-
/** Estimated file size category */
|
|
635
|
-
sizeCategory: "small" | "medium" | "large" | "very_large";
|
|
636
|
-
/** Estimated entity count, if detectable */
|
|
637
|
-
estimatedEntityCount?: number;
|
|
638
|
-
/** List of validation issues found */
|
|
639
|
-
issues: ValidationIssue[];
|
|
640
|
-
/** Validation took this many milliseconds */
|
|
641
|
-
validationTimeMs: number;
|
|
642
|
-
}
|
|
643
|
-
/**
|
|
644
|
-
* Debug log levels
|
|
645
|
-
*/
|
|
646
|
-
type LogLevel = "debug" | "info" | "warn" | "error";
|
|
647
|
-
/**
|
|
648
|
-
* Debug log entry
|
|
649
|
-
*/
|
|
650
|
-
interface DebugLogEntry {
|
|
651
|
-
/** Timestamp of the log entry */
|
|
652
|
-
timestamp: Date;
|
|
653
|
-
/** Log level */
|
|
654
|
-
level: LogLevel;
|
|
655
|
-
/** Log message */
|
|
656
|
-
message: string;
|
|
657
|
-
/** Additional data */
|
|
658
|
-
data?: Record<string, unknown>;
|
|
659
|
-
}
|
|
660
|
-
/**
|
|
661
|
-
* Debug callback function
|
|
662
|
-
*/
|
|
663
|
-
type DebugCallback = (entry: DebugLogEntry) => void;
|
|
664
|
-
/**
|
|
665
|
-
* Debug options
|
|
666
|
-
*/
|
|
667
|
-
interface DebugOptions {
|
|
668
|
-
/**
|
|
669
|
-
* Enable debug mode
|
|
670
|
-
* @default false
|
|
671
|
-
*/
|
|
672
|
-
enabled?: boolean;
|
|
673
|
-
/**
|
|
674
|
-
* Minimum log level to capture
|
|
675
|
-
* @default "info"
|
|
676
|
-
*/
|
|
677
|
-
logLevel?: LogLevel;
|
|
678
|
-
/**
|
|
679
|
-
* Debug callback function
|
|
680
|
-
* If not provided, logs will be stored internally
|
|
681
|
-
*/
|
|
682
|
-
onDebug?: DebugCallback;
|
|
683
|
-
/**
|
|
684
|
-
* Log to console
|
|
685
|
-
* @default false
|
|
686
|
-
*/
|
|
687
|
-
logToConsole?: boolean;
|
|
688
|
-
/**
|
|
689
|
-
* Maximum number of log entries to store
|
|
690
|
-
* @default 1000
|
|
691
|
-
*/
|
|
692
|
-
maxLogEntries?: number;
|
|
693
|
-
/**
|
|
694
|
-
* Include timing information
|
|
695
|
-
* @default true
|
|
696
|
-
*/
|
|
697
|
-
includeTiming?: boolean;
|
|
698
|
-
/**
|
|
699
|
-
* Include memory usage information
|
|
700
|
-
* @default false
|
|
701
|
-
*/
|
|
702
|
-
includeMemoryUsage?: boolean;
|
|
703
|
-
}
|
|
704
|
-
/**
|
|
705
|
-
* Memory usage statistics
|
|
706
|
-
*/
|
|
707
|
-
interface MemoryStats {
|
|
708
|
-
/** WASM memory buffer size in bytes */
|
|
709
|
-
wasmMemoryBytes: number;
|
|
710
|
-
/** Estimated JS heap usage in bytes (if available) */
|
|
711
|
-
jsHeapBytes?: number;
|
|
712
|
-
/** Total estimated memory usage */
|
|
713
|
-
totalBytes: number;
|
|
714
|
-
/** Human-readable total */
|
|
715
|
-
totalFormatted: string;
|
|
716
|
-
}
|
|
717
|
-
/**
|
|
718
|
-
* Parser statistics
|
|
719
|
-
*/
|
|
720
|
-
interface ParserStats {
|
|
721
|
-
/** Number of parse operations performed */
|
|
722
|
-
parseCount: number;
|
|
723
|
-
/** Total bytes processed */
|
|
724
|
-
totalBytesProcessed: number;
|
|
725
|
-
/** Average parse time in milliseconds */
|
|
726
|
-
averageParseTimeMs: number;
|
|
727
|
-
/** Fastest parse time in milliseconds */
|
|
728
|
-
fastestParseTimeMs: number;
|
|
729
|
-
/** Slowest parse time in milliseconds */
|
|
730
|
-
slowestParseTimeMs: number;
|
|
731
|
-
/** Number of errors encountered */
|
|
732
|
-
errorCount: number;
|
|
733
|
-
/** Current memory usage */
|
|
734
|
-
memoryStats: MemoryStats;
|
|
735
|
-
}
|
|
736
|
-
/**
|
|
737
|
-
* Result type from WASM operations
|
|
738
|
-
* @internal
|
|
739
|
-
*/
|
|
740
|
-
interface WasmResult {
|
|
741
|
-
ok: boolean;
|
|
742
|
-
data?: string;
|
|
743
|
-
error?: string;
|
|
744
|
-
errorCode?: string;
|
|
745
|
-
offset?: number;
|
|
746
|
-
section?: string;
|
|
747
|
-
}
|
|
748
|
-
/**
|
|
749
|
-
* Validation result from WASM
|
|
750
|
-
* @internal
|
|
751
|
-
*/
|
|
752
|
-
interface WasmValidationResult {
|
|
753
|
-
ok: boolean;
|
|
754
|
-
valid: boolean;
|
|
755
|
-
version?: number;
|
|
756
|
-
estimatedEntities?: number;
|
|
757
|
-
issues?: Array<{
|
|
758
|
-
severity: string;
|
|
759
|
-
code: string;
|
|
760
|
-
message: string;
|
|
761
|
-
offset?: number;
|
|
762
|
-
}>;
|
|
763
|
-
error?: string;
|
|
764
|
-
}
|
|
765
|
-
declare global {
|
|
766
|
-
var Go: new () => GoInstance;
|
|
767
|
-
var jwwParse: ((data: Uint8Array) => WasmResult) | undefined;
|
|
768
|
-
var jwwToDxf: ((data: Uint8Array) => WasmResult) | undefined;
|
|
769
|
-
var jwwToDxfString: ((data: Uint8Array) => WasmResult) | undefined;
|
|
770
|
-
var jwwValidate: ((data: Uint8Array) => WasmValidationResult) | undefined;
|
|
771
|
-
var jwwGetVersion: (() => string) | undefined;
|
|
772
|
-
var jwwSetDebug: ((enabled: boolean) => void) | undefined;
|
|
773
|
-
}
|
|
774
|
-
interface GoInstance {
|
|
775
|
-
importObject: WebAssembly.Imports;
|
|
776
|
-
run(instance: WebAssembly.Instance): Promise<void>;
|
|
777
|
-
_inst?: WebAssembly.Instance;
|
|
778
|
-
}
|
|
779
|
-
/**
|
|
780
|
-
* JWW file parser with WebAssembly backend
|
|
781
|
-
*
|
|
782
|
-
* @example
|
|
783
|
-
* ```typescript
|
|
784
|
-
* // Using the factory function (recommended)
|
|
785
|
-
* const parser = await createParser();
|
|
786
|
-
* const doc = parser.parse(fileData);
|
|
787
|
-
*
|
|
788
|
-
* // Manual initialization
|
|
789
|
-
* const parser = new JwwParser();
|
|
790
|
-
* await parser.init();
|
|
791
|
-
* const doc = parser.parse(fileData);
|
|
792
|
-
* ```
|
|
793
|
-
*/
|
|
794
|
-
declare class JwwParser {
|
|
795
|
-
private initialized;
|
|
796
|
-
private initPromise;
|
|
797
|
-
private wasmPath;
|
|
798
|
-
private goInstance;
|
|
799
|
-
private wasmInstance;
|
|
800
|
-
private debugOptions;
|
|
801
|
-
private debugLogs;
|
|
802
|
-
private stats;
|
|
803
|
-
/**
|
|
804
|
-
* Create a new JWW parser instance
|
|
805
|
-
* @param wasmPath - Path to the jww-parser.wasm file
|
|
806
|
-
*/
|
|
807
|
-
constructor(wasmPath?: string);
|
|
808
|
-
private getDefaultWasmPath;
|
|
809
|
-
/**
|
|
810
|
-
* Enable or configure debug mode
|
|
811
|
-
* @param options - Debug configuration options
|
|
812
|
-
*/
|
|
813
|
-
setDebug(options: DebugOptions | boolean): void;
|
|
814
|
-
/**
|
|
815
|
-
* Get debug logs
|
|
816
|
-
* @param level - Optional minimum log level to filter
|
|
817
|
-
* @returns Array of debug log entries
|
|
818
|
-
*/
|
|
819
|
-
getDebugLogs(level?: LogLevel): DebugLogEntry[];
|
|
820
|
-
/**
|
|
821
|
-
* Clear debug logs
|
|
822
|
-
*/
|
|
823
|
-
clearDebugLogs(): void;
|
|
824
|
-
private log;
|
|
825
|
-
/**
|
|
826
|
-
* Check if the parser is initialized
|
|
827
|
-
*/
|
|
828
|
-
isInitialized(): boolean;
|
|
829
|
-
/**
|
|
830
|
-
* Initialize the WASM module
|
|
831
|
-
* Must be called before using parse methods
|
|
832
|
-
*/
|
|
833
|
-
init(): Promise<void>;
|
|
834
|
-
private loadWasm;
|
|
835
|
-
private loadWasmExec;
|
|
836
|
-
private waitForWasmFunctions;
|
|
837
|
-
private ensureInitialized;
|
|
838
|
-
/**
|
|
839
|
-
* Validate a JWW file without fully parsing it
|
|
840
|
-
* Useful for checking file validity before processing
|
|
841
|
-
*
|
|
842
|
-
* @param data - JWW file content as Uint8Array
|
|
843
|
-
* @returns Validation result with any issues found
|
|
844
|
-
*/
|
|
845
|
-
validate(data: Uint8Array): ValidationResult;
|
|
846
|
-
/**
|
|
847
|
-
* Validate and throw if invalid
|
|
848
|
-
* Convenience method that throws a ValidationError if the file is invalid
|
|
849
|
-
*
|
|
850
|
-
* @param data - JWW file content as Uint8Array
|
|
851
|
-
* @throws {ValidationError} If the file is invalid
|
|
852
|
-
*/
|
|
853
|
-
validateOrThrow(data: Uint8Array): void;
|
|
854
|
-
/**
|
|
855
|
-
* Parse a JWW file and return the document structure
|
|
856
|
-
*
|
|
857
|
-
* @param data - JWW file content as Uint8Array
|
|
858
|
-
* @param options - Optional parsing options
|
|
859
|
-
* @returns Parsed JWW document
|
|
860
|
-
* @throws {NotInitializedError} If parser is not initialized
|
|
861
|
-
* @throws {ParseError} If parsing fails
|
|
862
|
-
*/
|
|
863
|
-
parse(data: Uint8Array, options?: ParseOptions): JwwDocument;
|
|
864
|
-
private applyParseOptions;
|
|
865
|
-
/**
|
|
866
|
-
* Parse a JWW file and convert to DXF document structure
|
|
867
|
-
*
|
|
868
|
-
* @param data - JWW file content as Uint8Array
|
|
869
|
-
* @param options - Optional conversion options
|
|
870
|
-
* @returns DXF document object
|
|
871
|
-
*/
|
|
872
|
-
toDxf(data: Uint8Array, options?: ConvertOptions): DxfDocument;
|
|
873
|
-
/**
|
|
874
|
-
* Parse a JWW file and convert to DXF file content string
|
|
875
|
-
*
|
|
876
|
-
* @param data - JWW file content as Uint8Array
|
|
877
|
-
* @param options - Optional conversion options
|
|
878
|
-
* @returns DXF file content as string (ready to save as .dxf file)
|
|
879
|
-
*/
|
|
880
|
-
toDxfString(data: Uint8Array, options?: ConvertOptions): string;
|
|
881
|
-
/**
|
|
882
|
-
* Get current memory usage statistics
|
|
883
|
-
*/
|
|
884
|
-
getMemoryStats(): MemoryStats;
|
|
885
|
-
/**
|
|
886
|
-
* Get parser statistics
|
|
887
|
-
*/
|
|
888
|
-
getStats(): ParserStats;
|
|
889
|
-
/**
|
|
890
|
-
* Reset parser statistics
|
|
891
|
-
*/
|
|
892
|
-
resetStats(): void;
|
|
893
|
-
/**
|
|
894
|
-
* Clean up resources and release memory
|
|
895
|
-
* Call this when you're done using the parser to free WASM memory
|
|
896
|
-
*/
|
|
897
|
-
dispose(): void;
|
|
898
|
-
/**
|
|
899
|
-
* Get the WASM module version
|
|
900
|
-
*/
|
|
901
|
-
getVersion(): string;
|
|
902
|
-
}
|
|
903
|
-
/**
|
|
904
|
-
* Create and initialize a JWW parser instance
|
|
905
|
-
*
|
|
906
|
-
* @param wasmPath - Optional path to the jww-parser.wasm file
|
|
907
|
-
* @param options - Optional debug options
|
|
908
|
-
* @returns Initialized JwwParser instance
|
|
909
|
-
*
|
|
910
|
-
* @example
|
|
911
|
-
* ```typescript
|
|
912
|
-
* const parser = await createParser();
|
|
913
|
-
* const doc = parser.parse(fileData);
|
|
914
|
-
* ```
|
|
915
|
-
*/
|
|
916
|
-
declare function createParser(wasmPath?: string, options?: {
|
|
917
|
-
debug?: DebugOptions;
|
|
918
|
-
}): Promise<JwwParser>;
|
|
919
|
-
/**
|
|
920
|
-
* Quick validate a JWW file without initializing a full parser
|
|
921
|
-
* Performs basic validation only (signature, version check)
|
|
922
|
-
*
|
|
923
|
-
* @param data - JWW file content as Uint8Array
|
|
924
|
-
* @returns Validation result
|
|
925
|
-
*/
|
|
926
|
-
declare function quickValidate(data: Uint8Array): ValidationResult;
|
|
927
|
-
/**
|
|
928
|
-
* Check if a Uint8Array looks like a JWW file
|
|
929
|
-
*
|
|
930
|
-
* @param data - File content as Uint8Array
|
|
931
|
-
* @returns true if the file appears to be a JWW file
|
|
932
|
-
*/
|
|
933
|
-
declare function isJwwFile(data: Uint8Array): boolean;
|
|
934
|
-
declare const _default: {
|
|
935
|
-
JwwParser: typeof JwwParser;
|
|
936
|
-
createParser: typeof createParser;
|
|
937
|
-
quickValidate: typeof quickValidate;
|
|
938
|
-
isJwwFile: typeof isJwwFile;
|
|
939
|
-
JwwParserError: typeof JwwParserError;
|
|
940
|
-
NotInitializedError: typeof NotInitializedError;
|
|
941
|
-
WasmLoadError: typeof WasmLoadError;
|
|
942
|
-
ValidationError: typeof ValidationError;
|
|
943
|
-
ParseError: typeof ParseError;
|
|
944
|
-
JwwErrorCode: typeof JwwErrorCode;
|
|
945
|
-
};
|
|
1
|
+
import type * as MoonBit from "./moonbit.d.ts";
|
|
946
2
|
|
|
947
|
-
export
|
|
3
|
+
export function to_json_string(jww_doc: any): MoonBit.String;
|
|
4
|
+
|
|
5
|
+
export function jww_to_dxf(data: MoonBit.Bytes): MoonBit.String;
|
|
6
|
+
|
|
7
|
+
export function to_dxf_string(jww_doc: any): MoonBit.String;
|
|
8
|
+
|
|
9
|
+
export function to_dxf_document(jww_doc: any): any;
|
|
10
|
+
|
|
11
|
+
export function parse(data: MoonBit.Bytes): any;
|