emf-converter 4.4.7 → 4.4.9

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/browser.js CHANGED
@@ -1369,21 +1369,21 @@ var require_decoder = __commonJS({
1369
1369
  successiveACState = 0;
1370
1370
  }
1371
1371
  }
1372
- function decodeMcu(component2, decode3, mcu2, row, col) {
1372
+ function decodeMcu(component2, decode4, mcu2, row, col) {
1373
1373
  var mcuRow = mcu2 / mcusPerLine | 0;
1374
1374
  var mcuCol = mcu2 % mcusPerLine;
1375
1375
  var blockRow = mcuRow * component2.v + row;
1376
1376
  var blockCol = mcuCol * component2.h + col;
1377
1377
  if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1378
1378
  return;
1379
- decode3(component2, component2.blocks[blockRow][blockCol]);
1379
+ decode4(component2, component2.blocks[blockRow][blockCol]);
1380
1380
  }
1381
- function decodeBlock(component2, decode3, mcu2) {
1381
+ function decodeBlock(component2, decode4, mcu2) {
1382
1382
  var blockRow = mcu2 / component2.blocksPerLine | 0;
1383
1383
  var blockCol = mcu2 % component2.blocksPerLine;
1384
1384
  if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
1385
1385
  return;
1386
- decode3(component2, component2.blocks[blockRow][blockCol]);
1386
+ decode4(component2, component2.blocks[blockRow][blockCol]);
1387
1387
  }
1388
1388
  var componentsLength = components.length;
1389
1389
  var component, i, j, k, n;
@@ -2104,12 +2104,12 @@ var require_decoder = __commonJS({
2104
2104
  return constructor;
2105
2105
  })();
2106
2106
  if (typeof module !== "undefined") {
2107
- module.exports = decode2;
2107
+ module.exports = decode3;
2108
2108
  } else if (typeof window !== "undefined") {
2109
2109
  window["jpeg-js"] = window["jpeg-js"] || {};
2110
- window["jpeg-js"].decode = decode2;
2110
+ window["jpeg-js"].decode = decode3;
2111
2111
  }
2112
- function decode2(jpegData, userOpts = {}) {
2112
+ function decode3(jpegData, userOpts = {}) {
2113
2113
  var defaultOpts = {
2114
2114
  // "undefined" means "Choose whether to transform colors based on the image’s color model."
2115
2115
  colorTransform: void 0,
@@ -2161,10 +2161,10 @@ var require_decoder = __commonJS({
2161
2161
  var require_jpeg_js = __commonJS({
2162
2162
  "node_modules/jpeg-js/index.js"(exports, module) {
2163
2163
  var encode2 = require_encoder();
2164
- var decode2 = require_decoder();
2164
+ var decode3 = require_decoder();
2165
2165
  module.exports = {
2166
2166
  encode: encode2,
2167
- decode: decode2
2167
+ decode: decode3
2168
2168
  };
2169
2169
  }
2170
2170
  });
@@ -4762,8 +4762,8 @@ var require_deflate2 = __commonJS({
4762
4762
  var Z_DEFAULT_COMPRESSION = -1;
4763
4763
  var Z_DEFAULT_STRATEGY = 0;
4764
4764
  var Z_DEFLATED = 8;
4765
- function Deflate(options) {
4766
- if (!(this instanceof Deflate)) return new Deflate(options);
4765
+ function Deflate(options2) {
4766
+ if (!(this instanceof Deflate)) return new Deflate(options2);
4767
4767
  this.options = utils.assign({
4768
4768
  level: Z_DEFAULT_COMPRESSION,
4769
4769
  method: Z_DEFLATED,
@@ -4772,7 +4772,7 @@ var require_deflate2 = __commonJS({
4772
4772
  memLevel: 8,
4773
4773
  strategy: Z_DEFAULT_STRATEGY,
4774
4774
  to: ""
4775
- }, options || {});
4775
+ }, options2 || {});
4776
4776
  var opt = this.options;
4777
4777
  if (opt.raw && opt.windowBits > 0) {
4778
4778
  opt.windowBits = -opt.windowBits;
@@ -4880,23 +4880,23 @@ var require_deflate2 = __commonJS({
4880
4880
  this.err = status;
4881
4881
  this.msg = this.strm.msg;
4882
4882
  };
4883
- function deflate(input, options) {
4884
- var deflator = new Deflate(options);
4883
+ function deflate(input, options2) {
4884
+ var deflator = new Deflate(options2);
4885
4885
  deflator.push(input, true);
4886
4886
  if (deflator.err) {
4887
4887
  throw deflator.msg || msg[deflator.err];
4888
4888
  }
4889
4889
  return deflator.result;
4890
4890
  }
4891
- function deflateRaw(input, options) {
4892
- options = options || {};
4893
- options.raw = true;
4894
- return deflate(input, options);
4891
+ function deflateRaw(input, options2) {
4892
+ options2 = options2 || {};
4893
+ options2.raw = true;
4894
+ return deflate(input, options2);
4895
4895
  }
4896
- function gzip(input, options) {
4897
- options = options || {};
4898
- options.gzip = true;
4899
- return deflate(input, options);
4896
+ function gzip(input, options2) {
4897
+ options2 = options2 || {};
4898
+ options2.gzip = true;
4899
+ return deflate(input, options2);
4900
4900
  }
4901
4901
  exports.Deflate = Deflate;
4902
4902
  exports.deflate = deflate;
@@ -6759,13 +6759,13 @@ var require_inflate2 = __commonJS({
6759
6759
  var ZStream = require_zstream();
6760
6760
  var GZheader = require_gzheader();
6761
6761
  var toString = Object.prototype.toString;
6762
- function Inflate(options) {
6763
- if (!(this instanceof Inflate)) return new Inflate(options);
6762
+ function Inflate(options2) {
6763
+ if (!(this instanceof Inflate)) return new Inflate(options2);
6764
6764
  this.options = utils.assign({
6765
6765
  chunkSize: 16384,
6766
6766
  windowBits: 0,
6767
6767
  to: ""
6768
- }, options || {});
6768
+ }, options2 || {});
6769
6769
  var opt = this.options;
6770
6770
  if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
6771
6771
  opt.windowBits = -opt.windowBits;
@@ -6773,7 +6773,7 @@ var require_inflate2 = __commonJS({
6773
6773
  opt.windowBits = -15;
6774
6774
  }
6775
6775
  }
6776
- if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {
6776
+ if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options2 && options2.windowBits)) {
6777
6777
  opt.windowBits += 32;
6778
6778
  }
6779
6779
  if (opt.windowBits > 15 && opt.windowBits < 48) {
@@ -6901,18 +6901,18 @@ var require_inflate2 = __commonJS({
6901
6901
  this.err = status;
6902
6902
  this.msg = this.strm.msg;
6903
6903
  };
6904
- function inflate(input, options) {
6905
- var inflator = new Inflate(options);
6904
+ function inflate(input, options2) {
6905
+ var inflator = new Inflate(options2);
6906
6906
  inflator.push(input, true);
6907
6907
  if (inflator.err) {
6908
6908
  throw inflator.msg || msg[inflator.err];
6909
6909
  }
6910
6910
  return inflator.result;
6911
6911
  }
6912
- function inflateRaw(input, options) {
6913
- options = options || {};
6914
- options.raw = true;
6915
- return inflate(input, options);
6912
+ function inflateRaw(input, options2) {
6913
+ options2 = options2 || {};
6914
+ options2.raw = true;
6915
+ return inflate(input, options2);
6916
6916
  }
6917
6917
  exports.Inflate = Inflate;
6918
6918
  exports.inflate = inflate;
@@ -10045,7 +10045,7 @@ function inflateZlibSync(input) {
10045
10045
  bitCnt -= n;
10046
10046
  return v;
10047
10047
  };
10048
- const decode2 = (h) => {
10048
+ const decode3 = (h) => {
10049
10049
  let code = 0;
10050
10050
  let first = 0;
10051
10051
  let index = 0;
@@ -10103,7 +10103,7 @@ function inflateZlibSync(input) {
10103
10103
  const clh = buildHuffman(cl, 19);
10104
10104
  const lens = new Uint8Array(hlit + hdist);
10105
10105
  for (let i = 0; i < hlit + hdist; ) {
10106
- const sym = decode2(clh);
10106
+ const sym = decode3(clh);
10107
10107
  if (sym < 16) {
10108
10108
  lens[i++] = sym;
10109
10109
  } else if (sym === 16) {
@@ -10123,7 +10123,7 @@ function inflateZlibSync(input) {
10123
10123
  throw new Error("inflate: invalid block type");
10124
10124
  }
10125
10125
  for (; ; ) {
10126
- const sym = decode2(lit);
10126
+ const sym = decode3(lit);
10127
10127
  if (sym < 256) {
10128
10128
  need(1);
10129
10129
  out[outLen++] = sym;
@@ -10132,7 +10132,7 @@ function inflateZlibSync(input) {
10132
10132
  } else {
10133
10133
  const li = sym - 257;
10134
10134
  const len = LENGTH_BASE[li] + bits(LENGTH_EXTRA[li]);
10135
- const di = decode2(dist);
10135
+ const di = decode3(dist);
10136
10136
  const d = DIST_BASE[di] + bits(DIST_EXTRA[di]);
10137
10137
  need(len);
10138
10138
  for (let k = 0; k < len; k++) {
@@ -10312,15 +10312,74 @@ async function decodePng(bytes) {
10312
10312
  return { width, height, data: out };
10313
10313
  }
10314
10314
 
10315
- // src/image-codec-fallback.ts
10315
+ // src/jpeg-decoder.ts
10316
10316
  var import_jpeg_js = __toESM(require_jpeg_js());
10317
+ var options = { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 };
10318
+ function decodeJpegPixels(bytes, colorTransform) {
10319
+ let sampling = [];
10320
+ let adobeTransform;
10321
+ let adobeOffset = -1;
10322
+ for (let position = 2; position + 4 <= bytes.length; ) {
10323
+ if (bytes[position] !== 255) break;
10324
+ if (bytes[position + 1] === 255) {
10325
+ position++;
10326
+ continue;
10327
+ }
10328
+ const marker = bytes[position + 1];
10329
+ if (marker === 218 || marker === 217) break;
10330
+ const length = bytes[position + 2] * 256 + bytes[position + 3];
10331
+ if (length < 2 || position + length + 2 > bytes.length) break;
10332
+ const start = position + 4;
10333
+ if ([192, 193, 194].includes(marker) && length >= 8) {
10334
+ const count = bytes[start + 5];
10335
+ if (length >= 8 + 3 * count) sampling = Array.from({ length: count }, (_, i) => ({ id: bytes[start + 6 + i * 3], h: bytes[start + 7 + i * 3] >> 4, v: bytes[start + 7 + i * 3] & 15 }));
10336
+ }
10337
+ if (marker === 238 && length >= 14 && String.fromCharCode(...bytes.subarray(start, start + 5)) === "Adobe") {
10338
+ adobeOffset = start + 11;
10339
+ adobeTransform = bytes[adobeOffset];
10340
+ }
10341
+ position += length + 2;
10342
+ }
10343
+ const transform = colorTransform ?? (adobeTransform !== void 0 ? adobeTransform !== 0 : !sampling.every((component, i) => component.id === [82, 71, 66][i]));
10344
+ if (sampling.length !== 3 || !transform) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform: sampling.length === 3 ? transform : colorTransform });
10345
+ const maxH = Math.max(...sampling.map((c) => c.h)), maxV = Math.max(...sampling.map((c) => c.v));
10346
+ if (sampling.some((c) => !c.h || !c.v || maxH % c.h || maxV % c.v)) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform });
10347
+ let encoded = bytes;
10348
+ if (adobeTransform) {
10349
+ encoded = bytes.slice();
10350
+ encoded[adobeOffset] = 0;
10351
+ }
10352
+ const raw = (0, import_jpeg_js.decode)(encoded, { ...options, colorTransform: false });
10353
+ const { width, height } = raw;
10354
+ const data = new Uint8Array(raw.data.length);
10355
+ const sample2 = (x, y, channel) => {
10356
+ const sx = maxH / sampling[channel].h, sy = maxV / sampling[channel].v;
10357
+ const px = Math.max(0, Math.min(Math.ceil(width / sx) - 1, (x + 0.5) / sx - 0.5));
10358
+ const py = Math.max(0, Math.min(Math.ceil(height / sy) - 1, (y + 0.5) / sy - 0.5));
10359
+ const ix = Math.floor(px), iy = Math.floor(py), fx = px - ix, fy = py - iy;
10360
+ const at = (xx, yy) => raw.data[(Math.min(height - 1, yy * sy) * width + Math.min(width - 1, xx * sx)) * 4 + channel];
10361
+ return (1 - fy) * ((1 - fx) * at(ix, iy) + fx * at(ix + 1, iy)) + fy * ((1 - fx) * at(ix, iy + 1) + fx * at(ix + 1, iy + 1));
10362
+ };
10363
+ const byte = (value) => Math.max(0, Math.min(255, Math.round(value)));
10364
+ for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
10365
+ const luma = sample2(x, y, 0), cb = sample2(x, y, 1) - 128, cr = sample2(x, y, 2) - 128;
10366
+ const offset = (y * width + x) * 4;
10367
+ data[offset] = byte(luma + 1.402 * cr);
10368
+ data[offset + 1] = byte(luma - 0.3441363 * cb - 0.71413636 * cr);
10369
+ data[offset + 2] = byte(luma + 1.772 * cb);
10370
+ data[offset + 3] = 255;
10371
+ }
10372
+ return { ...raw, data };
10373
+ }
10374
+
10375
+ // src/image-codec-fallback.ts
10317
10376
  var import_gifuct_js = __toESM(require_lib2());
10318
10377
  var UTIF = __toESM(require_UTIF());
10319
10378
 
10320
10379
  // src/tiff-group3.ts
10321
10380
  function normalizeGroup3(buffer, page) {
10322
- const options = Array.isArray(page.t292) ? Number(page.t292[0]) : 0;
10323
- if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (options & 3) !== 0) return buffer;
10381
+ const options2 = Array.isArray(page.t292) ? Number(page.t292[0]) : 0;
10382
+ if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (options2 & 3) !== 0) return buffer;
10324
10383
  const offsets = page.t273, lengths = page.t279;
10325
10384
  if (!Array.isArray(offsets) || !Array.isArray(lengths) || offsets.length !== lengths.length) return buffer;
10326
10385
  const source = new Uint8Array(buffer);
@@ -10354,16 +10413,50 @@ function normalizeGroup3(buffer, page) {
10354
10413
  return offset;
10355
10414
  });
10356
10415
  page.t279 = strips.map((strip) => strip.length);
10357
- page.t292 = [options | 1];
10416
+ page.t292 = [options2 | 1];
10358
10417
  return normalized.buffer;
10359
10418
  }
10360
10419
 
10420
+ // src/tiff-jpeg.ts
10421
+ function decodeJpegTiff(bytes, page) {
10422
+ const values = (tag2) => Array.isArray(page[tag2]) ? page[tag2].map(Number) : [];
10423
+ const first = (tag2, fallback = 0) => values(tag2)[0] ?? fallback;
10424
+ const photo = first("t262");
10425
+ if (first("t259") !== 7 || photo !== 2 && photo !== 6 || first("t277") !== 3 || first("t284", 1) !== 1 || values("t258").some((v) => v !== 8)) return null;
10426
+ const width = first("t256"), height = first("t257");
10427
+ const tiled = !!page.t322;
10428
+ const blockWidth = tiled ? first("t322") : width;
10429
+ const blockHeight = tiled ? first("t323") : first("t278", height);
10430
+ if (!Number.isInteger(blockWidth) || !Number.isInteger(blockHeight) || blockWidth <= 0 || blockHeight <= 0 || blockWidth > 8192 || blockHeight > 8192) throw new Error("Invalid TIFF JPEG block");
10431
+ const offsets = values(tiled ? "t324" : "t273");
10432
+ const lengths = values(tiled ? "t325" : "t279");
10433
+ const columns = Math.ceil(width / blockWidth), rows = Math.ceil(height / blockHeight);
10434
+ if (offsets.length !== columns * rows || lengths.length !== offsets.length) throw new Error("Invalid TIFF JPEG offsets");
10435
+ const tables = page.t347 instanceof Uint8Array ? page.t347 : new Uint8Array(values("t347"));
10436
+ const tableLength = tables.length >= 2 && tables[tables.length - 2] === 255 && tables[tables.length - 1] === 217 ? tables.length - 2 : tables.length;
10437
+ const result = new Uint8ClampedArray(width * height * 4);
10438
+ for (let block = 0; block < offsets.length; block++) {
10439
+ const offset = offsets[block], length = lengths[block];
10440
+ if (!Number.isInteger(offset) || !Number.isInteger(length) || offset < 0 || length <= 0 || offset + length > bytes.length) throw new Error("Invalid TIFF JPEG data");
10441
+ const skip = tableLength && bytes[offset] === 255 && bytes[offset + 1] === 216 ? 2 : 0;
10442
+ const jpeg = new Uint8Array(tableLength + length - skip);
10443
+ jpeg.set(tables.subarray(0, tableLength));
10444
+ jpeg.set(bytes.subarray(offset + skip, offset + length), tableLength);
10445
+ const decoded = decodeJpegPixels(jpeg, photo === 6);
10446
+ const x = block % columns * blockWidth, y = Math.floor(block / columns) * blockHeight;
10447
+ const copyWidth = Math.min(blockWidth, width - x), copyHeight = Math.min(blockHeight, height - y);
10448
+ if (decoded.width !== blockWidth || decoded.height < copyHeight || decoded.height > blockHeight) throw new Error("Invalid TIFF JPEG dimensions");
10449
+ for (let row = 0; row < copyHeight; row++) result.set(decoded.data.subarray(row * decoded.width * 4, (row * decoded.width + copyWidth) * 4), ((y + row) * width + x) * 4);
10450
+ }
10451
+ return result;
10452
+ }
10453
+
10361
10454
  // src/image-codec-fallback.ts
10362
10455
  var validSize = (w, h) => Number.isInteger(w) && Number.isInteger(h) && w > 0 && h > 0 && w <= 8192 && h <= 8192;
10363
10456
  function decodeImageCodecFallback(bytes) {
10364
10457
  try {
10365
10458
  if (bytes[0] === 255 && bytes[1] === 216) {
10366
- const p = (0, import_jpeg_js.decode)(bytes, { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 });
10459
+ const p = decodeJpegPixels(bytes);
10367
10460
  return validSize(p.width, p.height) ? { ...p, data: new Uint8ClampedArray(p.data) } : null;
10368
10461
  }
10369
10462
  if (bytes.length >= 13 && String.fromCharCode(...bytes.subarray(0, 6)).match(/^GIF8[79]a$/)) {
@@ -10397,6 +10490,9 @@ function decodeImageCodecFallback(bytes) {
10397
10490
  const pages = UTIF.decode(buffer);
10398
10491
  const page = pages.find((p) => p.t256 && p.t257);
10399
10492
  if (!page || !Array.isArray(page.t256) || !Array.isArray(page.t257) || !validSize(Number(page.t256[0]), Number(page.t257[0]))) return null;
10493
+ const jpeg = decodeJpegTiff(new Uint8Array(buffer), page);
10494
+ if (jpeg) return { data: jpeg, width: Number(page.t256[0]), height: Number(page.t257[0]) };
10495
+ if (Array.isArray(page.t259) && page.t259[0] === 32946) page.t259 = [8];
10400
10496
  UTIF.decodeImage(normalizeGroup3(buffer, page), page);
10401
10497
  const width = page.width, height = page.height;
10402
10498
  if (!validSize(width, height)) return null;
@@ -14314,13 +14410,13 @@ function writeJsx(node, depth, out, rootSpread) {
14314
14410
  }
14315
14411
  out.push(`${pad}</${node.tag}>`);
14316
14412
  }
14317
- function svgTreeToJsx(node, options = {}) {
14318
- const name = options.componentName ?? "Metafile";
14413
+ function svgTreeToJsx(node, options2 = {}) {
14414
+ const name = options2.componentName ?? "Metafile";
14319
14415
  if (!/^[A-Z][A-Za-z0-9_$]*$/.test(name)) {
14320
14416
  throw new TypeError(`svgTreeToJsx: componentName must be a PascalCase identifier, got ${JSON.stringify(name)}`);
14321
14417
  }
14322
- const ts = options.typescript ?? true;
14323
- const spread = options.spreadProps ?? true;
14418
+ const ts = options2.typescript ?? true;
14419
+ const spread = options2.spreadProps ?? true;
14324
14420
  const body = [];
14325
14421
  writeJsx(node, 2, body, spread);
14326
14422
  const params = spread ? ts ? "props: SVGProps<SVGSVGElement>" : "props" : "";
@@ -15763,11 +15859,11 @@ function mirror(p, n) {
15763
15859
  }
15764
15860
  return p;
15765
15861
  }
15766
- function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
15862
+ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false, fullVertical = false, edgeWidth = w, edgeHeight = h) {
15767
15863
  const k = blurKernel(radius);
15768
15864
  const taps = (k.length - 1) / 2;
15769
- const horizontalIndex = radius <= 16 && radius >= w ? (x) => Math.max(0, Math.min(w - 1, x)) : (x) => mirror(x, w);
15770
- const verticalIndex = radius <= 16 && radius >= h ? (y) => Math.max(0, Math.min(h - 1, y)) : (y) => mirror(y, h);
15865
+ const horizontalIndex = taps >= edgeWidth ? (x) => Math.max(0, Math.min(w - 1, x)) : (x) => mirror(x, w);
15866
+ const verticalIndex = taps >= edgeHeight ? (y) => Math.max(0, Math.min(h - 1, y)) : (y) => mirror(y, h);
15771
15867
  const out = new Float64Array(w * h * 4);
15772
15868
  for (let y = 0; y < h; y++) {
15773
15869
  const row = y * w * 4;
@@ -15793,7 +15889,7 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
15793
15889
  }
15794
15890
  if (taps > 0 && vRow >= 0 && vRow < h) {
15795
15891
  const horizontal = out.slice();
15796
- const endRow = Math.min(h, vRow + (radius <= 16 ? Math.ceil(h / w) : 1));
15892
+ const endRow = fullVertical ? h : Math.min(h, vRow + Math.ceil(h / w));
15797
15893
  for (let row = vRow; row < endRow; row++) {
15798
15894
  const col = new Float64Array(w * 4);
15799
15895
  for (let j = -taps; j <= taps; j++) {
@@ -15811,14 +15907,46 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
15811
15907
  }
15812
15908
  return out;
15813
15909
  }
15910
+ function blurReduction(radius) {
15911
+ return radius < 20 ? 1 : radius < 40 ? 2 : radius <= 80 ? 4 : radius < 160 ? 8 : 16;
15912
+ }
15913
+ function effectBlur(src, width, height, radius) {
15914
+ const factor = blurReduction(radius);
15915
+ if (factor === 1 || (width < 4 || height < 4) && (width % factor !== 0 || height % factor !== 0)) {
15916
+ return gdipBlur(src, width, height, radius);
15917
+ }
15918
+ const w = Math.ceil(width / factor);
15919
+ const h = Math.ceil(height / factor);
15920
+ const reduced = new Uint8ClampedArray(w * h * 4);
15921
+ for (let y = 0; y < h; y++) for (let x = 0; x < w; x++) {
15922
+ const x1 = Math.min(width, (x + 1) * factor), y1 = Math.min(height, (y + 1) * factor);
15923
+ const count = (x1 - x * factor) * (y1 - y * factor);
15924
+ for (let c = 0; c < 4; c++) {
15925
+ let sum = 0;
15926
+ for (let yy = y * factor; yy < y1; yy++) for (let xx = x * factor; xx < x1; xx++) sum += src[(yy * width + xx) * 4 + c];
15927
+ reduced[(y * w + x) * 4 + c] = Math.floor(sum / count);
15928
+ }
15929
+ }
15930
+ const filtered = gdipBlur(reduced, w, h, radius / factor, 0, false, true, Math.floor(width / factor), Math.floor(height / factor));
15931
+ for (let i = 0; i < filtered.length; i++) filtered[i] = Math.round(filtered[i]);
15932
+ const out = new Float64Array(src.length);
15933
+ for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
15934
+ const px = clamp((x + 0.5) / factor - 0.5, 0, w - 1), py = clamp((y + 0.5) / factor - 0.5, 0, h - 1);
15935
+ const ix = Math.floor(px), iy = Math.floor(py), fx = px - ix, fy = py - iy;
15936
+ const a = (iy * w + ix) * 4, b = (iy * w + Math.min(w - 1, ix + 1)) * 4;
15937
+ const d = (Math.min(h - 1, iy + 1) * w + ix) * 4, e = (Math.min(h - 1, iy + 1) * w + Math.min(w - 1, ix + 1)) * 4;
15938
+ for (let c = 0; c < 4; c++) out[(y * width + x) * 4 + c] = Math.round((1 - fy) * ((1 - fx) * filtered[a + c] + fx * filtered[b + c]) + fy * ((1 - fx) * filtered[d + c] + fx * filtered[e + c]));
15939
+ }
15940
+ return out;
15941
+ }
15814
15942
  function applyBlur(src, w, h, radius) {
15815
- return Uint8ClampedArray.from(gdipBlur(src, w, h, radius), Math.round);
15943
+ return Uint8ClampedArray.from(effectBlur(src, w, h, radius), Math.round);
15816
15944
  }
15817
15945
  function sharpenGain(_radius, amount) {
15818
15946
  return roundHalfDown(64 * amount / (250 - 2 * amount)) / 64;
15819
15947
  }
15820
15948
  function applySharpen(src, w, h, radius, amount) {
15821
- const blurred = gdipBlur(src, w, h, radius);
15949
+ const blurred = effectBlur(src, w, h, radius);
15822
15950
  const gain = sharpenGain(radius, amount);
15823
15951
  const out = new Uint8ClampedArray(src);
15824
15952
  for (let i = 0; i < src.length; i += 4) {
@@ -18640,11 +18768,11 @@ function capFigures(path, closeAll) {
18640
18768
  }, [1, 0, 0, 1, 0, 0]);
18641
18769
  return closeAll ? figures.map((f) => ({ ...f, closed: true })) : figures;
18642
18770
  }
18643
- function customCapGeometry(figures, width, start, end, options = {}) {
18771
+ function customCapGeometry(figures, width, start, end, options2 = {}) {
18644
18772
  const out = [];
18645
18773
  const capped = [];
18646
18774
  const polygons = [];
18647
- const minFill = options.minFillScale ?? 2;
18775
+ const minFill = options2.minFillScale ?? 2;
18648
18776
  for (const fig of figures) {
18649
18777
  if (fig.closed || !start && !end) {
18650
18778
  out.push(fig);
@@ -18697,7 +18825,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
18697
18825
  const pen = {
18698
18826
  // GDI+'s widener never makes an outline thinner than one device pixel.
18699
18827
  half: Math.max(ws, 1) / 2,
18700
- join: (options.widenJoin ?? ((j) => j))(cap.strokeJoin),
18828
+ join: (options2.widenJoin ?? ((j) => j))(cap.strokeJoin),
18701
18829
  miterLimit: 10,
18702
18830
  startCap: cap.strokeStartCap,
18703
18831
  endCap: cap.strokeEndCap,
@@ -18707,7 +18835,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
18707
18835
  compound: null,
18708
18836
  inset: false
18709
18837
  };
18710
- polygons.push(...(options.widen ?? widenFigures)(capFigures(placed, false), pen).map((q) => q.reverse()));
18838
+ polygons.push(...(options2.widen ?? widenFigures)(capFigures(placed, false), pen).map((q) => q.reverse()));
18711
18839
  }
18712
18840
  };
18713
18841
  if (start) {
@@ -20422,7 +20550,7 @@ var BLEND_MODES = /* @__PURE__ */ new Set([
20422
20550
  "luminosity"
20423
20551
  ]);
20424
20552
  var SvgContext = class {
20425
- constructor(width, height, options = {}) {
20553
+ constructor(width, height, options2 = {}) {
20426
20554
  this.nextId = 0;
20427
20555
  this.stack = [];
20428
20556
  /** The current path, in DEVICE space (see `canvas-path.ts`). */
@@ -20433,9 +20561,9 @@ var SvgContext = class {
20433
20561
  this.group = null;
20434
20562
  this.images = [];
20435
20563
  this.canvas = { width, height, svgContext: this };
20436
- this.shadow = options.shadow ?? null;
20437
- this.imageResampling = options.imageResampling ?? "renderer";
20438
- this.idPrefix = options.idPrefix ?? "emf-";
20564
+ this.shadow = options2.shadow ?? null;
20565
+ this.imageResampling = options2.imageResampling ?? "renderer";
20566
+ this.idPrefix = options2.idPrefix ?? "emf-";
20439
20567
  this.state = {
20440
20568
  transform: [...IDENTITY3],
20441
20569
  fillStyle: "#000000",
@@ -21438,7 +21566,7 @@ var SvgContext = class {
21438
21566
  * Encodes every pending raster payload and returns the finished `<svg>`
21439
21567
  * tree. Call once, after replay (and deferred images) are complete.
21440
21568
  */
21441
- async toTree(options = {}) {
21569
+ async toTree(options2 = {}) {
21442
21570
  const cache2 = /* @__PURE__ */ new Map();
21443
21571
  for (const img of this.images) {
21444
21572
  let url = cache2.get(img.payload);
@@ -21450,7 +21578,7 @@ var SvgContext = class {
21450
21578
  }
21451
21579
  const { width, height } = this.canvas;
21452
21580
  const attrs = { xmlns: "http://www.w3.org/2000/svg" };
21453
- if (options.includeSize ?? true) {
21581
+ if (options2.includeSize ?? true) {
21454
21582
  attrs.width = width;
21455
21583
  attrs.height = height;
21456
21584
  }
@@ -32275,12 +32403,12 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
32275
32403
  if (!fonts) {
32276
32404
  return false;
32277
32405
  }
32278
- const options = view.getUint32(dataOff + 44, true);
32406
+ const options2 = view.getUint32(dataOff + 44, true);
32279
32407
  const codes = [];
32280
32408
  for (let i = 0; i < nChars; i++) {
32281
32409
  codes.push(view.getUint16(offset + offString + i * 2, true));
32282
32410
  }
32283
- const pdy = (options & ETO_PDY) !== 0;
32411
+ const pdy = (options2 & ETO_PDY) !== 0;
32284
32412
  const raw = readDxArray(view, offset, dataOff, pdy ? nChars * 2 : nChars, viewEnd);
32285
32413
  let dx = raw;
32286
32414
  let dy = null;
@@ -32294,10 +32422,10 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
32294
32422
  }
32295
32423
  const adv = drawGdiTextCall(ctx, fonts, state, {
32296
32424
  codes,
32297
- glyphIndices: (options & ETO_GLYPH_INDEX) !== 0,
32425
+ glyphIndices: (options2 & ETO_GLYPH_INDEX) !== 0,
32298
32426
  x: view.getInt32(dataOff + 28, true),
32299
32427
  y: view.getInt32(dataOff + 32, true),
32300
- options,
32428
+ options: options2,
32301
32429
  rect: {
32302
32430
  left: view.getInt32(dataOff + 48, true),
32303
32431
  top: view.getInt32(dataOff + 52, true),
@@ -32439,7 +32567,7 @@ function handleExtTextOutW(rCtx, offset, dataOff, recSize) {
32439
32567
  }
32440
32568
  return true;
32441
32569
  }
32442
- function drawTextCall(rCtx, x, y, codes, options, rect, dx) {
32570
+ function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
32443
32571
  const n = codes.length;
32444
32572
  const offString = 76;
32445
32573
  const offDx = offString + n * 2 + 3 & -4;
@@ -32448,7 +32576,7 @@ function drawTextCall(rCtx, x, y, codes, options, rect, dx) {
32448
32576
  const view = new DataView(new ArrayBuffer(size));
32449
32577
  view.setUint32(44, n, true);
32450
32578
  view.setUint32(48, offString, true);
32451
- view.setUint32(52, options, true);
32579
+ view.setUint32(52, options2, true);
32452
32580
  view.setInt32(36, x, true);
32453
32581
  view.setInt32(40, y, true);
32454
32582
  view.setInt32(56, rect[0], true);
@@ -32492,7 +32620,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
32492
32620
  const e = arrayStart + i * 40;
32493
32621
  const x = view.getInt32(e, true), y = view.getInt32(e + 4, true);
32494
32622
  const n = view.getUint32(e + 8, true), offString = view.getUint32(e + 12, true);
32495
- const options = view.getUint32(e + 16, true);
32623
+ const options2 = view.getUint32(e + 16, true);
32496
32624
  const rect = [view.getInt32(e + 20, true), view.getInt32(e + 24, true), view.getInt32(e + 28, true), view.getInt32(e + 32, true)];
32497
32625
  const offDx = view.getUint32(e + 36, true);
32498
32626
  const unit = wide ? 2 : 1;
@@ -32500,13 +32628,13 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
32500
32628
  const ansi = wide ? null : readAnsiRecord(view, offset + offString, n, charSet);
32501
32629
  const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
32502
32630
  let dx = null;
32503
- const pdy = (options & ETO_PDY) !== 0;
32631
+ const pdy = (options2 & ETO_PDY) !== 0;
32504
32632
  const dxCount = n * (pdy ? 2 : 1);
32505
32633
  if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
32506
32634
  dx = Array.from({ length: dxCount }, (_, j) => view.getInt32(offset + offDx + j * 4, true));
32507
32635
  if (!wide) dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
32508
32636
  }
32509
- drawTextCall(rCtx, x, y, codes, options, rect, dx);
32637
+ drawTextCall(rCtx, x, y, codes, options2, rect, dx);
32510
32638
  }
32511
32639
  return true;
32512
32640
  }
@@ -32515,13 +32643,13 @@ function handleSmallTextOut(rCtx, offset, dataOff, recSize) {
32515
32643
  const end = Math.min(view.byteLength, offset + recSize);
32516
32644
  if (recSize < 36) return true;
32517
32645
  const x = view.getInt32(dataOff, true), y = view.getInt32(dataOff + 4, true);
32518
- const n = view.getUint32(dataOff + 8, true), options = view.getUint32(dataOff + 12, true);
32519
- const small = (options & 512) !== 0, noRect = (options & 256) !== 0;
32646
+ const n = view.getUint32(dataOff + 8, true), options2 = view.getUint32(dataOff + 12, true);
32647
+ const small = (options2 & 512) !== 0, noRect = (options2 & 256) !== 0;
32520
32648
  const base = dataOff + 28 + (noRect ? 0 : 16);
32521
32649
  if (base > end || n > Math.floor((end - base) / (small ? 1 : 2))) return true;
32522
32650
  const rect = noRect ? [0, 0, 0, 0] : [view.getInt32(dataOff + 28, true), view.getInt32(dataOff + 32, true), view.getInt32(dataOff + 36, true), view.getInt32(dataOff + 40, true)];
32523
32651
  const codes = small ? Array.from({ length: n }, (_, i) => view.getUint8(base + i)) : Array.from({ length: n }, (_, i) => view.getUint16(base + i * 2, true));
32524
- drawTextCall(rCtx, x, y, codes, options, rect, null);
32652
+ drawTextCall(rCtx, x, y, codes, options2, rect, null);
32525
32653
  return true;
32526
32654
  }
32527
32655
  function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
@@ -32535,20 +32663,20 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
32535
32663
  const end = Math.min(view.byteLength, offset + recSize);
32536
32664
  if (recSize < 76) return true;
32537
32665
  const x = view.getInt32(dataOff + 28, true), y = view.getInt32(dataOff + 32, true);
32538
- const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options = view.getUint32(dataOff + 44, true);
32666
+ const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
32539
32667
  if (!strOff || strOff > end - offset) return true;
32540
32668
  if (n > end - (offset + strOff)) return true;
32541
32669
  const ansi = readAnsiRecord(view, offset + strOff, n, state.fontDetails?.charSet ?? 1);
32542
32670
  const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
32543
32671
  const offDx = view.getUint32(dataOff + 64, true);
32544
32672
  let dx = null;
32545
- const pdy = (options & ETO_PDY) !== 0;
32673
+ const pdy = (options2 & ETO_PDY) !== 0;
32546
32674
  const dxCount = n * (pdy ? 2 : 1);
32547
32675
  if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
32548
32676
  dx = Array.from({ length: dxCount }, (_, i) => view.getInt32(offset + offDx + i * 4, true));
32549
32677
  dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
32550
32678
  }
32551
- drawTextCall(rCtx, x, y, ansi.codes, options, rect, dx);
32679
+ drawTextCall(rCtx, x, y, ansi.codes, options2, rect, dx);
32552
32680
  return true;
32553
32681
  }
32554
32682
  return false;
@@ -33529,8 +33657,8 @@ function widenBracketPath(rCtx) {
33529
33657
  if (rCtx.inPath || !rCtx.rasterPath || (state.penStyle & 15) === 5) {
33530
33658
  return;
33531
33659
  }
33532
- const options = penIsCosmetic(rCtx) ? { width: 16, cap: "round", join: "round", miterLimit: state.miterLimit ?? 10 } : penWidenOptions(rCtx);
33533
- const polys = widenPath(rCtx.rasterPath, options);
33660
+ const options2 = penIsCosmetic(rCtx) ? { width: 16, cap: "round", join: "round", miterLimit: state.miterLimit ?? 10 } : penWidenOptions(rCtx);
33661
+ const polys = widenPath(rCtx.rasterPath, options2);
33534
33662
  const path = new GdiRasterPath();
33535
33663
  for (const poly of polys) {
33536
33664
  if (poly.length < 4) {
@@ -36311,7 +36439,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
36311
36439
  }
36312
36440
  return allDeferredImages;
36313
36441
  }
36314
- function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options) {
36442
+ function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options2) {
36315
36443
  const view = new DataView(bytes);
36316
36444
  const header = parseEmfHeader(view);
36317
36445
  if (!header) {
@@ -36322,11 +36450,11 @@ function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options) {
36322
36450
  const left = -e / a;
36323
36451
  const top = -f / d;
36324
36452
  const bounds2 = { left, top, right: left + canvasW / a, bottom: top + canvasH / d };
36325
- return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1, options);
36453
+ return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1, options2);
36326
36454
  }
36327
36455
  const bounds = { left: 0, top: 0, right: canvasW, bottom: canvasH };
36328
36456
  return replayEmfRecords(view, ctx, bounds, canvasW, canvasH, 1, {
36329
- ...options,
36457
+ ...options2,
36330
36458
  plusBaseTransform: toCanvas,
36331
36459
  gdiDrawing: false
36332
36460
  });
@@ -37870,8 +37998,8 @@ function wmfExtTextOut(p, dataOff, recEnd) {
37870
37998
  const y = view.getInt16(dataOff, true);
37871
37999
  const x = view.getInt16(dataOff + 2, true);
37872
38000
  const n = view.getInt16(dataOff + 4, true);
37873
- const options = view.getUint16(dataOff + 6, true);
37874
- const hasRect = (options & (ETO_OPAQUE | ETO_CLIPPED)) !== 0;
38001
+ const options2 = view.getUint16(dataOff + 6, true);
38002
+ const hasRect = (options2 & (ETO_OPAQUE | ETO_CLIPPED)) !== 0;
37875
38003
  const strOff = dataOff + 8 + (hasRect ? 8 : 0);
37876
38004
  const rect = hasRect && dataOff + 16 <= recEnd ? [view.getInt16(dataOff + 8, true), view.getInt16(dataOff + 10, true), view.getInt16(dataOff + 12, true), view.getInt16(dataOff + 14, true)] : null;
37877
38005
  const count = Math.max(0, n);
@@ -37891,12 +38019,12 @@ function wmfExtTextOut(p, dataOff, recEnd) {
37891
38019
  }
37892
38020
  }
37893
38021
  if (count === 0) {
37894
- if (rect && options & ETO_OPAQUE) {
37895
- playText(p, { x, y, bytes: [32], options, rect, dx: [0] });
38022
+ if (rect && options2 & ETO_OPAQUE) {
38023
+ playText(p, { x, y, bytes: [32], options: options2, rect, dx: [0] });
37896
38024
  }
37897
38025
  return;
37898
38026
  }
37899
- playText(p, { x, y, bytes, options, rect, dx });
38027
+ playText(p, { x, y, bytes, options: options2, rect, dx });
37900
38028
  }
37901
38029
 
37902
38030
  // src/wmf-replay.ts
@@ -38366,7 +38494,7 @@ function replayWmfRecords(view, ctx, header, canvasW, canvasH, replayOptions = {
38366
38494
 
38367
38495
  // src/emf-converter.ts
38368
38496
  var MAX_METAFILE_RECURSION = 3;
38369
- async function replayMetafile(buffer, options, createSurface) {
38497
+ async function replayMetafile(buffer, options2, createSurface) {
38370
38498
  emfLog(`replayMetafile: input buffer ${buffer.byteLength} bytes`);
38371
38499
  if (buffer.byteLength >= 16) {
38372
38500
  const hdrBytes = new Uint8Array(buffer, 0, 16);
@@ -38374,7 +38502,7 @@ async function replayMetafile(buffer, options, createSurface) {
38374
38502
  `replayMetafile: first 16 bytes: [${Array.from(hdrBytes).map((b) => b.toString(16).padStart(2, "0")).join(" ")}]`
38375
38503
  );
38376
38504
  }
38377
- const opts = options ?? {};
38505
+ const opts = options2 ?? {};
38378
38506
  const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
38379
38507
  let view = new DataView(buffer);
38380
38508
  let emfHeader = null;
@@ -38580,12 +38708,12 @@ async function processDeferredImages(ctx, deferredImages, recursionDepth) {
38580
38708
  ctx.setTransform(1, 0, 0, 1, 0, 0);
38581
38709
  return complete;
38582
38710
  }
38583
- async function convertMetafileToDataUrl(buffer, options, recursionDepth = 0) {
38711
+ async function convertMetafileToDataUrl(buffer, options2, recursionDepth = 0) {
38584
38712
  await ensureNodeCanvasModule();
38585
38713
  if (recursionDepth > MAX_METAFILE_RECURSION) {
38586
38714
  return null;
38587
38715
  }
38588
- const opts = { ...options, gdiAntialias: options?.gdiAntialias ?? false };
38716
+ const opts = { ...options2, gdiAntialias: options2?.gdiAntialias ?? false };
38589
38717
  let canvas = null;
38590
38718
  const result = await replayMetafile(buffer, opts, (w, h) => {
38591
38719
  const setup = createCanvas(
@@ -38654,7 +38782,7 @@ async function resampleExact(bytes, spec, surface) {
38654
38782
  }
38655
38783
  return resampleImage(pixels.data, pixels.width, pixels.height, spec, { w: surface.width, h: surface.height });
38656
38784
  }
38657
- async function processDeferredImagesSvg(svg, deferredImages, options, recursionDepth) {
38785
+ async function processDeferredImagesSvg(svg, deferredImages, options2, recursionDepth) {
38658
38786
  for (let idx = 0; idx < deferredImages.length; idx++) {
38659
38787
  let img = deferredImages[idx];
38660
38788
  try {
@@ -38677,7 +38805,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38677
38805
  }
38678
38806
  const nested = await convertMetafileToSvgTree(
38679
38807
  bytes,
38680
- { ...options, includeSize: true, idPrefix: void 0 },
38808
+ { ...options2, includeSize: true, idPrefix: void 0 },
38681
38809
  recursionDepth + 1
38682
38810
  );
38683
38811
  if (nested) {
@@ -38714,7 +38842,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38714
38842
  continue;
38715
38843
  }
38716
38844
  const slot = img.svgSlot ?? svg.reserveSlot();
38717
- if (img.resample && options.imageResampling === "exact" && !img.isMetafile) {
38845
+ if (img.resample && options2.imageResampling === "exact" && !img.isMetafile) {
38718
38846
  const block = await resampleExact(bytes, img.resample, svg.canvas);
38719
38847
  if (block) {
38720
38848
  svg.fillSlot(slot, { kind: "rgba", data: block.rgba, width: block.w, height: block.h }, [1, 0, 0, 1, 0, 0], block.x, block.y, block.w, block.h);
@@ -38734,16 +38862,16 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
38734
38862
  }
38735
38863
  }
38736
38864
  }
38737
- async function convertMetafileToSvgTree(buffer, options, recursionDepth = 0) {
38738
- const svg = await replayToSvgContext(buffer, options, recursionDepth);
38739
- return svg ? svg.toTree({ includeSize: options?.includeSize }) : null;
38865
+ async function convertMetafileToSvgTree(buffer, options2, recursionDepth = 0) {
38866
+ const svg = await replayToSvgContext(buffer, options2, recursionDepth);
38867
+ return svg ? svg.toTree({ includeSize: options2?.includeSize }) : null;
38740
38868
  }
38741
- async function replayToSvgContext(buffer, options, recursionDepth = 0) {
38869
+ async function replayToSvgContext(buffer, options2, recursionDepth = 0) {
38742
38870
  await ensureNodeCanvasModule();
38743
38871
  if (recursionDepth > MAX_METAFILE_RECURSION) {
38744
38872
  return null;
38745
38873
  }
38746
- const opts = options ?? {};
38874
+ const opts = options2 ?? {};
38747
38875
  const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
38748
38876
  const idPrefix = opts.idPrefix ?? `emf${++svgDocumentCounter}-`;
38749
38877
  let svg = null;
@@ -38760,12 +38888,12 @@ async function replayToSvgContext(buffer, options, recursionDepth = 0) {
38760
38888
  await processDeferredImagesSvg(target, result.deferredImages, opts, recursionDepth);
38761
38889
  return target;
38762
38890
  }
38763
- async function convertMetafileToSvg(buffer, options) {
38764
- const tree = await convertMetafileToSvgTree(buffer, options);
38891
+ async function convertMetafileToSvg(buffer, options2) {
38892
+ const tree = await convertMetafileToSvgTree(buffer, options2);
38765
38893
  return tree ? svgTreeToString(tree) : null;
38766
38894
  }
38767
- async function convertMetafileToSvgDataUrl(buffer, options) {
38768
- const markup = await convertMetafileToSvg(buffer, options);
38895
+ async function convertMetafileToSvgDataUrl(buffer, options2) {
38896
+ const markup = await convertMetafileToSvg(buffer, options2);
38769
38897
  return markup ? svgMarkupToDataUrl(markup) : null;
38770
38898
  }
38771
38899