obsidian-integration-testing 10.2.0 → 10.3.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.
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var fit_screenshot_exports = {};
30
20
  __export(fit_screenshot_exports, {
@@ -32,6 +22,7 @@ __export(fit_screenshot_exports, {
32
22
  fitScreenshotToCanvas: () => fitScreenshotToCanvas
33
23
  });
34
24
  module.exports = __toCommonJS(fit_screenshot_exports);
25
+ var import_sharp_loader = require("./sharp-loader.cjs");
35
26
  const DEFAULT_BLUR_SIGMA = 24;
36
27
  const MARGIN_SIDES = 2;
37
28
  function computeFitToCanvas(params) {
@@ -75,7 +66,7 @@ async function fitScreenshotToCanvas(bytes, options) {
75
66
  canvasHeightInPixels,
76
67
  canvasWidthInPixels
77
68
  } = options;
78
- const sharp = await importSharp();
69
+ const sharp = await (0, import_sharp_loader.importSharp)("fitScreenshotToCanvas");
79
70
  const metadata = await sharp(bytes).metadata();
80
71
  const sourceWidthInPixels = metadata.width;
81
72
  const sourceHeightInPixels = metadata.height;
@@ -97,18 +88,6 @@ async function fitScreenshotToCanvas(bytes, options) {
97
88
  }]).png().toBuffer();
98
89
  return new Uint8Array(composed);
99
90
  }
