@kodexa-ai/document-wasm-ts 8.0.0-20484695702
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/README.md +563 -0
- package/dist/ContentNode.d.ts +207 -0
- package/dist/ContentNode.d.ts.map +1 -0
- package/dist/ContentNode.js +633 -0
- package/dist/ContentNode.js.map +1 -0
- package/dist/ExtractionEngine.d.ts +65 -0
- package/dist/ExtractionEngine.d.ts.map +1 -0
- package/dist/ExtractionEngine.js +115 -0
- package/dist/ExtractionEngine.js.map +1 -0
- package/dist/KddbDocument.d.ts +193 -0
- package/dist/KddbDocument.d.ts.map +1 -0
- package/dist/KddbDocument.js +575 -0
- package/dist/KddbDocument.js.map +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +96 -0
- package/dist/index.js.map +1 -0
- package/dist/sqljs-bridge.bundle.js +330 -0
- package/dist/wasm/browser-bridge.d.ts +44 -0
- package/dist/wasm/browser-bridge.d.ts.map +1 -0
- package/dist/wasm/browser-bridge.js +104 -0
- package/dist/wasm/browser-bridge.js.map +1 -0
- package/dist/wasm/loader.d.ts +57 -0
- package/dist/wasm/loader.d.ts.map +1 -0
- package/dist/wasm/loader.js +193 -0
- package/dist/wasm/loader.js.map +1 -0
- package/dist/wasm/sqljs-bridge.d.ts +40 -0
- package/dist/wasm/sqljs-bridge.d.ts.map +1 -0
- package/dist/wasm/sqljs-bridge.js +98 -0
- package/dist/wasm/sqljs-bridge.js.map +1 -0
- package/dist/wasm/sqljs-core.d.ts +92 -0
- package/dist/wasm/sqljs-core.d.ts.map +1 -0
- package/dist/wasm/sqljs-core.js +372 -0
- package/dist/wasm/sqljs-core.js.map +1 -0
- package/dist/wasm/types.d.ts +179 -0
- package/dist/wasm/types.d.ts.map +1 -0
- package/dist/wasm/types.js +9 -0
- package/dist/wasm/types.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContentNode - TypeScript wrapper for Go WASM ContentNode functionality
|
|
3
|
+
*
|
|
4
|
+
* NOTE: Go WASM with syscall/js passes strings directly between JS and Go.
|
|
5
|
+
* No pointer-based memory management is needed.
|
|
6
|
+
*/
|
|
7
|
+
import { getWasmInstance, getWasmHelper } from './wasm/loader';
|
|
8
|
+
export class ContentNode {
|
|
9
|
+
constructor(nodeRef) {
|
|
10
|
+
this.disposed = false;
|
|
11
|
+
this.nodeRef = nodeRef;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the node reference (for internal use)
|
|
15
|
+
*/
|
|
16
|
+
getNodeRef() {
|
|
17
|
+
this.checkDisposed();
|
|
18
|
+
return this.nodeRef;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the node type (requires extended WASM exports)
|
|
22
|
+
*/
|
|
23
|
+
async getNodeType() {
|
|
24
|
+
this.checkDisposed();
|
|
25
|
+
await getWasmInstance();
|
|
26
|
+
const g = globalThis;
|
|
27
|
+
if (typeof g.nodeGetNodeType !== 'function') {
|
|
28
|
+
throw new Error('nodeGetNodeType not available in WASM module');
|
|
29
|
+
}
|
|
30
|
+
return g.nodeGetNodeType(this.nodeRef);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Set the node type (requires extended WASM exports)
|
|
34
|
+
*/
|
|
35
|
+
async setNodeType(nodeType) {
|
|
36
|
+
this.checkDisposed();
|
|
37
|
+
await getWasmInstance();
|
|
38
|
+
const g = globalThis;
|
|
39
|
+
if (typeof g.nodeSetNodeType !== 'function') {
|
|
40
|
+
throw new Error('nodeSetNodeType not available in WASM module');
|
|
41
|
+
}
|
|
42
|
+
g.nodeSetNodeType(this.nodeRef, nodeType);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the content of this node
|
|
46
|
+
*/
|
|
47
|
+
async getContent() {
|
|
48
|
+
this.checkDisposed();
|
|
49
|
+
await getWasmInstance();
|
|
50
|
+
return nodeGetContent(this.nodeRef);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Set the content of this node
|
|
54
|
+
*/
|
|
55
|
+
async setContent(content) {
|
|
56
|
+
this.checkDisposed();
|
|
57
|
+
await getWasmInstance();
|
|
58
|
+
nodeSetContent(this.nodeRef, content);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get the index of this node (requires extended WASM exports)
|
|
62
|
+
*/
|
|
63
|
+
async getIndex() {
|
|
64
|
+
this.checkDisposed();
|
|
65
|
+
await getWasmInstance();
|
|
66
|
+
const g = globalThis;
|
|
67
|
+
if (typeof g.nodeGetIndex !== 'function') {
|
|
68
|
+
throw new Error('nodeGetIndex not available in WASM module');
|
|
69
|
+
}
|
|
70
|
+
return g.nodeGetIndex(this.nodeRef);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Set the index of this node (requires extended WASM exports)
|
|
74
|
+
*/
|
|
75
|
+
async setIndex(index) {
|
|
76
|
+
this.checkDisposed();
|
|
77
|
+
await getWasmInstance();
|
|
78
|
+
const g = globalThis;
|
|
79
|
+
if (typeof g.nodeSetIndex !== 'function') {
|
|
80
|
+
throw new Error('nodeSetIndex not available in WASM module');
|
|
81
|
+
}
|
|
82
|
+
g.nodeSetIndex(this.nodeRef, index);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get the parent node (requires extended WASM exports)
|
|
86
|
+
*/
|
|
87
|
+
async getParent() {
|
|
88
|
+
this.checkDisposed();
|
|
89
|
+
await getWasmInstance();
|
|
90
|
+
const g = globalThis;
|
|
91
|
+
if (typeof g.nodeGetParent !== 'function') {
|
|
92
|
+
throw new Error('nodeGetParent not available in WASM module');
|
|
93
|
+
}
|
|
94
|
+
const parentRef = g.nodeGetParent(this.nodeRef);
|
|
95
|
+
if (parentRef === 0)
|
|
96
|
+
return null;
|
|
97
|
+
return new ContentNode(parentRef);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get child nodes
|
|
101
|
+
*/
|
|
102
|
+
async getChildren() {
|
|
103
|
+
this.checkDisposed();
|
|
104
|
+
await getWasmInstance();
|
|
105
|
+
const childrenJson = nodeGetChildren(this.nodeRef);
|
|
106
|
+
const helper = await getWasmHelper();
|
|
107
|
+
const childrenData = helper.parseJsonResult(childrenJson);
|
|
108
|
+
if (!childrenData || !Array.isArray(childrenData)) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
return childrenData.map((childRef) => new ContentNode(childRef));
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get number of children (requires extended WASM exports)
|
|
115
|
+
*/
|
|
116
|
+
async getChildCount() {
|
|
117
|
+
this.checkDisposed();
|
|
118
|
+
await getWasmInstance();
|
|
119
|
+
const g = globalThis;
|
|
120
|
+
if (typeof g.nodeGetChildCount !== 'function') {
|
|
121
|
+
throw new Error('nodeGetChildCount not available in WASM module');
|
|
122
|
+
}
|
|
123
|
+
return g.nodeGetChildCount(this.nodeRef);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get child by index (requires extended WASM exports)
|
|
127
|
+
*/
|
|
128
|
+
async getChild(index) {
|
|
129
|
+
this.checkDisposed();
|
|
130
|
+
await getWasmInstance();
|
|
131
|
+
const g = globalThis;
|
|
132
|
+
if (typeof g.nodeGetChild !== 'function') {
|
|
133
|
+
throw new Error('nodeGetChild not available in WASM module');
|
|
134
|
+
}
|
|
135
|
+
const childRef = g.nodeGetChild(this.nodeRef, index);
|
|
136
|
+
if (childRef === 0)
|
|
137
|
+
return null;
|
|
138
|
+
return new ContentNode(childRef);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Add a child node (requires extended WASM exports)
|
|
142
|
+
*/
|
|
143
|
+
async addChild(child) {
|
|
144
|
+
this.checkDisposed();
|
|
145
|
+
await getWasmInstance();
|
|
146
|
+
const g = globalThis;
|
|
147
|
+
if (typeof g.nodeAddChild !== 'function') {
|
|
148
|
+
throw new Error('nodeAddChild not available in WASM module');
|
|
149
|
+
}
|
|
150
|
+
g.nodeAddChild(this.nodeRef, child.getNodeRef());
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Select nodes using a selector (requires extended WASM exports)
|
|
154
|
+
*/
|
|
155
|
+
async select(selector) {
|
|
156
|
+
this.checkDisposed();
|
|
157
|
+
await getWasmInstance();
|
|
158
|
+
const g = globalThis;
|
|
159
|
+
if (typeof g.nodeSelect !== 'function') {
|
|
160
|
+
throw new Error('nodeSelect not available in WASM module');
|
|
161
|
+
}
|
|
162
|
+
const resultJson = g.nodeSelect(this.nodeRef, selector);
|
|
163
|
+
const helper = await getWasmHelper();
|
|
164
|
+
const results = helper.parseJsonResult(resultJson);
|
|
165
|
+
if (!results || !Array.isArray(results)) {
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
return results.map((nodeRef) => new ContentNode(nodeRef));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Select first node using a selector (requires extended WASM exports)
|
|
172
|
+
*/
|
|
173
|
+
async selectFirst(selector) {
|
|
174
|
+
this.checkDisposed();
|
|
175
|
+
await getWasmInstance();
|
|
176
|
+
const g = globalThis;
|
|
177
|
+
if (typeof g.nodeSelectFirst !== 'function') {
|
|
178
|
+
throw new Error('nodeSelectFirst not available in WASM module');
|
|
179
|
+
}
|
|
180
|
+
const nodeRef = g.nodeSelectFirst(this.nodeRef, selector);
|
|
181
|
+
if (nodeRef === 0)
|
|
182
|
+
return null;
|
|
183
|
+
return new ContentNode(nodeRef);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Check if this is a virtual node (requires extended WASM exports)
|
|
187
|
+
*/
|
|
188
|
+
async isVirtual() {
|
|
189
|
+
this.checkDisposed();
|
|
190
|
+
await getWasmInstance();
|
|
191
|
+
const g = globalThis;
|
|
192
|
+
if (typeof g.nodeIsVirtual !== 'function') {
|
|
193
|
+
throw new Error('nodeIsVirtual not available in WASM module');
|
|
194
|
+
}
|
|
195
|
+
return g.nodeIsVirtual(this.nodeRef);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Set virtual flag (requires extended WASM exports)
|
|
199
|
+
*/
|
|
200
|
+
async setVirtual(virtual) {
|
|
201
|
+
this.checkDisposed();
|
|
202
|
+
await getWasmInstance();
|
|
203
|
+
const g = globalThis;
|
|
204
|
+
if (typeof g.nodeSetVirtual !== 'function') {
|
|
205
|
+
throw new Error('nodeSetVirtual not available in WASM module');
|
|
206
|
+
}
|
|
207
|
+
g.nodeSetVirtual(this.nodeRef, virtual);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get the UUID of this node (requires extended WASM exports)
|
|
211
|
+
*/
|
|
212
|
+
async getUuid() {
|
|
213
|
+
this.checkDisposed();
|
|
214
|
+
await getWasmInstance();
|
|
215
|
+
const g = globalThis;
|
|
216
|
+
if (typeof g.nodeGetUUID !== 'function') {
|
|
217
|
+
throw new Error('nodeGetUUID not available in WASM module');
|
|
218
|
+
}
|
|
219
|
+
return g.nodeGetUUID(this.nodeRef);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Set the UUID of this node (requires extended WASM exports)
|
|
223
|
+
*/
|
|
224
|
+
async setUuid(uuid) {
|
|
225
|
+
this.checkDisposed();
|
|
226
|
+
await getWasmInstance();
|
|
227
|
+
const g = globalThis;
|
|
228
|
+
if (typeof g.nodeSetUuid !== 'function') {
|
|
229
|
+
throw new Error('nodeSetUuid not available in WASM module');
|
|
230
|
+
}
|
|
231
|
+
g.nodeSetUuid(this.nodeRef, uuid);
|
|
232
|
+
}
|
|
233
|
+
// Tagging operations
|
|
234
|
+
/**
|
|
235
|
+
* Tag this node
|
|
236
|
+
*/
|
|
237
|
+
async tag(tagName) {
|
|
238
|
+
this.checkDisposed();
|
|
239
|
+
await getWasmInstance();
|
|
240
|
+
nodeTag(this.nodeRef, tagName);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Tag this node with options (requires extended WASM exports)
|
|
244
|
+
*/
|
|
245
|
+
async tagWithOptions(tagName, options) {
|
|
246
|
+
this.checkDisposed();
|
|
247
|
+
await getWasmInstance();
|
|
248
|
+
const g = globalThis;
|
|
249
|
+
if (typeof g.nodeTagWithOptions !== 'function') {
|
|
250
|
+
throw new Error('nodeTagWithOptions not available in WASM module');
|
|
251
|
+
}
|
|
252
|
+
g.nodeTagWithOptions(this.nodeRef, tagName, JSON.stringify(options));
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Check if this node has a tag
|
|
256
|
+
*/
|
|
257
|
+
async hasTag(tagName) {
|
|
258
|
+
this.checkDisposed();
|
|
259
|
+
await getWasmInstance();
|
|
260
|
+
return nodeHasTag(this.nodeRef, tagName);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Remove a tag from this node
|
|
264
|
+
*/
|
|
265
|
+
async removeTag(tagName) {
|
|
266
|
+
this.checkDisposed();
|
|
267
|
+
await getWasmInstance();
|
|
268
|
+
nodeRemoveTag(this.nodeRef, tagName);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get all tags for this node
|
|
272
|
+
*/
|
|
273
|
+
async getTags() {
|
|
274
|
+
this.checkDisposed();
|
|
275
|
+
await getWasmInstance();
|
|
276
|
+
const tagsJson = nodeGetTags(this.nodeRef);
|
|
277
|
+
const helper = await getWasmHelper();
|
|
278
|
+
const tags = helper.parseJsonResult(tagsJson);
|
|
279
|
+
return Array.isArray(tags) ? tags : [];
|
|
280
|
+
}
|
|
281
|
+
// Feature operations (require extended WASM exports)
|
|
282
|
+
/**
|
|
283
|
+
* Set a feature on this node
|
|
284
|
+
*/
|
|
285
|
+
async setFeature(featureType, name, value, config) {
|
|
286
|
+
this.checkDisposed();
|
|
287
|
+
await getWasmInstance();
|
|
288
|
+
const g = globalThis;
|
|
289
|
+
if (typeof g.nodeSetFeature !== 'function') {
|
|
290
|
+
throw new Error('nodeSetFeature not available in WASM module');
|
|
291
|
+
}
|
|
292
|
+
g.nodeSetFeature(this.nodeRef, featureType, name, JSON.stringify(value), config ? JSON.stringify(config) : '');
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get a feature from this node
|
|
296
|
+
*/
|
|
297
|
+
async getFeature(featureType, name) {
|
|
298
|
+
this.checkDisposed();
|
|
299
|
+
await getWasmInstance();
|
|
300
|
+
const g = globalThis;
|
|
301
|
+
if (typeof g.nodeGetFeature !== 'function') {
|
|
302
|
+
throw new Error('nodeGetFeature not available in WASM module');
|
|
303
|
+
}
|
|
304
|
+
const featureJson = g.nodeGetFeature(this.nodeRef, featureType, name);
|
|
305
|
+
const helper = await getWasmHelper();
|
|
306
|
+
return helper.parseJsonResult(featureJson);
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get a feature value from this node
|
|
310
|
+
*/
|
|
311
|
+
async getFeatureValue(featureType, name) {
|
|
312
|
+
this.checkDisposed();
|
|
313
|
+
await getWasmInstance();
|
|
314
|
+
const g = globalThis;
|
|
315
|
+
if (typeof g.nodeGetFeatureValue !== 'function') {
|
|
316
|
+
throw new Error('nodeGetFeatureValue not available in WASM module');
|
|
317
|
+
}
|
|
318
|
+
const valueJson = g.nodeGetFeatureValue(this.nodeRef, featureType, name);
|
|
319
|
+
const helper = await getWasmHelper();
|
|
320
|
+
return helper.parseJsonResult(valueJson);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Check if this node has a feature
|
|
324
|
+
*/
|
|
325
|
+
async hasFeature(featureType, name) {
|
|
326
|
+
this.checkDisposed();
|
|
327
|
+
await getWasmInstance();
|
|
328
|
+
const g = globalThis;
|
|
329
|
+
if (typeof g.nodeHasFeature !== 'function') {
|
|
330
|
+
throw new Error('nodeHasFeature not available in WASM module');
|
|
331
|
+
}
|
|
332
|
+
return g.nodeHasFeature(this.nodeRef, featureType, name);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Get all features for this node
|
|
336
|
+
*/
|
|
337
|
+
async getFeatures() {
|
|
338
|
+
this.checkDisposed();
|
|
339
|
+
await getWasmInstance();
|
|
340
|
+
const g = globalThis;
|
|
341
|
+
if (typeof g.nodeGetFeatures !== 'function') {
|
|
342
|
+
throw new Error('nodeGetFeatures not available in WASM module');
|
|
343
|
+
}
|
|
344
|
+
const featuresJson = g.nodeGetFeatures(this.nodeRef);
|
|
345
|
+
const helper = await getWasmHelper();
|
|
346
|
+
const features = helper.parseJsonResult(featuresJson);
|
|
347
|
+
return Array.isArray(features) ? features : [];
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Get features of a specific type
|
|
351
|
+
*/
|
|
352
|
+
async getFeaturesOfType(featureType) {
|
|
353
|
+
this.checkDisposed();
|
|
354
|
+
await getWasmInstance();
|
|
355
|
+
const g = globalThis;
|
|
356
|
+
if (typeof g.nodeGetFeaturesByType !== 'function') {
|
|
357
|
+
throw new Error('nodeGetFeaturesByType not available in WASM module');
|
|
358
|
+
}
|
|
359
|
+
const featuresJson = g.nodeGetFeaturesByType(this.nodeRef, featureType);
|
|
360
|
+
const helper = await getWasmHelper();
|
|
361
|
+
const features = helper.parseJsonResult(featuresJson);
|
|
362
|
+
return Array.isArray(features) ? features : [];
|
|
363
|
+
}
|
|
364
|
+
// Navigation operations (require extended WASM exports)
|
|
365
|
+
/**
|
|
366
|
+
* Get the next node
|
|
367
|
+
*/
|
|
368
|
+
async nextNode() {
|
|
369
|
+
this.checkDisposed();
|
|
370
|
+
await getWasmInstance();
|
|
371
|
+
const g = globalThis;
|
|
372
|
+
if (typeof g.nodeNextNode !== 'function') {
|
|
373
|
+
throw new Error('nodeNextNode not available in WASM module');
|
|
374
|
+
}
|
|
375
|
+
const nextRef = g.nodeNextNode(this.nodeRef);
|
|
376
|
+
if (nextRef === 0)
|
|
377
|
+
return null;
|
|
378
|
+
return new ContentNode(nextRef);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get the previous node
|
|
382
|
+
*/
|
|
383
|
+
async previousNode() {
|
|
384
|
+
this.checkDisposed();
|
|
385
|
+
await getWasmInstance();
|
|
386
|
+
const g = globalThis;
|
|
387
|
+
if (typeof g.nodePreviousNode !== 'function') {
|
|
388
|
+
throw new Error('nodePreviousNode not available in WASM module');
|
|
389
|
+
}
|
|
390
|
+
const prevRef = g.nodePreviousNode(this.nodeRef);
|
|
391
|
+
if (prevRef === 0)
|
|
392
|
+
return null;
|
|
393
|
+
return new ContentNode(prevRef);
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Check if this is the first child
|
|
397
|
+
*/
|
|
398
|
+
async isFirstChild() {
|
|
399
|
+
this.checkDisposed();
|
|
400
|
+
await getWasmInstance();
|
|
401
|
+
const g = globalThis;
|
|
402
|
+
if (typeof g.nodeIsFirstChild !== 'function') {
|
|
403
|
+
throw new Error('nodeIsFirstChild not available in WASM module');
|
|
404
|
+
}
|
|
405
|
+
return g.nodeIsFirstChild(this.nodeRef);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Check if this is the last child
|
|
409
|
+
*/
|
|
410
|
+
async isLastChild() {
|
|
411
|
+
this.checkDisposed();
|
|
412
|
+
await getWasmInstance();
|
|
413
|
+
const g = globalThis;
|
|
414
|
+
if (typeof g.nodeIsLastChild !== 'function') {
|
|
415
|
+
throw new Error('nodeIsLastChild not available in WASM module');
|
|
416
|
+
}
|
|
417
|
+
return g.nodeIsLastChild(this.nodeRef);
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Get the depth of this node in the tree
|
|
421
|
+
*/
|
|
422
|
+
async getDepth() {
|
|
423
|
+
this.checkDisposed();
|
|
424
|
+
await getWasmInstance();
|
|
425
|
+
const g = globalThis;
|
|
426
|
+
if (typeof g.nodeGetDepth !== 'function') {
|
|
427
|
+
throw new Error('nodeGetDepth not available in WASM module');
|
|
428
|
+
}
|
|
429
|
+
return g.nodeGetDepth(this.nodeRef);
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Get the sibling index of this node
|
|
433
|
+
*/
|
|
434
|
+
async getSiblingIndex() {
|
|
435
|
+
this.checkDisposed();
|
|
436
|
+
await getWasmInstance();
|
|
437
|
+
const g = globalThis;
|
|
438
|
+
if (typeof g.nodeGetSiblingIndex !== 'function') {
|
|
439
|
+
throw new Error('nodeGetSiblingIndex not available in WASM module');
|
|
440
|
+
}
|
|
441
|
+
return g.nodeGetSiblingIndex(this.nodeRef);
|
|
442
|
+
}
|
|
443
|
+
// Spatial operations (require extended WASM exports)
|
|
444
|
+
/**
|
|
445
|
+
* Set bounding box
|
|
446
|
+
*/
|
|
447
|
+
async setBBox(x, y, width, height) {
|
|
448
|
+
this.checkDisposed();
|
|
449
|
+
await getWasmInstance();
|
|
450
|
+
const g = globalThis;
|
|
451
|
+
if (typeof g.nodeSetBBox !== 'function') {
|
|
452
|
+
throw new Error('nodeSetBBox not available in WASM module');
|
|
453
|
+
}
|
|
454
|
+
g.nodeSetBBox(this.nodeRef, x, y, width, height);
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Get bounding box
|
|
458
|
+
*/
|
|
459
|
+
async getBBox() {
|
|
460
|
+
this.checkDisposed();
|
|
461
|
+
await getWasmInstance();
|
|
462
|
+
const g = globalThis;
|
|
463
|
+
if (typeof g.nodeGetBBox !== 'function') {
|
|
464
|
+
throw new Error('nodeGetBBox not available in WASM module');
|
|
465
|
+
}
|
|
466
|
+
const bboxJson = g.nodeGetBBox(this.nodeRef);
|
|
467
|
+
const helper = await getWasmHelper();
|
|
468
|
+
return helper.parseJsonResult(bboxJson);
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Get X coordinate
|
|
472
|
+
*/
|
|
473
|
+
async getX() {
|
|
474
|
+
this.checkDisposed();
|
|
475
|
+
await getWasmInstance();
|
|
476
|
+
const g = globalThis;
|
|
477
|
+
if (typeof g.nodeGetX !== 'function') {
|
|
478
|
+
throw new Error('nodeGetX not available in WASM module');
|
|
479
|
+
}
|
|
480
|
+
return g.nodeGetX(this.nodeRef);
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Get Y coordinate
|
|
484
|
+
*/
|
|
485
|
+
async getY() {
|
|
486
|
+
this.checkDisposed();
|
|
487
|
+
await getWasmInstance();
|
|
488
|
+
const g = globalThis;
|
|
489
|
+
if (typeof g.nodeGetY !== 'function') {
|
|
490
|
+
throw new Error('nodeGetY not available in WASM module');
|
|
491
|
+
}
|
|
492
|
+
return g.nodeGetY(this.nodeRef);
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Get width
|
|
496
|
+
*/
|
|
497
|
+
async getWidth() {
|
|
498
|
+
this.checkDisposed();
|
|
499
|
+
await getWasmInstance();
|
|
500
|
+
const g = globalThis;
|
|
501
|
+
if (typeof g.nodeGetWidth !== 'function') {
|
|
502
|
+
throw new Error('nodeGetWidth not available in WASM module');
|
|
503
|
+
}
|
|
504
|
+
return g.nodeGetWidth(this.nodeRef);
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Get height
|
|
508
|
+
*/
|
|
509
|
+
async getHeight() {
|
|
510
|
+
this.checkDisposed();
|
|
511
|
+
await getWasmInstance();
|
|
512
|
+
const g = globalThis;
|
|
513
|
+
if (typeof g.nodeGetHeight !== 'function') {
|
|
514
|
+
throw new Error('nodeGetHeight not available in WASM module');
|
|
515
|
+
}
|
|
516
|
+
return g.nodeGetHeight(this.nodeRef);
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Set rotation
|
|
520
|
+
*/
|
|
521
|
+
async setRotate(rotate) {
|
|
522
|
+
this.checkDisposed();
|
|
523
|
+
await getWasmInstance();
|
|
524
|
+
const g = globalThis;
|
|
525
|
+
if (typeof g.nodeSetRotate !== 'function') {
|
|
526
|
+
throw new Error('nodeSetRotate not available in WASM module');
|
|
527
|
+
}
|
|
528
|
+
g.nodeSetRotate(this.nodeRef, rotate);
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Get rotation
|
|
532
|
+
*/
|
|
533
|
+
async getRotate() {
|
|
534
|
+
this.checkDisposed();
|
|
535
|
+
await getWasmInstance();
|
|
536
|
+
const g = globalThis;
|
|
537
|
+
if (typeof g.nodeGetRotate !== 'function') {
|
|
538
|
+
throw new Error('nodeGetRotate not available in WASM module');
|
|
539
|
+
}
|
|
540
|
+
return g.nodeGetRotate(this.nodeRef);
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Get the page number this node is on (for page nodes, returns their index)
|
|
544
|
+
*/
|
|
545
|
+
async getPage() {
|
|
546
|
+
this.checkDisposed();
|
|
547
|
+
await getWasmInstance();
|
|
548
|
+
const g = globalThis;
|
|
549
|
+
if (typeof g.nodeGetPage !== 'function') {
|
|
550
|
+
// Fallback: try to get index
|
|
551
|
+
if (typeof g.nodeGetIndex === 'function') {
|
|
552
|
+
return g.nodeGetIndex(this.nodeRef);
|
|
553
|
+
}
|
|
554
|
+
return 0;
|
|
555
|
+
}
|
|
556
|
+
return g.nodeGetPage(this.nodeRef);
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* Get tag features (features of type 'tag')
|
|
560
|
+
*/
|
|
561
|
+
async getTagFeatures() {
|
|
562
|
+
return this.getFeaturesOfType('tag');
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Get tag groups for this node
|
|
566
|
+
* @param tagMetadataMap Map of tag name to metadata
|
|
567
|
+
* @param document The parent document (needed for findNodesByTagUuid)
|
|
568
|
+
*/
|
|
569
|
+
async getTagGroups(tagMetadataMap, document) {
|
|
570
|
+
this.checkDisposed();
|
|
571
|
+
const tagFeatures = await this.getTagFeatures();
|
|
572
|
+
const tagInstances = new Map();
|
|
573
|
+
for (const tag of tagFeatures) {
|
|
574
|
+
if (!tag.value || !Array.isArray(tag.value) || !tag.value[0]?.uuid) {
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
const tagInstance = `${tag.name}:${tag.value[0].uuid}`;
|
|
578
|
+
if (!tagInstances.has(tagInstance)) {
|
|
579
|
+
const nodes = await document.findNodesByTagUuid(tag.value[0].uuid);
|
|
580
|
+
const sortedNodes = await document.getSpatiallySortedNodes(nodes);
|
|
581
|
+
const pageNum = await this.getPage();
|
|
582
|
+
const newGroup = {
|
|
583
|
+
tag: tag.name,
|
|
584
|
+
page: pageNum,
|
|
585
|
+
tagUuid: tag.value[0].uuid,
|
|
586
|
+
nodes: sortedNodes,
|
|
587
|
+
metadata: undefined,
|
|
588
|
+
taxon: undefined,
|
|
589
|
+
text: '',
|
|
590
|
+
};
|
|
591
|
+
// Get text from sorted nodes
|
|
592
|
+
const texts = [];
|
|
593
|
+
for (const node of sortedNodes) {
|
|
594
|
+
texts.push(await node.getContent());
|
|
595
|
+
}
|
|
596
|
+
newGroup.text = texts.join(' ');
|
|
597
|
+
newGroup.metadata = tagMetadataMap.get(tag.name);
|
|
598
|
+
if (newGroup.metadata) {
|
|
599
|
+
newGroup.taxon = newGroup.metadata.taxon;
|
|
600
|
+
}
|
|
601
|
+
tagInstances.set(tagInstance, newGroup);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
return Array.from(tagInstances.values());
|
|
605
|
+
}
|
|
606
|
+
// Resource management
|
|
607
|
+
/**
|
|
608
|
+
* Dispose of this node and free WASM resources
|
|
609
|
+
*/
|
|
610
|
+
dispose() {
|
|
611
|
+
if (!this.disposed && this.nodeRef !== 0) {
|
|
612
|
+
try {
|
|
613
|
+
if (typeof freeNode === 'function') {
|
|
614
|
+
freeNode(this.nodeRef);
|
|
615
|
+
}
|
|
616
|
+
this.disposed = true;
|
|
617
|
+
this.nodeRef = 0;
|
|
618
|
+
}
|
|
619
|
+
catch (e) {
|
|
620
|
+
console.warn('Error disposing ContentNode:', e);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Check if this node has been disposed
|
|
626
|
+
*/
|
|
627
|
+
checkDisposed() {
|
|
628
|
+
if (this.disposed) {
|
|
629
|
+
throw new Error('ContentNode has been disposed');
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
//# sourceMappingURL=ContentNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentNode.js","sourceRoot":"","sources":["../src/ContentNode.ts"],"names":[],"mappings":"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"}
|