@kreuzberg/html-to-markdown-wasm 3.6.0-rc.9 → 3.6.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kreuzberg/html-to-markdown-wasm",
3
- "version": "3.6.0-rc.9",
3
+ "version": "3.6.0",
4
4
  "private": false,
5
5
  "description": "High-performance HTML to Markdown converter",
6
6
  "license": "MIT",
@@ -572,14 +572,46 @@ export class WasmNodeContent {
572
572
  * Context information passed to all visitor methods.
573
573
  *
574
574
  * Provides comprehensive metadata about the current node being visited,
575
- * including its type, attributes, position in the DOM tree, and parent context.
575
+ * including its type, tag name, position in the DOM tree, and parent context.
576
+ *
577
+ * ## Attributes
578
+ *
579
+ * Access attributes via `NodeContext.attributes`, which returns
580
+ * `&BTreeMap<String, String>`. When the context was built with
581
+ * `NodeContext.with_lazy_attributes` (the hot path inside the converter),
582
+ * the map is only materialized on the first call — if the visitor never reads
583
+ * attributes, the allocation is skipped.
584
+ *
585
+ * ## Lifetimes
586
+ *
587
+ * String fields use `Cow<'_, str>` so the converter can pass slices directly
588
+ * out of the parsed DOM without allocating. Visitor implementations that need
589
+ * to outlive the callback should call `NodeContext.into_owned`.
576
590
  */
577
591
  export class WasmNodeContext {
578
592
  free(): void;
579
593
  [Symbol.dispose](): void;
594
+ /**
595
+ * Return a reference to the attribute map.
596
+ *
597
+ * If the context was built with `NodeContext.with_lazy_attributes`, the
598
+ * map is materialized on the first call and cached for subsequent calls.
599
+ * If this method is never called, no allocation occurs for attributes.
600
+ */
601
+ attributes(): any;
580
602
  static default(): WasmNodeContext;
581
- constructor(nodeType: WasmNodeType, tagName: string, attributes: any, depth: number, indexInParent: number, isInline: boolean, parentTag?: string | null);
582
- attributes: any;
603
+ /**
604
+ * Promote any borrowed fields into owned storage so the context can outlive `'a`.
605
+ */
606
+ intoOwned(): WasmNodeContext;
607
+ constructor(nodeType: WasmNodeType, tagName: string, depth: number, indexInParent: number, isInline: boolean, parentTag?: string | null);
608
+ /**
609
+ * Construct a `NodeContext` with an owned attribute map.
610
+ *
611
+ * Prefer `NodeContext.with_lazy_attributes` (pub(crate)) inside the
612
+ * converter to avoid the eager `collect_tag_attributes` allocation.
613
+ */
614
+ static withOwnedAttributes(node_type: WasmNodeType, tag_name: string, attributes: any, depth: number, index_in_parent: number, parent_tag: string | null | undefined, is_inline: boolean): WasmNodeContext;
583
615
  depth: number;
584
616
  indexInParent: number;
585
617
  isInline: boolean;
@@ -774,7 +806,7 @@ export class WasmProcessingWarning {
774
806
  }
775
807
 
776
808
  /**
777
- * Structured data block (JSON-LD, Microdata, or RDFa).
809
+ * Structured data block (JSON-LD, Microdata, or `RDFa`).
778
810
  *
779
811
  * Represents machine-readable structured data found in the document.
780
812
  * JSON-LD blocks are collected as raw JSON strings for flexibility.
@@ -4374,7 +4374,21 @@ if (Symbol.dispose) WasmNodeContent.prototype[Symbol.dispose] = WasmNodeContent.
4374
4374
  * Context information passed to all visitor methods.
4375
4375
  *
4376
4376
  * Provides comprehensive metadata about the current node being visited,
4377
- * including its type, attributes, position in the DOM tree, and parent context.
4377
+ * including its type, tag name, position in the DOM tree, and parent context.
4378
+ *
4379
+ * ## Attributes
4380
+ *
4381
+ * Access attributes via `NodeContext.attributes`, which returns
4382
+ * `&BTreeMap<String, String>`. When the context was built with
4383
+ * `NodeContext.with_lazy_attributes` (the hot path inside the converter),
4384
+ * the map is only materialized on the first call — if the visitor never reads
4385
+ * attributes, the allocation is skipped.
4386
+ *
4387
+ * ## Lifetimes
4388
+ *
4389
+ * String fields use `Cow<'_, str>` so the converter can pass slices directly
4390
+ * out of the parsed DOM without allocating. Visitor implementations that need
4391
+ * to outlive the callback should call `NodeContext.into_owned`.
4378
4392
  */
4379
4393
  export class WasmNodeContext {
4380
4394
  static __wrap(ptr) {
@@ -4394,9 +4408,14 @@ export class WasmNodeContext {
4394
4408
  wasm.__wbg_wasmnodecontext_free(ptr, 0);
4395
4409
  }
4396
4410
  /**
4411
+ * Return a reference to the attribute map.
4412
+ *
4413
+ * If the context was built with `NodeContext.with_lazy_attributes`, the
4414
+ * map is materialized on the first call and cached for subsequent calls.
4415
+ * If this method is never called, no allocation occurs for attributes.
4397
4416
  * @returns {any}
4398
4417
  */
4399
- get attributes() {
4418
+ attributes() {
4400
4419
  const ret = wasm.wasmnodecontext_attributes(this.__wbg_ptr);
4401
4420
  return takeObject(ret);
4402
4421
  }
@@ -4421,6 +4440,14 @@ export class WasmNodeContext {
4421
4440
  const ret = wasm.wasmnodecontext_indexInParent(this.__wbg_ptr);
4422
4441
  return ret >>> 0;
4423
4442
  }
4443
+ /**
4444
+ * Promote any borrowed fields into owned storage so the context can outlive `'a`.
4445
+ * @returns {WasmNodeContext}
4446
+ */
4447
+ intoOwned() {
4448
+ const ret = wasm.wasmnodecontext_intoOwned(this.__wbg_ptr);
4449
+ return WasmNodeContext.__wrap(ret);
4450
+ }
4424
4451
  /**
4425
4452
  * @returns {boolean}
4426
4453
  */
@@ -4431,18 +4458,17 @@ export class WasmNodeContext {
4431
4458
  /**
4432
4459
  * @param {WasmNodeType} nodeType
4433
4460
  * @param {string} tagName
4434
- * @param {any} attributes
4435
4461
  * @param {number} depth
4436
4462
  * @param {number} indexInParent
4437
4463
  * @param {boolean} isInline
4438
4464
  * @param {string | null} [parentTag]
4439
4465
  */
4440
- constructor(nodeType, tagName, attributes, depth, indexInParent, isInline, parentTag) {
4466
+ constructor(nodeType, tagName, depth, indexInParent, isInline, parentTag) {
4441
4467
  const ptr0 = passStringToWasm0(tagName, wasm.__wbindgen_export, wasm.__wbindgen_export2);
4442
4468
  const len0 = WASM_VECTOR_LEN;
4443
4469
  var ptr1 = isLikeNone(parentTag) ? 0 : passStringToWasm0(parentTag, wasm.__wbindgen_export, wasm.__wbindgen_export2);
4444
4470
  var len1 = WASM_VECTOR_LEN;
4445
- const ret = wasm.wasmnodecontext_new(nodeType, ptr0, len0, addHeapObject(attributes), depth, indexInParent, isInline, ptr1, len1);
4471
+ const ret = wasm.wasmnodecontext_new(nodeType, ptr0, len0, depth, indexInParent, isInline, ptr1, len1);
4446
4472
  this.__wbg_ptr = ret;
4447
4473
  WasmNodeContextFinalization.register(this, this.__wbg_ptr, this);
4448
4474
  return this;
@@ -4485,12 +4511,6 @@ export class WasmNodeContext {
4485
4511
  wasm.__wbindgen_add_to_stack_pointer(16);
4486
4512
  }
4487
4513
  }
4488
- /**
4489
- * @param {any} value
4490
- */
4491
- set attributes(value) {
4492
- wasm.wasmnodecontext_set_attributes(this.__wbg_ptr, addHeapObject(value));
4493
- }
4494
4514
  /**
4495
4515
  * @param {number} value
4496
4516
  */
@@ -4550,6 +4570,28 @@ export class WasmNodeContext {
4550
4570
  wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1);
4551
4571
  }
4552
4572
  }
4573
+ /**
4574
+ * Construct a `NodeContext` with an owned attribute map.
4575
+ *
4576
+ * Prefer `NodeContext.with_lazy_attributes` (pub(crate)) inside the
4577
+ * converter to avoid the eager `collect_tag_attributes` allocation.
4578
+ * @param {WasmNodeType} node_type
4579
+ * @param {string} tag_name
4580
+ * @param {any} attributes
4581
+ * @param {number} depth
4582
+ * @param {number} index_in_parent
4583
+ * @param {string | null | undefined} parent_tag
4584
+ * @param {boolean} is_inline
4585
+ * @returns {WasmNodeContext}
4586
+ */
4587
+ static withOwnedAttributes(node_type, tag_name, attributes, depth, index_in_parent, parent_tag, is_inline) {
4588
+ const ptr0 = passStringToWasm0(tag_name, wasm.__wbindgen_export, wasm.__wbindgen_export2);
4589
+ const len0 = WASM_VECTOR_LEN;
4590
+ var ptr1 = isLikeNone(parent_tag) ? 0 : passStringToWasm0(parent_tag, wasm.__wbindgen_export, wasm.__wbindgen_export2);
4591
+ var len1 = WASM_VECTOR_LEN;
4592
+ const ret = wasm.wasmnodecontext_withOwnedAttributes(node_type, ptr0, len0, addHeapObject(attributes), depth, index_in_parent, ptr1, len1, is_inline);
4593
+ return WasmNodeContext.__wrap(ret);
4594
+ }
4553
4595
  }
4554
4596
  if (Symbol.dispose) WasmNodeContext.prototype[Symbol.dispose] = WasmNodeContext.prototype.free;
4555
4597
 
@@ -5006,7 +5048,7 @@ export class WasmProcessingWarning {
5006
5048
  if (Symbol.dispose) WasmProcessingWarning.prototype[Symbol.dispose] = WasmProcessingWarning.prototype.free;
5007
5049
 
5008
5050
  /**
5009
- * Structured data block (JSON-LD, Microdata, or RDFa).
5051
+ * Structured data block (JSON-LD, Microdata, or `RDFa`).
5010
5052
  *
5011
5053
  * Represents machine-readable structured data found in the document.
5012
5054
  * JSON-LD blocks are collected as raw JSON strings for flexibility.
@@ -5601,20 +5643,46 @@ export function convert(html, options) {
5601
5643
  wasm.__wbindgen_add_to_stack_pointer(16);
5602
5644
  }
5603
5645
  }
5604
- export function __wbg___wbindgen_is_function_754e9f305ff6029e(arg0) {
5646
+ export function __wbg_Error_9dc85fe1bc224456(arg0, arg1) {
5647
+ const ret = Error(getStringFromWasm0(arg0, arg1));
5648
+ return addHeapObject(ret);
5649
+ }
5650
+ export function __wbg___wbindgen_boolean_get_b131b2f36d6b2f55(arg0) {
5651
+ const v = getObject(arg0);
5652
+ const ret = typeof(v) === 'boolean' ? v : undefined;
5653
+ return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
5654
+ }
5655
+ export function __wbg___wbindgen_debug_string_56c147eb1a51f0c4(arg0, arg1) {
5656
+ const ret = debugString(getObject(arg1));
5657
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
5658
+ const len1 = WASM_VECTOR_LEN;
5659
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
5660
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
5661
+ }
5662
+ export function __wbg___wbindgen_is_function_147961669f068cd4(arg0) {
5605
5663
  const ret = typeof(getObject(arg0)) === 'function';
5606
5664
  return ret;
5607
5665
  }
5608
- export function __wbg___wbindgen_is_object_56732c2bc353f41d(arg0) {
5666
+ export function __wbg___wbindgen_is_object_3a2c414391dbf751(arg0) {
5609
5667
  const val = getObject(arg0);
5610
5668
  const ret = typeof(val) === 'object' && val !== null;
5611
5669
  return ret;
5612
5670
  }
5613
- export function __wbg___wbindgen_is_undefined_67b456be8673d3d7(arg0) {
5671
+ export function __wbg___wbindgen_is_undefined_4410e3c20a99fa97(arg0) {
5614
5672
  const ret = getObject(arg0) === undefined;
5615
5673
  return ret;
5616
5674
  }
5617
- export function __wbg___wbindgen_string_get_72bdf95d3ae505b1(arg0, arg1) {
5675
+ export function __wbg___wbindgen_jsval_loose_eq_e07e3b1f5db6da6c(arg0, arg1) {
5676
+ const ret = getObject(arg0) == getObject(arg1);
5677
+ return ret;
5678
+ }
5679
+ export function __wbg___wbindgen_number_get_588ed6b97f0d7e14(arg0, arg1) {
5680
+ const obj = getObject(arg1);
5681
+ const ret = typeof(obj) === 'number' ? obj : undefined;
5682
+ getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
5683
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
5684
+ }
5685
+ export function __wbg___wbindgen_string_get_fa2687d531ed17a5(arg0, arg1) {
5618
5686
  const obj = getObject(arg1);
5619
5687
  const ret = typeof(obj) === 'string' ? obj : undefined;
5620
5688
  var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -5622,47 +5690,126 @@ export function __wbg___wbindgen_string_get_72bdf95d3ae505b1(arg0, arg1) {
5622
5690
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
5623
5691
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
5624
5692
  }
5625
- export function __wbg___wbindgen_throw_1506f2235d1bdba0(arg0, arg1) {
5693
+ export function __wbg___wbindgen_throw_bbadd78c1bac3a77(arg0, arg1) {
5626
5694
  throw new Error(getStringFromWasm0(arg0, arg1));
5627
5695
  }
5628
- export function __wbg_apply_292b6d94e4f92b15() { return handleError(function (arg0, arg1, arg2) {
5696
+ export function __wbg_apply_5d99f956e2dda74d() { return handleError(function (arg0, arg1, arg2) {
5629
5697
  const ret = getObject(arg0).apply(getObject(arg1), getObject(arg2));
5630
5698
  return addHeapObject(ret);
5631
5699
  }, arguments); }
5632
- export function __wbg_get_de6a0f7d4d18a304() { return handleError(function (arg0, arg1) {
5700
+ export function __wbg_call_91f00ddc43e01490() { return handleError(function (arg0, arg1) {
5701
+ const ret = getObject(arg0).call(getObject(arg1));
5702
+ return addHeapObject(ret);
5703
+ }, arguments); }
5704
+ export function __wbg_done_6a8439e544ec6206(arg0) {
5705
+ const ret = getObject(arg0).done;
5706
+ return ret;
5707
+ }
5708
+ export function __wbg_entries_5a6a7e7e0df09fe5(arg0) {
5709
+ const ret = Object.entries(getObject(arg0));
5710
+ return addHeapObject(ret);
5711
+ }
5712
+ export function __wbg_get_44e98e27bda25b5b() { return handleError(function (arg0, arg1) {
5713
+ const ret = Reflect.get(getObject(arg0), getObject(arg1));
5714
+ return addHeapObject(ret);
5715
+ }, arguments); }
5716
+ export function __wbg_get_4b90d6d8c5deb5d5(arg0, arg1) {
5717
+ const ret = getObject(arg0)[arg1 >>> 0];
5718
+ return addHeapObject(ret);
5719
+ }
5720
+ export function __wbg_get_52a8a619f7b88df6() { return handleError(function (arg0, arg1) {
5633
5721
  const ret = Reflect.get(getObject(arg0), getObject(arg1));
5634
5722
  return addHeapObject(ret);
5635
5723
  }, arguments); }
5636
- export function __wbg_has_73740b27f436fed3() { return handleError(function (arg0, arg1) {
5724
+ export function __wbg_get_unchecked_46e778e3cec74b5e(arg0, arg1) {
5725
+ const ret = getObject(arg0)[arg1 >>> 0];
5726
+ return addHeapObject(ret);
5727
+ }
5728
+ export function __wbg_has_14676d88c1340d2c() { return handleError(function (arg0, arg1) {
5637
5729
  const ret = Reflect.has(getObject(arg0), getObject(arg1));
5638
5730
  return ret;
5639
5731
  }, arguments); }
5640
- export function __wbg_new_ce1ab61c1c2b300d() {
5641
- const ret = new Object();
5732
+ export function __wbg_instanceof_ArrayBuffer_a581da923203f29f(arg0) {
5733
+ let result;
5734
+ try {
5735
+ result = getObject(arg0) instanceof ArrayBuffer;
5736
+ } catch (_) {
5737
+ result = false;
5738
+ }
5739
+ const ret = result;
5740
+ return ret;
5741
+ }
5742
+ export function __wbg_instanceof_Uint8Array_b6fe1ac89eba107e(arg0) {
5743
+ let result;
5744
+ try {
5745
+ result = getObject(arg0) instanceof Uint8Array;
5746
+ } catch (_) {
5747
+ result = false;
5748
+ }
5749
+ const ret = result;
5750
+ return ret;
5751
+ }
5752
+ export function __wbg_iterator_9b36cebf3be7b7cd() {
5753
+ const ret = Symbol.iterator;
5642
5754
  return addHeapObject(ret);
5643
5755
  }
5644
- export function __wbg_new_d90091b82fdf5b91() {
5756
+ export function __wbg_length_68a9d5278d084f4f(arg0) {
5757
+ const ret = getObject(arg0).length;
5758
+ return ret;
5759
+ }
5760
+ export function __wbg_length_fb04d16d7bdf6d4c(arg0) {
5761
+ const ret = getObject(arg0).length;
5762
+ return ret;
5763
+ }
5764
+ export function __wbg_new_0b303268aa395a38() {
5645
5765
  const ret = new Array();
5646
5766
  return addHeapObject(ret);
5647
5767
  }
5648
- export function __wbg_parse_03863847d06c4e89() { return handleError(function (arg0, arg1) {
5768
+ export function __wbg_new_20b778a4c5c691c3() {
5769
+ const ret = new Object();
5770
+ return addHeapObject(ret);
5771
+ }
5772
+ export function __wbg_new_883c0db065f06efd() {
5773
+ const ret = new Map();
5774
+ return addHeapObject(ret);
5775
+ }
5776
+ export function __wbg_new_b06772b280cc6e52(arg0) {
5777
+ const ret = new Uint8Array(getObject(arg0));
5778
+ return addHeapObject(ret);
5779
+ }
5780
+ export function __wbg_next_8cb028b6ba50743f() { return handleError(function (arg0) {
5781
+ const ret = getObject(arg0).next();
5782
+ return addHeapObject(ret);
5783
+ }, arguments); }
5784
+ export function __wbg_next_cfd0b146c9538df8(arg0) {
5785
+ const ret = getObject(arg0).next;
5786
+ return addHeapObject(ret);
5787
+ }
5788
+ export function __wbg_parse_246201845d0eb98c() { return handleError(function (arg0, arg1) {
5649
5789
  const ret = JSON.parse(getStringFromWasm0(arg0, arg1));
5650
5790
  return addHeapObject(ret);
5651
5791
  }, arguments); }
5652
- export function __wbg_push_a6822215aa43e71c(arg0, arg1) {
5792
+ export function __wbg_prototypesetcall_956c7493c68e29b4(arg0, arg1, arg2) {
5793
+ Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2));
5794
+ }
5795
+ export function __wbg_push_ceb8ef046afb2041(arg0, arg1) {
5653
5796
  const ret = getObject(arg0).push(getObject(arg1));
5654
5797
  return ret;
5655
5798
  }
5656
5799
  export function __wbg_set_6be42768c690e380(arg0, arg1, arg2) {
5657
5800
  getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
5658
5801
  }
5659
- export function __wbg_set_6e30c9374c26414c() { return handleError(function (arg0, arg1, arg2) {
5802
+ export function __wbg_set_a6ba3ac0e634b822() { return handleError(function (arg0, arg1, arg2) {
5660
5803
  const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
5661
5804
  return ret;
5662
5805
  }, arguments); }
5663
- export function __wbg_set_dca99999bba88a9a(arg0, arg1, arg2) {
5806
+ export function __wbg_set_da33c120a6584674(arg0, arg1, arg2) {
5664
5807
  getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
5665
5808
  }
5809
+ export function __wbg_value_3d3defe09fb1ffca(arg0) {
5810
+ const ret = getObject(arg0).value;
5811
+ return addHeapObject(ret);
5812
+ }
5666
5813
  export function __wbg_wasmdocumentnode_new(arg0) {
5667
5814
  const ret = WasmDocumentNode.__wrap(arg0);
5668
5815
  return addHeapObject(ret);
@@ -5848,6 +5995,71 @@ function _assertClass(instance, klass) {
5848
5995
  }
5849
5996
  }
5850
5997
 
5998
+ function debugString(val) {
5999
+ // primitive types
6000
+ const type = typeof val;
6001
+ if (type == 'number' || type == 'boolean' || val == null) {
6002
+ return `${val}`;
6003
+ }
6004
+ if (type == 'string') {
6005
+ return `"${val}"`;
6006
+ }
6007
+ if (type == 'symbol') {
6008
+ const description = val.description;
6009
+ if (description == null) {
6010
+ return 'Symbol';
6011
+ } else {
6012
+ return `Symbol(${description})`;
6013
+ }
6014
+ }
6015
+ if (type == 'function') {
6016
+ const name = val.name;
6017
+ if (typeof name == 'string' && name.length > 0) {
6018
+ return `Function(${name})`;
6019
+ } else {
6020
+ return 'Function';
6021
+ }
6022
+ }
6023
+ // objects
6024
+ if (Array.isArray(val)) {
6025
+ const length = val.length;
6026
+ let debug = '[';
6027
+ if (length > 0) {
6028
+ debug += debugString(val[0]);
6029
+ }
6030
+ for(let i = 1; i < length; i++) {
6031
+ debug += ', ' + debugString(val[i]);
6032
+ }
6033
+ debug += ']';
6034
+ return debug;
6035
+ }
6036
+ // Test for built-in
6037
+ const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
6038
+ let className;
6039
+ if (builtInMatches && builtInMatches.length > 1) {
6040
+ className = builtInMatches[1];
6041
+ } else {
6042
+ // Failed to match the standard '[object ClassName]'
6043
+ return toString.call(val);
6044
+ }
6045
+ if (className == 'Object') {
6046
+ // we're a user defined class or Object
6047
+ // JSON.stringify avoids problems with cycles, and is generally much
6048
+ // easier than looping through ownProperties of `val`.
6049
+ try {
6050
+ return 'Object(' + JSON.stringify(val) + ')';
6051
+ } catch (_) {
6052
+ return 'Object';
6053
+ }
6054
+ }
6055
+ // errors
6056
+ if (val instanceof Error) {
6057
+ return `${val.name}: ${val.message}\n${val.stack}`;
6058
+ }
6059
+ // TODO we could test for more things here, like `Set`s and `Map`s.
6060
+ return className;
6061
+ }
6062
+
5851
6063
  function dropObject(idx) {
5852
6064
  if (idx < 1028) return;
5853
6065
  heap[idx] = heap_next;
@@ -5869,6 +6081,11 @@ function getArrayU32FromWasm0(ptr, len) {
5869
6081
  return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
5870
6082
  }
5871
6083
 
6084
+ function getArrayU8FromWasm0(ptr, len) {
6085
+ ptr = ptr >>> 0;
6086
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
6087
+ }
6088
+
5872
6089
  let cachedDataViewMemory0 = null;
5873
6090
  function getDataViewMemory0() {
5874
6091
  if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
@@ -16,7 +16,6 @@ export const __wbg_wasmimagemetadata_free: (a: number, b: number) => void;
16
16
  export const __wbg_wasmlinkmetadata_free: (a: number, b: number) => void;
17
17
  export const __wbg_wasmmetadataentry_free: (a: number, b: number) => void;
18
18
  export const __wbg_wasmnodecontent_free: (a: number, b: number) => void;
19
- export const __wbg_wasmnodecontext_free: (a: number, b: number) => void;
20
19
  export const __wbg_wasmpreprocessingoptions_free: (a: number, b: number) => void;
21
20
  export const __wbg_wasmprocessingwarning_free: (a: number, b: number) => void;
22
21
  export const __wbg_wasmstructureddata_free: (a: number, b: number) => void;
@@ -378,18 +377,13 @@ export const wasmnodecontent_term: (a: number, b: number) => void;
378
377
  export const wasmnodecontent_text: (a: number, b: number) => void;
379
378
  export const wasmnodecontext_attributes: (a: number) => number;
380
379
  export const wasmnodecontext_default: () => number;
381
- export const wasmnodecontext_indexInParent: (a: number) => number;
380
+ export const wasmnodecontext_intoOwned: (a: number) => number;
382
381
  export const wasmnodecontext_isInline: (a: number) => number;
383
- export const wasmnodecontext_new: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
382
+ export const wasmnodecontext_new: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
384
383
  export const wasmnodecontext_nodeType: (a: number, b: number) => void;
385
- export const wasmnodecontext_parentTag: (a: number, b: number) => void;
386
- export const wasmnodecontext_set_attributes: (a: number, b: number) => void;
387
- export const wasmnodecontext_set_indexInParent: (a: number, b: number) => void;
388
384
  export const wasmnodecontext_set_isInline: (a: number, b: number) => void;
389
385
  export const wasmnodecontext_set_nodeType: (a: number, b: number) => void;
390
- export const wasmnodecontext_set_parentTag: (a: number, b: number, c: number) => void;
391
- export const wasmnodecontext_set_tagName: (a: number, b: number, c: number) => void;
392
- export const wasmnodecontext_tagName: (a: number, b: number) => void;
386
+ export const wasmnodecontext_withOwnedAttributes: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
393
387
  export const wasmpreprocessingoptions_default: () => number;
394
388
  export const wasmpreprocessingoptions_enabled: (a: number) => number;
395
389
  export const wasmpreprocessingoptions_new: (a: number, b: number, c: number, d: number) => number;
@@ -443,6 +437,7 @@ export const wasmnodecontent_ordered: (a: number) => number;
443
437
  export const wasmnodecontent_new: () => number;
444
438
  export const wasmheadermetadata_set_depth: (a: number, b: number) => void;
445
439
  export const wasmnodecontext_set_depth: (a: number, b: number) => void;
440
+ export const wasmnodecontext_set_indexInParent: (a: number, b: number) => void;
446
441
  export const wasmtablegrid_set_cols: (a: number, b: number) => void;
447
442
  export const wasmtablegrid_set_rows: (a: number, b: number) => void;
448
443
  export const wasmtextannotation_set_end: (a: number, b: number) => void;
@@ -450,13 +445,19 @@ export const wasmtextannotation_set_start: (a: number, b: number) => void;
450
445
  export const wasmnodecontent_set_imageIndex: (a: number, b: number) => void;
451
446
  export const wasmheadermetadata_depth: (a: number) => number;
452
447
  export const wasmnodecontext_depth: (a: number) => number;
448
+ export const wasmnodecontext_indexInParent: (a: number) => number;
453
449
  export const wasmtablegrid_cols: (a: number) => number;
454
450
  export const wasmtablegrid_rows: (a: number) => number;
455
451
  export const wasmtextannotation_end: (a: number) => number;
456
452
  export const wasmtextannotation_start: (a: number) => number;
457
453
  export const wasmannotationkind_new: () => number;
454
+ export const wasmnodecontext_parentTag: (a: number, b: number) => void;
458
455
  export const wasmnodecontent_set_ordered: (a: number, b: number) => void;
456
+ export const wasmnodecontext_set_tagName: (a: number, b: number, c: number) => void;
457
+ export const wasmnodecontext_set_parentTag: (a: number, b: number, c: number) => void;
458
+ export const wasmnodecontext_tagName: (a: number, b: number) => void;
459
459
  export const wasmnodecontent_imageIndex: (a: number) => number;
460
+ export const __wbg_wasmnodecontext_free: (a: number, b: number) => void;
460
461
  export const __wbg_wasmpreprocessingoptionsupdate_free: (a: number, b: number) => void;
461
462
  export const __wbindgen_export: (a: number, b: number) => number;
462
463
  export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
@@ -2,7 +2,7 @@
2
2
  "name": "html-to-markdown-wasm",
3
3
  "type": "module",
4
4
  "description": "High-performance HTML to Markdown converter",
5
- "version": "3.6.0-rc.9",
5
+ "version": "3.6.0",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
@@ -572,14 +572,46 @@ export class WasmNodeContent {
572
572
  * Context information passed to all visitor methods.
573
573
  *
574
574
  * Provides comprehensive metadata about the current node being visited,
575
- * including its type, attributes, position in the DOM tree, and parent context.
575
+ * including its type, tag name, position in the DOM tree, and parent context.
576
+ *
577
+ * ## Attributes
578
+ *
579
+ * Access attributes via `NodeContext.attributes`, which returns
580
+ * `&BTreeMap<String, String>`. When the context was built with
581
+ * `NodeContext.with_lazy_attributes` (the hot path inside the converter),
582
+ * the map is only materialized on the first call — if the visitor never reads
583
+ * attributes, the allocation is skipped.
584
+ *
585
+ * ## Lifetimes
586
+ *
587
+ * String fields use `Cow<'_, str>` so the converter can pass slices directly
588
+ * out of the parsed DOM without allocating. Visitor implementations that need
589
+ * to outlive the callback should call `NodeContext.into_owned`.
576
590
  */
577
591
  export class WasmNodeContext {
578
592
  free(): void;
579
593
  [Symbol.dispose](): void;
594
+ /**
595
+ * Return a reference to the attribute map.
596
+ *
597
+ * If the context was built with `NodeContext.with_lazy_attributes`, the
598
+ * map is materialized on the first call and cached for subsequent calls.
599
+ * If this method is never called, no allocation occurs for attributes.
600
+ */
601
+ attributes(): any;
580
602
  static default(): WasmNodeContext;
581
- constructor(nodeType: WasmNodeType, tagName: string, attributes: any, depth: number, indexInParent: number, isInline: boolean, parentTag?: string | null);
582
- attributes: any;
603
+ /**
604
+ * Promote any borrowed fields into owned storage so the context can outlive `'a`.
605
+ */
606
+ intoOwned(): WasmNodeContext;
607
+ constructor(nodeType: WasmNodeType, tagName: string, depth: number, indexInParent: number, isInline: boolean, parentTag?: string | null);
608
+ /**
609
+ * Construct a `NodeContext` with an owned attribute map.
610
+ *
611
+ * Prefer `NodeContext.with_lazy_attributes` (pub(crate)) inside the
612
+ * converter to avoid the eager `collect_tag_attributes` allocation.
613
+ */
614
+ static withOwnedAttributes(node_type: WasmNodeType, tag_name: string, attributes: any, depth: number, index_in_parent: number, parent_tag: string | null | undefined, is_inline: boolean): WasmNodeContext;
583
615
  depth: number;
584
616
  indexInParent: number;
585
617
  isInline: boolean;
@@ -774,7 +806,7 @@ export class WasmProcessingWarning {
774
806
  }
775
807
 
776
808
  /**
777
- * Structured data block (JSON-LD, Microdata, or RDFa).
809
+ * Structured data block (JSON-LD, Microdata, or `RDFa`).
778
810
  *
779
811
  * Represents machine-readable structured data found in the document.
780
812
  * JSON-LD blocks are collected as raw JSON strings for flexibility.