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.
Files changed (97) hide show
  1. package/README.md +52 -11
  2. package/dist/lib/cjs/asar-fallback-detection.cjs +48 -0
  3. package/dist/lib/cjs/asar-fallback-detection.d.cts +75 -0
  4. package/dist/lib/cjs/avd-list.cjs +36 -0
  5. package/dist/lib/cjs/avd-list.d.cts +38 -0
  6. package/dist/lib/cjs/compatibility-options.cjs +18 -1
  7. package/dist/lib/cjs/compatibility-options.d.cts +41 -0
  8. package/dist/lib/cjs/connect-to-cdp.cjs +17 -18
  9. package/dist/lib/cjs/connect-to-cdp.d.cts +25 -0
  10. package/dist/lib/cjs/demo-vault-tree.cjs +52 -0
  11. package/dist/lib/cjs/demo-vault-tree.d.cts +34 -0
  12. package/dist/lib/cjs/ecmascript-version.cjs +63 -0
  13. package/dist/lib/cjs/ecmascript-version.d.cts +28 -0
  14. package/dist/lib/cjs/global-setup-core.cjs +44 -27
  15. package/dist/lib/cjs/global-setup-core.d.cts +15 -3
  16. package/dist/lib/cjs/index.cjs +10 -1
  17. package/dist/lib/cjs/index.d.cts +7 -1
  18. package/dist/lib/cjs/installer-asset.cjs +18 -3
  19. package/dist/lib/cjs/installer-asset.d.cts +26 -0
  20. package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +41 -0
  21. package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +26 -0
  22. package/dist/lib/cjs/jest/global-setup.cjs +2 -2
  23. package/dist/lib/cjs/jest/global-setup.d.cts +11 -1
  24. package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +26 -0
  25. package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +11 -0
  26. package/dist/lib/cjs/library.cjs +1 -1
  27. package/dist/lib/cjs/namespace-bootstrap.cjs +44 -7
  28. package/dist/lib/cjs/normalize-optional-properties.cjs +31 -0
  29. package/dist/lib/cjs/normalize-optional-properties.d.cts +26 -0
  30. package/dist/lib/cjs/obsidian-installer.cjs +6 -1
  31. package/dist/lib/cjs/obsidian-metadata.cjs +3775 -302
  32. package/dist/lib/cjs/obsidian-metadata.d.cts +71 -0
  33. package/dist/lib/cjs/obsidian-version-switch.cjs +5 -2
  34. package/dist/lib/cjs/owned-vault-seed.cjs +38 -0
  35. package/dist/lib/cjs/owned-vault-seed.d.cts +67 -0
  36. package/dist/lib/cjs/process-exit-message.cjs +47 -0
  37. package/dist/lib/cjs/process-exit-message.d.cts +48 -0
  38. package/dist/lib/cjs/silent-asar-fallback-error.cjs +48 -0
  39. package/dist/lib/cjs/silent-asar-fallback-error.d.cts +40 -0
  40. package/dist/lib/cjs/transport-desktop-cdp.cjs +197 -73
  41. package/dist/lib/cjs/transport-desktop-cdp.d.cts +74 -15
  42. package/dist/lib/cjs/transport-factory.cjs +135 -34
  43. package/dist/lib/cjs/transport-options.cjs +1 -1
  44. package/dist/lib/cjs/transport-options.d.cts +16 -0
  45. package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +37 -0
  46. package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +26 -0
  47. package/dist/lib/cjs/vitest/global-setup.cjs +2 -2
  48. package/dist/lib/cjs/vitest/global-setup.d.cts +11 -1
  49. package/dist/lib/esm/asar-fallback-detection.d.mts +75 -0
  50. package/dist/lib/esm/asar-fallback-detection.mjs +24 -0
  51. package/dist/lib/esm/avd-list.d.mts +38 -0
  52. package/dist/lib/esm/avd-list.mjs +11 -0
  53. package/dist/lib/esm/compatibility-options.d.mts +41 -0
  54. package/dist/lib/esm/compatibility-options.mjs +16 -1
  55. package/dist/lib/esm/connect-to-cdp.d.mts +25 -0
  56. package/dist/lib/esm/connect-to-cdp.mjs +17 -18
  57. package/dist/lib/esm/demo-vault-tree.d.mts +34 -0
  58. package/dist/lib/esm/demo-vault-tree.mjs +35 -0
  59. package/dist/lib/esm/ecmascript-version.d.mts +28 -0
  60. package/dist/lib/esm/ecmascript-version.mjs +39 -0
  61. package/dist/lib/esm/global-setup-core.d.mts +15 -3
  62. package/dist/lib/esm/global-setup-core.mjs +44 -27
  63. package/dist/lib/esm/index.d.mts +7 -1
  64. package/dist/lib/esm/index.mjs +7 -1
  65. package/dist/lib/esm/installer-asset.d.mts +26 -0
  66. package/dist/lib/esm/installer-asset.mjs +16 -2
  67. package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +26 -0
  68. package/dist/lib/esm/jest/global-setup-no-plugin.mjs +17 -0
  69. package/dist/lib/esm/jest/global-setup.d.mts +11 -1
  70. package/dist/lib/esm/jest/global-setup.mjs +2 -2
  71. package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +11 -0
  72. package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +6 -0
  73. package/dist/lib/esm/library.mjs +1 -1
  74. package/dist/lib/esm/namespace-bootstrap.mjs +44 -7
  75. package/dist/lib/esm/normalize-optional-properties.d.mts +26 -0
  76. package/dist/lib/esm/normalize-optional-properties.mjs +7 -0
  77. package/dist/lib/esm/obsidian-installer.mjs +8 -2
  78. package/dist/lib/esm/obsidian-metadata.d.mts +71 -0
  79. package/dist/lib/esm/obsidian-metadata.mjs +3775 -302
  80. package/dist/lib/esm/obsidian-version-switch.mjs +5 -2
  81. package/dist/lib/esm/owned-vault-seed.d.mts +67 -0
  82. package/dist/lib/esm/owned-vault-seed.mjs +14 -0
  83. package/dist/lib/esm/process-exit-message.d.mts +48 -0
  84. package/dist/lib/esm/process-exit-message.mjs +23 -0
  85. package/dist/lib/esm/silent-asar-fallback-error.d.mts +40 -0
  86. package/dist/lib/esm/silent-asar-fallback-error.mjs +24 -0
  87. package/dist/lib/esm/transport-desktop-cdp.d.mts +74 -15
  88. package/dist/lib/esm/transport-desktop-cdp.mjs +197 -73
  89. package/dist/lib/esm/transport-factory.mjs +139 -34
  90. package/dist/lib/esm/transport-options.d.mts +16 -0
  91. package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +26 -0
  92. package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +11 -0
  93. package/dist/lib/esm/vitest/global-setup.d.mts +11 -1
  94. package/dist/lib/esm/vitest/global-setup.mjs +2 -2
  95. package/dist/obsidian-integration-testing-9.0.0.tgz +0 -0
  96. package/package.json +40 -8
  97. package/dist/obsidian-integration-testing-8.3.0.tgz +0 -0
package/README.md CHANGED
@@ -26,7 +26,7 @@ import { defineConfig } from 'vitest/config';
26
26
 
27
27
  export default defineConfig({
28
28
  test: {
29
- globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
29
+ globalSetup: ['obsidian-integration-testing/vitest-global-setup-plugin'],
30
30
  },
31
31
  });
32
32
  ```
@@ -52,8 +52,8 @@ Or add it to `compilerOptions.types` in your `tsconfig.json`:
52
52
  ```ts
53
53
  // jest.config.ts
54
54
  export default {
55
- globalSetup: 'obsidian-integration-testing/jest-global-setup',
56
- globalTeardown: 'obsidian-integration-testing/jest-global-teardown',
55
+ globalSetup: 'obsidian-integration-testing/jest-global-setup-plugin',
56
+ globalTeardown: 'obsidian-integration-testing/jest-global-teardown-plugin',
57
57
  };
58
58
  ```
59
59
 
@@ -383,7 +383,7 @@ Use `getTempVault()` to get the temporary vault created by the global setup:
383
383
  ```ts
384
384
  import { describe, expect, it } from 'vitest';
385
385
  import { evalInObsidian } from 'obsidian-integration-testing';
386
- import { getTempVault } from 'obsidian-integration-testing/vitest-global-setup';
386
+ import { getTempVault } from 'obsidian-integration-testing/vitest-global-setup-plugin';
387
387
 
