@mlightcad/libredwg-web 0.7.3 → 0.7.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/dist/libredwg-web.js +56 -4000
- package/dist/libredwg-web.umd.cjs +56 -4003
- package/lib/converter/converter.d.ts +1 -0
- package/lib/converter/converter.js +20 -6
- package/lib/converter/entityConverter.d.ts +1 -1
- package/lib/libredwg.js +20 -3
- package/lib/types/enums.d.ts +17 -0
- package/lib/types/enums.js +18 -0
- package/package.json +11 -4
- package/wasm/libredwg-web.d.ts +21 -0
- package/wasm/libredwg-web.js +1 -1
- package/wasm/libredwg-web.wasm +0 -0
- package/lib/converter/stringConverter.d.ts +0 -3
- package/lib/converter/stringConverter.js +0 -7
- package/lib/database/entities/unknown.d.ts +0 -7
- package/lib/database/entities/unknown.js +0 -2
- package/lib/database/objects/unknown.d.ts +0 -7
- package/lib/database/objects/unknown.js +0 -2
- package/lib/debug.d.ts +0 -13
- package/lib/debug.js +0 -48
- package/lib/libredwg-web.d.ts +0 -3
- package/lib/libredwg-web.js +0 -2313
- package/lib/utils/common.d.ts +0 -4
- package/lib/utils/common.js +0 -12
- package/lib/utils/index.d.ts +0 -2
- package/lib/utils/index.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HEADER_VARIABLES } from '../database';
|
|
2
|
-
import { Dwg_Object_Type } from '../types';
|
|
2
|
+
import { Dwg_Object_Supertype, Dwg_Object_Type } from '../types';
|
|
3
3
|
import { LibreEntityConverter } from './entityConverter';
|
|
4
4
|
import { idToString, isModelSpace, isPaperSpace } from './utils';
|
|
5
5
|
/**
|
|
@@ -56,7 +56,7 @@ export class LibreDwgConverter {
|
|
|
56
56
|
for (let i = 0; i < num_objects; i++) {
|
|
57
57
|
const obj = libredwg.dwg_get_object(data, i);
|
|
58
58
|
if (obj) {
|
|
59
|
-
const tio =
|
|
59
|
+
const tio = this.safeObjectTio(obj);
|
|
60
60
|
if (tio) {
|
|
61
61
|
const fixedtype = libredwg.dwg_object_get_fixedtype(obj);
|
|
62
62
|
switch (fixedtype) {
|
|
@@ -83,7 +83,7 @@ export class LibreDwgConverter {
|
|
|
83
83
|
for (let i = 0; i < num_objects; i++) {
|
|
84
84
|
const obj = libredwg.dwg_get_object(data, i);
|
|
85
85
|
if (obj) {
|
|
86
|
-
const tio =
|
|
86
|
+
const tio = this.safeObjectTio(obj);
|
|
87
87
|
if (tio) {
|
|
88
88
|
const fixedtype = libredwg.dwg_object_get_fixedtype(obj);
|
|
89
89
|
switch (fixedtype) {
|
|
@@ -156,6 +156,20 @@ export class LibreDwgConverter {
|
|
|
156
156
|
unknownEntityCount: this.entityConverter.unknownEntityCount
|
|
157
157
|
};
|
|
158
158
|
}
|
|
159
|
+
safeObjectTio(obj) {
|
|
160
|
+
const libredwg = this.libredwg;
|
|
161
|
+
try {
|
|
162
|
+
if (libredwg.dwg_object_get_supertype(obj) !=
|
|
163
|
+
Dwg_Object_Supertype.DWG_SUPERTYPE_OBJECT) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
const tio = libredwg.dwg_object_to_object_tio(obj);
|
|
167
|
+
return tio ? tio : null;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
159
173
|
convertHeader(data, header) {
|
|
160
174
|
const libredwg = this.libredwg;
|
|
161
175
|
HEADER_VARIABLES.forEach(name => {
|
|
@@ -172,10 +186,10 @@ export class LibreDwgConverter {
|
|
|
172
186
|
name == 'DIMSTYLE' ||
|
|
173
187
|
name == 'DIMTXSTY' ||
|
|
174
188
|
name == 'TEXTSTYLE') {
|
|
175
|
-
value =
|
|
189
|
+
value = value ? libredwg.dwg_ref_get_object_name(value) : '';
|
|
176
190
|
}
|
|
177
191
|
else if (name == 'DRAGVS') {
|
|
178
|
-
value =
|
|
192
|
+
value = value ? libredwg.dwg_ref_get_absref(value) : 2;
|
|
179
193
|
}
|
|
180
194
|
// @ts-expect-error header variable name
|
|
181
195
|
header[name] = value;
|
|
@@ -892,7 +906,7 @@ export class LibreDwgConverter {
|
|
|
892
906
|
const viewportId = idToString(libredwg.dwg_ref_get_absref(active_viewport_ref));
|
|
893
907
|
const named_ucs_ref = libredwg.dwg_dynapi_entity_value(item, 'named_ucs')
|
|
894
908
|
.data;
|
|
895
|
-
const namedUcsId =
|
|
909
|
+
const namedUcsId = named_ucs_ref
|
|
896
910
|
? idToString(libredwg.dwg_ref_get_absref(named_ucs_ref))
|
|
897
911
|
: undefined;
|
|
898
912
|
// BITCODE_H base_ucs;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DwgDatabase, DwgEntity
|
|
1
|
+
import { DwgClassLookup, DwgDatabase, DwgEntity } from '../database';
|
|
2
2
|
import { LibreDwgEx } from '../libredwg';
|
|
3
3
|
import { Dwg_Object_Ptr } from '../types';
|
|
4
4
|
export declare class LibreEntityConverter {
|
package/lib/libredwg.js
CHANGED
|
@@ -2,7 +2,7 @@ import createModule from '../wasm/libredwg-web.js';
|
|
|
2
2
|
import { LibreDwgConverter } from './converter';
|
|
3
3
|
import { dwgCodePageToEncoding, dwgVersions } from './database';
|
|
4
4
|
import { SvgConverter } from './svg';
|
|
5
|
-
import { Dwg_File_Type, Dwg_Object_Type } from './types';
|
|
5
|
+
import { Dwg_Error, Dwg_File_Type, Dwg_Object_Type } from './types';
|
|
6
6
|
export { createModule };
|
|
7
7
|
export var DwgThumbnailImageType;
|
|
8
8
|
(function (DwgThumbnailImageType) {
|
|
@@ -32,8 +32,12 @@ export class LibreDwg {
|
|
|
32
32
|
try {
|
|
33
33
|
this.wasmInstance.FS.writeFile(fileName, new Uint8Array(fileContent));
|
|
34
34
|
const result = this.wasmInstance.dwg_read_file(fileName);
|
|
35
|
+
if (result.error & Dwg_Error.OUTOFMEM) {
|
|
36
|
+
this.wasmInstance.dwg_abandon(result.data);
|
|
37
|
+
throw new Error('Failed to decode DWG: out of WASM memory. Rebuild with pnpm build:wasm (INITIAL_MEMORY=1GB) or use a smaller file.');
|
|
38
|
+
}
|
|
35
39
|
if (result.error != 0) {
|
|
36
|
-
console.
|
|
40
|
+
console.warn('Open dwg file with error code:', result.error);
|
|
37
41
|
}
|
|
38
42
|
return result.data;
|
|
39
43
|
}
|
|
@@ -168,7 +172,20 @@ export class LibreDwg {
|
|
|
168
172
|
* @param data Pointer to Dwg_Data instance.
|
|
169
173
|
*/
|
|
170
174
|
dwg_free(data) {
|
|
171
|
-
|
|
175
|
+
if (!data) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
this.wasmInstance.dwg_free(data);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
try {
|
|
183
|
+
this.wasmInstance.dwg_abandon(data);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// best effort; wasm heap may already be corrupt
|
|
187
|
+
}
|
|
188
|
+
}
|
|
172
189
|
}
|
|
173
190
|
/**
|
|
174
191
|
* Frees the object (all three structs and its fields)
|
package/lib/types/enums.d.ts
CHANGED
|
@@ -2,6 +2,23 @@ export declare enum Dwg_Object_Supertype {
|
|
|
2
2
|
DWG_SUPERTYPE_ENTITY = 0,
|
|
3
3
|
DWG_SUPERTYPE_OBJECT = 1
|
|
4
4
|
}
|
|
5
|
+
/** Bit flags returned by dwg_read_file (see include/dwg.h DWG_ERROR). */
|
|
6
|
+
export declare enum Dwg_Error {
|
|
7
|
+
WRONGCRC = 1,
|
|
8
|
+
NOTYETSUPPORTED = 2,
|
|
9
|
+
UNHANDLEDCLASS = 4,
|
|
10
|
+
INVALIDTYPE = 8,
|
|
11
|
+
INVALIDHANDLE = 16,
|
|
12
|
+
INVALIDEED = 32,
|
|
13
|
+
VALUEOUTOFBOUNDS = 64,
|
|
14
|
+
CLASSESNOTFOUND = 128,
|
|
15
|
+
SECTIONNOTFOUND = 256,
|
|
16
|
+
PAGENOTFOUND = 512,
|
|
17
|
+
INTERNALERROR = 1024,
|
|
18
|
+
INVALIDDWG = 2048,
|
|
19
|
+
IOERROR = 4096,
|
|
20
|
+
OUTOFMEM = 8192
|
|
21
|
+
}
|
|
5
22
|
export declare enum Dwg_Object_Type {
|
|
6
23
|
DWG_TYPE_UNUSED = 0,
|
|
7
24
|
DWG_TYPE_TEXT = 1,
|
package/lib/types/enums.js
CHANGED
|
@@ -3,6 +3,24 @@ export var Dwg_Object_Supertype;
|
|
|
3
3
|
Dwg_Object_Supertype[Dwg_Object_Supertype["DWG_SUPERTYPE_ENTITY"] = 0] = "DWG_SUPERTYPE_ENTITY";
|
|
4
4
|
Dwg_Object_Supertype[Dwg_Object_Supertype["DWG_SUPERTYPE_OBJECT"] = 1] = "DWG_SUPERTYPE_OBJECT";
|
|
5
5
|
})(Dwg_Object_Supertype || (Dwg_Object_Supertype = {}));
|
|
6
|
+
/** Bit flags returned by dwg_read_file (see include/dwg.h DWG_ERROR). */
|
|
7
|
+
export var Dwg_Error;
|
|
8
|
+
(function (Dwg_Error) {
|
|
9
|
+
Dwg_Error[Dwg_Error["WRONGCRC"] = 1] = "WRONGCRC";
|
|
10
|
+
Dwg_Error[Dwg_Error["NOTYETSUPPORTED"] = 2] = "NOTYETSUPPORTED";
|
|
11
|
+
Dwg_Error[Dwg_Error["UNHANDLEDCLASS"] = 4] = "UNHANDLEDCLASS";
|
|
12
|
+
Dwg_Error[Dwg_Error["INVALIDTYPE"] = 8] = "INVALIDTYPE";
|
|
13
|
+
Dwg_Error[Dwg_Error["INVALIDHANDLE"] = 16] = "INVALIDHANDLE";
|
|
14
|
+
Dwg_Error[Dwg_Error["INVALIDEED"] = 32] = "INVALIDEED";
|
|
15
|
+
Dwg_Error[Dwg_Error["VALUEOUTOFBOUNDS"] = 64] = "VALUEOUTOFBOUNDS";
|
|
16
|
+
Dwg_Error[Dwg_Error["CLASSESNOTFOUND"] = 128] = "CLASSESNOTFOUND";
|
|
17
|
+
Dwg_Error[Dwg_Error["SECTIONNOTFOUND"] = 256] = "SECTIONNOTFOUND";
|
|
18
|
+
Dwg_Error[Dwg_Error["PAGENOTFOUND"] = 512] = "PAGENOTFOUND";
|
|
19
|
+
Dwg_Error[Dwg_Error["INTERNALERROR"] = 1024] = "INTERNALERROR";
|
|
20
|
+
Dwg_Error[Dwg_Error["INVALIDDWG"] = 2048] = "INVALIDDWG";
|
|
21
|
+
Dwg_Error[Dwg_Error["IOERROR"] = 4096] = "IOERROR";
|
|
22
|
+
Dwg_Error[Dwg_Error["OUTOFMEM"] = 8192] = "OUTOFMEM";
|
|
23
|
+
})(Dwg_Error || (Dwg_Error = {}));
|
|
6
24
|
export var Dwg_Object_Type;
|
|
7
25
|
(function (Dwg_Object_Type) {
|
|
8
26
|
Dwg_Object_Type[Dwg_Object_Type["DWG_TYPE_UNUSED"] = 0] = "DWG_TYPE_UNUSED";
|
package/package.json
CHANGED
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
"description": "A DWG/DXF JavaScript parser based on libredwg",
|
|
4
4
|
"license": "GPL-3.0",
|
|
5
5
|
"private": false,
|
|
6
|
-
"version": "0.7.
|
|
6
|
+
"version": "0.7.4",
|
|
7
7
|
"author": "MLight Lee <mlight.lee@outlook.com>",
|
|
8
8
|
"type": "module",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=20"
|
|
11
|
+
},
|
|
9
12
|
"repository": {
|
|
10
13
|
"type": "git",
|
|
11
14
|
"url": "https://github.com/mlightcad/libredwg-web"
|
|
@@ -41,6 +44,7 @@
|
|
|
41
44
|
"require": "./dist/libredwg-web.umd.cjs"
|
|
42
45
|
},
|
|
43
46
|
"devDependencies": {
|
|
47
|
+
"@eslint/js": "^9.9.1",
|
|
44
48
|
"@typescript-eslint/parser": "^8.4.0",
|
|
45
49
|
"eslint": "^9.9.1",
|
|
46
50
|
"eslint-config-prettier": "^9.1.0",
|
|
@@ -70,15 +74,18 @@
|
|
|
70
74
|
"demo": "live-server examples --entry-file=index.html",
|
|
71
75
|
"doc": "typedoc",
|
|
72
76
|
"build": "tsc && vite build && cp -rf wasm examples/ && cp -rf dist examples/",
|
|
73
|
-
"build:prepare": "mkdir -p ../../build-wasm && cd ../../build-wasm && emconfigure ../configure CFLAGS=\"-O2 -sUSE_ZLIB=1\" CC=emcc --enable-release --disable-docs --disable-write --disable-python --disable-bindings --disable-shared --disable-json --enable-partial --enable-experimental",
|
|
77
|
+
"build:prepare": "mkdir -p ../../build-wasm && cd ../../build-wasm && emconfigure ../configure CFLAGS=\"-O2 -sUSE_ZLIB=1 -DNDEBUG\" CC=emcc --enable-release --disable-docs --disable-write --disable-python --disable-bindings --disable-shared --disable-json --enable-partial --enable-experimental",
|
|
74
78
|
"build:obj": "cd ../../build-wasm && emmake make",
|
|
75
|
-
"build:wasm": "cd ../../build-wasm && emcc ../bindings/javascript/embind/*.cpp src/*.o -O2 -lembind -std=c++17 -Isrc -I../src -I../include -o libredwg-web.js -s ALLOW_MEMORY_GROWTH=1 -s EXPORT_ES6=1 -s MODULARIZE=1 -s EXPORT_NAME=\"createModule\" -sEXPORTED_RUNTIME_METHODS=FS,ENV,ccall,cwrap,UTF8ToString,stringToNewUTF8,setValue --emit-tsd libredwg-web.d.ts",
|
|
79
|
+
"build:wasm": "cd ../../build-wasm && emcc ../bindings/javascript/embind/*.cpp src/*.o -O2 -lembind -std=c++17 -Isrc -I../src -I../include -o libredwg-web.js -s ALLOW_MEMORY_GROWTH=1 -s INITIAL_MEMORY=1GB -s MAXIMUM_MEMORY=4GB -s MALLOC=mimalloc -s EXPORT_ES6=1 -s MODULARIZE=1 -s EXPORT_NAME=\"createModule\" -sEXPORTED_RUNTIME_METHODS=FS,ENV,ccall,cwrap,UTF8ToString,stringToNewUTF8,setValue --emit-tsd libredwg-web.d.ts",
|
|
76
80
|
"clean": "rm -rf ../../build-wasm ./docs ./dist ./lib",
|
|
77
81
|
"copy": "cp -f ../../build-wasm/libredwg-web.d.ts ../../build-wasm/libredwg-web.js ../../build-wasm/libredwg-web.wasm wasm/ && cp -f ../../build-wasm/libredwg-web.js src/",
|
|
78
82
|
"format": "prettier --config ./.prettierrc.js --write src/**/*.{ts,js}",
|
|
79
83
|
"install:emsdk": "cd $EMSDK && ./emsdk install latest && ./emsdk activate latest",
|
|
80
84
|
"link": "node script/create-symlink.js ./wasm/libredwg-web.js ./src/libredwg-web.js",
|
|
81
85
|
"lint": "eslint src/",
|
|
82
|
-
"lint:fix": "eslint --fix --quiet src/"
|
|
86
|
+
"lint:fix": "eslint --fix --quiet src/",
|
|
87
|
+
"test": "node --test test/node-api.test.mjs",
|
|
88
|
+
"test:node": "pnpm build && pnpm test",
|
|
89
|
+
"publish:npm": "pnpm publish --access public --no-git-checks"
|
|
83
90
|
}
|
|
84
91
|
}
|
package/wasm/libredwg-web.d.ts
CHANGED
|
@@ -224,6 +224,26 @@ declare class FSNode {
|
|
|
224
224
|
get isDevice(): any;
|
|
225
225
|
}
|
|
226
226
|
interface WasmModule {
|
|
227
|
+
__Znwm(_0: number): number;
|
|
228
|
+
__ZdlPvm(_0: number, _1: number): void;
|
|
229
|
+
_strndup(_0: number, _1: number): number;
|
|
230
|
+
__ZdaPv(_0: number): void;
|
|
231
|
+
__ZdaPvm(_0: number, _1: number): void;
|
|
232
|
+
__ZdlPv(_0: number): void;
|
|
233
|
+
_emscripten_builtin_malloc(_0: number): number;
|
|
234
|
+
__Znam(_0: number): number;
|
|
235
|
+
__ZnamSt11align_val_t(_0: number, _1: number): number;
|
|
236
|
+
__ZnwmSt11align_val_t(_0: number, _1: number): number;
|
|
237
|
+
___libc_calloc(_0: number, _1: number): number;
|
|
238
|
+
___libc_free(_0: number): void;
|
|
239
|
+
___libc_malloc(_0: number): number;
|
|
240
|
+
___libc_realloc(_0: number, _1: number): number;
|
|
241
|
+
_emscripten_builtin_calloc(_0: number, _1: number): number;
|
|
242
|
+
_emscripten_builtin_free(_0: number): void;
|
|
243
|
+
_emscripten_builtin_realloc(_0: number, _1: number): number;
|
|
244
|
+
_malloc_size(_0: number): number;
|
|
245
|
+
_malloc_usable_size(_0: number): number;
|
|
246
|
+
_reallocf(_0: number, _1: number): number;
|
|
227
247
|
}
|
|
228
248
|
|
|
229
249
|
type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string;
|
|
@@ -389,6 +409,7 @@ interface EmbindModule {
|
|
|
389
409
|
dwg_get_next_object(_0: number, _1: Dwg_Object_Type, _2: number): number;
|
|
390
410
|
dwg_resolve_jump(_0: number): number;
|
|
391
411
|
dwg_free(_0: number): void;
|
|
412
|
+
dwg_abandon(_0: number): void;
|
|
392
413
|
dwg_free_object(_0: number): void;
|
|
393
414
|
dwg_new_ref(_0: number): number;
|
|
394
415
|
dwg_dup_handleref(_0: number, _1: number): number;
|