obsidian-integration-testing 11.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/appium-server-marker.cjs +115 -0
- package/dist/lib/cjs/appium-server-marker.d.cts +81 -0
- package/dist/lib/cjs/cli.cjs +104 -19
- package/dist/lib/cjs/cli.d.cts +16 -8
- package/dist/lib/cjs/community-plugin-registry.cjs +52 -0
- package/dist/lib/cjs/community-plugin-registry.d.cts +116 -0
- package/dist/lib/cjs/context-provider.cjs +12 -1
- package/dist/lib/cjs/context-provider.d.cts +26 -3
- package/dist/lib/cjs/demo-vault-bootstrap.cjs +148 -0
- package/dist/lib/cjs/demo-vault-bootstrap.d.cts +113 -0
- package/dist/lib/cjs/demo-vault-populate.cjs +36 -9
- package/dist/lib/cjs/demo-vault-populate.d.cts +70 -0
- package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/eval-in-obsidian.d.cts +42 -13
- package/dist/lib/cjs/index.cjs +13 -1
- package/dist/lib/cjs/index.d.cts +8 -4
- package/dist/lib/cjs/installer-asset.cjs +1 -1
- package/dist/lib/cjs/installer-asset.d.cts +1 -1
- package/dist/lib/cjs/integration-setup-failed-error.cjs +62 -0
- package/dist/lib/cjs/integration-setup-failed-error.d.cts +66 -0
- package/dist/lib/cjs/jest/global-setup.cjs +2 -2
- package/dist/lib/cjs/jest/global-setup.d.cts +5 -1
- package/dist/lib/cjs/kill-process-tree.cjs +18 -7
- package/dist/lib/cjs/kill-process-tree.d.cts +10 -2
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +161 -0
- package/dist/lib/cjs/mobile-input.d.cts +160 -0
- package/dist/lib/cjs/namespace-bootstrap.cjs +92 -9
- package/dist/lib/cjs/obsidian-installer.cjs +1 -1
- package/dist/lib/cjs/obsidian-metadata.cjs +123 -17
- package/dist/lib/cjs/obsidian-metadata.d.cts +17 -6
- package/dist/lib/cjs/obsidian-version-switch.cjs +3 -3
- package/dist/lib/cjs/release-catalog.cjs +73 -0
- package/dist/lib/cjs/release-catalog.d.cts +125 -0
- package/dist/lib/cjs/transport-appium.cjs +122 -1
- package/dist/lib/cjs/transport-appium.d.cts +51 -0
- package/dist/lib/cjs/transport-desktop-cdp.cjs +7 -1
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +1 -0
- package/dist/lib/cjs/transport-factory.cjs +237 -32
- package/dist/lib/cjs/transport-factory.d.cts +10 -1
- package/dist/lib/cjs/vitest/global-setup.cjs +13 -7
- package/dist/lib/cjs/vitest/global-setup.d.cts +5 -1
- package/dist/lib/cjs/vitest/setup.cjs +2 -1
- package/dist/lib/cjs/vitest/setup.d.cts +5 -0
- package/dist/lib/cjs/vitest/typings.d.cts +6 -4
- package/dist/lib/cjs/webview-cdp.cjs +264 -0
- package/dist/lib/cjs/webview-cdp.d.cts +152 -0
- package/dist/lib/cjs/wedged-appium-server.cjs +113 -0
- package/dist/lib/cjs/wedged-appium-server.d.cts +187 -0
- package/dist/lib/esm/appium-server-marker.d.mts +81 -0
- package/dist/lib/esm/appium-server-marker.mjs +83 -0
- package/dist/lib/esm/cli.d.mts +16 -8
- package/dist/lib/esm/cli.mjs +110 -19
- package/dist/lib/esm/community-plugin-registry.d.mts +116 -0
- package/dist/lib/esm/community-plugin-registry.mjs +23 -0
- package/dist/lib/esm/context-provider.d.mts +26 -3
- package/dist/lib/esm/context-provider.mjs +10 -1
- package/dist/lib/esm/demo-vault-bootstrap.d.mts +113 -0
- package/dist/lib/esm/demo-vault-bootstrap.mjs +127 -0
- package/dist/lib/esm/demo-vault-populate.d.mts +70 -0
- package/dist/lib/esm/demo-vault-populate.mjs +33 -8
- package/dist/lib/esm/eval-in-obsidian.d.mts +42 -13
- package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
- package/dist/lib/esm/index.d.mts +8 -4
- package/dist/lib/esm/index.mjs +16 -2
- package/dist/lib/esm/installer-asset.d.mts +1 -1
- package/dist/lib/esm/installer-asset.mjs +1 -1
- package/dist/lib/esm/integration-setup-failed-error.d.mts +66 -0
- package/dist/lib/esm/integration-setup-failed-error.mjs +38 -0
- package/dist/lib/esm/jest/global-setup.d.mts +5 -1
- package/dist/lib/esm/jest/global-setup.mjs +2 -2
- package/dist/lib/esm/kill-process-tree.d.mts +10 -2
- package/dist/lib/esm/kill-process-tree.mjs +16 -6
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.d.mts +160 -0
- package/dist/lib/esm/mobile-input.mjs +132 -0
- package/dist/lib/esm/namespace-bootstrap.mjs +95 -9
- package/dist/lib/esm/obsidian-installer.mjs +1 -1
- package/dist/lib/esm/obsidian-metadata.d.mts +17 -6
- package/dist/lib/esm/obsidian-metadata.mjs +123 -17
- package/dist/lib/esm/obsidian-version-switch.mjs +3 -3
- package/dist/lib/esm/release-catalog.d.mts +125 -0
- package/dist/lib/esm/release-catalog.mjs +46 -0
- package/dist/lib/esm/transport-appium.d.mts +51 -0
- package/dist/lib/esm/transport-appium.mjs +126 -1
- package/dist/lib/esm/transport-desktop-cdp.d.mts +1 -0
- package/dist/lib/esm/transport-desktop-cdp.mjs +7 -1
- package/dist/lib/esm/transport-factory.d.mts +10 -1
- package/dist/lib/esm/transport-factory.mjs +249 -35
- package/dist/lib/esm/vitest/global-setup.d.mts +5 -1
- package/dist/lib/esm/vitest/global-setup.mjs +14 -7
- package/dist/lib/esm/vitest/setup.d.mts +5 -0
- package/dist/lib/esm/vitest/setup.mjs +3 -1
- package/dist/lib/esm/vitest/typings.d.mts +6 -4
- package/dist/lib/esm/webview-cdp.d.mts +152 -0
- package/dist/lib/esm/webview-cdp.mjs +236 -0
- package/dist/lib/esm/wedged-appium-server.d.mts +187 -0
- package/dist/lib/esm/wedged-appium-server.mjs +86 -0
- package/package.json +2 -1
|
@@ -20,9 +20,19 @@
|
|
|
20
20
|
* The concrete JS runtime versions an installer's Electron shell ships — the
|
|
21
21
|
* **entire** `process.versions` object, read empirically by booting that
|
|
22
22
|
* installer over CDP (see `scripts/collect-runtime-versions.ts`). Absent for
|
|
23
|
-
* versions not yet collected (or that could not be booted).
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* versions not yet collected (or that could not be booted).
|
|
24
|
+
*
|
|
25
|
+
* **These are the WINDOWS (`.exe`) values, and that matters.** A given Electron
|
|
26
|
+
* version does bundle the same Node / V8 / Chromium everywhere — but the Electron
|
|
27
|
+
* version itself is a property of the *installer*, not of the release, and two
|
|
28
|
+
* installers of the same Obsidian version can differ: `1.12.4` shipped Electron
|
|
29
|
+
* `39.6.0` in its `.exe` and `39.7.0` in every other installer, and `1.8.10`
|
|
30
|
+
* shipped `34.2.0` vs `34.5.2`. This field carries one flat value, measured on
|
|
31
|
+
* the `.exe` — the installer that, with the `.dmg`, is published for all 106
|
|
32
|
+
* installer-bearing releases. So a consumer pinning a macOS or Linux installer
|
|
33
|
+
* should treat `electron` as accurate to the patch only for the 104 releases
|
|
34
|
+
* where the platforms agree. The collection workflow boots all three platforms
|
|
35
|
+
* and reports any new divergence.
|
|
26
36
|
*
|
|
27
37
|
* The index signature carries every key `process.versions` exposes for that
|
|
28
38
|
* Electron build — beyond the four well-known ones below, that typically includes
|
|
@@ -90,8 +100,9 @@ export interface ObsidianVersionChangelogUrls {
|
|
|
90
100
|
}
|
|
91
101
|
/**
|
|
92
102
|
* The pre-resolved asset download URLs for a version, baked into `metadata.json`
|
|
93
|
-
* from the
|
|
94
|
-
*
|
|
103
|
+
* from the `obsidianmd/obsidian-releases` release assets — plus, for catalyst
|
|
104
|
+
* builds, the `releases.obsidian.md` CDN, which publishes no listing and so is
|
|
105
|
+
* probed (see the `metadata.json` section in `CLAUDE.md`).
|
|
95
106
|
*
|
|
96
107
|
* These are the exact URLs the version's assets are published at, so the
|
|
97
108
|
* integration-time download paths can skip the GitHub release-API lookup and the
|
|
@@ -156,7 +167,7 @@ export interface ObsidianVersionMetadata {
|
|
|
156
167
|
readonly channel?: string;
|
|
157
168
|
/**
|
|
158
169
|
* The pre-resolved asset download URLs for the version, baked from the
|
|
159
|
-
*
|
|
170
|
+
* `obsidianmd/obsidian-releases` release assets. Absent for versions not present
|
|
160
171
|
* in the catalog (the caller then falls back to hand-rolled resolution).
|
|
161
172
|
*/
|
|
162
173
|
readonly downloads?: ObsidianVersionDownloads;
|
|
@@ -33,9 +33,9 @@ var import_node_zlib = require("node:zlib");
|
|
|
33
33
|
var import_log = require("./log.cjs");
|
|
34
34
|
var import_obsidian_metadata = require("./obsidian-metadata.cjs");
|
|
35
35
|
var import_obsidian_version = require("./obsidian-version.cjs");
|
|
36
|
+
var import_release_catalog = require("./release-catalog.cjs");
|
|
36
37
|
const DOWNLOAD_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36";
|
|
37
38
|
const PUBLIC_ASAR_RELEASE_BASE_URL = "https://github.com/obsidianmd/obsidian-releases/releases/download";
|
|
38
|
-
const CATALYST_ASAR_RELEASE_BASE_URL = "https://releases.obsidian.md/release";
|
|
39
39
|
const CACHE_ROOT = (0, import_node_path.join)((0, import_node_os.tmpdir)(), "obsidian-integration-testing");
|
|
40
40
|
const ASAR_CACHE_DIR = (0, import_node_path.join)(CACHE_ROOT, "asar-cache");
|
|
41
41
|
const ASAR_FILE_PATTERN = /^obsidian-(?<version>\d+\.\d+\.\d+)\.asar$/;
|
|
@@ -119,7 +119,7 @@ function getAsarDownloadUrls(version) {
|
|
|
119
119
|
const asarGzFileName = `${(0, import_obsidian_version.getVersionAsarFileName)(version)}.gz`;
|
|
120
120
|
const fallbackUrls = [
|
|
121
121
|
`${PUBLIC_ASAR_RELEASE_BASE_URL}/v${version}/${asarGzFileName}`,
|
|
122
|
-
|
|
122
|
+
(0, import_release_catalog.buildCatalystAsarUrl)(version)
|
|
123
123
|
];
|
|
124
124
|
const bakedUrl = (0, import_obsidian_metadata.getVersionMetadata)(version)?.downloads?.asar;
|
|
125
125
|
return bakedUrl ? [bakedUrl, ...fallbackUrls] : fallbackUrls;
|
|
@@ -133,4 +133,4 @@ function getAsarDownloadUrls(version) {
|
|
|
133
133
|
getCachedAsarPath,
|
|
134
134
|
resolveConcreteVersion
|
|
135
135
|
});
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW50ZWdyYXRpb24tdGltZSBoZWxwZXJzIGZvciBwcm92aXNpb25pbmcgYSBzcGVjaWZpYyBPYnNpZGlhbiAqKmFzYXIqKiAodGhlXG4gKiBhcHAgY29kZSkgaW50byBhbiBpc29sYXRlZCB1c2VyLWRhdGEgZGlyZWN0b3J5LlxuICpcbiAqIE9ic2lkaWFuJ3MgYm9vdHN0cmFwIGxvYWRzIHRoZSBoaWdoZXN0IG9mIChpdHMgc2hlbGwncyBidW5kbGVkXG4gKiBgcmVzb3VyY2VzL29ic2lkaWFuLmFzYXJgLCB0aGUgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBmaWxlcyBpbiB0aGVcbiAqIHVzZXItZGF0YSBkaXJlY3RvcnkpLiBTbyBwbGFjaW5nIGFuIGFzYXIgaGVyZSBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGl0cyB2ZXJzaW9uIGlzXG4gKiAqKj49IHRoZSBzaGVsbCdzIGJ1bmRsZWQgdmVyc2lvbioqICh1cGdyYWRlLW9ubHkgXHUyMDE0IGNvbmZpcm1lZCBieSB0aGUgUGhhc2UgMFxuICogc3Bpa2UpLiBSdW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gcmVxdWlyZXMgcGlubmluZyB0aGUgaW5zdGFsbGVyL3NoZWxsIGluc3RlYWRcbiAqIChzZWUgYG9ic2lkaWFuLWluc3RhbGxlci50c2ApLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGRvd25sb2FkL2ZpbGVzeXN0ZW0gZ2x1ZSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgY29weUZpbGVTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdub2RlOnpsaWInO1xuXG5pbXBvcnQgdHlwZSB7IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IH0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLmNqcyc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmNqcyc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5pbXBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMLFxuICBnZXRWZXJzaW9uQXNhckZpbGVOYW1lLFxuICBwYXJzZVZlcnNpb25TcGVjLFxuICByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgcmVxdWlyZWQgdG8gZmV0Y2ggYXNhciBwYWNrYWdlcyBmcm9tXG4gKiBgcmVsZWFzZXMub2JzaWRpYW4ubWRgICh0aGUgZW5kcG9pbnQgaXMgQ2xvdWRmbGFyZS1nYXRlZCBhZ2FpbnN0IG5vbi1icm93c2VyXG4gKiBjbGllbnRzKS4gTWF0Y2hlcyB0aGUgVUEgZG9jdW1lbnRlZCBpbiB0aGUgb2JzaWRpYW4tdmVyc2lvbnMgcmVwby5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipwdWJsaWMqKiAoc3RhYmxlKSByZWxlYXNlIGFzYXJzLCBwdWJsaXNoZWQgYXMgR2l0SHViIHJlbGVhc2VcbiAqIGFzc2V0cyB1bmRlciBgLi4uL2Rvd25sb2FkL3Y8dmVyc2lvbj4vb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLlxuICovXG5jb25zdCBQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipjYXRhbHlzdCoqIChlYXJseSBhY2Nlc3MgLyBpbnNpZGVyKSByZWxlYXNlIGFzYXJzLCBzZXJ2ZWQgZnJvbVxuICogdGhlIE9ic2lkaWFuIENETiBhcyBgLi4uL3JlbGVhc2Uvb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLiBQdWJsaWMgdmVyc2lvbnNcbiAqIGFyZSBOT1QgaG9zdGVkIGhlcmUgKHRoZSBDRE4gcmV0dXJucyBhbiBlbXB0eSBib2R5IGZvciB0aGVtKS5cbiAqL1xuY29uc3QgQ0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vcmVsZWFzZXMub2JzaWRpYW4ubWQvcmVsZWFzZSc7XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgQVNBUl9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdhc2FyLWNhY2hlJyk7XG5jb25zdCBBU0FSX0ZJTEVfUEFUVEVSTiA9IC9eb2JzaWRpYW4tKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspXFwuYXNhciQvO1xuXG4vKipcbiAqIEEgZGlzY292ZXJlZCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJlZEFzYXIge1xuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNhciBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYHgueS56YCB2ZXJzaW9uIHBhcnNlZCBmcm9tIHRoZSBmaWxlIG5hbWUuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29waWVzIGFuIGFzYXIgZmlsZSBpbnRvIGEgdXNlci1kYXRhIGRpcmVjdG9yeSB1bmRlciBpdHMgY2Fub25pY2FsXG4gKiBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIG5hbWUuXG4gKlxuICogQHBhcmFtIGFzYXJQYXRoIC0gU291cmNlIGFzYXIgcGF0aC5cbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGFzYXIncyB2ZXJzaW9uICh1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gZmlsZSBuYW1lKS5cbiAqIEBwYXJhbSB1c2VyRGF0YURpcmVjdG9yeSAtIERlc3RpbmF0aW9uIHVzZXItZGF0YSBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5QXNhckludG9Vc2VyRGF0YShhc2FyUGF0aDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHVzZXJEYXRhRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKHVzZXJEYXRhRGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGVzdGluYXRpb24gPSBqb2luKHVzZXJEYXRhRGlyZWN0b3J5LCBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pKTtcbiAgY29weUZpbGVTeW5jKGFzYXJQYXRoLCBkZXN0aW5hdGlvbik7XG4gIGxvZyhgW3ZlcnNpb24tc3dpdGNoXSBQcm92aXNpb25lZCAke2dldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbil9IGludG8gJHt1c2VyRGF0YURpcmVjdG9yeX0uYCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgYXNhciBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uIGlzIHByZXNlbnQgaW4gdGhlIGxvY2FsIGNhY2hlLFxuICogZG93bmxvYWRpbmcgYW5kIGRlY29tcHJlc3NpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2FjaGVkIGFzYXIuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBkb3dubG9hZCBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFzYXJDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbWtkaXJTeW5jKEFTQVJfQ0FDSEVfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgY2FjaGVkUGF0aCA9IGdldENhY2hlZEFzYXJQYXRoKHZlcnNpb24pO1xuICBpZiAoZXhpc3RzU3luYyhjYWNoZWRQYXRoKSkge1xuICAgIGxvZyhgW3ZlcnNpb24tc3dpdGNoXSBVc2luZyBjYWNoZWQgYXNhciBmb3IgJHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gY2FjaGVkUGF0aDtcbiAgfVxuXG4gIC8vIEEgdmVyc2lvbidzIGFzYXIuZ3ogbGl2ZXMgb24gZXhhY3RseSBvbmUgaG9zdCBkZXBlbmRpbmcgb24gaXRzIGNoYW5uZWxcbiAgLy8gKHB1YmxpYyBcdTIxOTIgR2l0SHViIHJlbGVhc2UgYXNzZXRzLCBjYXRhbHlzdCBcdTIxOTIgdGhlIE9ic2lkaWFuIENETikuIFRoZSBjb25jcmV0ZVxuICAvLyBWZXJzaW9uIGFsb25lIGRvZXMgbm90IHRlbGwgdXMgd2hpY2gsIHNvIHRyeSBib3RoIGFuZCB1c2UgdGhlIGZpcnN0IHRoYXRcbiAgLy8gUmV0dXJucyBhIHZhbGlkIGFyY2hpdmUuXG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgZ2V0QXNhckRvd25sb2FkVXJscyh2ZXJzaW9uKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhc2FyID0gYXdhaXQgZG93bmxvYWRBbmREZWNvbXByZXNzQXNhcih1cmwpO1xuICAgICAgd3JpdGVGaWxlU3luYyhjYWNoZWRQYXRoLCBhc2FyKTtcbiAgICAgIGxvZyhgW3ZlcnNpb24tc3dpdGNoXSBDYWNoZWQgYXNhciAke3ZlcnNpb259ICgke1N0cmluZyhhc2FyLmxlbmd0aCl9IGJ5dGVzKSAtPiAke2NhY2hlZFBhdGh9YCk7XG4gICAgICByZXR1cm4gY2FjaGVkUGF0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goYCR7dXJsfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZG93bmxvYWQgT2JzaWRpYW4gYXNhciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX1gKTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBwYXJzZXMgT2JzaWRpYW4ncyBkZXNrdG9wIHJlbGVhc2VzIG1hbmlmZXN0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbWFuaWZlc3QuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBtYW5pZmVzdCBjYW5ub3QgYmUgZmV0Y2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoRGVza3RvcFJlbGVhc2VzTWFuaWZlc3QoKTogUHJvbWlzZTxEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMKTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3Q6IEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIERlc2t0b3BSZWxlYXNlc01hbmlmZXN0O1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBuZXdlc3QgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBpbiBhIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0gZGlyZWN0b3J5IC0gVGhlIGRpcmVjdG9yeSB0byBzY2FuIChlLmcuIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnIGRpcmVjdG9yeSkuXG4gKiBAcmV0dXJucyBUaGUgbmV3ZXN0IGRpc2NvdmVyZWQgYXNhciwgb3IgYHVuZGVmaW5lZGAgaWYgbm9uZSAvIHRoZSBkaXJlY3RvcnkgaXMgdW5yZWFkYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdlc3RBc2FyKGRpcmVjdG9yeTogc3RyaW5nKTogRGlzY292ZXJlZEFzYXIgfCB1bmRlZmluZWQge1xuICBsZXQgZW50cmllczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZW50cmllcyA9IHJlYWRkaXJTeW5jKGRpcmVjdG9yeSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgbmV3ZXN0OiBEaXNjb3ZlcmVkQXNhciB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBBU0FSX0ZJTEVfUEFUVEVSTi5leGVjKGVudHJ5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbiA9IG1hdGNoLmdyb3Vwcz8uWyd2ZXJzaW9uJ10gPz8gJyc7XG4gICAgaWYgKCFuZXdlc3QgfHwgY29tcGFyZVZlcnNpb25zKHZlcnNpb24sIG5ld2VzdC52ZXJzaW9uKSA+IDApIHtcbiAgICAgIG5ld2VzdCA9IHsgcGF0aDogam9pbihkaXJlY3RvcnksIGVudHJ5KSwgdmVyc2lvbiB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3ZXN0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxvY2FsIGNhY2hlIHBhdGggZm9yIGEgY29uY3JldGUgdmVyc2lvbidzIGFzYXIgKHRoZSBmaWxlIG1heSBub3RcbiAqIHlldCBleGlzdCkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRoZSBhc2FyIGlzIGNhY2hlZCBhdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlZEFzYXJQYXRoKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKEFTQVJfQ0FDSEVfRElSLCBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIHZlcnNpb24gc3BlY2lmaWVyIChleHBsaWNpdCBvciBjaGFubmVsIGFsaWFzKSB0byBhIGNvbmNyZXRlXG4gKiBgeC55LnpgIHZlcnNpb24sIGZldGNoaW5nIHRoZSBtYW5pZmVzdCBvbmx5IHdoZW4gYSBjaGFubmVsIGFsaWFzIGlzIHVzZWQuXG4gKlxuICogQHBhcmFtIHNwZWMgLSBUaGUgdmVyc2lvbiBzcGVjaWZpZXIuXG4gKiBAcmV0dXJucyBUaGUgY29uY3JldGUgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb25jcmV0ZVZlcnNpb24oc3BlYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VWZXJzaW9uU3BlYyhzcGVjKTtcbiAgaWYgKHBhcnNlZC5raW5kID09PSAnZXhwbGljaXQnKSB7XG4gICAgcmV0dXJuIHBhcnNlZC52ZXJzaW9uO1xuICB9XG4gIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgZmV0Y2hEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCgpO1xuICByZXR1cm4gcmVzb2x2ZVZlcnNpb25Gcm9tTWFuaWZlc3QobWFuaWZlc3QsIHBhcnNlZC5jaGFubmVsKTtcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBnemlwLWNvbXByZXNzZWQgYXNhciBmcm9tIGEgVVJMIGFuZCBkZWNvbXByZXNzZXMgaXQuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBgLmFzYXIuZ3pgIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBkZWNvbXByZXNzZWQgYXNhciBieXRlcy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMsIHRoZSBib2R5IGlzIGVtcHR5LCBvciBkZWNvbXByZXNzaW9uIGZhaWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFuZERlY29tcHJlc3NBc2FyKHVybDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIERvd25sb2FkaW5nIGFzYXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuXG4gIGNvbnN0IGd6ID0gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG4gIGlmIChnei5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VtcHR5IHJlc3BvbnNlIGJvZHknKTtcbiAgfVxuICByZXR1cm4gZ3VuemlwU3luYyhneik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FuZGlkYXRlIGAuYXNhci5nemAgZG93bmxvYWQgVVJMcyBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uLlxuICpcbiAqIFRoZSB2ZXJzaW9uJ3MgZXhhY3QgVVJMIGJha2VkIGludG8gdGhlIGBtZXRhZGF0YS5qc29uYCBjYXRhbG9nIChmcm9tIHVwc3RyZWFtXG4gKiBgb2JzaWRpYW4tdmVyc2lvbnMuanNvbmApIGlzIHRyaWVkIGZpcnN0IHdoZW4gcHJlc2VudDsgdGhlIGhhbmQtcm9sbGVkIHB1YmxpY1xuICogKEdpdEh1YikgYW5kIGNhdGFseXN0IChDRE4pIGd1ZXNzZXMgZm9sbG93IGFzIGEgZmFsbGJhY2sgZm9yIHZlcnNpb25zIGFic2VudFxuICogZnJvbSB0aGUgY2F0YWxvZyAob3IgYSBzdGFsZSBjYXRhbG9nKS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIFVSTHMgdG8gdHJ5LCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gZ2V0QXNhckRvd25sb2FkVXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFzYXJHekZpbGVOYW1lID0gYCR7Z2V0VmVyc2lvbkFzYXJGaWxlTmFtZSh2ZXJzaW9uKX0uZ3pgO1xuICBjb25zdCBmYWxsYmFja1VybHMgPSBbXG4gICAgYCR7UFVCTElDX0FTQVJfUkVMRUFTRV9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHthc2FyR3pGaWxlTmFtZX1gLFxuICAgIGAke0NBVEFMWVNUX0FTQVJfUkVMRUFTRV9CQVNFX1VSTH0vJHthc2FyR3pGaWxlTmFtZX1gXG4gIF07XG5cbiAgY29uc3QgYmFrZWRVcmwgPSBnZXRWZXJzaW9uTWV0YWRhdGEodmVyc2lvbik/LmRvd25sb2Fkcz8uYXNhcjtcbiAgcmV0dXJuIGJha2VkVXJsID8gW2Jha2VkVXJsLCAuLi5mYWxsYmFja1VybHNdIDogZmFsbGJhY2tVcmxzO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkEscUJBTU87QUFDUCxxQkFBdUI7QUFDdkIsdUJBQXFCO0FBQ3JCLHVCQUEyQjtBQUkzQixpQkFBb0I7QUFDcEIsK0JBQW1DO0FBQ25DLDhCQU1P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
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW50ZWdyYXRpb24tdGltZSBoZWxwZXJzIGZvciBwcm92aXNpb25pbmcgYSBzcGVjaWZpYyBPYnNpZGlhbiAqKmFzYXIqKiAodGhlXG4gKiBhcHAgY29kZSkgaW50byBhbiBpc29sYXRlZCB1c2VyLWRhdGEgZGlyZWN0b3J5LlxuICpcbiAqIE9ic2lkaWFuJ3MgYm9vdHN0cmFwIGxvYWRzIHRoZSBoaWdoZXN0IG9mIChpdHMgc2hlbGwncyBidW5kbGVkXG4gKiBgcmVzb3VyY2VzL29ic2lkaWFuLmFzYXJgLCB0aGUgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBmaWxlcyBpbiB0aGVcbiAqIHVzZXItZGF0YSBkaXJlY3RvcnkpLiBTbyBwbGFjaW5nIGFuIGFzYXIgaGVyZSBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGl0cyB2ZXJzaW9uIGlzXG4gKiAqKj49IHRoZSBzaGVsbCdzIGJ1bmRsZWQgdmVyc2lvbioqICh1cGdyYWRlLW9ubHkgXHUyMDE0IGNvbmZpcm1lZCBieSB0aGUgUGhhc2UgMFxuICogc3Bpa2UpLiBSdW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gcmVxdWlyZXMgcGlubmluZyB0aGUgaW5zdGFsbGVyL3NoZWxsIGluc3RlYWRcbiAqIChzZWUgYG9ic2lkaWFuLWluc3RhbGxlci50c2ApLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGRvd25sb2FkL2ZpbGVzeXN0ZW0gZ2x1ZSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgY29weUZpbGVTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdub2RlOnpsaWInO1xuXG5pbXBvcnQgdHlwZSB7IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IH0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLmNqcyc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmNqcyc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5pbXBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMLFxuICBnZXRWZXJzaW9uQXNhckZpbGVOYW1lLFxuICBwYXJzZVZlcnNpb25TcGVjLFxuICByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcbmltcG9ydCB7IGJ1aWxkQ2F0YWx5c3RBc2FyVXJsIH0gZnJvbSAnLi9yZWxlYXNlLWNhdGFsb2cuY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgcmVxdWlyZWQgdG8gZmV0Y2ggYXNhciBwYWNrYWdlcyBmcm9tXG4gKiBgcmVsZWFzZXMub2JzaWRpYW4ubWRgICh0aGUgZW5kcG9pbnQgaXMgQ2xvdWRmbGFyZS1nYXRlZCBhZ2FpbnN0IG5vbi1icm93c2VyXG4gKiBjbGllbnRzKS4gVGhlIHNhbWUgVUEgdGhlIGNhdGFsb2cgcmVmcmVzaCBzZW5kcyB3aGVuIHByb2JpbmcgdGhlIENETi5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipwdWJsaWMqKiAoc3RhYmxlKSByZWxlYXNlIGFzYXJzLCBwdWJsaXNoZWQgYXMgR2l0SHViIHJlbGVhc2VcbiAqIGFzc2V0cyB1bmRlciBgLi4uL2Rvd25sb2FkL3Y8dmVyc2lvbj4vb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLlxuICovXG5jb25zdCBQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBBU0FSX0NBQ0hFX0RJUiA9IGpvaW4oQ0FDSEVfUk9PVCwgJ2FzYXItY2FjaGUnKTtcbmNvbnN0IEFTQVJfRklMRV9QQVRURVJOID0gL15vYnNpZGlhbi0oPzx2ZXJzaW9uPlxcZCtcXC5cXGQrXFwuXFxkKylcXC5hc2FyJC87XG5cbi8qKlxuICogQSBkaXNjb3ZlcmVkIGBvYnNpZGlhbi08dmVyc2lvbj4uYXNhcmAgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNjb3ZlcmVkQXNhciB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBhc2FyIGZpbGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBgeC55LnpgIHZlcnNpb24gcGFyc2VkIGZyb20gdGhlIGZpbGUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb3BpZXMgYW4gYXNhciBmaWxlIGludG8gYSB1c2VyLWRhdGEgZGlyZWN0b3J5IHVuZGVyIGl0cyBjYW5vbmljYWxcbiAqIGBvYnNpZGlhbi08dmVyc2lvbj4uYXNhcmAgbmFtZS5cbiAqXG4gKiBAcGFyYW0gYXNhclBhdGggLSBTb3VyY2UgYXNhciBwYXRoLlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgYXNhcidzIHZlcnNpb24gKHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG5hbWUpLlxuICogQHBhcmFtIHVzZXJEYXRhRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gdXNlci1kYXRhIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlBc2FySW50b1VzZXJEYXRhKGFzYXJQYXRoOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgdXNlckRhdGFEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBta2RpclN5bmModXNlckRhdGFEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBkZXN0aW5hdGlvbiA9IGpvaW4odXNlckRhdGFEaXJlY3RvcnksIGdldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbikpO1xuICBjb3B5RmlsZVN5bmMoYXNhclBhdGgsIGRlc3RpbmF0aW9uKTtcbiAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFByb3Zpc2lvbmVkICR7Z2V0VmVyc2lvbkFzYXJGaWxlTmFtZSh2ZXJzaW9uKX0gaW50byAke3VzZXJEYXRhRGlyZWN0b3J5fS5gKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBhc2FyIGZvciBhIGNvbmNyZXRlIHZlcnNpb24gaXMgcHJlc2VudCBpbiB0aGUgbG9jYWwgY2FjaGUsXG4gKiBkb3dubG9hZGluZyBhbmQgZGVjb21wcmVzc2luZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjYWNoZWQgYXNhci5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGRvd25sb2FkIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQXNhckNhY2hlZCh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBta2RpclN5bmMoQVNBUl9DQUNIRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBjYWNoZWRQYXRoID0gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbik7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlZFBhdGgpKSB7XG4gICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFVzaW5nIGNhY2hlZCBhc2FyIGZvciAke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICB9XG5cbiAgLy8gQSB2ZXJzaW9uJ3MgYXNhci5neiBsaXZlcyBvbiBleGFjdGx5IG9uZSBob3N0IGRlcGVuZGluZyBvbiBpdHMgY2hhbm5lbFxuICAvLyAocHVibGljIFx1MjE5MiBHaXRIdWIgcmVsZWFzZSBhc3NldHMsIGNhdGFseXN0IFx1MjE5MiB0aGUgT2JzaWRpYW4gQ0ROKS4gVGhlIGNvbmNyZXRlXG4gIC8vIFZlcnNpb24gYWxvbmUgZG9lcyBub3QgdGVsbCB1cyB3aGljaCwgc28gdHJ5IGJvdGggYW5kIHVzZSB0aGUgZmlyc3QgdGhhdFxuICAvLyBSZXR1cm5zIGEgdmFsaWQgYXJjaGl2ZS5cbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHVybCBvZiBnZXRBc2FyRG93bmxvYWRVcmxzKHZlcnNpb24pKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFzYXIgPSBhd2FpdCBkb3dubG9hZEFuZERlY29tcHJlc3NBc2FyKHVybCk7XG4gICAgICB3cml0ZUZpbGVTeW5jKGNhY2hlZFBhdGgsIGFzYXIpO1xuICAgICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIENhY2hlZCBhc2FyICR7dmVyc2lvbn0gKCR7U3RyaW5nKGFzYXIubGVuZ3RoKX0gYnl0ZXMpIC0+ICR7Y2FjaGVkUGF0aH1gKTtcbiAgICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChgJHt1cmx9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZCBPYnNpZGlhbiBhc2FyICR7dmVyc2lvbn0uIEF0dGVtcHRzOiAke2Vycm9ycy5qb2luKCc7ICcpfWApO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYW5kIHBhcnNlcyBPYnNpZGlhbidzIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBtYW5pZmVzdC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG1hbmlmZXN0IGNhbm5vdCBiZSBmZXRjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCgpOiBQcm9taXNlPERlc2t0b3BSZWxlYXNlc01hbmlmZXN0PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goREVTS1RPUF9SRUxFQVNFU19NQU5JRkVTVF9VUkwpO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZGVza3RvcCByZWxlYXNlcyBtYW5pZmVzdDogSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG4gIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRGVza3RvcFJlbGVhc2VzTWFuaWZlc3Q7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG5ld2VzdCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGluIGEgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSBkaXJlY3RvcnkgLSBUaGUgZGlyZWN0b3J5IHRvIHNjYW4gKGUuZy4gdGhlIHVzZXIncyBPYnNpZGlhbiBjb25maWcgZGlyZWN0b3J5KS5cbiAqIEByZXR1cm5zIFRoZSBuZXdlc3QgZGlzY292ZXJlZCBhc2FyLCBvciBgdW5kZWZpbmVkYCBpZiBub25lIC8gdGhlIGRpcmVjdG9yeSBpcyB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5ld2VzdEFzYXIoZGlyZWN0b3J5OiBzdHJpbmcpOiBEaXNjb3ZlcmVkQXNhciB8IHVuZGVmaW5lZCB7XG4gIGxldCBlbnRyaWVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBlbnRyaWVzID0gcmVhZGRpclN5bmMoZGlyZWN0b3J5KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBuZXdlc3Q6IERpc2NvdmVyZWRBc2FyIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtYXRjaCA9IEFTQVJfRklMRV9QQVRURVJOLmV4ZWMoZW50cnkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gbWF0Y2guZ3JvdXBzPy5bJ3ZlcnNpb24nXSA/PyAnJztcbiAgICBpZiAoIW5ld2VzdCB8fCBjb21wYXJlVmVyc2lvbnModmVyc2lvbiwgbmV3ZXN0LnZlcnNpb24pID4gMCkge1xuICAgICAgbmV3ZXN0ID0geyBwYXRoOiBqb2luKGRpcmVjdG9yeSwgZW50cnkpLCB2ZXJzaW9uIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdlc3Q7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbG9jYWwgY2FjaGUgcGF0aCBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uJ3MgYXNhciAodGhlIGZpbGUgbWF5IG5vdFxuICogeWV0IGV4aXN0KS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdGhlIGFzYXIgaXMgY2FjaGVkIGF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oQVNBUl9DQUNIRV9ESVIsIGdldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbikpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgdmVyc2lvbiBzcGVjaWZpZXIgKGV4cGxpY2l0IG9yIGNoYW5uZWwgYWxpYXMpIHRvIGEgY29uY3JldGVcbiAqIGB4LnkuemAgdmVyc2lvbiwgZmV0Y2hpbmcgdGhlIG1hbmlmZXN0IG9ubHkgd2hlbiBhIGNoYW5uZWwgYWxpYXMgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gc3BlYyAtIFRoZSB2ZXJzaW9uIHNwZWNpZmllci5cbiAqIEByZXR1cm5zIFRoZSBjb25jcmV0ZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvbmNyZXRlVmVyc2lvbihzcGVjOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVZlcnNpb25TcGVjKHNwZWMpO1xuICBpZiAocGFyc2VkLmtpbmQgPT09ICdleHBsaWNpdCcpIHtcbiAgICByZXR1cm4gcGFyc2VkLnZlcnNpb247XG4gIH1cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBmZXRjaERlc2t0b3BSZWxlYXNlc01hbmlmZXN0KCk7XG4gIHJldHVybiByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdChtYW5pZmVzdCwgcGFyc2VkLmNoYW5uZWwpO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyBhIGd6aXAtY29tcHJlc3NlZCBhc2FyIGZyb20gYSBVUkwgYW5kIGRlY29tcHJlc3NlcyBpdC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGAuYXNhci5nemAgVVJMLlxuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBhc2FyIGJ5dGVzLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVxdWVzdCBmYWlscywgdGhlIGJvZHkgaXMgZW1wdHksIG9yIGRlY29tcHJlc3Npb24gZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRGVjb21wcmVzc0FzYXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsb2coYFt2ZXJzaW9uLXN3aXRjaF0gRG93bmxvYWRpbmcgYXNhciBmcm9tICR7dXJsfSAuLi5gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG5cbiAgY29uc3QgZ3ogPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgaWYgKGd6Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZW1wdHkgcmVzcG9uc2UgYm9keScpO1xuICB9XG4gIHJldHVybiBndW56aXBTeW5jKGd6KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYW5kaWRhdGUgYC5hc2FyLmd6YCBkb3dubG9hZCBVUkxzIGZvciBhIGNvbmNyZXRlIHZlcnNpb24uXG4gKlxuICogVGhlIHZlcnNpb24ncyBleGFjdCBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2cgKGZyb20gdGhlXG4gKiBgb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlc2AgYXNzZXRzKSBpcyB0cmllZCBmaXJzdCB3aGVuIHByZXNlbnQ7IHRoZSBoYW5kLXJvbGxlZCBwdWJsaWNcbiAqIChHaXRIdWIpIGFuZCBjYXRhbHlzdCAoQ0ROKSBndWVzc2VzIGZvbGxvdyBhcyBhIGZhbGxiYWNrIGZvciB2ZXJzaW9ucyBhYnNlbnRcbiAqIGZyb20gdGhlIGNhdGFsb2cgKG9yIGEgc3RhbGUgY2F0YWxvZykuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBVUkxzIHRvIHRyeSwgaW4gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIGdldEFzYXJEb3dubG9hZFVybHModmVyc2lvbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBhc2FyR3pGaWxlTmFtZSA9IGAke2dldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbil9Lmd6YDtcbiAgY29uc3QgZmFsbGJhY2tVcmxzID0gW1xuICAgIGAke1BVQkxJQ19BU0FSX1JFTEVBU0VfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7YXNhckd6RmlsZU5hbWV9YCxcbiAgICBidWlsZENhdGFseXN0QXNhclVybCh2ZXJzaW9uKVxuICBdO1xuXG4gIGNvbnN0IGJha2VkVXJsID0gZ2V0VmVyc2lvbk1ldGFkYXRhKHZlcnNpb24pPy5kb3dubG9hZHM/LmFzYXI7XG4gIHJldHVybiBiYWtlZFVybCA/IFtiYWtlZFVybCwgLi4uZmFsbGJhY2tVcmxzXSA6IGZhbGxiYWNrVXJscztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBLHFCQU1PO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUFxQjtBQUNyQix1QkFBMkI7QUFJM0IsaUJBQW9CO0FBQ3BCLCtCQUFtQztBQUNuQyw4QkFNTztBQUNQLDZCQUFxQztBQU9yQyxNQUFNLHNCQUFzQjtBQU01QixNQUFNLCtCQUErQjtBQUVyQyxNQUFNLGlCQUFhLDJCQUFLLHVCQUFPLEdBQUcsOEJBQThCO0FBQ2hFLE1BQU0scUJBQWlCLHVCQUFLLFlBQVksWUFBWTtBQUNwRCxNQUFNLG9CQUFvQjtBQXlCbkIsU0FBUyxxQkFBcUIsVUFBa0IsU0FBaUIsbUJBQWlDO0FBQ3ZHLGdDQUFVLG1CQUFtQixFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ2hELFFBQU0sa0JBQWMsdUJBQUssdUJBQW1CLGdEQUF1QixPQUFPLENBQUM7QUFDM0UsbUNBQWEsVUFBVSxXQUFXO0FBQ2xDLHNCQUFJLG9DQUFnQyxnREFBdUIsT0FBTyxDQUFDLFNBQVMsaUJBQWlCLEdBQUc7QUFDbEc7QUFVQSxlQUFzQixpQkFBaUIsU0FBa0M7QUFDdkUsZ0NBQVUsZ0JBQWdCLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDN0MsUUFBTSxhQUFhLGtCQUFrQixPQUFPO0FBQzVDLFVBQUksMkJBQVcsVUFBVSxHQUFHO0FBQzFCLHdCQUFJLDBDQUEwQyxPQUFPLEdBQUc7QUFDeEQsV0FBTztBQUFBLEVBQ1Q7QUFNQSxRQUFNLFNBQW1CLENBQUM7QUFDMUIsYUFBVyxPQUFPLG9CQUFvQixPQUFPLEdBQUc7QUFDOUMsUUFBSTtBQUNGLFlBQU0sT0FBTyxNQUFNLDBCQUEwQixHQUFHO0FBQ2hELHdDQUFjLFlBQVksSUFBSTtBQUM5QiwwQkFBSSxnQ0FBZ0MsT0FBTyxLQUFLLE9BQU8sS0FBSyxNQUFNLENBQUMsY0FBYyxVQUFVLEVBQUU7QUFDN0YsYUFBTztBQUFBLElBQ1QsU0FBUyxPQUFPO0FBQ2QsYUFBTyxLQUFLLEdBQUcsR0FBRyxLQUFLLGlCQUFpQixRQUFRLE1BQU0sVUFBVSxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsSUFDakY7QUFBQSxFQUNGO0FBRUEsUUFBTSxJQUFJLE1BQU0sb0NBQW9DLE9BQU8sZUFBZSxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDL0Y7QUFRQSxlQUFzQiwrQkFBaUU7QUFDckYsUUFBTSxXQUFXLE1BQU0sTUFBTSxxREFBNkI7QUFDMUQsTUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixVQUFNLElBQUksTUFBTSxtREFBbUQsT0FBTyxTQUFTLE1BQU0sQ0FBQyxFQUFFO0FBQUEsRUFDOUY7QUFDQSxTQUFPLE1BQU0sU0FBUyxLQUFLO0FBQzdCO0FBUU8sU0FBUyxlQUFlLFdBQStDO0FBQzVFLE1BQUk7QUFDSixNQUFJO0FBQ0Ysa0JBQVUsNEJBQVksU0FBUztBQUFBLEVBQ2pDLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUk7QUFDSixhQUFXLFNBQVMsU0FBUztBQUMzQixVQUFNLFFBQVEsa0JBQWtCLEtBQUssS0FBSztBQUMxQyxRQUFJLENBQUMsT0FBTztBQUNWO0FBQUEsSUFDRjtBQUNBLFVBQU0sVUFBVSxNQUFNLFNBQVMsU0FBUyxLQUFLO0FBQzdDLFFBQUksQ0FBQyxjQUFVLHlDQUFnQixTQUFTLE9BQU8sT0FBTyxJQUFJLEdBQUc7QUFDM0QsZUFBUyxFQUFFLFVBQU0sdUJBQUssV0FBVyxLQUFLLEdBQUcsUUFBUTtBQUFBLElBQ25EO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQVNPLFNBQVMsa0JBQWtCLFNBQXlCO0FBQ3pELGFBQU8sdUJBQUssb0JBQWdCLGdEQUF1QixPQUFPLENBQUM7QUFDN0Q7QUFTQSxlQUFzQix1QkFBdUIsTUFBK0I7QUFDMUUsUUFBTSxhQUFTLDBDQUFpQixJQUFJO0FBQ3BDLE1BQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIsV0FBTyxPQUFPO0FBQUEsRUFDaEI7QUFDQSxRQUFNLFdBQVcsTUFBTSw2QkFBNkI7QUFDcEQsYUFBTyxvREFBMkIsVUFBVSxPQUFPLE9BQU87QUFDNUQ7QUFTQSxlQUFlLDBCQUEwQixLQUE4QjtBQUNyRSxzQkFBSSwwQ0FBMEMsR0FBRyxNQUFNO0FBQ3ZELFFBQU0sV0FBVyxNQUFNLE1BQU0sS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLG9CQUFvQixFQUFFLENBQUM7QUFDcEYsTUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixVQUFNLElBQUksTUFBTSxRQUFRLE9BQU8sU0FBUyxNQUFNLENBQUMsRUFBRTtBQUFBLEVBQ25EO0FBRUEsUUFBTSxLQUFLLE9BQU8sS0FBSyxNQUFNLFNBQVMsWUFBWSxDQUFDO0FBQ25ELE1BQUksR0FBRyxXQUFXLEdBQUc7QUFDbkIsVUFBTSxJQUFJLE1BQU0scUJBQXFCO0FBQUEsRUFDdkM7QUFDQSxhQUFPLDZCQUFXLEVBQUU7QUFDdEI7QUFhQSxTQUFTLG9CQUFvQixTQUEyQjtBQUN0RCxRQUFNLGlCQUFpQixPQUFHLGdEQUF1QixPQUFPLENBQUM7QUFDekQsUUFBTSxlQUFlO0FBQUEsSUFDbkIsR0FBRyw0QkFBNEIsS0FBSyxPQUFPLElBQUksY0FBYztBQUFBLFFBQzdELDZDQUFxQixPQUFPO0FBQUEsRUFDOUI7QUFFQSxRQUFNLGVBQVcsNkNBQW1CLE9BQU8sR0FBRyxXQUFXO0FBQ3pELFNBQU8sV0FBVyxDQUFDLFVBQVUsR0FBRyxZQUFZLElBQUk7QUFDbEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var release_catalog_exports = {};
|
|
20
|
+
__export(release_catalog_exports, {
|
|
21
|
+
CATALYST_ASAR_RELEASE_BASE_URL: () => CATALYST_ASAR_RELEASE_BASE_URL,
|
|
22
|
+
buildCatalystAsarUrl: () => buildCatalystAsarUrl,
|
|
23
|
+
resolveReleaseChannel: () => resolveReleaseChannel,
|
|
24
|
+
selectReleaseDownloads: () => selectReleaseDownloads
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(release_catalog_exports);
|
|
27
|
+
var import_installer_asset = require("./installer-asset.cjs");
|
|
28
|
+
var import_obsidian_version = require("./obsidian-version.cjs");
|
|
29
|
+
const CATALYST_ASAR_RELEASE_BASE_URL = "https://releases.obsidian.md/release";
|
|
30
|
+
const INSTALLER_KEYS_BY_PLATFORM = [
|
|
31
|
+
["dmg", "darwin"],
|
|
32
|
+
["exe", "win32"],
|
|
33
|
+
["tar", "linux"]
|
|
34
|
+
];
|
|
35
|
+
function buildCatalystAsarUrl(version) {
|
|
36
|
+
return `${CATALYST_ASAR_RELEASE_BASE_URL}/${(0, import_obsidian_version.getVersionAsarFileName)(version)}.gz`;
|
|
37
|
+
}
|
|
38
|
+
function resolveReleaseChannel(params) {
|
|
39
|
+
if (params.hasPublicRelease) {
|
|
40
|
+
return params.hasPublicPage && params.hasCatalystPage ? "public+catalyst" : "public";
|
|
41
|
+
}
|
|
42
|
+
return params.hasCatalystPage ? "catalyst" : void 0;
|
|
43
|
+
}
|
|
44
|
+
function selectReleaseDownloads(params) {
|
|
45
|
+
const { assets, version } = params;
|
|
46
|
+
const assetNames = assets.map((asset) => asset.name);
|
|
47
|
+
const urlByName = new Map(assets.map((asset) => [asset.name, asset.url]));
|
|
48
|
+
const downloads = {};
|
|
49
|
+
const apkUrl = urlByName.get(`Obsidian-${version}.apk`);
|
|
50
|
+
if (apkUrl !== void 0) {
|
|
51
|
+
downloads["apk"] = apkUrl;
|
|
52
|
+
}
|
|
53
|
+
const asarUrl = urlByName.get(`${(0, import_obsidian_version.getVersionAsarFileName)(version)}.gz`);
|
|
54
|
+
if (asarUrl !== void 0) {
|
|
55
|
+
downloads["asar"] = asarUrl;
|
|
56
|
+
}
|
|
57
|
+
for (const [key, platform] of INSTALLER_KEYS_BY_PLATFORM) {
|
|
58
|
+
const assetName = (0, import_installer_asset.selectInstallerAssetName)({ assetNames, platform, version });
|
|
59
|
+
const url = assetName === void 0 ? void 0 : urlByName.get(assetName);
|
|
60
|
+
if (url !== void 0) {
|
|
61
|
+
downloads[key] = url;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return Object.keys(downloads).length > 0 ? downloads : void 0;
|
|
65
|
+
}
|
|
66
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
67
|
+
0 && (module.exports = {
|
|
68
|
+
CATALYST_ASAR_RELEASE_BASE_URL,
|
|
69
|
+
buildCatalystAsarUrl,
|
|
70
|
+
resolveReleaseChannel,
|
|
71
|
+
selectReleaseDownloads
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3JlbGVhc2UtY2F0YWxvZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFB1cmUgaGVscGVycyBmb3IgYnVpbGRpbmcgdGhlIHJlcG8tcm9vdCBgbWV0YWRhdGEuanNvbmAgY2F0YWxvZyBmcm9tIE9ic2lkaWFuJ3NcbiAqICoqb3duKiogcHVibGljYXRpb24gZW5kcG9pbnRzLCB3aXRoIG5vIHRoaXJkLXBhcnR5IGNhdGFsb2cgaW4gdGhlIGxvb3AuXG4gKlxuICogYHNjcmlwdHMvcmVmcmVzaC1tZXRhZGF0YS50c2AgZHJpdmVzIHRoZSBuZXR3b3JrIHNpZGUgKHRoZVxuICogYG9ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXNgIEdpdEh1YiBSZWxlYXNlcyBBUEksIGBvYnNpZGlhbi5tZC9jaGFuZ2Vsb2cueG1sYFxuICogYW5kIGBkZXNrdG9wLXJlbGVhc2VzLmpzb25gKTsgZXZlcnl0aGluZyBkZWNpZGFibGUgd2l0aG91dCB0aGUgbmV0d29yayBsaXZlc1xuICogaGVyZSBzbyBpdCBzdGF5cyB1bml0LXRlc3RlZC5cbiAqXG4gKiBUaHJlZSBkZWNpc2lvbnMgYXJlIGVuY29kZWQ6XG4gKlxuICogLSAqKldoaWNoIHJlbGVhc2UgYXNzZXRzIGJlY29tZSBgZG93bmxvYWRzYCBrZXlzLioqIEEgcmVsZWFzZSdzIHJlYWwgYXNzZXQgbGlzdFxuICogICBpcyBtYXRjaGVkIHJhdGhlciB0aGFuIHRlbXBsYXRlZCwgcmV1c2luZyB7QGxpbmsgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lfSBmb3JcbiAqICAgdGhlIGRlc2t0b3AgaW5zdGFsbGVycyBzbyB0aGUgaGlzdG9yaWNhbCBkb3QtdnMtaHlwaGVuIHNlcGFyYXRvciByZW5hbWUgKGFuZFxuICogICB0aGUgYC11bml2ZXJzYWxgIGRtZyBpbmZpeCkgaXMgaGFuZGxlZCBpbiBleGFjdGx5IG9uZSBwbGFjZS4gVGhlIDMyLWJpdCxcbiAqICAgYXJtNjQsIEFwcEltYWdlLCBkZWIgYW5kIHNuYXAgc2libGluZ3MgYXJlIGRlbGliZXJhdGVseSBub3QgY2FycmllZCBcdTIwMTQgdGhpc1xuICogICBoYXJuZXNzIGRvd25sb2FkcyBvbmx5IHRoZSB4NjQgaW5zdGFsbGVyLCB0aGUgYXBwIGFzYXIgYW5kIHRoZSBBbmRyb2lkIGFway5cbiAqIC0gKipXaGljaCBjaGFubmVsIGEgdmVyc2lvbiBiZWxvbmdzIHRvKiosIGRlcml2ZWQgZnJvbSB3aGljaCBjaGFuZ2Vsb2cgcGFnZXNcbiAqICAgdGhlIGZlZWQgcHVibGlzaGVkIGZvciBpdCAoc2VlIHtAbGluayByZXNvbHZlUmVsZWFzZUNoYW5uZWx9KS5cbiAqIC0gKipXaGVyZSBhIGNhdGFseXN0IGFzYXIgbGl2ZXMqKiAoe0BsaW5rIGJ1aWxkQ2F0YWx5c3RBc2FyVXJsfSkgXHUyMDE0IHRoZSBvbmUgYXNzZXRcbiAqICAgd2l0aCBubyBsaXN0aW5nIEFQSSBiZWhpbmQgaXQsIHNvIGl0cyBVUkwgbXVzdCBiZSBjb25zdHJ1Y3RlZCBhbmQgcHJvYmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uRG93bmxvYWRzIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuXG5pbXBvcnQgeyBzZWxlY3RJbnN0YWxsZXJBc3NldE5hbWUgfSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5janMnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbkFzYXJGaWxlTmFtZSB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuXG4vKipcbiAqIEJhc2UgVVJMIGZvciAqKmNhdGFseXN0KiogKGVhcmx5IGFjY2VzcyAvIGluc2lkZXIpIHJlbGVhc2UgYXNhcnMsIHNlcnZlZCBmcm9tXG4gKiB0aGUgT2JzaWRpYW4gQ0ROIGFzIGAuLi4vcmVsZWFzZS9vYnNpZGlhbi08dmVyc2lvbj4uYXNhci5nemAuIFB1YmxpYyB2ZXJzaW9uc1xuICogYXJlIE5PVCBob3N0ZWQgaGVyZSAodGhlIENETiByZXR1cm5zIGFuIGVtcHR5IGJvZHkgZm9yIHRoZW0pLCBhbmQgdGhlIGVuZHBvaW50XG4gKiBpcyBDbG91ZGZsYXJlLWdhdGVkIGFnYWluc3Qgbm9uLWJyb3dzZXIgY2xpZW50cywgc28gYSBwcm9iZSBuZWVkcyBhIGJyb3dzZXJcbiAqIGBVc2VyLUFnZW50YC5cbiAqL1xuZXhwb3J0IGNvbnN0IENBVEFMWVNUX0FTQVJfUkVMRUFTRV9CQVNFX1VSTCA9ICdodHRwczovL3JlbGVhc2VzLm9ic2lkaWFuLm1kL3JlbGVhc2UnO1xuXG4vKipcbiAqIE9uZSBhc3NldCBvZiBhIEdpdEh1YiByZWxlYXNlLCByZWR1Y2VkIHRvIHdoYXQgdGhlIGNhdGFsb2cgbmVlZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVsZWFzZUFzc2V0IHtcbiAgLyoqXG4gIFRoZSBwdWJsaXNoZWQgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi0xLjEzLjcuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGFzc2V0J3MgZGlyZWN0IGRvd25sb2FkIFVSTCAoYGJyb3dzZXJfZG93bmxvYWRfdXJsYCkuXG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZVJlbGVhc2VDaGFubmVsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlUmVsZWFzZUNoYW5uZWxQYXJhbXMge1xuICAvKipcbiAgV2hldGhlciB0aGUgY2hhbmdlbG9nIGZlZWQgcHVibGlzaGVkIGEgY2F0YWx5c3QgKFwiRWFybHkgYWNjZXNzXCIpIGRlc2t0b3AgcGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGhhc0NhdGFseXN0UGFnZTogYm9vbGVhbjtcblxuICAvKipcbiAgV2hldGhlciB0aGUgY2hhbmdlbG9nIGZlZWQgcHVibGlzaGVkIGEgcHVibGljIGRlc2t0b3AgcGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1B1YmxpY1BhZ2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHZlcnNpb24gd2FzIHB1Ymxpc2hlZCBhcyBhIEdpdEh1YiByZWxlYXNlIFx1MjAxNCB0aGUgZXZpZGVuY2UgdGhhdCBpdFxuICAgKiBzaGlwcGVkIG9uIHRoZSBwdWJsaWMgY2hhbm5lbCwgc2luY2UgY2F0YWx5c3QgYnVpbGRzIGFyZSBzZXJ2ZWQgb25seSBmcm9tXG4gICAqIHRoZSBgcmVsZWFzZXMub2JzaWRpYW4ubWRgIENETi5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1B1YmxpY1JlbGVhc2U6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNlbGVjdFJlbGVhc2VEb3dubG9hZHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdFJlbGVhc2VEb3dubG9hZHNQYXJhbXMge1xuICAvKipcbiAgVGhlIHJlbGVhc2UncyBwdWJsaXNoZWQgYXNzZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRzOiByZWFkb25seSBSZWxlYXNlQXNzZXRbXTtcblxuICAvKipcbiAgVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbiB0aGUgcmVsZWFzZSBwdWJsaXNoZXMuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRlc2t0b3AtaW5zdGFsbGVyIGBkb3dubG9hZHNgIGtleXMsIHBhaXJlZCB3aXRoIHRoZSBwbGF0Zm9ybSB3aG9zZSBhc3NldFxuICogc2hhcGUge0BsaW5rIHNlbGVjdEluc3RhbGxlckFzc2V0TmFtZX0gcmVzb2x2ZXMgZm9yIHRoZW0uXG4gKi9cbmNvbnN0IElOU1RBTExFUl9LRVlTX0JZX1BMQVRGT1JNOiByZWFkb25seSAocmVhZG9ubHkgW2tleTogJ2RtZycgfCAnZXhlJyB8ICd0YXInLCBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtXSlbXSA9IFtcbiAgWydkbWcnLCAnZGFyd2luJ10sXG4gIFsnZXhlJywgJ3dpbjMyJ10sXG4gIFsndGFyJywgJ2xpbnV4J11cbl07XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjYXRhbHlzdCBhc2FyIFVSTCBmb3IgYSB2ZXJzaW9uLlxuICpcbiAqIENhdGFseXN0IGJ1aWxkcyBhcmUgbm90IHB1Ymxpc2hlZCBhcyBHaXRIdWIgcmVsZWFzZSBhc3NldHMsIGFuZCB0aGUgQ0ROIHRoYXRcbiAqIHNlcnZlcyB0aGVtIGhhcyBubyBsaXN0aW5nIEFQSSwgc28gdGhpcyBVUkwgaXMgY29uc3RydWN0ZWQgcmF0aGVyIHRoYW5cbiAqIGRpc2NvdmVyZWQgXHUyMDE0IHRoZSBjYWxsZXIgcHJvYmVzIGl0IGJlZm9yZSByZWNvcmRpbmcgaXQuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGByZWxlYXNlcy5vYnNpZGlhbi5tZGAgYXNhciBVUkwgZm9yIHRoZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDYXRhbHlzdEFzYXJVcmwodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0NBVEFMWVNUX0FTQVJfUkVMRUFTRV9CQVNFX1VSTH0vJHtnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pfS5nemA7XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIHZlcnNpb24ncyByZWxlYXNlIGNoYW5uZWwgZnJvbSB3aGVyZSBpdCB3YXMgcHVibGlzaGVkIGFuZCB3aGljaFxuICogY2hhbmdlbG9nIHBhZ2VzIHRoZSBmZWVkIGNhcnJpZXMgZm9yIGl0LlxuICpcbiAqICoqUHVibGljYXRpb24gaXMgdGhlIHByaW1hcnkgZXZpZGVuY2UsIG5vdCB0aGUgZmVlZCdzIHRpdGxlIG1hcmtlci4qKiBUaGUgZmVlZFxuICogdGFncyBlYWNoIGVudHJ5IGAoUHVibGljKWAgb3IgYChFYXJseSBhY2Nlc3MpYCwgYnV0IHRocm91Z2ggdGhlIHByZS0xLjAgZXJhIGl0XG4gKiB0YWdnZWQgKmV2ZXJ5dGhpbmcqIGVhcmx5LWFjY2VzcyBcdTIwMTQgdGhlIHdob2xlIGFwcCB3YXMgXHUyMDE0IHNvIDYxIHZlcnNpb25zIHRoYXRcbiAqIHNoaXBwZWQgYXMgb3JkaW5hcnkgR2l0SHViIHJlbGVhc2VzIGNhcnJ5IG9ubHkgYSBjYXRhbHlzdCBwYWdlLiBUcnVzdGluZyB0aGVcbiAqIG1hcmtlciBhbG9uZSB0aGVyZWZvcmUgcmVsYWJlbHMgYSBsYXJnZSBzbGljZSBvZiBwdWJsaWMgaGlzdG9yeSBhcyBjYXRhbHlzdC5cbiAqIEEgR2l0SHViIHJlbGVhc2UgaXMgdW5hbWJpZ3VvdXMgdGhlIG90aGVyIHdheSByb3VuZDogY2F0YWx5c3QgYnVpbGRzIGFyZVxuICogc2VydmVkIG9ubHkgZnJvbSB0aGUgYHJlbGVhc2VzLm9ic2lkaWFuLm1kYCBDRE4sIG5ldmVyIGFzIHJlbGVhc2UgYXNzZXRzLlxuICpcbiAqIFNvIGEgdmVyc2lvbiB0aGF0IHdhcyBwdWJsaXNoZWQgb24gR2l0SHViIGlzIHB1YmxpYywgYW5kIGl0IGlzIHJlY29yZGVkIGFzIHRoZVxuICogY29tYmluZWQgYCdwdWJsaWMrY2F0YWx5c3QnYCBvbmx5IHdoZW4gdGhlIGZlZWQgY2FycmllcyAqYm90aCogZGVza3RvcCBwYWdlcyBcdTIwMTRcbiAqIHRoZSBzaGFwZSBldmVyeSB2ZXJzaW9uIGFscmVhZHkgbGFiZWxsZWQgYCdwdWJsaWMrY2F0YWx5c3QnYCBoYXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwdWJsaWNhdGlvbiBldmlkZW5jZSBhbmQgdGhlIGRlc2t0b3AgcGFnZXMgdGhlIGZlZWQgcHVibGlzaGVkLlxuICogQHJldHVybnMgVGhlIGNoYW5uZWwsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm8gZXZpZGVuY2UgZWl0aGVyIHdheSAodGhlXG4gKiAgIGNhbGxlciB0aGVuIGtlZXBzIHdoYXRldmVyIHRoZSB2ZXJzaW9uIGFscmVhZHkgY2FycmllcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVsZWFzZUNoYW5uZWwocGFyYW1zOiBSZXNvbHZlUmVsZWFzZUNoYW5uZWxQYXJhbXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocGFyYW1zLmhhc1B1YmxpY1JlbGVhc2UpIHtcbiAgICByZXR1cm4gcGFyYW1zLmhhc1B1YmxpY1BhZ2UgJiYgcGFyYW1zLmhhc0NhdGFseXN0UGFnZSA/ICdwdWJsaWMrY2F0YWx5c3QnIDogJ3B1YmxpYyc7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zLmhhc0NhdGFseXN0UGFnZSA/ICdjYXRhbHlzdCcgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGlja3MgdGhlIGFzc2V0cyB0aGlzIGhhcm5lc3MgZG93bmxvYWRzIG91dCBvZiBhIEdpdEh1YiByZWxlYXNlJ3MgcmVhbCBhc3NldFxuICogbGlzdDogdGhlIHg2NCBkZXNrdG9wIGluc3RhbGxlcnMsIHRoZSBhcHAgYXNhciBhbmQgdGhlIEFuZHJvaWQgYXBrLlxuICpcbiAqIEFzc2V0cyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSAqKnJlbGVhc2UncyBvd24gdmVyc2lvbioqLCBzbyBhbiBlYXJseS1hY2Nlc3NcbiAqIHRhZyB3aG9zZSBhc3NldHMgY2FycnkgdGhlIGJhc2UgdmVyc2lvbiBpbnN0ZWFkIChgdjEuMS44LUUyMWAgcHVibGlzaGluZ1xuICogYE9ic2lkaWFuLjEuMS44LmV4ZWAsIGB2MS42LjMtZTMwYCBwdWJsaXNoaW5nIGBPYnNpZGlhbi4xLjYuMy5leGVgKSBtYXRjaGVzXG4gKiBub3RoaW5nIGFuZCBpcyBza2lwcGVkIFx1MjAxNCBkZWxpYmVyYXRlbHksIHNpbmNlIHRob3NlIGFzc2V0cyBhcmUgdGhlIGJhc2VcbiAqIHZlcnNpb24ncywgbm90IHRoZSB0YWcncy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHJlbGVhc2UncyBhc3NldHMgYW5kIGl0cyB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGRpc3RpbGxlZCBkb3dubG9hZCBVUkxzLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSByZWxlYXNlXG4gKiAgIHB1Ymxpc2hlcyBub25lIG9mIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RSZWxlYXNlRG93bmxvYWRzKHBhcmFtczogU2VsZWN0UmVsZWFzZURvd25sb2Fkc1BhcmFtcyk6IE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgYXNzZXRzLCB2ZXJzaW9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhc3NldHMubWFwKChhc3NldCkgPT4gYXNzZXQubmFtZSk7XG4gIGNvbnN0IHVybEJ5TmFtZSA9IG5ldyBNYXAoYXNzZXRzLm1hcCgoYXNzZXQpID0+IFthc3NldC5uYW1lLCBhc3NldC51cmxdKSk7XG4gIGNvbnN0IGRvd25sb2FkczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGNvbnN0IGFwa1VybCA9IHVybEJ5TmFtZS5nZXQoYE9ic2lkaWFuLSR7dmVyc2lvbn0uYXBrYCk7XG4gIGlmIChhcGtVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgIGRvd25sb2Fkc1snYXBrJ10gPSBhcGtVcmw7XG4gIH1cblxuICBjb25zdCBhc2FyVXJsID0gdXJsQnlOYW1lLmdldChgJHtnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pfS5nemApO1xuICBpZiAoYXNhclVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZG93bmxvYWRzWydhc2FyJ10gPSBhc2FyVXJsO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCBwbGF0Zm9ybV0gb2YgSU5TVEFMTEVSX0tFWVNfQllfUExBVEZPUk0pIHtcbiAgICBjb25zdCBhc3NldE5hbWUgPSBzZWxlY3RJbnN0YWxsZXJBc3NldE5hbWUoeyBhc3NldE5hbWVzLCBwbGF0Zm9ybSwgdmVyc2lvbiB9KTtcbiAgICBjb25zdCB1cmwgPSBhc3NldE5hbWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHVybEJ5TmFtZS5nZXQoYXNzZXROYW1lKTtcbiAgICBpZiAodXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRvd25sb2Fkc1trZXldID0gdXJsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhkb3dubG9hZHMpLmxlbmd0aCA+IDAgPyBkb3dubG9hZHMgOiB1bmRlZmluZWQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkJBLDZCQUF5QztBQUN6Qyw4QkFBdUM7QUFTaEMsTUFBTSxpQ0FBaUM7QUEwRDlDLE1BQU0sNkJBQTRHO0FBQUEsRUFDaEgsQ0FBQyxPQUFPLFFBQVE7QUFBQSxFQUNoQixDQUFDLE9BQU8sT0FBTztBQUFBLEVBQ2YsQ0FBQyxPQUFPLE9BQU87QUFDakI7QUFZTyxTQUFTLHFCQUFxQixTQUF5QjtBQUM1RCxTQUFPLEdBQUcsOEJBQThCLFFBQUksZ0RBQXVCLE9BQU8sQ0FBQztBQUM3RTtBQXNCTyxTQUFTLHNCQUFzQixRQUF5RDtBQUM3RixNQUFJLE9BQU8sa0JBQWtCO0FBQzNCLFdBQU8sT0FBTyxpQkFBaUIsT0FBTyxrQkFBa0Isb0JBQW9CO0FBQUEsRUFDOUU7QUFFQSxTQUFPLE9BQU8sa0JBQWtCLGFBQWE7QUFDL0M7QUFnQk8sU0FBUyx1QkFBdUIsUUFBNEU7QUFDakgsUUFBTSxFQUFFLFFBQVEsUUFBUSxJQUFJO0FBQzVCLFFBQU0sYUFBYSxPQUFPLElBQUksQ0FBQyxVQUFVLE1BQU0sSUFBSTtBQUNuRCxRQUFNLFlBQVksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4RSxRQUFNLFlBQW9DLENBQUM7QUFFM0MsUUFBTSxTQUFTLFVBQVUsSUFBSSxZQUFZLE9BQU8sTUFBTTtBQUN0RCxNQUFJLFdBQVcsUUFBVztBQUN4QixjQUFVLEtBQUssSUFBSTtBQUFBLEVBQ3JCO0FBRUEsUUFBTSxVQUFVLFVBQVUsSUFBSSxPQUFHLGdEQUF1QixPQUFPLENBQUMsS0FBSztBQUNyRSxNQUFJLFlBQVksUUFBVztBQUN6QixjQUFVLE1BQU0sSUFBSTtBQUFBLEVBQ3RCO0FBRUEsYUFBVyxDQUFDLEtBQUssUUFBUSxLQUFLLDRCQUE0QjtBQUN4RCxVQUFNLGdCQUFZLGlEQUF5QixFQUFFLFlBQVksVUFBVSxRQUFRLENBQUM7QUFDNUUsVUFBTSxNQUFNLGNBQWMsU0FBWSxTQUFZLFVBQVUsSUFBSSxTQUFTO0FBQ3pFLFFBQUksUUFBUSxRQUFXO0FBQ3JCLGdCQUFVLEdBQUcsSUFBSTtBQUFBLElBQ25CO0FBQUEsRUFDRjtBQUVBLFNBQU8sT0FBTyxLQUFLLFNBQVMsRUFBRSxTQUFTLElBQUksWUFBWTtBQUN6RDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Pure helpers for building the repo-root `metadata.json` catalog from Obsidian's
|
|
5
|
+
* **own** publication endpoints, with no third-party catalog in the loop.
|
|
6
|
+
*
|
|
7
|
+
* `scripts/refresh-metadata.ts` drives the network side (the
|
|
8
|
+
* `obsidianmd/obsidian-releases` GitHub Releases API, `obsidian.md/changelog.xml`
|
|
9
|
+
* and `desktop-releases.json`); everything decidable without the network lives
|
|
10
|
+
* here so it stays unit-tested.
|
|
11
|
+
*
|
|
12
|
+
* Three decisions are encoded:
|
|
13
|
+
*
|
|
14
|
+
* - **Which release assets become `downloads` keys.** A release's real asset list
|
|
15
|
+
* is matched rather than templated, reusing {@link selectInstallerAssetName} for
|
|
16
|
+
* the desktop installers so the historical dot-vs-hyphen separator rename (and
|
|
17
|
+
* the `-universal` dmg infix) is handled in exactly one place. The 32-bit,
|
|
18
|
+
* arm64, AppImage, deb and snap siblings are deliberately not carried — this
|
|
19
|
+
* harness downloads only the x64 installer, the app asar and the Android apk.
|
|
20
|
+
* - **Which channel a version belongs to**, derived from which changelog pages
|
|
21
|
+
* the feed published for it (see {@link resolveReleaseChannel}).
|
|
22
|
+
* - **Where a catalyst asar lives** ({@link buildCatalystAsarUrl}) — the one asset
|
|
23
|
+
* with no listing API behind it, so its URL must be constructed and probed.
|
|
24
|
+
*/
|
|
25
|
+
import type { ObsidianVersionDownloads } from './obsidian-metadata.cjs';
|
|
26
|
+
/**
|
|
27
|
+
* Base URL for **catalyst** (early access / insider) release asars, served from
|
|
28
|
+
* the Obsidian CDN as `.../release/obsidian-<version>.asar.gz`. Public versions
|
|
29
|
+
* are NOT hosted here (the CDN returns an empty body for them), and the endpoint
|
|
30
|
+
* is Cloudflare-gated against non-browser clients, so a probe needs a browser
|
|
31
|
+
* `User-Agent`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const CATALYST_ASAR_RELEASE_BASE_URL = "https://releases.obsidian.md/release";
|
|
34
|
+
/**
|
|
35
|
+
* One asset of a GitHub release, reduced to what the catalog needs.
|
|
36
|
+
*/
|
|
37
|
+
export interface ReleaseAsset {
|
|
38
|
+
/**
|
|
39
|
+
The published asset file name, e.g. `Obsidian-1.13.7.exe`.
|
|
40
|
+
*/
|
|
41
|
+
readonly name: string;
|
|
42
|
+
/**
|
|
43
|
+
The asset's direct download URL (`browser_download_url`).
|
|
44
|
+
*/
|
|
45
|
+
readonly url: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parameters for {@link resolveReleaseChannel}.
|
|
49
|
+
*/
|
|
50
|
+
export interface ResolveReleaseChannelParams {
|
|
51
|
+
/**
|
|
52
|
+
Whether the changelog feed published a catalyst ("Early access") desktop page.
|
|
53
|
+
*/
|
|
54
|
+
readonly hasCatalystPage: boolean;
|
|
55
|
+
/**
|
|
56
|
+
Whether the changelog feed published a public desktop page.
|
|
57
|
+
*/
|
|
58
|
+
readonly hasPublicPage: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Whether the version was published as a GitHub release — the evidence that it
|
|
61
|
+
* shipped on the public channel, since catalyst builds are served only from
|
|
62
|
+
* the `releases.obsidian.md` CDN.
|
|
63
|
+
*/
|
|
64
|
+
readonly hasPublicRelease: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parameters for {@link selectReleaseDownloads}.
|
|
68
|
+
*/
|
|
69
|
+
export interface SelectReleaseDownloadsParams {
|
|
70
|
+
/**
|
|
71
|
+
The release's published assets.
|
|
72
|
+
*/
|
|
73
|
+
readonly assets: readonly ReleaseAsset[];
|
|
74
|
+
/**
|
|
75
|
+
The concrete `x.y.z` version the release publishes.
|
|
76
|
+
*/
|
|
77
|
+
readonly version: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Builds the catalyst asar URL for a version.
|
|
81
|
+
*
|
|
82
|
+
* Catalyst builds are not published as GitHub release assets, and the CDN that
|
|
83
|
+
* serves them has no listing API, so this URL is constructed rather than
|
|
84
|
+
* discovered — the caller probes it before recording it.
|
|
85
|
+
*
|
|
86
|
+
* @param version - The concrete `x.y.z` version.
|
|
87
|
+
* @returns The `releases.obsidian.md` asar URL for the version.
|
|
88
|
+
*/
|
|
89
|
+
export declare function buildCatalystAsarUrl(version: string): string;
|
|
90
|
+
/**
|
|
91
|
+
* Derives a version's release channel from where it was published and which
|
|
92
|
+
* changelog pages the feed carries for it.
|
|
93
|
+
*
|
|
94
|
+
* **Publication is the primary evidence, not the feed's title marker.** The feed
|
|
95
|
+
* tags each entry `(Public)` or `(Early access)`, but through the pre-1.0 era it
|
|
96
|
+
* tagged *everything* early-access — the whole app was — so 61 versions that
|
|
97
|
+
* shipped as ordinary GitHub releases carry only a catalyst page. Trusting the
|
|
98
|
+
* marker alone therefore relabels a large slice of public history as catalyst.
|
|
99
|
+
* A GitHub release is unambiguous the other way round: catalyst builds are
|
|
100
|
+
* served only from the `releases.obsidian.md` CDN, never as release assets.
|
|
101
|
+
*
|
|
102
|
+
* So a version that was published on GitHub is public, and it is recorded as the
|
|
103
|
+
* combined `'public+catalyst'` only when the feed carries *both* desktop pages —
|
|
104
|
+
* the shape every version already labelled `'public+catalyst'` has.
|
|
105
|
+
*
|
|
106
|
+
* @param params - The publication evidence and the desktop pages the feed published.
|
|
107
|
+
* @returns The channel, or `undefined` when there is no evidence either way (the
|
|
108
|
+
* caller then keeps whatever the version already carries).
|
|
109
|
+
*/
|
|
110
|
+
export declare function resolveReleaseChannel(params: ResolveReleaseChannelParams): string | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* Picks the assets this harness downloads out of a GitHub release's real asset
|
|
113
|
+
* list: the x64 desktop installers, the app asar and the Android apk.
|
|
114
|
+
*
|
|
115
|
+
* Assets are matched against the **release's own version**, so an early-access
|
|
116
|
+
* tag whose assets carry the base version instead (`v1.1.8-E21` publishing
|
|
117
|
+
* `Obsidian.1.1.8.exe`, `v1.6.3-e30` publishing `Obsidian.1.6.3.exe`) matches
|
|
118
|
+
* nothing and is skipped — deliberately, since those assets are the base
|
|
119
|
+
* version's, not the tag's.
|
|
120
|
+
*
|
|
121
|
+
* @param params - The release's assets and its version.
|
|
122
|
+
* @returns The distilled download URLs, or `undefined` when the release
|
|
123
|
+
* publishes none of them.
|
|
124
|
+
*/
|
|
125
|
+
export declare function selectReleaseDownloads(params: SelectReleaseDownloadsParams): ObsidianVersionDownloads | undefined;
|