obsidian-integration-testing 8.3.0 → 9.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/README.md +52 -11
- package/dist/lib/cjs/asar-fallback-detection.cjs +48 -0
- package/dist/lib/cjs/asar-fallback-detection.d.cts +75 -0
- package/dist/lib/cjs/avd-list.cjs +36 -0
- package/dist/lib/cjs/avd-list.d.cts +38 -0
- package/dist/lib/cjs/compatibility-options.cjs +18 -1
- package/dist/lib/cjs/compatibility-options.d.cts +41 -0
- package/dist/lib/cjs/connect-to-cdp.cjs +17 -18
- package/dist/lib/cjs/connect-to-cdp.d.cts +25 -0
- package/dist/lib/cjs/demo-vault-tree.cjs +52 -0
- package/dist/lib/cjs/demo-vault-tree.d.cts +34 -0
- package/dist/lib/cjs/ecmascript-version.cjs +63 -0
- package/dist/lib/cjs/ecmascript-version.d.cts +28 -0
- package/dist/lib/cjs/global-setup-core.cjs +44 -27
- package/dist/lib/cjs/global-setup-core.d.cts +15 -3
- package/dist/lib/cjs/index.cjs +10 -1
- package/dist/lib/cjs/index.d.cts +7 -1
- package/dist/lib/cjs/installer-asset.cjs +18 -3
- package/dist/lib/cjs/installer-asset.d.cts +26 -0
- package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +41 -0
- package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +26 -0
- package/dist/lib/cjs/jest/global-setup.cjs +2 -2
- package/dist/lib/cjs/jest/global-setup.d.cts +11 -1
- package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +26 -0
- package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +11 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/namespace-bootstrap.cjs +44 -7
- package/dist/lib/cjs/normalize-optional-properties.cjs +31 -0
- package/dist/lib/cjs/normalize-optional-properties.d.cts +26 -0
- package/dist/lib/cjs/obsidian-installer.cjs +6 -1
- package/dist/lib/cjs/obsidian-metadata.cjs +3775 -302
- package/dist/lib/cjs/obsidian-metadata.d.cts +71 -0
- package/dist/lib/cjs/obsidian-version-switch.cjs +5 -2
- package/dist/lib/cjs/owned-vault-seed.cjs +38 -0
- package/dist/lib/cjs/owned-vault-seed.d.cts +67 -0
- package/dist/lib/cjs/process-exit-message.cjs +47 -0
- package/dist/lib/cjs/process-exit-message.d.cts +48 -0
- package/dist/lib/cjs/silent-asar-fallback-error.cjs +48 -0
- package/dist/lib/cjs/silent-asar-fallback-error.d.cts +40 -0
- package/dist/lib/cjs/transport-desktop-cdp.cjs +197 -73
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +74 -15
- package/dist/lib/cjs/transport-factory.cjs +135 -34
- package/dist/lib/cjs/transport-options.cjs +1 -1
- package/dist/lib/cjs/transport-options.d.cts +16 -0
- package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +37 -0
- package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +26 -0
- package/dist/lib/cjs/vitest/global-setup.cjs +2 -2
- package/dist/lib/cjs/vitest/global-setup.d.cts +11 -1
- package/dist/lib/esm/asar-fallback-detection.d.mts +75 -0
- package/dist/lib/esm/asar-fallback-detection.mjs +24 -0
- package/dist/lib/esm/avd-list.d.mts +38 -0
- package/dist/lib/esm/avd-list.mjs +11 -0
- package/dist/lib/esm/compatibility-options.d.mts +41 -0
- package/dist/lib/esm/compatibility-options.mjs +16 -1
- package/dist/lib/esm/connect-to-cdp.d.mts +25 -0
- package/dist/lib/esm/connect-to-cdp.mjs +17 -18
- package/dist/lib/esm/demo-vault-tree.d.mts +34 -0
- package/dist/lib/esm/demo-vault-tree.mjs +35 -0
- package/dist/lib/esm/ecmascript-version.d.mts +28 -0
- package/dist/lib/esm/ecmascript-version.mjs +39 -0
- package/dist/lib/esm/global-setup-core.d.mts +15 -3
- package/dist/lib/esm/global-setup-core.mjs +44 -27
- package/dist/lib/esm/index.d.mts +7 -1
- package/dist/lib/esm/index.mjs +7 -1
- package/dist/lib/esm/installer-asset.d.mts +26 -0
- package/dist/lib/esm/installer-asset.mjs +16 -2
- package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +26 -0
- package/dist/lib/esm/jest/global-setup-no-plugin.mjs +17 -0
- package/dist/lib/esm/jest/global-setup.d.mts +11 -1
- package/dist/lib/esm/jest/global-setup.mjs +2 -2
- package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +11 -0
- package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +6 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/namespace-bootstrap.mjs +44 -7
- package/dist/lib/esm/normalize-optional-properties.d.mts +26 -0
- package/dist/lib/esm/normalize-optional-properties.mjs +7 -0
- package/dist/lib/esm/obsidian-installer.mjs +8 -2
- package/dist/lib/esm/obsidian-metadata.d.mts +71 -0
- package/dist/lib/esm/obsidian-metadata.mjs +3775 -302
- package/dist/lib/esm/obsidian-version-switch.mjs +5 -2
- package/dist/lib/esm/owned-vault-seed.d.mts +67 -0
- package/dist/lib/esm/owned-vault-seed.mjs +14 -0
- package/dist/lib/esm/process-exit-message.d.mts +48 -0
- package/dist/lib/esm/process-exit-message.mjs +23 -0
- package/dist/lib/esm/silent-asar-fallback-error.d.mts +40 -0
- package/dist/lib/esm/silent-asar-fallback-error.mjs +24 -0
- package/dist/lib/esm/transport-desktop-cdp.d.mts +74 -15
- package/dist/lib/esm/transport-desktop-cdp.mjs +197 -73
- package/dist/lib/esm/transport-factory.mjs +139 -34
- package/dist/lib/esm/transport-options.d.mts +16 -0
- package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +26 -0
- package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +11 -0
- package/dist/lib/esm/vitest/global-setup.d.mts +11 -1
- package/dist/lib/esm/vitest/global-setup.mjs +2 -2
- package/dist/obsidian-integration-testing-9.0.0.tgz +0 -0
- package/package.json +40 -8
- package/dist/obsidian-integration-testing-8.3.0.tgz +0 -0
|
@@ -16,6 +16,56 @@
|
|
|
16
16
|
* into the output, with no runtime file read and no `bundle`-time JSON import that
|
|
17
17
|
* `bundle: false` cannot inline).
|
|
18
18
|
*/
|
|
19
|
+
/**
|
|
20
|
+
* The concrete JS runtime versions an installer's Electron shell ships — the
|
|
21
|
+
* **entire** `process.versions` object, read empirically by booting that
|
|
22
|
+
* installer over CDP (see `scripts/collect-runtime-versions.ts`). Absent for
|
|
23
|
+
* versions not yet collected (or that could not be booted). Electron bundles the
|
|
24
|
+
* same runtime on every OS for a given Electron version, so these are
|
|
25
|
+
* platform-invariant.
|
|
26
|
+
*
|
|
27
|
+
* The index signature carries every key `process.versions` exposes for that
|
|
28
|
+
* Electron build — beyond the four well-known ones below, that typically includes
|
|
29
|
+
* `ares`, `brotli`, `cldr`, `icu`, `llhttp`, `modules`, `napi`, `nghttp2`,
|
|
30
|
+
* `openssl`, `tz`, `unicode`, `uv`, `zlib` (and, on newer Electron, `ada`,
|
|
31
|
+
* `simdjson`, …). The exact set varies by Electron version, which is why it is
|
|
32
|
+
* captured wholesale rather than as a fixed field list.
|
|
33
|
+
*/
|
|
34
|
+
export interface ObsidianRuntimeVersions {
|
|
35
|
+
/** The bundled Chromium version, e.g. `'114.0.5735.289'`. */
|
|
36
|
+
readonly chrome: string;
|
|
37
|
+
/** The bundled Electron version, e.g. `'25.8.1'`. */
|
|
38
|
+
readonly electron: string;
|
|
39
|
+
/** The bundled Node.js version, e.g. `'18.15.0'`. */
|
|
40
|
+
readonly node: string;
|
|
41
|
+
/** Every `process.versions` key the Electron build exposes. */
|
|
42
|
+
readonly [key: string]: string;
|
|
43
|
+
/** The bundled V8 version, e.g. `'11.4.183.23'`. */
|
|
44
|
+
readonly v8: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The pre-resolved asset download URLs for a version, baked into `metadata.json`
|
|
48
|
+
* from the upstream `obsidian-versions.json` catalog (see the `metadata.json`
|
|
49
|
+
* section in `CLAUDE.md`).
|
|
50
|
+
*
|
|
51
|
+
* These are the exact URLs the version's assets are published at, so the
|
|
52
|
+
* integration-time download paths can skip the GitHub release-API lookup and the
|
|
53
|
+
* historical dot-vs-hyphen asset-name guessing. Only the assets this library
|
|
54
|
+
* actually downloads are carried: the app `asar` and the x64 desktop installers.
|
|
55
|
+
* A field is absent when the version publishes no such asset (e.g. a catalyst
|
|
56
|
+
* build ships only the `asar`), in which case the caller falls back to its
|
|
57
|
+
* hand-rolled resolution.
|
|
58
|
+
*/
|
|
59
|
+
export interface ObsidianVersionDownloads {
|
|
60
|
+
/** The `obsidian-<version>.asar.gz` package URL. */
|
|
61
|
+
readonly asar?: string;
|
|
62
|
+
/** The macOS (universal) `.dmg` installer URL. */
|
|
63
|
+
readonly dmg?: string;
|
|
64
|
+
/** The Windows x64 `.exe` installer URL. */
|
|
65
|
+
readonly exe?: string;
|
|
66
|
+
/** The Linux x64 `.tar.gz` portable-build URL. */
|
|
67
|
+
readonly tar?: string;
|
|
68
|
+
}
|
|
19
69
|
/**
|
|
20
70
|
* The subset of a `metadata.json` per-version entry this library reads.
|
|
21
71
|
*
|
|
@@ -29,6 +79,21 @@ export interface ObsidianVersionMetadata {
|
|
|
29
79
|
readonly changelogUrl?: string;
|
|
30
80
|
/** The release channel: `'public'`, `'catalyst'`, or `'public+catalyst'`. */
|
|
31
81
|
readonly channel?: string;
|
|
82
|
+
/**
|
|
83
|
+
* The pre-resolved asset download URLs for the version, baked from the
|
|
84
|
+
* upstream `obsidian-versions.json` catalog. Absent for versions not present
|
|
85
|
+
* in the catalog (the caller then falls back to hand-rolled resolution).
|
|
86
|
+
*/
|
|
87
|
+
readonly downloads?: ObsidianVersionDownloads;
|
|
88
|
+
/**
|
|
89
|
+
* The highest ECMAScript edition (e.g. `'ES2022'`) fully supported by this
|
|
90
|
+
* version's bundled Chromium, derived from {@link ObsidianRuntimeVersions.chrome}
|
|
91
|
+
* (see `deriveEcmaScriptVersion`). Baked alongside {@link runtimeVersions}, so a
|
|
92
|
+
* consumer pinning this installer knows offline which ES level a serialized
|
|
93
|
+
* `evalInObsidian` closure may safely use. Absent when the version has no
|
|
94
|
+
* collected runtime versions.
|
|
95
|
+
*/
|
|
96
|
+
readonly ecmaScriptVersion?: string;
|
|
32
97
|
/**
|
|
33
98
|
* The app's hardcoded required-minimum Electron version (e.g. `'28.2.3'`). An
|
|
34
99
|
* Electron version, not an installer version — comparing against it needs the
|
|
@@ -46,6 +111,12 @@ export interface ObsidianVersionMetadata {
|
|
|
46
111
|
* renderer dead-boots.
|
|
47
112
|
*/
|
|
48
113
|
readonly minRunnableInstallerVersion?: string;
|
|
114
|
+
/**
|
|
115
|
+
* The concrete JS runtime versions this version's Electron shell ships, read
|
|
116
|
+
* empirically from `process.versions`. Absent until collected (see
|
|
117
|
+
* {@link ObsidianRuntimeVersions} and `scripts/collect-runtime-versions.ts`).
|
|
118
|
+
*/
|
|
119
|
+
readonly runtimeVersions?: ObsidianRuntimeVersions;
|
|
49
120
|
}
|
|
50
121
|
/**
|
|
51
122
|
* Looks up the metadata entry for a concrete Obsidian app version.
|
|
@@ -31,6 +31,7 @@ var import_node_os = require("node:os");
|
|
|
31
31
|
var import_node_path = require("node:path");
|
|
32
32
|
var import_node_zlib = require("node:zlib");
|
|
33
33
|
var import_log = require("./log.cjs");
|
|
34
|
+
var import_obsidian_metadata = require("./obsidian-metadata.cjs");
|
|
34
35
|
var import_obsidian_version = require("./obsidian-version.cjs");
|
|
35
36
|
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";
|
|
36
37
|
const PUBLIC_ASAR_RELEASE_BASE_URL = "https://github.com/obsidianmd/obsidian-releases/releases/download";
|
|
@@ -116,10 +117,12 @@ async function downloadAndDecompressAsar(url) {
|
|
|
116
117
|
}
|
|
117
118
|
function getAsarDownloadUrls(version) {
|
|
118
119
|
const asarGzFileName = `${(0, import_obsidian_version.getVersionAsarFileName)(version)}.gz`;
|
|
119
|
-
|
|
120
|
+
const fallbackUrls = [
|
|
120
121
|
`${PUBLIC_ASAR_RELEASE_BASE_URL}/v${version}/${asarGzFileName}`,
|
|
121
122
|
`${CATALYST_ASAR_RELEASE_BASE_URL}/${asarGzFileName}`
|
|
122
123
|
];
|
|
124
|
+
const bakedUrl = (0, import_obsidian_metadata.getVersionMetadata)(version)?.downloads?.asar;
|
|
125
|
+
return bakedUrl ? [bakedUrl, ...fallbackUrls] : fallbackUrls;
|
|
123
126
|
}
|
|
124
127
|
// Annotate the CommonJS export names for ESM import in node:
|
|
125
128
|
0 && (module.exports = {
|
|
@@ -130,4 +133,4 @@ function getAsarDownloadUrls(version) {
|
|
|
130
133
|
getCachedAsarPath,
|
|
131
134
|
resolveConcreteVersion
|
|
132
135
|
});
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW50ZWdyYXRpb24tdGltZSBoZWxwZXJzIGZvciBwcm92aXNpb25pbmcgYSBzcGVjaWZpYyBPYnNpZGlhbiAqKmFzYXIqKiAodGhlXG4gKiBhcHAgY29kZSkgaW50byBhbiBpc29sYXRlZCB1c2VyLWRhdGEgZGlyLlxuICpcbiAqIE9ic2lkaWFuJ3MgYm9vdHN0cmFwIGxvYWRzIHRoZSBoaWdoZXN0IG9mIChpdHMgc2hlbGwncyBidW5kbGVkXG4gKiBgcmVzb3VyY2VzL29ic2lkaWFuLmFzYXJgLCB0aGUgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBmaWxlcyBpbiB0aGVcbiAqIHVzZXItZGF0YSBkaXIpLiBTbyBwbGFjaW5nIGFuIGFzYXIgaGVyZSBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGl0cyB2ZXJzaW9uIGlzXG4gKiAqKj49IHRoZSBzaGVsbCdzIGJ1bmRsZWQgdmVyc2lvbioqICh1cGdyYWRlLW9ubHkgXHUyMDE0IGNvbmZpcm1lZCBieSB0aGUgUGhhc2UgMFxuICogc3Bpa2UpLiBSdW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gcmVxdWlyZXMgcGlubmluZyB0aGUgaW5zdGFsbGVyL3NoZWxsIGluc3RlYWRcbiAqIChzZWUgYG9ic2lkaWFuLWluc3RhbGxlci50c2ApLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGRvd25sb2FkL2ZpbGVzeXN0ZW0gZ2x1ZSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgY29weUZpbGVTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdub2RlOnpsaWInO1xuXG5pbXBvcnQgdHlwZSB7IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IH0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLmNqcyc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmNqcyc7XG5pbXBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMLFxuICBnZXRWZXJzaW9uQXNhckZpbGVOYW1lLFxuICBwYXJzZVZlcnNpb25TcGVjLFxuICByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgcmVxdWlyZWQgdG8gZmV0Y2ggYXNhciBwYWNrYWdlcyBmcm9tXG4gKiBgcmVsZWFzZXMub2JzaWRpYW4ubWRgICh0aGUgZW5kcG9pbnQgaXMgQ2xvdWRmbGFyZS1nYXRlZCBhZ2FpbnN0IG5vbi1icm93c2VyXG4gKiBjbGllbnRzKS4gTWF0Y2hlcyB0aGUgVUEgZG9jdW1lbnRlZCBpbiB0aGUgb2JzaWRpYW4tdmVyc2lvbnMgcmVwby5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipwdWJsaWMqKiAoc3RhYmxlKSByZWxlYXNlIGFzYXJzLCBwdWJsaXNoZWQgYXMgR2l0SHViIHJlbGVhc2VcbiAqIGFzc2V0cyB1bmRlciBgLi4uL2Rvd25sb2FkL3Y8dmVyc2lvbj4vb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLlxuICovXG5jb25zdCBQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipjYXRhbHlzdCoqIChlYXJseSBhY2Nlc3MgLyBpbnNpZGVyKSByZWxlYXNlIGFzYXJzLCBzZXJ2ZWQgZnJvbVxuICogdGhlIE9ic2lkaWFuIENETiBhcyBgLi4uL3JlbGVhc2Uvb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLiBQdWJsaWMgdmVyc2lvbnNcbiAqIGFyZSBOT1QgaG9zdGVkIGhlcmUgKHRoZSBDRE4gcmV0dXJucyBhbiBlbXB0eSBib2R5IGZvciB0aGVtKS5cbiAqL1xuY29uc3QgQ0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vcmVsZWFzZXMub2JzaWRpYW4ubWQvcmVsZWFzZSc7XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgQVNBUl9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdhc2FyLWNhY2hlJyk7XG5jb25zdCBBU0FSX0ZJTEVfUEFUVEVSTiA9IC9eb2JzaWRpYW4tKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspXFwuYXNhciQvO1xuXG4vKipcbiAqIEEgZGlzY292ZXJlZCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJlZEFzYXIge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNhciBmaWxlLiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBgeC55LnpgIHZlcnNpb24gcGFyc2VkIGZyb20gdGhlIGZpbGUgbmFtZS4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvcGllcyBhbiBhc2FyIGZpbGUgaW50byBhIHVzZXItZGF0YSBkaXIgdW5kZXIgaXRzIGNhbm9uaWNhbFxuICogYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBuYW1lLlxuICpcbiAqIEBwYXJhbSBhc2FyUGF0aCAtIFNvdXJjZSBhc2FyIHBhdGguXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBhc2FyJ3MgdmVyc2lvbiAodXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSkuXG4gKiBAcGFyYW0gdXNlckRhdGFEaXIgLSBEZXN0aW5hdGlvbiB1c2VyLWRhdGEgZGlyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUFzYXJJbnRvVXNlckRhdGEoYXNhclBhdGg6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCB1c2VyRGF0YURpcjogc3RyaW5nKTogdm9pZCB7XG4gIG1rZGlyU3luYyh1c2VyRGF0YURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGRlc3QgPSBqb2luKHVzZXJEYXRhRGlyLCBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pKTtcbiAgY29weUZpbGVTeW5jKGFzYXJQYXRoLCBkZXN0KTtcbiAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFByb3Zpc2lvbmVkICR7Z2V0VmVyc2lvbkFzYXJGaWxlTmFtZSh2ZXJzaW9uKX0gaW50byAke3VzZXJEYXRhRGlyfS5gKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBhc2FyIGZvciBhIGNvbmNyZXRlIHZlcnNpb24gaXMgcHJlc2VudCBpbiB0aGUgbG9jYWwgY2FjaGUsXG4gKiBkb3dubG9hZGluZyBhbmQgZGVjb21wcmVzc2luZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjYWNoZWQgYXNhci5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGRvd25sb2FkIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQXNhckNhY2hlZCh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBta2RpclN5bmMoQVNBUl9DQUNIRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBjYWNoZWRQYXRoID0gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbik7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlZFBhdGgpKSB7XG4gICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFVzaW5nIGNhY2hlZCBhc2FyIGZvciAke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICB9XG5cbiAgLy8gQSB2ZXJzaW9uJ3MgYXNhci5neiBsaXZlcyBvbiBleGFjdGx5IG9uZSBob3N0IGRlcGVuZGluZyBvbiBpdHMgY2hhbm5lbFxuICAvLyAocHVibGljIFx1MjE5MiBHaXRIdWIgcmVsZWFzZSBhc3NldHMsIGNhdGFseXN0IFx1MjE5MiB0aGUgT2JzaWRpYW4gQ0ROKS4gVGhlIGNvbmNyZXRlXG4gIC8vIFZlcnNpb24gYWxvbmUgZG9lcyBub3QgdGVsbCB1cyB3aGljaCwgc28gdHJ5IGJvdGggYW5kIHVzZSB0aGUgZmlyc3QgdGhhdFxuICAvLyBSZXR1cm5zIGEgdmFsaWQgYXJjaGl2ZS5cbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHVybCBvZiBnZXRBc2FyRG93bmxvYWRVcmxzKHZlcnNpb24pKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFzYXIgPSBhd2FpdCBkb3dubG9hZEFuZERlY29tcHJlc3NBc2FyKHVybCk7XG4gICAgICB3cml0ZUZpbGVTeW5jKGNhY2hlZFBhdGgsIGFzYXIpO1xuICAgICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIENhY2hlZCBhc2FyICR7dmVyc2lvbn0gKCR7U3RyaW5nKGFzYXIubGVuZ3RoKX0gYnl0ZXMpIC0+ICR7Y2FjaGVkUGF0aH1gKTtcbiAgICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChgJHt1cmx9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZCBPYnNpZGlhbiBhc2FyICR7dmVyc2lvbn0uIEF0dGVtcHRzOiAke2Vycm9ycy5qb2luKCc7ICcpfWApO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYW5kIHBhcnNlcyBPYnNpZGlhbidzIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBtYW5pZmVzdC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG1hbmlmZXN0IGNhbm5vdCBiZSBmZXRjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCgpOiBQcm9taXNlPERlc2t0b3BSZWxlYXNlc01hbmlmZXN0PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goREVTS1RPUF9SRUxFQVNFU19NQU5JRkVTVF9VUkwpO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZGVza3RvcCByZWxlYXNlcyBtYW5pZmVzdDogSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG4gIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRGVza3RvcFJlbGVhc2VzTWFuaWZlc3Q7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG5ld2VzdCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGluIGEgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSBkaXIgLSBUaGUgZGlyZWN0b3J5IHRvIHNjYW4gKGUuZy4gdGhlIHVzZXIncyBPYnNpZGlhbiBjb25maWcgZGlyKS5cbiAqIEByZXR1cm5zIFRoZSBuZXdlc3QgZGlzY292ZXJlZCBhc2FyLCBvciBgdW5kZWZpbmVkYCBpZiBub25lIC8gdGhlIGRpciBpcyB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5ld2VzdEFzYXIoZGlyOiBzdHJpbmcpOiBEaXNjb3ZlcmVkQXNhciB8IHVuZGVmaW5lZCB7XG4gIGxldCBlbnRyaWVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBlbnRyaWVzID0gcmVhZGRpclN5bmMoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBuZXdlc3Q6IERpc2NvdmVyZWRBc2FyIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtYXRjaCA9IEFTQVJfRklMRV9QQVRURVJOLmV4ZWMoZW50cnkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gbWF0Y2guZ3JvdXBzPy5bJ3ZlcnNpb24nXSA/PyAnJztcbiAgICBpZiAoIW5ld2VzdCB8fCBjb21wYXJlVmVyc2lvbnModmVyc2lvbiwgbmV3ZXN0LnZlcnNpb24pID4gMCkge1xuICAgICAgbmV3ZXN0ID0geyBwYXRoOiBqb2luKGRpciwgZW50cnkpLCB2ZXJzaW9uIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdlc3Q7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbG9jYWwgY2FjaGUgcGF0aCBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uJ3MgYXNhciAodGhlIGZpbGUgbWF5IG5vdFxuICogeWV0IGV4aXN0KS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdGhlIGFzYXIgaXMgY2FjaGVkIGF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oQVNBUl9DQUNIRV9ESVIsIGdldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbikpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgdmVyc2lvbiBzcGVjaWZpZXIgKGV4cGxpY2l0IG9yIGNoYW5uZWwgYWxpYXMpIHRvIGEgY29uY3JldGVcbiAqIGB4LnkuemAgdmVyc2lvbiwgZmV0Y2hpbmcgdGhlIG1hbmlmZXN0IG9ubHkgd2hlbiBhIGNoYW5uZWwgYWxpYXMgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gc3BlYyAtIFRoZSB2ZXJzaW9uIHNwZWNpZmllci5cbiAqIEByZXR1cm5zIFRoZSBjb25jcmV0ZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvbmNyZXRlVmVyc2lvbihzcGVjOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVZlcnNpb25TcGVjKHNwZWMpO1xuICBpZiAocGFyc2VkLmtpbmQgPT09ICdleHBsaWNpdCcpIHtcbiAgICByZXR1cm4gcGFyc2VkLnZlcnNpb247XG4gIH1cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBmZXRjaERlc2t0b3BSZWxlYXNlc01hbmlmZXN0KCk7XG4gIHJldHVybiByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdChtYW5pZmVzdCwgcGFyc2VkLmNoYW5uZWwpO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyBhIGd6aXAtY29tcHJlc3NlZCBhc2FyIGZyb20gYSBVUkwgYW5kIGRlY29tcHJlc3NlcyBpdC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGAuYXNhci5nemAgVVJMLlxuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBhc2FyIGJ5dGVzLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVxdWVzdCBmYWlscywgdGhlIGJvZHkgaXMgZW1wdHksIG9yIGRlY29tcHJlc3Npb24gZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRGVjb21wcmVzc0FzYXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsb2coYFt2ZXJzaW9uLXN3aXRjaF0gRG93bmxvYWRpbmcgYXNhciBmcm9tICR7dXJsfSAuLi5gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG5cbiAgY29uc3QgZ3ogPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgaWYgKGd6Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZW1wdHkgcmVzcG9uc2UgYm9keScpO1xuICB9XG4gIHJldHVybiBndW56aXBTeW5jKGd6KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYW5kaWRhdGUgYC5hc2FyLmd6YCBkb3dubG9hZCBVUkxzIGZvciBhIGNvbmNyZXRlIHZlcnNpb24sIHB1YmxpY1xuICogKEdpdEh1YikgZmlyc3QsIHRoZW4gY2F0YWx5c3QgKENETikuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBVUkxzIHRvIHRyeSwgaW4gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIGdldEFzYXJEb3dubG9hZFVybHModmVyc2lvbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBhc2FyR3pGaWxlTmFtZSA9IGAke2dldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbil9Lmd6YDtcbiAgcmV0dXJuIFtcbiAgICBgJHtQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke2FzYXJHekZpbGVOYW1lfWAsXG4gICAgYCR7Q0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMfS8ke2FzYXJHekZpbGVOYW1lfWBcbiAgXTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JBLHFCQU1PO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUFxQjtBQUNyQix1QkFBMkI7QUFJM0IsaUJBQW9CO0FBQ3BCLDhCQU1PO0FBT1AsTUFBTSxzQkFBc0I7QUFNNUIsTUFBTSwrQkFBK0I7QUFPckMsTUFBTSxpQ0FBaUM7QUFFdkMsTUFBTSxpQkFBYSwyQkFBSyx1QkFBTyxHQUFHLDhCQUE4QjtBQUNoRSxNQUFNLHFCQUFpQix1QkFBSyxZQUFZLFlBQVk7QUFDcEQsTUFBTSxvQkFBb0I7QUFxQm5CLFNBQVMscUJBQXFCLFVBQWtCLFNBQWlCLGFBQTJCO0FBQ2pHLGdDQUFVLGFBQWEsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUMxQyxRQUFNLFdBQU8sdUJBQUssaUJBQWEsZ0RBQXVCLE9BQU8sQ0FBQztBQUM5RCxtQ0FBYSxVQUFVLElBQUk7QUFDM0Isc0JBQUksb0NBQWdDLGdEQUF1QixPQUFPLENBQUMsU0FBUyxXQUFXLEdBQUc7QUFDNUY7QUFVQSxlQUFzQixpQkFBaUIsU0FBa0M7QUFDdkUsZ0NBQVUsZ0JBQWdCLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDN0MsUUFBTSxhQUFhLGtCQUFrQixPQUFPO0FBQzVDLFVBQUksMkJBQVcsVUFBVSxHQUFHO0FBQzFCLHdCQUFJLDBDQUEwQyxPQUFPLEdBQUc7QUFDeEQsV0FBTztBQUFBLEVBQ1Q7QUFNQSxRQUFNLFNBQW1CLENBQUM7QUFDMUIsYUFBVyxPQUFPLG9CQUFvQixPQUFPLEdBQUc7QUFDOUMsUUFBSTtBQUNGLFlB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
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW50ZWdyYXRpb24tdGltZSBoZWxwZXJzIGZvciBwcm92aXNpb25pbmcgYSBzcGVjaWZpYyBPYnNpZGlhbiAqKmFzYXIqKiAodGhlXG4gKiBhcHAgY29kZSkgaW50byBhbiBpc29sYXRlZCB1c2VyLWRhdGEgZGlyLlxuICpcbiAqIE9ic2lkaWFuJ3MgYm9vdHN0cmFwIGxvYWRzIHRoZSBoaWdoZXN0IG9mIChpdHMgc2hlbGwncyBidW5kbGVkXG4gKiBgcmVzb3VyY2VzL29ic2lkaWFuLmFzYXJgLCB0aGUgYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBmaWxlcyBpbiB0aGVcbiAqIHVzZXItZGF0YSBkaXIpLiBTbyBwbGFjaW5nIGFuIGFzYXIgaGVyZSBvbmx5IHRha2VzIGVmZmVjdCB3aGVuIGl0cyB2ZXJzaW9uIGlzXG4gKiAqKj49IHRoZSBzaGVsbCdzIGJ1bmRsZWQgdmVyc2lvbioqICh1cGdyYWRlLW9ubHkgXHUyMDE0IGNvbmZpcm1lZCBieSB0aGUgUGhhc2UgMFxuICogc3Bpa2UpLiBSdW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gcmVxdWlyZXMgcGlubmluZyB0aGUgaW5zdGFsbGVyL3NoZWxsIGluc3RlYWRcbiAqIChzZWUgYG9ic2lkaWFuLWluc3RhbGxlci50c2ApLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGRvd25sb2FkL2ZpbGVzeXN0ZW0gZ2x1ZSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgY29weUZpbGVTeW5jLFxuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdub2RlOnpsaWInO1xuXG5pbXBvcnQgdHlwZSB7IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IH0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLmNqcyc7XG5cbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLmNqcyc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5pbXBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIERFU0tUT1BfUkVMRUFTRVNfTUFOSUZFU1RfVVJMLFxuICBnZXRWZXJzaW9uQXNhckZpbGVOYW1lLFxuICBwYXJzZVZlcnNpb25TcGVjLFxuICByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgcmVxdWlyZWQgdG8gZmV0Y2ggYXNhciBwYWNrYWdlcyBmcm9tXG4gKiBgcmVsZWFzZXMub2JzaWRpYW4ubWRgICh0aGUgZW5kcG9pbnQgaXMgQ2xvdWRmbGFyZS1nYXRlZCBhZ2FpbnN0IG5vbi1icm93c2VyXG4gKiBjbGllbnRzKS4gTWF0Y2hlcyB0aGUgVUEgZG9jdW1lbnRlZCBpbiB0aGUgb2JzaWRpYW4tdmVyc2lvbnMgcmVwby5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipwdWJsaWMqKiAoc3RhYmxlKSByZWxlYXNlIGFzYXJzLCBwdWJsaXNoZWQgYXMgR2l0SHViIHJlbGVhc2VcbiAqIGFzc2V0cyB1bmRlciBgLi4uL2Rvd25sb2FkL3Y8dmVyc2lvbj4vb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLlxuICovXG5jb25zdCBQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgKipjYXRhbHlzdCoqIChlYXJseSBhY2Nlc3MgLyBpbnNpZGVyKSByZWxlYXNlIGFzYXJzLCBzZXJ2ZWQgZnJvbVxuICogdGhlIE9ic2lkaWFuIENETiBhcyBgLi4uL3JlbGVhc2Uvb2JzaWRpYW4tPHZlcnNpb24+LmFzYXIuZ3pgLiBQdWJsaWMgdmVyc2lvbnNcbiAqIGFyZSBOT1QgaG9zdGVkIGhlcmUgKHRoZSBDRE4gcmV0dXJucyBhbiBlbXB0eSBib2R5IGZvciB0aGVtKS5cbiAqL1xuY29uc3QgQ0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMID0gJ2h0dHBzOi8vcmVsZWFzZXMub2JzaWRpYW4ubWQvcmVsZWFzZSc7XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgQVNBUl9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdhc2FyLWNhY2hlJyk7XG5jb25zdCBBU0FSX0ZJTEVfUEFUVEVSTiA9IC9eb2JzaWRpYW4tKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspXFwuYXNhciQvO1xuXG4vKipcbiAqIEEgZGlzY292ZXJlZCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJlZEFzYXIge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgYXNhciBmaWxlLiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBgeC55LnpgIHZlcnNpb24gcGFyc2VkIGZyb20gdGhlIGZpbGUgbmFtZS4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvcGllcyBhbiBhc2FyIGZpbGUgaW50byBhIHVzZXItZGF0YSBkaXIgdW5kZXIgaXRzIGNhbm9uaWNhbFxuICogYG9ic2lkaWFuLTx2ZXJzaW9uPi5hc2FyYCBuYW1lLlxuICpcbiAqIEBwYXJhbSBhc2FyUGF0aCAtIFNvdXJjZSBhc2FyIHBhdGguXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBhc2FyJ3MgdmVyc2lvbiAodXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSkuXG4gKiBAcGFyYW0gdXNlckRhdGFEaXIgLSBEZXN0aW5hdGlvbiB1c2VyLWRhdGEgZGlyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUFzYXJJbnRvVXNlckRhdGEoYXNhclBhdGg6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCB1c2VyRGF0YURpcjogc3RyaW5nKTogdm9pZCB7XG4gIG1rZGlyU3luYyh1c2VyRGF0YURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGRlc3QgPSBqb2luKHVzZXJEYXRhRGlyLCBnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pKTtcbiAgY29weUZpbGVTeW5jKGFzYXJQYXRoLCBkZXN0KTtcbiAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFByb3Zpc2lvbmVkICR7Z2V0VmVyc2lvbkFzYXJGaWxlTmFtZSh2ZXJzaW9uKX0gaW50byAke3VzZXJEYXRhRGlyfS5gKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBhc2FyIGZvciBhIGNvbmNyZXRlIHZlcnNpb24gaXMgcHJlc2VudCBpbiB0aGUgbG9jYWwgY2FjaGUsXG4gKiBkb3dubG9hZGluZyBhbmQgZGVjb21wcmVzc2luZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjYWNoZWQgYXNhci5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGRvd25sb2FkIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQXNhckNhY2hlZCh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBta2RpclN5bmMoQVNBUl9DQUNIRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBjYWNoZWRQYXRoID0gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbik7XG4gIGlmIChleGlzdHNTeW5jKGNhY2hlZFBhdGgpKSB7XG4gICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIFVzaW5nIGNhY2hlZCBhc2FyIGZvciAke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICB9XG5cbiAgLy8gQSB2ZXJzaW9uJ3MgYXNhci5neiBsaXZlcyBvbiBleGFjdGx5IG9uZSBob3N0IGRlcGVuZGluZyBvbiBpdHMgY2hhbm5lbFxuICAvLyAocHVibGljIFx1MjE5MiBHaXRIdWIgcmVsZWFzZSBhc3NldHMsIGNhdGFseXN0IFx1MjE5MiB0aGUgT2JzaWRpYW4gQ0ROKS4gVGhlIGNvbmNyZXRlXG4gIC8vIFZlcnNpb24gYWxvbmUgZG9lcyBub3QgdGVsbCB1cyB3aGljaCwgc28gdHJ5IGJvdGggYW5kIHVzZSB0aGUgZmlyc3QgdGhhdFxuICAvLyBSZXR1cm5zIGEgdmFsaWQgYXJjaGl2ZS5cbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHVybCBvZiBnZXRBc2FyRG93bmxvYWRVcmxzKHZlcnNpb24pKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFzYXIgPSBhd2FpdCBkb3dubG9hZEFuZERlY29tcHJlc3NBc2FyKHVybCk7XG4gICAgICB3cml0ZUZpbGVTeW5jKGNhY2hlZFBhdGgsIGFzYXIpO1xuICAgICAgbG9nKGBbdmVyc2lvbi1zd2l0Y2hdIENhY2hlZCBhc2FyICR7dmVyc2lvbn0gKCR7U3RyaW5nKGFzYXIubGVuZ3RoKX0gYnl0ZXMpIC0+ICR7Y2FjaGVkUGF0aH1gKTtcbiAgICAgIHJldHVybiBjYWNoZWRQYXRoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChgJHt1cmx9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZCBPYnNpZGlhbiBhc2FyICR7dmVyc2lvbn0uIEF0dGVtcHRzOiAke2Vycm9ycy5qb2luKCc7ICcpfWApO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYW5kIHBhcnNlcyBPYnNpZGlhbidzIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBtYW5pZmVzdC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG1hbmlmZXN0IGNhbm5vdCBiZSBmZXRjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCgpOiBQcm9taXNlPERlc2t0b3BSZWxlYXNlc01hbmlmZXN0PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goREVTS1RPUF9SRUxFQVNFU19NQU5JRkVTVF9VUkwpO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZGVza3RvcCByZWxlYXNlcyBtYW5pZmVzdDogSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG4gIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRGVza3RvcFJlbGVhc2VzTWFuaWZlc3Q7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG5ld2VzdCBgb2JzaWRpYW4tPHZlcnNpb24+LmFzYXJgIGluIGEgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSBkaXIgLSBUaGUgZGlyZWN0b3J5IHRvIHNjYW4gKGUuZy4gdGhlIHVzZXIncyBPYnNpZGlhbiBjb25maWcgZGlyKS5cbiAqIEByZXR1cm5zIFRoZSBuZXdlc3QgZGlzY292ZXJlZCBhc2FyLCBvciBgdW5kZWZpbmVkYCBpZiBub25lIC8gdGhlIGRpciBpcyB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE5ld2VzdEFzYXIoZGlyOiBzdHJpbmcpOiBEaXNjb3ZlcmVkQXNhciB8IHVuZGVmaW5lZCB7XG4gIGxldCBlbnRyaWVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBlbnRyaWVzID0gcmVhZGRpclN5bmMoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBuZXdlc3Q6IERpc2NvdmVyZWRBc2FyIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtYXRjaCA9IEFTQVJfRklMRV9QQVRURVJOLmV4ZWMoZW50cnkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gbWF0Y2guZ3JvdXBzPy5bJ3ZlcnNpb24nXSA/PyAnJztcbiAgICBpZiAoIW5ld2VzdCB8fCBjb21wYXJlVmVyc2lvbnModmVyc2lvbiwgbmV3ZXN0LnZlcnNpb24pID4gMCkge1xuICAgICAgbmV3ZXN0ID0geyBwYXRoOiBqb2luKGRpciwgZW50cnkpLCB2ZXJzaW9uIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdlc3Q7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbG9jYWwgY2FjaGUgcGF0aCBmb3IgYSBjb25jcmV0ZSB2ZXJzaW9uJ3MgYXNhciAodGhlIGZpbGUgbWF5IG5vdFxuICogeWV0IGV4aXN0KS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdGhlIGFzYXIgaXMgY2FjaGVkIGF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkQXNhclBhdGgodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oQVNBUl9DQUNIRV9ESVIsIGdldFZlcnNpb25Bc2FyRmlsZU5hbWUodmVyc2lvbikpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgdmVyc2lvbiBzcGVjaWZpZXIgKGV4cGxpY2l0IG9yIGNoYW5uZWwgYWxpYXMpIHRvIGEgY29uY3JldGVcbiAqIGB4LnkuemAgdmVyc2lvbiwgZmV0Y2hpbmcgdGhlIG1hbmlmZXN0IG9ubHkgd2hlbiBhIGNoYW5uZWwgYWxpYXMgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0gc3BlYyAtIFRoZSB2ZXJzaW9uIHNwZWNpZmllci5cbiAqIEByZXR1cm5zIFRoZSBjb25jcmV0ZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvbmNyZXRlVmVyc2lvbihzcGVjOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVZlcnNpb25TcGVjKHNwZWMpO1xuICBpZiAocGFyc2VkLmtpbmQgPT09ICdleHBsaWNpdCcpIHtcbiAgICByZXR1cm4gcGFyc2VkLnZlcnNpb247XG4gIH1cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBmZXRjaERlc2t0b3BSZWxlYXNlc01hbmlmZXN0KCk7XG4gIHJldHVybiByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdChtYW5pZmVzdCwgcGFyc2VkLmNoYW5uZWwpO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyBhIGd6aXAtY29tcHJlc3NlZCBhc2FyIGZyb20gYSBVUkwgYW5kIGRlY29tcHJlc3NlcyBpdC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGAuYXNhci5nemAgVVJMLlxuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBhc2FyIGJ5dGVzLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVxdWVzdCBmYWlscywgdGhlIGJvZHkgaXMgZW1wdHksIG9yIGRlY29tcHJlc3Npb24gZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQW5kRGVjb21wcmVzc0FzYXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsb2coYFt2ZXJzaW9uLXN3aXRjaF0gRG93bmxvYWRpbmcgYXNhciBmcm9tICR7dXJsfSAuLi5gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG5cbiAgY29uc3QgZ3ogPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbiAgaWYgKGd6Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZW1wdHkgcmVzcG9uc2UgYm9keScpO1xuICB9XG4gIHJldHVybiBndW56aXBTeW5jKGd6KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYW5kaWRhdGUgYC5hc2FyLmd6YCBkb3dubG9hZCBVUkxzIGZvciBhIGNvbmNyZXRlIHZlcnNpb24uXG4gKlxuICogVGhlIHZlcnNpb24ncyBleGFjdCBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2cgKGZyb20gdXBzdHJlYW1cbiAqIGBvYnNpZGlhbi12ZXJzaW9ucy5qc29uYCkgaXMgdHJpZWQgZmlyc3Qgd2hlbiBwcmVzZW50OyB0aGUgaGFuZC1yb2xsZWQgcHVibGljXG4gKiAoR2l0SHViKSBhbmQgY2F0YWx5c3QgKENETikgZ3Vlc3NlcyBmb2xsb3cgYXMgYSBmYWxsYmFjayBmb3IgdmVyc2lvbnMgYWJzZW50XG4gKiBmcm9tIHRoZSBjYXRhbG9nIChvciBhIHN0YWxlIGNhdGFsb2cpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgVVJMcyB0byB0cnksIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiBnZXRBc2FyRG93bmxvYWRVcmxzKHZlcnNpb246IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgYXNhckd6RmlsZU5hbWUgPSBgJHtnZXRWZXJzaW9uQXNhckZpbGVOYW1lKHZlcnNpb24pfS5nemA7XG4gIGNvbnN0IGZhbGxiYWNrVXJscyA9IFtcbiAgICBgJHtQVUJMSUNfQVNBUl9SRUxFQVNFX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke2FzYXJHekZpbGVOYW1lfWAsXG4gICAgYCR7Q0FUQUxZU1RfQVNBUl9SRUxFQVNFX0JBU0VfVVJMfS8ke2FzYXJHekZpbGVOYW1lfWBcbiAgXTtcblxuICBjb25zdCBiYWtlZFVybCA9IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzPy5hc2FyO1xuICByZXR1cm4gYmFrZWRVcmwgPyBbYmFrZWRVcmwsIC4uLmZhbGxiYWNrVXJsc10gOiBmYWxsYmFja1VybHM7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxxQkFNTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFBcUI7QUFDckIsdUJBQTJCO0FBSTNCLGlCQUFvQjtBQUNwQiwrQkFBbUM7QUFDbkMsOEJBTU87QUFPUCxNQUFNLHNCQUFzQjtBQU01QixNQUFNLCtCQUErQjtBQU9yQyxNQUFNLGlDQUFpQztBQUV2QyxNQUFNLGlCQUFhLDJCQUFLLHVCQUFPLEdBQUcsOEJBQThCO0FBQ2hFLE1BQU0scUJBQWlCLHVCQUFL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
|
|
@@ -0,0 +1,38 @@
|
|
|
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 owned_vault_seed_exports = {};
|
|
20
|
+
__export(owned_vault_seed_exports, {
|
|
21
|
+
buildOwnedObsidianJson: () => buildOwnedObsidianJson
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(owned_vault_seed_exports);
|
|
24
|
+
function buildOwnedObsidianJson(params) {
|
|
25
|
+
return {
|
|
26
|
+
// eslint-disable-next-line camelcase -- Obsidian's own obsidian.json field name (old versions' auto-open marker).
|
|
27
|
+
last_open: params.vaultId,
|
|
28
|
+
updateDisabled: true,
|
|
29
|
+
vaults: {
|
|
30
|
+
[params.vaultId]: { open: true, path: params.vaultPath, ts: params.ts }
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {
|
|
36
|
+
buildOwnedObsidianJson
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL293bmVkLXZhdWx0LXNlZWQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgdGhlIGlzb2xhdGVkIGBvYnNpZGlhbi5qc29uYCB0aGUgaGFybmVzcyBwcmUtc2VlZHMgaW50byBhbiBvd25lZFxuICogaW5zdGFuY2UncyB0ZW1wIGAtLXVzZXItZGF0YS1kaXJgIHNvIE9ic2lkaWFuIG9wZW5zIHRoZSBoYXJuZXNzIHZhdWx0IGRpcmVjdGx5XG4gKiBpbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGZpcnN0LXJ1biB2YXVsdC1zZWxlY3RvciAodGhlIGBzdGFydGVyLXNjcmVlbmApLlxuICpcbiAqIFRoZSBhdXRvLW9wZW4gbWFya2VyIGNoYW5nZWQgYWNyb3NzIE9ic2lkaWFuJ3MgaGlzdG9yeSwgc28gdGhlIHNlZWQgY2Fycmllc1xuICogQk9USCBmb3JtcyBhbmQgZWFjaCB2ZXJzaW9uIHJlYWRzIHRoZSBvbmUgaXQgdW5kZXJzdGFuZHMgKGlnbm9yaW5nIHRoZSBvdGhlclxuICogdW5rbm93biBrZXkpIFx1MjAxNCBubyBwZXItdmVyc2lvbiBicmFuY2hpbmc6XG4gKlxuICogLSAqKk9sZCB2ZXJzaW9ucyoqIChjb25maXJtZWQgMC42LjQpIGF1dG8tb3BlbiBmcm9tIGEgKip0b3AtbGV2ZWwgYGxhc3Rfb3BlbmAqKlxuICogICBob2xkaW5nIHRoZSB2YXVsdCBpZCAoYG1haW4uanNgOiBgaWYgKGlkICYmIHZhdWx0cy5oYXNPd25Qcm9wZXJ0eShpZCkpXG4gKiAgIGNyZWF0ZVdpbmRvdyhpZCk7IGVsc2Ugb3BlblN0YXJ0ZXIoKTtgKSwgYW5kIHN0b3JlIGVhY2ggdmF1bHQgZW50cnkgYXMganVzdFxuICogICBgeyBwYXRoLCB0cyB9YC4gV2l0aG91dCBgbGFzdF9vcGVuYCB0aGV5IGZhbGwgdGhyb3VnaCB0byB0aGUgdmF1bHQtc2VsZWN0b3IuXG4gKiAtICoqTmV3ZXIgdmVyc2lvbnMqKiAoY29uZmlybWVkIDAuMTQuNSspIGRyb3BwZWQgYGxhc3Rfb3BlbmAgYW5kIGF1dG8tb3BlbiBmcm9tXG4gKiAgIHRoZSBwZXItZW50cnkgKipgb3BlbjogdHJ1ZWAqKiBmbGFnLlxuICpcbiAqIFNlZWRpbmcgYm90aCB3YXMgdmVyaWZpZWQgdG8gb3BlbiB0aGUgdmF1bHQgZGlyZWN0bHkgKG5vIHNlbGVjdG9yKSBvbiAwLjYuNCxcbiAqIDAuOS4yMCwgMC4xMi4xOSwgMC4xMy4xOSwgMC4xNC41IGFuZCAxLjEyLjcuIGB1cGRhdGVEaXNhYmxlZGAgc3VwcHJlc3NlcyB0aGVcbiAqIHRocm93YXdheSBpbnN0YW5jZSdzIHNlbGYtdXBkYXRlLlxuICovXG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkT3duZWRPYnNpZGlhbkpzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT3duZWRPYnNpZGlhbkpzb25QYXJhbXMge1xuICAvKiogTGFzdC1hY2Nlc3MgdGltZXN0YW1wIHRvIHN0YW1wIG9uIHRoZSB2YXVsdCBlbnRyeS4gKi9cbiAgcmVhZG9ubHkgdHM6IG51bWJlcjtcblxuICAvKiogVGhlIHJhbmRvbWx5LWdlbmVyYXRlZCB2YXVsdCBpZCB1c2VkIGFzIHRoZSByZWdpc3RyeSBrZXkgYW5kIGBsYXN0X29wZW5gLiAqL1xuICByZWFkb25seSB2YXVsdElkOiBzdHJpbmc7XG5cbiAgLyoqIEFic29sdXRlIHBhdGggdG8gdGhlIGhhcm5lc3MgdmF1bHQgZm9sZGVyLiAqL1xuICByZWFkb25seSB2YXVsdFBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgYG9ic2lkaWFuLmpzb25gIHN0cnVjdHVyZSB0aGUgaGFybmVzcyBzZWVkcyBmb3IgYW4gb3duZWQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZWRPYnNpZGlhbkpzb24ge1xuICAvKipcbiAgICogVG9wLWxldmVsIGF1dG8tb3BlbiBtYXJrZXIgKHZhdWx0IGlkKSBob25vcmVkIGJ5IG9sZCBPYnNpZGlhbiB2ZXJzaW9ucztcbiAgICogaWdub3JlZCBhcyBhbiB1bmtub3duIGtleSBieSBuZXdlciB2ZXJzaW9ucyB0aGF0IHVzZSB0aGUgcGVyLWVudHJ5IGBvcGVuYC5cbiAgICovXG4gIHJlYWRvbmx5IGxhc3Rfb3Blbjogc3RyaW5nO1xuXG4gIC8qKiBEaXNhYmxlcyB0aGUgdGhyb3dhd2F5IGluc3RhbmNlJ3Mgc2VsZi11cGRhdGUuICovXG4gIHJlYWRvbmx5IHVwZGF0ZURpc2FibGVkOiB0cnVlO1xuXG4gIC8qKiBWYXVsdCByZWdpc3RyeSBrZXllZCBieSB2YXVsdCBpZC4gKi9cbiAgcmVhZG9ubHkgdmF1bHRzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBPd25lZE9ic2lkaWFuVmF1bHRFbnRyeT4+O1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIHZhdWx0IGVudHJ5IGluIHRoZSBzZWVkZWQgYG9ic2lkaWFuLmpzb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE93bmVkT2JzaWRpYW5WYXVsdEVudHJ5IHtcbiAgLyoqIFBlci1lbnRyeSBhdXRvLW9wZW4gZmxhZyBob25vcmVkIGJ5IG5ld2VyIE9ic2lkaWFuIHZlcnNpb25zLiAqL1xuICByZWFkb25seSBvcGVuOiB0cnVlO1xuXG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBoYXJuZXNzIHZhdWx0IGZvbGRlci4gKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKiBMYXN0LWFjY2VzcyB0aW1lc3RhbXAuICovXG4gIHJlYWRvbmx5IHRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBpc29sYXRlZCBgb2JzaWRpYW4uanNvbmAgdGhhdCBmb3JjZS1vcGVucyB0aGUgb3duZWQgdmF1bHQgYWNyb3NzIGFsbFxuICogc3VwcG9ydGVkIE9ic2lkaWFuIHZlcnNpb25zIChzZWUgdGhlIGZpbGUgb3ZlcnZpZXcgZm9yIHRoZSBkdWFsLW1hcmtlclxuICogcmF0aW9uYWxlKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZhdWx0IGlkLCBwYXRoLCBhbmQgdGltZXN0YW1wIHRvIHNlZWQuXG4gKiBAcmV0dXJucyBUaGUgYG9ic2lkaWFuLmpzb25gIG9iamVjdCB0byB3cml0ZSBpbnRvIHRoZSBvd25lZCB1c2VyLWRhdGEgZGlyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPd25lZE9ic2lkaWFuSnNvbihwYXJhbXM6IEJ1aWxkT3duZWRPYnNpZGlhbkpzb25QYXJhbXMpOiBPd25lZE9ic2lkaWFuSnNvbiB7XG4gIHJldHVybiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSAtLSBPYnNpZGlhbidzIG93biBvYnNpZGlhbi5qc29uIGZpZWxkIG5hbWUgKG9sZCB2ZXJzaW9ucycgYXV0by1vcGVuIG1hcmtlcikuXG4gICAgbGFzdF9vcGVuOiBwYXJhbXMudmF1bHRJZCxcbiAgICB1cGRhdGVEaXNhYmxlZDogdHJ1ZSxcbiAgICB2YXVsdHM6IHtcbiAgICAgIFtwYXJhbXMudmF1bHRJZF06IHsgb3BlbjogdHJ1ZSwgcGF0aDogcGFyYW1zLnZhdWx0UGF0aCwgdHM6IHBhcmFtcy50cyB9XG4gICAgfVxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTRFTyxTQUFTLHVCQUF1QixRQUF5RDtBQUM5RixTQUFPO0FBQUE7QUFBQSxJQUVMLFdBQVcsT0FBTztBQUFBLElBQ2xCLGdCQUFnQjtBQUFBLElBQ2hCLFFBQVE7QUFBQSxNQUNOLENBQUMsT0FBTyxPQUFPLEdBQUcsRUFBRSxNQUFNLE1BQU0sTUFBTSxPQUFPLFdBQVcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUN4RTtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Builds the isolated `obsidian.json` the harness pre-seeds into an owned
|
|
5
|
+
* instance's temp `--user-data-dir` so Obsidian opens the harness vault directly
|
|
6
|
+
* instead of showing the first-run vault-selector (the `starter-screen`).
|
|
7
|
+
*
|
|
8
|
+
* The auto-open marker changed across Obsidian's history, so the seed carries
|
|
9
|
+
* BOTH forms and each version reads the one it understands (ignoring the other
|
|
10
|
+
* unknown key) — no per-version branching:
|
|
11
|
+
*
|
|
12
|
+
* - **Old versions** (confirmed 0.6.4) auto-open from a **top-level `last_open`**
|
|
13
|
+
* holding the vault id (`main.js`: `if (id && vaults.hasOwnProperty(id))
|
|
14
|
+
* createWindow(id); else openStarter();`), and store each vault entry as just
|
|
15
|
+
* `{ path, ts }`. Without `last_open` they fall through to the vault-selector.
|
|
16
|
+
* - **Newer versions** (confirmed 0.14.5+) dropped `last_open` and auto-open from
|
|
17
|
+
* the per-entry **`open: true`** flag.
|
|
18
|
+
*
|
|
19
|
+
* Seeding both was verified to open the vault directly (no selector) on 0.6.4,
|
|
20
|
+
* 0.9.20, 0.12.19, 0.13.19, 0.14.5 and 1.12.7. `updateDisabled` suppresses the
|
|
21
|
+
* throwaway instance's self-update.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Parameters for {@link buildOwnedObsidianJson}.
|
|
25
|
+
*/
|
|
26
|
+
export interface BuildOwnedObsidianJsonParams {
|
|
27
|
+
/** Last-access timestamp to stamp on the vault entry. */
|
|
28
|
+
readonly ts: number;
|
|
29
|
+
/** The randomly-generated vault id used as the registry key and `last_open`. */
|
|
30
|
+
readonly vaultId: string;
|
|
31
|
+
/** Absolute path to the harness vault folder. */
|
|
32
|
+
readonly vaultPath: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The `obsidian.json` structure the harness seeds for an owned instance.
|
|
36
|
+
*/
|
|
37
|
+
export interface OwnedObsidianJson {
|
|
38
|
+
/**
|
|
39
|
+
* Top-level auto-open marker (vault id) honored by old Obsidian versions;
|
|
40
|
+
* ignored as an unknown key by newer versions that use the per-entry `open`.
|
|
41
|
+
*/
|
|
42
|
+
readonly last_open: string;
|
|
43
|
+
/** Disables the throwaway instance's self-update. */
|
|
44
|
+
readonly updateDisabled: true;
|
|
45
|
+
/** Vault registry keyed by vault id. */
|
|
46
|
+
readonly vaults: Readonly<Record<string, OwnedObsidianVaultEntry>>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A single vault entry in the seeded `obsidian.json`.
|
|
50
|
+
*/
|
|
51
|
+
export interface OwnedObsidianVaultEntry {
|
|
52
|
+
/** Per-entry auto-open flag honored by newer Obsidian versions. */
|
|
53
|
+
readonly open: true;
|
|
54
|
+
/** Absolute path to the harness vault folder. */
|
|
55
|
+
readonly path: string;
|
|
56
|
+
/** Last-access timestamp. */
|
|
57
|
+
readonly ts: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Builds the isolated `obsidian.json` that force-opens the owned vault across all
|
|
61
|
+
* supported Obsidian versions (see the file overview for the dual-marker
|
|
62
|
+
* rationale).
|
|
63
|
+
*
|
|
64
|
+
* @param params - The vault id, path, and timestamp to seed.
|
|
65
|
+
* @returns The `obsidian.json` object to write into the owned user-data dir.
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildOwnedObsidianJson(params: BuildOwnedObsidianJsonParams): OwnedObsidianJson;
|
|
@@ -0,0 +1,47 @@
|
|
|
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 process_exit_message_exports = {};
|
|
20
|
+
__export(process_exit_message_exports, {
|
|
21
|
+
buildProcessExitMessage: () => buildProcessExitMessage
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(process_exit_message_exports);
|
|
24
|
+
function buildProcessExitMessage(params) {
|
|
25
|
+
const { exitInfo, output, outputLabel, subject } = params;
|
|
26
|
+
const reason = resolveReason(exitInfo);
|
|
27
|
+
const trimmedOutput = output.trim();
|
|
28
|
+
const details = trimmedOutput.length > 0 ? `
|
|
29
|
+
|
|
30
|
+
${outputLabel} (tail):
|
|
31
|
+
${trimmedOutput}` : "";
|
|
32
|
+
return `${subject} ${reason} during startup.${details}`;
|
|
33
|
+
}
|
|
34
|
+
function resolveReason(exitInfo) {
|
|
35
|
+
if (exitInfo.spawnError !== void 0) {
|
|
36
|
+
return `failed to start (${exitInfo.spawnError})`;
|
|
37
|
+
}
|
|
38
|
+
if (exitInfo.signal !== null) {
|
|
39
|
+
return `was terminated by signal ${exitInfo.signal}`;
|
|
40
|
+
}
|
|
41
|
+
return `exited prematurely with code ${exitInfo.code === null ? "(null)" : String(exitInfo.code)}`;
|
|
42
|
+
}
|
|
43
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
44
|
+
0 && (module.exports = {
|
|
45
|
+
buildProcessExitMessage
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Byb2Nlc3MtZXhpdC1tZXNzYWdlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBidWlsZGVyIGZvciB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIGRlc2NyaWJpbmcgYW4gYXV0by1zdGFydGVkIGNoaWxkXG4gKiBwcm9jZXNzICh0aGUgQW5kcm9pZCBlbXVsYXRvciBvciB0aGUgQXBwaXVtIHNlcnZlcikgdGhhdCBkaWVkIGR1cmluZyBzdGFydHVwLFxuICogYXBwZW5kaW5nIHRoZSBjYXB0dXJlZCBvdXRwdXQgdGFpbCB3aGVuIGF2YWlsYWJsZS5cbiAqXG4gKiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCAoZXhjbHVkZWQgZnJvbVxuICogdW5pdCB0ZXN0cykgc28gdGhlIG1lc3NhZ2UgZm9ybWF0dGluZyBzdGF5cyB1bml0LXRlc3RhYmxlIFx1MjAxNCB0aGUgbGF1bmNoZXJzXG4gKiB0aGVtc2VsdmVzIHNwYXduIHJlYWwgcHJvY2Vzc2VzLlxuICovXG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkUHJvY2Vzc0V4aXRNZXNzYWdlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZFByb2Nlc3NFeGl0TWVzc2FnZVBhcmFtcyB7XG4gIC8qKiBUaGUgcHJvY2VzcydzIGV4aXQgLyBzcGF3bi1mYWlsdXJlIGRldGFpbHMuICovXG4gIHJlYWRvbmx5IGV4aXRJbmZvOiBQcm9jZXNzRXhpdEluZm87XG5cbiAgLyoqIFRoZSBjYXB0dXJlZCBzdGRvdXQrc3RkZXJyIHRhaWwgKGVtcHR5IHdoZW4gbm9uZSB3YXMgY2FwdHVyZWQpLiAqL1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcblxuICAvKiogTGFiZWwgZm9yIHRoZSBjYXB0dXJlZCBvdXRwdXQgc2VjdGlvbiAoZS5nLiBgXCJFbXVsYXRvciBvdXRwdXRcImApLiAqL1xuICByZWFkb25seSBvdXRwdXRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdWJqZWN0IG9mIHRoZSBwcm9jZXNzIChlLmcuIGBcIkFuZHJvaWQgZW11bGF0b3JcImApLiAqL1xuICByZWFkb25seSBzdWJqZWN0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGV0YWlscyBvZiBhIHNwYXduZWQgY2hpbGQgcHJvY2VzcyB0aGF0IGhhcyBleGl0ZWQgb3IgZmFpbGVkIHRvIHNwYXduLlxuICpcbiAqIEEgbm9ybWFsIGV4aXQgc2V0cyBgY29kZWAvYHNpZ25hbGAgKGV4YWN0bHkgb25lIGlzIG5vbi1gbnVsbGApOyBhIHNwYXduXG4gKiBmYWlsdXJlIChlLmcuIGBFTk9FTlRgIGZvciBhIG1pc3NpbmcgYmluYXJ5KSBsZWF2ZXMgYm90aCBgbnVsbGAgYW5kIHNldHNcbiAqIGBzcGF3bkVycm9yYCB0byB0aGUgZmFpbHVyZSBtZXNzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NFeGl0SW5mbyB7XG4gIC8qKiBFeGl0IGNvZGUsIG9yIGBudWxsYCB3aGVuIHRlcm1pbmF0ZWQgYnkgYSBzaWduYWwgb3Igd2hlbiBpdCBmYWlsZWQgdG8gc3Bhd24uICovXG4gIHJlYWRvbmx5IGNvZGU6IG51bGwgfCBudW1iZXI7XG5cbiAgLyoqIFRlcm1pbmF0aW5nIHNpZ25hbCwgb3IgYG51bGxgIHdoZW4gaXQgZXhpdGVkIG5vcm1hbGx5IG9yIGZhaWxlZCB0byBzcGF3bi4gKi9cbiAgcmVhZG9ubHkgc2lnbmFsOiBOb2RlSlMuU2lnbmFscyB8IG51bGw7XG5cbiAgLyoqIFRoZSBzcGF3bi1mYWlsdXJlIG1lc3NhZ2Ugd2hlbiB0aGUgcHJvY2VzcyBuZXZlciBzdGFydGVkIChlLmcuIGBFTk9FTlRgKSwgb3RoZXJ3aXNlIGFic2VudC4gKi9cbiAgcmVhZG9ubHkgc3Bhd25FcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBhbiBhdXRvLXN0YXJ0ZWQgY2hpbGQgcHJvY2VzcyB0aGF0XG4gKiBleGl0ZWQgKG9yIGZhaWxlZCB0byBzcGF3bikgZHVyaW5nIHN0YXJ0dXAsIGFwcGVuZGluZyB0aGUgY2FwdHVyZWQgb3V0cHV0XG4gKiB0YWlsIHdoZW4gYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc3ViamVjdCwgZXhpdCBkZXRhaWxzLCBhbmQgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgQSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQcm9jZXNzRXhpdE1lc3NhZ2UocGFyYW1zOiBCdWlsZFByb2Nlc3NFeGl0TWVzc2FnZVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZXhpdEluZm8sIG91dHB1dCwgb3V0cHV0TGFiZWwsIHN1YmplY3QgfSA9IHBhcmFtcztcblxuICBjb25zdCByZWFzb24gPSByZXNvbHZlUmVhc29uKGV4aXRJbmZvKTtcbiAgY29uc3QgdHJpbW1lZE91dHB1dCA9IG91dHB1dC50cmltKCk7XG4gIGNvbnN0IGRldGFpbHMgPSB0cmltbWVkT3V0cHV0Lmxlbmd0aCA+IDBcbiAgICA/IGBcXG5cXG4ke291dHB1dExhYmVsfSAodGFpbCk6XFxuJHt0cmltbWVkT3V0cHV0fWBcbiAgICA6ICcnO1xuICByZXR1cm4gYCR7c3ViamVjdH0gJHtyZWFzb259IGR1cmluZyBzdGFydHVwLiR7ZGV0YWlsc31gO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB3aHkgdGhlIHByb2Nlc3MgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuXG4gKlxuICogQHBhcmFtIGV4aXRJbmZvIC0gVGhlIGV4aXQgLyBzcGF3bi1mYWlsdXJlIGRldGFpbHMuXG4gKiBAcmV0dXJucyBUaGUgcmVhc29uIGNsYXVzZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlYXNvbihleGl0SW5mbzogUHJvY2Vzc0V4aXRJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGV4aXRJbmZvLnNwYXduRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgZmFpbGVkIHRvIHN0YXJ0ICgke2V4aXRJbmZvLnNwYXduRXJyb3J9KWA7XG4gIH1cbiAgaWYgKGV4aXRJbmZvLnNpZ25hbCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsICR7ZXhpdEluZm8uc2lnbmFsfWA7XG4gIH1cbiAgcmV0dXJuIGBleGl0ZWQgcHJlbWF0dXJlbHkgd2l0aCBjb2RlICR7ZXhpdEluZm8uY29kZSA9PT0gbnVsbCA/ICcobnVsbCknIDogU3RyaW5nKGV4aXRJbmZvLmNvZGUpfWA7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdURPLFNBQVMsd0JBQXdCLFFBQStDO0FBQ3JGLFFBQU0sRUFBRSxVQUFVLFFBQVEsYUFBYSxRQUFRLElBQUk7QUFFbkQsUUFBTSxTQUFTLGNBQWMsUUFBUTtBQUNyQyxRQUFNLGdCQUFnQixPQUFPLEtBQUs7QUFDbEMsUUFBTSxVQUFVLGNBQWMsU0FBUyxJQUNuQztBQUFBO0FBQUEsRUFBTyxXQUFXO0FBQUEsRUFBYSxhQUFhLEtBQzVDO0FBQ0osU0FBTyxHQUFHLE9BQU8sSUFBSSxNQUFNLG1CQUFtQixPQUFPO0FBQ3ZEO0FBUUEsU0FBUyxjQUFjLFVBQW1DO0FBQ3hELE1BQUksU0FBUyxlQUFlLFFBQVc7QUFDckMsV0FBTyxvQkFBb0IsU0FBUyxVQUFVO0FBQUEsRUFDaEQ7QUFDQSxNQUFJLFNBQVMsV0FBVyxNQUFNO0FBQzVCLFdBQU8sNEJBQTRCLFNBQVMsTUFBTTtBQUFBLEVBQ3BEO0FBQ0EsU0FBTyxnQ0FBZ0MsU0FBUyxTQUFTLE9BQU8sV0FBVyxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBQ2xHOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Pure builder for the diagnostic message describing an auto-started child
|
|
5
|
+
* process (the Android emulator or the Appium server) that died during startup,
|
|
6
|
+
* appending the captured output tail when available.
|
|
7
|
+
*
|
|
8
|
+
* Kept separate from the integration-only `transport-factory` (excluded from
|
|
9
|
+
* unit tests) so the message formatting stays unit-testable — the launchers
|
|
10
|
+
* themselves spawn real processes.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Parameters for {@link buildProcessExitMessage}.
|
|
14
|
+
*/
|
|
15
|
+
export interface BuildProcessExitMessageParams {
|
|
16
|
+
/** The process's exit / spawn-failure details. */
|
|
17
|
+
readonly exitInfo: ProcessExitInfo;
|
|
18
|
+
/** The captured stdout+stderr tail (empty when none was captured). */
|
|
19
|
+
readonly output: string;
|
|
20
|
+
/** Label for the captured output section (e.g. `"Emulator output"`). */
|
|
21
|
+
readonly outputLabel: string;
|
|
22
|
+
/** Human-readable subject of the process (e.g. `"Android emulator"`). */
|
|
23
|
+
readonly subject: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Details of a spawned child process that has exited or failed to spawn.
|
|
27
|
+
*
|
|
28
|
+
* A normal exit sets `code`/`signal` (exactly one is non-`null`); a spawn
|
|
29
|
+
* failure (e.g. `ENOENT` for a missing binary) leaves both `null` and sets
|
|
30
|
+
* `spawnError` to the failure message.
|
|
31
|
+
*/
|
|
32
|
+
export interface ProcessExitInfo {
|
|
33
|
+
/** Exit code, or `null` when terminated by a signal or when it failed to spawn. */
|
|
34
|
+
readonly code: null | number;
|
|
35
|
+
/** Terminating signal, or `null` when it exited normally or failed to spawn. */
|
|
36
|
+
readonly signal: NodeJS.Signals | null;
|
|
37
|
+
/** The spawn-failure message when the process never started (e.g. `ENOENT`), otherwise absent. */
|
|
38
|
+
readonly spawnError?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Builds a descriptive error message for an auto-started child process that
|
|
42
|
+
* exited (or failed to spawn) during startup, appending the captured output
|
|
43
|
+
* tail when available.
|
|
44
|
+
*
|
|
45
|
+
* @param params - The subject, exit details, and captured output.
|
|
46
|
+
* @returns A human-readable error message.
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildProcessExitMessage(params: BuildProcessExitMessageParams): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
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 silent_asar_fallback_error_exports = {};
|
|
20
|
+
__export(silent_asar_fallback_error_exports, {
|
|
21
|
+
SilentAsarFallbackError: () => SilentAsarFallbackError
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(silent_asar_fallback_error_exports);
|
|
24
|
+
class SilentAsarFallbackError extends Error {
|
|
25
|
+
/** The pinned Obsidian app (asar) version that was requested. */
|
|
26
|
+
requestedVersion;
|
|
27
|
+
/** The Obsidian app (asar) version the instance is actually running. */
|
|
28
|
+
runningApiVersion;
|
|
29
|
+
/**
|
|
30
|
+
* Creates the error from the pinned and actually-running versions.
|
|
31
|
+
*
|
|
32
|
+
* @param params - The requested pin and the version actually running.
|
|
33
|
+
*/
|
|
34
|
+
constructor(params) {
|
|
35
|
+
const { requestedVersion, runningApiVersion } = params;
|
|
36
|
+
super(
|
|
37
|
+
`Obsidian was pinned to app version ${requestedVersion} but is actually running ${runningApiVersion} \u2014 the installer shell is too old for the pin and silently fell back to its own bundled asar. Pin an obsidianInstallerVersion at or above ${requestedVersion}'s run floor so the pinned version runs.`
|
|
38
|
+
);
|
|
39
|
+
this.name = "SilentAsarFallbackError";
|
|
40
|
+
this.requestedVersion = requestedVersion;
|
|
41
|
+
this.runningApiVersion = runningApiVersion;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
45
|
+
0 && (module.exports = {
|
|
46
|
+
SilentAsarFallbackError
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGRpc3RpbmN0IGVycm9yIHRocm93biB3aGVuIGEgYm9vdGVkIG93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGlzICoqbm90KipcbiAqIHJ1bm5pbmcgdGhlIHBpbm5lZCBhcHAgKGFzYXIpIHZlcnNpb24gXHUyMDE0IHRoZSBpbnN0YWxsZXIgc2hlbGwgc2lsZW50bHkgZmVsbCBiYWNrXG4gKiB0byBpdHMgb3duIGJ1bmRsZWQgYXNhciBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlIHN3YXBwZWQtaW4gcGluIChzZWVcbiAqIGBhc2FyLWZhbGxiYWNrLWRldGVjdGlvbmApLiBVbmxpa2UgYFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3JgIChhXG4gKiBibGFjay1zY3JlZW4gZGVhZCBib290KSB0aGlzIGZpcmVzIG9uIGEgKmhlYWx0aHkqIHJlbmRlcmVyIHJ1bm5pbmcgdGhlIHdyb25nXG4gKiAob2xkZXIpIHZlcnNpb24sIHNvIGl0IGlzIGRpc2NvdmVyZWQgcG9zdC1ib290IGZyb20gdGhlIGxpdmUgcnVubmluZyB2ZXJzaW9uXG4gKiByYXRoZXIgdGhhbiBmcm9tIGFuIGVtcHR5IGA8Ym9keT5gLiBJdCBpcyBleHBvcnRlZCBzbyBjYWxsZXJzIG9mIGBjb25uZWN0VG9DZHBgXG4gKiAvIHRoZSB0cmFuc3BvcnQgY2FuIGBpbnN0YW5jZW9mYC1tYXRjaCB0aGlzIHNwZWNpZmljIGZhaWx1cmUuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFNpbGVudEFzYXJGYWxsYmFja0Vycm9yfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqIFRoZSBwaW5uZWQgT2JzaWRpYW4gYXBwIChhc2FyKSB2ZXJzaW9uIHRoYXQgd2FzIHJlcXVlc3RlZC4gKi9cbiAgcmVhZG9ubHkgcmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKiBUaGUgT2JzaWRpYW4gYXBwIChhc2FyKSB2ZXJzaW9uIHRoZSBpbnN0YW5jZSBpcyBhY3R1YWxseSBydW5uaW5nLiAqL1xuICByZWFkb25seSBydW5uaW5nQXBpVmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlIGlzIHJ1bm5pbmcgYSBkaWZmZXJlbnQgYXBwIChhc2FyKSB2ZXJzaW9uXG4gKiB0aGFuIHRoZSBwaW5uZWQge0BsaW5rIFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMucmVxdWVzdGVkVmVyc2lvbn0gXHUyMDE0XG4gKiB0aGUgaW5zdGFsbGVyIHNoZWxsIHdhcyB0b28gb2xkIGZvciB0aGUgcGluIGFuZCBzaWxlbnRseSByZXZlcnRlZCB0byBpdHMgb3duXG4gKiBidW5kbGVkIGFzYXIuIENhcnJpZXMgYm90aCB2ZXJzaW9ucyBzbyBjYWxsZXJzIGNhbiBgaW5zdGFuY2VvZmAtbWF0Y2ggYW5kXG4gKiBzdXJmYWNlIGFuIGFjdGlvbmFibGUgcmVtZWR5IChwaW4gYSBuZXdlciBpbnN0YWxsZXIpLlxuICovXG5leHBvcnQgY2xhc3MgU2lsZW50QXNhckZhbGxiYWNrRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBUaGUgcGlubmVkIE9ic2lkaWFuIGFwcCAoYXNhcikgdmVyc2lvbiB0aGF0IHdhcyByZXF1ZXN0ZWQuICovXG4gIHB1YmxpYyByZWFkb25seSByZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBPYnNpZGlhbiBhcHAgKGFzYXIpIHZlcnNpb24gdGhlIGluc3RhbmNlIGlzIGFjdHVhbGx5IHJ1bm5pbmcuICovXG4gIHB1YmxpYyByZWFkb25seSBydW5uaW5nQXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBlcnJvciBmcm9tIHRoZSBwaW5uZWQgYW5kIGFjdHVhbGx5LXJ1bm5pbmcgdmVyc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcmVxdWVzdGVkIHBpbiBhbmQgdGhlIHZlcnNpb24gYWN0dWFsbHkgcnVubmluZy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBjb25zdCB7IHJlcXVlc3RlZFZlcnNpb24sIHJ1bm5pbmdBcGlWZXJzaW9uIH0gPSBwYXJhbXM7XG4gICAgc3VwZXIoXG4gICAgICBgT2JzaWRpYW4gd2FzIHBpbm5lZCB0byBhcHAgdmVyc2lvbiAke3JlcXVlc3RlZFZlcnNpb259IGJ1dCBpcyBhY3R1YWxseSBydW5uaW5nICR7cnVubmluZ0FwaVZlcnNpb259IFx1MjAxNCBgXG4gICAgICAgICsgJ3RoZSBpbnN0YWxsZXIgc2hlbGwgaXMgdG9vIG9sZCBmb3IgdGhlIHBpbiBhbmQgc2lsZW50bHkgZmVsbCBiYWNrIHRvIGl0cyBvd24gYnVuZGxlZCBhc2FyLiAnXG4gICAgICAgICsgYFBpbiBhbiBvYnNpZGlhbkluc3RhbGxlclZlcnNpb24gYXQgb3IgYWJvdmUgJHtyZXF1ZXN0ZWRWZXJzaW9ufSdzIHJ1biBmbG9vciBzbyB0aGUgcGlubmVkIHZlcnNpb24gcnVucy5gXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnU2lsZW50QXNhckZhbGxiYWNrRXJyb3InO1xuICAgIHRoaXMucmVxdWVzdGVkVmVyc2lvbiA9IHJlcXVlc3RlZFZlcnNpb247XG4gICAgdGhpcy5ydW5uaW5nQXBpVmVyc2lvbiA9IHJ1bm5pbmdBcGlWZXJzaW9uO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBK0JPLE1BQU0sZ0NBQWdDLE1BQU07QUFBQTtBQUFBLEVBRWpDO0FBQUE7QUFBQSxFQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1QsWUFBWSxRQUFrRDtBQUNuRSxVQUFNLEVBQUUsa0JBQWtCLGtCQUFrQixJQUFJO0FBQ2hEO0FBQUEsTUFDRSxzQ0FBc0MsZ0JBQWdCLDRCQUE0QixpQkFBaUIsa0pBRWhELGdCQUFnQjtBQUFBLElBQ3JFO0FBQ0EsU0FBSyxPQUFPO0FBQ1osU0FBSyxtQkFBbUI7QUFDeEIsU0FBSyxvQkFBb0I7QUFBQSxFQUMzQjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* The distinct error thrown when a booted owned Obsidian instance is **not**
|
|
5
|
+
* running the pinned app (asar) version — the installer shell silently fell back
|
|
6
|
+
* to its own bundled asar instead of running the swapped-in pin (see
|
|
7
|
+
* `asar-fallback-detection`). Unlike `RendererFailedToInitializeError` (a
|
|
8
|
+
* black-screen dead boot) this fires on a *healthy* renderer running the wrong
|
|
9
|
+
* (older) version, so it is discovered post-boot from the live running version
|
|
10
|
+
* rather than from an empty `<body>`. It is exported so callers of `connectToCdp`
|
|
11
|
+
* / the transport can `instanceof`-match this specific failure.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Parameters for the {@link SilentAsarFallbackError} constructor.
|
|
15
|
+
*/
|
|
16
|
+
export interface SilentAsarFallbackErrorConstructorParams {
|
|
17
|
+
/** The pinned Obsidian app (asar) version that was requested. */
|
|
18
|
+
readonly requestedVersion: string;
|
|
19
|
+
/** The Obsidian app (asar) version the instance is actually running. */
|
|
20
|
+
readonly runningApiVersion: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Thrown when a booted owned instance is running a different app (asar) version
|
|
24
|
+
* than the pinned {@link SilentAsarFallbackErrorConstructorParams.requestedVersion} —
|
|
25
|
+
* the installer shell was too old for the pin and silently reverted to its own
|
|
26
|
+
* bundled asar. Carries both versions so callers can `instanceof`-match and
|
|
27
|
+
* surface an actionable remedy (pin a newer installer).
|
|
28
|
+
*/
|
|
29
|
+
export declare class SilentAsarFallbackError extends Error {
|
|
30
|
+
/** The pinned Obsidian app (asar) version that was requested. */
|
|
31
|
+
readonly requestedVersion: string;
|
|
32
|
+
/** The Obsidian app (asar) version the instance is actually running. */
|
|
33
|
+
readonly runningApiVersion: string;
|
|
34
|
+
/**
|
|
35
|
+
* Creates the error from the pinned and actually-running versions.
|
|
36
|
+
*
|
|
37
|
+
* @param params - The requested pin and the version actually running.
|
|
38
|
+
*/
|
|
39
|
+
constructor(params: SilentAsarFallbackErrorConstructorParams);
|
|
40
|
+
}
|