100
- async function importSharp() {
101
- try {
102
- const sharpModule = await import("sharp");
103
- const factory = sharpModule.default;
104
- return factory;
105
- } catch (error) {
106
- throw new Error(
107
- 'fitScreenshotToCanvas needs the optional peer dependency "sharp". Install it in the consuming project (npm i -D sharp).',
108
- { cause: error }
109
- );
110
- }
111
- }
112
91
  function roundToMatchingParity(value, target) {
113
92
  const rounded = Math.round(value);
114
93
  if ((target - rounded) % MARGIN_SIDES === 0) {
@@ -121,4 +100,4 @@ function roundToMatchingParity(value, target) {
121
100
  computeFitToCanvas,
122
101
  fitScreenshotToCanvas
123
102
  });
124
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZpdC1zY3JlZW5zaG90LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRml0cyBhIHNjcmVlbnNob3Qgb250byBhIGNhbnZhcyBvZiBhIGRpZmZlcmVudCBhc3BlY3QgcmF0aW8gd2l0aG91dCBjcm9wcGluZ1xuICogaXQgb3IgZGlzdG9ydGluZyBpdCwgZmlsbGluZyB0aGUgbGVmdG92ZXIgbWFyZ2lucyB3aXRoIGEgYmx1cnJlZCwgZW5sYXJnZWRcbiAqIGNvcHkgb2YgdGhlIHNhbWUgaW1hZ2UgKHRoZSBcInBpbGxhcmJveFwiIHRyZWF0bWVudCB1c2VkIGJ5IHN0b3JlIGxpc3RpbmdzKS5cbiAqXG4gKiBUaGUgbW90aXZhdGluZyBjYXNlIGlzIGEgbW9iaWxlIHN0b3JlIHNjcmVlbnNob3QuIFRoZSBBbmRyb2lkIGVtdWxhdG9yJ3NcbiAqIGZyYW1lYnVmZmVyIGlzIHdoYXRldmVyIHRoZSBBVkQncyBzY3JlZW4gaXMgXHUyMDE0IGEgUGl4ZWwgMTAgUHJvIFhMIGlzIDEzNDR4Mjk5MixcbiAqIHJvdWdobHkgOToyMCBcdTIwMTQgd2hpbGUgdGhlIGNvbW11bml0eSBzdG9yZSBhc2tzIGZvciA5MDB4MTYwMCAoOToxNikuIENyb3BwaW5nXG4gKiB0byA5OjE2IHRocm93cyBhd2F5IGEgZmlmdGggb2YgdGhlIGZyYW1lLCBhbmQgc3RyZXRjaGluZyBkaXN0b3J0cyB0aGUgVUksIHNvXG4gKiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHRvIGZpdCB0aGUgSEVJR0hUIGFuZCB0aGUgdHdvIHNpZGUgbWFyZ2lucyBhcmUgZmlsbGVkLlxuICpcbiAqIFRoZSBnZW9tZXRyeSBpcyBhIHB1cmUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHVuaXQtdGVzdGVkOyB0aGUgcGl4ZWwgd29yayBuZWVkc1xuICogYHNoYXJwYCwgd2hpY2ggaXMgYW4gT1BUSU9OQUwgcGVlciBkZXBlbmRlbmN5IFx1MjAxNCBkZWNsYXJlZCByYXRoZXIgdGhhbiBidW5kbGVkXG4gKiBiZWNhdXNlIG9ubHkgc2NyZWVuc2hvdCBjYXB0dXJlIG5lZWRzIGl0LCBhbmQgaXQgc2hpcHMgcGxhdGZvcm0tc3BlY2lmaWNcbiAqIG5hdGl2ZSBiaW5hcmllcyB0aGF0IGV2ZXJ5IG90aGVyIGNvbnN1bWVyIHdvdWxkIHBheSBmb3IuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29tcHV0ZUZpdFRvQ2FudmFzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSB0YXJnZXQgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBjYW52YXNIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgdGFyZ2V0IGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FudmFzV2lkdGhJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHNvdXJjZSBpbWFnZSwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIHNvdXJjZSBpbWFnZSwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlV2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBmaXRTY3JlZW5zaG90VG9DYW52YXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpdFNjcmVlbnNob3RUb0NhbnZhc09wdGlvbnMge1xuICAvKipcbiAgICogR2F1c3NpYW4gYmx1ciBzdHJlbmd0aCBhcHBsaWVkIHRvIHRoZSBtYXJnaW4gZmlsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDI0YFxuICAgKi9cbiAgcmVhZG9ubHkgYmx1clNpZ21hPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHRhcmdldCBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbnZhc0hlaWdodEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSB0YXJnZXQgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBjYW52YXNXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hlcmUgdGhlIHNjYWxlZCBzb3VyY2UgaW1hZ2Ugc2l0cyBvbiB0aGUgY2FudmFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpdFRvQ2FudmFzR2VvbWV0cnkge1xuICAvKipcbiAgICogV2lkdGggb2YgZWFjaCBzaWRlIG1hcmdpbiwgaW4gcGl4ZWxzLiBCb3RoIHNpZGVzIGFyZSBlcXVhbCBieSBjb25zdHJ1Y3Rpb24uXG4gICAqL1xuICByZWFkb25seSBtYXJnaW5JblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMZWZ0IG9mZnNldCBvZiB0aGUgc2NhbGVkIGltYWdlIG9uIHRoZSBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IG9mZnNldFhJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUb3Agb2Zmc2V0IG9mIHRoZSBzY2FsZWQgaW1hZ2Ugb24gdGhlIGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0WUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCB0aGUgc291cmNlIGlzIHNjYWxlZCB0bywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGVkSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggdGhlIHNvdXJjZSBpcyBzY2FsZWQgdG8sIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IHNjYWxlZFdpZHRoSW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIGxheWVyIHBhc3NlZCB0byBgc2hhcnBgJ3MgYGNvbXBvc2l0ZWAuXG4gKi9cbmludGVyZmFjZSBTaGFycENvbXBvc2l0ZUxheWVyIHtcbiAgcmVhZG9ubHkgaW5wdXQ6IEJ1ZmZlcjtcbiAgcmVhZG9ubHkgbGVmdDogbnVtYmVyO1xuICByZWFkb25seSB0b3A6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgYHNoYXJwYCBlbnRyeSBwb2ludCB0aGlzIG1vZHVsZSB1c2VzLCBkZXNjcmliZWQgc3RydWN0dXJhbGx5IHNvIHRoZSBtb2R1bGVcbiAqIHR5cGUtY2hlY2tzIGFnYWluc3QgdGhlIG9wdGlvbmFsIHBlZXIgcmF0aGVyIHRoYW4gZGVwZW5kaW5nIG9uIGl0cyB0eXBlcy5cbiAqL1xudHlwZSBTaGFycEZhY3RvcnkgPSAoaW5wdXQ6IFVpbnQ4QXJyYXkpID0+IFNoYXJwSW5zdGFuY2U7XG5cbi8qKlxuICogT25lIGBzaGFycGAgcGlwZWxpbmUuXG4gKi9cbmludGVyZmFjZSBTaGFycEluc3RhbmNlIHtcbiAgYmx1cih0aGlzOiB2b2lkLCBzaWdtYTogbnVtYmVyKTogU2hhcnBJbnN0YW5jZTtcbiAgY29tcG9zaXRlKHRoaXM6IHZvaWQsIGxheWVyczogU2hhcnBDb21wb3NpdGVMYXllcltdKTogU2hhcnBJbnN0YW5jZTtcbiAgbWV0YWRhdGEodGhpczogdm9pZCk6IFByb21pc2U8U2hhcnBNZXRhZGF0YT47XG4gIHBuZyh0aGlzOiB2b2lkKTogU2hhcnBJbnN0YW5jZTtcbiAgcmVzaXplKHRoaXM6IHZvaWQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvcHRpb25zPzogU2hhcnBSZXNpemVPcHRpb25zKTogU2hhcnBJbnN0YW5jZTtcbiAgdG9CdWZmZXIodGhpczogdm9pZCk6IFByb21pc2U8QnVmZmVyPjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGBzaGFycGAncyBtZXRhZGF0YSB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIFNoYXJwTWV0YWRhdGEge1xuICByZWFkb25seSBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYHNoYXJwYCdzIHJlc2l6ZSBvcHRpb25zIHRoaXMgbW9kdWxlIHNldHMuXG4gKi9cbmludGVyZmFjZSBTaGFycFJlc2l6ZU9wdGlvbnMge1xuICByZWFkb25seSBmaXQ6ICdjb3ZlcicgfCAnZmlsbCc7XG59XG5cbi8qKlxuICogRGVmYXVsdCBHYXVzc2lhbiBibHVyIHN0cmVuZ3RoIGZvciB0aGUgbWFyZ2luIGZpbGw6IHNvZnQgZW5vdWdoIHRoYXQgbm9cbiAqIGRldGFpbCByZWFkcyBhcyBjb250ZW50LCBnZW50bGUgZW5vdWdoIHRvIGtlZXAgdGhlIGZyYW1lJ3MgY29sb3JzLlxuICovXG5jb25zdCBERUZBVUxUX0JMVVJfU0lHTUEgPSAyNDtcblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHNpZGUgbWFyZ2lucyB0aGUgbGVmdG92ZXIgd2lkdGggaXMgc3BsaXQgYmV0d2Vlbi5cbiAqL1xuY29uc3QgTUFSR0lOX1NJREVTID0gMjtcblxuLyoqXG4gKiBDb21wdXRlcyBob3cgYSBzb3VyY2UgaW1hZ2UgaXMgc2NhbGVkIGFuZCBwbGFjZWQgdG8gZmlsbCBhIGNhbnZhcydzIGhlaWdodCxcbiAqIHdpdGggZXF1YWwgbWFyZ2lucyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQuXG4gKlxuICogVGhlIHNjYWxlZCB3aWR0aCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdGhhdCBsZWF2ZXMgYW4gRVZFTlxuICogcmVtYWluZGVyLCBzbyB0aGUgdHdvIG1hcmdpbnMgYXJlIGV4YWN0bHkgZXF1YWwgXHUyMDE0IGFuIGFzeW1tZXRyaWMgcGlsbGFyYm94IGlzXG4gKiB2aXNpYmxlIGF0IGEgZ2xhbmNlIGFuZCBsb29rcyBsaWtlIGEgbWlzdGFrZS4gV2hlcmUgYm90aCBuZWlnaGJvcnMgcXVhbGlmeSxcbiAqIHRoZSBvbmUgY2xvc2VyIHRvIHRoZSB0cnVlIHNjYWxlZCB3aWR0aCB3aW5zLCBzbyB0aGUgYXNwZWN0IGVycm9yIHN0YXlzIGJlbG93XG4gKiBvbmUgcGFydCBpbiBhIHRob3VzYW5kLlxuICpcbiAqIFdvcmtlZCBleGFtcGxlLCB0aGUgbW9iaWxlIHN0b3JlIGNhc2U6IGEgMTM0NHgyOTkyIGZyYW1lIG9udG8gYSA5MDB4MTYwMFxuICogY2FudmFzIHNjYWxlcyBieSBgMTYwMC8yOTkyYCB0byA3MTguNzIgd2lkZS4gNzE5IHdvdWxkIGxlYXZlIGEgMTgxcHhcbiAqIHJlbWFpbmRlciwgd2hpY2ggY2Fubm90IHNwbGl0IGV2ZW5seSwgc28gNzE4IGlzIGNob3NlbiAobWFyZ2luIDkxKSBvdmVyIDcyMFxuICogKG1hcmdpbiA5MCkgYmVjYXVzZSA3MTggaXMgbmVhcmVyIDcxOC43Mi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNvdXJjZSBhbmQgY2FudmFzIGRpbWVuc2lvbnMuXG4gKiBAcmV0dXJucyBUaGUgc2NhbGVkIHNpemUsIHRoZSBvZmZzZXRzLCBhbmQgdGhlIHNpZGUgbWFyZ2luLlxuICogQHRocm93cyBFcnJvciBpZiBhbnkgZGltZW5zaW9uIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVGaXRUb0NhbnZhcyhwYXJhbXM6IENvbXB1dGVGaXRUb0NhbnZhc1BhcmFtcyk6IEZpdFRvQ2FudmFzR2VvbWV0cnkge1xuICBjb25zdCB7XG4gICAgY2FudmFzSGVpZ2h0SW5QaXhlbHMsXG4gICAgY2FudmFzV2lkdGhJblBpeGVscyxcbiAgICBzb3VyY2VIZWlnaHRJblBpeGVscyxcbiAgICBzb3VyY2VXaWR0aEluUGl4ZWxzXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbmFtZWREaW1lbnNpb25zOiBbc3RyaW5nLCBudW1iZXJdW10gPSBbXG4gICAgWydjYW52YXNIZWlnaHRJblBpeGVscycsIGNhbnZhc0hlaWdodEluUGl4ZWxzXSxcbiAgICBbJ2NhbnZhc1dpZHRoSW5QaXhlbHMnLCBjYW52YXNXaWR0aEluUGl4ZWxzXSxcbiAgICBbJ3NvdXJjZUhlaWdodEluUGl4ZWxzJywgc291cmNlSGVpZ2h0SW5QaXhlbHNdLFxuICAgIFsnc291cmNlV2lkdGhJblBpeGVscycsIHNvdXJjZVdpZHRoSW5QaXhlbHNdXG4gIF07XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG5hbWVkRGltZW5zaW9ucykge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVGaXRUb0NhbnZhczogJHtuYW1lfSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtTdHJpbmcodmFsdWUpfS5gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzY2FsZWRIZWlnaHRJblBpeGVscyA9IGNhbnZhc0hlaWdodEluUGl4ZWxzO1xuICBjb25zdCBleGFjdFNjYWxlZFdpZHRoID0gc291cmNlV2lkdGhJblBpeGVscyAqIChjYW52YXNIZWlnaHRJblBpeGVscyAvIHNvdXJjZUhlaWdodEluUGl4ZWxzKTtcbiAgY29uc3Qgc2NhbGVkV2lkdGhJblBpeGVscyA9IHJvdW5kVG9NYXRjaGluZ1Bhcml0eShleGFjdFNjYWxlZFdpZHRoLCBjYW52YXNXaWR0aEluUGl4ZWxzKTtcblxuICBpZiAoc2NhbGVkV2lkdGhJblBpeGVscyA+IGNhbnZhc1dpZHRoSW5QaXhlbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnY29tcHV0ZUZpdFRvQ2FudmFzOiB0aGUgc291cmNlIGlzIHdpZGVyIHRoYW4gdGhlIGNhbnZhcyBvbmNlIHNjYWxlZCB0byBpdHMgaGVpZ2h0ICdcbiAgICAgICAgKyBgKCR7U3RyaW5nKHNjYWxlZFdpZHRoSW5QaXhlbHMpfSA+ICR7U3RyaW5nKGNhbnZhc1dpZHRoSW5QaXhlbHMpfSk7IHRoaXMgZml0cyBieSBoZWlnaHQgYW5kIGNhbm5vdCBsZXR0ZXJib3guYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBtYXJnaW5JblBpeGVscyA9IChjYW52YXNXaWR0aEluUGl4ZWxzIC0gc2NhbGVkV2lkdGhJblBpeGVscykgLyBNQVJHSU5fU0lERVM7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXJnaW5JblBpeGVscyxcbiAgICBvZmZzZXRYSW5QaXhlbHM6IG1hcmdpbkluUGl4ZWxzLFxuICAgIG9mZnNldFlJblBpeGVsczogMCxcbiAgICBzY2FsZWRIZWlnaHRJblBpeGVscyxcbiAgICBzY2FsZWRXaWR0aEluUGl4ZWxzXG4gIH07XG59XG5cbi8qKlxuICogU2NhbGVzIGEgc2NyZWVuc2hvdCB0byBmaWxsIGEgY2FudmFzJ3MgaGVpZ2h0IGFuZCBmaWxscyB0aGUgc2lkZSBtYXJnaW5zIHdpdGhcbiAqIGEgYmx1cnJlZCwgZW5sYXJnZWQgY29weSBvZiB0aGUgc2FtZSBpbWFnZS5cbiAqXG4gKiBOb3RoaW5nIGlzIGNyb3BwZWQgYW5kIG5vdGhpbmcgaXMgc3RyZXRjaGVkOiB0aGUgdmlzaWJsZSBzY3JlZW5zaG90IGtlZXBzIGl0c1xuICogYXNwZWN0IHJhdGlvIHRvIHdpdGhpbiBhIHJvdW5kaW5nIHBpeGVsLCBhbmQgdGhlIG1hcmdpbnMgYXJlIG1hZGUgb2YgdGhlXG4gKiBpbWFnZSBpdHNlbGYgcmF0aGVyIHRoYW4gYSBmbGF0IGNvbG9yLCBzbyB0aGUgcmVzdWx0IHJlYWRzIGFzIG9uZSBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgc291cmNlIFBORy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHRhcmdldCBjYW52YXMgc2l6ZSBhbmQgYmx1ciBzdHJlbmd0aC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbXBvc2VkIFBORywgZXhhY3RseSB0aGUgY2FudmFzIHNpemUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGBzaGFycGAgaXMgbm90IGluc3RhbGxlZCwgb3IgdGhlIHNvdXJjZSBkaW1lbnNpb25zIGNhbm5vdCBiZSByZWFkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml0U2NyZWVuc2hvdFRvQ2FudmFzKGJ5dGVzOiBVaW50OEFycmF5LCBvcHRpb25zOiBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IHtcbiAgICBibHVyU2lnbWEgPSBERUZBVUxUX0JMVVJfU0lHTUEsXG4gICAgY2FudmFzSGVpZ2h0SW5QaXhlbHMsXG4gICAgY2FudmFzV2lkdGhJblBpeGVsc1xuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCk7XG4gIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgc2hhcnAoYnl0ZXMpLm1ldGFkYXRhKCk7XG4gIGNvbnN0IHNvdXJjZVdpZHRoSW5QaXhlbHMgPSBtZXRhZGF0YS53aWR0aDtcbiAgY29uc3Qgc291cmNlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoc291cmNlV2lkdGhJblBpeGVscyA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZUhlaWdodEluUGl4ZWxzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpdFNjcmVlbnNob3RUb0NhbnZhczogY291bGQgbm90IHJlYWQgdGhlIHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLicpO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlRml0VG9DYW52YXMoe1xuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHMsXG4gICAgc291cmNlSGVpZ2h0SW5QaXhlbHMsXG4gICAgc291cmNlV2lkdGhJblBpeGVsc1xuICB9KTtcblxuICAvLyBUaGUgYmFja2dyb3VuZCBpcyB0aGUgc2FtZSBmcmFtZSBibG93biB1cCB0byBDT1ZFUiB0aGUgY2FudmFzIGFuZCBibHVycmVkLFxuICAvLyBTbyB0aGUgbWFyZ2lucyBjYXJyeSB0aGUgc2NyZWVuc2hvdCdzIG93biBjb2xvcnMgaW5zdGVhZCBvZiBhIGZsYXQgYmFyLlxuICBjb25zdCBiYWNrZ3JvdW5kID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLnJlc2l6ZShjYW52YXNXaWR0aEluUGl4ZWxzLCBjYW52YXNIZWlnaHRJblBpeGVscywgeyBmaXQ6ICdjb3ZlcicgfSlcbiAgICAuYmx1cihibHVyU2lnbWEpXG4gICAgLnRvQnVmZmVyKCk7XG5cbiAgY29uc3QgZm9yZWdyb3VuZCA9IGF3YWl0IHNoYXJwKGJ5dGVzKVxuICAgIC5yZXNpemUoZ2VvbWV0cnkuc2NhbGVkV2lkdGhJblBpeGVscywgZ2VvbWV0cnkuc2NhbGVkSGVpZ2h0SW5QaXhlbHMsIHsgZml0OiAnZmlsbCcgfSlcbiAgICAudG9CdWZmZXIoKTtcblxuICBjb25zdCBjb21wb3NlZCA9IGF3YWl0IHNoYXJwKGJhY2tncm91bmQpXG4gICAgLmNvbXBvc2l0ZShbe1xuICAgICAgaW5wdXQ6IGZvcmVncm91bmQsXG4gICAgICBsZWZ0OiBnZW9tZXRyeS5vZmZzZXRYSW5QaXhlbHMsXG4gICAgICB0b3A6IGdlb21ldHJ5Lm9mZnNldFlJblBpeGVsc1xuICAgIH1dKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShjb21wb3NlZCk7XG59XG5cbi8qKlxuICogTG9hZHMgYHNoYXJwYCBvbiBkZW1hbmQsIHNvIGltcG9ydGluZyB0aGlzIG1vZHVsZSBkb2VzIG5vdCByZXF1aXJlIGl0LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGBzaGFycGAgZmFjdG9yeS5cbiAqIEB0aHJvd3MgRXJyb3IgbmFtaW5nIHRoZSBtaXNzaW5nIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U2hhcnAoKTogUHJvbWlzZTxTaGFycEZhY3Rvcnk+IHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gYHNoYXJwYCBpcyBhbiBPUFRJT05BTCBwZWVyLCBzbyBpdCBtdXN0IGJlIGxvYWRlZCBsYXppbHk6IGEgc3RhdGljIGltcG9ydCB3b3VsZCBkcmFnIGl0cyBuYXRpdmUgYmluYXJpZXMgaW50byBldmVyeSBjb25zdW1lciBvZiB0aGlzIHBhY2thZ2UncyBpbmRleC5cbiAgICBjb25zdCBzaGFycE1vZHVsZSA9IGF3YWl0IGltcG9ydCgnc2hhcnAnKTtcbiAgICBjb25zdCBmYWN0b3J5OiB1bmtub3duID0gc2hhcnBNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gZmFjdG9yeSBhcyBTaGFycEZhY3Rvcnk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFJlYWNoZWQgb25seSB3aGVuIHRoZSBvcHRpb25hbCBwZWVyIGlzIGFic2VudCwgd2hpY2ggaXQgbmV2ZXIgaXMgaW4gdGhpcyBwYWNrYWdlJ3Mgb3duIHRlc3QgcnVuLiAqL1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdmaXRTY3JlZW5zaG90VG9DYW52YXMgbmVlZHMgdGhlIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeSBcInNoYXJwXCIuICdcbiAgICAgICAgKyAnSW5zdGFsbCBpdCBpbiB0aGUgY29uc3VtaW5nIHByb2plY3QgKG5wbSBpIC1EIHNoYXJwKS4nLFxuICAgICAgeyBjYXVzZTogZXJyb3IgfVxuICAgICk7XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG4vKipcbiAqIFJvdW5kcyBhIHdpZHRoIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgc2hhcmluZyBgdGFyZ2V0YCdzIHBhcml0eSwgc29cbiAqIGB0YXJnZXQgLSByZXN1bHRgIGlzIGV2ZW4gYW5kIHNwbGl0cyBpbnRvIHR3byBlcXVhbCBtYXJnaW5zLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBleGFjdCBzY2FsZWQgd2lkdGguXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIGNhbnZhcyB3aWR0aCB3aG9zZSBwYXJpdHkgbXVzdCBiZSBtYXRjaGVkLlxuICogQHJldHVybnMgVGhlIG5lYXJlc3QgaW50ZWdlciBvZiB0aGUgc2FtZSBwYXJpdHkgYXMgYHRhcmdldGAuXG4gKi9cbmZ1bmN0aW9uIHJvdW5kVG9NYXRjaGluZ1Bhcml0eSh2YWx1ZTogbnVtYmVyLCB0YXJnZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgaWYgKCh0YXJnZXQgLSByb3VuZGVkKSAlIE1BUkdJTl9TSURFUyA9PT0gMCkge1xuICAgIHJldHVybiByb3VuZGVkO1xuICB9XG5cbiAgLy8gYHJvdW5kZWRgIGxlYXZlcyBhbiBvZGQgcmVtYWluZGVyLCBzbyBzdGVwIHRvIHdoaWNoZXZlciBuZWlnaGJvciBpcyBjbG9zZXJcbiAgLy8gVG8gdGhlIHRydWUgdmFsdWU7IGJvdGggaGF2ZSB0aGUgcGFyaXR5IGByb3VuZGVkYCBsYWNrcy5cbiAgcmV0dXJuIHZhbHVlID49IHJvdW5kZWQgPyByb3VuZGVkICsgMSA6IHJvdW5kZWQgLSAxO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQThJQSxNQUFNLHFCQUFxQjtBQUszQixNQUFNLGVBQWU7QUFxQmQsU0FBUyxtQkFBbUIsUUFBdUQ7QUFDeEYsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLGtCQUFzQztBQUFBLElBQzFDLENBQUMsd0JBQXdCLG9CQUFvQjtBQUFBLElBQzdDLENBQUMsdUJBQXVCLG1CQUFtQjtBQUFBLElBQzNDLENBQUMsd0JBQXdCLG9CQUFvQjtBQUFBLElBQzdDLENBQUMsdUJBQXVCLG1CQUFtQjtBQUFBLEVBQzdDO0FBRUEsYUFBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLGlCQUFpQjtBQUMzQyxRQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssS0FBSyxTQUFTLEdBQUc7QUFDekMsWUFBTSxJQUFJLE1BQU0sdUJBQXVCLElBQUksbUNBQW1DLE9BQU8sS0FBSyxDQUFDLEdBQUc7QUFBQSxJQUNoRztBQUFBLEVBQ0Y7QUFFQSxRQUFNLHVCQUF1QjtBQUM3QixRQUFNLG1CQUFtQix1QkFBdUIsdUJBQXVCO0FBQ3ZFLFFBQU0sc0JBQXNCLHNCQUFzQixrQkFBa0IsbUJBQW1CO0FBRXZGLE1BQUksc0JBQXNCLHFCQUFxQjtBQUM3QyxVQUFNLElBQUk7QUFBQSxNQUNSLHNGQUNRLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxPQUFPLG1CQUFtQixDQUFDO0FBQUEsSUFDdEU7QUFBQSxFQUNGO0FBRUEsUUFBTSxrQkFBa0Isc0JBQXNCLHVCQUF1QjtBQUVyRSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0EsaUJBQWlCO0FBQUEsSUFDakIsaUJBQWlCO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBZUEsZUFBc0Isc0JBQXNCLE9BQW1CLFNBQTREO0FBQ3pILFFBQU07QUFBQSxJQUNKLFlBQVk7QUFBQSxJQUNaO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sUUFBUSxNQUFNLFlBQVk7QUFDaEMsUUFBTSxXQUFXLE1BQU0sTUFBTSxLQUFLLEVBQUUsU0FBUztBQUM3QyxRQUFNLHNCQUFzQixTQUFTO0FBQ3JDLFFBQU0sdUJBQXVCLFNBQVM7QUFHdEMsTUFBSSx3QkFBd0IsVUFBYSx5QkFBeUIsUUFBVztBQUMzRSxVQUFNLElBQUksTUFBTSxvRUFBb0U7QUFBQSxFQUN0RjtBQUVBLFFBQU0sV0FBVyxtQkFBbUI7QUFBQSxJQUNsQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUlELFFBQU0sYUFBYSxNQUFNLE1BQU0sS0FBSyxFQUNqQyxPQUFPLHFCQUFxQixzQkFBc0IsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUNsRSxLQUFLLFNBQVMsRUFDZCxTQUFTO0FBRVosUUFBTSxhQUFhLE1BQU0sTUFBTSxLQUFLLEVBQ2pDLE9BQU8sU0FBUyxxQkFBcUIsU0FBUyxzQkFBc0IsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUNuRixTQUFTO0FBRVosUUFBTSxXQUFXLE1BQU0sTUFBTSxVQUFVLEVBQ3BDLFVBQVUsQ0FBQztBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsTUFBTSxTQUFTO0FBQUEsSUFDZixLQUFLLFNBQVM7QUFBQSxFQUNoQixDQUFDLENBQUMsRUFDRCxJQUFJLEVBQ0osU0FBUztBQUVaLFNBQU8sSUFBSSxXQUFXLFFBQVE7QUFDaEM7QUFRQSxlQUFlLGNBQXFDO0FBQ2xELE1BQUk7QUFFRixVQUFNLGNBQWMsTUFBTSxPQUFPLE9BQU87QUFDeEMsVUFBTSxVQUFtQixZQUFZO0FBQ3JDLFdBQU87QUFBQSxFQUNULFNBQVMsT0FBZ0I7QUFFdkIsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBLE1BRUEsRUFBRSxPQUFPLE1BQU07QUFBQSxJQUNqQjtBQUFBLEVBRUY7QUFDRjtBQVVBLFNBQVMsc0JBQXNCLE9BQWUsUUFBd0I7QUFDcEUsUUFBTSxVQUFVLEtBQUssTUFBTSxLQUFLO0FBQ2hDLE9BQUssU0FBUyxXQUFXLGlCQUFpQixHQUFHO0FBQzNDLFdBQU87QUFBQSxFQUNUO0FBSUEsU0FBTyxTQUFTLFVBQVUsVUFBVSxJQUFJLFVBQVU7QUFDcEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
103
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZpdC1zY3JlZW5zaG90LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRml0cyBhIHNjcmVlbnNob3Qgb250byBhIGNhbnZhcyBvZiBhIGRpZmZlcmVudCBhc3BlY3QgcmF0aW8gd2l0aG91dCBjcm9wcGluZ1xuICogaXQgb3IgZGlzdG9ydGluZyBpdCwgZmlsbGluZyB0aGUgbGVmdG92ZXIgbWFyZ2lucyB3aXRoIGEgYmx1cnJlZCwgZW5sYXJnZWRcbiAqIGNvcHkgb2YgdGhlIHNhbWUgaW1hZ2UgKHRoZSBcInBpbGxhcmJveFwiIHRyZWF0bWVudCB1c2VkIGJ5IHN0b3JlIGxpc3RpbmdzKS5cbiAqXG4gKiBUaGUgbW90aXZhdGluZyBjYXNlIGlzIGEgbW9iaWxlIHN0b3JlIHNjcmVlbnNob3QuIFRoZSBBbmRyb2lkIGVtdWxhdG9yJ3NcbiAqIGZyYW1lYnVmZmVyIGlzIHdoYXRldmVyIHRoZSBBVkQncyBzY3JlZW4gaXMgXHUyMDE0IGEgUGl4ZWwgMTAgUHJvIFhMIGlzIDEzNDR4Mjk5MixcbiAqIHJvdWdobHkgOToyMCBcdTIwMTQgd2hpbGUgdGhlIGNvbW11bml0eSBzdG9yZSBhc2tzIGZvciA5MDB4MTYwMCAoOToxNikuIENyb3BwaW5nXG4gKiB0byA5OjE2IHRocm93cyBhd2F5IGEgZmlmdGggb2YgdGhlIGZyYW1lLCBhbmQgc3RyZXRjaGluZyBkaXN0b3J0cyB0aGUgVUksIHNvXG4gKiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHRvIGZpdCB0aGUgSEVJR0hUIGFuZCB0aGUgdHdvIHNpZGUgbWFyZ2lucyBhcmUgZmlsbGVkLlxuICpcbiAqIFRoZSBnZW9tZXRyeSBpcyBhIHB1cmUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHVuaXQtdGVzdGVkOyB0aGUgcGl4ZWwgd29yayBuZWVkc1xuICogYHNoYXJwYCwgd2hpY2ggaXMgYW4gT1BUSU9OQUwgcGVlciBkZXBlbmRlbmN5IFx1MjAxNCBkZWNsYXJlZCByYXRoZXIgdGhhbiBidW5kbGVkXG4gKiBiZWNhdXNlIG9ubHkgc2NyZWVuc2hvdCBjYXB0dXJlIG5lZWRzIGl0LCBhbmQgaXQgc2hpcHMgcGxhdGZvcm0tc3BlY2lmaWNcbiAqIG5hdGl2ZSBiaW5hcmllcyB0aGF0IGV2ZXJ5IG90aGVyIGNvbnN1bWVyIHdvdWxkIHBheSBmb3IuXG4gKi9cblxuaW1wb3J0IHsgaW1wb3J0U2hhcnAgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb21wdXRlRml0VG9DYW52YXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVGaXRUb0NhbnZhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHRhcmdldCBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbnZhc0hlaWdodEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSB0YXJnZXQgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBjYW52YXNXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgc291cmNlIGltYWdlLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgc291cmNlIGltYWdlLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGZpdFNjcmVlbnNob3RUb0NhbnZhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRml0U2NyZWVuc2hvdFRvQ2FudmFzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBHYXVzc2lhbiBibHVyIHN0cmVuZ3RoIGFwcGxpZWQgdG8gdGhlIG1hcmdpbiBmaWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjRgXG4gICAqL1xuICByZWFkb25seSBibHVyU2lnbWE/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgdGFyZ2V0IGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FudmFzSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIHRhcmdldCBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbnZhc1dpZHRoSW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGVyZSB0aGUgc2NhbGVkIHNvdXJjZSBpbWFnZSBzaXRzIG9uIHRoZSBjYW52YXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRml0VG9DYW52YXNHZW9tZXRyeSB7XG4gIC8qKlxuICAgKiBXaWR0aCBvZiBlYWNoIHNpZGUgbWFyZ2luLCBpbiBwaXhlbHMuIEJvdGggc2lkZXMgYXJlIGVxdWFsIGJ5IGNvbnN0cnVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmdpbkluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExlZnQgb2Zmc2V0IG9mIHRoZSBzY2FsZWQgaW1hZ2Ugb24gdGhlIGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0WEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRvcCBvZmZzZXQgb2YgdGhlIHNjYWxlZCBpbWFnZSBvbiB0aGUgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBvZmZzZXRZSW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogSGVpZ2h0IHRoZSBzb3VyY2UgaXMgc2NhbGVkIHRvLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBzY2FsZWRIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCB0aGUgc291cmNlIGlzIHNjYWxlZCB0bywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGVkV2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlZmF1bHQgR2F1c3NpYW4gYmx1ciBzdHJlbmd0aCBmb3IgdGhlIG1hcmdpbiBmaWxsOiBzb2Z0IGVub3VnaCB0aGF0IG5vXG4gKiBkZXRhaWwgcmVhZHMgYXMgY29udGVudCwgZ2VudGxlIGVub3VnaCB0byBrZWVwIHRoZSBmcmFtZSdzIGNvbG9ycy5cbiAqL1xuY29uc3QgREVGQVVMVF9CTFVSX1NJR01BID0gMjQ7XG5cbi8qKlxuICogVGhlIG51bWJlciBvZiBzaWRlIG1hcmdpbnMgdGhlIGxlZnRvdmVyIHdpZHRoIGlzIHNwbGl0IGJldHdlZW4uXG4gKi9cbmNvbnN0IE1BUkdJTl9TSURFUyA9IDI7XG5cbi8qKlxuICogQ29tcHV0ZXMgaG93IGEgc291cmNlIGltYWdlIGlzIHNjYWxlZCBhbmQgcGxhY2VkIHRvIGZpbGwgYSBjYW52YXMncyBoZWlnaHQsXG4gKiB3aXRoIGVxdWFsIG1hcmdpbnMgb24gdGhlIGxlZnQgYW5kIHJpZ2h0LlxuICpcbiAqIFRoZSBzY2FsZWQgd2lkdGggaXMgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHRoYXQgbGVhdmVzIGFuIEVWRU5cbiAqIHJlbWFpbmRlciwgc28gdGhlIHR3byBtYXJnaW5zIGFyZSBleGFjdGx5IGVxdWFsIFx1MjAxNCBhbiBhc3ltbWV0cmljIHBpbGxhcmJveCBpc1xuICogdmlzaWJsZSBhdCBhIGdsYW5jZSBhbmQgbG9va3MgbGlrZSBhIG1pc3Rha2UuIFdoZXJlIGJvdGggbmVpZ2hib3JzIHF1YWxpZnksXG4gKiB0aGUgb25lIGNsb3NlciB0byB0aGUgdHJ1ZSBzY2FsZWQgd2lkdGggd2lucywgc28gdGhlIGFzcGVjdCBlcnJvciBzdGF5cyBiZWxvd1xuICogb25lIHBhcnQgaW4gYSB0aG91c2FuZC5cbiAqXG4gKiBXb3JrZWQgZXhhbXBsZSwgdGhlIG1vYmlsZSBzdG9yZSBjYXNlOiBhIDEzNDR4Mjk5MiBmcmFtZSBvbnRvIGEgOTAweDE2MDBcbiAqIGNhbnZhcyBzY2FsZXMgYnkgYDE2MDAvMjk5MmAgdG8gNzE4LjcyIHdpZGUuIDcxOSB3b3VsZCBsZWF2ZSBhIDE4MXB4XG4gKiByZW1haW5kZXIsIHdoaWNoIGNhbm5vdCBzcGxpdCBldmVubHksIHNvIDcxOCBpcyBjaG9zZW4gKG1hcmdpbiA5MSkgb3ZlciA3MjBcbiAqIChtYXJnaW4gOTApIGJlY2F1c2UgNzE4IGlzIG5lYXJlciA3MTguNzIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzb3VyY2UgYW5kIGNhbnZhcyBkaW1lbnNpb25zLlxuICogQHJldHVybnMgVGhlIHNjYWxlZCBzaXplLCB0aGUgb2Zmc2V0cywgYW5kIHRoZSBzaWRlIG1hcmdpbi5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW55IGRpbWVuc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRml0VG9DYW52YXMocGFyYW1zOiBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMpOiBGaXRUb0NhbnZhc0dlb21ldHJ5IHtcbiAgY29uc3Qge1xuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHMsXG4gICAgc291cmNlSGVpZ2h0SW5QaXhlbHMsXG4gICAgc291cmNlV2lkdGhJblBpeGVsc1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IG5hbWVkRGltZW5zaW9uczogW3N0cmluZywgbnVtYmVyXVtdID0gW1xuICAgIFsnY2FudmFzSGVpZ2h0SW5QaXhlbHMnLCBjYW52YXNIZWlnaHRJblBpeGVsc10sXG4gICAgWydjYW52YXNXaWR0aEluUGl4ZWxzJywgY2FudmFzV2lkdGhJblBpeGVsc10sXG4gICAgWydzb3VyY2VIZWlnaHRJblBpeGVscycsIHNvdXJjZUhlaWdodEluUGl4ZWxzXSxcbiAgICBbJ3NvdXJjZVdpZHRoSW5QaXhlbHMnLCBzb3VyY2VXaWR0aEluUGl4ZWxzXVxuICBdO1xuXG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBuYW1lZERpbWVuc2lvbnMpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlRml0VG9DYW52YXM6ICR7bmFtZX0gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKHZhbHVlKX0uYCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NhbGVkSGVpZ2h0SW5QaXhlbHMgPSBjYW52YXNIZWlnaHRJblBpeGVscztcbiAgY29uc3QgZXhhY3RTY2FsZWRXaWR0aCA9IHNvdXJjZVdpZHRoSW5QaXhlbHMgKiAoY2FudmFzSGVpZ2h0SW5QaXhlbHMgLyBzb3VyY2VIZWlnaHRJblBpeGVscyk7XG4gIGNvbnN0IHNjYWxlZFdpZHRoSW5QaXhlbHMgPSByb3VuZFRvTWF0Y2hpbmdQYXJpdHkoZXhhY3RTY2FsZWRXaWR0aCwgY2FudmFzV2lkdGhJblBpeGVscyk7XG5cbiAgaWYgKHNjYWxlZFdpZHRoSW5QaXhlbHMgPiBjYW52YXNXaWR0aEluUGl4ZWxzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2NvbXB1dGVGaXRUb0NhbnZhczogdGhlIHNvdXJjZSBpcyB3aWRlciB0aGFuIHRoZSBjYW52YXMgb25jZSBzY2FsZWQgdG8gaXRzIGhlaWdodCAnXG4gICAgICAgICsgYCgke1N0cmluZyhzY2FsZWRXaWR0aEluUGl4ZWxzKX0gPiAke1N0cmluZyhjYW52YXNXaWR0aEluUGl4ZWxzKX0pOyB0aGlzIGZpdHMgYnkgaGVpZ2h0IGFuZCBjYW5ub3QgbGV0dGVyYm94LmBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbWFyZ2luSW5QaXhlbHMgPSAoY2FudmFzV2lkdGhJblBpeGVscyAtIHNjYWxlZFdpZHRoSW5QaXhlbHMpIC8gTUFSR0lOX1NJREVTO1xuXG4gIHJldHVybiB7XG4gICAgbWFyZ2luSW5QaXhlbHMsXG4gICAgb2Zmc2V0WEluUGl4ZWxzOiBtYXJnaW5JblBpeGVscyxcbiAgICBvZmZzZXRZSW5QaXhlbHM6IDAsXG4gICAgc2NhbGVkSGVpZ2h0SW5QaXhlbHMsXG4gICAgc2NhbGVkV2lkdGhJblBpeGVsc1xuICB9O1xufVxuXG4vKipcbiAqIFNjYWxlcyBhIHNjcmVlbnNob3QgdG8gZmlsbCBhIGNhbnZhcydzIGhlaWdodCBhbmQgZmlsbHMgdGhlIHNpZGUgbWFyZ2lucyB3aXRoXG4gKiBhIGJsdXJyZWQsIGVubGFyZ2VkIGNvcHkgb2YgdGhlIHNhbWUgaW1hZ2UuXG4gKlxuICogTm90aGluZyBpcyBjcm9wcGVkIGFuZCBub3RoaW5nIGlzIHN0cmV0Y2hlZDogdGhlIHZpc2libGUgc2NyZWVuc2hvdCBrZWVwcyBpdHNcbiAqIGFzcGVjdCByYXRpbyB0byB3aXRoaW4gYSByb3VuZGluZyBwaXhlbCwgYW5kIHRoZSBtYXJnaW5zIGFyZSBtYWRlIG9mIHRoZVxuICogaW1hZ2UgaXRzZWxmIHJhdGhlciB0aGFuIGEgZmxhdCBjb2xvciwgc28gdGhlIHJlc3VsdCByZWFkcyBhcyBvbmUgZnJhbWUuXG4gKlxuICogQHBhcmFtIGJ5dGVzIC0gVGhlIHNvdXJjZSBQTkcuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB0YXJnZXQgY2FudmFzIHNpemUgYW5kIGJsdXIgc3RyZW5ndGguXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb21wb3NlZCBQTkcsIGV4YWN0bHkgdGhlIGNhbnZhcyBzaXplLlxuICogQHRocm93cyBFcnJvciBpZiBgc2hhcnBgIGlzIG5vdCBpbnN0YWxsZWQsIG9yIHRoZSBzb3VyY2UgZGltZW5zaW9ucyBjYW5ub3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpdFNjcmVlbnNob3RUb0NhbnZhcyhieXRlczogVWludDhBcnJheSwgb3B0aW9uczogRml0U2NyZWVuc2hvdFRvQ2FudmFzT3B0aW9ucyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCB7XG4gICAgYmx1clNpZ21hID0gREVGQVVMVF9CTFVSX1NJR01BLFxuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHNcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc2hhcnAgPSBhd2FpdCBpbXBvcnRTaGFycCgnZml0U2NyZWVuc2hvdFRvQ2FudmFzJyk7XG4gIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgc2hhcnAoYnl0ZXMpLm1ldGFkYXRhKCk7XG4gIGNvbnN0IHNvdXJjZVdpZHRoSW5QaXhlbHMgPSBtZXRhZGF0YS53aWR0aDtcbiAgY29uc3Qgc291cmNlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoc291cmNlV2lkdGhJblBpeGVscyA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZUhlaWdodEluUGl4ZWxzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpdFNjcmVlbnNob3RUb0NhbnZhczogY291bGQgbm90IHJlYWQgdGhlIHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLicpO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlRml0VG9DYW52YXMoe1xuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHMsXG4gICAgc291cmNlSGVpZ2h0SW5QaXhlbHMsXG4gICAgc291cmNlV2lkdGhJblBpeGVsc1xuICB9KTtcblxuICAvLyBUaGUgYmFja2dyb3VuZCBpcyB0aGUgc2FtZSBmcmFtZSBibG93biB1cCB0byBDT1ZFUiB0aGUgY2FudmFzIGFuZCBibHVycmVkLFxuICAvLyBTbyB0aGUgbWFyZ2lucyBjYXJyeSB0aGUgc2NyZWVuc2hvdCdzIG93biBjb2xvcnMgaW5zdGVhZCBvZiBhIGZsYXQgYmFyLlxuICBjb25zdCBiYWNrZ3JvdW5kID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLnJlc2l6ZShjYW52YXNXaWR0aEluUGl4ZWxzLCBjYW52YXNIZWlnaHRJblBpeGVscywgeyBmaXQ6ICdjb3ZlcicgfSlcbiAgICAuYmx1cihibHVyU2lnbWEpXG4gICAgLnRvQnVmZmVyKCk7XG5cbiAgY29uc3QgZm9yZWdyb3VuZCA9IGF3YWl0IHNoYXJwKGJ5dGVzKVxuICAgIC5yZXNpemUoZ2VvbWV0cnkuc2NhbGVkV2lkdGhJblBpeGVscywgZ2VvbWV0cnkuc2NhbGVkSGVpZ2h0SW5QaXhlbHMsIHsgZml0OiAnZmlsbCcgfSlcbiAgICAudG9CdWZmZXIoKTtcblxuICBjb25zdCBjb21wb3NlZCA9IGF3YWl0IHNoYXJwKGJhY2tncm91bmQpXG4gICAgLmNvbXBvc2l0ZShbe1xuICAgICAgaW5wdXQ6IGZvcmVncm91bmQsXG4gICAgICBsZWZ0OiBnZW9tZXRyeS5vZmZzZXRYSW5QaXhlbHMsXG4gICAgICB0b3A6IGdlb21ldHJ5Lm9mZnNldFlJblBpeGVsc1xuICAgIH1dKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShjb21wb3NlZCk7XG59XG5cbi8qKlxuICogUm91bmRzIGEgd2lkdGggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBzaGFyaW5nIGB0YXJnZXRgJ3MgcGFyaXR5LCBzb1xuICogYHRhcmdldCAtIHJlc3VsdGAgaXMgZXZlbiBhbmQgc3BsaXRzIGludG8gdHdvIGVxdWFsIG1hcmdpbnMuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGV4YWN0IHNjYWxlZCB3aWR0aC5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgY2FudmFzIHdpZHRoIHdob3NlIHBhcml0eSBtdXN0IGJlIG1hdGNoZWQuXG4gKiBAcmV0dXJucyBUaGUgbmVhcmVzdCBpbnRlZ2VyIG9mIHRoZSBzYW1lIHBhcml0eSBhcyBgdGFyZ2V0YC5cbiAqL1xuZnVuY3Rpb24gcm91bmRUb01hdGNoaW5nUGFyaXR5KHZhbHVlOiBudW1iZXIsIHRhcmdldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgcm91bmRlZCA9IE1hdGgucm91bmQodmFsdWUpO1xuICBpZiAoKHRhcmdldCAtIHJvdW5kZWQpICUgTUFSR0lOX1NJREVTID09PSAwKSB7XG4gICAgcmV0dXJuIHJvdW5kZWQ7XG4gIH1cblxuICAvLyBgcm91bmRlZGAgbGVhdmVzIGFuIG9kZCByZW1haW5kZXIsIHNvIHN0ZXAgdG8gd2hpY2hldmVyIG5laWdoYm9yIGlzIGNsb3NlclxuICAvLyBUbyB0aGUgdHJ1ZSB2YWx1ZTsgYm90aCBoYXZlIHRoZSBwYXJpdHkgYHJvdW5kZWRgIGxhY2tzLlxuICByZXR1cm4gdmFsdWUgPj0gcm91bmRlZCA/IHJvdW5kZWQgKyAxIDogcm91bmRlZCAtIDE7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkEsMEJBQTRCO0FBbUY1QixNQUFNLHFCQUFxQjtBQUszQixNQUFNLGVBQWU7QUFxQmQsU0FBUyxtQkFBbUIsUUFBdUQ7QUFDeEYsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLGtCQUFzQztBQUFBLElBQzFDLENBQUMsd0JBQXdCLG9CQUFvQjtBQUFBLElBQzdDLENBQUMsdUJBQXVCLG1CQUFtQjtBQUFBLElBQzNDLENBQUMsd0JBQXdCLG9CQUFvQjtBQUFBLElBQzdDLENBQUMsdUJBQXVCLG1CQUFtQjtBQUFBLEVBQzdDO0FBRUEsYUFBVyxDQUFDLE1BQU0sS0FBSyxLQUFLLGlCQUFpQjtBQUMzQyxRQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssS0FBSyxTQUFTLEdBQUc7QUFDekMsWUFBTSxJQUFJLE1BQU0sdUJBQXVCLElBQUksbUNBQW1DLE9BQU8sS0FBSyxDQUFDLEdBQUc7QUFBQSxJQUNoRztBQUFBLEVBQ0Y7QUFFQSxRQUFNLHVCQUF1QjtBQUM3QixRQUFNLG1CQUFtQix1QkFBdUIsdUJBQXVCO0FBQ3ZFLFFBQU0sc0JBQXNCLHNCQUFzQixrQkFBa0IsbUJBQW1CO0FBRXZGLE1BQUksc0JBQXNCLHFCQUFxQjtBQUM3QyxVQUFNLElBQUk7QUFBQSxNQUNSLHNGQUNRLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxPQUFPLG1CQUFtQixDQUFDO0FBQUEsSUFDdEU7QUFBQSxFQUNGO0FBRUEsUUFBTSxrQkFBa0Isc0JBQXNCLHVCQUF1QjtBQUVyRSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0EsaUJBQWlCO0FBQUEsSUFDakIsaUJBQWlCO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGO0FBZUEsZUFBc0Isc0JBQXNCLE9BQW1CLFNBQTREO0FBQ3pILFFBQU07QUFBQSxJQUNKLFlBQVk7QUFBQSxJQUNaO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sUUFBUSxVQUFNLGlDQUFZLHVCQUF1QjtBQUN2RCxRQUFNLFdBQVcsTUFBTSxNQUFNLEtBQUssRUFBRSxTQUFTO0FBQzdDLFFBQU0sc0JBQXNCLFNBQVM7QUFDckMsUUFBTSx1QkFBdUIsU0FBUztBQUd0QyxNQUFJLHdCQUF3QixVQUFhLHlCQUF5QixRQUFXO0FBQzNFLFVBQU0sSUFBSSxNQUFNLG9FQUFvRTtBQUFBLEVBQ3RGO0FBRUEsUUFBTSxXQUFXLG1CQUFtQjtBQUFBLElBQ2xDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBSUQsUUFBTSxhQUFhLE1BQU0sTUFBTSxLQUFLLEVBQ2pDLE9BQU8scUJBQXFCLHNCQUFzQixFQUFFLEtBQUssUUFBUSxDQUFDLEVBQ2xFLEtBQUssU0FBUyxFQUNkLFNBQVM7QUFFWixRQUFNLGFBQWEsTUFBTSxNQUFNLEtBQUssRUFDakMsT0FBTyxTQUFTLHFCQUFxQixTQUFTLHNCQUFzQixFQUFFLEtBQUssT0FBTyxDQUFDLEVBQ25GLFNBQVM7QUFFWixRQUFNLFdBQVcsTUFBTSxNQUFNLFVBQVUsRUFDcEMsVUFBVSxDQUFDO0FBQUEsSUFDVixPQUFPO0FBQUEsSUFDUCxNQUFNLFNBQVM7QUFBQSxJQUNmLEtBQUssU0FBUztBQUFBLEVBQ2hCLENBQUMsQ0FBQyxFQUNELElBQUksRUFDSixTQUFTO0FBRVosU0FBTyxJQUFJLFdBQVcsUUFBUTtBQUNoQztBQVVBLFNBQVMsc0JBQXNCLE9BQWUsUUFBd0I7QUFDcEUsUUFBTSxVQUFVLEtBQUssTUFBTSxLQUFLO0FBQ2hDLE9BQUssU0FBUyxXQUFXLGlCQUFpQixHQUFHO0FBQzNDLFdBQU87QUFBQSxFQUNUO0FBSUEsU0FBTyxTQUFTLFVBQVUsVUFBVSxJQUFJLFVBQVU7QUFDcEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -30,15 +30,19 @@ __export(index_exports, {
30
30
  TemporaryVault: () => import_temporary_vault.TemporaryVault,
31
31
  buildDemoVaultPopulate: () => import_demo_vault_populate.buildDemoVaultPopulate,
32
32
  buildDeviceMetricsOverride: () => import_capture_screenshot.buildDeviceMetricsOverride,
33
+ buildLabelSvg: () => import_label_screenshot.buildLabelSvg,
33
34
  captureObsidianScreenshot: () => import_capture_obsidian_screenshot.captureObsidianScreenshot,
34
35
  computeFitToCanvas: () => import_fit_screenshot.computeFitToCanvas,
36
+ computeLabelBand: () => import_label_screenshot.computeLabelBand,
35
37
  connectToCdp: () => import_connect_to_cdp.connectToCdp,
36
38
  createTransportFromOptions: () => import_transport_factory.createTransportFromOptions,
37
39
  decodeBase64Png: () => import_capture_screenshot.decodeBase64Png,
40
+ escapeSvgText: () => import_label_screenshot.escapeSvgText,
38
41
  evalInObsidian: () => import_eval_in_obsidian.evalInObsidian,
39
42
  fitScreenshotToCanvas: () => import_fit_screenshot.fitScreenshotToCanvas,
40
43
  getVersionMetadata: () => import_obsidian_metadata.getVersionMetadata,
41
44
  isPng: () => import_capture_screenshot.isPng,
45
+ labelScreenshot: () => import_label_screenshot.labelScreenshot,
42
46
  pollInObsidian: () => import_poll_in_obsidian.pollInObsidian,
43
47
  readDemoVaultTree: () => import_demo_vault_tree.readDemoVaultTree,
44
48
  readPngDimensions: () => import_capture_screenshot.readPngDimensions,
@@ -66,6 +70,7 @@ var import_eval_in_obsidian = require("./eval-in-obsidian.cjs");
66
70
  var import_fit_screenshot = require("./fit-screenshot.cjs");
67
71
  var import_incompatible_installer_version_error = require("./incompatible-installer-version-error.cjs");
68
72
  var import_installer_compatibility = require("./installer-compatibility.cjs");
73
+ var import_label_screenshot = require("./label-screenshot.cjs");
69
74
  var import_lib_registry = require("./lib-registry.cjs");
70
75
  var import_obsidian_metadata = require("./obsidian-metadata.cjs");
71
76
  var import_obsidian_version = require("./obsidian-version.cjs");
@@ -93,15 +98,19 @@ var import_version_matrix = require("./version-matrix.cjs");
93
98
  TemporaryVault,
94
99
  buildDemoVaultPopulate,
95
100
  buildDeviceMetricsOverride,
101
+ buildLabelSvg,
96
102
  captureObsidianScreenshot,
97
103
  computeFitToCanvas,
104
+ computeLabelBand,
98
105
  connectToCdp,
99
106
  createTransportFromOptions,
100
107
  decodeBase64Png,
108
+ escapeSvgText,
101
109
  evalInObsidian,
102
110
  fitScreenshotToCanvas,
103
111
  getVersionMetadata,
104
112
  isPng,
113
+ labelScreenshot,
105
114
  pollInObsidian,
106
115
  readDemoVaultTree,
107
116
  readPngDimensions,
@@ -115,4 +124,4 @@ var import_version_matrix = require("./version-matrix.cjs");
115
124
  setVaultPathResolver,
116
125
  unregisterVault
117
126
  });
118
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgeyBDb250ZXh0SWQgfSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXMsXG4gIEluamVjdFBsdWdpblBhcmFtc1xufSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUuY2pzJztcbmV4cG9ydCB7IGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUgfSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUuY2pzJztcbmV4cG9ydCB0eXBlIHsgUmVhZERlbW9WYXVsdFRyZWVQYXJhbXMgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5janMnO1xuZXhwb3J0IHsgcmVhZERlbW9WYXVsdFRyZWUgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBFbGVjdHJvbkNvbXBhdGliaWxpdHksXG4gIEVsZWN0cm9uQ29tcGF0aWJpbGl0eVRpZXIsXG4gIFJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgeyByZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5IH0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEV2YWxJbk9ic2lkaWFuUGFyYW1zLFxuICBIb3ZlckVsZW1lbnRQYXJhbXMsXG4gIExpYixcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBQcmVzc0tleVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zLFxuICBXYWl0VW50aWxQYXJhbXNcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMsXG4gIEZpdFNjcmVlbnNob3RUb0NhbnZhc09wdGlvbnMsXG4gIEZpdFRvQ2FudmFzR2VvbWV0cnlcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHtcbiAgY29tcHV0ZUZpdFRvQ2FudmFzLFxuICBmaXRTY3JlZW5zaG90VG9DYW52YXNcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHR5cGUgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3IgfSBmcm9tICcuL2luY29tcGF0aWJsZS1pbnN0YWxsZXItdmVyc2lvbi1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5LFxuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5VGllcixcbiAgUmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9pbnN0YWxsZXItY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHkgfSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgdHlwZSB7IExpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB7IHJlZ2lzdGVyTGliUmVzb2x2ZXIgfSBmcm9tICcuL2xpYi1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblJ1bnRpbWVWZXJzaW9ucyxcbiAgT2JzaWRpYW5WZXJzaW9uRG93bmxvYWRzLFxuICBPYnNpZGlhblZlcnNpb25NZXRhZGF0YVxufSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5leHBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5leHBvcnQge1xuICBDQVRBTFlTVF9MQVRFU1QsXG4gIFBVQkxJQ19MQVRFU1Rcbn0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLmNqcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgUG9wdWxhdGVGaWxlQ29udGVudCxcbiAgUG9wdWxhdGVGaWxlc1BhcmFtc1xufSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuZXhwb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBpdW1TZXNzaW9uSW5mbyxcbiAgQXBwaXVtVHJhbnNwb3J0Q29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHsgQXBwaXVtVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIERlc2t0b3BDZHBUcmFuc3BvcnRDb25maWcsXG4gIE93bmVkSW5zdGFuY2VBc2FyLFxuICBPd25lZEluc3RhbmNlQ29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmV4cG9ydCB7IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFDQUFvQztBQUVwQyx5Q0FBMEM7QUFLMUMsZ0NBS087QUFLUCw0QkFBNkI7QUFDN0Isd0JBQTBCO0FBSzFCLDhCQUdPO0FBS1AsaUNBQXVDO0FBRXZDLDZCQUFrQztBQU1sQyxvQ0FBNkM7QUFXN0MsOEJBQStCO0FBTS9CLDRCQUdPO0FBRVAsa0RBQWtEO0FBTWxELHFDQUE4QztBQUU5QywwQkFBb0M7QUFNcEMsK0JBQW1DO0FBQ25DLDhCQUdPO0FBRVAsOEJBQStCO0FBQy9CLGlEQUFnRDtBQUVoRCxnQ0FBeUM7QUFFekMsd0NBQXdDO0FBS3hDLDZCQUErQjtBQUsvQiw4QkFBZ0M7QUFNaEMsbUNBQW9DO0FBQ3BDLCtCQUEyQztBQVUzQyw0QkFHTztBQUVQLDRCQUErQzsiLAogICJuYW1lcyI6IFtdCn0K
127
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgeyBDb250ZXh0SWQgfSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXMsXG4gIEluamVjdFBsdWdpblBhcmFtc1xufSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUuY2pzJztcbmV4cG9ydCB7IGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUgfSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUuY2pzJztcbmV4cG9ydCB0eXBlIHsgUmVhZERlbW9WYXVsdFRyZWVQYXJhbXMgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5janMnO1xuZXhwb3J0IHsgcmVhZERlbW9WYXVsdFRyZWUgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBFbGVjdHJvbkNvbXBhdGliaWxpdHksXG4gIEVsZWN0cm9uQ29tcGF0aWJpbGl0eVRpZXIsXG4gIFJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgeyByZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5IH0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEV2YWxJbk9ic2lkaWFuUGFyYW1zLFxuICBIb3ZlckVsZW1lbnRQYXJhbXMsXG4gIExpYixcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBQcmVzc0tleVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zLFxuICBXYWl0VW50aWxQYXJhbXNcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMsXG4gIEZpdFNjcmVlbnNob3RUb0NhbnZhc09wdGlvbnMsXG4gIEZpdFRvQ2FudmFzR2VvbWV0cnlcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHtcbiAgY29tcHV0ZUZpdFRvQ2FudmFzLFxuICBmaXRTY3JlZW5zaG90VG9DYW52YXNcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHR5cGUgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3IgfSBmcm9tICcuL2luY29tcGF0aWJsZS1pbnN0YWxsZXItdmVyc2lvbi1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5LFxuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5VGllcixcbiAgUmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9pbnN0YWxsZXItY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHkgfSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbXB1dGVMYWJlbEJhbmRQYXJhbXMsXG4gIExhYmVsQmFuZEdlb21ldHJ5LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90XG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuZXhwb3J0IHR5cGUgeyBQb2xsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgcG9sbEluT2JzaWRpYW4gfSBmcm9tICcuL3BvbGwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3IgfSBmcm9tICcuL3JlbmRlcmVyLWZhaWxlZC10by1pbml0aWFsaXplLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeFBhcmFtcyB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBydW5PYnNpZGlhblZlcnNpb25NYXRyaXggfSBmcm9tICcuL3J1bi12ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHR5cGUgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9zaWxlbnQtYXNhci1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3IgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXNcbn0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB7IFRlbXBvcmFyeVZhdWx0IH0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXBwaXVtU2Vzc2lvbkluZm8sXG4gIEFwcGl1bVRyYW5zcG9ydENvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnLFxuICBPd25lZEluc3RhbmNlQXNhcixcbiAgT3duZWRJbnN0YW5jZUNvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5IH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHsgREVGQVVMVF9PQlNJRElBTl9WRVJTSU9OX1NQRUNTIH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5janMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFDQUFvQztBQUVwQyx5Q0FBMEM7QUFLMUMsZ0NBS087QUFLUCw0QkFBNkI7QUFDN0Isd0JBQTBCO0FBSzFCLDhCQUdPO0FBS1AsaUNBQXVDO0FBRXZDLDZCQUFrQztBQU1sQyxvQ0FBNkM7QUFXN0MsOEJBQStCO0FBTS9CLDRCQUdPO0FBRVAsa0RBQWtEO0FBTWxELHFDQUE4QztBQU05Qyw4QkFLTztBQUVQLDBCQUFvQztBQU1wQywrQkFBbUM7QUFDbkMsOEJBR087QUFFUCw4QkFBK0I7QUFDL0IsaURBQWdEO0FBRWhELGdDQUF5QztBQUV6Qyx3Q0FBd0M7QUFLeEMsNkJBQStCO0FBSy9CLDhCQUFnQztBQU1oQyxtQ0FBb0M7QUFDcEMsK0JBQTJDO0FBVTNDLDRCQUdPO0FBRVAsNEJBQStDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -28,6 +28,8 @@ export type { IncompatibleInstallerVersionErrorConstructorParams } from './incom
28
28
  export { IncompatibleInstallerVersionError } from './incompatible-installer-version-error.cjs';
29
29
  export type { InstallerCompatibility, InstallerCompatibilityTier, ResolveInstallerCompatibilityParams } from './installer-compatibility.cjs';
30
30
  export { resolveInstallerCompatibility } from './installer-compatibility.cjs';
31
+ export type { ComputeLabelBandParams, LabelBandGeometry, LabelScreenshotOptions } from './label-screenshot.cjs';
32
+ export { buildLabelSvg, computeLabelBand, escapeSvgText, labelScreenshot } from './label-screenshot.cjs';
31
33
  export type { LibResolver } from './lib-registry.cjs';
32
34
  export { registerLibResolver } from './lib-registry.cjs';
33
35
  export type { ObsidianRuntimeVersions, ObsidianVersionDownloads, ObsidianVersionMetadata } from './obsidian-metadata.cjs';
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var label_screenshot_exports = {};
20
+ __export(label_screenshot_exports, {
21
+ buildLabelSvg: () => buildLabelSvg,
22
+ computeLabelBand: () => computeLabelBand,
23
+ escapeSvgText: () => escapeSvgText,
24
+ labelScreenshot: () => labelScreenshot
25
+ });
26
+ module.exports = __toCommonJS(label_screenshot_exports);
27
+ var import_sharp_loader = require("./sharp-loader.cjs");
28
+ const FONT_SIZE_RATIO = 0.034;
29
+ const BAND_HEIGHT_RATIO = 2.2;
30
+ const BAND_OPACITY = 0.82;
31
+ const MINIMUM_FONT_SIZE_IN_PIXELS = 18;
32
+ const CENTER_DIVISOR = 2;
33
+ function buildLabelSvg(text, geometry, imageWidthInPixels) {
34
+ const { fontSizeInPixels, heightInPixels } = geometry;
35
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${String(imageWidthInPixels)}" height="${String(heightInPixels)}"><rect x="0" y="0" width="${String(imageWidthInPixels)}" height="${String(heightInPixels)}" fill="#000000" fill-opacity="${String(BAND_OPACITY)}"/><text x="${String(imageWidthInPixels / CENTER_DIVISOR)}" y="${String(heightInPixels / CENTER_DIVISOR)}" font-family="Segoe UI, Helvetica, Arial, sans-serif" font-size="${String(fontSizeInPixels)}" font-weight="600" fill="#ffffff" text-anchor="middle" dominant-baseline="central">${escapeSvgText(text)}</text></svg>`;
36
+ }
37
+ function computeLabelBand(params) {
38
+ const { imageHeightInPixels, imageWidthInPixels } = params;
39
+ if (!Number.isFinite(imageWidthInPixels) || imageWidthInPixels <= 0) {
40
+ throw new Error(`computeLabelBand: imageWidthInPixels must be a positive number, got ${String(imageWidthInPixels)}.`);
41
+ }
42
+ if (!Number.isFinite(imageHeightInPixels) || imageHeightInPixels <= 0) {
43
+ throw new Error(`computeLabelBand: imageHeightInPixels must be a positive number, got ${String(imageHeightInPixels)}.`);
44
+ }
45
+ const fontSizeInPixels = Math.max(MINIMUM_FONT_SIZE_IN_PIXELS, Math.round(imageWidthInPixels * FONT_SIZE_RATIO));
46
+ const heightInPixels = Math.min(imageHeightInPixels, Math.round(fontSizeInPixels * BAND_HEIGHT_RATIO));
47
+ return {
48
+ fontSizeInPixels,
49
+ heightInPixels,
50
+ topInPixels: imageHeightInPixels - heightInPixels
51
+ };
52
+ }
53
+ function escapeSvgText(text) {
54
+ return text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&apos;");
55
+ }
56
+ async function labelScreenshot(bytes, options) {
57
+ const sharp = await (0, import_sharp_loader.importSharp)("labelScreenshot");
58
+ const metadata = await sharp(bytes).metadata();
59
+ const imageWidthInPixels = metadata.width;
60
+ const imageHeightInPixels = metadata.height;
61
+ if (imageWidthInPixels === void 0 || imageHeightInPixels === void 0) {
62
+ throw new Error("labelScreenshot: could not read the source image dimensions.");
63
+ }
64
+ const geometry = computeLabelBand({ imageHeightInPixels, imageWidthInPixels });
65
+ const svg = buildLabelSvg(options.text, geometry, imageWidthInPixels);
66
+ const layer = {
67
+ input: Buffer.from(svg),
68
+ left: 0,
69
+ top: geometry.topInPixels
70
+ };
71
+ const labeled = await sharp(bytes).composite([layer]).png().toBuffer();
72
+ return new Uint8Array(labeled);
73
+ }
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ buildLabelSvg,
77
+ computeLabelBand,
78
+ escapeSvgText,
79
+ labelScreenshot
80
+ });
81
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhYmVsLXNjcmVlbnNob3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBZGRzIGEgY2FwdGlvbiBiYW5kIHRvIGFuIGFscmVhZHktY2FwdHVyZWQgc2NyZWVuc2hvdC5cbiAqXG4gKiBBIHN0b3JlIGxpc3Rpbmcgc2hvd3Mgc2NyZWVuc2hvdHMgT05FIEFUIEEgVElNRSwgaW4gYSBjYXJvdXNlbCwgd2l0aCBub1xuICogY2FwdGlvbiBvZiBpdHMgb3duIFx1MjAxNCBzbyBhbiBpbWFnZSBoYXMgdG8gc2F5IHdoYXQgaXQgaXMgc2hvd2luZy4gV2l0aG91dCB0aGF0LFxuICogYSBzaG90IG9mIHRoZSBzdGF0ZSBhIHBsdWdpbiByZW1vdmVzIHJlYWRzIGFzIGEgc2hvdCBvZiB0aGUgc3RhdGUgdGhlIHBsdWdpblxuICogY2F1c2VzLCB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG1lc3NhZ2UuXG4gKlxuICogVGhlIGJhbmQgaXMgZHJhd24gb3ZlciB0aGUgQk9UVE9NIG9mIHRoZSBmcmFtZSwgZm9yIHR3byByZWFzb25zOiB0aGUgdG9wIGlzXG4gKiB3aGVyZSB0aGUgY29udGVudCBiZWluZyBkZW1vbnN0cmF0ZWQgdXN1YWxseSBzdGFydHMsIGFuZCB0aGUgYm90dG9tIG9mIGFuXG4gKiBPYnNpZGlhbiBmcmFtZSBpcyBjaHJvbWUgXHUyMDE0IHN0YXR1cyBiYXIsIHdvcmQgY291bnQsIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCB3aGljaCB0aGVcbiAqIGJhbmQgdGhlbiBjb3ZlcnMgcmF0aGVyIHRoYW4gY29tcGV0aW5nIHdpdGguXG4gKlxuICogVGhpcyBpcyBwb3N0LXByb2Nlc3NpbmcsIGRlbGliZXJhdGVseS4gVGhlIGNhcHR1cmUgc3RheXMgYW4gdW50b3VjaGVkIGRldmljZVxuICogZnJhbWUsIGFuZCByZXdvcmRpbmcgYSBsYWJlbCBuZWVkcyBubyByZS1zaG9vdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNoYXJwQ29tcG9zaXRlTGF5ZXIgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5janMnO1xuXG5pbXBvcnQgeyBpbXBvcnRTaGFycCB9IGZyb20gJy4vc2hhcnAtbG9hZGVyLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbXB1dGVMYWJlbEJhbmR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVMYWJlbEJhbmRQYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBpbWFnZSBiZWluZyBsYWJlbGVkLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBpbWFnZUhlaWdodEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSBpbWFnZSBiZWluZyBsYWJlbGVkLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVdpZHRoSW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgZ2VvbWV0cnkgb2YgdGhlIGNhcHRpb24gYmFuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbEJhbmRHZW9tZXRyeSB7XG4gIC8qKlxuICAgKiBGb250IHNpemUgZm9yIHRoZSBjYXB0aW9uLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBmb250U2l6ZUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgYmFuZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogRGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBpbWFnZSB0byB0aGUgdG9wIG9mIHRoZSBiYW5kLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSB0b3BJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBsYWJlbFNjcmVlbnNob3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsU2NyZWVuc2hvdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNhcHRpb24uIEtlZXAgaXQgdG8gYSBoYW5kZnVsIG9mIHdvcmRzOiBpdCBpcyByZWFkIGF0IGxpc3RpbmctdGh1bWJuYWlsXG4gICAqIHNpemUsIGFuZCBpdCBpcyBjbGlwcGVkIHJhdGhlciB0aGFuIHdyYXBwZWQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FwdGlvbiBzaXplIGFzIGEgZnJhY3Rpb24gb2YgaW1hZ2UgV0lEVEgsIG5vdCBoZWlnaHQuXG4gKlxuICogV2lkdGggaXMgd2hhdCBnb3Zlcm5zIGxlZ2liaWxpdHkgaGVyZTogYSA5MDB4MTYwMCBwaG9uZSBmcmFtZSBhbmQgYSAxMjAweDgwMFxuICogZGVza3RvcCBmcmFtZSBhcmUgcmVhZCBhdCBzaW1pbGFyIG9uLXNjcmVlbiB3aWR0aHMgaW4gYSBsaXN0aW5nLCBzbyBzaXppbmcgYnlcbiAqIHdpZHRoIGtlZXBzIHRoZSBjYXB0aW9uIHZpc3VhbGx5IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSB0d28uXG4gKi9cbmNvbnN0IEZPTlRfU0laRV9SQVRJTyA9IDAuMDM0O1xuXG4vKipcbiAqIEJhbmQgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSBcdTIwMTQgZW5vdWdoIHRvIHNpdCB0aGUgdGV4dCBvbiB3aXRoXG4gKiBjbGVhciBzcGFjZSBhYm92ZSBhbmQgYmVsb3cuXG4gKi9cbmNvbnN0IEJBTkRfSEVJR0hUX1JBVElPID0gMi4yO1xuXG4vKipcbiAqIE9wYWNpdHkgb2YgdGhlIGJhbmQsIGRhcmsgZW5vdWdoIHRvIGNhcnJ5IGxpZ2h0IHRleHQgb3ZlciBhbnkgT2JzaWRpYW4gdGhlbWVcbiAqIHdoaWxlIHRoZSBmcmFtZSBiZW5lYXRoIHN0YXlzIGZhaW50bHkgdmlzaWJsZSByYXRoZXIgdGhhbiBsb29raW5nIGN1dCBvZmYuXG4gKi9cbmNvbnN0IEJBTkRfT1BBQ0lUWSA9IDAuODI7XG5cbmNvbnN0IE1JTklNVU1fRk9OVF9TSVpFX0lOX1BJWEVMUyA9IDE4O1xuXG4vKipcbiAqIERpdmlzb3IgdGhhdCB0dXJucyBhIHNwYW4gaW50byBpdHMgbWlkcG9pbnQsIGZvciBjZW50ZXJpbmcgdGhlIGNhcHRpb24uXG4gKi9cbmNvbnN0IENFTlRFUl9ESVZJU09SID0gMjtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNWRyBmb3IgdGhlIGNhcHRpb24gYmFuZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBjYXB0aW9uLlxuICogQHBhcmFtIGdlb21ldHJ5IC0gVGhlIGJhbmQgZ2VvbWV0cnkuXG4gKiBAcGFyYW0gaW1hZ2VXaWR0aEluUGl4ZWxzIC0gV2lkdGggb2YgdGhlIGltYWdlLCBzbyB0aGUgYmFuZCBzcGFucyBpdC5cbiAqIEByZXR1cm5zIFRoZSBTVkcgbWFya3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMYWJlbFN2Zyh0ZXh0OiBzdHJpbmcsIGdlb21ldHJ5OiBMYWJlbEJhbmRHZW9tZXRyeSwgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCB7IGZvbnRTaXplSW5QaXhlbHMsIGhlaWdodEluUGl4ZWxzIH0gPSBnZW9tZXRyeTtcblxuICByZXR1cm4gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyl9XCI+YFxuICAgICsgYDxyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIiR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9XCIgaGVpZ2h0PVwiJHtTdHJpbmcoaGVpZ2h0SW5QaXhlbHMpfVwiIGBcbiAgICArIGBmaWxsPVwiIzAwMDAwMFwiIGZpbGwtb3BhY2l0eT1cIiR7U3RyaW5nKEJBTkRfT1BBQ0lUWSl9XCIvPmBcbiAgICArIGA8dGV4dCB4PVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzIC8gQ0VOVEVSX0RJVklTT1IpfVwiIHk9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyAvIENFTlRFUl9ESVZJU09SKX1cIiBgXG4gICAgKyBgZm9udC1mYW1pbHk9XCJTZWdvZSBVSSwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiIGZvbnQtc2l6ZT1cIiR7U3RyaW5nKGZvbnRTaXplSW5QaXhlbHMpfVwiIGBcbiAgICArICdmb250LXdlaWdodD1cIjYwMFwiIGZpbGw9XCIjZmZmZmZmXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBkb21pbmFudC1iYXNlbGluZT1cImNlbnRyYWxcIj4nXG4gICAgKyBgJHtlc2NhcGVTdmdUZXh0KHRleHQpfTwvdGV4dD48L3N2Zz5gO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBjYXB0aW9uIGJhbmQncyBzaXplIGFuZCBwb3NpdGlvbiBmb3IgYSBnaXZlbiBpbWFnZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGltYWdlIGRpbWVuc2lvbnMuXG4gKiBAcmV0dXJucyBUaGUgYmFuZCBnZW9tZXRyeS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgZWl0aGVyIGRpbWVuc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTGFiZWxCYW5kKHBhcmFtczogQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyk6IExhYmVsQmFuZEdlb21ldHJ5IHtcbiAgY29uc3QgeyBpbWFnZUhlaWdodEluUGl4ZWxzLCBpbWFnZVdpZHRoSW5QaXhlbHMgfSA9IHBhcmFtcztcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbWFnZVdpZHRoSW5QaXhlbHMpIHx8IGltYWdlV2lkdGhJblBpeGVscyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlTGFiZWxCYW5kOiBpbWFnZVdpZHRoSW5QaXhlbHMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9LmApO1xuICB9XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW1hZ2VIZWlnaHRJblBpeGVscykgfHwgaW1hZ2VIZWlnaHRJblBpeGVscyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlTGFiZWxCYW5kOiBpbWFnZUhlaWdodEluUGl4ZWxzIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIsIGdvdCAke1N0cmluZyhpbWFnZUhlaWdodEluUGl4ZWxzKX0uYCk7XG4gIH1cblxuICBjb25zdCBmb250U2l6ZUluUGl4ZWxzID0gTWF0aC5tYXgoTUlOSU1VTV9GT05UX1NJWkVfSU5fUElYRUxTLCBNYXRoLnJvdW5kKGltYWdlV2lkdGhJblBpeGVscyAqIEZPTlRfU0laRV9SQVRJTykpO1xuICBjb25zdCBoZWlnaHRJblBpeGVscyA9IE1hdGgubWluKGltYWdlSGVpZ2h0SW5QaXhlbHMsIE1hdGgucm91bmQoZm9udFNpemVJblBpeGVscyAqIEJBTkRfSEVJR0hUX1JBVElPKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb250U2l6ZUluUGl4ZWxzLFxuICAgIGhlaWdodEluUGl4ZWxzLFxuICAgIHRvcEluUGl4ZWxzOiBpbWFnZUhlaWdodEluUGl4ZWxzIC0gaGVpZ2h0SW5QaXhlbHNcbiAgfTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHRleHQgZm9yIGluY2x1c2lvbiBpbiBTVkcgY2hhcmFjdGVyIGRhdGEuXG4gKlxuICogQSBjYXB0aW9uIGlzIGF1dGhvcmVkIHBlciBzY3JlZW5zaG90IGFuZCBjYW4gbGVnaXRpbWF0ZWx5IGNvbnRhaW4gYCZgIG9yIHRoZVxuICogYW5nbGUgYnJhY2tldHMgT2JzaWRpYW4gdXNlcyBpbiBsaW5rIHN5bnRheDsgdW5lc2NhcGVkLCB0aG9zZSBtYWtlIHRoZSBTVkdcbiAqIGltcG9zc2libGUgdG8gcGFyc2UgYW5kIGBzaGFycGAgZmFpbHMgb24gYSBjYXB0aW9uIHJhdGhlciB0aGFuIG9uIGFuIGltYWdlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHJhdyBjYXB0aW9uLlxuICogQHJldHVybnMgVGhlIGNhcHRpb24sIHNhZmUgdG8gZW1iZWQgaW4gU1ZHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlU3ZnVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JylcbiAgICAucmVwbGFjZUFsbCgnPCcsICcmbHQ7JylcbiAgICAucmVwbGFjZUFsbCgnPicsICcmZ3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXFwnJywgJyZhcG9zOycpO1xufVxuXG4vKipcbiAqIERyYXdzIGEgY2FwdGlvbiBiYW5kIGFjcm9zcyB0aGUgYm90dG9tIG9mIGEgc2NyZWVuc2hvdC5cbiAqXG4gKiBUaGUgaW1hZ2Uga2VlcHMgaXRzIGRpbWVuc2lvbnMgZXhhY3RseTogdGhlIGJhbmQgaXMgY29tcG9zaXRlZCBPVkVSIHRoZVxuICogZnJhbWUsIG5ldmVyIGFwcGVuZGVkIHRvIGl0LCBiZWNhdXNlIHRoZSBzdG9yZSBleHBlY3RzIGEgc3BlY2lmaWMgc2l6ZS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgY2FwdHVyZWQgUE5HLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgY2FwdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhYmVsZWQgUE5HLCB0aGUgc2FtZSBzaXplIGFzIHRoZSBpbnB1dC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYHNoYXJwYCBpcyBub3QgaW5zdGFsbGVkLCBvciB0aGUgaW1hZ2UgZGltZW5zaW9ucyBjYW5ub3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhYmVsU2NyZWVuc2hvdChieXRlczogVWludDhBcnJheSwgb3B0aW9uczogTGFiZWxTY3JlZW5zaG90T3B0aW9ucyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCdsYWJlbFNjcmVlbnNob3QnKTtcbiAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBzaGFycChieXRlcykubWV0YWRhdGEoKTtcbiAgY29uc3QgaW1hZ2VXaWR0aEluUGl4ZWxzID0gbWV0YWRhdGEud2lkdGg7XG4gIGNvbnN0IGltYWdlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoaW1hZ2VXaWR0aEluUGl4ZWxzID09PSB1bmRlZmluZWQgfHwgaW1hZ2VIZWlnaHRJblBpeGVscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsYWJlbFNjcmVlbnNob3Q6IGNvdWxkIG5vdCByZWFkIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IGdlb21ldHJ5ID0gY29tcHV0ZUxhYmVsQmFuZCh7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9KTtcbiAgY29uc3Qgc3ZnID0gYnVpbGRMYWJlbFN2ZyhvcHRpb25zLnRleHQsIGdlb21ldHJ5LCBpbWFnZVdpZHRoSW5QaXhlbHMpO1xuICBjb25zdCBsYXllcjogU2hhcnBDb21wb3NpdGVMYXllciA9IHtcbiAgICBpbnB1dDogQnVmZmVyLmZyb20oc3ZnKSxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogZ2VvbWV0cnkudG9wSW5QaXhlbHNcbiAgfTtcblxuICBjb25zdCBsYWJlbGVkID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLmNvbXBvc2l0ZShbbGF5ZXJdKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShsYWJlbGVkKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQkEsMEJBQTRCO0FBdUQ1QixNQUFNLGtCQUFrQjtBQU14QixNQUFNLG9CQUFvQjtBQU0xQixNQUFNLGVBQWU7QUFFckIsTUFBTSw4QkFBOEI7QUFLcEMsTUFBTSxpQkFBaUI7QUFVaEIsU0FBUyxjQUFjLE1BQWMsVUFBNkIsb0JBQW9DO0FBQzNHLFFBQU0sRUFBRSxrQkFBa0IsZUFBZSxJQUFJO0FBRTdDLFNBQU8sa0RBQWtELE9BQU8sa0JBQWtCLENBQUMsYUFBYSxPQUFPLGNBQWMsQ0FBQyw4QkFDdEYsT0FBTyxrQkFBa0IsQ0FBQyxhQUFhLE9BQU8sY0FBYyxDQUFDLGtDQUN6RCxPQUFPLFlBQVksQ0FBQyxlQUN4QyxPQUFPLHFCQUFxQixjQUFjLENBQUMsUUFBUSxPQUFPLGlCQUFpQixjQUFjLENBQUMscUVBQ25DLE9BQU8sZ0JBQWdCLENBQUMsdUZBRXhGLGNBQWMsSUFBSSxDQUFDO0FBQzVCO0FBU08sU0FBUyxpQkFBaUIsUUFBbUQ7QUFDbEYsUUFBTSxFQUFFLHFCQUFxQixtQkFBbUIsSUFBSTtBQUVwRCxNQUFJLENBQUMsT0FBTyxTQUFTLGtCQUFrQixLQUFLLHNCQUFzQixHQUFHO0FBQ25FLFVBQU0sSUFBSSxNQUFNLHVFQUF1RSxPQUFPLGtCQUFrQixDQUFDLEdBQUc7QUFBQSxFQUN0SDtBQUVBLE1BQUksQ0FBQyxPQUFPLFNBQVMsbUJBQW1CLEtBQUssdUJBQXVCLEdBQUc7QUFDckUsVUFBTSxJQUFJLE1BQU0sd0VBQXdFLE9BQU8sbUJBQW1CLENBQUMsR0FBRztBQUFBLEVBQ3hIO0FBRUEsUUFBTSxtQkFBbUIsS0FBSyxJQUFJLDZCQUE2QixLQUFLLE1BQU0scUJBQXFCLGVBQWUsQ0FBQztBQUMvRyxRQUFNLGlCQUFpQixLQUFLLElBQUkscUJBQXFCLEtBQUssTUFBTSxtQkFBbUIsaUJBQWlCLENBQUM7QUFFckcsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQSxhQUFhLHNCQUFzQjtBQUFBLEVBQ3JDO0FBQ0Y7QUFZTyxTQUFTLGNBQWMsTUFBc0I7QUFDbEQsU0FBTyxLQUNKLFdBQVcsS0FBSyxPQUFPLEVBQ3ZCLFdBQVcsS0FBSyxNQUFNLEVBQ3RCLFdBQVcsS0FBSyxNQUFNLEVBQ3RCLFdBQVcsS0FBSyxRQUFRLEVBQ3hCLFdBQVcsS0FBTSxRQUFRO0FBQzlCO0FBYUEsZUFBc0IsZ0JBQWdCLE9BQW1CLFNBQXNEO0FBQzdHLFFBQU0sUUFBUSxVQUFNLGlDQUFZLGlCQUFpQjtBQUNqRCxRQUFNLFdBQVcsTUFBTSxNQUFNLEtBQUssRUFBRSxTQUFTO0FBQzdDLFFBQU0scUJBQXFCLFNBQVM7QUFDcEMsUUFBTSxzQkFBc0IsU0FBUztBQUdyQyxNQUFJLHVCQUF1QixVQUFhLHdCQUF3QixRQUFXO0FBQ3pFLFVBQU0sSUFBSSxNQUFNLDhEQUE4RDtBQUFBLEVBQ2hGO0FBRUEsUUFBTSxXQUFXLGlCQUFpQixFQUFFLHFCQUFxQixtQkFBbUIsQ0FBQztBQUM3RSxRQUFNLE1BQU0sY0FBYyxRQUFRLE1BQU0sVUFBVSxrQkFBa0I7QUFDcEUsUUFBTSxRQUE2QjtBQUFBLElBQ2pDLE9BQU8sT0FBTyxLQUFLLEdBQUc7QUFBQSxJQUN0QixNQUFNO0FBQUEsSUFDTixLQUFLLFNBQVM7QUFBQSxFQUNoQjtBQUVBLFFBQU0sVUFBVSxNQUFNLE1BQU0sS0FBSyxFQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQ2pCLElBQUksRUFDSixTQUFTO0FBRVosU0FBTyxJQUFJLFdBQVcsT0FBTztBQUMvQjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,98 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Adds a caption band to an already-captured screenshot.
5
+ *
6
+ * A store listing shows screenshots ONE AT A TIME, in a carousel, with no
7
+ * caption of its own — so an image has to say what it is showing. Without that,
8
+ * a shot of the state a plugin removes reads as a shot of the state the plugin
9
+ * causes, which is the opposite of the message.
10
+ *
11
+ * The band is drawn over the BOTTOM of the frame, for two reasons: the top is
12
+ * where the content being demonstrated usually starts, and the bottom of an
13
+ * Obsidian frame is chrome — status bar, word count, sync indicator — which the
14
+ * band then covers rather than competing with.
15
+ *
16
+ * This is post-processing, deliberately. The capture stays an untouched device
17
+ * frame, and rewording a label needs no re-shoot.
18
+ */
19
+ /**
20
+ * Parameters for {@link computeLabelBand}.
21
+ */
22
+ export interface ComputeLabelBandParams {
23
+ /**
24
+ * Height of the image being labeled, in pixels.
25
+ */
26
+ readonly imageHeightInPixels: number;
27
+ /**
28
+ * Width of the image being labeled, in pixels.
29
+ */
30
+ readonly imageWidthInPixels: number;
31
+ }
32
+ /**
33
+ * The geometry of the caption band.
34
+ */
35
+ export interface LabelBandGeometry {
36
+ /**
37
+ * Font size for the caption, in pixels.
38
+ */
39
+ readonly fontSizeInPixels: number;
40
+ /**
41
+ * Height of the band, in pixels.
42
+ */
43
+ readonly heightInPixels: number;
44
+ /**
45
+ * Distance from the top of the image to the top of the band, in pixels.
46
+ */
47
+ readonly topInPixels: number;
48
+ }
49
+ /**
50
+ * Options for {@link labelScreenshot}.
51
+ */
52
+ export interface LabelScreenshotOptions {
53
+ /**
54
+ * The caption. Keep it to a handful of words: it is read at listing-thumbnail
55
+ * size, and it is clipped rather than wrapped.
56
+ */
57
+ readonly text: string;
58
+ }
59
+ /**
60
+ * Builds the SVG for the caption band.
61
+ *
62
+ * @param text - The caption.
63
+ * @param geometry - The band geometry.
64
+ * @param imageWidthInPixels - Width of the image, so the band spans it.
65
+ * @returns The SVG markup.
66
+ */
67
+ export declare function buildLabelSvg(text: string, geometry: LabelBandGeometry, imageWidthInPixels: number): string;
68
+ /**
69
+ * Computes the caption band's size and position for a given image.
70
+ *
71
+ * @param params - The image dimensions.
72
+ * @returns The band geometry.
73
+ * @throws Error if either dimension is not a positive number.
74
+ */
75
+ export declare function computeLabelBand(params: ComputeLabelBandParams): LabelBandGeometry;
76
+ /**
77
+ * Escapes text for inclusion in SVG character data.
78
+ *
79
+ * A caption is authored per screenshot and can legitimately contain `&` or the
80
+ * angle brackets Obsidian uses in link syntax; unescaped, those make the SVG
81
+ * impossible to parse and `sharp` fails on a caption rather than on an image.
82
+ *
83
+ * @param text - The raw caption.
84
+ * @returns The caption, safe to embed in SVG.
85
+ */
86
+ export declare function escapeSvgText(text: string): string;
87
+ /**
88
+ * Draws a caption band across the bottom of a screenshot.
89
+ *
90
+ * The image keeps its dimensions exactly: the band is composited OVER the
91
+ * frame, never appended to it, because the store expects a specific size.
92
+ *
93
+ * @param bytes - The captured PNG.
94
+ * @param options - The caption.
95
+ * @returns A {@link Promise} that resolves to the labeled PNG, the same size as the input.
96
+ * @throws Error if `sharp` is not installed, or the image dimensions cannot be read.
97
+ */
98
+ export declare function labelScreenshot(bytes: Uint8Array, options: LabelScreenshotOptions): Promise<Uint8Array>;
@@ -21,7 +21,7 @@ __export(library_exports, {
21
21
  LIBRARY_VERSION: () => LIBRARY_VERSION
22
22
  });
