diff --git a/.gitignore b/.gitignore index e09a007..86316b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # vscode -.vscode +.vscode # Intellij *.iml @@ -10,7 +10,7 @@ node_modules # Don't include the compiled main.js file in the repo. # They should be uploaded to GitHub releases instead. -main.js +./main.js # Exclude sourcemaps *.map diff --git a/esbuild.config.mjs b/esbuild.config.mjs index dcfb408..07ca73e 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -1,6 +1,7 @@ import esbuild from "esbuild"; import process from "process"; import builtins from 'builtin-modules'; +import { copy } from 'esbuild-plugin-copy'; const banner = `/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD @@ -41,6 +42,14 @@ esbuild.build({ '@codemirror/view', ...builtins ], + plugins: [ + copy({ + assets: [{ + from: ["./manifest.json", "./main.js", "./styles.css"], + to: ["./test-vault/.obsidian/plugins/obsidian-custom-frames/."] + }] + }), + ], format: 'cjs', watch: !prod, target: 'es2016', diff --git a/main.js b/main.js new file mode 100644 index 0000000..4533e06 --- /dev/null +++ b/main.js @@ -0,0 +1,541 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); +var __export = (target, all) => { + __markAsModule(target); + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __reExport = (target, module2, desc) => { + if (module2 && typeof module2 === "object" || typeof module2 === "function") { + for (let key of __getOwnPropNames(module2)) + if (!__hasOwnProp.call(target, key) && key !== "default") + __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); + } + return target; +}; +var __toModule = (module2) => { + return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); +}; +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + +// src/main.ts +__export(exports, { + default: () => CustomFramesPlugin +}); +var import_obsidian4 = __toModule(require("obsidian")); + +// src/frame.ts +var import_obsidian = __toModule(require("obsidian")); +var CustomFrame = class { + constructor(settings, data) { + this.settings = settings; + this.data = data; + } + create(additionalStyle = void 0, urlSuffix = void 0) { + let style = `padding: ${this.settings.padding}px;`; + if (additionalStyle) + style += additionalStyle; + if (import_obsidian.Platform.isDesktopApp && !this.data.forceIframe) { + this.frame = document.createElement("webview"); + this.frame.setAttribute("allowpopups", ""); + this.frame.addEventListener("dom-ready", () => { + this.frame.setZoomFactor(this.data.zoomLevel); + this.frame.insertCSS(this.data.customCss); + }); + } else { + this.frame = document.createElement("iframe"); + this.frame.setAttribute("sandbox", "allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation"); + this.frame.setAttribute("allow", "encrypted-media; fullscreen; oversized-images; picture-in-picture; sync-xhr; geolocation;"); + style += `transform: scale(${this.data.zoomLevel}); transform-origin: 0 0;`; + } + this.frame.addClass("custom-frames-frame"); + this.frame.setAttribute("style", style); + let src = this.data.url; + if (urlSuffix) { + if (!urlSuffix.startsWith("/")) + src += "/"; + src += urlSuffix; + } + this.frame.setAttribute("src", src); + return this.frame; + } + refresh() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.location.reload(); + } else { + this.frame.reload(); + } + } + return() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.open(this.data.url); + } else { + this.frame.loadURL(this.data.url); + } + } + goBack() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.history.back(); + } else { + this.frame.goBack(); + } + } + goForward() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.history.forward(); + } else { + this.frame.goForward(); + } + } + toggleDevTools() { + if (!(this.frame instanceof HTMLIFrameElement)) { + if (!this.frame.isDevToolsOpened()) { + this.frame.openDevTools(); + } else { + this.frame.closeDevTools(); + } + } + } + getCurrentUrl() { + return this.frame instanceof HTMLIFrameElement ? this.frame.contentWindow.location.href : this.frame.getURL(); + } +}; + +// src/settings.ts +var defaultSettings = { + frames: [], + padding: 5 +}; +var presets = { + "obsidian": { + url: "https://forum.obsidian.md/", + displayName: "Obsidian Forum", + icon: "edit", + hideOnMobile: true, + addRibbonIcon: true, + openInCenter: true, + zoomLevel: 1, + forceIframe: false, + customCss: "" + }, + "calendar": { + url: "https://calendar.google.com/calendar/u/0/r/day", + displayName: "Google Calendar", + icon: "calendar", + hideOnMobile: true, + addRibbonIcon: true, + openInCenter: true, + zoomLevel: 1, + forceIframe: false, + customCss: `/* hide right-side menu, and some buttons */ +div.d6McF, +div.pw6cBb, +div.gb_Td.gb_Va.gb_Id, +div.Kk7lMc-QWPxkf-LgbsSe-haAclf, +div.h8Aqhb, +div.gboEAb, +div.dwlvNd { + display: none !important; +}` + }, + "keep": { + url: "https://keep.google.com", + displayName: "Google Keep", + icon: "files", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: `/* hide the menu bar and the "Keep" text */ +html > body > div:nth-child(2) > div:nth-child(2) > div:first-child, +html > body > div:first-child > header:first-child > div > div:first-child > div > div:first-child > a:first-child > span { + display: none !important; +}` + }, + "todoist": { + url: "https://todoist.com", + displayName: "Todoist", + icon: "list-checks", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: `/* hide the help, home, search, and productivity overview buttons, create extra space, and prevent toast pop-up from acting weird */ +[aria-label="Go to Home view"], #quick_find, [aria-label="Productivity"], [aria-label="Help & Feedback"] { + display: none !important; +} + +.view_content { + padding-left: 15px; +} + +.view_header { + padding-left: 15px; + padding-top: 10px; +} + +.undo_toast { + width: 95%; +}` + }, + "notion": { + url: "https://www.notion.so/", + displayName: "Notion", + icon: "box", + hideOnMobile: true, + addRibbonIcon: true, + openInCenter: true, + zoomLevel: 1, + forceIframe: false, + customCss: "" + }, + "twitter": { + url: "https://twitter.com", + displayName: "Twitter", + icon: "twitter", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: "" + } +}; +function getIcon(settings) { + return settings.icon ? `lucide-${settings.icon}` : "documents"; +} + +// src/settings-tab.ts +var import_obsidian2 = __toModule(require("obsidian")); +var CustomFramesSettingTab = class extends import_obsidian2.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + this.containerEl.empty(); + this.containerEl.createEl("h2", { text: "Custom Frames Settings" }); + this.containerEl.createEl("p", { text: "Note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); + new import_obsidian2.Setting(this.containerEl).setName("Frame Padding").setDesc("The padding that should be left around the inside of custom frame panes, in pixels.").addText((t) => { + t.inputEl.type = "number"; + t.setValue(String(this.plugin.settings.padding)); + t.onChange((v) => __async(this, null, function* () { + this.plugin.settings.padding = v.length ? Number(v) : defaultSettings.padding; + yield this.plugin.saveSettings(); + })); + }); + for (let frame of this.plugin.settings.frames) { + let heading = this.containerEl.createEl("h3", { text: frame.displayName || "Unnamed Frame" }); + let toggle = new import_obsidian2.ButtonComponent(this.containerEl).setButtonText("Show Settings").setClass("custom-frames-show").onClick(() => __async(this, null, function* () { + content.hidden = !content.hidden; + toggle.setButtonText(content.hidden ? "Show Settings" : "Hide Settings"); + })); + let content = this.containerEl.createDiv(); + content.hidden = true; + new import_obsidian2.Setting(content).setName("Display Name").setDesc("The display name that this frame should have.").addText((t) => { + t.setValue(frame.displayName); + t.onChange((v) => __async(this, null, function* () { + frame.displayName = v; + heading.setText(frame.displayName || "Unnamed Frame"); + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Icon").setDesc(createFragment((f) => { + f.createSpan({ text: "The icon that this frame's pane should have. The names of any " }); + f.createEl("a", { text: "Lucide icons", href: "https://lucide.dev/" }); + f.createSpan({ text: " can be used." }); + })).addText((t) => { + t.setValue(frame.icon); + t.onChange((v) => __async(this, null, function* () { + frame.icon = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("URL").setDesc("The URL that should be opened in this frame.").addText((t) => { + t.setValue(frame.url); + t.onChange((v) => __async(this, null, function* () { + frame.url = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Disable on Mobile").setDesc("Custom Frames is a lot more restricted on mobile devices and doesn't allow for the same types of content to be displayed. If a frame doesn't work as expected on mobile, it can be disabled.").addToggle((t) => { + t.setValue(frame.hideOnMobile); + t.onChange((v) => __async(this, null, function* () { + frame.hideOnMobile = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Add Ribbon Icon").setDesc("Whether a button to open this frame should be added to the ribbon.").addToggle((t) => { + t.setValue(frame.addRibbonIcon); + t.onChange((v) => __async(this, null, function* () { + frame.addRibbonIcon = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Open in Center").setDesc("Whether this frame should be opened in the unpinned center editor rather than one of the panes on the side. This is useful for sites that don't work well in a narrow view, or sites that don't require a note to be open when viewed.").addToggle((t) => { + t.setValue(frame.openInCenter); + t.onChange((v) => __async(this, null, function* () { + frame.openInCenter = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Force iframe").setDesc(createFragment((f) => { + f.createSpan({ text: "Whether this frame should use iframes on desktop as opposed to Electron webviews." }); + f.createEl("br"); + f.createEl("em", { text: "Only enable this setting if the frame is causing issues or frequent crashes. This setting causes all Desktop-only settings to be ignored." }); + })).addToggle((t) => { + t.setValue(frame.forceIframe); + t.onChange((v) => __async(this, null, function* () { + frame.forceIframe = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Page Zoom").setDesc("The zoom that this frame's page should be displayed with, as a percentage.").addText((t) => { + t.inputEl.type = "number"; + t.setValue(String(frame.zoomLevel * 100)); + t.onChange((v) => __async(this, null, function* () { + frame.zoomLevel = v.length ? Number(v) / 100 : 1; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Additional CSS").setDesc(createFragment((f) => { + f.createSpan({ text: "A snippet of additional CSS that should be applied to this frame." }); + f.createEl("br"); + f.createEl("em", { text: "Note that this is only applied on Desktop." }); + })).addTextArea((t) => { + t.inputEl.rows = 5; + t.inputEl.cols = 50; + t.setValue(frame.customCss); + t.onChange((v) => __async(this, null, function* () { + frame.customCss = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.ButtonComponent(content).setButtonText("Remove Frame").onClick(() => __async(this, null, function* () { + this.plugin.settings.frames.remove(frame); + yield this.plugin.saveSettings(); + this.display(); + })); + } + this.containerEl.createEl("hr"); + let info = this.containerEl.createEl("p", { text: `Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the "Custom Frames: Open" command.` }); + info.createEl("br"); + info.createSpan({ text: "Note that Obsidian has to be restarted or reloaded to activate a newly added frame.", cls: "mod-warning" }); + let addDiv = this.containerEl.createDiv(); + let dropdown = new import_obsidian2.DropdownComponent(addDiv); + dropdown.addOption("new", "Custom"); + for (let key of Object.keys(presets)) + dropdown.addOption(key, presets[key].displayName); + new import_obsidian2.ButtonComponent(addDiv).setButtonText("Add Frame").setClass("custom-frames-add").onClick(() => __async(this, null, function* () { + let option = dropdown.getValue(); + if (option == "new") { + this.plugin.settings.frames.push({ + url: "", + displayName: "New Frame", + icon: "", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: "" + }); + } else { + this.plugin.settings.frames.push(presets[option]); + } + yield this.plugin.saveSettings(); + this.display(); + })); + this.containerEl.createEl("hr"); + this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" }); + this.containerEl.createEl("a", { href: "https://ellpeck.de/support" }).createEl("img", { attr: { src: "https://ellpeck.de/res/generalsupport.png" }, cls: "custom-frames-support" }); + } +}; + +// src/view.ts +var import_obsidian3 = __toModule(require("obsidian")); +var _CustomFrameView = class extends import_obsidian3.ItemView { + constructor(leaf, settings, data, name) { + super(leaf); + this.data = data; + this.name = name; + this.frame = new CustomFrame(settings, data); + for (let action of _CustomFrameView.actions) + this.addAction(action.icon, action.name, () => action.action(this)); + } + onload() { + this.contentEl.empty(); + this.contentEl.addClass("custom-frames-view"); + this.contentEl.appendChild(this.frame.create()); + } + onHeaderMenu(menu) { + super.onHeaderMenu(menu); + for (let action of _CustomFrameView.actions) { + menu.addItem((i) => { + i.setTitle(action.name); + i.setIcon(action.icon); + i.onClick(() => action.action(this)); + }); + } + } + getViewType() { + return this.name; + } + getDisplayText() { + return this.data.displayName; + } + getIcon() { + return getIcon(this.data); + } +}; +var CustomFrameView = _CustomFrameView; +CustomFrameView.actions = [ + { + name: "Return to original page", + icon: "home", + action: (v) => v.frame.return() + }, + { + name: "Open dev tools", + icon: "binary", + action: (v) => v.frame.toggleDevTools() + }, + { + name: "Copy link", + icon: "link", + action: (v) => navigator.clipboard.writeText(v.frame.getCurrentUrl()) + }, + { + name: "Open in browser", + icon: "globe", + action: (v) => open(v.frame.getCurrentUrl()) + }, + { + name: "Refresh", + icon: "refresh-cw", + action: (v) => v.frame.refresh() + }, + { + name: "Go back", + icon: "arrow-left", + action: (v) => v.frame.goBack() + }, + { + name: "Go forward", + icon: "arrow-right", + action: (v) => v.frame.goForward() + } +]; + +// src/main.ts +var CustomFramesPlugin = class extends import_obsidian4.Plugin { + onload() { + return __async(this, null, function* () { + yield this.loadSettings(); + for (let frame of this.settings.frames) { + if (!frame.url || !frame.displayName) + continue; + let name = `custom-frames-${frame.displayName.toLowerCase().replace(/\s/g, "-")}`; + if (import_obsidian4.Platform.isMobileApp && frame.hideOnMobile) { + console.log(`Skipping frame ${name} which is hidden on mobile`); + continue; + } + try { + console.log(`Registering frame ${name} for URL ${frame.url}`); + this.registerView(name, (l) => new CustomFrameView(l, this.settings, frame, name)); + this.addCommand({ + id: `open-${name}`, + name: `Open ${frame.displayName}`, + callback: () => this.openLeaf(name, frame.openInCenter, false) + }); + if (frame.addRibbonIcon) + this.addRibbonIcon(getIcon(frame), `Open ${frame.displayName}`, (e) => this.openLeaf(name, frame.openInCenter, import_obsidian4.Platform.isMacOS ? e.metaKey : e.ctrlKey)); + } catch (e) { + console.error(`Couldn't register frame ${name}, is there already one with the same name?`); + } + } + this.addSettingTab(new CustomFramesSettingTab(this.app, this)); + this.registerMarkdownCodeBlockProcessor("custom-frames", (s, e) => { + e.empty(); + e.addClass("custom-frames-view-file"); + let frameMatch = /frame:([^\n]+)/gi.exec(s); + let frameName = frameMatch && frameMatch[1].trim(); + if (!frameName) { + e.createSpan({ text: "Couldn't parse frame name" }); + return; + } + let data = this.settings.frames.find((f) => f.displayName == frameName); + if (!data) { + e.createSpan({ text: `Couldn't find a frame with name ${frameName}` }); + return; + } + if (import_obsidian4.Platform.isMobileApp && data.hideOnMobile) { + e.createSpan({ text: `${frameName} is hidden on mobile` }); + return; + } + let styleMatch = /style:([^\n]+)/gi.exec(s); + let style = styleMatch && styleMatch[1].trim(); + style || (style = "height: 600px;"); + let urlSuffixMatch = /urlsuffix:([^\n]+)/gi.exec(s); + let urlSuffix = urlSuffixMatch && urlSuffixMatch[1].trim(); + urlSuffix || (urlSuffix = ""); + let frame = new CustomFrame(this.settings, data); + e.appendChild(frame.create(style, urlSuffix)); + }); + }); + } + loadSettings() { + return __async(this, null, function* () { + this.settings = Object.assign({}, defaultSettings, yield this.loadData()); + }); + } + saveSettings() { + return __async(this, null, function* () { + yield this.saveData(this.settings); + }); + } + openLeaf(name, center, split) { + return __async(this, null, function* () { + if (center) { + this.app.workspace.detachLeavesOfType(name); + let leaf = this.app.workspace.getLeaf(split); + yield leaf.setViewState({ type: name, active: true }); + } else { + if (!this.app.workspace.getLeavesOfType(name).length) + yield this.app.workspace.getRightLeaf(false).setViewState({ type: name, active: true }); + this.app.workspace.revealLeaf(this.app.workspace.getLeavesOfType(name)[0]); + } + }); + } +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVWaWV3IH0gZnJvbSBcIi4vdmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRnJhbWVzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdGZvciAobGV0IGZyYW1lIG9mIHRoaXMuc2V0dGluZ3MuZnJhbWVzKSB7XHJcblx0XHRcdGlmICghZnJhbWUudXJsIHx8ICFmcmFtZS5kaXNwbGF5TmFtZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0bGV0IG5hbWUgPSBgY3VzdG9tLWZyYW1lcy0ke2ZyYW1lLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiLVwiKX1gO1xyXG5cdFx0XHRpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHAgJiYgZnJhbWUuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFNraXBwaW5nIGZyYW1lICR7bmFtZX0gd2hpY2ggaXMgaGlkZGVuIG9uIG1vYmlsZWApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFJlZ2lzdGVyaW5nIGZyYW1lICR7bmFtZX0gZm9yIFVSTCAke2ZyYW1lLnVybH1gKTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZWdpc3RlclZpZXcobmFtZSwgbCA9PiBuZXcgQ3VzdG9tRnJhbWVWaWV3KGwsIHRoaXMuc2V0dGluZ3MsIGZyYW1lLCBuYW1lKSk7XHJcblx0XHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRcdGlkOiBgb3Blbi0ke25hbWV9YCxcclxuXHRcdFx0XHRcdG5hbWU6IGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgZmFsc2UpLFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAoZnJhbWUuYWRkUmliYm9uSWNvbilcclxuXHRcdFx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihnZXRJY29uKGZyYW1lKSwgYE9wZW4gJHtmcmFtZS5kaXNwbGF5TmFtZX1gLFxyXG5cdFx0XHRcdFx0XHRlID0+IHRoaXMub3BlbkxlYWYobmFtZSwgZnJhbWUub3BlbkluQ2VudGVyLCBQbGF0Zm9ybS5pc01hY09TID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSk7XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IHJlZ2lzdGVyIGZyYW1lICR7bmFtZX0sIGlzIHRoZXJlIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgbmFtZT9gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcImN1c3RvbS1mcmFtZXNcIiwgKHMsIGUpID0+IHtcclxuXHRcdFx0ZS5lbXB0eSgpO1xyXG5cdFx0XHRlLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3LWZpbGVcIik7XHJcblxyXG5cdFx0XHRsZXQgZnJhbWVNYXRjaCA9IC9mcmFtZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IGZyYW1lTmFtZSA9IGZyYW1lTWF0Y2ggJiYgZnJhbWVNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdGlmICghZnJhbWVOYW1lKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogXCJDb3VsZG4ndCBwYXJzZSBmcmFtZSBuYW1lXCIgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBkYXRhID0gdGhpcy5zZXR0aW5ncy5mcmFtZXMuZmluZChmID0+IGYuZGlzcGxheU5hbWUgPT0gZnJhbWVOYW1lKTtcclxuXHRcdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYENvdWxkbid0IGZpbmQgYSBmcmFtZSB3aXRoIG5hbWUgJHtmcmFtZU5hbWV9YCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGRhdGEuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYCR7ZnJhbWVOYW1lfSBpcyBoaWRkZW4gb24gbW9iaWxlYCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCBzdHlsZU1hdGNoID0gL3N0eWxlOihbXlxcbl0rKS9naS5leGVjKHMpO1xyXG5cdFx0XHRsZXQgc3R5bGUgPSBzdHlsZU1hdGNoICYmIHN0eWxlTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRzdHlsZSB8fD0gXCJoZWlnaHQ6IDYwMHB4O1wiO1xyXG5cclxuXHRcdFx0bGV0IHVybFN1ZmZpeE1hdGNoID0gL3VybHN1ZmZpeDooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHVybFN1ZmZpeCA9IHVybFN1ZmZpeE1hdGNoICYmIHVybFN1ZmZpeE1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0dXJsU3VmZml4IHx8PSBcIlwiO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHRoaXMuc2V0dGluZ3MsIGRhdGEpO1xyXG5cdFx0XHRlLmFwcGVuZENoaWxkKGZyYW1lLmNyZWF0ZShzdHlsZSwgdXJsU3VmZml4KSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBvcGVuTGVhZihuYW1lOiBzdHJpbmcsIGNlbnRlcjogYm9vbGVhbiwgc3BsaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLmRldGFjaExlYXZlc09mVHlwZShuYW1lKTtcclxuXHRcdFx0bGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihzcGxpdCk7XHJcblx0XHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpLmxlbmd0aClcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0UmlnaHRMZWFmKGZhbHNlKS5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoYWRkaXRpb25hbFN0eWxlOiBzdHJpbmcgPSB1bmRlZmluZWQsIHVybFN1ZmZpeDogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd3BvcHVwc1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5hZGRFdmVudExpc3RlbmVyKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Wm9vbUZhY3Rvcih0aGlzLmRhdGEuem9vbUxldmVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuaW5zZXJ0Q1NTKHRoaXMuZGF0YS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXMgYWxsb3ctbW9kYWxzIGFsbG93LXBvcHVwcyBhbGxvdy1wcmVzZW50YXRpb24gYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25cIik7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwiYWxsb3dcIiwgXCJlbmNyeXB0ZWQtbWVkaWE7IGZ1bGxzY3JlZW47IG92ZXJzaXplZC1pbWFnZXM7IHBpY3R1cmUtaW4tcGljdHVyZTsgc3luYy14aHI7IGdlb2xvY2F0aW9uO1wiKTtcclxuICAgICAgICAgICAgc3R5bGUgKz0gYHRyYW5zZm9ybTogc2NhbGUoJHt0aGlzLmRhdGEuem9vbUxldmVsfSk7IHRyYW5zZm9ybS1vcmlnaW46IDAgMDtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy1mcmFtZVwiKTtcclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgbGV0IHNyYyA9IHRoaXMuZGF0YS51cmw7XHJcbiAgICAgICAgaWYgKHVybFN1ZmZpeCkge1xyXG4gICAgICAgICAgICBpZiAoIXVybFN1ZmZpeC5zdGFydHNXaXRoKFwiL1wiKSlcclxuICAgICAgICAgICAgICAgIHNyYyArPSBcIi9cIjtcclxuICAgICAgICAgICAgc3JjICs9IHVybFN1ZmZpeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Gb3J3YXJkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29Gb3J3YXJkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcbn0iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBCdXR0b25Db21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgcHJlc2V0cyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21GcmFtZXNQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW4pIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJDdXN0b20gRnJhbWVzIFNldHRpbmdzXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIk5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgbGV0IGluZm8gPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiQ3JlYXRlIGEgbmV3IGZyYW1lLCBlaXRoZXIgZnJvbSBhIHByZXNldCBzaGlwcGVkIHdpdGggdGhlIHBsdWdpbiwgb3IgYSBjdXN0b20gb25lIHRoYXQgeW91IGNhbiBlZGl0IHlvdXJzZWxmLiBFYWNoIGZyYW1lJ3MgcGFuZSBjYW4gYmUgb3BlbmVkIHVzaW5nIHRoZSBcXFwiQ3VzdG9tIEZyYW1lczogT3BlblxcXCIgY29tbWFuZC5cIiB9KTtcclxuICAgICAgICBpbmZvLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgaW5mby5jcmVhdGVTcGFuKHsgdGV4dDogXCJOb3RlIHRoYXQgT2JzaWRpYW4gaGFzIHRvIGJlIHJlc3RhcnRlZCBvciByZWxvYWRlZCB0byBhY3RpdmF0ZSBhIG5ld2x5IGFkZGVkIGZyYW1lLlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbGV0IGFkZERpdiA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgbGV0IGRyb3Bkb3duID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KGFkZERpdik7XHJcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibmV3XCIsIFwiQ3VzdG9tXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhwcmVzZXRzKSlcclxuICAgICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKGtleSwgcHJlc2V0c1trZXldLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGFkZERpdilcclxuICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJBZGQgRnJhbWVcIilcclxuICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1hZGRcIilcclxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRyb3Bkb3duLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiTmV3IEZyYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2gocHJlc2V0c1tvcHRpb25dKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luIGFuZCB3YW50IHRvIHN1cHBvcnQgaXRzIGRldmVsb3BtZW50LCB5b3UgY2FuIGRvIHNvIHRocm91Z2ggbXkgd2Vic2l0ZSBieSBjbGlja2luZyB0aGlzIGZhbmN5IGltYWdlIVwiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL2VsbHBlY2suZGUvc3VwcG9ydFwiIH0pXHJcbiAgICAgICAgICAgIC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiBcImh0dHBzOi8vZWxscGVjay5kZS9yZXMvZ2VuZXJhbHN1cHBvcnQucG5nXCIgfSwgY2xzOiBcImN1c3RvbS1mcmFtZXMtc3VwcG9ydFwiIH0pO1xyXG4gICAgfVxyXG59IiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IZWFkZXJNZW51KG1lbnU6IE1lbnUpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5vbkhlYWRlck1lbnUobWVudSk7XHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIG1lbnUuYWRkSXRlbShpID0+IHtcclxuICAgICAgICAgICAgICAgIGkuc2V0VGl0bGUoYWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaS5zZXRJY29uKGFjdGlvbi5pY29uKTtcclxuICAgICAgICAgICAgICAgIGkub25DbGljaygoKSA9PiBhY3Rpb24uYWN0aW9uKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBnZXRJY29uKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWlDOzs7QUNBakMsc0JBQXlCO0FBR2xCLHdCQUFrQjtBQUFBLEVBTXJCLFlBQVksVUFBZ0MsTUFBMkI7QUFDbkUsU0FBSyxXQUFXO0FBQ2hCLFNBQUssT0FBTztBQUFBO0FBQUEsRUFHVCxPQUFPLGtCQUEwQixRQUFXLFlBQW9CLFFBQWdCO0FBQ25GLFFBQUksUUFBUSxZQUFZLEtBQUssU0FBUztBQUN0QyxRQUFJO0FBQ0EsZUFBUztBQUNiLFFBQUkseUJBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGFBQWE7QUFDakQsV0FBSyxRQUFRLFNBQVMsY0FBYztB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 diff --git a/package-lock.json b/package-lock.json index f557db6..3334eab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,1767 @@ { "name": "obsidian-custom-frames", "version": "2.4.2", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "obsidian-custom-frames", + "version": "2.4.2", + "license": "MIT", + "devDependencies": { + "@types/node": "^16.11.6", + "builtin-modules": "^3.2.0", + "electron": "^13.6.2", + "esbuild": "0.14.0", + "esbuild-plugin-copy": "^1.3.0", + "obsidian": "latest", + "tslib": "2.3.1", + "typescript": "4.4.4" + } + }, + "node_modules/@codemirror/state": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.1.tgz", + "integrity": "sha512-2s+aXsxmAwnR3Rd+JDHPG/1lw0YsA9PEwl7Re88gHJHGfxyfEzKBmsN4rr53RyPIR4lzbbhJX0DCq0WlqlBIRw==", + "dev": true, + "peer": true + }, + "node_modules/@codemirror/view": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.2.0.tgz", + "integrity": "sha512-3emW1symh+GoteFMBPsltjmF790U/trouLILATh3JodbF/z98HvcQh2g3+H6dfNIHx16uNonsAF4mNzVr1TJNA==", + "dev": true, + "peer": true, + "dependencies": { + "@codemirror/state": "^6.0.0", + "style-mod": "^4.0.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/codemirror": { + "version": "0.0.108", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz", + "integrity": "sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==", + "dev": true, + "dependencies": { + "@types/tern": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.51.tgz", + "integrity": "sha512-h6p1A77pHBDdOcI9y6Wfh9iRGa8lMUZMk2ebHJTNTtRwgbQzgemZow6PW7+Xs7Z0r0IQFY1+iRlcNAkRrf53nA==", + "dev": true + }, + "node_modules/@types/tern": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", + "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "optional": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "optional": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "node_modules/electron": { + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.6.9.tgz", + "integrity": "sha512-Es/sBy85NIuqsO9MW41PUCpwIkeinlTQ7g0ainfnmRAM2rmog3GBxVCaoV5dzEjwTF7TKG1Yr/E7Z3qHmlfWAg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.0.1", + "@types/node": "^14.6.2", + "extract-zip": "^1.0.3" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 8.6" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "14.18.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.24.tgz", + "integrity": "sha512-aJdn8XErcSrfr7k8ZDDfU6/2OgjZcB2Fu9d+ESK8D7Oa5mtsv8Fa8GpcwTA0v60kuZBaalKPzuzun4Ov1YWO/w==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/esbuild": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.0.tgz", + "integrity": "sha512-UOnSKRAyZondxdLrOXnI/mesUmU/GvDTcajCvxoIaObzMeQcn0HyoGtvbfATnazlx799ZqFSyIZGLXFszkjy3A==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.14.0", + "esbuild-darwin-64": "0.14.0", + "esbuild-darwin-arm64": "0.14.0", + "esbuild-freebsd-64": "0.14.0", + "esbuild-freebsd-arm64": "0.14.0", + "esbuild-linux-32": "0.14.0", + "esbuild-linux-64": "0.14.0", + "esbuild-linux-arm": "0.14.0", + "esbuild-linux-arm64": "0.14.0", + "esbuild-linux-mips64le": "0.14.0", + "esbuild-linux-ppc64le": "0.14.0", + "esbuild-netbsd-64": "0.14.0", + "esbuild-openbsd-64": "0.14.0", + "esbuild-sunos-64": "0.14.0", + "esbuild-windows-32": "0.14.0", + "esbuild-windows-64": "0.14.0", + "esbuild-windows-arm64": "0.14.0" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.0.tgz", + "integrity": "sha512-X7BjFiRRNfxPNg1aT5zw4xK1vbvX2IvDPcEp4bv0CEXgR39UzuOMUsQoG92aZgj8JGs8jxQAZc8k9dVJ1WL2BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.0.tgz", + "integrity": "sha512-43vtt407jMp1kEXiaY0dEIGjOREax9F1+qMI0+F9tJyr06EHAofnbLL6cTmLgdPy/pMhltSvOJ8EddJrrOBgpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.0.tgz", + "integrity": "sha512-hMbT5YiBrFL763mnwR9BqNtq9XtJgJRxYs7Ad++KUd+ZhMoVE0Rs/YLe1oor9uBGhHLqQsZuJ2dUHjCsfT/iDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.0.tgz", + "integrity": "sha512-mx68HRYIZo6ZiHbWk5Md+mDJoDw779yWkJQAaBnXwOkGbDeA3JmPZjp6IPfy2P+n3emK9z6g4pKiebp1tQGVoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.0.tgz", + "integrity": "sha512-iM8u+zTagh0WGn2FTTxi7DII/ycVzYyuf2Df6eP2ZX+vlx2FjaduhagRkpyhjfmEyhfJOrYSAR5R1biNPcA+VA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.0.tgz", + "integrity": "sha512-dWHotI2qlXWZyza7n85UubBj0asjpM7FTtQYDaRQKxoCJpCnSzq3aD55IJthiggZHXj2tAML9Bc5xjVLsBJR0w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.0.tgz", + "integrity": "sha512-7buo31kp1/yKWPm9vU44FEUwkeIROrIgnCDV9KLMLSbOjGEHBZXYJ2L0p4ZnB7Z+m5YiW7F/AfJu0/1E87nOeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.0.tgz", + "integrity": "sha512-fgybXQwPRT4Io01+aD+yphcLOLRVGqbSdhvaDK3qBwqUvspFsq4QkI7PeeYpuQdBZWiRKLoi9v5r90l7JO/s+g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.0.tgz", + "integrity": "sha512-9LBtCH2RkhDBwoAYksTtXljN6hlxxoL6a3ymNfXJG9JxFUQddOfhajXZdObFn/hgGkAFwx8dXqw+FnPm0FCzSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.0.tgz", + "integrity": "sha512-Xz7soOqWeCWcLp15biPM08To+s0k1E/2q0pQZNQ+SY9S5H2vU4ujDXqKjxFc24G9CrOeUNEOXTkh+JldBGbTCA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.0.tgz", + "integrity": "sha512-fuBXTyUaZKxpmp43Nf0M1uI1OmZv/COcME9PG7NQ/EniwC680Xj5xQFhEBDVnvQQ+6xOnXdfPSojJq7gQxrORQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.0.tgz", + "integrity": "sha512-pQaECTKr/iCXtn1qjwih+cvoZzbZ+P3NwLQo4uo/IesklbPTR5eF4d85L1vPFVgff+itBMxbbB7aoRznSglN3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.0.tgz", + "integrity": "sha512-HiaqQX9HMb9u3eYvKZ86+m/paQwASJSIjXiRTFpFusypjtU2NJqWb/LiRvhfmwC6rb7YHwCSPx+juSM7M+20bA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-plugin-copy": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-copy/-/esbuild-plugin-copy-1.3.0.tgz", + "integrity": "sha512-LOx1xJOlAaCFMRtokHjsJfEkrosy3RDRa8SUHmn7loo0gwrouBQQwLAmOyMECshf7gSR1cPSRtAHu3KF/kQsyw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "fs-extra": "^10.0.1", + "globby": "^11.0.3" + }, + "peerDependencies": { + "esbuild": "^0.14.0" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/esbuild-plugin-copy/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.0.tgz", + "integrity": "sha512-TkMQOSiSU3fHLV3M+OKUgLZt5L7TpcBcMRvtFw1cTxAnX8eT+1qkWVLiDM8ow1C3P7PW3bkGY3LW8vOs8o/jBA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.0.tgz", + "integrity": "sha512-0h7E50JHgyLd7TkqSIH0VzBhngWspxPHuq/crDAMnh4s4tW8zWCMLIz2c1HVwHfZsh7d5+C4/yBaQeJTHXGvIA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.0.tgz", + "integrity": "sha512-RxnovPOoQS5Id4mbdIUm96L0GIg+ZME4FthbErw1kZZabLi9eLp1gR3vSwkZXKbK8Z76uDkSW0EN74i1XWVpiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.0.tgz", + "integrity": "sha512-66KsVlT6lGDWgDKQsAlojxgUhZkkjVeosMVRdb913OwtcOjszceg6zFD748jzp9CUgAseHCNJqFmYOyBzneSEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "optional": true + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "optional": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "optional": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "optional": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "optional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "optional": true + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obsidian": { + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-0.15.9.tgz", + "integrity": "sha512-w3JL/IM3/U61rjFSFIFDSv+pcHn3mH1EIRN40kBkC/lGYqjFSPbr6daQe08QkskBz/GAYIeBoaKQIcgU9vV3LQ==", + "dev": true, + "dependencies": { + "@types/codemirror": "0.0.108", + "moment": "2.29.4" + }, + "peerDependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "optional": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/style-mod": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", + "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", + "dev": true, + "peer": true + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/w3c-keyname": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", + "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", + "dev": true, + "peer": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "optional": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, "dependencies": { + "@codemirror/state": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.1.tgz", + "integrity": "sha512-2s+aXsxmAwnR3Rd+JDHPG/1lw0YsA9PEwl7Re88gHJHGfxyfEzKBmsN4rr53RyPIR4lzbbhJX0DCq0WlqlBIRw==", + "dev": true, + "peer": true + }, + "@codemirror/view": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.2.0.tgz", + "integrity": "sha512-3emW1symh+GoteFMBPsltjmF790U/trouLILATh3JodbF/z98HvcQh2g3+H6dfNIHx16uNonsAF4mNzVr1TJNA==", + "dev": true, + "peer": true, + "requires": { + "@codemirror/state": "^6.0.0", + "style-mod": "^4.0.0", + "w3c-keyname": "^2.2.4" + } + }, "@electron/get": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", @@ -21,6 +1779,32 @@ "sumchecker": "^3.0.1" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -46,15 +1830,15 @@ } }, "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, "@types/node": { - "version": "16.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", - "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==", + "version": "16.11.51", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.51.tgz", + "integrity": "sha512-h6p1A77pHBDdOcI9y6Wfh9iRGa8lMUZMk2ebHJTNTtRwgbQzgemZow6PW7+Xs7Z0r0IQFY1+iRlcNAkRrf53nA==", "dev": true }, "@types/tern": { @@ -66,6 +1850,21 @@ "@types/estree": "*" } }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "boolean": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", @@ -73,10 +1872,19 @@ "dev": true, "optional": true }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, "buffer-from": { @@ -86,9 +1894,9 @@ "dev": true }, "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, "cacheable-request": { @@ -123,15 +1931,40 @@ } } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "requires": { "mimic-response": "^1.0.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", @@ -173,7 +2006,7 @@ "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -186,13 +2019,14 @@ "dev": true }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "optional": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "detect-node": { @@ -202,16 +2036,25 @@ "dev": true, "optional": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, "electron": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-13.6.2.tgz", - "integrity": "sha512-ZXx9t68yXftvNZVnQ7v2XHcnH+MPUF6LNStoz4MMXuWpkF9gq3qwjcYSqnbM4wiVkvWVHIyYvt1yemmStza9dQ==", + "version": "13.6.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-13.6.9.tgz", + "integrity": "sha512-Es/sBy85NIuqsO9MW41PUCpwIkeinlTQ7g0ainfnmRAM2rmog3GBxVCaoV5dzEjwTF7TKG1Yr/E7Z3qHmlfWAg==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -220,9 +2063,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "version": "14.18.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.24.tgz", + "integrity": "sha512-aJdn8XErcSrfr7k8ZDDfU6/2OgjZcB2Fu9d+ESK8D7Oa5mtsv8Fa8GpcwTA0v60kuZBaalKPzuzun4Ov1YWO/w==", "dev": true } } @@ -230,7 +2073,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "optional": true }, @@ -257,146 +2100,186 @@ "optional": true }, "esbuild": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz", - "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.0.tgz", + "integrity": "sha512-UOnSKRAyZondxdLrOXnI/mesUmU/GvDTcajCvxoIaObzMeQcn0HyoGtvbfATnazlx799ZqFSyIZGLXFszkjy3A==", "dev": true, "requires": { - "esbuild-android-arm64": "0.13.12", - "esbuild-darwin-64": "0.13.12", - "esbuild-darwin-arm64": "0.13.12", - "esbuild-freebsd-64": "0.13.12", - "esbuild-freebsd-arm64": "0.13.12", - "esbuild-linux-32": "0.13.12", - "esbuild-linux-64": "0.13.12", - "esbuild-linux-arm": "0.13.12", - "esbuild-linux-arm64": "0.13.12", - "esbuild-linux-mips64le": "0.13.12", - "esbuild-linux-ppc64le": "0.13.12", - "esbuild-netbsd-64": "0.13.12", - "esbuild-openbsd-64": "0.13.12", - "esbuild-sunos-64": "0.13.12", - "esbuild-windows-32": "0.13.12", - "esbuild-windows-64": "0.13.12", - "esbuild-windows-arm64": "0.13.12" + "esbuild-android-arm64": "0.14.0", + "esbuild-darwin-64": "0.14.0", + "esbuild-darwin-arm64": "0.14.0", + "esbuild-freebsd-64": "0.14.0", + "esbuild-freebsd-arm64": "0.14.0", + "esbuild-linux-32": "0.14.0", + "esbuild-linux-64": "0.14.0", + "esbuild-linux-arm": "0.14.0", + "esbuild-linux-arm64": "0.14.0", + "esbuild-linux-mips64le": "0.14.0", + "esbuild-linux-ppc64le": "0.14.0", + "esbuild-netbsd-64": "0.14.0", + "esbuild-openbsd-64": "0.14.0", + "esbuild-sunos-64": "0.14.0", + "esbuild-windows-32": "0.14.0", + "esbuild-windows-64": "0.14.0", + "esbuild-windows-arm64": "0.14.0" } }, "esbuild-android-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.12.tgz", - "integrity": "sha512-TSVZVrb4EIXz6KaYjXfTzPyyRpXV5zgYIADXtQsIenjZ78myvDGaPi11o4ZSaHIwFHsuwkB6ne5SZRBwAQ7maw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.0.tgz", + "integrity": "sha512-X7BjFiRRNfxPNg1aT5zw4xK1vbvX2IvDPcEp4bv0CEXgR39UzuOMUsQoG92aZgj8JGs8jxQAZc8k9dVJ1WL2BA==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", - "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.0.tgz", + "integrity": "sha512-43vtt407jMp1kEXiaY0dEIGjOREax9F1+qMI0+F9tJyr06EHAofnbLL6cTmLgdPy/pMhltSvOJ8EddJrrOBgpQ==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.12.tgz", - "integrity": "sha512-JvAMtshP45Hd8A8wOzjkY1xAnTKTYuP/QUaKp5eUQGX+76GIie3fCdUUr2ZEKdvpSImNqxiZSIMziEiGB5oUmQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.0.tgz", + "integrity": "sha512-hMbT5YiBrFL763mnwR9BqNtq9XtJgJRxYs7Ad++KUd+ZhMoVE0Rs/YLe1oor9uBGhHLqQsZuJ2dUHjCsfT/iDg==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.12.tgz", - "integrity": "sha512-r6On/Skv9f0ZjTu6PW5o7pdXr8aOgtFOEURJZYf1XAJs0IQ+gW+o1DzXjVkIoT+n1cm3N/t1KRJfX71MPg/ZUA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.0.tgz", + "integrity": "sha512-mx68HRYIZo6ZiHbWk5Md+mDJoDw779yWkJQAaBnXwOkGbDeA3JmPZjp6IPfy2P+n3emK9z6g4pKiebp1tQGVoQ==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.12.tgz", - "integrity": "sha512-F6LmI2Q1gii073kmBE3NOTt/6zLL5zvZsxNLF8PMAwdHc+iBhD1vzfI8uQZMJA1IgXa3ocr3L3DJH9fLGXy6Yw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.0.tgz", + "integrity": "sha512-iM8u+zTagh0WGn2FTTxi7DII/ycVzYyuf2Df6eP2ZX+vlx2FjaduhagRkpyhjfmEyhfJOrYSAR5R1biNPcA+VA==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.12.tgz", - "integrity": "sha512-U1UZwG3UIwF7/V4tCVAo/nkBV9ag5KJiJTt+gaCmLVWH3bPLX7y+fNlhIWZy8raTMnXhMKfaTvWZ9TtmXzvkuQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.0.tgz", + "integrity": "sha512-dWHotI2qlXWZyza7n85UubBj0asjpM7FTtQYDaRQKxoCJpCnSzq3aD55IJthiggZHXj2tAML9Bc5xjVLsBJR0w==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.12.tgz", - "integrity": "sha512-YpXSwtu2NxN3N4ifJxEdsgd6Q5d8LYqskrAwjmoCT6yQnEHJSF5uWcxv783HWN7lnGpJi9KUtDvYsnMdyGw71Q==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.0.tgz", + "integrity": "sha512-7buo31kp1/yKWPm9vU44FEUwkeIROrIgnCDV9KLMLSbOjGEHBZXYJ2L0p4ZnB7Z+m5YiW7F/AfJu0/1E87nOeQ==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.12.tgz", - "integrity": "sha512-SyiT/JKxU6J+DY2qUiSLZJqCAftIt3uoGejZ0HDnUM2MGJqEGSGh7p1ecVL2gna3PxS4P+j6WAehCwgkBPXNIw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.0.tgz", + "integrity": "sha512-fgybXQwPRT4Io01+aD+yphcLOLRVGqbSdhvaDK3qBwqUvspFsq4QkI7PeeYpuQdBZWiRKLoi9v5r90l7JO/s+g==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.12.tgz", - "integrity": "sha512-sgDNb8kb3BVodtAlcFGgwk+43KFCYjnFOaOfJibXnnIojNWuJHpL6aQJ4mumzNWw8Rt1xEtDQyuGK9f+Y24jGA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.0.tgz", + "integrity": "sha512-9LBtCH2RkhDBwoAYksTtXljN6hlxxoL6a3ymNfXJG9JxFUQddOfhajXZdObFn/hgGkAFwx8dXqw+FnPm0FCzSg==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.12.tgz", - "integrity": "sha512-qQJHlZBG+QwVIA8AbTEtbvF084QgDi4DaUsUnA+EolY1bxrG+UyOuGflM2ZritGhfS/k7THFjJbjH2wIeoKA2g==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.0.tgz", + "integrity": "sha512-Xz7soOqWeCWcLp15biPM08To+s0k1E/2q0pQZNQ+SY9S5H2vU4ujDXqKjxFc24G9CrOeUNEOXTkh+JldBGbTCA==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.12.tgz", - "integrity": "sha512-2dSnm1ldL7Lppwlo04CGQUpwNn5hGqXI38OzaoPOkRsBRWFBozyGxTFSee/zHFS+Pdh3b28JJbRK3owrrRgWNw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.0.tgz", + "integrity": "sha512-fuBXTyUaZKxpmp43Nf0M1uI1OmZv/COcME9PG7NQ/EniwC680Xj5xQFhEBDVnvQQ+6xOnXdfPSojJq7gQxrORQ==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.12.tgz", - "integrity": "sha512-D4raxr02dcRiQNbxOLzpqBzcJNFAdsDNxjUbKkDMZBkL54Z0vZh4LRndycdZAMcIdizC/l/Yp/ZsBdAFxc5nbA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.0.tgz", + "integrity": "sha512-pQaECTKr/iCXtn1qjwih+cvoZzbZ+P3NwLQo4uo/IesklbPTR5eF4d85L1vPFVgff+itBMxbbB7aoRznSglN3A==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.12.tgz", - "integrity": "sha512-KuLCmYMb2kh05QuPJ+va60bKIH5wHL8ypDkmpy47lzwmdxNsuySeCMHuTv5o2Af1RUn5KLO5ZxaZeq4GEY7DaQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.0.tgz", + "integrity": "sha512-HiaqQX9HMb9u3eYvKZ86+m/paQwASJSIjXiRTFpFusypjtU2NJqWb/LiRvhfmwC6rb7YHwCSPx+juSM7M+20bA==", "dev": true, "optional": true }, + "esbuild-plugin-copy": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-copy/-/esbuild-plugin-copy-1.3.0.tgz", + "integrity": "sha512-LOx1xJOlAaCFMRtokHjsJfEkrosy3RDRa8SUHmn7loo0gwrouBQQwLAmOyMECshf7gSR1cPSRtAHu3KF/kQsyw==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "fs-extra": "^10.0.1", + "globby": "^11.0.3" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, "esbuild-sunos-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.12.tgz", - "integrity": "sha512-jBsF+e0woK3miKI8ufGWKG3o3rY9DpHvCVRn5eburMIIE+2c+y3IZ1srsthKyKI6kkXLvV4Cf/E7w56kLipMXw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.0.tgz", + "integrity": "sha512-TkMQOSiSU3fHLV3M+OKUgLZt5L7TpcBcMRvtFw1cTxAnX8eT+1qkWVLiDM8ow1C3P7PW3bkGY3LW8vOs8o/jBA==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.12.tgz", - "integrity": "sha512-L9m4lLFQrFeR7F+eLZXG82SbXZfUhyfu6CexZEil6vm+lc7GDCE0Q8DiNutkpzjv1+RAbIGVva9muItQ7HVTkQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.0.tgz", + "integrity": "sha512-0h7E50JHgyLd7TkqSIH0VzBhngWspxPHuq/crDAMnh4s4tW8zWCMLIz2c1HVwHfZsh7d5+C4/yBaQeJTHXGvIA==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.12.tgz", - "integrity": "sha512-k4tX4uJlSbSkfs78W5d9+I9gpd+7N95W7H2bgOMFPsYREVJs31+Q2gLLHlsnlY95zBoPQMIzHooUIsixQIBjaQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.0.tgz", + "integrity": "sha512-RxnovPOoQS5Id4mbdIUm96L0GIg+ZME4FthbErw1kZZabLi9eLp1gR3vSwkZXKbK8Z76uDkSW0EN74i1XWVpiQ==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.13.12", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.12.tgz", - "integrity": "sha512-2tTv/BpYRIvuwHpp2M960nG7uvL+d78LFW/ikPItO+2GfK51CswIKSetSpDii+cjz8e9iSPgs+BU4o8nWICBwQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.0.tgz", + "integrity": "sha512-66KsVlT6lGDWgDKQsAlojxgUhZkkjVeosMVRdb913OwtcOjszceg6zFD748jzp9CUgAseHCNJqFmYOyBzneSEQ==", "dev": true, "optional": true }, @@ -431,20 +2314,51 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "requires": { "pend": "~1.2.0" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -456,6 +2370,25 @@ "universalify": "^0.1.0" } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "optional": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "optional": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -465,6 +2398,15 @@ "pump": "^3.0.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -481,9 +2423,9 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "optional": true, "requires": { @@ -506,15 +2448,29 @@ } }, "globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "optional": true, "requires": { "define-properties": "^1.1.3" } }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -535,17 +2491,56 @@ } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "optional": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "optional": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "optional": true + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -559,29 +2554,50 @@ "dev": true, "optional": true }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, "optional": true }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -629,6 +2645,22 @@ "escape-string-regexp": "^4.0.0" } }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -636,24 +2668,24 @@ "dev": true }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "dev": true }, "ms": { @@ -687,19 +2719,19 @@ "optional": true }, "obsidian": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-0.15.1.tgz", - "integrity": "sha512-zE6jq3F/iMJTZ5x3lmn7OClS2U+T4VGbAsLrPmyJtc3X2UEEBmXbU4EVrx2+PmjVbgPie/etPWZvP9ZGwfgdAw==", + "version": "0.15.9", + "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-0.15.9.tgz", + "integrity": "sha512-w3JL/IM3/U61rjFSFIFDSv+pcHn3mH1EIRN40kBkC/lGYqjFSPbr6daQe08QkskBz/GAYIeBoaKQIcgU9vV3LQ==", "dev": true, "requires": { "@types/codemirror": "0.0.108", - "moment": "2.29.3" + "moment": "2.29.4" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -711,23 +2743,35 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "optional": true }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true }, "process-nextick-args": { @@ -745,7 +2789,7 @@ "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true, "optional": true }, @@ -759,6 +2803,12 @@ "once": "^1.3.1" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -777,12 +2827,18 @@ "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "requires": { "lowercase-keys": "^1.0.0" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -798,6 +2854,15 @@ "sprintf-js": "^1.1.2" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -813,7 +2878,7 @@ "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, "optional": true }, @@ -827,6 +2892,12 @@ "type-fest": "^0.13.1" } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -843,6 +2914,13 @@ "safe-buffer": "~5.1.0" } }, + "style-mod": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", + "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", + "dev": true, + "peer": true + }, "sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -852,12 +2930,30 @@ "debug": "^4.1.0" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -881,7 +2977,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "typescript": { @@ -899,7 +2995,7 @@ "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "requires": { "prepend-http": "^2.0.0" @@ -908,13 +3004,20 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "w3c-keyname": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", + "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", + "dev": true, + "peer": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "yallist": { @@ -927,7 +3030,7 @@ "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "requires": { "buffer-crc32": "~0.2.3", diff --git a/package.json b/package.json index 725004e..189754d 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "@types/node": "^16.11.6", "builtin-modules": "^3.2.0", "electron": "^13.6.2", - "esbuild": "0.13.12", + "esbuild": "0.14.0", + "esbuild-plugin-copy": "^1.3.0", "obsidian": "latest", "tslib": "2.3.1", "typescript": "4.4.4" diff --git a/src/main.ts b/src/main.ts index f2d3c91..171022b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -91,4 +91,4 @@ export default class CustomFramesPlugin extends Plugin { this.app.workspace.revealLeaf(this.app.workspace.getLeavesOfType(name)[0]); } } -} \ No newline at end of file +} diff --git a/src/settings.ts b/src/settings.ts index 66c249b..f6b977a 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -44,9 +44,9 @@ div.dwlvNd { zoomLevel: 1, forceIframe: false, customCss: `/* hide the menu bar and the "Keep" text */ -html > body > div:nth-child(2) > div:nth-child(2) > div:first-child, -html > body > div:first-child > header:first-child > div > div:first-child > div > div:first-child > a:first-child > span { - display: none !important; +html > body > div:nth-child(2) > div:nth-child(2) > div:first-child, +html > body > div:first-child > header:first-child > div > div:first-child > div > div:first-child > a:first-child > span { + display: none !important; }` }, "todoist": { @@ -119,4 +119,4 @@ export interface CustomFrameSettings { export function getIcon(settings: CustomFrameSettings) { return settings.icon ? `lucide-${settings.icon}` : "documents"; -} \ No newline at end of file +} diff --git a/test-vault/.obsidian/app.json b/test-vault/.obsidian/app.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/test-vault/.obsidian/app.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test-vault/.obsidian/appearance.json b/test-vault/.obsidian/appearance.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/test-vault/.obsidian/appearance.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test-vault/.obsidian/community-plugins.json b/test-vault/.obsidian/community-plugins.json new file mode 100644 index 0000000..ce09d4c --- /dev/null +++ b/test-vault/.obsidian/community-plugins.json @@ -0,0 +1,3 @@ +[ + "obsidian-custom-frames" +] \ No newline at end of file diff --git a/test-vault/.obsidian/core-plugins.json b/test-vault/.obsidian/core-plugins.json new file mode 100644 index 0000000..96869df --- /dev/null +++ b/test-vault/.obsidian/core-plugins.json @@ -0,0 +1,19 @@ +[ + "file-explorer", + "global-search", + "switcher", + "graph", + "backlink", + "outgoing-link", + "tag-pane", + "page-preview", + "daily-notes", + "templates", + "note-composer", + "command-palette", + "editor-status", + "starred", + "outline", + "word-count", + "file-recovery" +] \ No newline at end of file diff --git a/test-vault/.obsidian/hotkeys.json b/test-vault/.obsidian/hotkeys.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/test-vault/.obsidian/hotkeys.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js new file mode 100644 index 0000000..4533e06 --- /dev/null +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js @@ -0,0 +1,541 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); +var __export = (target, all) => { + __markAsModule(target); + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __reExport = (target, module2, desc) => { + if (module2 && typeof module2 === "object" || typeof module2 === "function") { + for (let key of __getOwnPropNames(module2)) + if (!__hasOwnProp.call(target, key) && key !== "default") + __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); + } + return target; +}; +var __toModule = (module2) => { + return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); +}; +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + +// src/main.ts +__export(exports, { + default: () => CustomFramesPlugin +}); +var import_obsidian4 = __toModule(require("obsidian")); + +// src/frame.ts +var import_obsidian = __toModule(require("obsidian")); +var CustomFrame = class { + constructor(settings, data) { + this.settings = settings; + this.data = data; + } + create(additionalStyle = void 0, urlSuffix = void 0) { + let style = `padding: ${this.settings.padding}px;`; + if (additionalStyle) + style += additionalStyle; + if (import_obsidian.Platform.isDesktopApp && !this.data.forceIframe) { + this.frame = document.createElement("webview"); + this.frame.setAttribute("allowpopups", ""); + this.frame.addEventListener("dom-ready", () => { + this.frame.setZoomFactor(this.data.zoomLevel); + this.frame.insertCSS(this.data.customCss); + }); + } else { + this.frame = document.createElement("iframe"); + this.frame.setAttribute("sandbox", "allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation"); + this.frame.setAttribute("allow", "encrypted-media; fullscreen; oversized-images; picture-in-picture; sync-xhr; geolocation;"); + style += `transform: scale(${this.data.zoomLevel}); transform-origin: 0 0;`; + } + this.frame.addClass("custom-frames-frame"); + this.frame.setAttribute("style", style); + let src = this.data.url; + if (urlSuffix) { + if (!urlSuffix.startsWith("/")) + src += "/"; + src += urlSuffix; + } + this.frame.setAttribute("src", src); + return this.frame; + } + refresh() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.location.reload(); + } else { + this.frame.reload(); + } + } + return() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.open(this.data.url); + } else { + this.frame.loadURL(this.data.url); + } + } + goBack() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.history.back(); + } else { + this.frame.goBack(); + } + } + goForward() { + if (this.frame instanceof HTMLIFrameElement) { + this.frame.contentWindow.history.forward(); + } else { + this.frame.goForward(); + } + } + toggleDevTools() { + if (!(this.frame instanceof HTMLIFrameElement)) { + if (!this.frame.isDevToolsOpened()) { + this.frame.openDevTools(); + } else { + this.frame.closeDevTools(); + } + } + } + getCurrentUrl() { + return this.frame instanceof HTMLIFrameElement ? this.frame.contentWindow.location.href : this.frame.getURL(); + } +}; + +// src/settings.ts +var defaultSettings = { + frames: [], + padding: 5 +}; +var presets = { + "obsidian": { + url: "https://forum.obsidian.md/", + displayName: "Obsidian Forum", + icon: "edit", + hideOnMobile: true, + addRibbonIcon: true, + openInCenter: true, + zoomLevel: 1, + forceIframe: false, + customCss: "" + }, + "calendar": { + url: "https://calendar.google.com/calendar/u/0/r/day", + displayName: "Google Calendar", + icon: "calendar", + hideOnMobile: true, + addRibbonIcon: true, + openInCenter: true, + zoomLevel: 1, + forceIframe: false, + customCss: `/* hide right-side menu, and some buttons */ +div.d6McF, +div.pw6cBb, +div.gb_Td.gb_Va.gb_Id, +div.Kk7lMc-QWPxkf-LgbsSe-haAclf, +div.h8Aqhb, +div.gboEAb, +div.dwlvNd { + display: none !important; +}` + }, + "keep": { + url: "https://keep.google.com", + displayName: "Google Keep", + icon: "files", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: `/* hide the menu bar and the "Keep" text */ +html > body > div:nth-child(2) > div:nth-child(2) > div:first-child, +html > body > div:first-child > header:first-child > div > div:first-child > div > div:first-child > a:first-child > span { + display: none !important; +}` + }, + "todoist": { + url: "https://todoist.com", + displayName: "Todoist", + icon: "list-checks", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: `/* hide the help, home, search, and productivity overview buttons, create extra space, and prevent toast pop-up from acting weird */ +[aria-label="Go to Home view"], #quick_find, [aria-label="Productivity"], [aria-label="Help & Feedback"] { + display: none !important; +} + +.view_content { + padding-left: 15px; +} + +.view_header { + padding-left: 15px; + padding-top: 10px; +} + +.undo_toast { + width: 95%; +}` + }, + "notion": { + url: "https://www.notion.so/", + displayName: "Notion", + icon: "box", + hideOnMobile: true, + addRibbonIcon: true, + openInCenter: true, + zoomLevel: 1, + forceIframe: false, + customCss: "" + }, + "twitter": { + url: "https://twitter.com", + displayName: "Twitter", + icon: "twitter", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: "" + } +}; +function getIcon(settings) { + return settings.icon ? `lucide-${settings.icon}` : "documents"; +} + +// src/settings-tab.ts +var import_obsidian2 = __toModule(require("obsidian")); +var CustomFramesSettingTab = class extends import_obsidian2.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + this.containerEl.empty(); + this.containerEl.createEl("h2", { text: "Custom Frames Settings" }); + this.containerEl.createEl("p", { text: "Note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); + new import_obsidian2.Setting(this.containerEl).setName("Frame Padding").setDesc("The padding that should be left around the inside of custom frame panes, in pixels.").addText((t) => { + t.inputEl.type = "number"; + t.setValue(String(this.plugin.settings.padding)); + t.onChange((v) => __async(this, null, function* () { + this.plugin.settings.padding = v.length ? Number(v) : defaultSettings.padding; + yield this.plugin.saveSettings(); + })); + }); + for (let frame of this.plugin.settings.frames) { + let heading = this.containerEl.createEl("h3", { text: frame.displayName || "Unnamed Frame" }); + let toggle = new import_obsidian2.ButtonComponent(this.containerEl).setButtonText("Show Settings").setClass("custom-frames-show").onClick(() => __async(this, null, function* () { + content.hidden = !content.hidden; + toggle.setButtonText(content.hidden ? "Show Settings" : "Hide Settings"); + })); + let content = this.containerEl.createDiv(); + content.hidden = true; + new import_obsidian2.Setting(content).setName("Display Name").setDesc("The display name that this frame should have.").addText((t) => { + t.setValue(frame.displayName); + t.onChange((v) => __async(this, null, function* () { + frame.displayName = v; + heading.setText(frame.displayName || "Unnamed Frame"); + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Icon").setDesc(createFragment((f) => { + f.createSpan({ text: "The icon that this frame's pane should have. The names of any " }); + f.createEl("a", { text: "Lucide icons", href: "https://lucide.dev/" }); + f.createSpan({ text: " can be used." }); + })).addText((t) => { + t.setValue(frame.icon); + t.onChange((v) => __async(this, null, function* () { + frame.icon = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("URL").setDesc("The URL that should be opened in this frame.").addText((t) => { + t.setValue(frame.url); + t.onChange((v) => __async(this, null, function* () { + frame.url = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Disable on Mobile").setDesc("Custom Frames is a lot more restricted on mobile devices and doesn't allow for the same types of content to be displayed. If a frame doesn't work as expected on mobile, it can be disabled.").addToggle((t) => { + t.setValue(frame.hideOnMobile); + t.onChange((v) => __async(this, null, function* () { + frame.hideOnMobile = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Add Ribbon Icon").setDesc("Whether a button to open this frame should be added to the ribbon.").addToggle((t) => { + t.setValue(frame.addRibbonIcon); + t.onChange((v) => __async(this, null, function* () { + frame.addRibbonIcon = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Open in Center").setDesc("Whether this frame should be opened in the unpinned center editor rather than one of the panes on the side. This is useful for sites that don't work well in a narrow view, or sites that don't require a note to be open when viewed.").addToggle((t) => { + t.setValue(frame.openInCenter); + t.onChange((v) => __async(this, null, function* () { + frame.openInCenter = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Force iframe").setDesc(createFragment((f) => { + f.createSpan({ text: "Whether this frame should use iframes on desktop as opposed to Electron webviews." }); + f.createEl("br"); + f.createEl("em", { text: "Only enable this setting if the frame is causing issues or frequent crashes. This setting causes all Desktop-only settings to be ignored." }); + })).addToggle((t) => { + t.setValue(frame.forceIframe); + t.onChange((v) => __async(this, null, function* () { + frame.forceIframe = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Page Zoom").setDesc("The zoom that this frame's page should be displayed with, as a percentage.").addText((t) => { + t.inputEl.type = "number"; + t.setValue(String(frame.zoomLevel * 100)); + t.onChange((v) => __async(this, null, function* () { + frame.zoomLevel = v.length ? Number(v) / 100 : 1; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.Setting(content).setName("Additional CSS").setDesc(createFragment((f) => { + f.createSpan({ text: "A snippet of additional CSS that should be applied to this frame." }); + f.createEl("br"); + f.createEl("em", { text: "Note that this is only applied on Desktop." }); + })).addTextArea((t) => { + t.inputEl.rows = 5; + t.inputEl.cols = 50; + t.setValue(frame.customCss); + t.onChange((v) => __async(this, null, function* () { + frame.customCss = v; + yield this.plugin.saveSettings(); + })); + }); + new import_obsidian2.ButtonComponent(content).setButtonText("Remove Frame").onClick(() => __async(this, null, function* () { + this.plugin.settings.frames.remove(frame); + yield this.plugin.saveSettings(); + this.display(); + })); + } + this.containerEl.createEl("hr"); + let info = this.containerEl.createEl("p", { text: `Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the "Custom Frames: Open" command.` }); + info.createEl("br"); + info.createSpan({ text: "Note that Obsidian has to be restarted or reloaded to activate a newly added frame.", cls: "mod-warning" }); + let addDiv = this.containerEl.createDiv(); + let dropdown = new import_obsidian2.DropdownComponent(addDiv); + dropdown.addOption("new", "Custom"); + for (let key of Object.keys(presets)) + dropdown.addOption(key, presets[key].displayName); + new import_obsidian2.ButtonComponent(addDiv).setButtonText("Add Frame").setClass("custom-frames-add").onClick(() => __async(this, null, function* () { + let option = dropdown.getValue(); + if (option == "new") { + this.plugin.settings.frames.push({ + url: "", + displayName: "New Frame", + icon: "", + hideOnMobile: true, + addRibbonIcon: false, + openInCenter: false, + zoomLevel: 1, + forceIframe: false, + customCss: "" + }); + } else { + this.plugin.settings.frames.push(presets[option]); + } + yield this.plugin.saveSettings(); + this.display(); + })); + this.containerEl.createEl("hr"); + this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" }); + this.containerEl.createEl("a", { href: "https://ellpeck.de/support" }).createEl("img", { attr: { src: "https://ellpeck.de/res/generalsupport.png" }, cls: "custom-frames-support" }); + } +}; + +// src/view.ts +var import_obsidian3 = __toModule(require("obsidian")); +var _CustomFrameView = class extends import_obsidian3.ItemView { + constructor(leaf, settings, data, name) { + super(leaf); + this.data = data; + this.name = name; + this.frame = new CustomFrame(settings, data); + for (let action of _CustomFrameView.actions) + this.addAction(action.icon, action.name, () => action.action(this)); + } + onload() { + this.contentEl.empty(); + this.contentEl.addClass("custom-frames-view"); + this.contentEl.appendChild(this.frame.create()); + } + onHeaderMenu(menu) { + super.onHeaderMenu(menu); + for (let action of _CustomFrameView.actions) { + menu.addItem((i) => { + i.setTitle(action.name); + i.setIcon(action.icon); + i.onClick(() => action.action(this)); + }); + } + } + getViewType() { + return this.name; + } + getDisplayText() { + return this.data.displayName; + } + getIcon() { + return getIcon(this.data); + } +}; +var CustomFrameView = _CustomFrameView; +CustomFrameView.actions = [ + { + name: "Return to original page", + icon: "home", + action: (v) => v.frame.return() + }, + { + name: "Open dev tools", + icon: "binary", + action: (v) => v.frame.toggleDevTools() + }, + { + name: "Copy link", + icon: "link", + action: (v) => navigator.clipboard.writeText(v.frame.getCurrentUrl()) + }, + { + name: "Open in browser", + icon: "globe", + action: (v) => open(v.frame.getCurrentUrl()) + }, + { + name: "Refresh", + icon: "refresh-cw", + action: (v) => v.frame.refresh() + }, + { + name: "Go back", + icon: "arrow-left", + action: (v) => v.frame.goBack() + }, + { + name: "Go forward", + icon: "arrow-right", + action: (v) => v.frame.goForward() + } +]; + +// src/main.ts +var CustomFramesPlugin = class extends import_obsidian4.Plugin { + onload() { + return __async(this, null, function* () { + yield this.loadSettings(); + for (let frame of this.settings.frames) { + if (!frame.url || !frame.displayName) + continue; + let name = `custom-frames-${frame.displayName.toLowerCase().replace(/\s/g, "-")}`; + if (import_obsidian4.Platform.isMobileApp && frame.hideOnMobile) { + console.log(`Skipping frame ${name} which is hidden on mobile`); + continue; + } + try { + console.log(`Registering frame ${name} for URL ${frame.url}`); + this.registerView(name, (l) => new CustomFrameView(l, this.settings, frame, name)); + this.addCommand({ + id: `open-${name}`, + name: `Open ${frame.displayName}`, + callback: () => this.openLeaf(name, frame.openInCenter, false) + }); + if (frame.addRibbonIcon) + this.addRibbonIcon(getIcon(frame), `Open ${frame.displayName}`, (e) => this.openLeaf(name, frame.openInCenter, import_obsidian4.Platform.isMacOS ? e.metaKey : e.ctrlKey)); + } catch (e) { + console.error(`Couldn't register frame ${name}, is there already one with the same name?`); + } + } + this.addSettingTab(new CustomFramesSettingTab(this.app, this)); + this.registerMarkdownCodeBlockProcessor("custom-frames", (s, e) => { + e.empty(); + e.addClass("custom-frames-view-file"); + let frameMatch = /frame:([^\n]+)/gi.exec(s); + let frameName = frameMatch && frameMatch[1].trim(); + if (!frameName) { + e.createSpan({ text: "Couldn't parse frame name" }); + return; + } + let data = this.settings.frames.find((f) => f.displayName == frameName); + if (!data) { + e.createSpan({ text: `Couldn't find a frame with name ${frameName}` }); + return; + } + if (import_obsidian4.Platform.isMobileApp && data.hideOnMobile) { + e.createSpan({ text: `${frameName} is hidden on mobile` }); + return; + } + let styleMatch = /style:([^\n]+)/gi.exec(s); + let style = styleMatch && styleMatch[1].trim(); + style || (style = "height: 600px;"); + let urlSuffixMatch = /urlsuffix:([^\n]+)/gi.exec(s); + let urlSuffix = urlSuffixMatch && urlSuffixMatch[1].trim(); + urlSuffix || (urlSuffix = ""); + let frame = new CustomFrame(this.settings, data); + e.appendChild(frame.create(style, urlSuffix)); + }); + }); + } + loadSettings() { + return __async(this, null, function* () { + this.settings = Object.assign({}, defaultSettings, yield this.loadData()); + }); + } + saveSettings() { + return __async(this, null, function* () { + yield this.saveData(this.settings); + }); + } + openLeaf(name, center, split) { + return __async(this, null, function* () { + if (center) { + this.app.workspace.detachLeavesOfType(name); + let leaf = this.app.workspace.getLeaf(split); + yield leaf.setViewState({ type: name, active: true }); + } else { + if (!this.app.workspace.getLeavesOfType(name).length) + yield this.app.workspace.getRightLeaf(false).setViewState({ type: name, active: true }); + this.app.workspace.revealLeaf(this.app.workspace.getLeavesOfType(name)[0]); + } + }); + } +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVWaWV3IH0gZnJvbSBcIi4vdmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRnJhbWVzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdGZvciAobGV0IGZyYW1lIG9mIHRoaXMuc2V0dGluZ3MuZnJhbWVzKSB7XHJcblx0XHRcdGlmICghZnJhbWUudXJsIHx8ICFmcmFtZS5kaXNwbGF5TmFtZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0bGV0IG5hbWUgPSBgY3VzdG9tLWZyYW1lcy0ke2ZyYW1lLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiLVwiKX1gO1xyXG5cdFx0XHRpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHAgJiYgZnJhbWUuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFNraXBwaW5nIGZyYW1lICR7bmFtZX0gd2hpY2ggaXMgaGlkZGVuIG9uIG1vYmlsZWApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFJlZ2lzdGVyaW5nIGZyYW1lICR7bmFtZX0gZm9yIFVSTCAke2ZyYW1lLnVybH1gKTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZWdpc3RlclZpZXcobmFtZSwgbCA9PiBuZXcgQ3VzdG9tRnJhbWVWaWV3KGwsIHRoaXMuc2V0dGluZ3MsIGZyYW1lLCBuYW1lKSk7XHJcblx0XHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRcdGlkOiBgb3Blbi0ke25hbWV9YCxcclxuXHRcdFx0XHRcdG5hbWU6IGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgZmFsc2UpLFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAoZnJhbWUuYWRkUmliYm9uSWNvbilcclxuXHRcdFx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihnZXRJY29uKGZyYW1lKSwgYE9wZW4gJHtmcmFtZS5kaXNwbGF5TmFtZX1gLFxyXG5cdFx0XHRcdFx0XHRlID0+IHRoaXMub3BlbkxlYWYobmFtZSwgZnJhbWUub3BlbkluQ2VudGVyLCBQbGF0Zm9ybS5pc01hY09TID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSk7XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IHJlZ2lzdGVyIGZyYW1lICR7bmFtZX0sIGlzIHRoZXJlIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgbmFtZT9gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcImN1c3RvbS1mcmFtZXNcIiwgKHMsIGUpID0+IHtcclxuXHRcdFx0ZS5lbXB0eSgpO1xyXG5cdFx0XHRlLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3LWZpbGVcIik7XHJcblxyXG5cdFx0XHRsZXQgZnJhbWVNYXRjaCA9IC9mcmFtZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IGZyYW1lTmFtZSA9IGZyYW1lTWF0Y2ggJiYgZnJhbWVNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdGlmICghZnJhbWVOYW1lKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogXCJDb3VsZG4ndCBwYXJzZSBmcmFtZSBuYW1lXCIgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBkYXRhID0gdGhpcy5zZXR0aW5ncy5mcmFtZXMuZmluZChmID0+IGYuZGlzcGxheU5hbWUgPT0gZnJhbWVOYW1lKTtcclxuXHRcdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYENvdWxkbid0IGZpbmQgYSBmcmFtZSB3aXRoIG5hbWUgJHtmcmFtZU5hbWV9YCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGRhdGEuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYCR7ZnJhbWVOYW1lfSBpcyBoaWRkZW4gb24gbW9iaWxlYCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCBzdHlsZU1hdGNoID0gL3N0eWxlOihbXlxcbl0rKS9naS5leGVjKHMpO1xyXG5cdFx0XHRsZXQgc3R5bGUgPSBzdHlsZU1hdGNoICYmIHN0eWxlTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRzdHlsZSB8fD0gXCJoZWlnaHQ6IDYwMHB4O1wiO1xyXG5cclxuXHRcdFx0bGV0IHVybFN1ZmZpeE1hdGNoID0gL3VybHN1ZmZpeDooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHVybFN1ZmZpeCA9IHVybFN1ZmZpeE1hdGNoICYmIHVybFN1ZmZpeE1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0dXJsU3VmZml4IHx8PSBcIlwiO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHRoaXMuc2V0dGluZ3MsIGRhdGEpO1xyXG5cdFx0XHRlLmFwcGVuZENoaWxkKGZyYW1lLmNyZWF0ZShzdHlsZSwgdXJsU3VmZml4KSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBvcGVuTGVhZihuYW1lOiBzdHJpbmcsIGNlbnRlcjogYm9vbGVhbiwgc3BsaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLmRldGFjaExlYXZlc09mVHlwZShuYW1lKTtcclxuXHRcdFx0bGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihzcGxpdCk7XHJcblx0XHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpLmxlbmd0aClcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0UmlnaHRMZWFmKGZhbHNlKS5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoYWRkaXRpb25hbFN0eWxlOiBzdHJpbmcgPSB1bmRlZmluZWQsIHVybFN1ZmZpeDogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd3BvcHVwc1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5hZGRFdmVudExpc3RlbmVyKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Wm9vbUZhY3Rvcih0aGlzLmRhdGEuem9vbUxldmVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuaW5zZXJ0Q1NTKHRoaXMuZGF0YS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXMgYWxsb3ctbW9kYWxzIGFsbG93LXBvcHVwcyBhbGxvdy1wcmVzZW50YXRpb24gYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25cIik7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwiYWxsb3dcIiwgXCJlbmNyeXB0ZWQtbWVkaWE7IGZ1bGxzY3JlZW47IG92ZXJzaXplZC1pbWFnZXM7IHBpY3R1cmUtaW4tcGljdHVyZTsgc3luYy14aHI7IGdlb2xvY2F0aW9uO1wiKTtcclxuICAgICAgICAgICAgc3R5bGUgKz0gYHRyYW5zZm9ybTogc2NhbGUoJHt0aGlzLmRhdGEuem9vbUxldmVsfSk7IHRyYW5zZm9ybS1vcmlnaW46IDAgMDtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy1mcmFtZVwiKTtcclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgbGV0IHNyYyA9IHRoaXMuZGF0YS51cmw7XHJcbiAgICAgICAgaWYgKHVybFN1ZmZpeCkge1xyXG4gICAgICAgICAgICBpZiAoIXVybFN1ZmZpeC5zdGFydHNXaXRoKFwiL1wiKSlcclxuICAgICAgICAgICAgICAgIHNyYyArPSBcIi9cIjtcclxuICAgICAgICAgICAgc3JjICs9IHVybFN1ZmZpeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Gb3J3YXJkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29Gb3J3YXJkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcbn0iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBCdXR0b25Db21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgcHJlc2V0cyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21GcmFtZXNQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW4pIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJDdXN0b20gRnJhbWVzIFNldHRpbmdzXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIk5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgbGV0IGluZm8gPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiQ3JlYXRlIGEgbmV3IGZyYW1lLCBlaXRoZXIgZnJvbSBhIHByZXNldCBzaGlwcGVkIHdpdGggdGhlIHBsdWdpbiwgb3IgYSBjdXN0b20gb25lIHRoYXQgeW91IGNhbiBlZGl0IHlvdXJzZWxmLiBFYWNoIGZyYW1lJ3MgcGFuZSBjYW4gYmUgb3BlbmVkIHVzaW5nIHRoZSBcXFwiQ3VzdG9tIEZyYW1lczogT3BlblxcXCIgY29tbWFuZC5cIiB9KTtcclxuICAgICAgICBpbmZvLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgaW5mby5jcmVhdGVTcGFuKHsgdGV4dDogXCJOb3RlIHRoYXQgT2JzaWRpYW4gaGFzIHRvIGJlIHJlc3RhcnRlZCBvciByZWxvYWRlZCB0byBhY3RpdmF0ZSBhIG5ld2x5IGFkZGVkIGZyYW1lLlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbGV0IGFkZERpdiA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgbGV0IGRyb3Bkb3duID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KGFkZERpdik7XHJcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibmV3XCIsIFwiQ3VzdG9tXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhwcmVzZXRzKSlcclxuICAgICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKGtleSwgcHJlc2V0c1trZXldLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGFkZERpdilcclxuICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJBZGQgRnJhbWVcIilcclxuICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1hZGRcIilcclxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRyb3Bkb3duLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiTmV3IEZyYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2gocHJlc2V0c1tvcHRpb25dKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luIGFuZCB3YW50IHRvIHN1cHBvcnQgaXRzIGRldmVsb3BtZW50LCB5b3UgY2FuIGRvIHNvIHRocm91Z2ggbXkgd2Vic2l0ZSBieSBjbGlja2luZyB0aGlzIGZhbmN5IGltYWdlIVwiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL2VsbHBlY2suZGUvc3VwcG9ydFwiIH0pXHJcbiAgICAgICAgICAgIC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiBcImh0dHBzOi8vZWxscGVjay5kZS9yZXMvZ2VuZXJhbHN1cHBvcnQucG5nXCIgfSwgY2xzOiBcImN1c3RvbS1mcmFtZXMtc3VwcG9ydFwiIH0pO1xyXG4gICAgfVxyXG59IiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IZWFkZXJNZW51KG1lbnU6IE1lbnUpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5vbkhlYWRlck1lbnUobWVudSk7XHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIG1lbnUuYWRkSXRlbShpID0+IHtcclxuICAgICAgICAgICAgICAgIGkuc2V0VGl0bGUoYWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaS5zZXRJY29uKGFjdGlvbi5pY29uKTtcclxuICAgICAgICAgICAgICAgIGkub25DbGljaygoKSA9PiBhY3Rpb24uYWN0aW9uKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBnZXRJY29uKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWlDOzs7QUNBakMsc0JBQXlCO0FBR2xCLHdCQUFrQjtBQUFBLEVBTXJCLFlBQVksVUFBZ0MsTUFBMkI7QUFDbkUsU0FBSyxXQUFXO0FBQ2hCLFNBQUssT0FBTztBQUFBO0FBQUEsRUFHVCxPQUFPLGtCQUEwQixRQUFXLFlBQW9CLFFBQWdCO0FBQ25GLFFBQUksUUFBUSxZQUFZLEtBQUssU0FBUztBQUN0QyxRQUFJO0FBQ0EsZUFBUztBQUNiLFFBQUkseUJBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGFBQWE7QUFDakQsV0FBSyxRQUFRLFNBQVMsY0FBYztB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 diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/manifest.json b/test-vault/.obsidian/plugins/obsidian-custom-frames/manifest.json new file mode 100644 index 0000000..33fc48e --- /dev/null +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-custom-frames", + "name": "Custom Frames", + "version": "2.4.2", + "minAppVersion": "0.14.5", + "description": "A plugin that turns web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.", + "author": "Ellpeck", + "authorUrl": "https://ellpeck.de", + "isDesktopOnly": false +} diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/styles.css b/test-vault/.obsidian/plugins/obsidian-custom-frames/styles.css new file mode 100644 index 0000000..8dad984 --- /dev/null +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/styles.css @@ -0,0 +1,31 @@ +.custom-frames-view { + padding: 0 !important; + overflow: hidden !important; +} + +.custom-frames-view-file { + padding: 0; + overflow: auto; +} + +.custom-frames-frame { + width: 100%; + height: 100%; + border: none; + background-color: white; + background-clip: content-box; +} + +.custom-frames-add { + margin-left: 10px; +} + +.custom-frames-show { + margin-bottom: 18px; +} + +.custom-frames-support { + max-width: 50%; + width: 400px; + height: auto; +} diff --git a/test-vault/.obsidian/workspace b/test-vault/.obsidian/workspace new file mode 100644 index 0000000..f766a6d --- /dev/null +++ b/test-vault/.obsidian/workspace @@ -0,0 +1,133 @@ +{ + "main": { + "id": "c1516e0860f8ca2d", + "type": "split", + "children": [ + { + "id": "cbc6da4aa7697308", + "type": "leaf", + "state": { + "type": "custom-frames-obsidian-forum", + "state": {} + } + } + ], + "direction": "vertical" + }, + "left": { + "id": "f48d3cfe4b95c092", + "type": "split", + "children": [ + { + "id": "f1178df345e439d7", + "type": "tabs", + "children": [ + { + "id": "1953d881032399d7", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": {} + } + }, + { + "id": "36f241641b1334c7", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + } + } + }, + { + "id": "2b4a59e1687c8b13", + "type": "leaf", + "state": { + "type": "starred", + "state": {} + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "48128f792502a876", + "type": "split", + "children": [ + { + "id": "6635b8a61f3363dc", + "type": "tabs", + "children": [ + { + "id": "8b8ee33059b392df", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "1a5164ddf50fc39d", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "linksCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "360f0e93e58b9472", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true + } + } + }, + { + "id": "edb9a559fde3ae0c", + "type": "leaf", + "state": { + "type": "outline", + "state": {} + } + }, + { + "id": "d77c1f6b102072c2", + "type": "leaf", + "state": { + "type": "custom-frames-google-keep", + "state": {} + } + } + ], + "currentTab": 4 + } + ], + "direction": "horizontal", + "width": 388 + }, + "active": "d77c1f6b102072c2", + "lastOpenFiles": [] +} \ No newline at end of file