388
388
  describe('my-plugin', () => {
389
389
  const vault = getTempVault();
@@ -418,7 +418,7 @@ describe('my-plugin', () => {
418
418
 
419
419
  ```ts
420
420
  import { evalInObsidian } from 'obsidian-integration-testing';
421
- import { getTempVault } from 'obsidian-integration-testing/jest-global-setup';
421
+ import { getTempVault } from 'obsidian-integration-testing/jest-global-setup-plugin';
422
422
 
423
423
  describe('my-plugin', () => {
424
424
  const vault = getTempVault();
@@ -444,7 +444,7 @@ This capability reaches all three consumption paths.
444
444
 
445
445
  ```ts
446
446
  // integration-global-setup.ts
447
- import { createSetup } from 'obsidian-integration-testing/vitest-global-setup';
447
+ import { createSetup } from 'obsidian-integration-testing/vitest-global-setup-plugin';
448
448
 
449
449
  export const { setup, teardown } = createSetup({
450
450
  populate: () => ({
@@ -469,7 +469,7 @@ export default defineConfig({
469
469
 
470
470
  ```ts
471
471
  // integration-global-setup.ts — shared createSetup pair
472
- import { createSetup } from 'obsidian-integration-testing/jest-global-setup';
472
+ import { createSetup } from 'obsidian-integration-testing/jest-global-setup-plugin';
473
473
 
474
474
  export const { setup, teardown } = createSetup({
475
475
  populate: () => ({
@@ -500,6 +500,28 @@ Both files share the same `createSetup` instance (via the common module), so `te
500
500
 
501
501
  **Manual** — when wiring `TempVault` yourself (without a framework global setup), call `vault.populate()` before `vault.register()`, as shown in [Create a temporary vault](#create-a-temporary-vault).
502
502
 
503
+ ### Non-plugin consumers
504
+
505
+ If your project is **not** a plugin — a tool that only needs a registered, empty vault to `evalInObsidian` against (e.g. a typings crawler) — point `globalSetup` at the **`-no-plugin`** entry point instead of `-plugin`. It still launches one owned, off-screen Obsidian instance and publishes its endpoint to workers so each worker **attaches** to it, but skips reading `dist/manifest.json`, copying a plugin, writing `community-plugins.json`, and enabling a plugin. No wrapper module needed:
506
+
507
+ ```ts
508
+ // vitest.config.ts
509
+ import { defineConfig } from 'vitest/config';
510
+
511
+ export default defineConfig({
512
+ test: {
513
+ globalSetup: ['obsidian-integration-testing/vitest-global-setup-no-plugin']
514
+ }
515
+ });
516
+ ```
517
+
518
+ ```ts
519
+ // your.integration.test.ts — read the empty registered vault's path
520
+ import { getTempVault } from 'obsidian-integration-testing/vitest-global-setup-no-plugin';
521
+ ```
522
+
523
+ For Jest, use `obsidian-integration-testing/jest-global-setup-no-plugin` (`globalSetup`) + `obsidian-integration-testing/jest-global-teardown-no-plugin` (`globalTeardown`). If you also need to pre-populate the empty vault, build the pair yourself with `createSetup({ installPlugin: false, populate })` from the `-plugin` factory and re-export its `setup`/`teardown` (the same wrapper pattern shown above for `populate`).
524
+
503
525
  > [!WARNING]
504
526
  >
505
527
  > **Parallelism:**
@@ -591,7 +613,7 @@ By default the library **launches and owns an isolated Obsidian instance** in a
591
613
  export default defineConfig({
592
614
  test: {
593
615
  fileParallelism: false,
594
- globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
616
+ globalSetup: ['obsidian-integration-testing/vitest-global-setup-plugin'],
595
617
  },
596
618
  });
597
619
  ```
@@ -721,7 +743,7 @@ Runs tests against Obsidian Mobile on an Android emulator or real device via App
721
743
  export default defineConfig({
722
744
  test: {
723
745
  fileParallelism: false,
724
- globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
746
+ globalSetup: ['obsidian-integration-testing/vitest-global-setup-plugin'],
725
747
  environmentOptions: {
726
748
  obsidianTransport: {
727
749
  type: 'obsidian-android-appium',
@@ -765,6 +787,25 @@ save a snapshot, and always boot from that snapshot. Either way, an ANR signals
765
787
  under-provisioned, so also give the AVD more vCPUs/RAM and confirm hardware acceleration
766
788
  (`emulator -accel-check`).
767
789
 
790
+ #### Troubleshooting: "Android AVD ... not found" / "Appium server ... exited during startup"
791
+
792
+ The Android setup fails fast (rather than spinning out a timeout) when the toolchain cannot be brought
793
+ up, naming what is missing:
794
+
795
+ - **`Android AVD "<name>" not found. Available AVDs: ...`** — the `avdName` you passed does not exist.
796
+ Run `emulator -list-avds`, then either point `avdName` at a listed AVD or create the one you want
797
+ (Android Studio Device Manager, or `avdmanager create avd`). AVD creation is not automated — it needs a
798
+ system-image download, license acceptance, and hardware/API-level choices.
799
+ - **`Auto-started Appium server ... during startup` / `... did not become ready ...`** — the harness
800
+ auto-started Appium (`npx --no-install appium`) but it exited or never responded; the message appends
801
+ the captured server output. Usually a missing/broken toolchain: pass `isAppiumConsoleVisible: true` to
802
+ watch the live server log, or manage Appium yourself (`shouldAutoStartAppium: false`, pointing
803
+ `appiumUrl` at your own running server).
804
+ - **`Appium was installed ... but is still not resolvable ...`** — the auto-install ran
805
+ `npm install -g appium`, but the npm global bin dir is not on PATH (common with scoop/nvm-managed Node).
806
+ Add it to PATH (see `npm config get prefix`), or set `shouldAutoInstallAppiumDependencies: false` and
807
+ install Appium yourself.
808
+
768
809
  #### Troubleshooting: "Obsidian layout did not become ready"
769
810
 
770
811
  Registering a vault reloads the page, triggering a full Obsidian re-init (reopen the vault and
@@ -789,7 +830,7 @@ export default defineConfig({
789
830
  test: {
790
831
  name: 'integration-tests:desktop-cdp',
791
832
  fileParallelism: false,
792
- globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
833
+ globalSetup: ['obsidian-integration-testing/vitest-global-setup-plugin'],
793
834
  include: ['src/**/*.integration.test.ts'],
794
835
  exclude: ['src/**/*.android.integration.test.ts'],
795
836
  // default transport, can be omitted
@@ -802,7 +843,7 @@ export default defineConfig({
802
843
  test: {
803
844
  name: 'integration-tests:android-appium',
804
845
  fileParallelism: false,
805
- globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
846
+ globalSetup: ['obsidian-integration-testing/vitest-global-setup-plugin'],
806
847
  include: ['src/**/*.android.integration.test.ts'],
807
848
  environmentOptions: {
808
849
  obsidianTransport: {
@@ -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 asar_fallback_detection_exports = {};
20
+ __export(asar_fallback_detection_exports, {
21
+ checkAsarFallback: () => checkAsarFallback
22
+ });
23
+ module.exports = __toCommonJS(asar_fallback_detection_exports);
24
+ var import_obsidian_version = require("./obsidian-version.cjs");
25
+ function checkAsarFallback(params) {
26
+ const { requestedVersion, runningApiVersion } = params;
27
+ if (requestedVersion === void 0 || runningApiVersion === void 0) {
28
+ return {
29
+ requestedVersion: requestedVersion ?? null,
30
+ runningApiVersion: runningApiVersion ?? null,
31
+ tier: "unknown"
32
+ };
33
+ }
34
+ if ((0, import_obsidian_version.compareVersions)(runningApiVersion, requestedVersion) === 0) {
35
+ return { requestedVersion, runningApiVersion, tier: "match" };
36
+ }
37
+ return {
38
+ message: `Obsidian was pinned to app version ${requestedVersion} but is actually running ${runningApiVersion} \u2014 the installer silently fell back to its own bundled asar instead of running the pinned version. Pin an obsidianInstallerVersion at or above ${requestedVersion}'s run floor so the pin actually runs.`,
39
+ requestedVersion,
40
+ runningApiVersion,
41
+ tier: "fallback"
42
+ };
43
+ }
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ checkAsarFallback
47
+ });
48
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSB2ZXJkaWN0IG9uIHdoZXRoZXIgYSBib290ZWQgb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgaXMgYWN0dWFsbHkgcnVubmluZ1xuICogdGhlIHBpbm5lZCBhcHAgKGFzYXIpIHZlcnNpb24sIG9yICoqc2lsZW50bHkgZmVsbCBiYWNrKiogdG8gdGhlIGluc3RhbGxlcidzIG93blxuICogYnVuZGxlZCBhc2FyLiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGBcbiAqICh3aGljaCByZWFkcyB0aGUgbGl2ZSB2ZXJzaW9uIG92ZXIgQ0RQIGFuZCBpcyBleGNsdWRlZCBmcm9tIHVuaXQgdGVzdHMpIHNvIHRoZVxuICogdGllciBsb2dpYyBzdGF5cyB1bml0LXRlc3RhYmxlIFx1MjAxNCBtaXJyb3JpbmcgdGhlIGBpbnN0YWxsZXItY29tcGF0aWJpbGl0eWAgL1xuICogYGVsZWN0cm9uLWNvbXBhdGliaWxpdHlgIC8gYHJlbmRlcmVyLWJvb3QtZGV0ZWN0aW9uYCBzcGxpdC5cbiAqXG4gKiBXaGVuIGFuIGFzYXIgaXMgc3dhcHBlZCBvbnRvIGFuIGluc3RhbGxlciBzaGVsbCBiZWxvdyBpdHMgcmVhbCBib290IGZsb29yLCB0aGVcbiAqIHJlbmRlcmVyIGRvZXMgbm90IGFsd2F5cyBkZWFkLWJvb3QgKHRoZSBibGFjayBzY3JlZW4gYHJlbmRlcmVyLWJvb3QtZGV0ZWN0aW9uYFxuICogY2F0Y2hlcykuIFNvbWUgYXBwIHZlcnNpb25zIGluc3RlYWQgKipzaWxlbnRseSByZXZlcnQgdG8gdGhlIGluc3RhbGxlcidzIG93blxuICogYnVuZGxlZCBhc2FyKiogYW5kIHJlbmRlciBhIHBlcmZlY3RseSBoZWFsdGh5IFVJIG9mIHRoZSAqd3JvbmcgKG9sZGVyKSogdmVyc2lvbi5cbiAqIFRoZSBkZWFkLWJvb3QgZGV0ZWN0b3IgcmVhZHMgdGhhdCBoZWFsdGh5IFVJIGFzIGEgZmFsc2UtcG9zaXRpdmUgXCJydW5uYWJsZVwiIFx1MjAxNFxuICogZXhhY3RseSBob3cgT2JzaWRpYW4gYDEuMTMuMGAgb24gaW5zdGFsbGVyIGAxLjEuOWAgd2FzIGZpcnN0IG1pcy1tZWFzdXJlZCAoaXRcbiAqIHJlcG9ydHMgYGFwaVZlcnNpb25gIGAxLjEuOWAsIG5vdCBgMS4xMy4wYCkuXG4gKlxuICogVGhlIGRpc2NyaW1pbmF0b3IgaXMgdGhlICoqcnVubmluZyoqIGFwcCB2ZXJzaW9uLCByZWFkIGxpdmUgcG9zdC1ib290XG4gKiAoYGlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2ZXJzaW9uJylgIC8gYG9ic2lkaWFuTW9kdWxlLmFwaVZlcnNpb25gLCB3aGljaCBib3RoXG4gKiB0cmFjayB0aGUgYXNhciBhY3R1YWxseSBydW5uaW5nKS4gVGhpcyB2ZXJkaWN0IGNvbXBhcmVzIGl0IHRvIHRoZSBwaW5uZWRcbiAqIHZlcnNpb246IGVxdWFsIFx1MjFEMiBgJ21hdGNoJ2AsIGRpZmZlcmVudCBcdTIxRDIgYCdmYWxsYmFjaydgICh0aGUgcGluIHdhcyBub3QgaG9ub3JlZCksXG4gKiBhbmQgYCd1bmtub3duJ2Agd2hlbiBlaXRoZXIgdmVyc2lvbiBpcyB1bmF2YWlsYWJsZSAobm8gYXNhciB3YXMgc3dhcHBlZCwgb3IgdGhlXG4gKiBsaXZlIHZlcnNpb24gY291bGQgbm90IGJlIHJlYWQpIFx1MjAxNCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgaXMgdGhyb3duIG9yIHdhcm5lZC5cbiAqL1xuXG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcblxuLyoqXG4gKiBUaGUgc2lsZW50LWFzYXItZmFsbGJhY2sgdmVyZGljdCBmb3IgYSBib290ZWQgb3duZWQgaW5zdGFuY2UsIGNhcnJpZWQgYXMgZGF0YVxuICogb24gdGhlIHRyYW5zcG9ydCAvIGNvbm5lY3Rpb24gcmVzdWx0IHNvIGNvbnN1bWVycyBjYW4gYXNzZXJ0IG9uIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzYXJGYWxsYmFjayB7XG4gIC8qKiBBIGh1bWFuLXJlYWRhYmxlIGV4cGxhbmF0aW9uLCBwcmVzZW50IGZvciB0aGUgYCdmYWxsYmFjaydgIHRpZXIuICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBwaW5uZWQgYXBwIChhc2FyKSB2ZXJzaW9uIHRoYXQgd2FzIHJlcXVlc3RlZCwgb3IgYG51bGxgIHdoZW4gbm9uZS4gKi9cbiAgcmVhZG9ubHkgcmVxdWVzdGVkVmVyc2lvbjogbnVsbCB8IHN0cmluZztcblxuICAvKiogVGhlIGFwcCAoYXNhcikgdmVyc2lvbiBhY3R1YWxseSBydW5uaW5nLCBvciBgbnVsbGAgd2hlbiB1bnJlYWRhYmxlLiAqL1xuICByZWFkb25seSBydW5uaW5nQXBpVmVyc2lvbjogbnVsbCB8IHN0cmluZztcblxuICAvKiogVGhlIHJlc29sdmVkIGZhbGxiYWNrIHRpZXIuICovXG4gIHJlYWRvbmx5IHRpZXI6IEFzYXJGYWxsYmFja1RpZXI7XG59XG5cbi8qKlxuICogVGhlIHNpbGVudC1hc2FyLWZhbGxiYWNrIHRpZXIgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIC0gYCdtYXRjaCdgIFx1MjAxNCB0aGUgcnVubmluZyBhcHAgdmVyc2lvbiBlcXVhbHMgdGhlIHBpbm5lZCB2ZXJzaW9uOyB0aGUgcGluIHdhc1xuICogICBob25vcmVkLlxuICogLSBgJ2ZhbGxiYWNrJ2AgXHUyMDE0IHRoZSBydW5uaW5nIGFwcCB2ZXJzaW9uIGRpZmZlcnMgZnJvbSB0aGUgcGlubmVkIHZlcnNpb247IHRoZVxuICogICBpbnN0YWxsZXIgc2lsZW50bHkgcmFuIGEgZGlmZmVyZW50IChpdHMgb3duIGJ1bmRsZWQpIGFzYXIgaW5zdGVhZCBvZiB0aGUgcGluLlxuICogLSBgJ3Vua25vd24nYCBcdTIwMTQgY2Fubm90IGJlIGRldGVybWluZWQgKG5vIGFzYXIgd2FzIHN3YXBwZWQsIHNvIHRoZXJlIGlzIG5vIHBpbiB0b1xuICogICB2ZXJpZnksIG9yIHRoZSBsaXZlIHJ1bm5pbmcgdmVyc2lvbiBjb3VsZCBub3QgYmUgcmVhZCkuXG4gKi9cbmV4cG9ydCB0eXBlIEFzYXJGYWxsYmFja1RpZXIgPSAnZmFsbGJhY2snIHwgJ21hdGNoJyB8ICd1bmtub3duJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2hlY2tBc2FyRmFsbGJhY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrQXNhckZhbGxiYWNrUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgT2JzaWRpYW4gYXBwIChhc2FyKSB2ZXJzaW9uIHRoZSBvd25lZCBpbnN0YW5jZSB3YXMgYXNrZWQgdG8gcnVuLFxuICAgKiBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIGFzYXIgd2FzIHN3YXBwZWQgKHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gdmVyaWZ5KS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RlZFZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCAoYXNhcikgdmVyc2lvbiB0aGUgaW5zdGFuY2UgaXMgYWN0dWFsbHkgcnVubmluZywgcmVhZCBsaXZlXG4gICAqIHBvc3QtYm9vdCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBjb3VsZCBub3QgYmUgcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bm5pbmdBcGlWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHNpbGVudC1hc2FyLWZhbGxiYWNrIHZlcmRpY3QgZm9yIGEgYm9vdGVkIG93bmVkIGluc3RhbmNlLlxuICpcbiAqIE9ubHkgYCdmYWxsYmFjaydgIHdhcnJhbnRzIGFjdGlvbiAoYSB0aHJvdyAvIHdhcm5pbmcpOyBgJ21hdGNoJ2AgYW5kIGAndW5rbm93bidgXG4gKiBhcmUgc2lsZW50LiBDb21wYXJpc29uIGlzIGEgcHVyZSBgeC55LnpgIHZlcnNpb24gY29tcGFyZSBcdTIwMTQgbm8gSS9PLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGlubmVkIHZlcnNpb24gYW5kIHRoZSBsaXZlIHJ1bm5pbmcgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBmYWxsYmFjayB2ZXJkaWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBc2FyRmFsbGJhY2socGFyYW1zOiBDaGVja0FzYXJGYWxsYmFja1BhcmFtcyk6IEFzYXJGYWxsYmFjayB7XG4gIGNvbnN0IHsgcmVxdWVzdGVkVmVyc2lvbiwgcnVubmluZ0FwaVZlcnNpb24gfSA9IHBhcmFtcztcblxuICBpZiAocmVxdWVzdGVkVmVyc2lvbiA9PT0gdW5kZWZpbmVkIHx8IHJ1bm5pbmdBcGlWZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWVzdGVkVmVyc2lvbjogcmVxdWVzdGVkVmVyc2lvbiA/PyBudWxsLFxuICAgICAgcnVubmluZ0FwaVZlcnNpb246IHJ1bm5pbmdBcGlWZXJzaW9uID8/IG51bGwsXG4gICAgICB0aWVyOiAndW5rbm93bidcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNvbXBhcmVWZXJzaW9ucyhydW5uaW5nQXBpVmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbikgPT09IDApIHtcbiAgICByZXR1cm4geyByZXF1ZXN0ZWRWZXJzaW9uLCBydW5uaW5nQXBpVmVyc2lvbiwgdGllcjogJ21hdGNoJyB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiBgT2JzaWRpYW4gd2FzIHBpbm5lZCB0byBhcHAgdmVyc2lvbiAke3JlcXVlc3RlZFZlcnNpb259IGJ1dCBpcyBhY3R1YWxseSBydW5uaW5nICR7cnVubmluZ0FwaVZlcnNpb259IFx1MjAxNCBgXG4gICAgICArICd0aGUgaW5zdGFsbGVyIHNpbGVudGx5IGZlbGwgYmFjayB0byBpdHMgb3duIGJ1bmRsZWQgYXNhciBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhlIHBpbm5lZCB2ZXJzaW9uLiAnXG4gICAgICArIGBQaW4gYW4gb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uIGF0IG9yIGFib3ZlICR7cmVxdWVzdGVkVmVyc2lvbn0ncyBydW4gZmxvb3Igc28gdGhlIHBpbiBhY3R1YWxseSBydW5zLmAsXG4gICAgcmVxdWVzdGVkVmVyc2lvbixcbiAgICBydW5uaW5nQXBpVmVyc2lvbixcbiAgICB0aWVyOiAnZmFsbGJhY2snXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMEJBLDhCQUFnQztBQTBEekIsU0FBUyxrQkFBa0IsUUFBK0M7QUFDL0UsUUFBTSxFQUFFLGtCQUFrQixrQkFBa0IsSUFBSTtBQUVoRCxNQUFJLHFCQUFxQixVQUFhLHNCQUFzQixRQUFXO0FBQ3JFLFdBQU87QUFBQSxNQUNMLGtCQUFrQixvQkFBb0I7QUFBQSxNQUN0QyxtQkFBbUIscUJBQXFCO0FBQUEsTUFDeEMsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBRUEsVUFBSSx5Q0FBZ0IsbUJBQW1CLGdCQUFnQixNQUFNLEdBQUc7QUFDOUQsV0FBTyxFQUFFLGtCQUFrQixtQkFBbUIsTUFBTSxRQUFRO0FBQUEsRUFDOUQ7QUFFQSxTQUFPO0FBQUEsSUFDTCxTQUFTLHNDQUFzQyxnQkFBZ0IsNEJBQTRCLGlCQUFpQix1SkFFekQsZ0JBQWdCO0FBQUEsSUFDbkU7QUFBQSxJQUNBO0FBQUEsSUFDQSxNQUFNO0FBQUEsRUFDUjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure verdict on whether a booted owned Obsidian instance is actually running
5
+ * the pinned app (asar) version, or **silently fell back** to the installer's own
6
+ * bundled asar. Kept separate from the integration-only `transport-desktop-cdp`
7
+ * (which reads the live version over CDP and is excluded from unit tests) so the
8
+ * tier logic stays unit-testable — mirroring the `installer-compatibility` /
9
+ * `electron-compatibility` / `renderer-boot-detection` split.
10
+ *
11
+ * When an asar is swapped onto an installer shell below its real boot floor, the
12
+ * renderer does not always dead-boot (the black screen `renderer-boot-detection`
13
+ * catches). Some app versions instead **silently revert to the installer's own
14
+ * bundled asar** and render a perfectly healthy UI of the *wrong (older)* version.
15
+ * The dead-boot detector reads that healthy UI as a false-positive "runnable" —
16
+ * exactly how Obsidian `1.13.0` on installer `1.1.9` was first mis-measured (it
17
+ * reports `apiVersion` `1.1.9`, not `1.13.0`).
18
+ *
19
+ * The discriminator is the **running** app version, read live post-boot
20
+ * (`ipcRenderer.sendSync('version')` / `obsidianModule.apiVersion`, which both
21
+ * track the asar actually running). This verdict compares it to the pinned
22
+ * version: equal ⇒ `'match'`, different ⇒ `'fallback'` (the pin was not honored),
23
+ * and `'unknown'` when either version is unavailable (no asar was swapped, or the
24
+ * live version could not be read) — in which case nothing is thrown or warned.
25
+ */
26
+ /**
27
+ * The silent-asar-fallback verdict for a booted owned instance, carried as data
28
+ * on the transport / connection result so consumers can assert on it.
29
+ */
30
+ export interface AsarFallback {
31
+ /** A human-readable explanation, present for the `'fallback'` tier. */
32
+ readonly message?: string;
33
+ /** The pinned app (asar) version that was requested, or `null` when none. */
34
+ readonly requestedVersion: null | string;
35
+ /** The app (asar) version actually running, or `null` when unreadable. */
36
+ readonly runningApiVersion: null | string;
37
+ /** The resolved fallback tier. */
38
+ readonly tier: AsarFallbackTier;
39
+ }
40
+ /**
41
+ * The silent-asar-fallback tier for a booted owned instance.
42
+ *
43
+ * - `'match'` — the running app version equals the pinned version; the pin was
44
+ * honored.
45
+ * - `'fallback'` — the running app version differs from the pinned version; the
46
+ * installer silently ran a different (its own bundled) asar instead of the pin.
47
+ * - `'unknown'` — cannot be determined (no asar was swapped, so there is no pin to
48
+ * verify, or the live running version could not be read).
49
+ */
50
+ export type AsarFallbackTier = 'fallback' | 'match' | 'unknown';
51
+ /**
52
+ * Parameters for {@link checkAsarFallback}.
53
+ */
54
+ export interface CheckAsarFallbackParams {
55
+ /**
56
+ * The pinned Obsidian app (asar) version the owned instance was asked to run,
57
+ * or `undefined` when no asar was swapped (so there is nothing to verify).
58
+ */
59
+ readonly requestedVersion: string | undefined;
60
+ /**
61
+ * The Obsidian app (asar) version the instance is actually running, read live
62
+ * post-boot, or `undefined` when it could not be read.
63
+ */
64
+ readonly runningApiVersion: string | undefined;
65
+ }
66
+ /**
67
+ * Computes the silent-asar-fallback verdict for a booted owned instance.
68
+ *
69
+ * Only `'fallback'` warrants action (a throw / warning); `'match'` and `'unknown'`
70
+ * are silent. Comparison is a pure `x.y.z` version compare — no I/O.
71
+ *
72
+ * @param params - The pinned version and the live running version.
73
+ * @returns The fallback verdict.
74
+ */
75
+ export declare function checkAsarFallback(params: CheckAsarFallbackParams): AsarFallback;
@@ -0,0 +1,36 @@
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 avd_list_exports = {};
20
+ __export(avd_list_exports, {
21
+ checkAvdExists: () => checkAvdExists,
22
+ listAvailableAvds: () => listAvailableAvds
23
+ });
24
+ module.exports = __toCommonJS(avd_list_exports);
25
+ function checkAvdExists(params) {
26
+ return listAvailableAvds(params.avdListOutput).includes(params.avdName);
27
+ }
28
+ function listAvailableAvds(avdListOutput) {
29
+ return avdListOutput.split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && !line.includes("|"));
30
+ }
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ checkAvdExists,
34
+ listAvailableAvds
35
+ });
36
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F2ZC1saXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBoZWxwZXJzIGZvciBwYXJzaW5nIGBlbXVsYXRvciAtbGlzdC1hdmRzYCBvdXRwdXQ6IGV4dHJhY3RpbmcgdGhlXG4gKiBhdmFpbGFibGUgQVZEIG5hbWVzIGFuZCBjaGVja2luZyB3aGV0aGVyIGEgcmVxdWVzdGVkIEFWRCBleGlzdHMuXG4gKlxuICogS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbi1vbmx5IGB0cmFuc3BvcnQtZmFjdG9yeWAgKGV4Y2x1ZGVkIGZyb21cbiAqIHVuaXQgdGVzdHMpIHNvIHRoZSBwYXJzaW5nIHN0YXlzIHVuaXQtdGVzdGFibGUgXHUyMDE0IHRoZSBmYWN0b3J5IGl0c2VsZiBzaGVsbHMgb3V0XG4gKiB0byB0aGUgYGVtdWxhdG9yYCBiaW5hcnkuXG4gKi9cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2hlY2tBdmRFeGlzdHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrQXZkRXhpc3RzUGFyYW1zIHtcbiAgLyoqIFJhdyBzdGRvdXQgb2YgYGVtdWxhdG9yIC1saXN0LWF2ZHNgIFx1MjAxNCBvbmUgQVZEIG5hbWUgcGVyIGxpbmUuICovXG4gIHJlYWRvbmx5IGF2ZExpc3RPdXRwdXQ6IHN0cmluZztcblxuICAvKiogVGhlIEFWRCBuYW1lIHRvIGxvb2sgZm9yLiAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZ2l2ZW4gQVZEIGV4aXN0cywgZnJvbSB0aGUgcmF3IHN0ZG91dCBvZlxuICogYGVtdWxhdG9yIC1saXN0LWF2ZHNgLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbGlzdGluZyBvdXRwdXQgYW5kIHRoZSBBVkQgbmFtZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBBVkQgbmFtZSBhcHBlYXJzIGluIHRoZSBsaXN0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tBdmRFeGlzdHMocGFyYW1zOiBDaGVja0F2ZEV4aXN0c1BhcmFtcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGlzdEF2YWlsYWJsZUF2ZHMocGFyYW1zLmF2ZExpc3RPdXRwdXQpLmluY2x1ZGVzKHBhcmFtcy5hdmROYW1lKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGF2YWlsYWJsZSBBVkQgbmFtZXMgZnJvbSB0aGUgcmF3IHN0ZG91dCBvZiBgZW11bGF0b3IgLWxpc3QtYXZkc2AuXG4gKlxuICogVGhlIGNvbW1hbmQgcHJpbnRzIG9uZSBBVkQgbmFtZSBwZXIgbGluZTsgYmxhbmsgbGluZXMgYW5kIHN1cnJvdW5kaW5nXG4gKiB3aGl0ZXNwYWNlIGFyZSBpZ25vcmVkLiBTb21lIGVtdWxhdG9yIGJ1aWxkcyBlbWl0IGFuIGluZm9ybWF0aW9uYWwgYmFubmVyXG4gKiAoZS5nLiBgSU5GTyAgICB8IC4uLmApIHRvIHN0ZG91dCBiZWZvcmUgdGhlIGxpc3QsIHNvIHRob3NlIGxpbmVzIGFyZSBkcm9wcGVkLlxuICpcbiAqIEBwYXJhbSBhdmRMaXN0T3V0cHV0IC0gUmF3IHN0ZG91dCBvZiBgZW11bGF0b3IgLWxpc3QtYXZkc2AuXG4gKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIEFWRCBuYW1lcywgaW4gbGlzdGVkIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdEF2YWlsYWJsZUF2ZHMoYXZkTGlzdE91dHB1dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gYXZkTGlzdE91dHB1dFxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDAgJiYgIWxpbmUuaW5jbHVkZXMoJ3wnKSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2Qk8sU0FBUyxlQUFlLFFBQXVDO0FBQ3BFLFNBQU8sa0JBQWtCLE9BQU8sYUFBYSxFQUFFLFNBQVMsT0FBTyxPQUFPO0FBQ3hFO0FBWU8sU0FBUyxrQkFBa0IsZUFBaUM7QUFDakUsU0FBTyxjQUNKLE1BQU0sSUFBSSxFQUNWLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLEVBQ3pCLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxLQUFLLENBQUMsS0FBSyxTQUFTLEdBQUcsQ0FBQztBQUM1RDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Pure helpers for parsing `emulator -list-avds` output: extracting the
5
+ * available AVD names and checking whether a requested AVD exists.
6
+ *
7
+ * Kept separate from the integration-only `transport-factory` (excluded from
8
+ * unit tests) so the parsing stays unit-testable — the factory itself shells out
9
+ * to the `emulator` binary.
10
+ */
11
+ /**
12
+ * Parameters for {@link checkAvdExists}.
13
+ */
14
+ export interface CheckAvdExistsParams {
15
+ /** Raw stdout of `emulator -list-avds` — one AVD name per line. */
16
+ readonly avdListOutput: string;
17
+ /** The AVD name to look for. */
18
+ readonly avdName: string;
19
+ }
20
+ /**
21
+ * Decides whether a given AVD exists, from the raw stdout of
22
+ * `emulator -list-avds`.
23
+ *
24
+ * @param params - The listing output and the AVD name to check.
25
+ * @returns `true` when the AVD name appears in the listing.
26
+ */
27
+ export declare function checkAvdExists(params: CheckAvdExistsParams): boolean;
28
+ /**
29
+ * Parses the available AVD names from the raw stdout of `emulator -list-avds`.
30
+ *
31
+ * The command prints one AVD name per line; blank lines and surrounding
32
+ * whitespace are ignored. Some emulator builds emit an informational banner
33
+ * (e.g. `INFO | ...`) to stdout before the list, so those lines are dropped.
34
+ *
35
+ * @param avdListOutput - Raw stdout of `emulator -list-avds`.
36
+ * @returns The available AVD names, in listed order.
37
+ */
38
+ export declare function listAvailableAvds(avdListOutput: string): string[];
@@ -18,11 +18,23 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var compatibility_options_exports = {};
20
20
  __export(compatibility_options_exports, {
21
+ resolveAsarFallbackAction: () => resolveAsarFallbackAction,
21
22
  resolveInstallerCompatibilityAction: () => resolveInstallerCompatibilityAction,
22
23
  resolveShouldThrowOnIncompatibleInstaller: () => resolveShouldThrowOnIncompatibleInstaller,
24
+ resolveShouldThrowOnSilentAsarFallback: () => resolveShouldThrowOnSilentAsarFallback,
23
25
  resolveShouldWarnOnCompatibilityIssues: () => resolveShouldWarnOnCompatibilityIssues
24
26
  });
25
27
  module.exports = __toCommonJS(compatibility_options_exports);
28
+ function resolveAsarFallbackAction(params) {
29
+ const { shouldThrowOnSilentAsarFallback, shouldWarnOnCompatibilityIssues, tier } = params;
30
+ if (tier !== "fallback") {
31
+ return "silent";
32
+ }
33
+ if (shouldThrowOnSilentAsarFallback) {
34
+ return "throw";
35
+ }
36
+ return shouldWarnOnCompatibilityIssues ? "warn" : "silent";
37
+ }
26
38
  function resolveInstallerCompatibilityAction(params) {
27
39
  const { shouldThrowOnIncompatibleInstaller, shouldWarnOnCompatibilityIssues, tier } = params;
28
40
  if (tier === "unrunnable") {
@@ -39,13 +51,18 @@ function resolveInstallerCompatibilityAction(params) {
39
51
  function resolveShouldThrowOnIncompatibleInstaller(shouldThrowOnIncompatibleInstaller) {
40
52
  return shouldThrowOnIncompatibleInstaller ?? true;
41
53
  }
54
+ function resolveShouldThrowOnSilentAsarFallback(shouldThrowOnSilentAsarFallback) {
55
+ return shouldThrowOnSilentAsarFallback ?? true;
56
+ }
42
57
  function resolveShouldWarnOnCompatibilityIssues(shouldWarnOnCompatibilityIssues) {
43
58
  return shouldWarnOnCompatibilityIssues ?? true;
44
59
  }
45
60
  // Annotate the CommonJS export names for ESM import in node:
46
61
  0 && (module.exports = {
62
+ resolveAsarFallbackAction,
47
63
  resolveInstallerCompatibilityAction,
48
64
  resolveShouldThrowOnIncompatibleInstaller,
65
+ resolveShouldThrowOnSilentAsarFallback,
49
66
  resolveShouldWarnOnCompatibilityIssues
50
67
  });
51
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbXBhdGliaWxpdHktb3B0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFB1cmUgcmVzb2x1dGlvbiBvZiB0aGUgdHdvIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkga25vYnMgXHUyMDE0IHdoZXRoZXIgdGhlXG4gKiBpbnN0YWxsZXJcdTIxOTRhcHAgLyBydW50aW1lLUVsZWN0cm9uIG5hZyB3YXJuaW5ncyBhcmUgZW1pdHRlZCwgYW5kIHdoZXRoZXIgYW5cbiAqIGAndW5ydW5uYWJsZSdgIGluc3RhbGxlclx1MjE5NGFwcCBwYWlyIGZhaWxzIGZhc3Qgd2l0aFxuICoge0BsaW5rIEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcn0gYmVmb3JlIGxhdW5jaC5cbiAqXG4gKiBCb3RoIGRlZmF1bHQgdG8gdG9kYXkncyBiZWhhdmlvciAoYHRydWVgKTogd2FybmluZ3Mgb24sIGFuZCBhbiB1bnJ1bm5hYmxlIHBpblxuICogdGhyb3dzIHByb2FjdGl2ZWx5LiBTZXR0aW5nIGBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzYCB0byBgZmFsc2VgXG4gKiBzaWxlbmNlcyBib3RoIG5hZ3MgKHRoZSB2ZXJkaWN0cyBhcmUgc3RpbGwgY29tcHV0ZWQgYW5kIHN1cmZhY2VkIGFzIGRhdGEpO1xuICogc2V0dGluZyBgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcmAgdG8gYGZhbHNlYCBsZXRzIGFuIHVucnVubmFibGUgcGluXG4gKiBwcm9jZWVkIHRvIGxhdW5jaCwgd2hlcmUgdGhlIHJlYWN0aXZlIGRlYWQtYm9vdCBmYXN0LWZhaWxcbiAqIChgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmApIHN0aWxsIGNhdGNoZXMgaXQuXG4gKlxuICogS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbi1vbmx5IGxhdW5jaCBjb2RlIChgdHJhbnNwb3J0LWZhY3RvcnlgLFxuICogYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGAsIGJvdGggZXhjbHVkZWQgZnJvbSB1bml0IHRlc3RzKSBzbyB0aGUgZGVmYXVsdFxuICogcmVzb2x1dGlvbiBzdGF5cyB1bml0LXRlc3RhYmxlIFx1MjAxNCBtaXJyb3JpbmcgdGhlIGB2aXNpYmlsaXR5LnRzYCAvXG4gKiBgYXBwaXVtLXNlc3Npb24tY29uZmlnLnRzYCBwdXJlLXJlc29sdmVyIHNwbGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVRpZXIgfSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5cbi8qKlxuICogVGhlIGFjdGlvbiB0byB0YWtlIGZvciBhIHJlc29sdmVkIGluc3RhbGxlclx1MjE5NGFwcCBjb21wYXRpYmlsaXR5IHZlcmRpY3QsIGdpdmVuXG4gKiB0aGUgdGhyb3cvd2FybiBrbm9icy5cbiAqXG4gKiAtIGAndGhyb3cnYCBcdTIwMTQgdGhlIHZlcmRpY3QgaXMgYCd1bnJ1bm5hYmxlJ2AgYW5kIHRoZSBwcm9hY3RpdmUgdGhyb3cgaXMgZW5hYmxlZDtcbiAqICAgdGhlIGNhbGxlciB0aHJvd3MgYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgYmVmb3JlIGxhdW5jaC5cbiAqIC0gYCd3YXJuLXVucnVubmFibGUnYCBcdTIwMTQgdGhlIHZlcmRpY3QgaXMgYCd1bnJ1bm5hYmxlJ2AgYnV0IHRoZSB0aHJvdyBpcyBkaXNhYmxlZFxuICogICBhbmQgd2FybmluZ3MgYXJlIG9uOyB0aGUgY2FsbGVyIGxvZ3MgYSBcInByb2NlZWRpbmcgdG8gbGF1bmNoXCIgd2FybmluZyBhbmRcbiAqICAgbGV0cyB0aGUgYm9vdCBwcm9jZWVkICh3aGVyZSB0aGUgcmVhY3RpdmUgZGVhZC1ib290IGZhc3QtZmFpbCBjYXRjaGVzIGl0KS5cbiAqIC0gYCd3YXJuLW5hZ2dlZCdgIFx1MjAxNCB0aGUgdmVyZGljdCBpcyBgJ25hZ2dlZCdgIGFuZCB3YXJuaW5ncyBhcmUgb247IHRoZSBjYWxsZXJcbiAqICAgbG9ncyB0aGUgcmVjb21tZW5kZWQtaW5zdGFsbGVyIHdhcm5pbmcuXG4gKiAtIGAnc2lsZW50J2AgXHUyMDE0IG5vdGhpbmcgdG8gZG8gKGAnb2snYCAvIGAndW5rbm93bidgLCBvciB3YXJuaW5ncyBkaXNhYmxlZCkuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbGxlckNvbXBhdGliaWxpdHlBY3Rpb24gPSAnc2lsZW50JyB8ICd0aHJvdycgfCAnd2Fybi1uYWdnZWQnIHwgJ3dhcm4tdW5ydW5uYWJsZSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5QWN0aW9ufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eUFjdGlvblBhcmFtcyB7XG4gIC8qKiBXaGV0aGVyIGFuIGAndW5ydW5uYWJsZSdgIHZlcmRpY3QgdGhyb3dzICh2cy4gcHJvY2VlZHMgdG8gbGF1bmNoKS4gKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcjogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciBhIG5hZyAvIHByb2NlZWRpbmctdW5ydW5uYWJsZSB2ZXJkaWN0IGlzIGxvZ2dlZC4gKi9cbiAgcmVhZG9ubHkgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlczogYm9vbGVhbjtcblxuICAvKiogVGhlIHJlc29sdmVkIGluc3RhbGxlclx1MjE5NGFwcCBjb21wYXRpYmlsaXR5IHRpZXIuICovXG4gIHJlYWRvbmx5IHRpZXI6IEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdoYXQgdG8gZG8gZm9yIGFuIGluc3RhbGxlclx1MjE5NGFwcCBjb21wYXRpYmlsaXR5IHZlcmRpY3QsIGdpdmVuIHRoZVxuICogdGhyb3cvd2FybiBrbm9icy4gUHVyZSBcdTIwMTQgdGhlIGNhbGxlciBwZXJmb3JtcyB0aGUgdGhyb3cvbG9nIHNpZGUgZWZmZWN0cy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZlcmRpY3QgdGllciBhbmQgdGhlIHJlc29sdmVkIHRocm93L3dhcm4ga25vYnMuXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHRoZSBjYWxsZXIgc2hvdWxkIHRha2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eUFjdGlvbihwYXJhbXM6IFJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5QWN0aW9uUGFyYW1zKTogSW5zdGFsbGVyQ29tcGF0aWJpbGl0eUFjdGlvbiB7XG4gIGNvbnN0IHsgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlciwgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcywgdGllciB9ID0gcGFyYW1zO1xuXG4gIGlmICh0aWVyID09PSAndW5ydW5uYWJsZScpIHtcbiAgICBpZiAoc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcikge1xuICAgICAgcmV0dXJuICd0aHJvdyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMgPyAnd2Fybi11bnJ1bm5hYmxlJyA6ICdzaWxlbnQnO1xuICB9XG5cbiAgaWYgKHRpZXIgPT09ICduYWdnZWQnKSB7XG4gICAgcmV0dXJuIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMgPyAnd2Fybi1uYWdnZWQnIDogJ3NpbGVudCc7XG4gIH1cblxuICByZXR1cm4gJ3NpbGVudCc7XG59XG5cbi8qKlxuICogV2hldGhlciBhbiBgJ3VucnVubmFibGUnYCBpbnN0YWxsZXJcdTIxOTRhcHAgcGFpciBzaG91bGQgZmFpbCBmYXN0IHdpdGhcbiAqIHtAbGluayBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3J9IGJlZm9yZSBsYXVuY2guXG4gKlxuICogQHBhcmFtIHNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXIgLSBUaGUgcmVzb2x2ZWQgb3B0aW9uIHZhbHVlIChvbWl0dGVkIFx1MjE5MiB0aHJvdykuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiBhbiB1bnJ1bm5hYmxlIHBpbiBzaG91bGQgdGhyb3cgKHRoZSBkZWZhdWx0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyKHNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXI/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyID8/IHRydWU7XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgb3duZWQtaW5zdGFuY2UgY29tcGF0aWJpbGl0eSBuYWcgd2FybmluZ3Mgc2hvdWxkIGJlIGVtaXR0ZWQgKGJvdGhcbiAqIHRoZSBpbnN0YWxsZXJcdTIxOTRhcHAgYCduYWdnZWQnYCB3YXJuaW5nIGFuZCB0aGUgcnVudGltZS1FbGVjdHJvbiBgJ25hZ2dlZCdgXG4gKiB3YXJuaW5nKS5cbiAqXG4gKiBAcGFyYW0gc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcyAtIFRoZSByZXNvbHZlZCBvcHRpb24gdmFsdWUgKG9taXR0ZWQgXHUyMTkyIHdhcm4pLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHdhcm5pbmdzIHNob3VsZCBiZSBlbWl0dGVkICh0aGUgZGVmYXVsdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcyhzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcyA/PyB0cnVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEyRE8sU0FBUyxvQ0FBb0MsUUFBaUY7QUFDbkksUUFBTSxFQUFFLG9DQUFvQyxpQ0FBaUMsS0FBSyxJQUFJO0FBRXRGLE1BQUksU0FBUyxjQUFjO0FBQ3pCLFFBQUksb0NBQW9DO0FBQ3RDLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxrQ0FBa0Msb0JBQW9CO0FBQUEsRUFDL0Q7QUFFQSxNQUFJLFNBQVMsVUFBVTtBQUNyQixXQUFPLGtDQUFrQyxnQkFBZ0I7QUFBQSxFQUMzRDtBQUVBLFNBQU87QUFDVDtBQVNPLFNBQVMsMENBQTBDLG9DQUF1RDtBQUMvRyxTQUFPLHNDQUFzQztBQUMvQztBQVVPLFNBQVMsdUNBQXVDLGlDQUFvRDtBQUN6RyxTQUFPLG1DQUFtQztBQUM1QzsiLAogICJuYW1lcyI6IFtdCn0K
68
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbXBhdGliaWxpdHktb3B0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFB1cmUgcmVzb2x1dGlvbiBvZiB0aGUgdHdvIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkga25vYnMgXHUyMDE0IHdoZXRoZXIgdGhlXG4gKiBpbnN0YWxsZXJcdTIxOTRhcHAgLyBydW50aW1lLUVsZWN0cm9uIG5hZyB3YXJuaW5ncyBhcmUgZW1pdHRlZCwgYW5kIHdoZXRoZXIgYW5cbiAqIGAndW5ydW5uYWJsZSdgIGluc3RhbGxlclx1MjE5NGFwcCBwYWlyIGZhaWxzIGZhc3Qgd2l0aFxuICoge0BsaW5rIEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcn0gYmVmb3JlIGxhdW5jaC5cbiAqXG4gKiBCb3RoIGRlZmF1bHQgdG8gdG9kYXkncyBiZWhhdmlvciAoYHRydWVgKTogd2FybmluZ3Mgb24sIGFuZCBhbiB1bnJ1bm5hYmxlIHBpblxuICogdGhyb3dzIHByb2FjdGl2ZWx5LiBTZXR0aW5nIGBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzYCB0byBgZmFsc2VgXG4gKiBzaWxlbmNlcyBib3RoIG5hZ3MgKHRoZSB2ZXJkaWN0cyBhcmUgc3RpbGwgY29tcHV0ZWQgYW5kIHN1cmZhY2VkIGFzIGRhdGEpO1xuICogc2V0dGluZyBgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcmAgdG8gYGZhbHNlYCBsZXRzIGFuIHVucnVubmFibGUgcGluXG4gKiBwcm9jZWVkIHRvIGxhdW5jaCwgd2hlcmUgdGhlIHJlYWN0aXZlIGRlYWQtYm9vdCBmYXN0LWZhaWxcbiAqIChgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmApIHN0aWxsIGNhdGNoZXMgaXQuXG4gKlxuICogS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbi1vbmx5IGxhdW5jaCBjb2RlIChgdHJhbnNwb3J0LWZhY3RvcnlgLFxuICogYHRyYW5zcG9ydC1kZXNrdG9wLWNkcGAsIGJvdGggZXhjbHVkZWQgZnJvbSB1bml0IHRlc3RzKSBzbyB0aGUgZGVmYXVsdFxuICogcmVzb2x1dGlvbiBzdGF5cyB1bml0LXRlc3RhYmxlIFx1MjAxNCBtaXJyb3JpbmcgdGhlIGB2aXNpYmlsaXR5LnRzYCAvXG4gKiBgYXBwaXVtLXNlc3Npb24tY29uZmlnLnRzYCBwdXJlLXJlc29sdmVyIHNwbGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXNhckZhbGxiYWNrVGllciB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVRpZXIgfSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5cbi8qKlxuICogVGhlIGFjdGlvbiB0byB0YWtlIGZvciBhIHJlc29sdmVkIHNpbGVudC1hc2FyLWZhbGxiYWNrIHZlcmRpY3QsIGdpdmVuIHRoZVxuICogdGhyb3cvd2FybiBrbm9icy5cbiAqXG4gKiAtIGAndGhyb3cnYCBcdTIwMTQgdGhlIHZlcmRpY3QgaXMgYCdmYWxsYmFjaydgIGFuZCB0aGUgdGhyb3cgaXMgZW5hYmxlZDsgdGhlIGNhbGxlclxuICogICB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYC5cbiAqIC0gYCd3YXJuJ2AgXHUyMDE0IHRoZSB2ZXJkaWN0IGlzIGAnZmFsbGJhY2snYCBidXQgdGhlIHRocm93IGlzIGRpc2FibGVkIGFuZCB3YXJuaW5nc1xuICogICBhcmUgb247IHRoZSBjYWxsZXIgbG9ncyB0aGUgZmFsbGJhY2sgd2FybmluZyBhbmQgbGV0cyB0aGUgYm9vdCBwcm9jZWVkICh0aGVcbiAqICAgdmVyZGljdCBpcyBzdGlsbCBzdXJmYWNlZCBhcyBkYXRhKS5cbiAqIC0gYCdzaWxlbnQnYCBcdTIwMTQgbm90aGluZyB0byBkbyAoYCdtYXRjaCdgIC8gYCd1bmtub3duJ2AsIG9yIGEgc3VwcHJlc3NlZCBmYWxsYmFjaykuXG4gKi9cbmV4cG9ydCB0eXBlIEFzYXJGYWxsYmFja0FjdGlvbiA9ICdzaWxlbnQnIHwgJ3Rocm93JyB8ICd3YXJuJztcblxuLyoqXG4gKiBUaGUgYWN0aW9uIHRvIHRha2UgZm9yIGEgcmVzb2x2ZWQgaW5zdGFsbGVyXHUyMTk0YXBwIGNvbXBhdGliaWxpdHkgdmVyZGljdCwgZ2l2ZW5cbiAqIHRoZSB0aHJvdy93YXJuIGtub2JzLlxuICpcbiAqIC0gYCd0aHJvdydgIFx1MjAxNCB0aGUgdmVyZGljdCBpcyBgJ3VucnVubmFibGUnYCBhbmQgdGhlIHByb2FjdGl2ZSB0aHJvdyBpcyBlbmFibGVkO1xuICogICB0aGUgY2FsbGVyIHRocm93cyBgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yYCBiZWZvcmUgbGF1bmNoLlxuICogLSBgJ3dhcm4tdW5ydW5uYWJsZSdgIFx1MjAxNCB0aGUgdmVyZGljdCBpcyBgJ3VucnVubmFibGUnYCBidXQgdGhlIHRocm93IGlzIGRpc2FibGVkXG4gKiAgIGFuZCB3YXJuaW5ncyBhcmUgb247IHRoZSBjYWxsZXIgbG9ncyBhIFwicHJvY2VlZGluZyB0byBsYXVuY2hcIiB3YXJuaW5nIGFuZFxuICogICBsZXRzIHRoZSBib290IHByb2NlZWQgKHdoZXJlIHRoZSByZWFjdGl2ZSBkZWFkLWJvb3QgZmFzdC1mYWlsIGNhdGNoZXMgaXQpLlxuICogLSBgJ3dhcm4tbmFnZ2VkJ2AgXHUyMDE0IHRoZSB2ZXJkaWN0IGlzIGAnbmFnZ2VkJ2AgYW5kIHdhcm5pbmdzIGFyZSBvbjsgdGhlIGNhbGxlclxuICogICBsb2dzIHRoZSByZWNvbW1lbmRlZC1pbnN0YWxsZXIgd2FybmluZy5cbiAqIC0gYCdzaWxlbnQnYCBcdTIwMTQgbm90aGluZyB0byBkbyAoYCdvaydgIC8gYCd1bmtub3duJ2AsIG9yIHdhcm5pbmdzIGRpc2FibGVkKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eUFjdGlvbiA9ICdzaWxlbnQnIHwgJ3Rocm93JyB8ICd3YXJuLW5hZ2dlZCcgfCAnd2Fybi11bnJ1bm5hYmxlJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUFzYXJGYWxsYmFja0FjdGlvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUFzYXJGYWxsYmFja0FjdGlvblBhcmFtcyB7XG4gIC8qKiBXaGV0aGVyIGEgYCdmYWxsYmFjaydgIHZlcmRpY3QgdGhyb3dzICh2cy4gcHJvY2VlZHMgd2l0aCBhIHdhcm5pbmcpLiAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIGEgbm9uLXRocm93aW5nIGZhbGxiYWNrIHZlcmRpY3QgaXMgbG9nZ2VkLiAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzOiBib29sZWFuO1xuXG4gIC8qKiBUaGUgcmVzb2x2ZWQgc2lsZW50LWFzYXItZmFsbGJhY2sgdGllci4gKi9cbiAgcmVhZG9ubHkgdGllcjogQXNhckZhbGxiYWNrVGllcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUluc3RhbGxlckNvbXBhdGliaWxpdHlBY3Rpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5QWN0aW9uUGFyYW1zIHtcbiAgLyoqIFdoZXRoZXIgYW4gYCd1bnJ1bm5hYmxlJ2AgdmVyZGljdCB0aHJvd3MgKHZzLiBwcm9jZWVkcyB0byBsYXVuY2gpLiAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIGEgbmFnIC8gcHJvY2VlZGluZy11bnJ1bm5hYmxlIHZlcmRpY3QgaXMgbG9nZ2VkLiAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzOiBib29sZWFuO1xuXG4gIC8qKiBUaGUgcmVzb2x2ZWQgaW5zdGFsbGVyXHUyMTk0YXBwIGNvbXBhdGliaWxpdHkgdGllci4gKi9cbiAgcmVhZG9ubHkgdGllcjogSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVRpZXI7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2hhdCB0byBkbyBmb3IgYSBzaWxlbnQtYXNhci1mYWxsYmFjayB2ZXJkaWN0LCBnaXZlbiB0aGUgdGhyb3cvd2FyblxuICoga25vYnMuIFB1cmUgXHUyMDE0IHRoZSBjYWxsZXIgcGVyZm9ybXMgdGhlIHRocm93L2xvZyBzaWRlIGVmZmVjdHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2ZXJkaWN0IHRpZXIgYW5kIHRoZSByZXNvbHZlZCB0aHJvdy93YXJuIGtub2JzLlxuICogQHJldHVybnMgVGhlIGFjdGlvbiB0aGUgY2FsbGVyIHNob3VsZCB0YWtlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFzYXJGYWxsYmFja0FjdGlvbihwYXJhbXM6IFJlc29sdmVBc2FyRmFsbGJhY2tBY3Rpb25QYXJhbXMpOiBBc2FyRmFsbGJhY2tBY3Rpb24ge1xuICBjb25zdCB7IHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2ssIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMsIHRpZXIgfSA9IHBhcmFtcztcblxuICBpZiAodGllciAhPT0gJ2ZhbGxiYWNrJykge1xuICAgIHJldHVybiAnc2lsZW50JztcbiAgfVxuXG4gIGlmIChzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrKSB7XG4gICAgcmV0dXJuICd0aHJvdyc7XG4gIH1cblxuICByZXR1cm4gc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcyA/ICd3YXJuJyA6ICdzaWxlbnQnO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHdoYXQgdG8gZG8gZm9yIGFuIGluc3RhbGxlclx1MjE5NGFwcCBjb21wYXRpYmlsaXR5IHZlcmRpY3QsIGdpdmVuIHRoZVxuICogdGhyb3cvd2FybiBrbm9icy4gUHVyZSBcdTIwMTQgdGhlIGNhbGxlciBwZXJmb3JtcyB0aGUgdGhyb3cvbG9nIHNpZGUgZWZmZWN0cy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZlcmRpY3QgdGllciBhbmQgdGhlIHJlc29sdmVkIHRocm93L3dhcm4ga25vYnMuXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHRoZSBjYWxsZXIgc2hvdWxkIHRha2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eUFjdGlvbihwYXJhbXM6IFJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5QWN0aW9uUGFyYW1zKTogSW5zdGFsbGVyQ29tcGF0aWJpbGl0eUFjdGlvbiB7XG4gIGNvbnN0IHsgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlciwgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcywgdGllciB9ID0gcGFyYW1zO1xuXG4gIGlmICh0aWVyID09PSAndW5ydW5uYWJsZScpIHtcbiAgICBpZiAoc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcikge1xuICAgICAgcmV0dXJuICd0aHJvdyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMgPyAnd2Fybi11bnJ1bm5hYmxlJyA6ICdzaWxlbnQnO1xuICB9XG5cbiAgaWYgKHRpZXIgPT09ICduYWdnZWQnKSB7XG4gICAgcmV0dXJuIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMgPyAnd2Fybi1uYWdnZWQnIDogJ3NpbGVudCc7XG4gIH1cblxuICByZXR1cm4gJ3NpbGVudCc7XG59XG5cbi8qKlxuICogV2hldGhlciBhbiBgJ3VucnVubmFibGUnYCBpbnN0YWxsZXJcdTIxOTRhcHAgcGFpciBzaG91bGQgZmFpbCBmYXN0IHdpdGhcbiAqIHtAbGluayBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3J9IGJlZm9yZSBsYXVuY2guXG4gKlxuICogQHBhcmFtIHNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXIgLSBUaGUgcmVzb2x2ZWQgb3B0aW9uIHZhbHVlIChvbWl0dGVkIFx1MjE5MiB0aHJvdykuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiBhbiB1bnJ1bm5hYmxlIHBpbiBzaG91bGQgdGhyb3cgKHRoZSBkZWZhdWx0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyKHNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXI/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyID8/IHRydWU7XG59XG5cbi8qKlxuICogV2hldGhlciBhIGJvb3RlZCBvd25lZCBpbnN0YW5jZSBydW5uaW5nIGEgZGlmZmVyZW50IGFwcCAoYXNhcikgdmVyc2lvbiB0aGFuIHRoZVxuICogcGluIFx1MjAxNCBhIHNpbGVudCBmYWxsYmFjayB0byB0aGUgaW5zdGFsbGVyJ3Mgb3duIGJ1bmRsZWQgYXNhciBcdTIwMTQgc2hvdWxkIGZhaWwgZmFzdFxuICogd2l0aCB7QGxpbmsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3J9LlxuICpcbiAqIEBwYXJhbSBzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrIC0gVGhlIHJlc29sdmVkIG9wdGlvbiB2YWx1ZSAob21pdHRlZCBcdTIxOTIgdGhyb3cpLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gYSBzaWxlbnQgZmFsbGJhY2sgc2hvdWxkIHRocm93ICh0aGUgZGVmYXVsdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjayhzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjayA/PyB0cnVlO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkgbmFnIHdhcm5pbmdzIHNob3VsZCBiZSBlbWl0dGVkIChib3RoXG4gKiB0aGUgaW5zdGFsbGVyXHUyMTk0YXBwIGAnbmFnZ2VkJ2Agd2FybmluZyBhbmQgdGhlIHJ1bnRpbWUtRWxlY3Ryb24gYCduYWdnZWQnYFxuICogd2FybmluZykuXG4gKlxuICogQHBhcmFtIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMgLSBUaGUgcmVzb2x2ZWQgb3B0aW9uIHZhbHVlIChvbWl0dGVkIFx1MjE5MiB3YXJuKS5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB3YXJuaW5ncyBzaG91bGQgYmUgZW1pdHRlZCAodGhlIGRlZmF1bHQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMoc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3Vlcz86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMgPz8gdHJ1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVGTyxTQUFTLDBCQUEwQixRQUE2RDtBQUNyRyxRQUFNLEVBQUUsaUNBQWlDLGlDQUFpQyxLQUFLLElBQUk7QUFFbkYsTUFBSSxTQUFTLFlBQVk7QUFDdkIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLGlDQUFpQztBQUNuQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sa0NBQWtDLFNBQVM7QUFDcEQ7QUFTTyxTQUFTLG9DQUFvQyxRQUFpRjtBQUNuSSxRQUFNLEVBQUUsb0NBQW9DLGlDQUFpQyxLQUFLLElBQUk7QUFFdEYsTUFBSSxTQUFTLGNBQWM7QUFDekIsUUFBSSxvQ0FBb0M7QUFDdEMsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLGtDQUFrQyxvQkFBb0I7QUFBQSxFQUMvRDtBQUVBLE1BQUksU0FBUyxVQUFVO0FBQ3JCLFdBQU8sa0NBQWtDLGdCQUFnQjtBQUFBLEVBQzNEO0FBRUEsU0FBTztBQUNUO0FBU08sU0FBUywwQ0FBMEMsb0NBQXVEO0FBQy9HLFNBQU8sc0NBQXNDO0FBQy9DO0FBVU8sU0FBUyx1Q0FBdUMsaUNBQW9EO0FBQ3pHLFNBQU8sbUNBQW1DO0FBQzVDO0FBVU8sU0FBUyx1Q0FBdUMsaUNBQW9EO0FBQ3pHLFNBQU8sbUNBQW1DO0FBQzVDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -18,7 +18,20 @@
18
18
  * resolution stays unit-testable — mirroring the `visibility.ts` /
19
19
  * `appium-session-config.ts` pure-resolver split.
20
20
  */
21
+ import type { AsarFallbackTier } from './asar-fallback-detection.cjs';
21
22
  import type { InstallerCompatibilityTier } from './installer-compatibility.cjs';
23
+ /**
24
+ * The action to take for a resolved silent-asar-fallback verdict, given the
25
+ * throw/warn knobs.
26
+ *
27
+ * - `'throw'` — the verdict is `'fallback'` and the throw is enabled; the caller
28
+ * throws `SilentAsarFallbackError`.
29
+ * - `'warn'` — the verdict is `'fallback'` but the throw is disabled and warnings
30
+ * are on; the caller logs the fallback warning and lets the boot proceed (the
31
+ * verdict is still surfaced as data).
32
+ * - `'silent'` — nothing to do (`'match'` / `'unknown'`, or a suppressed fallback).
33
+ */
34
+ export type AsarFallbackAction = 'silent' | 'throw' | 'warn';
22
35
  /**
23
36
  * The action to take for a resolved installer↔app compatibility verdict, given
24
37
  * the throw/warn knobs.
@@ -33,6 +46,17 @@ import type { InstallerCompatibilityTier } from './installer-compatibility.cjs';
33
46
  * - `'silent'` — nothing to do (`'ok'` / `'unknown'`, or warnings disabled).
34
47
  */
35
48
  export type InstallerCompatibilityAction = 'silent' | 'throw' | 'warn-nagged' | 'warn-unrunnable';
49
+ /**
50
+ * Parameters for {@link resolveAsarFallbackAction}.
51
+ */
52
+ export interface ResolveAsarFallbackActionParams {
53
+ /** Whether a `'fallback'` verdict throws (vs. proceeds with a warning). */
54
+ readonly shouldThrowOnSilentAsarFallback: boolean;
55
+ /** Whether a non-throwing fallback verdict is logged. */
56
+ readonly shouldWarnOnCompatibilityIssues: boolean;
57
+ /** The resolved silent-asar-fallback tier. */
58
+ readonly tier: AsarFallbackTier;
59
+ }
36
60
  /**
37
61
  * Parameters for {@link resolveInstallerCompatibilityAction}.
38
62
  */
@@ -44,6 +68,14 @@ export interface ResolveInstallerCompatibilityActionParams {
44
68
  /** The resolved installer↔app compatibility tier. */
45
69
  readonly tier: InstallerCompatibilityTier;
46
70
  }
71
+ /**
72
+ * Resolves what to do for a silent-asar-fallback verdict, given the throw/warn
73
+ * knobs. Pure — the caller performs the throw/log side effects.
74
+ *
75
+ * @param params - The verdict tier and the resolved throw/warn knobs.
76
+ * @returns The action the caller should take.
77
+ */
78
+ export declare function resolveAsarFallbackAction(params: ResolveAsarFallbackActionParams): AsarFallbackAction;
47
79
  /**
48
80
  * Resolves what to do for an installer↔app compatibility verdict, given the
49
81
  * throw/warn knobs. Pure — the caller performs the throw/log side effects.
@@ -60,6 +92,15 @@ export declare function resolveInstallerCompatibilityAction(params: ResolveInsta
60
92
  * @returns `true` when an unrunnable pin should throw (the default).
61
93
  */
62
94
  export declare function resolveShouldThrowOnIncompatibleInstaller(shouldThrowOnIncompatibleInstaller?: boolean): boolean;
95
+ /**
96
+ * Whether a booted owned instance running a different app (asar) version than the
97
+ * pin — a silent fallback to the installer's own bundled asar — should fail fast
98
+ * with {@link SilentAsarFallbackError}.
99
+ *
100
+ * @param shouldThrowOnSilentAsarFallback - The resolved option value (omitted → throw).
101
+ * @returns `true` when a silent fallback should throw (the default).
102
+ */
103
+ export declare function resolveShouldThrowOnSilentAsarFallback(shouldThrowOnSilentAsarFallback?: boolean): boolean;
63
104
  /**
64
105
  * Whether the owned-instance compatibility nag warnings should be emitted (both
65
106
  * the installer↔app `'nagged'` warning and the runtime-Electron `'nagged'`