23
23
  module.exports = __toCommonJS(library_exports);
24
- const LIBRARY_VERSION = false ? "dev" : "10.1.0";
24
+ const LIBRARY_VERSION = false ? "dev" : "10.2.0";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  LIBRARY_VERSION
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var sharp_loader_exports = {};
30
+ __export(sharp_loader_exports, {
31
+ importSharp: () => importSharp
32
+ });
33
+ module.exports = __toCommonJS(sharp_loader_exports);
34
+ async function importSharp(caller) {
35
+ try {
36
+ const sharpModule = await import("sharp");
37
+ const factory = sharpModule.default;
38
+ return factory;
39
+ } catch (error) {
40
+ throw new Error(
41
+ `${caller} needs the optional peer dependency "sharp". Install it in the consuming project (npm i -D sharp).`,
42
+ { cause: error }
43
+ );
44
+ }
45
+ }
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ importSharp
49
+ });
50
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NoYXJwLWxvYWRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExhemlseSBsb2FkcyBgc2hhcnBgLCB0aGUgT1BUSU9OQUwgcGVlciBkZXBlbmRlbmN5IHRoZSBpbWFnZSBoZWxwZXJzIG5lZWQsIGFuZFxuICogZGVzY3JpYmVzIHRoZSBzbGljZSBvZiBpdHMgc3VyZmFjZSB0aGV5IHVzZS5cbiAqXG4gKiBUaGUgbG9hZCBpcyBkZWZlcnJlZCBiZWNhdXNlIGEgc3RhdGljIGltcG9ydCB3b3VsZCBkcmFnIGBzaGFycGAnc1xuICogcGxhdGZvcm0tc3BlY2lmaWMgbmF0aXZlIGJpbmFyaWVzIGludG8gZXZlcnkgY29uc3VtZXIgb2YgdGhpcyBwYWNrYWdlJ3MgaW5kZXgsXG4gKiB3aGVuIG9ubHkgc2NyZWVuc2hvdCBwb3N0LXByb2Nlc3NpbmcgbmVlZHMgdGhlbS4gVGhlIHR5cGUgaXMgc3RydWN0dXJhbCBmb3JcbiAqIHRoZSBzYW1lIHJlYXNvbjogdGhpcyBtb2R1bGUgdHlwZS1jaGVja3Mgd2l0aG91dCBgc2hhcnBgJ3Mgb3duIHR5cGVzIGJlaW5nXG4gKiByZXNvbHZhYmxlLlxuICovXG5cbi8qKlxuICogQSBsYXllciBwYXNzZWQgdG8gYHNoYXJwYCdzIGBjb21wb3NpdGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJwQ29tcG9zaXRlTGF5ZXIge1xuICByZWFkb25seSBpbnB1dDogQnVmZmVyO1xuICByZWFkb25seSBsZWZ0OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvcDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBgc2hhcnBgIGVudHJ5IHBvaW50IHRoZSBpbWFnZSBoZWxwZXJzIHVzZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2hhcnBGYWN0b3J5ID0gKGlucHV0OiBVaW50OEFycmF5KSA9PiBTaGFycEluc3RhbmNlO1xuXG4vKipcbiAqIE9uZSBgc2hhcnBgIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJwSW5zdGFuY2Uge1xuICBibHVyKHRoaXM6IHZvaWQsIHNpZ21hOiBudW1iZXIpOiBTaGFycEluc3RhbmNlO1xuICBjb21wb3NpdGUodGhpczogdm9pZCwgbGF5ZXJzOiBTaGFycENvbXBvc2l0ZUxheWVyW10pOiBTaGFycEluc3RhbmNlO1xuICBtZXRhZGF0YSh0aGlzOiB2b2lkKTogUHJvbWlzZTxTaGFycE1ldGFkYXRhPjtcbiAgcG5nKHRoaXM6IHZvaWQpOiBTaGFycEluc3RhbmNlO1xuICByZXNpemUodGhpczogdm9pZCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9wdGlvbnM/OiBTaGFycFJlc2l6ZU9wdGlvbnMpOiBTaGFycEluc3RhbmNlO1xuICB0b0J1ZmZlcih0aGlzOiB2b2lkKTogUHJvbWlzZTxCdWZmZXI+O1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYHNoYXJwYCdzIG1ldGFkYXRhIHRoZSBpbWFnZSBoZWxwZXJzIHJlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcnBNZXRhZGF0YSB7XG4gIHJlYWRvbmx5IGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgd2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBgc2hhcnBgJ3MgcmVzaXplIG9wdGlvbnMgdGhlIGltYWdlIGhlbHBlcnMgc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJwUmVzaXplT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZpdDogJ2NvdmVyJyB8ICdmaWxsJztcbn1cblxuLyoqXG4gKiBMb2FkcyBgc2hhcnBgIG9uIGRlbWFuZC5cbiAqXG4gKiBAcGFyYW0gY2FsbGVyIC0gTmFtZSBvZiB0aGUgY2FsbGluZyBoZWxwZXIsIHNvIHRoZSBlcnJvciBzYXlzIHdoaWNoIG9uZSBuZWVkcyBpdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGBzaGFycGAgZmFjdG9yeS5cbiAqIEB0aHJvd3MgRXJyb3IgbmFtaW5nIHRoZSBtaXNzaW5nIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFNoYXJwKGNhbGxlcjogc3RyaW5nKTogUHJvbWlzZTxTaGFycEZhY3Rvcnk+IHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gYHNoYXJwYCBpcyBhbiBPUFRJT05BTCBwZWVyLCBzbyBpdCBtdXN0IGJlIGxvYWRlZCBsYXppbHk6IGEgc3RhdGljIGltcG9ydCB3b3VsZCBkcmFnIGl0cyBuYXRpdmUgYmluYXJpZXMgaW50byBldmVyeSBjb25zdW1lciBvZiB0aGlzIHBhY2thZ2UncyBpbmRleC5cbiAgICBjb25zdCBzaGFycE1vZHVsZSA9IGF3YWl0IGltcG9ydCgnc2hhcnAnKTtcbiAgICBjb25zdCBmYWN0b3J5OiB1bmtub3duID0gc2hhcnBNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gZmFjdG9yeSBhcyBTaGFycEZhY3Rvcnk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFJlYWNoZWQgb25seSB3aGVuIHRoZSBvcHRpb25hbCBwZWVyIGlzIGFic2VudCwgd2hpY2ggaXQgbmV2ZXIgaXMgaW4gdGhpcyBwYWNrYWdlJ3Mgb3duIHRlc3QgcnVuLiAqL1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2NhbGxlcn0gbmVlZHMgdGhlIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeSBcInNoYXJwXCIuIGBcbiAgICAgICAgKyAnSW5zdGFsbCBpdCBpbiB0aGUgY29uc3VtaW5nIHByb2plY3QgKG5wbSBpIC1EIHNoYXJwKS4nLFxuICAgICAgeyBjYXVzZTogZXJyb3IgfVxuICAgICk7XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2REEsZUFBc0IsWUFBWSxRQUF1QztBQUN2RSxNQUFJO0FBRUYsVUFBTSxjQUFjLE1BQU0sT0FBTyxPQUFPO0FBQ3hDLFVBQU0sVUFBbUIsWUFBWTtBQUNyQyxXQUFPO0FBQUEsRUFDVCxTQUFTLE9BQWdCO0FBRXZCLFVBQU0sSUFBSTtBQUFBLE1BQ1IsR0FBRyxNQUFNO0FBQUEsTUFFVCxFQUFFLE9BQU8sTUFBTTtBQUFBLElBQ2pCO0FBQUEsRUFFRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Lazily loads `sharp`, the OPTIONAL peer dependency the image helpers need, and
5
+ * describes the slice of its surface they use.
6
+ *
7
+ * The load is deferred because a static import would drag `sharp`'s
8
+ * platform-specific native binaries into every consumer of this package's index,
9
+ * when only screenshot post-processing needs them. The type is structural for
10
+ * the same reason: this module type-checks without `sharp`'s own types being
11
+ * resolvable.
12
+ */
13
+ /**
14
+ * A layer passed to `sharp`'s `composite`.
15
+ */
16
+ export interface SharpCompositeLayer {
17
+ readonly input: Buffer;
18
+ readonly left: number;
19
+ readonly top: number;
20
+ }
21
+ /**
22
+ * The `sharp` entry point the image helpers use.
23
+ */
24
+ export type SharpFactory = (input: Uint8Array) => SharpInstance;
25
+ /**
26
+ * One `sharp` pipeline.
27
+ */
28
+ export interface SharpInstance {
29
+ blur(this: void, sigma: number): SharpInstance;
30
+ composite(this: void, layers: SharpCompositeLayer[]): SharpInstance;
31
+ metadata(this: void): Promise<SharpMetadata>;
32
+ png(this: void): SharpInstance;
33
+ resize(this: void, width: number, height: number, options?: SharpResizeOptions): SharpInstance;
34
+ toBuffer(this: void): Promise<Buffer>;
35
+ }
36
+ /**
37
+ * The subset of `sharp`'s metadata the image helpers read.
38
+ */
39
+ export interface SharpMetadata {
40
+ readonly height?: number | undefined;
41
+ readonly width?: number | undefined;
42
+ }
43
+ /**
44
+ * The subset of `sharp`'s resize options the image helpers set.
45
+ */
46
+ export interface SharpResizeOptions {
47
+ readonly fit: 'cover' | 'fill';
48
+ }
49
+ /**
50
+ * Loads `sharp` on demand.
51
+ *
52
+ * @param caller - Name of the calling helper, so the error says which one needs it.
53
+ * @returns A {@link Promise} that resolves to the `sharp` factory.
54
+ * @throws Error naming the missing optional peer dependency.
55
+ */
56
+ export declare function importSharp(caller: string): Promise<SharpFactory>;
@@ -1,3 +1,4 @@
1
+ import { importSharp } from "./sharp-loader.mjs";
1
2
  const DEFAULT_BLUR_SIGMA = 24;
