obsidian-dev-utils 19.7.0 → 19.7.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 19.7.1-beta.2
4
+
5
+ - Extract canvas key parsing
6
+ - Update libs
7
+ - Fix sourcemaps regex
8
+
9
+ ## 19.7.1-beta.1
10
+
11
+ - Handle canvas text changes
12
+ - Update libs
13
+
3
14
  ## 19.7.0
4
15
 
5
16
  - fixFrontmatterMarkdownLinks
@@ -30,7 +30,7 @@ __export(Library_exports, {
30
30
  LIBRARY_VERSION: () => LIBRARY_VERSION
31
31
  });
32
32
  module.exports = __toCommonJS(Library_exports);
33
- const LIBRARY_VERSION = "19.7.0";
33
+ const LIBRARY_VERSION = "19.7.1-beta.2";
34
34
  const LIBRARY_NAME = "obsidian-dev-utils";
35
35
  const LIBRARY_STYLES = ".obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/main.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AACE;EACE;;AAIA;EACE;EACA;;AAKF;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;EACE;EACA;;AAMJ;EACE%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%20%20%7D%5Cn%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
36
36
  // Annotate the CommonJS export names for ESM import in node:
@@ -46,7 +46,7 @@ function fixSourceMapsPlugin(isProductionBuild, distPaths, pluginName) {
46
46
  const content = await (0, import_NodeModules.readFile)(distPath, "utf-8");
47
47
  const newContent = (0, import_String.replaceAll)(
48
48
  content,
49
- /(?<Prefix>\n(?:\/\/|\/\*)# sourceMappingURL=data:application\/json;base64,)(?<SourceMapBase64>.+)(?<Suffix>$|\n| \*\/)(?:.|\n)*/g,
49
+ /(?<Prefix>\n(?:\/\/|\/\*)# sourceMappingURL=data:application\/json;base64,)(?<SourceMapBase64>.+?)(?<Suffix>$|\n| \*\/)(?:.|\n)*/g,
50
50
  (_, prefix, sourceMapBase64, suffix) => `${prefix + fixSourceMap(sourceMapBase64, pluginName) + suffix.trim()}
51
51
  /* nosourcemap */`
52
52
  );
@@ -72,4 +72,4 @@ function fixSourceMap(sourceMapBase64, pluginName) {
72
72
  0 && (module.exports = {
73
73
  fixSourceMapsPlugin
74
74
  });
75
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL1NjcmlwdFV0aWxzL2VzYnVpbGQvZml4U291cmNlTWFwc1BsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gZml4U291cmNlTWFwc1BsdWdpblxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGZpeGVzIHNvdXJjZSBtYXBzIGdlbmVyYXRlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gKiBJdCBhZGp1c3RzIHRoZSBwYXRocyBpbiB0aGUgc291cmNlIG1hcHMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE9ic2lkaWFuJ3MgaW50ZXJuYWwgVVJMIHNjaGVtZS5cbiAqIFRoZSBwbHVnaW4gaXMgb25seSBhY3RpdmUgZHVyaW5nIGRldmVsb3BtZW50IGJ1aWxkcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuXG5pbXBvcnQgeyB0b1Bvc2l4UGF0aCB9IGZyb20gJy4uLy4uL1BhdGgudHMnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4uLy4uL1N0cmluZy50cyc7XG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkRmlsZSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJy4uL05vZGVNb2R1bGVzLnRzJztcblxuaW50ZXJmYWNlIFNvdXJjZU1hcCB7XG4gIHNvdXJjZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCBmaXhlcyBzb3VyY2UgbWFwcyBieSBhZGp1c3RpbmcgdGhlIHBhdGhzIHRvIGJlIGNvbXBhdGlibGVcbiAqIHdpdGggT2JzaWRpYW4ncyBpbnRlcm5hbCBVUkwgc2NoZW1lLlxuICpcbiAqIEBwYXJhbSBpc1Byb2R1Y3Rpb25CdWlsZCAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJ1aWxkIGlzIGEgcHJvZHVjdGlvbiBidWlsZC4gVGhlIHBsdWdpbiBvbmx5IHJ1bnMgaW4gbm9uLXByb2R1Y3Rpb24gYnVpbGRzLlxuICogQHBhcmFtIGRpc3RQYXRocyAtIFRoZSBwYXRocyB0byB0aGUgb3V0cHV0IGZpbGVzIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBtYXBzLlxuICogQHBhcmFtIHBsdWdpbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgT2JzaWRpYW4gcGx1Z2luLCB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgT2JzaWRpYW4tc3BlY2lmaWMgVVJMcy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgZml4ZXMgc291cmNlIG1hcHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhTb3VyY2VNYXBzUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuLCBkaXN0UGF0aHM6IHN0cmluZ1tdLCBwbHVnaW5OYW1lOiBzdHJpbmcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdmaXgtc291cmNlLW1hcHMnLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGlzdFBhdGggb2YgZGlzdFBhdGhzKSB7XG4gICAgICAgICAgaWYgKCFleGlzdHNTeW5jKGRpc3RQYXRoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGRpc3RQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gcmVwbGFjZUFsbChcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAvKD88UHJlZml4Plxcbig/OlxcL1xcL3xcXC9cXCopIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO2Jhc2U2NCwpKD88U291cmNlTWFwQmFzZTY0Pi4rKSg/PFN1ZmZpeD4kfFxcbnwgXFwqXFwvKSg/Oi58XFxuKSovZyxcbiAgICAgICAgICAgIChfLCBwcmVmaXgsIHNvdXJjZU1hcEJhc2U2NCwgc3VmZml4KTogc3RyaW5nID0+IGAke3ByZWZpeCArIGZpeFNvdXJjZU1hcChzb3VyY2VNYXBCYXNlNjQsIHBsdWdpbk5hbWUpICsgc3VmZml4LnRyaW0oKX1cXG4vKiBub3NvdXJjZW1hcCAqL2BcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShkaXN0UGF0aCwgbmV3Q29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBnaXZlbiBmaWxlIHBhdGggdG8gYW4gT2JzaWRpYW4tc3BlY2lmaWMgVVJMLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIG9yaWdpbmFsIGZpbGUgcGF0aC5cbiAqIEBwYXJhbSBwbHVnaW5OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIE9ic2lkaWFuIHBsdWdpbi5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgcGF0aCBhcyBhbiBPYnNpZGlhbi1zcGVjaWZpYyBVUkwuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQYXRoVG9PYnNpZGlhblVybChwYXRoOiBzdHJpbmcsIHBsdWdpbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbnZlcnRlZFBhdGggPSByZXBsYWNlQWxsKHRvUG9zaXhQYXRoKHBhdGgpLCAvXig/OlxcLlxcLlxcLykrL2csICcnKTtcbiAgcmV0dXJuIGBhcHA6Ly9vYnNpZGlhbi5tZC9wbHVnaW46JHtwbHVnaW5OYW1lfS8ke2NvbnZlcnRlZFBhdGh9YDtcbn1cblxuLyoqXG4gKiBBZGp1c3RzIHRoZSBwYXRocyBpbiB0aGUgYmFzZTY0LWVuY29kZWQgc291cmNlIG1hcCB0byBiZSBjb21wYXRpYmxlIHdpdGggT2JzaWRpYW4ncyBVUkwgc2NoZW1lLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VNYXBCYXNlNjQgLSBUaGUgYmFzZTY0LWVuY29kZWQgc291cmNlIG1hcCBjb250ZW50LlxuICogQHBhcmFtIHBsdWdpbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgT2JzaWRpYW4gcGx1Z2luLCB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgT2JzaWRpYW4tc3BlY2lmaWMgVVJMcy5cbiAqIEByZXR1cm5zIEEgYmFzZTY0LWVuY29kZWQgc3RyaW5nIHdpdGggdGhlIGFkanVzdGVkIHNvdXJjZSBtYXAuXG4gKi9cbmZ1bmN0aW9uIGZpeFNvdXJjZU1hcChzb3VyY2VNYXBCYXNlNjQ6IHN0cmluZywgcGx1Z2luTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc291cmNlTWFwSnNvbiA9IEJ1ZmZlci5mcm9tKHNvdXJjZU1hcEJhc2U2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICBjb25zdCBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKHNvdXJjZU1hcEpzb24pIGFzIFBhcnRpYWw8U291cmNlTWFwPjtcbiAgc291cmNlTWFwLnNvdXJjZXMgPSAoc291cmNlTWFwLnNvdXJjZXMgPz8gW10pLm1hcCgocGF0aCkgPT4gY29udmVydFBhdGhUb09ic2lkaWFuVXJsKHBhdGgsIHBsdWdpbk5hbWUpKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0Esa0JBQTRCO0FBQzVCLG9CQUEyQjtBQUMzQix5QkFJTztBQWVBLFNBQVMsb0JBQW9CLG1CQUE0QixXQUFxQixZQUE0QjtBQUMvRyxTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNLE9BQWE7QUFDakIsWUFBTSxNQUFNLFlBQVk7QUFDdEIsWUFBSSxtQkFBbUI7QUFDckI7QUFBQSxRQUNGO0FBRUEsbUJBQVcsWUFBWSxXQUFXO0FBQ2hDLGNBQUksS0FBQywrQkFBVyxRQUFRLEdBQUc7QUFDekI7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sVUFBVSxVQUFNLDZCQUFTLFVBQVUsT0FBTztBQUNoRCxnQkFBTSxpQkFBYTtBQUFBLFlBQ2pCO0FBQUEsWUFDQTtBQUFBLFlBQ0EsQ0FBQyxHQUFHLFFBQVEsaUJBQWlCLFdBQW1CLEdBQUcsU0FBUyxhQUFhLGlCQUFpQixVQUFVLElBQUksT0FBTyxLQUFLLENBQUM7QUFBQTtBQUFBLFVBQ3ZIO0FBRUEsY0FBSSxZQUFZLFlBQVk7QUFDMUIsc0JBQU0sOEJBQVUsVUFBVSxVQUFVO0FBQUEsVUFDdEM7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjtBQVNBLFNBQVMseUJBQXlCLE1BQWMsWUFBNEI7QUFDMUUsUUFBTSxvQkFBZ0IsOEJBQVcseUJBQVksSUFBSSxHQUFHLGlCQUFpQixFQUFFO0FBQ3ZFLFNBQU8sNEJBQTRCLFVBQVUsSUFBSSxhQUFhO0FBQ2hFO0FBU0EsU0FBUyxhQUFhLGlCQUF5QixZQUE0QjtBQUN6RSxRQUFNLGdCQUFnQixPQUFPLEtBQUssaUJBQWlCLFFBQVEsRUFBRSxTQUFTLE9BQU87QUFDN0UsUUFBTSxZQUFZLEtBQUssTUFBTSxhQUFhO0FBQzFDLFlBQVUsV0FBVyxVQUFVLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLHlCQUF5QixNQUFNLFVBQVUsQ0FBQztBQUN0RyxTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsU0FBUyxDQUFDLEVBQUUsU0FBUyxRQUFRO0FBQ2pFOyIsCiAgIm5hbWVzIjogW10KfQo=
75
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL1NjcmlwdFV0aWxzL2VzYnVpbGQvZml4U291cmNlTWFwc1BsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gZml4U291cmNlTWFwc1BsdWdpblxuICogVGhpcyBtb2R1bGUgZGVmaW5lcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGZpeGVzIHNvdXJjZSBtYXBzIGdlbmVyYXRlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gKiBJdCBhZGp1c3RzIHRoZSBwYXRocyBpbiB0aGUgc291cmNlIG1hcHMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE9ic2lkaWFuJ3MgaW50ZXJuYWwgVVJMIHNjaGVtZS5cbiAqIFRoZSBwbHVnaW4gaXMgb25seSBhY3RpdmUgZHVyaW5nIGRldmVsb3BtZW50IGJ1aWxkcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuXG5pbXBvcnQgeyB0b1Bvc2l4UGF0aCB9IGZyb20gJy4uLy4uL1BhdGgudHMnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4uLy4uL1N0cmluZy50cyc7XG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkRmlsZSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJy4uL05vZGVNb2R1bGVzLnRzJztcblxuaW50ZXJmYWNlIFNvdXJjZU1hcCB7XG4gIHNvdXJjZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCBmaXhlcyBzb3VyY2UgbWFwcyBieSBhZGp1c3RpbmcgdGhlIHBhdGhzIHRvIGJlIGNvbXBhdGlibGVcbiAqIHdpdGggT2JzaWRpYW4ncyBpbnRlcm5hbCBVUkwgc2NoZW1lLlxuICpcbiAqIEBwYXJhbSBpc1Byb2R1Y3Rpb25CdWlsZCAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJ1aWxkIGlzIGEgcHJvZHVjdGlvbiBidWlsZC4gVGhlIHBsdWdpbiBvbmx5IHJ1bnMgaW4gbm9uLXByb2R1Y3Rpb24gYnVpbGRzLlxuICogQHBhcmFtIGRpc3RQYXRocyAtIFRoZSBwYXRocyB0byB0aGUgb3V0cHV0IGZpbGVzIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBtYXBzLlxuICogQHBhcmFtIHBsdWdpbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgT2JzaWRpYW4gcGx1Z2luLCB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgT2JzaWRpYW4tc3BlY2lmaWMgVVJMcy5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0IHRoYXQgZml4ZXMgc291cmNlIG1hcHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhTb3VyY2VNYXBzUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkOiBib29sZWFuLCBkaXN0UGF0aHM6IHN0cmluZ1tdLCBwbHVnaW5OYW1lOiBzdHJpbmcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdmaXgtc291cmNlLW1hcHMnLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGlzdFBhdGggb2YgZGlzdFBhdGhzKSB7XG4gICAgICAgICAgaWYgKCFleGlzdHNTeW5jKGRpc3RQYXRoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGRpc3RQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gcmVwbGFjZUFsbChcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAvKD88UHJlZml4Plxcbig/OlxcL1xcL3xcXC9cXCopIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO2Jhc2U2NCwpKD88U291cmNlTWFwQmFzZTY0Pi4rPykoPzxTdWZmaXg+JHxcXG58IFxcKlxcLykoPzoufFxcbikqL2csXG4gICAgICAgICAgICAoXywgcHJlZml4LCBzb3VyY2VNYXBCYXNlNjQsIHN1ZmZpeCk6IHN0cmluZyA9PiBgJHtwcmVmaXggKyBmaXhTb3VyY2VNYXAoc291cmNlTWFwQmFzZTY0LCBwbHVnaW5OYW1lKSArIHN1ZmZpeC50cmltKCl9XFxuLyogbm9zb3VyY2VtYXAgKi9gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjb250ZW50ICE9PSBuZXdDb250ZW50KSB7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUoZGlzdFBhdGgsIG5ld0NvbnRlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZ2l2ZW4gZmlsZSBwYXRoIHRvIGFuIE9ic2lkaWFuLXNwZWNpZmljIFVSTC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBvcmlnaW5hbCBmaWxlIHBhdGguXG4gKiBAcGFyYW0gcGx1Z2luTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBPYnNpZGlhbiBwbHVnaW4uXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHBhdGggYXMgYW4gT2JzaWRpYW4tc3BlY2lmaWMgVVJMLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UGF0aFRvT2JzaWRpYW5VcmwocGF0aDogc3RyaW5nLCBwbHVnaW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb252ZXJ0ZWRQYXRoID0gcmVwbGFjZUFsbCh0b1Bvc2l4UGF0aChwYXRoKSwgL14oPzpcXC5cXC5cXC8pKy9nLCAnJyk7XG4gIHJldHVybiBgYXBwOi8vb2JzaWRpYW4ubWQvcGx1Z2luOiR7cGx1Z2luTmFtZX0vJHtjb252ZXJ0ZWRQYXRofWA7XG59XG5cbi8qKlxuICogQWRqdXN0cyB0aGUgcGF0aHMgaW4gdGhlIGJhc2U2NC1lbmNvZGVkIHNvdXJjZSBtYXAgdG8gYmUgY29tcGF0aWJsZSB3aXRoIE9ic2lkaWFuJ3MgVVJMIHNjaGVtZS5cbiAqXG4gKiBAcGFyYW0gc291cmNlTWFwQmFzZTY0IC0gVGhlIGJhc2U2NC1lbmNvZGVkIHNvdXJjZSBtYXAgY29udGVudC5cbiAqIEBwYXJhbSBwbHVnaW5OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIE9ic2lkaWFuIHBsdWdpbiwgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIE9ic2lkaWFuLXNwZWNpZmljIFVSTHMuXG4gKiBAcmV0dXJucyBBIGJhc2U2NC1lbmNvZGVkIHN0cmluZyB3aXRoIHRoZSBhZGp1c3RlZCBzb3VyY2UgbWFwLlxuICovXG5mdW5jdGlvbiBmaXhTb3VyY2VNYXAoc291cmNlTWFwQmFzZTY0OiBzdHJpbmcsIHBsdWdpbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNvdXJjZU1hcEpzb24gPSBCdWZmZXIuZnJvbShzb3VyY2VNYXBCYXNlNjQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgY29uc3Qgc291cmNlTWFwID0gSlNPTi5wYXJzZShzb3VyY2VNYXBKc29uKSBhcyBQYXJ0aWFsPFNvdXJjZU1hcD47XG4gIHNvdXJjZU1hcC5zb3VyY2VzID0gKHNvdXJjZU1hcC5zb3VyY2VzID8/IFtdKS5tYXAoKHBhdGgpID0+IGNvbnZlcnRQYXRoVG9PYnNpZGlhblVybChwYXRoLCBwbHVnaW5OYW1lKSk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLGtCQUE0QjtBQUM1QixvQkFBMkI7QUFDM0IseUJBSU87QUFlQSxTQUFTLG9CQUFvQixtQkFBNEIsV0FBcUIsWUFBNEI7QUFDL0csU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxPQUFhO0FBQ2pCLFlBQU0sTUFBTSxZQUFZO0FBQ3RCLFlBQUksbUJBQW1CO0FBQ3JCO0FBQUEsUUFDRjtBQUVBLG1CQUFXLFlBQVksV0FBVztBQUNoQyxjQUFJLEtBQUMsK0JBQVcsUUFBUSxHQUFHO0FBQ3pCO0FBQUEsVUFDRjtBQUVBLGdCQUFNLFVBQVUsVUFBTSw2QkFBUyxVQUFVLE9BQU87QUFDaEQsZ0JBQU0saUJBQWE7QUFBQSxZQUNqQjtBQUFBLFlBQ0E7QUFBQSxZQUNBLENBQUMsR0FBRyxRQUFRLGlCQUFpQixXQUFtQixHQUFHLFNBQVMsYUFBYSxpQkFBaUIsVUFBVSxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQUE7QUFBQSxVQUN2SDtBQUVBLGNBQUksWUFBWSxZQUFZO0FBQzFCLHNCQUFNLDhCQUFVLFVBQVUsVUFBVTtBQUFBLFVBQ3RDO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7QUFTQSxTQUFTLHlCQUF5QixNQUFjLFlBQTRCO0FBQzFFLFFBQU0sb0JBQWdCLDhCQUFXLHlCQUFZLElBQUksR0FBRyxpQkFBaUIsRUFBRTtBQUN2RSxTQUFPLDRCQUE0QixVQUFVLElBQUksYUFBYTtBQUNoRTtBQVNBLFNBQVMsYUFBYSxpQkFBeUIsWUFBNEI7QUFDekUsUUFBTSxnQkFBZ0IsT0FBTyxLQUFLLGlCQUFpQixRQUFRLEVBQUUsU0FBUyxPQUFPO0FBQzdFLFFBQU0sWUFBWSxLQUFLLE1BQU0sYUFBYTtBQUMxQyxZQUFVLFdBQVcsVUFBVSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyx5QkFBeUIsTUFBTSxVQUFVLENBQUM7QUFDdEcsU0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLFNBQVMsQ0FBQyxFQUFFLFNBQVMsUUFBUTtBQUNqRTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,85 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&module.default?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
7
+
8
+ "use strict";
9
+ var __defProp = Object.defineProperty;
10
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
+ var __getOwnPropNames = Object.getOwnPropertyNames;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
+ var Canvas_exports = {};
27
+ __export(Canvas_exports, {
28
+ isCanvasFileLink: () => isCanvasFileLink,
29
+ isCanvasTextLink: () => isCanvasTextLink,
30
+ parseCanvasLinkKey: () => parseCanvasLinkKey
31
+ });
32
+ module.exports = __toCommonJS(Canvas_exports);
33
+ function isCanvasFileLink(link) {
34
+ return link.type === "file";
35
+ }
36
+ function isCanvasTextLink(link) {
37
+ return link.type === "text";
38
+ }
39
+ function parseCanvasLinkKey(key) {
40
+ const keyParts = key.split(".");
41
+ const NODES_PART_INDEX = 0;
42
+ const NODE_INDEX_PART_INDEX = 1;
43
+ const NODE_TYPE_PART_INDEX = 2;
44
+ const LINK_INDEX_PART_INDEX = 3;
45
+ if (keyParts[NODES_PART_INDEX] !== "nodes") {
46
+ return null;
47
+ }
48
+ const nodeIndex = parseInt(keyParts[NODE_INDEX_PART_INDEX] ?? "", 10);
49
+ if (isNaN(nodeIndex)) {
50
+ return null;
51
+ }
52
+ switch (keyParts[NODE_TYPE_PART_INDEX]) {
53
+ case "file":
54
+ if (keyParts.length !== NODE_TYPE_PART_INDEX + 1) {
55
+ return null;
56
+ }
57
+ return {
58
+ nodeIndex,
59
+ type: "file"
60
+ };
61
+ case "text": {
62
+ const linkIndex = parseInt(keyParts[LINK_INDEX_PART_INDEX] ?? "", 10);
63
+ if (isNaN(linkIndex)) {
64
+ return null;
65
+ }
66
+ if (keyParts.length !== LINK_INDEX_PART_INDEX + 1) {
67
+ return null;
68
+ }
69
+ return {
70
+ linkIndex,
71
+ nodeIndex,
72
+ type: "text"
73
+ };
74
+ }
75
+ default:
76
+ return null;
77
+ }
78
+ }
79
+ // Annotate the CommonJS export names for ESM import in node:
80
+ 0 && (module.exports = {
81
+ isCanvasFileLink,
82
+ isCanvasTextLink,
83
+ parseCanvasLinkKey
84
+ });
85
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0NhbnZhcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gQ2FudmFzXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIGNhbnZhcyBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBsaW5rIHdpdGhpbiBhIGZpbGUgbm9kZSBpbiBhIGNhbnZhcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYW52YXNGaWxlTGluayBleHRlbmRzIENhbnZhc0xpbmsge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluay5cbiAgICovXG4gIHR5cGU6ICdmaWxlJztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbGluayBpbiBhIGNhbnZhcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYW52YXNMaW5rIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgbm9kZS5cbiAgICovXG4gIG5vZGVJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5rLlxuICAgKi9cbiAgdHlwZTogJ2ZpbGUnIHwgJ3RleHQnO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBsaW5rIHdpdGhpbiBhIHRleHQgbm9kZSBpbiBhIGNhbnZhcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYW52YXNUZXh0TGluayBleHRlbmRzIENhbnZhc0xpbmsge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBsaW5rIHdpdGhpbiB0aGUgdGV4dCBub2RlLlxuICAgKi9cbiAgbGlua0luZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmsuXG4gICAqL1xuICB0eXBlOiAndGV4dCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgY2FudmFzIGxpbmsgaXMgYSBjYW52YXMgZmlsZSBsaW5rLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gVGhlIGxpbmsgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjYW52YXMgbGluayBpcyBhIGNhbnZhcyBmaWxlIGxpbmssIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzRmlsZUxpbmsobGluazogQ2FudmFzTGluayk6IGxpbmsgaXMgQ2FudmFzRmlsZUxpbmsge1xuICByZXR1cm4gbGluay50eXBlID09PSAnZmlsZSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgY2FudmFzIGxpbmsgaXMgYSBjYW52YXMgdGV4dCBsaW5rLlxuICpcbiAqIEBwYXJhbSBsaW5rIC0gVGhlIGxpbmsgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjYW52YXMgbGluayBpcyBhIGNhbnZhcyB0ZXh0IGxpbmssIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzVGV4dExpbmsobGluazogQ2FudmFzTGluayk6IGxpbmsgaXMgQ2FudmFzVGV4dExpbmsge1xuICByZXR1cm4gbGluay50eXBlID09PSAndGV4dCc7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgY2FudmFzIGxpbmsga2V5LlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBjYW52YXMgbGluaywgb3IgbnVsbCBpZiB0aGUga2V5IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhbnZhc0xpbmtLZXkoa2V5OiBzdHJpbmcpOiBDYW52YXNMaW5rIHwgbnVsbCB7XG4gIGNvbnN0IGtleVBhcnRzID0ga2V5LnNwbGl0KCcuJyk7XG4gIGNvbnN0IE5PREVTX1BBUlRfSU5ERVggPSAwO1xuICBjb25zdCBOT0RFX0lOREVYX1BBUlRfSU5ERVggPSAxO1xuICBjb25zdCBOT0RFX1RZUEVfUEFSVF9JTkRFWCA9IDI7XG4gIGNvbnN0IExJTktfSU5ERVhfUEFSVF9JTkRFWCA9IDM7XG5cbiAgaWYgKGtleVBhcnRzW05PREVTX1BBUlRfSU5ERVhdICE9PSAnbm9kZXMnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBub2RlSW5kZXggPSBwYXJzZUludChrZXlQYXJ0c1tOT0RFX0lOREVYX1BBUlRfSU5ERVhdID8/ICcnLCAxMCk7XG4gIGlmIChpc05hTihub2RlSW5kZXgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGtleVBhcnRzW05PREVfVFlQRV9QQVJUX0lOREVYXSkge1xuICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgaWYgKGtleVBhcnRzLmxlbmd0aCAhPT0gTk9ERV9UWVBFX1BBUlRfSU5ERVggKyAxKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHR5cGU6ICdmaWxlJ1xuICAgICAgfSBhcyBDYW52YXNGaWxlTGluaztcbiAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgY29uc3QgbGlua0luZGV4ID0gcGFyc2VJbnQoa2V5UGFydHNbTElOS19JTkRFWF9QQVJUX0lOREVYXSA/PyAnJywgMTApO1xuICAgICAgaWYgKGlzTmFOKGxpbmtJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXlQYXJ0cy5sZW5ndGggIT09IExJTktfSU5ERVhfUEFSVF9JTkRFWCArIDEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmtJbmRleCxcbiAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgIH0gYXMgQ2FudmFzVGV4dExpbms7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbURPLFNBQVMsaUJBQWlCLE1BQTBDO0FBQ3pFLFNBQU8sS0FBSyxTQUFTO0FBQ3ZCO0FBUU8sU0FBUyxpQkFBaUIsTUFBMEM7QUFDekUsU0FBTyxLQUFLLFNBQVM7QUFDdkI7QUFRTyxTQUFTLG1CQUFtQixLQUFnQztBQUNqRSxRQUFNLFdBQVcsSUFBSSxNQUFNLEdBQUc7QUFDOUIsUUFBTSxtQkFBbUI7QUFDekIsUUFBTSx3QkFBd0I7QUFDOUIsUUFBTSx1QkFBdUI7QUFDN0IsUUFBTSx3QkFBd0I7QUFFOUIsTUFBSSxTQUFTLGdCQUFnQixNQUFNLFNBQVM7QUFDMUMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFlBQVksU0FBUyxTQUFTLHFCQUFxQixLQUFLLElBQUksRUFBRTtBQUNwRSxNQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3BCLFdBQU87QUFBQSxFQUNUO0FBRUEsVUFBUSxTQUFTLG9CQUFvQixHQUFHO0FBQUEsSUFDdEMsS0FBSztBQUNILFVBQUksU0FBUyxXQUFXLHVCQUF1QixHQUFHO0FBQ2hELGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBLE1BQU07QUFBQSxNQUNSO0FBQUEsSUFDRixLQUFLLFFBQVE7QUFDWCxZQUFNLFlBQVksU0FBUyxTQUFTLHFCQUFxQixLQUFLLElBQUksRUFBRTtBQUNwRSxVQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3BCLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxTQUFTLFdBQVcsd0JBQXdCLEdBQUc7QUFDakQsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxRQUNBLE1BQU07QUFBQSxNQUNSO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFDRSxhQUFPO0FBQUEsRUFDWDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @packageDocumentation Canvas
3
+ * Utility functions for working with canvas files.
4
+ */
5
+ /**
6
+ * Represents a link within a file node in a canvas.
7
+ */
8
+ export interface CanvasFileLink extends CanvasLink {
9
+ /**
10
+ * The type of link.
11
+ */
12
+ type: 'file';
13
+ }
14
+ /**
15
+ * Represents a link in a canvas.
16
+ */
17
+ export interface CanvasLink {
18
+ /**
19
+ * The index of the node.
20
+ */
21
+ nodeIndex: number;
22
+ /**
23
+ * The type of link.
24
+ */
25
+ type: 'file' | 'text';
26
+ }
27
+ /**
28
+ * Represents a link within a text node in a canvas.
29
+ */
30
+ export interface CanvasTextLink extends CanvasLink {
31
+ /**
32
+ * The index of the link within the text node.
33
+ */
34
+ linkIndex: number;
35
+ /**
36
+ * The type of link.
37
+ */
38
+ type: 'text';
39
+ }
40
+ /**
41
+ * Checks if a canvas link is a canvas file link.
42
+ *
43
+ * @param link - The link to check.
44
+ * @returns True if the canvas link is a canvas file link, false otherwise.
45
+ */
46
+ export declare function isCanvasFileLink(link: CanvasLink): link is CanvasFileLink;
47
+ /**
48
+ * Checks if a canvas link is a canvas text link.
49
+ *
50
+ * @param link - The link to check.
51
+ * @returns True if the canvas link is a canvas text link, false otherwise.
52
+ */
53
+ export declare function isCanvasTextLink(link: CanvasLink): link is CanvasTextLink;
54
+ /**
55
+ * Parses a canvas link key.
56
+ *
57
+ * @param key - The key to parse.
58
+ * @returns The parsed canvas link, or null if the key is invalid.
59
+ */
60
+ export declare function parseCanvasLinkKey(key: string): CanvasLink | null;
@@ -32,103 +32,199 @@ __export(FileChange_exports, {
32
32
  module.exports = __toCommonJS(FileChange_exports);
33
33
  var import_Object = require('../Object.cjs');
34
34
  var import_ValueProvider = require('../ValueProvider.cjs');
35
+ var import_Canvas = require('./Canvas.cjs');
35
36
  var import_FileSystem = require('./FileSystem.cjs');
36
37
  var import_Frontmatter = require('./Frontmatter.cjs');
38
+ var import_MetadataCache = require('./MetadataCache.cjs');
39
+ var import_Reference = require('./Reference.cjs');
37
40
  var import_Vault = require('./Vault.cjs');
38
41
  async function applyFileChanges(app, pathOrFile, changesProvider, processOptions = {}) {
39
42
  await (0, import_Vault.process)(app, pathOrFile, async (content) => {
40
- let changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
41
- const frontmatter = (0, import_FileSystem.isCanvasFile)(app, pathOrFile) ? parseJsonSafe(content) : (0, import_Frontmatter.parseFrontmatter)(content);
42
- for (const change of changes) {
43
- if (isContentChange(change)) {
44
- const actualContent = content.slice(change.startIndex, change.endIndex);
45
- if (actualContent !== change.oldContent) {
46
- console.warn("Content mismatch", {
47
- actualContent,
48
- endIndex: change.endIndex,
49
- expectedContent: change.oldContent,
50
- path: (0, import_FileSystem.getPath)(app, pathOrFile),
51
- startIndex: change.startIndex
52
- });
53
- return null;
54
- }
55
- } else if (isFrontmatterChange(change)) {
56
- const actualContent = (0, import_Object.getNestedPropertyValue)(frontmatter, change.frontmatterKey);
57
- if (actualContent !== change.oldContent) {
58
- console.warn("Content mismatch", {
59
- actualContent,
60
- expectedContent: change.oldContent,
61
- frontmatterKey: change.frontmatterKey,
62
- path: (0, import_FileSystem.getPath)(app, pathOrFile)
63
- });
64
- return null;
65
- }
66
- }
43
+ if ((0, import_FileSystem.isCanvasFile)(app, pathOrFile)) {
44
+ return applyCanvasChanges(app, content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider);
67
45
  }
68
- changes.sort((a, b) => {
69
- if (isContentChange(a) && isContentChange(b)) {
70
- return a.startIndex - b.startIndex;
71
- }
72
- if (isFrontmatterChange(a) && isFrontmatterChange(b)) {
73
- return a.frontmatterKey.localeCompare(b.frontmatterKey);
46
+ return await applyContentChanges(content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider);
47
+ }, processOptions);
48
+ }
49
+ function isContentChange(fileChange) {
50
+ return fileChange.startIndex !== void 0;
51
+ }
52
+ function isFrontmatterChange(fileChange) {
53
+ return fileChange.frontmatterKey !== void 0;
54
+ }
55
+ async function applyCanvasChanges(app, content, path, changesProvider) {
56
+ const changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
57
+ const canvasData = parseJsonSafe(content);
58
+ const canvasTextChanges = /* @__PURE__ */ new Map();
59
+ for (const change of changes) {
60
+ if (!isFrontmatterChange(change)) {
61
+ console.warn("Only frontmatter changes are supported for canvas files", {
62
+ change,
63
+ path
64
+ });
65
+ return null;
66
+ }
67
+ const canvasLink = (0, import_Canvas.parseCanvasLinkKey)(change.frontmatterKey);
68
+ if (!canvasLink) {
69
+ console.warn("Invalid canvas link", {
70
+ key: change.frontmatterKey,
71
+ path
72
+ });
73
+ return null;
74
+ }
75
+ const node = canvasData.nodes[canvasLink.nodeIndex];
76
+ if (!node) {
77
+ console.warn("Node not found", {
78
+ key: change.frontmatterKey,
79
+ path
80
+ });
81
+ return null;
82
+ }
83
+ if ((0, import_Canvas.isCanvasFileLink)(canvasLink)) {
84
+ if (node.file !== change.oldContent) {
85
+ console.warn("Content mismatch", {
86
+ actualContent: node.file,
87
+ expectedContent: change.oldContent,
88
+ frontmatterKey: change.frontmatterKey,
89
+ path
90
+ });
91
+ return null;
74
92
  }
75
- return isContentChange(a) ? -1 : 1;
76
- });
77
- changes = changes.filter((change, index) => {
78
- if (change.oldContent === change.newContent) {
79
- return false;
93
+ node.file = change.newContent;
94
+ break;
95
+ } else if ((0, import_Canvas.isCanvasTextLink)(canvasLink)) {
96
+ let canvasTextChangesForNode = canvasTextChanges.get(canvasLink.linkIndex);
97
+ if (!canvasTextChangesForNode) {
98
+ canvasTextChangesForNode = /* @__PURE__ */ new Map();
99
+ canvasTextChanges.set(canvasLink.linkIndex, canvasTextChangesForNode);
80
100
  }
81
- if (index === 0) {
82
- return true;
101
+ canvasTextChangesForNode.set(canvasLink.linkIndex, change);
102
+ break;
103
+ }
104
+ }
105
+ for (const [nodeIndex, canvasTextChangesForNode] of canvasTextChanges.entries()) {
106
+ const node = canvasData.nodes[nodeIndex];
107
+ if (!node) {
108
+ console.warn("Node not found", {
109
+ nodeIndex,
110
+ path
111
+ });
112
+ return null;
113
+ }
114
+ if (typeof node.text !== "string") {
115
+ console.warn("Node text is not a string", {
116
+ nodeIndex,
117
+ path
118
+ });
119
+ return null;
120
+ }
121
+ const cache = await (0, import_MetadataCache.parseMetadata)(app, node.text);
122
+ const links = (0, import_MetadataCache.getAllLinks)(cache);
123
+ const contentChanges = [];
124
+ for (let linkIndex = 0; linkIndex < links.length; linkIndex++) {
125
+ const link = links[linkIndex];
126
+ if (!link) {
127
+ console.warn("Missing link", {
128
+ linkIndex,
129
+ nodeIndex,
130
+ nodeText: node.text,
131
+ path
132
+ });
133
+ return null;
83
134
  }
84
- return !(0, import_Object.deepEqual)(change, changes[index - 1]);
85
- });
86
- for (let i = 1; i < changes.length; i++) {
87
- const change = changes[i];
88
- if (!change) {
89
- continue;
135
+ const canvasTextChange = canvasTextChangesForNode.get(linkIndex);
136
+ if (canvasTextChange) {
137
+ const contentChange = (0, import_Reference.referenceToFileChange)(link, canvasTextChange.newContent);
138
+ contentChange.oldContent = canvasTextChange.oldContent;
139
+ contentChanges.push(contentChange);
90
140
  }
91
- const previousChange = changes[i - 1];
92
- if (!previousChange) {
93
- continue;
141
+ }
142
+ node.text = await applyContentChanges(node.text, `${path}.FAKE_TEXT.node${nodeIndex.toString()}.md`, contentChanges);
143
+ }
144
+ return JSON.stringify(canvasData, null, " ");
145
+ }
146
+ async function applyContentChanges(content, path, changesProvider) {
147
+ let changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
148
+ const frontmatter = (0, import_Frontmatter.parseFrontmatter)(content);
149
+ for (const change of changes) {
150
+ if (isContentChange(change)) {
151
+ const actualContent = content.slice(change.startIndex, change.endIndex);
152
+ if (actualContent !== change.oldContent) {
153
+ console.warn("Content mismatch", {
154
+ actualContent,
155
+ endIndex: change.endIndex,
156
+ expectedContent: change.oldContent,
157
+ path,
158
+ startIndex: change.startIndex
159
+ });
160
+ return null;
94
161
  }
95
- if (isContentChange(previousChange) && isContentChange(change) && previousChange.endIndex && change.startIndex && previousChange.endIndex > change.startIndex) {
96
- console.warn("Overlapping changes", {
97
- change,
98
- previousChange
162
+ } else if (isFrontmatterChange(change)) {
163
+ const actualContent = (0, import_Object.getNestedPropertyValue)(frontmatter, change.frontmatterKey);
164
+ if (actualContent !== change.oldContent) {
165
+ console.warn("Content mismatch", {
166
+ actualContent,
167
+ expectedContent: change.oldContent,
168
+ frontmatterKey: change.frontmatterKey,
169
+ path
99
170
  });
100
171
  return null;
101
172
  }
102
173
  }
103
- let newContent = "";
104
- let lastIndex = 0;
105
- let frontmatterChanged = false;
106
- for (const change of changes) {
107
- if (isContentChange(change)) {
108
- newContent += content.slice(lastIndex, change.startIndex);
109
- newContent += change.newContent;
110
- lastIndex = change.endIndex;
111
- } else if (isFrontmatterChange(change)) {
112
- (0, import_Object.setNestedPropertyValue)(frontmatter, change.frontmatterKey, change.newContent);
113
- frontmatterChanged = true;
114
- }
174
+ }
175
+ changes.sort((a, b) => {
176
+ if (isContentChange(a) && isContentChange(b)) {
177
+ return a.startIndex - b.startIndex;
115
178
  }
116
- if ((0, import_FileSystem.isCanvasFile)(app, pathOrFile)) {
117
- newContent = JSON.stringify(frontmatter, null, " ");
118
- } else {
119
- newContent += content.slice(lastIndex);
120
- if (frontmatterChanged) {
121
- newContent = (0, import_Frontmatter.setFrontmatter)(newContent, frontmatter);
122
- }
179
+ if (isFrontmatterChange(a) && isFrontmatterChange(b)) {
180
+ return a.frontmatterKey.localeCompare(b.frontmatterKey);
123
181
  }
124
- return newContent;
125
- }, processOptions);
126
- }
127
- function isContentChange(fileChange) {
128
- return fileChange.startIndex !== void 0;
129
- }
130
- function isFrontmatterChange(fileChange) {
131
- return fileChange.frontmatterKey !== void 0;
182
+ return isContentChange(a) ? -1 : 1;
183
+ });
184
+ changes = changes.filter((change, index) => {
185
+ if (change.oldContent === change.newContent) {
186
+ return false;
187
+ }
188
+ if (index === 0) {
189
+ return true;
190
+ }
191
+ return !(0, import_Object.deepEqual)(change, changes[index - 1]);
192
+ });
193
+ for (let i = 1; i < changes.length; i++) {
194
+ const change = changes[i];
195
+ if (!change) {
196
+ continue;
197
+ }
198
+ const previousChange = changes[i - 1];
199
+ if (!previousChange) {
200
+ continue;
201
+ }
202
+ if (isContentChange(previousChange) && isContentChange(change) && previousChange.endIndex && change.startIndex && previousChange.endIndex > change.startIndex) {
203
+ console.warn("Overlapping changes", {
204
+ change,
205
+ previousChange
206
+ });
207
+ return null;
208
+ }
209
+ }
210
+ let newContent = "";
211
+ let lastIndex = 0;
212
+ let frontmatterChanged = false;
213
+ for (const change of changes) {
214
+ if (isContentChange(change)) {
215
+ newContent += content.slice(lastIndex, change.startIndex);
216
+ newContent += change.newContent;
217
+ lastIndex = change.endIndex;
218
+ } else if (isFrontmatterChange(change)) {
219
+ (0, import_Object.setNestedPropertyValue)(frontmatter, change.frontmatterKey, change.newContent);
220
+ frontmatterChanged = true;
221
+ }
222
+ }
223
+ newContent += content.slice(lastIndex);
224
+ if (frontmatterChanged) {
225
+ newContent = (0, import_Frontmatter.setFrontmatter)(newContent, frontmatter);
226
+ }
227
+ return newContent;
132
228
  }
133
229
  function parseJsonSafe(content) {
134
230
  let parsed;
@@ -148,4 +244,4 @@ function parseJsonSafe(content) {
148
244
  isContentChange,
149
245
  isFrontmatterChange
150
246
  });
151
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb250ZW50IGJvZHkgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250ZW50Q2hhbmdlIGV4dGVuZHMgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgZW5kIGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIGVuZEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBzdGFydEluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZpbGUgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cbiAgICovXG4gIG9sZENvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udG1hdHRlckNoYW5nZSBleHRlbmRzIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGtleSBpbiB0aGUgZnJvbnRtYXR0ZXIgdG8gdXNlIGZvciB0aGUgbGluay5cbiAgICovXG4gIGZyb250bWF0dGVyS2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIHNlcmllcyBvZiBmaWxlIGNoYW5nZXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlIG9yIHBhdGggd2l0aGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZXJlIHRoZSBmaWxlIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHdoaWNoIHRoZSBjaGFuZ2VzIHNob3VsZCBiZSBhcHBsaWVkLlxuICogQHBhcmFtIGNoYW5nZXNQcm92aWRlciAtIEEgcHJvdmlkZXIgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIGZpbGUgY2hhbmdlcyB0byBhcHBseS5cbiAqIEBwYXJhbSBwcm9jZXNzT3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHByb2Nlc3NpbmcvcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlGaWxlQ2hhbmdlcyhcbiAgYXBwOiBBcHAsXG4gIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsXG4gIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10+LFxuICBwcm9jZXNzT3B0aW9uczogUHJvY2Vzc09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBwYXRoT3JGaWxlLCBhc3luYyAoY29udGVudCkgPT4ge1xuICAgIGxldCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlcik7XG4gICAgY29uc3QgZnJvbnRtYXR0ZXIgPSBpc0NhbnZhc0ZpbGUoYXBwLCBwYXRoT3JGaWxlKSA/IHBhcnNlSnNvblNhZmUoY29udGVudCkgOiBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuXG4gICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKGNoYW5nZS5zdGFydEluZGV4LCBjaGFuZ2UuZW5kSW5kZXgpO1xuICAgICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGNoYW5nZS5lbmRJbmRleCxcbiAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgICBwYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksXG4gICAgICAgICAgICBzdGFydEluZGV4OiBjaGFuZ2Uuc3RhcnRJbmRleFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuICAgICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgICBwYXRoOiBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGEpICYmIGlzQ29udGVudENoYW5nZShiKSkge1xuICAgICAgICByZXR1cm4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlKGIpKSB7XG4gICAgICAgIHJldHVybiBhLmZyb250bWF0dGVyS2V5LmxvY2FsZUNvbXBhcmUoYi5mcm9udG1hdHRlcktleSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc0NvbnRlbnRDaGFuZ2UoYSkgPyAtMSA6IDE7XG4gICAgfSk7XG5cbiAgICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgICBjaGFuZ2VzID0gY2hhbmdlcy5maWx0ZXIoKGNoYW5nZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChjaGFuZ2Uub2xkQ29udGVudCA9PT0gY2hhbmdlLm5ld0NvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFkZWVwRXF1YWwoY2hhbmdlLCBjaGFuZ2VzW2luZGV4IC0gMV0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2aW91c0NoYW5nZSA9IGNoYW5nZXNbaSAtIDFdO1xuICAgICAgaWYgKCFwcmV2aW91c0NoYW5nZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBpc0NvbnRlbnRDaGFuZ2UocHJldmlvdXNDaGFuZ2UpICYmIGlzQ29udGVudENoYW5nZShjaGFuZ2UpICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ICYmIGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAgICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ID4gY2hhbmdlLnN0YXJ0SW5kZXhcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXBwaW5nIGNoYW5nZXMnLCB7XG4gICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgIHByZXZpb3VzQ2hhbmdlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgIGxldCBmcm9udG1hdHRlckNoYW5nZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICAgIG5ld0NvbnRlbnQgKz0gY2hhbmdlLm5ld0NvbnRlbnQ7XG4gICAgICAgIGxhc3RJbmRleCA9IGNoYW5nZS5lbmRJbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICAgIHNldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGNoYW5nZS5mcm9udG1hdHRlcktleSwgY2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBmcm9udG1hdHRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBwYXRoT3JGaWxlKSkge1xuICAgICAgbmV3Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KGZyb250bWF0dGVyLCBudWxsLCAnXFx0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICAgICAgaWYgKGZyb250bWF0dGVyQ2hhbmdlZCkge1xuICAgICAgICBuZXdDb250ZW50ID0gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgfSwgcHJvY2Vzc09wdGlvbnMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxDb250ZW50Q2hhbmdlPikuc3RhcnRJbmRleCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlIHtcbiAgcmV0dXJuIChmaWxlQ2hhbmdlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJDaGFuZ2U+KS5mcm9udG1hdHRlcktleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpzb25TYWZlKGNvbnRlbnQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLG9CQUlPO0FBQ1AsMkJBQTZCO0FBQzdCLHdCQUdPO0FBQ1AseUJBR087QUFDUCxtQkFBd0I7QUFvRHhCLGVBQXNCLGlCQUNwQixLQUNBLFlBQ0EsaUJBQ0EsaUJBQWlDLENBQUMsR0FDbkI7QUFDZixZQUFNLHNCQUFRLEtBQUssWUFBWSxPQUFPLFlBQVk7QUFDaEQsUUFBSSxVQUFVLFVBQU0sbUNBQWEsZUFBZTtBQUNoRCxVQUFNLGtCQUFjLGdDQUFhLEtBQUssVUFBVSxJQUFJLGNBQWMsT0FBTyxRQUFJLHFDQUFpQixPQUFPO0FBRXJHLGVBQVcsVUFBVSxTQUFTO0FBQzVCLFVBQUksZ0JBQWdCLE1BQU0sR0FBRztBQUMzQixjQUFNLGdCQUFnQixRQUFRLE1BQU0sT0FBTyxZQUFZLE9BQU8sUUFBUTtBQUN0RSxZQUFJLGtCQUFrQixPQUFPLFlBQVk7QUFDdkMsa0JBQVEsS0FBSyxvQkFBb0I7QUFBQSxZQUMvQjtBQUFBLFlBQ0EsVUFBVSxPQUFPO0FBQUEsWUFDakIsaUJBQWlCLE9BQU87QUFBQSxZQUN4QixVQUFNLDJCQUFRLEtBQUssVUFB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
247
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vQ2FudmFzLmQudHMnO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBpc0NhbnZhc0ZpbGVMaW5rLFxuICBpc0NhbnZhc1RleHRMaW5rLFxuICBwYXJzZUNhbnZhc0xpbmtLZXlcbn0gZnJvbSAnLi9DYW52YXMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyLFxuICBzZXRGcm9udG1hdHRlclxufSBmcm9tICcuL0Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFsbExpbmtzLFxuICBwYXJzZU1ldGFkYXRhXG59IGZyb20gJy4vTWV0YWRhdGFDYWNoZS50cyc7XG5pbXBvcnQgeyByZWZlcmVuY2VUb0ZpbGVDaGFuZ2UgfSBmcm9tICcuL1JlZmVyZW5jZS50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbnRlbnQgYm9keSBjaGFuZ2UgaW4gdGhlIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRDaGFuZ2UgZXh0ZW5kcyBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBlbmQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgZW5kSW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIHN0YXJ0SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmlsZSBjaGFuZ2UgaW4gdGhlIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIG5ldyBjb250ZW50IHRvIHJlcGxhY2UgdGhlIG9sZCBjb250ZW50LlxuICAgKi9cbiAgbmV3Q29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIGNvbnRlbnQgdGhhdCB3aWxsIGJlIHJlcGxhY2VkLlxuICAgKi9cbiAgb2xkQ29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmcm9udG1hdHRlciBjaGFuZ2UgaW4gdGhlIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyQ2hhbmdlIGV4dGVuZHMgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUga2V5IGluIHRoZSBmcm9udG1hdHRlciB0byB1c2UgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgZnJvbnRtYXR0ZXJLZXk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlcmUgdGhlIGZpbGUgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHByb2Nlc3NPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcHJvY2Vzc2luZy9yZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgY2hhbmdlcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUZpbGVDaGFuZ2VzKFxuICBhcHA6IEFwcCxcbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSxcbiAgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXT4sXG4gIHByb2Nlc3NPcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcHJvY2VzcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jIChjb250ZW50KSA9PiB7XG4gICAgaWYgKGlzQ2FudmFzRmlsZShhcHAsIHBhdGhPckZpbGUpKSB7XG4gICAgICByZXR1cm4gYXBwbHlDYW52YXNDaGFuZ2VzKGFwcCwgY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKGNvbnRlbnQsIGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSwgY2hhbmdlc1Byb3ZpZGVyKTtcbiAgfSwgcHJvY2Vzc09wdGlvbnMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxDb250ZW50Q2hhbmdlPikuc3RhcnRJbmRleCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlIHtcbiAgcmV0dXJuIChmaWxlQ2hhbmdlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJDaGFuZ2U+KS5mcm9udG1hdHRlcktleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNhbnZhc0NoYW5nZXMoYXBwOiBBcHAsIGNvbnRlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPik6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlcik7XG4gIGNvbnN0IGNhbnZhc0RhdGEgPSBwYXJzZUpzb25TYWZlKGNvbnRlbnQpIGFzIENhbnZhc0RhdGE7XG5cbiAgY29uc3QgY2FudmFzVGV4dENoYW5nZXMgPSBuZXcgTWFwPG51bWJlciwgTWFwPG51bWJlciwgRnJvbnRtYXR0ZXJDaGFuZ2U+PigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoIWlzRnJvbnRtYXR0ZXJDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdPbmx5IGZyb250bWF0dGVyIGNoYW5nZXMgYXJlIHN1cHBvcnRlZCBmb3IgY2FudmFzIGZpbGVzJywge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzTGluayA9IHBhcnNlQ2FudmFzTGlua0tleShjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuXG4gICAgaWYgKCFjYW52YXNMaW5rKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY2FudmFzIGxpbmsnLCB7XG4gICAgICAgIGtleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW2NhbnZhc0xpbmsubm9kZUluZGV4XTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSBub3QgZm91bmQnLCB7XG4gICAgICAgIGtleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChpc0NhbnZhc0ZpbGVMaW5rKGNhbnZhc0xpbmspKSB7XG4gICAgICBpZiAobm9kZS5maWxlICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudDogbm9kZS5maWxlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUuZmlsZSA9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc1RleHRMaW5rKGNhbnZhc0xpbmspKSB7XG4gICAgICBsZXQgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlID0gY2FudmFzVGV4dENoYW5nZXMuZ2V0KGNhbnZhc0xpbmsubGlua0luZGV4KTtcbiAgICAgIGlmICghY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlKSB7XG4gICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IG5ldyBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4oKTtcbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXMuc2V0KGNhbnZhc0xpbmsubGlua0luZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpO1xuICAgICAgfVxuXG4gICAgICBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUuc2V0KGNhbnZhc0xpbmsubGlua0luZGV4LCBjaGFuZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbbm9kZUluZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGVdIG9mIGNhbnZhc1RleHRDaGFuZ2VzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgbm90IGZvdW5kJywge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5vZGUudGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSB0ZXh0IGlzIG5vdCBhIHN0cmluZycsIHtcbiAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCBwYXJzZU1ldGFkYXRhKGFwcCwgbm9kZS50ZXh0KTtcbiAgICBjb25zdCBsaW5rcyA9IGdldEFsbExpbmtzKGNhY2hlKTtcbiAgICBjb25zdCBjb250ZW50Q2hhbmdlczogRmlsZUNoYW5nZVtdID0gW107XG5cbiAgICBmb3IgKGxldCBsaW5rSW5kZXggPSAwOyBsaW5rSW5kZXggPCBsaW5rcy5sZW5ndGg7IGxpbmtJbmRleCsrKSB7XG4gICAgICBjb25zdCBsaW5rID0gbGlua3NbbGlua0luZGV4XTtcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgbGluaycsIHtcbiAgICAgICAgICBsaW5rSW5kZXgsXG4gICAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICAgIG5vZGVUZXh0OiBub2RlLnRleHQsXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FudmFzVGV4dENoYW5nZSA9IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5nZXQobGlua0luZGV4KTtcbiAgICAgIGlmIChjYW52YXNUZXh0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2UgPSByZWZlcmVuY2VUb0ZpbGVDaGFuZ2UobGluaywgY2FudmFzVGV4dENoYW5nZS5uZXdDb250ZW50KTtcbiAgICAgICAgY29udGVudENoYW5nZS5vbGRDb250ZW50ID0gY2FudmFzVGV4dENoYW5nZS5vbGRDb250ZW50O1xuICAgICAgICBjb250ZW50Q2hhbmdlcy5wdXNoKGNvbnRlbnRDaGFuZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUudGV4dCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMobm9kZS50ZXh0LCBgJHtwYXRofS5GQUtFX1RFWFQubm9kZSR7bm9kZUluZGV4LnRvU3RyaW5nKCl9Lm1kYCwgY29udGVudENoYW5nZXMpO1xuICB9XG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNhbnZhc0RhdGEsIG51bGwsICdcXHQnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlDb250ZW50Q2hhbmdlcyhjb250ZW50OiBzdHJpbmcsIHBhdGg6IHN0cmluZywgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXT4pOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgbGV0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcbiAgY29uc3QgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKGNoYW5nZS5zdGFydEluZGV4LCBjaGFuZ2UuZW5kSW5kZXgpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGVuZEluZGV4OiBjaGFuZ2UuZW5kSW5kZXgsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHN0YXJ0SW5kZXg6IGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLmZyb250bWF0dGVyS2V5KTtcbiAgICAgIGlmIChhY3R1YWxDb250ZW50ICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGEpICYmIGlzQ29udGVudENoYW5nZShiKSkge1xuICAgICAgcmV0dXJuIGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleDtcbiAgICB9XG5cbiAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5mcm9udG1hdHRlcktleS5sb2NhbGVDb21wYXJlKGIuZnJvbnRtYXR0ZXJLZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NvbnRlbnRDaGFuZ2UoYSkgPyAtMSA6IDE7XG4gIH0pO1xuXG4gIC8vIEJVRzogaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2J1Zy1kdXBsaWNhdGVkLWxpbmtzLWluLW1ldGFkYXRhY2FjaGUtaW5zaWRlLWZvb3Rub3Rlcy84NTU1MVxuICBjaGFuZ2VzID0gY2hhbmdlcy5maWx0ZXIoKGNoYW5nZSwgaW5kZXgpID0+IHtcbiAgICBpZiAoY2hhbmdlLm9sZENvbnRlbnQgPT09IGNoYW5nZS5uZXdDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhZGVlcEVxdWFsKGNoYW5nZSwgY2hhbmdlc1tpbmRleCAtIDFdKTtcbiAgfSk7XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhbmdlID0gY2hhbmdlc1tpXTtcbiAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQ2hhbmdlID0gY2hhbmdlc1tpIC0gMV07XG4gICAgaWYgKCFwcmV2aW91c0NoYW5nZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNDb250ZW50Q2hhbmdlKHByZXZpb3VzQ2hhbmdlKSAmJiBpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSAmJiBwcmV2aW91c0NoYW5nZS5lbmRJbmRleCAmJiBjaGFuZ2Uuc3RhcnRJbmRleFxuICAgICAgJiYgcHJldmlvdXNDaGFuZ2UuZW5kSW5kZXggPiBjaGFuZ2Uuc3RhcnRJbmRleFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKCdPdmVybGFwcGluZyBjaGFuZ2VzJywge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHByZXZpb3VzQ2hhbmdlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXdDb250ZW50ID0gJyc7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBsZXQgZnJvbnRtYXR0ZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCwgY2hhbmdlLnN0YXJ0SW5kZXgpO1xuICAgICAgbmV3Q29udGVudCArPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgIGxhc3RJbmRleCA9IGNoYW5nZS5lbmRJbmRleDtcbiAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLmZyb250bWF0dGVyS2V5LCBjaGFuZ2UubmV3Q29udGVudCk7XG4gICAgICBmcm9udG1hdHRlckNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICBpZiAoZnJvbnRtYXR0ZXJDaGFuZ2VkKSB7XG4gICAgbmV3Q29udGVudCA9IHNldEZyb250bWF0dGVyKG5ld0NvbnRlbnQsIGZyb250bWF0dGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdDb250ZW50O1xufVxuXG5mdW5jdGlvbiBwYXJzZUpzb25TYWZlKGNvbnRlbnQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLG9CQUlPO0FBQ1AsMkJBQTZCO0FBQzdCLG9CQUlPO0FBQ1Asd0JBR087QUFDUCx5QkFHTztBQUNQLDJCQUdPO0FBQ1AsdUJBQXNDO0FBQ3RDLG1CQUF3QjtBQW9EeEIsZUFBc0IsaUJBQ3BCLEtBQ0EsWUFDQSxpQkFDQSxpQkFBaUMsQ0FBQyxHQUNuQjtBQUNmLFlBQU0sc0JBQVEsS0FBSyxZQUFZLE9BQU8sWUFBWTtBQUNoRCxZQUFJLGdDQUFhLEtBQUssVUFBVSxHQUFHO0FBQ2pDLGFBQU8sbUJBQW1CLEtBQUssYUFBUywyQkFBUSxLQUFLLFVBQVUsR0FBRyxlQUFlO0FBQUEsSUFDbkY7QUFFQSxXQUFPLE1BQU0sb0JBQW9CLGFBQVMsMkJBQVEsS0FBSyxVQUFVLEdBQUcsZUFBZTtBQUFBLEVBQ3JGLEdBQUcsY0FBYztBQUNuQjtBQVFPLFNBQVMsZ0JBQWdCLFlBQXFEO0FBQ25GLFNBQVEsV0FBc0MsZUFBZTtBQUMvRDtBQVFPLFNBQVMsb0JBQW9CLFlBQXlEO0FBQzNGLFNBQVEsV0FBMEMsbUJBQW1CO0FBQ3ZFO0FBRUEsZUFBZSxtQkFBbUIsS0FBVSxTQUFpQixNQUFjLGlCQUFzRTtBQUMvSSxRQUFNLFVBQVUsVUFBTSxtQ0FBYSxlQUFlO0FBQ2xELFFBQU0sYUFBYSxjQUFjLE9BQU87QUFFeEMsUUFBTSxvQkFBb0Isb0JBQUksSUFB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