obsidian-dev-utils 19.7.1-beta.1 → 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,11 @@
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
+
3
9
  ## 19.7.1-beta.1
4
10
 
5
11
  - Handle canvas text changes
@@ -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.1-beta.1";
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,6 +32,7 @@ __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');
37
38
  var import_MetadataCache = require('./MetadataCache.cjs');
@@ -63,77 +64,42 @@ async function applyCanvasChanges(app, content, path, changesProvider) {
63
64
  });
64
65
  return null;
65
66
  }
66
- const keyParts = change.frontmatterKey.split(".");
67
- const NODES_PART_INDEX = 0;
68
- const NODE_INDEX_PART_INDEX = 1;
69
- const NODE_TYPE_PART_INDEX = 2;
70
- const LINK_INDEX_PART_INDEX = 3;
71
- if (keyParts[NODES_PART_INDEX] !== "nodes") {
72
- console.warn("Only nodes changes are supported for canvas files", {
73
- frontmatterKey: change.frontmatterKey,
67
+ const canvasLink = (0, import_Canvas.parseCanvasLinkKey)(change.frontmatterKey);
68
+ if (!canvasLink) {
69
+ console.warn("Invalid canvas link", {
70
+ key: change.frontmatterKey,
74
71
  path
75
72
  });
76
73
  return null;
77
74
  }
78
- const nodeIndex = parseInt(keyParts[NODE_INDEX_PART_INDEX] ?? "", 10);
79
- if (isNaN(nodeIndex)) {
80
- console.warn("Invalid node index", {
81
- frontmatterKey: change.frontmatterKey,
82
- path
83
- });
84
- return null;
85
- }
86
- const node = canvasData.nodes[nodeIndex];
75
+ const node = canvasData.nodes[canvasLink.nodeIndex];
87
76
  if (!node) {
88
77
  console.warn("Node not found", {
89
- frontmatterKey: change.frontmatterKey,
78
+ key: change.frontmatterKey,
90
79
  path
91
80
  });
92
81
  return null;
93
82
  }
94
- switch (keyParts[NODE_TYPE_PART_INDEX]) {
95
- case "file":
96
- if (node.file !== change.oldContent) {
97
- console.warn("Content mismatch", {
98
- actualContent: node.file,
99
- expectedContent: change.oldContent,
100
- frontmatterKey: change.frontmatterKey,
101
- path
102
- });
103
- return null;
104
- }
105
- node.file = change.newContent;
106
- break;
107
- case "text": {
108
- if (node.text === void 0) {
109
- console.warn("Missing text node", {
110
- frontmatterKey: change.frontmatterKey,
111
- path
112
- });
113
- return null;
114
- }
115
- const linkIndex = parseInt(keyParts[LINK_INDEX_PART_INDEX] ?? "", 10);
116
- if (isNaN(linkIndex)) {
117
- console.warn("Invalid link index", {
118
- frontmatterKey: change.frontmatterKey,
119
- path
120
- });
121
- return null;
122
- }
123
- let canvasTextChangesForNode = canvasTextChanges.get(linkIndex);
124
- if (!canvasTextChangesForNode) {
125
- canvasTextChangesForNode = /* @__PURE__ */ new Map();
126
- canvasTextChanges.set(linkIndex, canvasTextChangesForNode);
127
- }
128
- canvasTextChangesForNode.set(linkIndex, change);
129
- break;
130
- }
131
- default:
132
- console.warn("Unsupported node type", {
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,
133
88
  frontmatterKey: change.frontmatterKey,
134
89
  path
135
90
  });
136
- break;
91
+ return null;
92
+ }
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);
100
+ }
101
+ canvasTextChangesForNode.set(canvasLink.linkIndex, change);
102
+ break;
137
103
  }
138
104
  }
139
105
  for (const [nodeIndex, canvasTextChangesForNode] of canvasTextChanges.entries()) {
@@ -278,4 +244,4 @@ function parseJsonSafe(content) {
278
244
  isContentChange,
279
245
  isFrontmatterChange
280
246
  });