2
3
  const MARGIN_SIDES = 2;
3
4
  function computeFitToCanvas(params) {
@@ -41,7 +42,7 @@ async function fitScreenshotToCanvas(bytes, options) {
41
42
  canvasHeightInPixels,
42
43
  canvasWidthInPixels
43
44
  } = options;
44
- const sharp = await importSharp();
45
+ const sharp = await importSharp("fitScreenshotToCanvas");
45
46
  const metadata = await sharp(bytes).metadata();
46
47
  const sourceWidthInPixels = metadata.width;
47
48
  const sourceHeightInPixels = metadata.height;
@@ -63,18 +64,6 @@ async function fitScreenshotToCanvas(bytes, options) {
63
64
  }]).png().toBuffer();
64
65
  return new Uint8Array(composed);
65
66
  }
66
- async function importSharp() {
67
- try {
68
- const sharpModule = await import("sharp");
69
- const factory = sharpModule.default;
70
- return factory;
71
- } catch (error) {
72
- throw new Error(
73
- 'fitScreenshotToCanvas needs the optional peer dependency "sharp". Install it in the consuming project (npm i -D sharp).',
74
- { cause: error }
75
- );
76
- }
77
- }
78
67
  function roundToMatchingParity(value, target) {
79
68
  const rounded = Math.round(value);
80
69
  if ((target - rounded) % MARGIN_SIDES === 0) {
@@ -86,4 +75,4 @@ export {
86
75
  computeFitToCanvas,
87
76
  fitScreenshotToCanvas
88
77
  };
89
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZpdC1zY3JlZW5zaG90LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRml0cyBhIHNjcmVlbnNob3Qgb250byBhIGNhbnZhcyBvZiBhIGRpZmZlcmVudCBhc3BlY3QgcmF0aW8gd2l0aG91dCBjcm9wcGluZ1xuICogaXQgb3IgZGlzdG9ydGluZyBpdCwgZmlsbGluZyB0aGUgbGVmdG92ZXIgbWFyZ2lucyB3aXRoIGEgYmx1cnJlZCwgZW5sYXJnZWRcbiAqIGNvcHkgb2YgdGhlIHNhbWUgaW1hZ2UgKHRoZSBcInBpbGxhcmJveFwiIHRyZWF0bWVudCB1c2VkIGJ5IHN0b3JlIGxpc3RpbmdzKS5cbiAqXG4gKiBUaGUgbW90aXZhdGluZyBjYXNlIGlzIGEgbW9iaWxlIHN0b3JlIHNjcmVlbnNob3QuIFRoZSBBbmRyb2lkIGVtdWxhdG9yJ3NcbiAqIGZyYW1lYnVmZmVyIGlzIHdoYXRldmVyIHRoZSBBVkQncyBzY3JlZW4gaXMgXHUyMDE0IGEgUGl4ZWwgMTAgUHJvIFhMIGlzIDEzNDR4Mjk5MixcbiAqIHJvdWdobHkgOToyMCBcdTIwMTQgd2hpbGUgdGhlIGNvbW11bml0eSBzdG9yZSBhc2tzIGZvciA5MDB4MTYwMCAoOToxNikuIENyb3BwaW5nXG4gKiB0byA5OjE2IHRocm93cyBhd2F5IGEgZmlmdGggb2YgdGhlIGZyYW1lLCBhbmQgc3RyZXRjaGluZyBkaXN0b3J0cyB0aGUgVUksIHNvXG4gKiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHRvIGZpdCB0aGUgSEVJR0hUIGFuZCB0aGUgdHdvIHNpZGUgbWFyZ2lucyBhcmUgZmlsbGVkLlxuICpcbiAqIFRoZSBnZW9tZXRyeSBpcyBhIHB1cmUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHVuaXQtdGVzdGVkOyB0aGUgcGl4ZWwgd29yayBuZWVkc1xuICogYHNoYXJwYCwgd2hpY2ggaXMgYW4gT1BUSU9OQUwgcGVlciBkZXBlbmRlbmN5IFx1MjAxNCBkZWNsYXJlZCByYXRoZXIgdGhhbiBidW5kbGVkXG4gKiBiZWNhdXNlIG9ubHkgc2NyZWVuc2hvdCBjYXB0dXJlIG5lZWRzIGl0LCBhbmQgaXQgc2hpcHMgcGxhdGZvcm0tc3BlY2lmaWNcbiAqIG5hdGl2ZSBiaW5hcmllcyB0aGF0IGV2ZXJ5IG90aGVyIGNvbnN1bWVyIHdvdWxkIHBheSBmb3IuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29tcHV0ZUZpdFRvQ2FudmFzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSB0YXJnZXQgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBjYW52YXNIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgdGFyZ2V0IGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FudmFzV2lkdGhJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHNvdXJjZSBpbWFnZSwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIHNvdXJjZSBpbWFnZSwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlV2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBmaXRTY3JlZW5zaG90VG9DYW52YXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpdFNjcmVlbnNob3RUb0NhbnZhc09wdGlvbnMge1xuICAvKipcbiAgICogR2F1c3NpYW4gYmx1ciBzdHJlbmd0aCBhcHBsaWVkIHRvIHRoZSBtYXJnaW4gZmlsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDI0YFxuICAgKi9cbiAgcmVhZG9ubHkgYmx1clNpZ21hPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHRhcmdldCBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbnZhc0hlaWdodEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSB0YXJnZXQgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBjYW52YXNXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hlcmUgdGhlIHNjYWxlZCBzb3VyY2UgaW1hZ2Ugc2l0cyBvbiB0aGUgY2FudmFzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpdFRvQ2FudmFzR2VvbWV0cnkge1xuICAvKipcbiAgICogV2lkdGggb2YgZWFjaCBzaWRlIG1hcmdpbiwgaW4gcGl4ZWxzLiBCb3RoIHNpZGVzIGFyZSBlcXVhbCBieSBjb25zdHJ1Y3Rpb24uXG4gICAqL1xuICByZWFkb25seSBtYXJnaW5JblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMZWZ0IG9mZnNldCBvZiB0aGUgc2NhbGVkIGltYWdlIG9uIHRoZSBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IG9mZnNldFhJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUb3Agb2Zmc2V0IG9mIHRoZSBzY2FsZWQgaW1hZ2Ugb24gdGhlIGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0WUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCB0aGUgc291cmNlIGlzIHNjYWxlZCB0bywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGVkSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggdGhlIHNvdXJjZSBpcyBzY2FsZWQgdG8sIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IHNjYWxlZFdpZHRoSW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIGxheWVyIHBhc3NlZCB0byBgc2hhcnBgJ3MgYGNvbXBvc2l0ZWAuXG4gKi9cbmludGVyZmFjZSBTaGFycENvbXBvc2l0ZUxheWVyIHtcbiAgcmVhZG9ubHkgaW5wdXQ6IEJ1ZmZlcjtcbiAgcmVhZG9ubHkgbGVmdDogbnVtYmVyO1xuICByZWFkb25seSB0b3A6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgYHNoYXJwYCBlbnRyeSBwb2ludCB0aGlzIG1vZHVsZSB1c2VzLCBkZXNjcmliZWQgc3RydWN0dXJhbGx5IHNvIHRoZSBtb2R1bGVcbiAqIHR5cGUtY2hlY2tzIGFnYWluc3QgdGhlIG9wdGlvbmFsIHBlZXIgcmF0aGVyIHRoYW4gZGVwZW5kaW5nIG9uIGl0cyB0eXBlcy5cbiAqL1xudHlwZSBTaGFycEZhY3RvcnkgPSAoaW5wdXQ6IFVpbnQ4QXJyYXkpID0+IFNoYXJwSW5zdGFuY2U7XG5cbi8qKlxuICogT25lIGBzaGFycGAgcGlwZWxpbmUuXG4gKi9cbmludGVyZmFjZSBTaGFycEluc3RhbmNlIHtcbiAgYmx1cih0aGlzOiB2b2lkLCBzaWdtYTogbnVtYmVyKTogU2hhcnBJbnN0YW5jZTtcbiAgY29tcG9zaXRlKHRoaXM6IHZvaWQsIGxheWVyczogU2hhcnBDb21wb3NpdGVMYXllcltdKTogU2hhcnBJbnN0YW5jZTtcbiAgbWV0YWRhdGEodGhpczogdm9pZCk6IFByb21pc2U8U2hhcnBNZXRhZGF0YT47XG4gIHBuZyh0aGlzOiB2b2lkKTogU2hhcnBJbnN0YW5jZTtcbiAgcmVzaXplKHRoaXM6IHZvaWQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvcHRpb25zPzogU2hhcnBSZXNpemVPcHRpb25zKTogU2hhcnBJbnN0YW5jZTtcbiAgdG9CdWZmZXIodGhpczogdm9pZCk6IFByb21pc2U8QnVmZmVyPjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGBzaGFycGAncyBtZXRhZGF0YSB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIFNoYXJwTWV0YWRhdGEge1xuICByZWFkb25seSBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYHNoYXJwYCdzIHJlc2l6ZSBvcHRpb25zIHRoaXMgbW9kdWxlIHNldHMuXG4gKi9cbmludGVyZmFjZSBTaGFycFJlc2l6ZU9wdGlvbnMge1xuICByZWFkb25seSBmaXQ6ICdjb3ZlcicgfCAnZmlsbCc7XG59XG5cbi8qKlxuICogRGVmYXVsdCBHYXVzc2lhbiBibHVyIHN0cmVuZ3RoIGZvciB0aGUgbWFyZ2luIGZpbGw6IHNvZnQgZW5vdWdoIHRoYXQgbm9cbiAqIGRldGFpbCByZWFkcyBhcyBjb250ZW50LCBnZW50bGUgZW5vdWdoIHRvIGtlZXAgdGhlIGZyYW1lJ3MgY29sb3JzLlxuICovXG5jb25zdCBERUZBVUxUX0JMVVJfU0lHTUEgPSAyNDtcblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHNpZGUgbWFyZ2lucyB0aGUgbGVmdG92ZXIgd2lkdGggaXMgc3BsaXQgYmV0d2Vlbi5cbiAqL1xuY29uc3QgTUFSR0lOX1NJREVTID0gMjtcblxuLyoqXG4gKiBDb21wdXRlcyBob3cgYSBzb3VyY2UgaW1hZ2UgaXMgc2NhbGVkIGFuZCBwbGFjZWQgdG8gZmlsbCBhIGNhbnZhcydzIGhlaWdodCxcbiAqIHdpdGggZXF1YWwgbWFyZ2lucyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQuXG4gKlxuICogVGhlIHNjYWxlZCB3aWR0aCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdGhhdCBsZWF2ZXMgYW4gRVZFTlxuICogcmVtYWluZGVyLCBzbyB0aGUgdHdvIG1hcmdpbnMgYXJlIGV4YWN0bHkgZXF1YWwgXHUyMDE0IGFuIGFzeW1tZXRyaWMgcGlsbGFyYm94IGlzXG4gKiB2aXNpYmxlIGF0IGEgZ2xhbmNlIGFuZCBsb29rcyBsaWtlIGEgbWlzdGFrZS4gV2hlcmUgYm90aCBuZWlnaGJvcnMgcXVhbGlmeSxcbiAqIHRoZSBvbmUgY2xvc2VyIHRvIHRoZSB0cnVlIHNjYWxlZCB3aWR0aCB3aW5zLCBzbyB0aGUgYXNwZWN0IGVycm9yIHN0YXlzIGJlbG93XG4gKiBvbmUgcGFydCBpbiBhIHRob3VzYW5kLlxuICpcbiAqIFdvcmtlZCBleGFtcGxlLCB0aGUgbW9iaWxlIHN0b3JlIGNhc2U6IGEgMTM0NHgyOTkyIGZyYW1lIG9udG8gYSA5MDB4MTYwMFxuICogY2FudmFzIHNjYWxlcyBieSBgMTYwMC8yOTkyYCB0byA3MTguNzIgd2lkZS4gNzE5IHdvdWxkIGxlYXZlIGEgMTgxcHhcbiAqIHJlbWFpbmRlciwgd2hpY2ggY2Fubm90IHNwbGl0IGV2ZW5seSwgc28gNzE4IGlzIGNob3NlbiAobWFyZ2luIDkxKSBvdmVyIDcyMFxuICogKG1hcmdpbiA5MCkgYmVjYXVzZSA3MTggaXMgbmVhcmVyIDcxOC43Mi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNvdXJjZSBhbmQgY2FudmFzIGRpbWVuc2lvbnMuXG4gKiBAcmV0dXJucyBUaGUgc2NhbGVkIHNpemUsIHRoZSBvZmZzZXRzLCBhbmQgdGhlIHNpZGUgbWFyZ2luLlxuICogQHRocm93cyBFcnJvciBpZiBhbnkgZGltZW5zaW9uIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVGaXRUb0NhbnZhcyhwYXJhbXM6IENvbXB1dGVGaXRUb0NhbnZhc1BhcmFtcyk6IEZpdFRvQ2FudmFzR2VvbWV0cnkge1xuICBjb25zdCB7XG4gICAgY2FudmFzSGVpZ2h0SW5QaXhlbHMsXG4gICAgY2FudmFzV2lkdGhJblBpeGVscyxcbiAgICBzb3VyY2VIZWlnaHRJblBpeGVscyxcbiAgICBzb3VyY2VXaWR0aEluUGl4ZWxzXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbmFtZWREaW1lbnNpb25zOiBbc3RyaW5nLCBudW1iZXJdW10gPSBbXG4gICAgWydjYW52YXNIZWlnaHRJblBpeGVscycsIGNhbnZhc0hlaWdodEluUGl4ZWxzXSxcbiAgICBbJ2NhbnZhc1dpZHRoSW5QaXhlbHMnLCBjYW52YXNXaWR0aEluUGl4ZWxzXSxcbiAgICBbJ3NvdXJjZUhlaWdodEluUGl4ZWxzJywgc291cmNlSGVpZ2h0SW5QaXhlbHNdLFxuICAgIFsnc291cmNlV2lkdGhJblBpeGVscycsIHNvdXJjZVdpZHRoSW5QaXhlbHNdXG4gIF07XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG5hbWVkRGltZW5zaW9ucykge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbXB1dGVGaXRUb0NhbnZhczogJHtuYW1lfSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtTdHJpbmcodmFsdWUpfS5gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzY2FsZWRIZWlnaHRJblBpeGVscyA9IGNhbnZhc0hlaWdodEluUGl4ZWxzO1xuICBjb25zdCBleGFjdFNjYWxlZFdpZHRoID0gc291cmNlV2lkdGhJblBpeGVscyAqIChjYW52YXNIZWlnaHRJblBpeGVscyAvIHNvdXJjZUhlaWdodEluUGl4ZWxzKTtcbiAgY29uc3Qgc2NhbGVkV2lkdGhJblBpeGVscyA9IHJvdW5kVG9NYXRjaGluZ1Bhcml0eShleGFjdFNjYWxlZFdpZHRoLCBjYW52YXNXaWR0aEluUGl4ZWxzKTtcblxuICBpZiAoc2NhbGVkV2lkdGhJblBpeGVscyA+IGNhbnZhc1dpZHRoSW5QaXhlbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnY29tcHV0ZUZpdFRvQ2FudmFzOiB0aGUgc291cmNlIGlzIHdpZGVyIHRoYW4gdGhlIGNhbnZhcyBvbmNlIHNjYWxlZCB0byBpdHMgaGVpZ2h0ICdcbiAgICAgICAgKyBgKCR7U3RyaW5nKHNjYWxlZFdpZHRoSW5QaXhlbHMpfSA+ICR7U3RyaW5nKGNhbnZhc1dpZHRoSW5QaXhlbHMpfSk7IHRoaXMgZml0cyBieSBoZWlnaHQgYW5kIGNhbm5vdCBsZXR0ZXJib3guYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBtYXJnaW5JblBpeGVscyA9IChjYW52YXNXaWR0aEluUGl4ZWxzIC0gc2NhbGVkV2lkdGhJblBpeGVscykgLyBNQVJHSU5fU0lERVM7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXJnaW5JblBpeGVscyxcbiAgICBvZmZzZXRYSW5QaXhlbHM6IG1hcmdpbkluUGl4ZWxzLFxuICAgIG9mZnNldFlJblBpeGVsczogMCxcbiAgICBzY2FsZWRIZWlnaHRJblBpeGVscyxcbiAgICBzY2FsZWRXaWR0aEluUGl4ZWxzXG4gIH07XG59XG5cbi8qKlxuICogU2NhbGVzIGEgc2NyZWVuc2hvdCB0byBmaWxsIGEgY2FudmFzJ3MgaGVpZ2h0IGFuZCBmaWxscyB0aGUgc2lkZSBtYXJnaW5zIHdpdGhcbiAqIGEgYmx1cnJlZCwgZW5sYXJnZWQgY29weSBvZiB0aGUgc2FtZSBpbWFnZS5cbiAqXG4gKiBOb3RoaW5nIGlzIGNyb3BwZWQgYW5kIG5vdGhpbmcgaXMgc3RyZXRjaGVkOiB0aGUgdmlzaWJsZSBzY3JlZW5zaG90IGtlZXBzIGl0c1xuICogYXNwZWN0IHJhdGlvIHRvIHdpdGhpbiBhIHJvdW5kaW5nIHBpeGVsLCBhbmQgdGhlIG1hcmdpbnMgYXJlIG1hZGUgb2YgdGhlXG4gKiBpbWFnZSBpdHNlbGYgcmF0aGVyIHRoYW4gYSBmbGF0IGNvbG9yLCBzbyB0aGUgcmVzdWx0IHJlYWRzIGFzIG9uZSBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgc291cmNlIFBORy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHRhcmdldCBjYW52YXMgc2l6ZSBhbmQgYmx1ciBzdHJlbmd0aC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbXBvc2VkIFBORywgZXhhY3RseSB0aGUgY2FudmFzIHNpemUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGBzaGFycGAgaXMgbm90IGluc3RhbGxlZCwgb3IgdGhlIHNvdXJjZSBkaW1lbnNpb25zIGNhbm5vdCBiZSByZWFkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml0U2NyZWVuc2hvdFRvQ2FudmFzKGJ5dGVzOiBVaW50OEFycmF5LCBvcHRpb25zOiBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IHtcbiAgICBibHVyU2lnbWEgPSBERUZBVUxUX0JMVVJfU0lHTUEsXG4gICAgY2FudmFzSGVpZ2h0SW5QaXhlbHMsXG4gICAgY2FudmFzV2lkdGhJblBpeGVsc1xuICB9ID0gb3B0aW9ucztcblxuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCk7XG4gIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgc2hhcnAoYnl0ZXMpLm1ldGFkYXRhKCk7XG4gIGNvbnN0IHNvdXJjZVdpZHRoSW5QaXhlbHMgPSBtZXRhZGF0YS53aWR0aDtcbiAgY29uc3Qgc291cmNlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoc291cmNlV2lkdGhJblBpeGVscyA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZUhlaWdodEluUGl4ZWxzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpdFNjcmVlbnNob3RUb0NhbnZhczogY291bGQgbm90IHJlYWQgdGhlIHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLicpO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlRml0VG9DYW52YXMoe1xuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHMsXG4gICAgc291cmNlSGVpZ2h0SW5QaXhlbHMsXG4gICAgc291cmNlV2lkdGhJblBpeGVsc1xuICB9KTtcblxuICAvLyBUaGUgYmFja2dyb3VuZCBpcyB0aGUgc2FtZSBmcmFtZSBibG93biB1cCB0byBDT1ZFUiB0aGUgY2FudmFzIGFuZCBibHVycmVkLFxuICAvLyBTbyB0aGUgbWFyZ2lucyBjYXJyeSB0aGUgc2NyZWVuc2hvdCdzIG93biBjb2xvcnMgaW5zdGVhZCBvZiBhIGZsYXQgYmFyLlxuICBjb25zdCBiYWNrZ3JvdW5kID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLnJlc2l6ZShjYW52YXNXaWR0aEluUGl4ZWxzLCBjYW52YXNIZWlnaHRJblBpeGVscywgeyBmaXQ6ICdjb3ZlcicgfSlcbiAgICAuYmx1cihibHVyU2lnbWEpXG4gICAgLnRvQnVmZmVyKCk7XG5cbiAgY29uc3QgZm9yZWdyb3VuZCA9IGF3YWl0IHNoYXJwKGJ5dGVzKVxuICAgIC5yZXNpemUoZ2VvbWV0cnkuc2NhbGVkV2lkdGhJblBpeGVscywgZ2VvbWV0cnkuc2NhbGVkSGVpZ2h0SW5QaXhlbHMsIHsgZml0OiAnZmlsbCcgfSlcbiAgICAudG9CdWZmZXIoKTtcblxuICBjb25zdCBjb21wb3NlZCA9IGF3YWl0IHNoYXJwKGJhY2tncm91bmQpXG4gICAgLmNvbXBvc2l0ZShbe1xuICAgICAgaW5wdXQ6IGZvcmVncm91bmQsXG4gICAgICBsZWZ0OiBnZW9tZXRyeS5vZmZzZXRYSW5QaXhlbHMsXG4gICAgICB0b3A6IGdlb21ldHJ5Lm9mZnNldFlJblBpeGVsc1xuICAgIH1dKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShjb21wb3NlZCk7XG59XG5cbi8qKlxuICogTG9hZHMgYHNoYXJwYCBvbiBkZW1hbmQsIHNvIGltcG9ydGluZyB0aGlzIG1vZHVsZSBkb2VzIG5vdCByZXF1aXJlIGl0LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGBzaGFycGAgZmFjdG9yeS5cbiAqIEB0aHJvd3MgRXJyb3IgbmFtaW5nIHRoZSBtaXNzaW5nIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U2hhcnAoKTogUHJvbWlzZTxTaGFycEZhY3Rvcnk+IHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gYHNoYXJwYCBpcyBhbiBPUFRJT05BTCBwZWVyLCBzbyBpdCBtdXN0IGJlIGxvYWRlZCBsYXppbHk6IGEgc3RhdGljIGltcG9ydCB3b3VsZCBkcmFnIGl0cyBuYXRpdmUgYmluYXJpZXMgaW50byBldmVyeSBjb25zdW1lciBvZiB0aGlzIHBhY2thZ2UncyBpbmRleC5cbiAgICBjb25zdCBzaGFycE1vZHVsZSA9IGF3YWl0IGltcG9ydCgnc2hhcnAnKTtcbiAgICBjb25zdCBmYWN0b3J5OiB1bmtub3duID0gc2hhcnBNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gZmFjdG9yeSBhcyBTaGFycEZhY3Rvcnk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFJlYWNoZWQgb25seSB3aGVuIHRoZSBvcHRpb25hbCBwZWVyIGlzIGFic2VudCwgd2hpY2ggaXQgbmV2ZXIgaXMgaW4gdGhpcyBwYWNrYWdlJ3Mgb3duIHRlc3QgcnVuLiAqL1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdmaXRTY3JlZW5zaG90VG9DYW52YXMgbmVlZHMgdGhlIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeSBcInNoYXJwXCIuICdcbiAgICAgICAgKyAnSW5zdGFsbCBpdCBpbiB0aGUgY29uc3VtaW5nIHByb2plY3QgKG5wbSBpIC1EIHNoYXJwKS4nLFxuICAgICAgeyBjYXVzZTogZXJyb3IgfVxuICAgICk7XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG4vKipcbiAqIFJvdW5kcyBhIHdpZHRoIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgc2hhcmluZyBgdGFyZ2V0YCdzIHBhcml0eSwgc29cbiAqIGB0YXJnZXQgLSByZXN1bHRgIGlzIGV2ZW4gYW5kIHNwbGl0cyBpbnRvIHR3byBlcXVhbCBtYXJnaW5zLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBleGFjdCBzY2FsZWQgd2lkdGguXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIGNhbnZhcyB3aWR0aCB3aG9zZSBwYXJpdHkgbXVzdCBiZSBtYXRjaGVkLlxuICogQHJldHVybnMgVGhlIG5lYXJlc3QgaW50ZWdlciBvZiB0aGUgc2FtZSBwYXJpdHkgYXMgYHRhcmdldGAuXG4gKi9cbmZ1bmN0aW9uIHJvdW5kVG9NYXRjaGluZ1Bhcml0eSh2YWx1ZTogbnVtYmVyLCB0YXJnZXQ6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHJvdW5kZWQgPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgaWYgKCh0YXJnZXQgLSByb3VuZGVkKSAlIE1BUkdJTl9TSURFUyA9PT0gMCkge1xuICAgIHJldHVybiByb3VuZGVkO1xuICB9XG5cbiAgLy8gYHJvdW5kZWRgIGxlYXZlcyBhbiBvZGQgcmVtYWluZGVyLCBzbyBzdGVwIHRvIHdoaWNoZXZlciBuZWlnaGJvciBpcyBjbG9zZXJcbiAgLy8gVG8gdGhlIHRydWUgdmFsdWU7IGJvdGggaGF2ZSB0aGUgcGFyaXR5IGByb3VuZGVkYCBsYWNrcy5cbiAgcmV0dXJuIHZhbHVlID49IHJvdW5kZWQgPyByb3VuZGVkICsgMSA6IHJvdW5kZWQgLSAxO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBOElBLE1BQU0scUJBQXFCO0FBSzNCLE1BQU0sZUFBZTtBQXFCZCxTQUFTLG1CQUFtQixRQUF1RDtBQUN4RixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sa0JBQXNDO0FBQUEsSUFDMUMsQ0FBQyx3QkFBd0Isb0JBQW9CO0FBQUEsSUFDN0MsQ0FBQyx1QkFBdUIsbUJBQW1CO0FBQUEsSUFDM0MsQ0FBQyx3QkFBd0Isb0JBQW9CO0FBQUEsSUFDN0MsQ0FBQyx1QkFBdUIsbUJBQW1CO0FBQUEsRUFDN0M7QUFFQSxhQUFXLENBQUMsTUFBTSxLQUFLLEtBQUssaUJBQWlCO0FBQzNDLFFBQUksQ0FBQyxPQUFPLFNBQVMsS0FBSyxLQUFLLFNBQVMsR0FBRztBQUN6QyxZQUFNLElBQUksTUFBTSx1QkFBdUIsSUFBSSxtQ0FBbUMsT0FBTyxLQUFLLENBQUMsR0FBRztBQUFBLElBQ2hHO0FBQUEsRUFDRjtBQUVBLFFBQU0sdUJBQXVCO0FBQzdCLFFBQU0sbUJBQW1CLHVCQUF1Qix1QkFBdUI7QUFDdkUsUUFBTSxzQkFBc0Isc0JBQXNCLGtCQUFrQixtQkFBbUI7QUFFdkYsTUFBSSxzQkFBc0IscUJBQXFCO0FBQzdDLFVBQU0sSUFBSTtBQUFBLE1BQ1Isc0ZBQ1EsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLE9BQU8sbUJBQW1CLENBQUM7QUFBQSxJQUN0RTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGtCQUFrQixzQkFBc0IsdUJBQXVCO0FBRXJFLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxJQUNqQixpQkFBaUI7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFlQSxlQUFzQixzQkFBc0IsT0FBbUIsU0FBNEQ7QUFDekgsUUFBTTtBQUFBLElBQ0osWUFBWTtBQUFBLElBQ1o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosUUFBTSxRQUFRLE1BQU0sWUFBWTtBQUNoQyxRQUFNLFdBQVcsTUFBTSxNQUFNLEtBQUssRUFBRSxTQUFTO0FBQzdDLFFBQU0sc0JBQXNCLFNBQVM7QUFDckMsUUFBTSx1QkFBdUIsU0FBUztBQUd0QyxNQUFJLHdCQUF3QixVQUFhLHlCQUF5QixRQUFXO0FBQzNFLFVBQU0sSUFBSSxNQUFNLG9FQUFvRTtBQUFBLEVBQ3RGO0FBRUEsUUFBTSxXQUFXLG1CQUFtQjtBQUFBLElBQ2xDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBSUQsUUFBTSxhQUFhLE1BQU0sTUFBTSxLQUFLLEVBQ2pDLE9BQU8scUJBQXFCLHNCQUFzQixFQUFFLEtBQUssUUFBUSxDQUFDLEVBQ2xFLEtBQUssU0FBUyxFQUNkLFNBQVM7QUFFWixRQUFNLGFBQWEsTUFBTSxNQUFNLEtBQUssRUFDakMsT0FBTyxTQUFTLHFCQUFxQixTQUFTLHNCQUFzQixFQUFFLEtBQUssT0FBTyxDQUFDLEVBQ25GLFNBQVM7QUFFWixRQUFNLFdBQVcsTUFBTSxNQUFNLFVBQVUsRUFDcEMsVUFBVSxDQUFDO0FBQUEsSUFDVixPQUFPO0FBQUEsSUFDUCxNQUFNLFNBQVM7QUFBQSxJQUNmLEtBQUssU0FBUztBQUFBLEVBQ2hCLENBQUMsQ0FBQyxFQUNELElBQUksRUFDSixTQUFTO0FBRVosU0FBTyxJQUFJLFdBQVcsUUFBUTtBQUNoQztBQVFBLGVBQWUsY0FBcUM7QUFDbEQsTUFBSTtBQUVGLFVBQU0sY0FBYyxNQUFNLE9BQU8sT0FBTztBQUN4QyxVQUFNLFVBQW1CLFlBQVk7QUFDckMsV0FBTztBQUFBLEVBQ1QsU0FBUyxPQUFnQjtBQUV2QixVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsTUFFQSxFQUFFLE9BQU8sTUFBTTtBQUFBLElBQ2pCO0FBQUEsRUFFRjtBQUNGO0FBVUEsU0FBUyxzQkFBc0IsT0FBZSxRQUF3QjtBQUNwRSxRQUFNLFVBQVUsS0FBSyxNQUFNLEtBQUs7QUFDaEMsT0FBSyxTQUFTLFdBQVcsaUJBQWlCLEdBQUc7QUFDM0MsV0FBTztBQUFBLEVBQ1Q7QUFJQSxTQUFPLFNBQVMsVUFBVSxVQUFVLElBQUksVUFBVTtBQUNwRDsiLAogICJuYW1lcyI6IFtdCn0K
78
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZpdC1zY3JlZW5zaG90LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRml0cyBhIHNjcmVlbnNob3Qgb250byBhIGNhbnZhcyBvZiBhIGRpZmZlcmVudCBhc3BlY3QgcmF0aW8gd2l0aG91dCBjcm9wcGluZ1xuICogaXQgb3IgZGlzdG9ydGluZyBpdCwgZmlsbGluZyB0aGUgbGVmdG92ZXIgbWFyZ2lucyB3aXRoIGEgYmx1cnJlZCwgZW5sYXJnZWRcbiAqIGNvcHkgb2YgdGhlIHNhbWUgaW1hZ2UgKHRoZSBcInBpbGxhcmJveFwiIHRyZWF0bWVudCB1c2VkIGJ5IHN0b3JlIGxpc3RpbmdzKS5cbiAqXG4gKiBUaGUgbW90aXZhdGluZyBjYXNlIGlzIGEgbW9iaWxlIHN0b3JlIHNjcmVlbnNob3QuIFRoZSBBbmRyb2lkIGVtdWxhdG9yJ3NcbiAqIGZyYW1lYnVmZmVyIGlzIHdoYXRldmVyIHRoZSBBVkQncyBzY3JlZW4gaXMgXHUyMDE0IGEgUGl4ZWwgMTAgUHJvIFhMIGlzIDEzNDR4Mjk5MixcbiAqIHJvdWdobHkgOToyMCBcdTIwMTQgd2hpbGUgdGhlIGNvbW11bml0eSBzdG9yZSBhc2tzIGZvciA5MDB4MTYwMCAoOToxNikuIENyb3BwaW5nXG4gKiB0byA5OjE2IHRocm93cyBhd2F5IGEgZmlmdGggb2YgdGhlIGZyYW1lLCBhbmQgc3RyZXRjaGluZyBkaXN0b3J0cyB0aGUgVUksIHNvXG4gKiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHRvIGZpdCB0aGUgSEVJR0hUIGFuZCB0aGUgdHdvIHNpZGUgbWFyZ2lucyBhcmUgZmlsbGVkLlxuICpcbiAqIFRoZSBnZW9tZXRyeSBpcyBhIHB1cmUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHVuaXQtdGVzdGVkOyB0aGUgcGl4ZWwgd29yayBuZWVkc1xuICogYHNoYXJwYCwgd2hpY2ggaXMgYW4gT1BUSU9OQUwgcGVlciBkZXBlbmRlbmN5IFx1MjAxNCBkZWNsYXJlZCByYXRoZXIgdGhhbiBidW5kbGVkXG4gKiBiZWNhdXNlIG9ubHkgc2NyZWVuc2hvdCBjYXB0dXJlIG5lZWRzIGl0LCBhbmQgaXQgc2hpcHMgcGxhdGZvcm0tc3BlY2lmaWNcbiAqIG5hdGl2ZSBiaW5hcmllcyB0aGF0IGV2ZXJ5IG90aGVyIGNvbnN1bWVyIHdvdWxkIHBheSBmb3IuXG4gKi9cblxuaW1wb3J0IHsgaW1wb3J0U2hhcnAgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb21wdXRlRml0VG9DYW52YXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVGaXRUb0NhbnZhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHRhcmdldCBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbnZhc0hlaWdodEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSB0YXJnZXQgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBjYW52YXNXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgc291cmNlIGltYWdlLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgc291cmNlIGltYWdlLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VXaWR0aEluUGl4ZWxzOiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGZpdFNjcmVlbnNob3RUb0NhbnZhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRml0U2NyZWVuc2hvdFRvQ2FudmFzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBHYXVzc2lhbiBibHVyIHN0cmVuZ3RoIGFwcGxpZWQgdG8gdGhlIG1hcmdpbiBmaWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjRgXG4gICAqL1xuICByZWFkb25seSBibHVyU2lnbWE/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgdGFyZ2V0IGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FudmFzSGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIHRhcmdldCBjYW52YXMsIGluIHBpeGVscy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbnZhc1dpZHRoSW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGVyZSB0aGUgc2NhbGVkIHNvdXJjZSBpbWFnZSBzaXRzIG9uIHRoZSBjYW52YXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRml0VG9DYW52YXNHZW9tZXRyeSB7XG4gIC8qKlxuICAgKiBXaWR0aCBvZiBlYWNoIHNpZGUgbWFyZ2luLCBpbiBwaXhlbHMuIEJvdGggc2lkZXMgYXJlIGVxdWFsIGJ5IGNvbnN0cnVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmdpbkluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExlZnQgb2Zmc2V0IG9mIHRoZSBzY2FsZWQgaW1hZ2Ugb24gdGhlIGNhbnZhcywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0WEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRvcCBvZmZzZXQgb2YgdGhlIHNjYWxlZCBpbWFnZSBvbiB0aGUgY2FudmFzLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBvZmZzZXRZSW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogSGVpZ2h0IHRoZSBzb3VyY2UgaXMgc2NhbGVkIHRvLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBzY2FsZWRIZWlnaHRJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaWR0aCB0aGUgc291cmNlIGlzIHNjYWxlZCB0bywgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGVkV2lkdGhJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlZmF1bHQgR2F1c3NpYW4gYmx1ciBzdHJlbmd0aCBmb3IgdGhlIG1hcmdpbiBmaWxsOiBzb2Z0IGVub3VnaCB0aGF0IG5vXG4gKiBkZXRhaWwgcmVhZHMgYXMgY29udGVudCwgZ2VudGxlIGVub3VnaCB0byBrZWVwIHRoZSBmcmFtZSdzIGNvbG9ycy5cbiAqL1xuY29uc3QgREVGQVVMVF9CTFVSX1NJR01BID0gMjQ7XG5cbi8qKlxuICogVGhlIG51bWJlciBvZiBzaWRlIG1hcmdpbnMgdGhlIGxlZnRvdmVyIHdpZHRoIGlzIHNwbGl0IGJldHdlZW4uXG4gKi9cbmNvbnN0IE1BUkdJTl9TSURFUyA9IDI7XG5cbi8qKlxuICogQ29tcHV0ZXMgaG93IGEgc291cmNlIGltYWdlIGlzIHNjYWxlZCBhbmQgcGxhY2VkIHRvIGZpbGwgYSBjYW52YXMncyBoZWlnaHQsXG4gKiB3aXRoIGVxdWFsIG1hcmdpbnMgb24gdGhlIGxlZnQgYW5kIHJpZ2h0LlxuICpcbiAqIFRoZSBzY2FsZWQgd2lkdGggaXMgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHRoYXQgbGVhdmVzIGFuIEVWRU5cbiAqIHJlbWFpbmRlciwgc28gdGhlIHR3byBtYXJnaW5zIGFyZSBleGFjdGx5IGVxdWFsIFx1MjAxNCBhbiBhc3ltbWV0cmljIHBpbGxhcmJveCBpc1xuICogdmlzaWJsZSBhdCBhIGdsYW5jZSBhbmQgbG9va3MgbGlrZSBhIG1pc3Rha2UuIFdoZXJlIGJvdGggbmVpZ2hib3JzIHF1YWxpZnksXG4gKiB0aGUgb25lIGNsb3NlciB0byB0aGUgdHJ1ZSBzY2FsZWQgd2lkdGggd2lucywgc28gdGhlIGFzcGVjdCBlcnJvciBzdGF5cyBiZWxvd1xuICogb25lIHBhcnQgaW4gYSB0aG91c2FuZC5cbiAqXG4gKiBXb3JrZWQgZXhhbXBsZSwgdGhlIG1vYmlsZSBzdG9yZSBjYXNlOiBhIDEzNDR4Mjk5MiBmcmFtZSBvbnRvIGEgOTAweDE2MDBcbiAqIGNhbnZhcyBzY2FsZXMgYnkgYDE2MDAvMjk5MmAgdG8gNzE4LjcyIHdpZGUuIDcxOSB3b3VsZCBsZWF2ZSBhIDE4MXB4XG4gKiByZW1haW5kZXIsIHdoaWNoIGNhbm5vdCBzcGxpdCBldmVubHksIHNvIDcxOCBpcyBjaG9zZW4gKG1hcmdpbiA5MSkgb3ZlciA3MjBcbiAqIChtYXJnaW4gOTApIGJlY2F1c2UgNzE4IGlzIG5lYXJlciA3MTguNzIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzb3VyY2UgYW5kIGNhbnZhcyBkaW1lbnNpb25zLlxuICogQHJldHVybnMgVGhlIHNjYWxlZCBzaXplLCB0aGUgb2Zmc2V0cywgYW5kIHRoZSBzaWRlIG1hcmdpbi5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW55IGRpbWVuc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRml0VG9DYW52YXMocGFyYW1zOiBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMpOiBGaXRUb0NhbnZhc0dlb21ldHJ5IHtcbiAgY29uc3Qge1xuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHMsXG4gICAgc291cmNlSGVpZ2h0SW5QaXhlbHMsXG4gICAgc291cmNlV2lkdGhJblBpeGVsc1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IG5hbWVkRGltZW5zaW9uczogW3N0cmluZywgbnVtYmVyXVtdID0gW1xuICAgIFsnY2FudmFzSGVpZ2h0SW5QaXhlbHMnLCBjYW52YXNIZWlnaHRJblBpeGVsc10sXG4gICAgWydjYW52YXNXaWR0aEluUGl4ZWxzJywgY2FudmFzV2lkdGhJblBpeGVsc10sXG4gICAgWydzb3VyY2VIZWlnaHRJblBpeGVscycsIHNvdXJjZUhlaWdodEluUGl4ZWxzXSxcbiAgICBbJ3NvdXJjZVdpZHRoSW5QaXhlbHMnLCBzb3VyY2VXaWR0aEluUGl4ZWxzXVxuICBdO1xuXG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBuYW1lZERpbWVuc2lvbnMpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlRml0VG9DYW52YXM6ICR7bmFtZX0gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKHZhbHVlKX0uYCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NhbGVkSGVpZ2h0SW5QaXhlbHMgPSBjYW52YXNIZWlnaHRJblBpeGVscztcbiAgY29uc3QgZXhhY3RTY2FsZWRXaWR0aCA9IHNvdXJjZVdpZHRoSW5QaXhlbHMgKiAoY2FudmFzSGVpZ2h0SW5QaXhlbHMgLyBzb3VyY2VIZWlnaHRJblBpeGVscyk7XG4gIGNvbnN0IHNjYWxlZFdpZHRoSW5QaXhlbHMgPSByb3VuZFRvTWF0Y2hpbmdQYXJpdHkoZXhhY3RTY2FsZWRXaWR0aCwgY2FudmFzV2lkdGhJblBpeGVscyk7XG5cbiAgaWYgKHNjYWxlZFdpZHRoSW5QaXhlbHMgPiBjYW52YXNXaWR0aEluUGl4ZWxzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2NvbXB1dGVGaXRUb0NhbnZhczogdGhlIHNvdXJjZSBpcyB3aWRlciB0aGFuIHRoZSBjYW52YXMgb25jZSBzY2FsZWQgdG8gaXRzIGhlaWdodCAnXG4gICAgICAgICsgYCgke1N0cmluZyhzY2FsZWRXaWR0aEluUGl4ZWxzKX0gPiAke1N0cmluZyhjYW52YXNXaWR0aEluUGl4ZWxzKX0pOyB0aGlzIGZpdHMgYnkgaGVpZ2h0IGFuZCBjYW5ub3QgbGV0dGVyYm94LmBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbWFyZ2luSW5QaXhlbHMgPSAoY2FudmFzV2lkdGhJblBpeGVscyAtIHNjYWxlZFdpZHRoSW5QaXhlbHMpIC8gTUFSR0lOX1NJREVTO1xuXG4gIHJldHVybiB7XG4gICAgbWFyZ2luSW5QaXhlbHMsXG4gICAgb2Zmc2V0WEluUGl4ZWxzOiBtYXJnaW5JblBpeGVscyxcbiAgICBvZmZzZXRZSW5QaXhlbHM6IDAsXG4gICAgc2NhbGVkSGVpZ2h0SW5QaXhlbHMsXG4gICAgc2NhbGVkV2lkdGhJblBpeGVsc1xuICB9O1xufVxuXG4vKipcbiAqIFNjYWxlcyBhIHNjcmVlbnNob3QgdG8gZmlsbCBhIGNhbnZhcydzIGhlaWdodCBhbmQgZmlsbHMgdGhlIHNpZGUgbWFyZ2lucyB3aXRoXG4gKiBhIGJsdXJyZWQsIGVubGFyZ2VkIGNvcHkgb2YgdGhlIHNhbWUgaW1hZ2UuXG4gKlxuICogTm90aGluZyBpcyBjcm9wcGVkIGFuZCBub3RoaW5nIGlzIHN0cmV0Y2hlZDogdGhlIHZpc2libGUgc2NyZWVuc2hvdCBrZWVwcyBpdHNcbiAqIGFzcGVjdCByYXRpbyB0byB3aXRoaW4gYSByb3VuZGluZyBwaXhlbCwgYW5kIHRoZSBtYXJnaW5zIGFyZSBtYWRlIG9mIHRoZVxuICogaW1hZ2UgaXRzZWxmIHJhdGhlciB0aGFuIGEgZmxhdCBjb2xvciwgc28gdGhlIHJlc3VsdCByZWFkcyBhcyBvbmUgZnJhbWUuXG4gKlxuICogQHBhcmFtIGJ5dGVzIC0gVGhlIHNvdXJjZSBQTkcuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB0YXJnZXQgY2FudmFzIHNpemUgYW5kIGJsdXIgc3RyZW5ndGguXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb21wb3NlZCBQTkcsIGV4YWN0bHkgdGhlIGNhbnZhcyBzaXplLlxuICogQHRocm93cyBFcnJvciBpZiBgc2hhcnBgIGlzIG5vdCBpbnN0YWxsZWQsIG9yIHRoZSBzb3VyY2UgZGltZW5zaW9ucyBjYW5ub3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpdFNjcmVlbnNob3RUb0NhbnZhcyhieXRlczogVWludDhBcnJheSwgb3B0aW9uczogRml0U2NyZWVuc2hvdFRvQ2FudmFzT3B0aW9ucyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCB7XG4gICAgYmx1clNpZ21hID0gREVGQVVMVF9CTFVSX1NJR01BLFxuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHNcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc2hhcnAgPSBhd2FpdCBpbXBvcnRTaGFycCgnZml0U2NyZWVuc2hvdFRvQ2FudmFzJyk7XG4gIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgc2hhcnAoYnl0ZXMpLm1ldGFkYXRhKCk7XG4gIGNvbnN0IHNvdXJjZVdpZHRoSW5QaXhlbHMgPSBtZXRhZGF0YS53aWR0aDtcbiAgY29uc3Qgc291cmNlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoc291cmNlV2lkdGhJblBpeGVscyA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZUhlaWdodEluUGl4ZWxzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpdFNjcmVlbnNob3RUb0NhbnZhczogY291bGQgbm90IHJlYWQgdGhlIHNvdXJjZSBpbWFnZSBkaW1lbnNpb25zLicpO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBjb21wdXRlRml0VG9DYW52YXMoe1xuICAgIGNhbnZhc0hlaWdodEluUGl4ZWxzLFxuICAgIGNhbnZhc1dpZHRoSW5QaXhlbHMsXG4gICAgc291cmNlSGVpZ2h0SW5QaXhlbHMsXG4gICAgc291cmNlV2lkdGhJblBpeGVsc1xuICB9KTtcblxuICAvLyBUaGUgYmFja2dyb3VuZCBpcyB0aGUgc2FtZSBmcmFtZSBibG93biB1cCB0byBDT1ZFUiB0aGUgY2FudmFzIGFuZCBibHVycmVkLFxuICAvLyBTbyB0aGUgbWFyZ2lucyBjYXJyeSB0aGUgc2NyZWVuc2hvdCdzIG93biBjb2xvcnMgaW5zdGVhZCBvZiBhIGZsYXQgYmFyLlxuICBjb25zdCBiYWNrZ3JvdW5kID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLnJlc2l6ZShjYW52YXNXaWR0aEluUGl4ZWxzLCBjYW52YXNIZWlnaHRJblBpeGVscywgeyBmaXQ6ICdjb3ZlcicgfSlcbiAgICAuYmx1cihibHVyU2lnbWEpXG4gICAgLnRvQnVmZmVyKCk7XG5cbiAgY29uc3QgZm9yZWdyb3VuZCA9IGF3YWl0IHNoYXJwKGJ5dGVzKVxuICAgIC5yZXNpemUoZ2VvbWV0cnkuc2NhbGVkV2lkdGhJblBpeGVscywgZ2VvbWV0cnkuc2NhbGVkSGVpZ2h0SW5QaXhlbHMsIHsgZml0OiAnZmlsbCcgfSlcbiAgICAudG9CdWZmZXIoKTtcblxuICBjb25zdCBjb21wb3NlZCA9IGF3YWl0IHNoYXJwKGJhY2tncm91bmQpXG4gICAgLmNvbXBvc2l0ZShbe1xuICAgICAgaW5wdXQ6IGZvcmVncm91bmQsXG4gICAgICBsZWZ0OiBnZW9tZXRyeS5vZmZzZXRYSW5QaXhlbHMsXG4gICAgICB0b3A6IGdlb21ldHJ5Lm9mZnNldFlJblBpeGVsc1xuICAgIH1dKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShjb21wb3NlZCk7XG59XG5cbi8qKlxuICogUm91bmRzIGEgd2lkdGggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBzaGFyaW5nIGB0YXJnZXRgJ3MgcGFyaXR5LCBzb1xuICogYHRhcmdldCAtIHJlc3VsdGAgaXMgZXZlbiBhbmQgc3BsaXRzIGludG8gdHdvIGVxdWFsIG1hcmdpbnMuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGV4YWN0IHNjYWxlZCB3aWR0aC5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgY2FudmFzIHdpZHRoIHdob3NlIHBhcml0eSBtdXN0IGJlIG1hdGNoZWQuXG4gKiBAcmV0dXJucyBUaGUgbmVhcmVzdCBpbnRlZ2VyIG9mIHRoZSBzYW1lIHBhcml0eSBhcyBgdGFyZ2V0YC5cbiAqL1xuZnVuY3Rpb24gcm91bmRUb01hdGNoaW5nUGFyaXR5KHZhbHVlOiBudW1iZXIsIHRhcmdldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3Qgcm91bmRlZCA9IE1hdGgucm91bmQodmFsdWUpO1xuICBpZiAoKHRhcmdldCAtIHJvdW5kZWQpICUgTUFSR0lOX1NJREVTID09PSAwKSB7XG4gICAgcmV0dXJuIHJvdW5kZWQ7XG4gIH1cblxuICAvLyBgcm91bmRlZGAgbGVhdmVzIGFuIG9kZCByZW1haW5kZXIsIHNvIHN0ZXAgdG8gd2hpY2hldmVyIG5laWdoYm9yIGlzIGNsb3NlclxuICAvLyBUbyB0aGUgdHJ1ZSB2YWx1ZTsgYm90aCBoYXZlIHRoZSBwYXJpdHkgYHJvdW5kZWRgIGxhY2tzLlxuICByZXR1cm4gdmFsdWUgPj0gcm91bmRlZCA/IHJvdW5kZWQgKyAxIDogcm91bmRlZCAtIDE7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFtQkEsU0FBUyxtQkFBbUI7QUFtRjVCLE1BQU0scUJBQXFCO0FBSzNCLE1BQU0sZUFBZTtBQXFCZCxTQUFTLG1CQUFtQixRQUF1RDtBQUN4RixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sa0JBQXNDO0FBQUEsSUFDMUMsQ0FBQyx3QkFBd0Isb0JBQW9CO0FBQUEsSUFDN0MsQ0FBQyx1QkFBdUIsbUJBQW1CO0FBQUEsSUFDM0MsQ0FBQyx3QkFBd0Isb0JBQW9CO0FBQUEsSUFDN0MsQ0FBQyx1QkFBdUIsbUJBQW1CO0FBQUEsRUFDN0M7QUFFQSxhQUFXLENBQUMsTUFBTSxLQUFLLEtBQUssaUJBQWlCO0FBQzNDLFFBQUksQ0FBQyxPQUFPLFNBQVMsS0FBSyxLQUFLLFNBQVMsR0FBRztBQUN6QyxZQUFNLElBQUksTUFBTSx1QkFBdUIsSUFBSSxtQ0FBbUMsT0FBTyxLQUFLLENBQUMsR0FBRztBQUFBLElBQ2hHO0FBQUEsRUFDRjtBQUVBLFFBQU0sdUJBQXVCO0FBQzdCLFFBQU0sbUJBQW1CLHVCQUF1Qix1QkFBdUI7QUFDdkUsUUFBTSxzQkFBc0Isc0JBQXNCLGtCQUFrQixtQkFBbUI7QUFFdkYsTUFBSSxzQkFBc0IscUJBQXFCO0FBQzdDLFVBQU0sSUFBSTtBQUFBLE1BQ1Isc0ZBQ1EsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLE9BQU8sbUJBQW1CLENBQUM7QUFBQSxJQUN0RTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGtCQUFrQixzQkFBc0IsdUJBQXVCO0FBRXJFLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxJQUNqQixpQkFBaUI7QUFBQSxJQUNqQjtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFlQSxlQUFzQixzQkFBc0IsT0FBbUIsU0FBNEQ7QUFDekgsUUFBTTtBQUFBLElBQ0osWUFBWTtBQUFBLElBQ1o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosUUFBTSxRQUFRLE1BQU0sWUFBWSx1QkFBdUI7QUFDdkQsUUFBTSxXQUFXLE1BQU0sTUFBTSxLQUFLLEVBQUUsU0FBUztBQUM3QyxRQUFNLHNCQUFzQixTQUFTO0FBQ3JDLFFBQU0sdUJBQXVCLFNBQVM7QUFHdEMsTUFBSSx3QkFBd0IsVUFBYSx5QkFBeUIsUUFBVztBQUMzRSxVQUFNLElBQUksTUFBTSxvRUFBb0U7QUFBQSxFQUN0RjtBQUVBLFFBQU0sV0FBVyxtQkFBbUI7QUFBQSxJQUNsQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUlELFFBQU0sYUFBYSxNQUFNLE1BQU0sS0FBSyxFQUNqQyxPQUFPLHFCQUFxQixzQkFBc0IsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUNsRSxLQUFLLFNBQVMsRUFDZCxTQUFTO0FBRVosUUFBTSxhQUFhLE1BQU0sTUFBTSxLQUFLLEVBQ2pDLE9BQU8sU0FBUyxxQkFBcUIsU0FBUyxzQkFBc0IsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUNuRixTQUFTO0FBRVosUUFBTSxXQUFXLE1BQU0sTUFBTSxVQUFVLEVBQ3BDLFVBQVUsQ0FBQztBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsTUFBTSxTQUFTO0FBQUEsSUFDZixLQUFLLFNBQVM7QUFBQSxFQUNoQixDQUFDLENBQUMsRUFDRCxJQUFJLEVBQ0osU0FBUztBQUVaLFNBQU8sSUFBSSxXQUFXLFFBQVE7QUFDaEM7QUFVQSxTQUFTLHNCQUFzQixPQUFlLFFBQXdCO0FBQ3BFLFFBQU0sVUFBVSxLQUFLLE1BQU0sS0FBSztBQUNoQyxPQUFLLFNBQVMsV0FBVyxpQkFBaUIsR0FBRztBQUMzQyxXQUFPO0FBQUEsRUFDVDtBQUlBLFNBQU8sU0FBUyxVQUFVLFVBQVUsSUFBSSxVQUFVO0FBQ3BEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -28,6 +28,8 @@ export type { IncompatibleInstallerVersionErrorConstructorParams } from './incom
28
28
  export { IncompatibleInstallerVersionError } from './incompatible-installer-version-error.mjs';
29
29
  export type { InstallerCompatibility, InstallerCompatibilityTier, ResolveInstallerCompatibilityParams } from './installer-compatibility.mjs';
30
30
  export { resolveInstallerCompatibility } from './installer-compatibility.mjs';
31
+ export type { ComputeLabelBandParams, LabelBandGeometry, LabelScreenshotOptions } from './label-screenshot.mjs';
32
+ export { buildLabelSvg, computeLabelBand, escapeSvgText, labelScreenshot } from './label-screenshot.mjs';
31
33
  export type { LibResolver } from './lib-registry.mjs';
32
34
  export { registerLibResolver } from './lib-registry.mjs';
33
35
  export type { ObsidianRuntimeVersions, ObsidianVersionDownloads, ObsidianVersionMetadata } from './obsidian-metadata.mjs';
@@ -22,6 +22,12 @@ import {
22
22
  } from "./fit-screenshot.mjs";
23
23
  import { IncompatibleInstallerVersionError } from "./incompatible-installer-version-error.mjs";
24
24
  import { resolveInstallerCompatibility } from "./installer-compatibility.mjs";
25
+ import {
26
+ buildLabelSvg,
27
+ computeLabelBand,
28
+ escapeSvgText,
29
+ labelScreenshot
30
+ } from "./label-screenshot.mjs";
25
31
  import { registerLibResolver } from "./lib-registry.mjs";
26
32
  import { getVersionMetadata } from "./obsidian-metadata.mjs";
27
33
  import {
@@ -54,15 +60,19 @@ export {
54
60
  TemporaryVault,
55
61
  buildDemoVaultPopulate,
56
62
  buildDeviceMetricsOverride,
63
+ buildLabelSvg,
57
64
  captureObsidianScreenshot,
58
65
  computeFitToCanvas,
66
+ computeLabelBand,
59
67
  connectToCdp,
60
68
  createTransportFromOptions,
61
69
  decodeBase64Png,
70
+ escapeSvgText,
62
71
  evalInObsidian,
63
72
  fitScreenshotToCanvas,
64
73
  getVersionMetadata,
65
74
  isPng,
75
+ labelScreenshot,
66
76
  pollInObsidian,
67
77
  readDemoVaultTree,
68
78
  readPngDimensions,
@@ -76,4 +86,4 @@ export {
76
86
  setVaultPathResolver,
77
87
  unregisterVault
78
88
  };
79
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24ubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBDb250ZXh0SWQgfSBmcm9tICcuL2NvbnRleHQtaWQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIubWpzJztcbmV4cG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXMsXG4gIEluamVjdFBsdWdpblBhcmFtc1xufSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUubWpzJztcbmV4cG9ydCB7IGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUgfSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUubWpzJztcbmV4cG9ydCB0eXBlIHsgUmVhZERlbW9WYXVsdFRyZWVQYXJhbXMgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5tanMnO1xuZXhwb3J0IHsgcmVhZERlbW9WYXVsdFRyZWUgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBFbGVjdHJvbkNvbXBhdGliaWxpdHksXG4gIEVsZWN0cm9uQ29tcGF0aWJpbGl0eVRpZXIsXG4gIFJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgeyByZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5IH0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEV2YWxJbk9ic2lkaWFuUGFyYW1zLFxuICBIb3ZlckVsZW1lbnRQYXJhbXMsXG4gIExpYixcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBQcmVzc0tleVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zLFxuICBXYWl0VW50aWxQYXJhbXNcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLm1qcyc7XG5leHBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMsXG4gIEZpdFNjcmVlbnNob3RUb0NhbnZhc09wdGlvbnMsXG4gIEZpdFRvQ2FudmFzR2VvbWV0cnlcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHtcbiAgY29tcHV0ZUZpdFRvQ2FudmFzLFxuICBmaXRTY3JlZW5zaG90VG9DYW52YXNcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLm1qcyc7XG5leHBvcnQgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3IgfSBmcm9tICcuL2luY29tcGF0aWJsZS1pbnN0YWxsZXItdmVyc2lvbi1lcnJvci5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5LFxuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5VGllcixcbiAgUmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9pbnN0YWxsZXItY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHkgfSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgdHlwZSB7IExpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkubWpzJztcbmV4cG9ydCB7IHJlZ2lzdGVyTGliUmVzb2x2ZXIgfSBmcm9tICcuL2xpYi1yZWdpc3RyeS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblJ1bnRpbWVWZXJzaW9ucyxcbiAgT2JzaWRpYW5WZXJzaW9uRG93bmxvYWRzLFxuICBPYnNpZGlhblZlcnNpb25NZXRhZGF0YVxufSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLm1qcyc7XG5leHBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLm1qcyc7XG5leHBvcnQge1xuICBDQVRBTFlTVF9MQVRFU1QsXG4gIFBVQkxJQ19MQVRFU1Rcbn0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLm1qcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLm1qcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXgubWpzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUG9wdWxhdGVGaWxlQ29udGVudCxcbiAgUG9wdWxhdGVGaWxlc1BhcmFtc1xufSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5tanMnO1xuZXhwb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBpdW1TZXNzaW9uSW5mbyxcbiAgQXBwaXVtVHJhbnNwb3J0Q29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuZXhwb3J0IHsgQXBwaXVtVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIERlc2t0b3BDZHBUcmFuc3BvcnRDb25maWcsXG4gIE93bmVkSW5zdGFuY2VBc2FyLFxuICBPd25lZEluc3RhbmNlQ29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAubWpzJztcbmV4cG9ydCB7IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFXQSxTQUFTLDJCQUEyQjtBQUVwQyxTQUFTLGlDQUFpQztBQUsxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxpQkFBaUI7QUFLMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFLUCxTQUFTLDhCQUE4QjtBQUV2QyxTQUFTLHlCQUF5QjtBQU1sQyxTQUFTLG9DQUFvQztBQVc3QyxTQUFTLHNCQUFzQjtBQU0vQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMseUNBQXlDO0FBTWxELFNBQVMscUNBQXFDO0FBRTlDLFNBQVMsMkJBQTJCO0FBTXBDLFNBQVMsMEJBQTBCO0FBQ25DO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx1Q0FBdUM7QUFFaEQsU0FBUyxnQ0FBZ0M7QUFFekMsU0FBUywrQkFBK0I7QUFLeEMsU0FBUyxzQkFBc0I7QUFLL0IsU0FBUyx1QkFBdUI7QUFNaEMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxrQ0FBa0M7QUFVM0M7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHNDQUFzQzsiLAogICJuYW1lcyI6IFtdCn0K
89
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24ubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBDb250ZXh0SWQgfSBmcm9tICcuL2NvbnRleHQtaWQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIubWpzJztcbmV4cG9ydCB7XG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXMsXG4gIEluamVjdFBsdWdpblBhcmFtc1xufSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUubWpzJztcbmV4cG9ydCB7IGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUgfSBmcm9tICcuL2RlbW8tdmF1bHQtcG9wdWxhdGUubWpzJztcbmV4cG9ydCB0eXBlIHsgUmVhZERlbW9WYXVsdFRyZWVQYXJhbXMgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5tanMnO1xuZXhwb3J0IHsgcmVhZERlbW9WYXVsdFRyZWUgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBFbGVjdHJvbkNvbXBhdGliaWxpdHksXG4gIEVsZWN0cm9uQ29tcGF0aWJpbGl0eVRpZXIsXG4gIFJlc29sdmVFbGVjdHJvbkNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgeyByZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5IH0gZnJvbSAnLi9lbGVjdHJvbi1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEV2YWxJbk9ic2lkaWFuUGFyYW1zLFxuICBIb3ZlckVsZW1lbnRQYXJhbXMsXG4gIExpYixcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBQcmVzc0tleVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zLFxuICBXYWl0VW50aWxQYXJhbXNcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLm1qcyc7XG5leHBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBDb21wdXRlRml0VG9DYW52YXNQYXJhbXMsXG4gIEZpdFNjcmVlbnNob3RUb0NhbnZhc09wdGlvbnMsXG4gIEZpdFRvQ2FudmFzR2VvbWV0cnlcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHtcbiAgY29tcHV0ZUZpdFRvQ2FudmFzLFxuICBmaXRTY3JlZW5zaG90VG9DYW52YXNcbn0gZnJvbSAnLi9maXQtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLm1qcyc7XG5leHBvcnQgeyBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3IgfSBmcm9tICcuL2luY29tcGF0aWJsZS1pbnN0YWxsZXItdmVyc2lvbi1lcnJvci5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5LFxuICBJbnN0YWxsZXJDb21wYXRpYmlsaXR5VGllcixcbiAgUmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHlQYXJhbXNcbn0gZnJvbSAnLi9pbnN0YWxsZXItY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHkgfSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbXB1dGVMYWJlbEJhbmRQYXJhbXMsXG4gIExhYmVsQmFuZEdlb21ldHJ5LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90XG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5Lm1qcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuZXhwb3J0IHR5cGUgeyBQb2xsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgcG9sbEluT2JzaWRpYW4gfSBmcm9tICcuL3BvbGwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB7IFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3IgfSBmcm9tICcuL3JlbmRlcmVyLWZhaWxlZC10by1pbml0aWFsaXplLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7IFJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeFBhcmFtcyB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgeyBydW5PYnNpZGlhblZlcnNpb25NYXRyaXggfSBmcm9tICcuL3J1bi12ZXJzaW9uLW1hdHJpeC5tanMnO1xuZXhwb3J0IHR5cGUgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9zaWxlbnQtYXNhci1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3IgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXNcbn0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQubWpzJztcbmV4cG9ydCB7IFRlbXBvcmFyeVZhdWx0IH0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXBwaXVtU2Vzc2lvbkluZm8sXG4gIEFwcGl1bVRyYW5zcG9ydENvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnLFxuICBPd25lZEluc3RhbmNlQXNhcixcbiAgT3duZWRJbnN0YW5jZUNvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5Lm1qcyc7XG5leHBvcnQgdHlwZSB7IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5IH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5tanMnO1xuZXhwb3J0IHsgREVGQVVMVF9PQlNJRElBTl9WRVJTSU9OX1NQRUNTIH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5tanMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBV0EsU0FBUywyQkFBMkI7QUFFcEMsU0FBUyxpQ0FBaUM7QUFLMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUtQLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsaUJBQWlCO0FBSzFCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyw4QkFBOEI7QUFFdkMsU0FBUyx5QkFBeUI7QUFNbEMsU0FBUyxvQ0FBb0M7QUFXN0MsU0FBUyxzQkFBc0I7QUFNL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHlDQUF5QztBQU1sRCxTQUFTLHFDQUFxQztBQU05QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUywyQkFBMkI7QUFNcEMsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHVDQUF1QztBQUVoRCxTQUFTLGdDQUFnQztBQUV6QyxTQUFTLCtCQUErQjtBQUt4QyxTQUFTLHNCQUFzQjtBQUsvQixTQUFTLHVCQUF1QjtBQU1oQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLGtDQUFrQztBQVUzQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsc0NBQXNDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,98 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Adds a caption band to an already-captured screenshot.
5
+ *
6
+ * A store listing shows screenshots ONE AT A TIME, in a carousel, with no
7
+ * caption of its own — so an image has to say what it is showing. Without that,
8
+ * a shot of the state a plugin removes reads as a shot of the state the plugin
9
+ * causes, which is the opposite of the message.
10
+ *
11
+ * The band is drawn over the BOTTOM of the frame, for two reasons: the top is
12
+ * where the content being demonstrated usually starts, and the bottom of an
13
+ * Obsidian frame is chrome — status bar, word count, sync indicator — which the
14
+ * band then covers rather than competing with.
15
+ *
16
+ * This is post-processing, deliberately. The capture stays an untouched device
17
+ * frame, and rewording a label needs no re-shoot.
18
+ */
19
+ /**
20
+ * Parameters for {@link computeLabelBand}.
21
+ */
22
+ export interface ComputeLabelBandParams {
23
+ /**
24
+ * Height of the image being labeled, in pixels.
25
+ */
26
+ readonly imageHeightInPixels: number;
27
+ /**
28
+ * Width of the image being labeled, in pixels.
29
+ */
30
+ readonly imageWidthInPixels: number;
31
+ }
32
+ /**
33
+ * The geometry of the caption band.
34
+ */
35
+ export interface LabelBandGeometry {
36
+ /**
37
+ * Font size for the caption, in pixels.
38
+ */
39
+ readonly fontSizeInPixels: number;
40
+ /**
41
+ * Height of the band, in pixels.
42
+ */
43
+ readonly heightInPixels: number;
44
+ /**
45
+ * Distance from the top of the image to the top of the band, in pixels.
46
+ */
47
+ readonly topInPixels: number;
48
+ }
49
+ /**
50
+ * Options for {@link labelScreenshot}.
51
+ */
52
+ export interface LabelScreenshotOptions {
53
+ /**
54
+ * The caption. Keep it to a handful of words: it is read at listing-thumbnail
55
+ * size, and it is clipped rather than wrapped.
56
+ */
57
+ readonly text: string;
58
+ }
59
+ /**
60
+ * Builds the SVG for the caption band.
61
+ *
62
+ * @param text - The caption.
63
+ * @param geometry - The band geometry.
64
+ * @param imageWidthInPixels - Width of the image, so the band spans it.
65
+ * @returns The SVG markup.
66
+ */
67
+ export declare function buildLabelSvg(text: string, geometry: LabelBandGeometry, imageWidthInPixels: number): string;
68
+ /**
69
+ * Computes the caption band's size and position for a given image.
70
+ *
71
+ * @param params - The image dimensions.
72
+ * @returns The band geometry.
73
+ * @throws Error if either dimension is not a positive number.
74
+ */
75
+ export declare function computeLabelBand(params: ComputeLabelBandParams): LabelBandGeometry;
76
+ /**
77
+ * Escapes text for inclusion in SVG character data.
78
+ *
79
+ * A caption is authored per screenshot and can legitimately contain `&` or the
80
+ * angle brackets Obsidian uses in link syntax; unescaped, those make the SVG
81
+ * impossible to parse and `sharp` fails on a caption rather than on an image.
82
+ *
83
+ * @param text - The raw caption.
84
+ * @returns The caption, safe to embed in SVG.
85
+ */
86
+ export declare function escapeSvgText(text: string): string;
87
+ /**
88
+ * Draws a caption band across the bottom of a screenshot.
89
+ *
90
+ * The image keeps its dimensions exactly: the band is composited OVER the
91
+ * frame, never appended to it, because the store expects a specific size.
92
+ *
93
+ * @param bytes - The captured PNG.
94
+ * @param options - The caption.
95
+ * @returns A {@link Promise} that resolves to the labeled PNG, the same size as the input.
96
+ * @throws Error if `sharp` is not installed, or the image dimensions cannot be read.
97
+ */
98
+ export declare function labelScreenshot(bytes: Uint8Array, options: LabelScreenshotOptions): Promise<Uint8Array>;
@@ -0,0 +1,54 @@
1
+ import { importSharp } from "./sharp-loader.mjs";
2
+ const FONT_SIZE_RATIO = 0.034;
3
+ const BAND_HEIGHT_RATIO = 2.2;
4
+ const BAND_OPACITY = 0.82;
5
+ const MINIMUM_FONT_SIZE_IN_PIXELS = 18;
6
+ const CENTER_DIVISOR = 2;
7
+ function buildLabelSvg(text, geometry, imageWidthInPixels) {
8
+ const { fontSizeInPixels, heightInPixels } = geometry;
9
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${String(imageWidthInPixels)}" height="${String(heightInPixels)}"><rect x="0" y="0" width="${String(imageWidthInPixels)}" height="${String(heightInPixels)}" fill="#000000" fill-opacity="${String(BAND_OPACITY)}"/><text x="${String(imageWidthInPixels / CENTER_DIVISOR)}" y="${String(heightInPixels / CENTER_DIVISOR)}" font-family="Segoe UI, Helvetica, Arial, sans-serif" font-size="${String(fontSizeInPixels)}" font-weight="600" fill="#ffffff" text-anchor="middle" dominant-baseline="central">${escapeSvgText(text)}</text></svg>`;
10
+ }
11
+ function computeLabelBand(params) {
12
+ const { imageHeightInPixels, imageWidthInPixels } = params;
13
+ if (!Number.isFinite(imageWidthInPixels) || imageWidthInPixels <= 0) {
14
+ throw new Error(`computeLabelBand: imageWidthInPixels must be a positive number, got ${String(imageWidthInPixels)}.`);
15
+ }
16
+ if (!Number.isFinite(imageHeightInPixels) || imageHeightInPixels <= 0) {
17
+ throw new Error(`computeLabelBand: imageHeightInPixels must be a positive number, got ${String(imageHeightInPixels)}.`);
18
+ }
19
+ const fontSizeInPixels = Math.max(MINIMUM_FONT_SIZE_IN_PIXELS, Math.round(imageWidthInPixels * FONT_SIZE_RATIO));
20
+ const heightInPixels = Math.min(imageHeightInPixels, Math.round(fontSizeInPixels * BAND_HEIGHT_RATIO));
21
+ return {
22
+ fontSizeInPixels,
23
+ heightInPixels,
24
+ topInPixels: imageHeightInPixels - heightInPixels
25
+ };
26
+ }
27
+ function escapeSvgText(text) {
28
+ return text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&apos;");
29
+ }
30
+ async function labelScreenshot(bytes, options) {
31
+ const sharp = await importSharp("labelScreenshot");
32
+ const metadata = await sharp(bytes).metadata();
33
+ const imageWidthInPixels = metadata.width;
34
+ const imageHeightInPixels = metadata.height;
35
+ if (imageWidthInPixels === void 0 || imageHeightInPixels === void 0) {
36
+ throw new Error("labelScreenshot: could not read the source image dimensions.");
37
+ }
38
+ const geometry = computeLabelBand({ imageHeightInPixels, imageWidthInPixels });
39
+ const svg = buildLabelSvg(options.text, geometry, imageWidthInPixels);
40
+ const layer = {
41
+ input: Buffer.from(svg),
42
+ left: 0,
43
+ top: geometry.topInPixels
44
+ };
45
+ const labeled = await sharp(bytes).composite([layer]).png().toBuffer();
46
+ return new Uint8Array(labeled);
47
+ }
48
+ export {
49
+ buildLabelSvg,
50
+ computeLabelBand,
51
+ escapeSvgText,
52
+ labelScreenshot
53
+ };
54
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhYmVsLXNjcmVlbnNob3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBZGRzIGEgY2FwdGlvbiBiYW5kIHRvIGFuIGFscmVhZHktY2FwdHVyZWQgc2NyZWVuc2hvdC5cbiAqXG4gKiBBIHN0b3JlIGxpc3Rpbmcgc2hvd3Mgc2NyZWVuc2hvdHMgT05FIEFUIEEgVElNRSwgaW4gYSBjYXJvdXNlbCwgd2l0aCBub1xuICogY2FwdGlvbiBvZiBpdHMgb3duIFx1MjAxNCBzbyBhbiBpbWFnZSBoYXMgdG8gc2F5IHdoYXQgaXQgaXMgc2hvd2luZy4gV2l0aG91dCB0aGF0LFxuICogYSBzaG90IG9mIHRoZSBzdGF0ZSBhIHBsdWdpbiByZW1vdmVzIHJlYWRzIGFzIGEgc2hvdCBvZiB0aGUgc3RhdGUgdGhlIHBsdWdpblxuICogY2F1c2VzLCB3aGljaCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG1lc3NhZ2UuXG4gKlxuICogVGhlIGJhbmQgaXMgZHJhd24gb3ZlciB0aGUgQk9UVE9NIG9mIHRoZSBmcmFtZSwgZm9yIHR3byByZWFzb25zOiB0aGUgdG9wIGlzXG4gKiB3aGVyZSB0aGUgY29udGVudCBiZWluZyBkZW1vbnN0cmF0ZWQgdXN1YWxseSBzdGFydHMsIGFuZCB0aGUgYm90dG9tIG9mIGFuXG4gKiBPYnNpZGlhbiBmcmFtZSBpcyBjaHJvbWUgXHUyMDE0IHN0YXR1cyBiYXIsIHdvcmQgY291bnQsIHN5bmMgaW5kaWNhdG9yIFx1MjAxNCB3aGljaCB0aGVcbiAqIGJhbmQgdGhlbiBjb3ZlcnMgcmF0aGVyIHRoYW4gY29tcGV0aW5nIHdpdGguXG4gKlxuICogVGhpcyBpcyBwb3N0LXByb2Nlc3NpbmcsIGRlbGliZXJhdGVseS4gVGhlIGNhcHR1cmUgc3RheXMgYW4gdW50b3VjaGVkIGRldmljZVxuICogZnJhbWUsIGFuZCByZXdvcmRpbmcgYSBsYWJlbCBuZWVkcyBubyByZS1zaG9vdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNoYXJwQ29tcG9zaXRlTGF5ZXIgfSBmcm9tICcuL3NoYXJwLWxvYWRlci5tanMnO1xuXG5pbXBvcnQgeyBpbXBvcnRTaGFycCB9IGZyb20gJy4vc2hhcnAtbG9hZGVyLm1qcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbXB1dGVMYWJlbEJhbmR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVMYWJlbEJhbmRQYXJhbXMge1xuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBpbWFnZSBiZWluZyBsYWJlbGVkLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBpbWFnZUhlaWdodEluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSBpbWFnZSBiZWluZyBsYWJlbGVkLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVdpZHRoSW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgZ2VvbWV0cnkgb2YgdGhlIGNhcHRpb24gYmFuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbEJhbmRHZW9tZXRyeSB7XG4gIC8qKlxuICAgKiBGb250IHNpemUgZm9yIHRoZSBjYXB0aW9uLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSBmb250U2l6ZUluUGl4ZWxzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgYmFuZCwgaW4gcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVpZ2h0SW5QaXhlbHM6IG51bWJlcjtcblxuICAvKipcbiAgICogRGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBpbWFnZSB0byB0aGUgdG9wIG9mIHRoZSBiYW5kLCBpbiBwaXhlbHMuXG4gICAqL1xuICByZWFkb25seSB0b3BJblBpeGVsczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBsYWJlbFNjcmVlbnNob3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsU2NyZWVuc2hvdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNhcHRpb24uIEtlZXAgaXQgdG8gYSBoYW5kZnVsIG9mIHdvcmRzOiBpdCBpcyByZWFkIGF0IGxpc3RpbmctdGh1bWJuYWlsXG4gICAqIHNpemUsIGFuZCBpdCBpcyBjbGlwcGVkIHJhdGhlciB0aGFuIHdyYXBwZWQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FwdGlvbiBzaXplIGFzIGEgZnJhY3Rpb24gb2YgaW1hZ2UgV0lEVEgsIG5vdCBoZWlnaHQuXG4gKlxuICogV2lkdGggaXMgd2hhdCBnb3Zlcm5zIGxlZ2liaWxpdHkgaGVyZTogYSA5MDB4MTYwMCBwaG9uZSBmcmFtZSBhbmQgYSAxMjAweDgwMFxuICogZGVza3RvcCBmcmFtZSBhcmUgcmVhZCBhdCBzaW1pbGFyIG9uLXNjcmVlbiB3aWR0aHMgaW4gYSBsaXN0aW5nLCBzbyBzaXppbmcgYnlcbiAqIHdpZHRoIGtlZXBzIHRoZSBjYXB0aW9uIHZpc3VhbGx5IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSB0d28uXG4gKi9cbmNvbnN0IEZPTlRfU0laRV9SQVRJTyA9IDAuMDM0O1xuXG4vKipcbiAqIEJhbmQgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgdGhlIGZvbnQgc2l6ZSBcdTIwMTQgZW5vdWdoIHRvIHNpdCB0aGUgdGV4dCBvbiB3aXRoXG4gKiBjbGVhciBzcGFjZSBhYm92ZSBhbmQgYmVsb3cuXG4gKi9cbmNvbnN0IEJBTkRfSEVJR0hUX1JBVElPID0gMi4yO1xuXG4vKipcbiAqIE9wYWNpdHkgb2YgdGhlIGJhbmQsIGRhcmsgZW5vdWdoIHRvIGNhcnJ5IGxpZ2h0IHRleHQgb3ZlciBhbnkgT2JzaWRpYW4gdGhlbWVcbiAqIHdoaWxlIHRoZSBmcmFtZSBiZW5lYXRoIHN0YXlzIGZhaW50bHkgdmlzaWJsZSByYXRoZXIgdGhhbiBsb29raW5nIGN1dCBvZmYuXG4gKi9cbmNvbnN0IEJBTkRfT1BBQ0lUWSA9IDAuODI7XG5cbmNvbnN0IE1JTklNVU1fRk9OVF9TSVpFX0lOX1BJWEVMUyA9IDE4O1xuXG4vKipcbiAqIERpdmlzb3IgdGhhdCB0dXJucyBhIHNwYW4gaW50byBpdHMgbWlkcG9pbnQsIGZvciBjZW50ZXJpbmcgdGhlIGNhcHRpb24uXG4gKi9cbmNvbnN0IENFTlRFUl9ESVZJU09SID0gMjtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIFNWRyBmb3IgdGhlIGNhcHRpb24gYmFuZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBjYXB0aW9uLlxuICogQHBhcmFtIGdlb21ldHJ5IC0gVGhlIGJhbmQgZ2VvbWV0cnkuXG4gKiBAcGFyYW0gaW1hZ2VXaWR0aEluUGl4ZWxzIC0gV2lkdGggb2YgdGhlIGltYWdlLCBzbyB0aGUgYmFuZCBzcGFucyBpdC5cbiAqIEByZXR1cm5zIFRoZSBTVkcgbWFya3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMYWJlbFN2Zyh0ZXh0OiBzdHJpbmcsIGdlb21ldHJ5OiBMYWJlbEJhbmRHZW9tZXRyeSwgaW1hZ2VXaWR0aEluUGl4ZWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCB7IGZvbnRTaXplSW5QaXhlbHMsIGhlaWdodEluUGl4ZWxzIH0gPSBnZW9tZXRyeTtcblxuICByZXR1cm4gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzKX1cIiBoZWlnaHQ9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyl9XCI+YFxuICAgICsgYDxyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIiR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9XCIgaGVpZ2h0PVwiJHtTdHJpbmcoaGVpZ2h0SW5QaXhlbHMpfVwiIGBcbiAgICArIGBmaWxsPVwiIzAwMDAwMFwiIGZpbGwtb3BhY2l0eT1cIiR7U3RyaW5nKEJBTkRfT1BBQ0lUWSl9XCIvPmBcbiAgICArIGA8dGV4dCB4PVwiJHtTdHJpbmcoaW1hZ2VXaWR0aEluUGl4ZWxzIC8gQ0VOVEVSX0RJVklTT1IpfVwiIHk9XCIke1N0cmluZyhoZWlnaHRJblBpeGVscyAvIENFTlRFUl9ESVZJU09SKX1cIiBgXG4gICAgKyBgZm9udC1mYW1pbHk9XCJTZWdvZSBVSSwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiIGZvbnQtc2l6ZT1cIiR7U3RyaW5nKGZvbnRTaXplSW5QaXhlbHMpfVwiIGBcbiAgICArICdmb250LXdlaWdodD1cIjYwMFwiIGZpbGw9XCIjZmZmZmZmXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBkb21pbmFudC1iYXNlbGluZT1cImNlbnRyYWxcIj4nXG4gICAgKyBgJHtlc2NhcGVTdmdUZXh0KHRleHQpfTwvdGV4dD48L3N2Zz5gO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBjYXB0aW9uIGJhbmQncyBzaXplIGFuZCBwb3NpdGlvbiBmb3IgYSBnaXZlbiBpbWFnZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGltYWdlIGRpbWVuc2lvbnMuXG4gKiBAcmV0dXJucyBUaGUgYmFuZCBnZW9tZXRyeS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgZWl0aGVyIGRpbWVuc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlTGFiZWxCYW5kKHBhcmFtczogQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyk6IExhYmVsQmFuZEdlb21ldHJ5IHtcbiAgY29uc3QgeyBpbWFnZUhlaWdodEluUGl4ZWxzLCBpbWFnZVdpZHRoSW5QaXhlbHMgfSA9IHBhcmFtcztcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbWFnZVdpZHRoSW5QaXhlbHMpIHx8IGltYWdlV2lkdGhJblBpeGVscyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlTGFiZWxCYW5kOiBpbWFnZVdpZHRoSW5QaXhlbHMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKGltYWdlV2lkdGhJblBpeGVscyl9LmApO1xuICB9XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW1hZ2VIZWlnaHRJblBpeGVscykgfHwgaW1hZ2VIZWlnaHRJblBpeGVscyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlTGFiZWxCYW5kOiBpbWFnZUhlaWdodEluUGl4ZWxzIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIsIGdvdCAke1N0cmluZyhpbWFnZUhlaWdodEluUGl4ZWxzKX0uYCk7XG4gIH1cblxuICBjb25zdCBmb250U2l6ZUluUGl4ZWxzID0gTWF0aC5tYXgoTUlOSU1VTV9GT05UX1NJWkVfSU5fUElYRUxTLCBNYXRoLnJvdW5kKGltYWdlV2lkdGhJblBpeGVscyAqIEZPTlRfU0laRV9SQVRJTykpO1xuICBjb25zdCBoZWlnaHRJblBpeGVscyA9IE1hdGgubWluKGltYWdlSGVpZ2h0SW5QaXhlbHMsIE1hdGgucm91bmQoZm9udFNpemVJblBpeGVscyAqIEJBTkRfSEVJR0hUX1JBVElPKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb250U2l6ZUluUGl4ZWxzLFxuICAgIGhlaWdodEluUGl4ZWxzLFxuICAgIHRvcEluUGl4ZWxzOiBpbWFnZUhlaWdodEluUGl4ZWxzIC0gaGVpZ2h0SW5QaXhlbHNcbiAgfTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHRleHQgZm9yIGluY2x1c2lvbiBpbiBTVkcgY2hhcmFjdGVyIGRhdGEuXG4gKlxuICogQSBjYXB0aW9uIGlzIGF1dGhvcmVkIHBlciBzY3JlZW5zaG90IGFuZCBjYW4gbGVnaXRpbWF0ZWx5IGNvbnRhaW4gYCZgIG9yIHRoZVxuICogYW5nbGUgYnJhY2tldHMgT2JzaWRpYW4gdXNlcyBpbiBsaW5rIHN5bnRheDsgdW5lc2NhcGVkLCB0aG9zZSBtYWtlIHRoZSBTVkdcbiAqIGltcG9zc2libGUgdG8gcGFyc2UgYW5kIGBzaGFycGAgZmFpbHMgb24gYSBjYXB0aW9uIHJhdGhlciB0aGFuIG9uIGFuIGltYWdlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHJhdyBjYXB0aW9uLlxuICogQHJldHVybnMgVGhlIGNhcHRpb24sIHNhZmUgdG8gZW1iZWQgaW4gU1ZHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlU3ZnVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JylcbiAgICAucmVwbGFjZUFsbCgnPCcsICcmbHQ7JylcbiAgICAucmVwbGFjZUFsbCgnPicsICcmZ3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZUFsbCgnXFwnJywgJyZhcG9zOycpO1xufVxuXG4vKipcbiAqIERyYXdzIGEgY2FwdGlvbiBiYW5kIGFjcm9zcyB0aGUgYm90dG9tIG9mIGEgc2NyZWVuc2hvdC5cbiAqXG4gKiBUaGUgaW1hZ2Uga2VlcHMgaXRzIGRpbWVuc2lvbnMgZXhhY3RseTogdGhlIGJhbmQgaXMgY29tcG9zaXRlZCBPVkVSIHRoZVxuICogZnJhbWUsIG5ldmVyIGFwcGVuZGVkIHRvIGl0LCBiZWNhdXNlIHRoZSBzdG9yZSBleHBlY3RzIGEgc3BlY2lmaWMgc2l6ZS5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgY2FwdHVyZWQgUE5HLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgY2FwdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxhYmVsZWQgUE5HLCB0aGUgc2FtZSBzaXplIGFzIHRoZSBpbnB1dC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYHNoYXJwYCBpcyBub3QgaW5zdGFsbGVkLCBvciB0aGUgaW1hZ2UgZGltZW5zaW9ucyBjYW5ub3QgYmUgcmVhZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhYmVsU2NyZWVuc2hvdChieXRlczogVWludDhBcnJheSwgb3B0aW9uczogTGFiZWxTY3JlZW5zaG90T3B0aW9ucyk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBzaGFycCA9IGF3YWl0IGltcG9ydFNoYXJwKCdsYWJlbFNjcmVlbnNob3QnKTtcbiAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBzaGFycChieXRlcykubWV0YWRhdGEoKTtcbiAgY29uc3QgaW1hZ2VXaWR0aEluUGl4ZWxzID0gbWV0YWRhdGEud2lkdGg7XG4gIGNvbnN0IGltYWdlSGVpZ2h0SW5QaXhlbHMgPSBtZXRhZGF0YS5oZWlnaHQ7XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAtLSBEZWZlbnNpdmU6IGBzaGFycGAgcmVqZWN0cyBhIG5vbi1pbWFnZSBiZWZvcmUgaXQgY2FuIHJlcG9ydCBtZXRhZGF0YSB3aXRob3V0IGRpbWVuc2lvbnMsIHNvIHRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGZyb20gYSB0ZXN0LiAqL1xuICBpZiAoaW1hZ2VXaWR0aEluUGl4ZWxzID09PSB1bmRlZmluZWQgfHwgaW1hZ2VIZWlnaHRJblBpeGVscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsYWJlbFNjcmVlbnNob3Q6IGNvdWxkIG5vdCByZWFkIHRoZSBzb3VyY2UgaW1hZ2UgZGltZW5zaW9ucy4nKTtcbiAgfVxuXG4gIGNvbnN0IGdlb21ldHJ5ID0gY29tcHV0ZUxhYmVsQmFuZCh7IGltYWdlSGVpZ2h0SW5QaXhlbHMsIGltYWdlV2lkdGhJblBpeGVscyB9KTtcbiAgY29uc3Qgc3ZnID0gYnVpbGRMYWJlbFN2ZyhvcHRpb25zLnRleHQsIGdlb21ldHJ5LCBpbWFnZVdpZHRoSW5QaXhlbHMpO1xuICBjb25zdCBsYXllcjogU2hhcnBDb21wb3NpdGVMYXllciA9IHtcbiAgICBpbnB1dDogQnVmZmVyLmZyb20oc3ZnKSxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogZ2VvbWV0cnkudG9wSW5QaXhlbHNcbiAgfTtcblxuICBjb25zdCBsYWJlbGVkID0gYXdhaXQgc2hhcnAoYnl0ZXMpXG4gICAgLmNvbXBvc2l0ZShbbGF5ZXJdKVxuICAgIC5wbmcoKVxuICAgIC50b0J1ZmZlcigpO1xuXG4gIHJldHVybiBuZXcgVWludDhBcnJheShsYWJlbGVkKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQXFCQSxTQUFTLG1CQUFtQjtBQXVENUIsTUFBTSxrQkFBa0I7QUFNeEIsTUFBTSxvQkFBb0I7QUFNMUIsTUFBTSxlQUFlO0FBRXJCLE1BQU0sOEJBQThCO0FBS3BDLE1BQU0saUJBQWlCO0FBVWhCLFNBQVMsY0FBYyxNQUFjLFVBQTZCLG9CQUFvQztBQUMzRyxRQUFNLEVBQUUsa0JBQWtCLGVBQWUsSUFBSTtBQUU3QyxTQUFPLGtEQUFrRCxPQUFPLGtCQUFrQixDQUFDLGFBQWEsT0FBTyxjQUFjLENBQUMsOEJBQ3RGLE9BQU8sa0JBQWtCLENBQUMsYUFBYSxPQUFPLGNBQWMsQ0FBQyxrQ0FDekQsT0FBTyxZQUFZLENBQUMsZUFDeEMsT0FBTyxxQkFBcUIsY0FBYyxDQUFDLFFBQVEsT0FBTyxpQkFBaUIsY0FBYyxDQUFDLHFFQUNuQyxPQUFPLGdCQUFnQixDQUFDLHVGQUV4RixjQUFjLElBQUksQ0FBQztBQUM1QjtBQVNPLFNBQVMsaUJBQWlCLFFBQW1EO0FBQ2xGLFFBQU0sRUFBRSxxQkFBcUIsbUJBQW1CLElBQUk7QUFFcEQsTUFBSSxDQUFDLE9BQU8sU0FBUyxrQkFBa0IsS0FBSyxzQkFBc0IsR0FBRztBQUNuRSxVQUFNLElBQUksTUFBTSx1RUFBdUUsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHO0FBQUEsRUFDdEg7QUFFQSxNQUFJLENBQUMsT0FBTyxTQUFTLG1CQUFtQixLQUFLLHVCQUF1QixHQUFHO0FBQ3JFLFVBQU0sSUFBSSxNQUFNLHdFQUF3RSxPQUFPLG1CQUFtQixDQUFDLEdBQUc7QUFBQSxFQUN4SDtBQUVBLFFBQU0sbUJBQW1CLEtBQUssSUFBSSw2QkFBNkIsS0FBSyxNQUFNLHFCQUFxQixlQUFlLENBQUM7QUFDL0csUUFBTSxpQkFBaUIsS0FBSyxJQUFJLHFCQUFxQixLQUFLLE1BQU0sbUJBQW1CLGlCQUFpQixDQUFDO0FBRXJHLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0EsYUFBYSxzQkFBc0I7QUFBQSxFQUNyQztBQUNGO0FBWU8sU0FBUyxjQUFjLE1BQXNCO0FBQ2xELFNBQU8sS0FDSixXQUFXLEtBQUssT0FBTyxFQUN2QixXQUFXLEtBQUssTUFBTSxFQUN0QixXQUFXLEtBQUssTUFBTSxFQUN0QixXQUFXLEtBQUssUUFBUSxFQUN4QixXQUFXLEtBQU0sUUFBUTtBQUM5QjtBQWFBLGVBQXNCLGdCQUFnQixPQUFtQixTQUFzRDtBQUM3RyxRQUFNLFFBQVEsTUFBTSxZQUFZLGlCQUFpQjtBQUNqRCxRQUFNLFdBQVcsTUFBTSxNQUFNLEtBQUssRUFBRSxTQUFTO0FBQzdDLFFBQU0scUJBQXFCLFNBQVM7QUFDcEMsUUFBTSxzQkFBc0IsU0FBUztBQUdyQyxNQUFJLHVCQUF1QixVQUFhLHdCQUF3QixRQUFXO0FBQ3pFLFVBQU0sSUFBSSxNQUFNLDhEQUE4RDtBQUFBLEVBQ2hGO0FBRUEsUUFBTSxXQUFXLGlCQUFpQixFQUFFLHFCQUFxQixtQkFBbUIsQ0FBQztBQUM3RSxRQUFNLE1BQU0sY0FBYyxRQUFRLE1BQU0sVUFBVSxrQkFBa0I7QUFDcEUsUUFBTSxRQUE2QjtBQUFBLElBQ2pDLE9BQU8sT0FBTyxLQUFLLEdBQUc7QUFBQSxJQUN0QixNQUFNO0FBQUEsSUFDTixLQUFLLFNBQVM7QUFBQSxFQUNoQjtBQUVBLFFBQU0sVUFBVSxNQUFNLE1BQU0sS0FBSyxFQUM5QixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQ2pCLElBQUksRUFDSixTQUFTO0FBRVosU0FBTyxJQUFJLFdBQVcsT0FBTztBQUMvQjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = false ? "dev" : "10.1.0";
1
+ const LIBRARY_VERSION = false ? "dev" : "10.2.0";
2
2
  export {
3
3
  LIBRARY_VERSION
4
4
  };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Lazily loads `sharp`, the OPTIONAL peer dependency the image helpers need, and
5
+ * describes the slice of its surface they use.
6
+ *
7
+ * The load is deferred because a static import would drag `sharp`'s
8
+ * platform-specific native binaries into every consumer of this package's index,
9
+ * when only screenshot post-processing needs them. The type is structural for
10
+ * the same reason: this module type-checks without `sharp`'s own types being
11
+ * resolvable.
12
+ */
13
+ /**
14
+ * A layer passed to `sharp`'s `composite`.
15
+ */
16
+ export interface SharpCompositeLayer {
17
+ readonly input: Buffer;
18
+ readonly left: number;
19
+ readonly top: number;
20
+ }
21
+ /**
22
+ * The `sharp` entry point the image helpers use.
23
+ */
24
+ export type SharpFactory = (input: Uint8Array) => SharpInstance;
25
+ /**
26
+ * One `sharp` pipeline.
27
+ */
28
+ export interface SharpInstance {
29
+ blur(this: void, sigma: number): SharpInstance;
30
+ composite(this: void, layers: SharpCompositeLayer[]): SharpInstance;
31
+ metadata(this: void): Promise<SharpMetadata>;
32
+ png(this: void): SharpInstance;
33
+ resize(this: void, width: number, height: number, options?: SharpResizeOptions): SharpInstance;
34
+ toBuffer(this: void): Promise<Buffer>;
35
+ }
36
+ /**
37
+ * The subset of `sharp`'s metadata the image helpers read.
38
+ */
39
+ export interface SharpMetadata {
40
+ readonly height?: number | undefined;
41
+ readonly width?: number | undefined;
42
+ }
43
+ /**
44
+ * The subset of `sharp`'s resize options the image helpers set.
45
+ */
46
+ export interface SharpResizeOptions {
47
+ readonly fit: 'cover' | 'fill';
48
+ }
49
+ /**
50
+ * Loads `sharp` on demand.
51
+ *
52
+ * @param caller - Name of the calling helper, so the error says which one needs it.
53
+ * @returns A {@link Promise} that resolves to the `sharp` factory.
54
+ * @throws Error naming the missing optional peer dependency.
55
+ */
56
+ export declare function importSharp(caller: string): Promise<SharpFactory>;
@@ -0,0 +1,16 @@
1
+ async function importSharp(caller) {
2
+ try {
3
+ const sharpModule = await import("sharp");
4
+ const factory = sharpModule.default;
5
+ return factory;
6
+ } catch (error) {
7
+ throw new Error(
8
+ `${caller} needs the optional peer dependency "sharp". Install it in the consuming project (npm i -D sharp).`,
9
+ { cause: error }
10
+ );
11
+ }
12
+ }
13
+ export {
14
+ importSharp
15
+ };
16
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NoYXJwLWxvYWRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIExhemlseSBsb2FkcyBgc2hhcnBgLCB0aGUgT1BUSU9OQUwgcGVlciBkZXBlbmRlbmN5IHRoZSBpbWFnZSBoZWxwZXJzIG5lZWQsIGFuZFxuICogZGVzY3JpYmVzIHRoZSBzbGljZSBvZiBpdHMgc3VyZmFjZSB0aGV5IHVzZS5cbiAqXG4gKiBUaGUgbG9hZCBpcyBkZWZlcnJlZCBiZWNhdXNlIGEgc3RhdGljIGltcG9ydCB3b3VsZCBkcmFnIGBzaGFycGAnc1xuICogcGxhdGZvcm0tc3BlY2lmaWMgbmF0aXZlIGJpbmFyaWVzIGludG8gZXZlcnkgY29uc3VtZXIgb2YgdGhpcyBwYWNrYWdlJ3MgaW5kZXgsXG4gKiB3aGVuIG9ubHkgc2NyZWVuc2hvdCBwb3N0LXByb2Nlc3NpbmcgbmVlZHMgdGhlbS4gVGhlIHR5cGUgaXMgc3RydWN0dXJhbCBmb3JcbiAqIHRoZSBzYW1lIHJlYXNvbjogdGhpcyBtb2R1bGUgdHlwZS1jaGVja3Mgd2l0aG91dCBgc2hhcnBgJ3Mgb3duIHR5cGVzIGJlaW5nXG4gKiByZXNvbHZhYmxlLlxuICovXG5cbi8qKlxuICogQSBsYXllciBwYXNzZWQgdG8gYHNoYXJwYCdzIGBjb21wb3NpdGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJwQ29tcG9zaXRlTGF5ZXIge1xuICByZWFkb25seSBpbnB1dDogQnVmZmVyO1xuICByZWFkb25seSBsZWZ0OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvcDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBgc2hhcnBgIGVudHJ5IHBvaW50IHRoZSBpbWFnZSBoZWxwZXJzIHVzZS5cbiAqL1xuZXhwb3J0IHR5cGUgU2hhcnBGYWN0b3J5ID0gKGlucHV0OiBVaW50OEFycmF5KSA9PiBTaGFycEluc3RhbmNlO1xuXG4vKipcbiAqIE9uZSBgc2hhcnBgIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJwSW5zdGFuY2Uge1xuICBibHVyKHRoaXM6IHZvaWQsIHNpZ21hOiBudW1iZXIpOiBTaGFycEluc3RhbmNlO1xuICBjb21wb3NpdGUodGhpczogdm9pZCwgbGF5ZXJzOiBTaGFycENvbXBvc2l0ZUxheWVyW10pOiBTaGFycEluc3RhbmNlO1xuICBtZXRhZGF0YSh0aGlzOiB2b2lkKTogUHJvbWlzZTxTaGFycE1ldGFkYXRhPjtcbiAgcG5nKHRoaXM6IHZvaWQpOiBTaGFycEluc3RhbmNlO1xuICByZXNpemUodGhpczogdm9pZCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9wdGlvbnM/OiBTaGFycFJlc2l6ZU9wdGlvbnMpOiBTaGFycEluc3RhbmNlO1xuICB0b0J1ZmZlcih0aGlzOiB2b2lkKTogUHJvbWlzZTxCdWZmZXI+O1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYHNoYXJwYCdzIG1ldGFkYXRhIHRoZSBpbWFnZSBoZWxwZXJzIHJlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcnBNZXRhZGF0YSB7XG4gIHJlYWRvbmx5IGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgd2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIHN1YnNldCBvZiBgc2hhcnBgJ3MgcmVzaXplIG9wdGlvbnMgdGhlIGltYWdlIGhlbHBlcnMgc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJwUmVzaXplT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZpdDogJ2NvdmVyJyB8ICdmaWxsJztcbn1cblxuLyoqXG4gKiBMb2FkcyBgc2hhcnBgIG9uIGRlbWFuZC5cbiAqXG4gKiBAcGFyYW0gY2FsbGVyIC0gTmFtZSBvZiB0aGUgY2FsbGluZyBoZWxwZXIsIHNvIHRoZSBlcnJvciBzYXlzIHdoaWNoIG9uZSBuZWVkcyBpdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGBzaGFycGAgZmFjdG9yeS5cbiAqIEB0aHJvd3MgRXJyb3IgbmFtaW5nIHRoZSBtaXNzaW5nIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFNoYXJwKGNhbGxlcjogc3RyaW5nKTogUHJvbWlzZTxTaGFycEZhY3Rvcnk+IHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gYHNoYXJwYCBpcyBhbiBPUFRJT05BTCBwZWVyLCBzbyBpdCBtdXN0IGJlIGxvYWRlZCBsYXppbHk6IGEgc3RhdGljIGltcG9ydCB3b3VsZCBkcmFnIGl0cyBuYXRpdmUgYmluYXJpZXMgaW50byBldmVyeSBjb25zdW1lciBvZiB0aGlzIHBhY2thZ2UncyBpbmRleC5cbiAgICBjb25zdCBzaGFycE1vZHVsZSA9IGF3YWl0IGltcG9ydCgnc2hhcnAnKTtcbiAgICBjb25zdCBmYWN0b3J5OiB1bmtub3duID0gc2hhcnBNb2R1bGUuZGVmYXVsdDtcbiAgICByZXR1cm4gZmFjdG9yeSBhcyBTaGFycEZhY3Rvcnk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFJlYWNoZWQgb25seSB3aGVuIHRoZSBvcHRpb25hbCBwZWVyIGlzIGFic2VudCwgd2hpY2ggaXQgbmV2ZXIgaXMgaW4gdGhpcyBwYWNrYWdlJ3Mgb3duIHRlc3QgcnVuLiAqL1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2NhbGxlcn0gbmVlZHMgdGhlIG9wdGlvbmFsIHBlZXIgZGVwZW5kZW5jeSBcInNoYXJwXCIuIGBcbiAgICAgICAgKyAnSW5zdGFsbCBpdCBpbiB0aGUgY29uc3VtaW5nIHByb2plY3QgKG5wbSBpIC1EIHNoYXJwKS4nLFxuICAgICAgeyBjYXVzZTogZXJyb3IgfVxuICAgICk7XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBNkRBLGVBQXNCLFlBQVksUUFBdUM7QUFDdkUsTUFBSTtBQUVGLFVBQU0sY0FBYyxNQUFNLE9BQU8sT0FBTztBQUN4QyxVQUFNLFVBQW1CLFlBQVk7QUFDckMsV0FBTztBQUFBLEVBQ1QsU0FBUyxPQUFnQjtBQUV2QixVQUFNLElBQUk7QUFBQSxNQUNSLEdBQUcsTUFBTTtBQUFBLE1BRVQsRUFBRSxPQUFPLE1BQU07QUFBQSxJQUNqQjtBQUFBLEVBRUY7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-integration-testing",
3
- "version": "10.2.0",
3
+ "version": "10.3.0",
4
4
  "description": "Simplifies integration testing of Obsidian plugins.",
5
5
  "keywords": [
6
6
  "obsidian",