281
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vQ2FudmFzLmQudHMnO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGVcbn0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsTGlua3MsXG4gIHBhcnNlTWV0YWRhdGFcbn0gZnJvbSAnLi9NZXRhZGF0YUNhY2hlLnRzJztcbmltcG9ydCB7IHJlZmVyZW5jZVRvRmlsZUNoYW5nZSB9IGZyb20gJy4vUmVmZXJlbmNlLnRzJztcbmltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICcuL1ZhdWx0LnRzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29udGVudCBib2R5IGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudENoYW5nZSBleHRlbmRzIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGVuZCBpbmRleCBvZiB0aGUgY2hhbmdlIGluIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqL1xuICBlbmRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgc3RhcnRJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgbmV3IGNvbnRlbnQgdG8gcmVwbGFjZSB0aGUgb2xkIGNvbnRlbnQuXG4gICAqL1xuICBuZXdDb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgY29udGVudCB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAqL1xuICBvbGRDb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZyb250bWF0dGVyIGNoYW5nZSBpbiB0aGUgVmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRtYXR0ZXJDaGFuZ2UgZXh0ZW5kcyBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgaW4gdGhlIGZyb250bWF0dGVyIHRvIHVzZSBmb3IgdGhlIGxpbmsuXG4gICAqL1xuICBmcm9udG1hdHRlcktleTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgZmlsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBwYXRoIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aGVyZSB0aGUgZmlsZSBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBjaGFuZ2VzUHJvdmlkZXIgLSBBIHByb3ZpZGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBmaWxlIGNoYW5nZXMgdG8gYXBwbHkuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciBwcm9jZXNzaW5nL3JldHJ5aW5nIHRoZSBvcGVyYXRpb24uXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RmlsZUNoYW5nZXMoXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKGNvbnRlbnQpID0+IHtcbiAgICBpZiAoaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSkpIHtcbiAgICAgIHJldHVybiBhcHBseUNhbnZhc0NoYW5nZXMoYXBwLCBjb250ZW50LCBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSksIGNoYW5nZXNQcm92aWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjb250ZW50IGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRlbnRDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgQ29udGVudENoYW5nZSB7XG4gIHJldHVybiAoZmlsZUNoYW5nZSBhcyBQYXJ0aWFsPENvbnRlbnRDaGFuZ2U+KS5zdGFydEluZGV4ICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxGcm9udG1hdHRlckNoYW5nZT4pLmZyb250bWF0dGVyS2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5Q2FudmFzQ2hhbmdlcyhhcHA6IEFwcCwgY29udGVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10+KTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcbiAgY29uc3QgY2FudmFzRGF0YSA9IHBhcnNlSnNvblNhZmUoY29udGVudCkgYXMgQ2FudmFzRGF0YTtcblxuICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlcyA9IG5ldyBNYXA8bnVtYmVyLCBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4+KCk7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmICghaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ09ubHkgZnJvbnRtYXR0ZXIgY2hhbmdlcyBhcmUgc3VwcG9ydGVkIGZvciBjYW52YXMgZmlsZXMnLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlQYXJ0cyA9IGNoYW5nZS5mcm9udG1hdHRlcktleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IE5PREVTX1BBUlRfSU5ERVggPSAwO1xuICAgIGNvbnN0IE5PREVfSU5ERVhfUEFSVF9JTkRFWCA9IDE7XG4gICAgY29uc3QgTk9ERV9UWVBFX1BBUlRfSU5ERVggPSAyO1xuICAgIGNvbnN0IExJTktfSU5ERVhfUEFSVF9JTkRFWCA9IDM7XG5cbiAgICBpZiAoa2V5UGFydHNbTk9ERVNfUEFSVF9JTkRFWF0gIT09ICdub2RlcycpIHtcbiAgICAgIGNvbnNvbGUud2FybignT25seSBub2RlcyBjaGFuZ2VzIGFyZSBzdXBwb3J0ZWQgZm9yIGNhbnZhcyBmaWxlcycsIHtcbiAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlSW5kZXggPSBwYXJzZUludChrZXlQYXJ0c1tOT0RFX0lOREVYX1BBUlRfSU5ERVhdID8/ICcnLCAxMCk7XG4gICAgaWYgKGlzTmFOKG5vZGVJbmRleCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBub2RlIGluZGV4Jywge1xuICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgbm90IGZvdW5kJywge1xuICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5UGFydHNbTk9ERV9UWVBFX1BBUlRfSU5ERVhdKSB7XG4gICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgaWYgKG5vZGUuZmlsZSAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgICBhY3R1YWxDb250ZW50OiBub2RlLmZpbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmZpbGUgPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICBpZiAobm9kZS50ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgdGV4dCBub2RlJywge1xuICAgICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlua0luZGV4ID0gcGFyc2VJbnQoa2V5UGFydHNbTElOS19JTkRFWF9QQVJUX0lOREVYXSA/PyAnJywgMTApO1xuICAgICAgICBpZiAoaXNOYU4obGlua0luZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBsaW5rIGluZGV4Jywge1xuICAgICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IGNhbnZhc1RleHRDaGFuZ2VzLmdldChsaW5rSW5kZXgpO1xuICAgICAgICBpZiAoIWNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSkge1xuICAgICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IG5ldyBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4oKTtcbiAgICAgICAgICBjYW52YXNUZXh0Q2hhbmdlcy5zZXQobGlua0luZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLnNldChsaW5rSW5kZXgsIGNoYW5nZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCBub2RlIHR5cGUnLCB7XG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtub2RlSW5kZXgsIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZV0gb2YgY2FudmFzVGV4dENoYW5nZXMuZW50cmllcygpKSB7XG4gICAgY29uc3Qgbm9kZSA9IGNhbnZhc0RhdGEubm9kZXNbbm9kZUluZGV4XTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSBub3QgZm91bmQnLCB7XG4gICAgICAgIG5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygbm9kZS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRleHQgaXMgbm90IGEgc3RyaW5nJywge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBub2RlLnRleHQpO1xuICAgIGNvbnN0IGxpbmtzID0gZ2V0QWxsTGlua3MoY2FjaGUpO1xuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VzOiBGaWxlQ2hhbmdlW10gPSBbXTtcblxuICAgIGZvciAobGV0IGxpbmtJbmRleCA9IDA7IGxpbmtJbmRleCA8IGxpbmtzLmxlbmd0aDsgbGlua0luZGV4KyspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBsaW5rc1tsaW5rSW5kZXhdO1xuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTWlzc2luZyBsaW5rJywge1xuICAgICAgICAgIGxpbmtJbmRleCxcbiAgICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgICAgbm9kZVRleHQ6IG5vZGUudGV4dCxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlID0gY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLmdldChsaW5rSW5kZXgpO1xuICAgICAgaWYgKGNhbnZhc1RleHRDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgY29udGVudENoYW5nZSA9IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShsaW5rLCBjYW52YXNUZXh0Q2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBjb250ZW50Q2hhbmdlLm9sZENvbnRlbnQgPSBjYW52YXNUZXh0Q2hhbmdlLm9sZENvbnRlbnQ7XG4gICAgICAgIGNvbnRlbnRDaGFuZ2VzLnB1c2goY29udGVudENoYW5nZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS50ZXh0ID0gYXdhaXQgYXBwbHlDb250ZW50Q2hhbmdlcyhub2RlLnRleHQsIGAke3BhdGh9LkZBS0VfVEVYVC5ub2RlJHtub2RlSW5kZXgudG9TdHJpbmcoKX0ubWRgLCBjb250ZW50Q2hhbmdlcyk7XG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2FudmFzRGF0YSwgbnVsbCwgJ1xcdCcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNvbnRlbnRDaGFuZ2VzKGNvbnRlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPik6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIpO1xuICBjb25zdCBmcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXIoY29udGVudCk7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2UoY2hhbmdlLnN0YXJ0SW5kZXgsIGNoYW5nZS5lbmRJbmRleCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZW5kSW5kZXg6IGNoYW5nZS5lbmRJbmRleCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRJbmRleDogY2hhbmdlLnN0YXJ0SW5kZXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5mcm9udG1hdHRlcktleSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoYSkgJiYgaXNDb250ZW50Q2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGEpICYmIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoYikpIHtcbiAgICAgIHJldHVybiBhLmZyb250bWF0dGVyS2V5LmxvY2FsZUNvbXBhcmUoYi5mcm9udG1hdHRlcktleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQ29udGVudENoYW5nZShhKSA/IC0xIDogMTtcbiAgfSk7XG5cbiAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gIGNoYW5nZXMgPSBjaGFuZ2VzLmZpbHRlcigoY2hhbmdlLCBpbmRleCkgPT4ge1xuICAgIGlmIChjaGFuZ2Uub2xkQ29udGVudCA9PT0gY2hhbmdlLm5ld0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICFkZWVwRXF1YWwoY2hhbmdlLCBjaGFuZ2VzW2luZGV4IC0gMV0pO1xuICB9KTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgIGlmICghY2hhbmdlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcHJldmlvdXNDaGFuZ2UgPSBjaGFuZ2VzW2kgLSAxXTtcbiAgICBpZiAoIXByZXZpb3VzQ2hhbmdlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc0NvbnRlbnRDaGFuZ2UocHJldmlvdXNDaGFuZ2UpICYmIGlzQ29udGVudENoYW5nZShjaGFuZ2UpICYmIHByZXZpb3VzQ2hhbmdlLmVuZEluZGV4ICYmIGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAmJiBwcmV2aW91c0NoYW5nZS5lbmRJbmRleCA+IGNoYW5nZS5zdGFydEluZGV4XG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ092ZXJsYXBwaW5nIGNoYW5nZXMnLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcHJldmlvdXNDaGFuZ2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5ld0NvbnRlbnQgPSAnJztcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG4gIGxldCBmcm9udG1hdHRlckNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4LCBjaGFuZ2Uuc3RhcnRJbmRleCk7XG4gICAgICBuZXdDb250ZW50ICs9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgbGFzdEluZGV4ID0gY2hhbmdlLmVuZEluZGV4O1xuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksIGNoYW5nZS5uZXdDb250ZW50KTtcbiAgICAgIGZyb250bWF0dGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCk7XG4gIGlmIChmcm9udG1hdHRlckNoYW5nZWQpIHtcbiAgICBuZXdDb250ZW50ID0gc2V0RnJvbnRtYXR0ZXIobmV3Q29udGVudCwgZnJvbnRtYXR0ZXIpO1xuICB9XG5cbiAgcmV0dXJuIG5ld0NvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSnNvblNhZmUoY29udGVudDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gIH0gY2F0Y2gge1xuICAgIHBhcnNlZCA9IG51bGw7XG4gIH1cblxuICBpZiAocGFyc2VkID09PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgcGFyc2VkID0ge307XG4gIH1cblxuICByZXR1cm4gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsb0JBSU87QUFDUCwyQkFBNkI7QUFDN0Isd0JBR087QUFDUCx5QkFHTztBQUNQLDJCQUdPO0FBQ1AsdUJBQXNDO0FBQ3RDLG1CQUF3QjtBQW9EeEIsZUFBc0IsaUJBQ3BCLEtBQ0EsWUFDQSxpQkFDQSxpQkFBaUMsQ0FBQyxHQUNuQjtBQUNmLFlBQU0sc0JBQVEsS0FBSyxZQUFZLE9BQU8sWUFBWTtBQUNoRCxZQUFJLGdDQUFhLEtBQUssVUFBVSxHQUFHO0FBQ2pDLGFBQU8sbUJBQW1CLEtBQUssYUFBUywyQkFBUSxLQUFLLFVBQVUsR0FBRyxlQUFlO0FBQUEsSUFDbkY7QUFFQSxXQUFPLE1BQU0sb0JBQW9CLGFBQVMsMkJBQVEsS0FBSyxVQUFVLEdBQUcsZUFBZTtBQUFBLEVBQ3JGLEdBQUcsY0FBYztBQUNuQjtBQVFPLFNBQVMsZ0JBQWdCLFlBQXFEO0FBQ25GLFNBQVEsV0FBc0MsZUFBZTtBQUMvRDtBQVFPLFNBQVMsb0JBQW9CLFlBQXlEO0FBQzNGLFNBQVEsV0FBMEMsbUJBQW1CO0FBQ3ZFO0FBRUEsZUFBZSxt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
247
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEZpbGVDaGFuZ2VcbiAqIENvbnRhaW5zIHV0aWxpdHkgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZmlsZSBjaGFuZ2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vQ2FudmFzLmQudHMnO1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NPcHRpb25zIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3QudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQge1xuICBpc0NhbnZhc0ZpbGVMaW5rLFxuICBpc0NhbnZhc1RleHRMaW5rLFxuICBwYXJzZUNhbnZhc0xpbmtLZXlcbn0gZnJvbSAnLi9DYW52YXMudHMnO1xuaW1wb3J0IHtcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyLFxuICBzZXRGcm9udG1hdHRlclxufSBmcm9tICcuL0Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFsbExpbmtzLFxuICBwYXJzZU1ldGFkYXRhXG59IGZyb20gJy4vTWV0YWRhdGFDYWNoZS50cyc7XG5pbXBvcnQgeyByZWZlcmVuY2VUb0ZpbGVDaGFuZ2UgfSBmcm9tICcuL1JlZmVyZW5jZS50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbnRlbnQgYm9keSBjaGFuZ2UgaW4gdGhlIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRDaGFuZ2UgZXh0ZW5kcyBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBlbmQgaW5kZXggb2YgdGhlIGNoYW5nZSBpbiB0aGUgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgZW5kSW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHN0YXJ0IGluZGV4IG9mIHRoZSBjaGFuZ2UgaW4gdGhlIGZpbGUgY29udGVudC5cbiAgICovXG4gIHN0YXJ0SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmlsZSBjaGFuZ2UgaW4gdGhlIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIG5ldyBjb250ZW50IHRvIHJlcGxhY2UgdGhlIG9sZCBjb250ZW50LlxuICAgKi9cbiAgbmV3Q29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIGNvbnRlbnQgdGhhdCB3aWxsIGJlIHJlcGxhY2VkLlxuICAgKi9cbiAgb2xkQ29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmcm9udG1hdHRlciBjaGFuZ2UgaW4gdGhlIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb250bWF0dGVyQ2hhbmdlIGV4dGVuZHMgRmlsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUga2V5IGluIHRoZSBmcm9udG1hdHRlciB0byB1c2UgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgZnJvbnRtYXR0ZXJLZXk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlcmUgdGhlIGZpbGUgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHByb2Nlc3NPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcHJvY2Vzc2luZy9yZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgY2hhbmdlcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUZpbGVDaGFuZ2VzKFxuICBhcHA6IEFwcCxcbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSxcbiAgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXT4sXG4gIHByb2Nlc3NPcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcHJvY2VzcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jIChjb250ZW50KSA9PiB7XG4gICAgaWYgKGlzQ2FudmFzRmlsZShhcHAsIHBhdGhPckZpbGUpKSB7XG4gICAgICByZXR1cm4gYXBwbHlDYW52YXNDaGFuZ2VzKGFwcCwgY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKGNvbnRlbnQsIGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSwgY2hhbmdlc1Byb3ZpZGVyKTtcbiAgfSwgcHJvY2Vzc09wdGlvbnMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gKGZpbGVDaGFuZ2UgYXMgUGFydGlhbDxDb250ZW50Q2hhbmdlPikuc3RhcnRJbmRleCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlIHtcbiAgcmV0dXJuIChmaWxlQ2hhbmdlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJDaGFuZ2U+KS5mcm9udG1hdHRlcktleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNhbnZhc0NoYW5nZXMoYXBwOiBBcHAsIGNvbnRlbnQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPik6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNoYW5nZXNQcm92aWRlcik7XG4gIGNvbnN0IGNhbnZhc0RhdGEgPSBwYXJzZUpzb25TYWZlKGNvbnRlbnQpIGFzIENhbnZhc0RhdGE7XG5cbiAgY29uc3QgY2FudmFzVGV4dENoYW5nZXMgPSBuZXcgTWFwPG51bWJlciwgTWFwPG51bWJlciwgRnJvbnRtYXR0ZXJDaGFuZ2U+PigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoIWlzRnJvbnRtYXR0ZXJDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdPbmx5IGZyb250bWF0dGVyIGNoYW5nZXMgYXJlIHN1cHBvcnRlZCBmb3IgY2FudmFzIGZpbGVzJywge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzTGluayA9IHBhcnNlQ2FudmFzTGlua0tleShjaGFuZ2UuZnJvbnRtYXR0ZXJLZXkpO1xuXG4gICAgaWYgKCFjYW52YXNMaW5rKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgY2FudmFzIGxpbmsnLCB7XG4gICAgICAgIGtleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW2NhbnZhc0xpbmsubm9kZUluZGV4XTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSBub3QgZm91bmQnLCB7XG4gICAgICAgIGtleTogY2hhbmdlLmZyb250bWF0dGVyS2V5LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChpc0NhbnZhc0ZpbGVMaW5rKGNhbnZhc0xpbmspKSB7XG4gICAgICBpZiAobm9kZS5maWxlICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudDogbm9kZS5maWxlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUuZmlsZSA9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc1RleHRMaW5rKGNhbnZhc0xpbmspKSB7XG4gICAgICBsZXQgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlID0gY2FudmFzVGV4dENoYW5nZXMuZ2V0KGNhbnZhc0xpbmsubGlua0luZGV4KTtcbiAgICAgIGlmICghY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlKSB7XG4gICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IG5ldyBNYXA8bnVtYmVyLCBGcm9udG1hdHRlckNoYW5nZT4oKTtcbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXMuc2V0KGNhbnZhc0xpbmsubGlua0luZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpO1xuICAgICAgfVxuXG4gICAgICBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUuc2V0KGNhbnZhc0xpbmsubGlua0luZGV4LCBjaGFuZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbbm9kZUluZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGVdIG9mIGNhbnZhc1RleHRDaGFuZ2VzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgbm90IGZvdW5kJywge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5vZGUudGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSB0ZXh0IGlzIG5vdCBhIHN0cmluZycsIHtcbiAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCBwYXJzZU1ldGFkYXRhKGFwcCwgbm9kZS50ZXh0KTtcbiAgICBjb25zdCBsaW5rcyA9IGdldEFsbExpbmtzKGNhY2hlKTtcbiAgICBjb25zdCBjb250ZW50Q2hhbmdlczogRmlsZUNoYW5nZVtdID0gW107XG5cbiAgICBmb3IgKGxldCBsaW5rSW5kZXggPSAwOyBsaW5rSW5kZXggPCBsaW5rcy5sZW5ndGg7IGxpbmtJbmRleCsrKSB7XG4gICAgICBjb25zdCBsaW5rID0gbGlua3NbbGlua0luZGV4XTtcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ01pc3NpbmcgbGluaycsIHtcbiAgICAgICAgICBsaW5rSW5kZXgsXG4gICAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICAgIG5vZGVUZXh0OiBub2RlLnRleHQsXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FudmFzVGV4dENoYW5nZSA9IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5nZXQobGlua0luZGV4KTtcbiAgICAgIGlmIChjYW52YXNUZXh0Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2UgPSByZWZlcmVuY2VUb0ZpbGVDaGFuZ2UobGluaywgY2FudmFzVGV4dENoYW5nZS5uZXdDb250ZW50KTtcbiAgICAgICAgY29udGVudENoYW5nZS5vbGRDb250ZW50ID0gY2FudmFzVGV4dENoYW5nZS5vbGRDb250ZW50O1xuICAgICAgICBjb250ZW50Q2hhbmdlcy5wdXNoKGNvbnRlbnRDaGFuZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUudGV4dCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMobm9kZS50ZXh0LCBgJHtwYXRofS5GQUtFX1RFWFQubm9kZSR7bm9kZUluZGV4LnRvU3RyaW5nKCl9Lm1kYCwgY29udGVudENoYW5nZXMpO1xuICB9XG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNhbnZhc0RhdGEsIG51bGwsICdcXHQnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlDb250ZW50Q2hhbmdlcyhjb250ZW50OiBzdHJpbmcsIHBhdGg6IHN0cmluZywgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXT4pOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgbGV0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcbiAgY29uc3QgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKGNoYW5nZS5zdGFydEluZGV4LCBjaGFuZ2UuZW5kSW5kZXgpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGVuZEluZGV4OiBjaGFuZ2UuZW5kSW5kZXgsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHN0YXJ0SW5kZXg6IGNoYW5nZS5zdGFydEluZGV4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLmZyb250bWF0dGVyS2V5KTtcbiAgICAgIGlmIChhY3R1YWxDb250ZW50ICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UuZnJvbnRtYXR0ZXJLZXksXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGEpICYmIGlzQ29udGVudENoYW5nZShiKSkge1xuICAgICAgcmV0dXJuIGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleDtcbiAgICB9XG5cbiAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5mcm9udG1hdHRlcktleS5sb2NhbGVDb21wYXJlKGIuZnJvbnRtYXR0ZXJLZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NvbnRlbnRDaGFuZ2UoYSkgPyAtMSA6IDE7XG4gIH0pO1xuXG4gIC8vIEJVRzogaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2J1Zy1kdXBsaWNhdGVkLWxpbmtzLWluLW1ldGFkYXRhY2FjaGUtaW5zaWRlLWZvb3Rub3Rlcy84NTU1MVxuICBjaGFuZ2VzID0gY2hhbmdlcy5maWx0ZXIoKGNoYW5nZSwgaW5kZXgpID0+IHtcbiAgICBpZiAoY2hhbmdlLm9sZENvbnRlbnQgPT09IGNoYW5nZS5uZXdDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAhZGVlcEVxdWFsKGNoYW5nZSwgY2hhbmdlc1tpbmRleCAtIDFdKTtcbiAgfSk7XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhbmdlID0gY2hhbmdlc1tpXTtcbiAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQ2hhbmdlID0gY2hhbmdlc1tpIC0gMV07XG4gICAgaWYgKCFwcmV2aW91c0NoYW5nZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNDb250ZW50Q2hhbmdlKHByZXZpb3VzQ2hhbmdlKSAmJiBpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSAmJiBwcmV2aW91c0NoYW5nZS5lbmRJbmRleCAmJiBjaGFuZ2Uuc3RhcnRJbmRleFxuICAgICAgJiYgcHJldmlvdXNDaGFuZ2UuZW5kSW5kZXggPiBjaGFuZ2Uuc3RhcnRJbmRleFxuICAgICkge1xuICAgICAgY29uc29sZS53YXJuKCdPdmVybGFwcGluZyBjaGFuZ2VzJywge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHByZXZpb3VzQ2hhbmdlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXdDb250ZW50ID0gJyc7XG4gIGxldCBsYXN0SW5kZXggPSAwO1xuICBsZXQgZnJvbnRtYXR0ZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgbmV3Q29udGVudCArPSBjb250ZW50LnNsaWNlKGxhc3RJbmRleCwgY2hhbmdlLnN0YXJ0SW5kZXgpO1xuICAgICAgbmV3Q29udGVudCArPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICAgIGxhc3RJbmRleCA9IGNoYW5nZS5lbmRJbmRleDtcbiAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLmZyb250bWF0dGVyS2V5LCBjaGFuZ2UubmV3Q29udGVudCk7XG4gICAgICBmcm9udG1hdHRlckNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICBpZiAoZnJvbnRtYXR0ZXJDaGFuZ2VkKSB7XG4gICAgbmV3Q29udGVudCA9IHNldEZyb250bWF0dGVyKG5ld0NvbnRlbnQsIGZyb250bWF0dGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdDb250ZW50O1xufVxuXG5mdW5jdGlvbiBwYXJzZUpzb25TYWZlKGNvbnRlbnQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLG9CQUlPO0FBQ1AsMkJBQTZCO0FBQzdCLG9CQUlPO0FBQ1Asd0JBR087QUFDUCx5QkFHTztBQUNQLDJCQUdPO0FBQ1AsdUJBQXNDO0FBQ3RDLG1CQUF3QjtBQW9EeEIsZUFBc0IsaUJBQ3BCLEtBQ0EsWUFDQSxpQkFDQSxpQkFBaUMsQ0FBQyxHQUNuQjtBQUNmLFlBQU0sc0JBQVEsS0FBSyxZQUFZLE9BQU8sWUFBWTtBQUNoRCxZQUFJLGdDQUFhLEtBQUssVUFBVSxHQUFHO0FBQ2pDLGFBQU8sbUJBQW1CLEtBQUssYUFBUywyQkFBUSxLQUFLLFVBQVUsR0FBRyxlQUFlO0FBQUEsSUFDbkY7QUFFQSxXQUFPLE1BQU0sb0JBQW9CLGFBQVMsMkJBQVEsS0FBSyxVQUFVLEdBQUcsZUFBZTtBQUFBLEVBQ3JGLEdBQUcsY0FBYztBQUNuQjtBQVFPLFNBQVMsZ0JBQWdCLFlBQXFEO0FBQ25GLFNBQVEsV0FBc0MsZUFBZTtBQUMvRDtBQVFPLFNBQVMsb0JBQW9CLFlBQXlEO0FBQzNGLFNBQVEsV0FBMEMsbUJBQW1CO0FBQ3ZFO0FBRUEsZUFBZSxtQkFBbUIsS0FBVSxTQUFpQixNQUFjLGlCQUFzRTtBQUMvSSxRQUFNLFVBQVUsVUFBTSxtQ0FBYSxlQUFlO0FBQ2xELFFBQU0sYUFBYSxjQUFjLE9BQU87QUFFeEMsUUFBTSxvQkFBb0Isb0JBQUksSUFB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