@mnaoumov/obsidian-dev-toolkit 2.0.0 → 3.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 (142) hide show
  1. package/README.md +5 -1
  2. package/bin/archive-demo-vault.mjs +8 -0
  3. package/bin/generate-coverage-badge.mjs +8 -0
  4. package/bundlers/esbuild-impl/feature-options/package.json +6 -0
  5. package/bundlers/obsidian-cli-reload/package.json +6 -0
  6. package/bundlers/obsidian-plugin-build/package.json +6 -0
  7. package/bundlers/obsidian-plugin-features/package.json +6 -0
  8. package/bundlers/obsidian-plugin-transforms/package.json +6 -0
  9. package/bundlers/obsidian-plugin-webpack-loader/package.json +6 -0
  10. package/bundlers/obsidian-plugins-folder-deployment/package.json +6 -0
  11. package/bundlers/parcel/package.json +6 -0
  12. package/bundlers/rollup/package.json +6 -0
  13. package/bundlers/rollup-compatible/package.json +6 -0
  14. package/bundlers/rollup-compatible-features/package.json +6 -0
  15. package/bundlers/vite/package.json +6 -0
  16. package/bundlers/webpack/package.json +6 -0
  17. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +3 -188
  18. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +2 -18
  19. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.cjs +173 -0
  20. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.d.cts +60 -0
  21. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
  22. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
  23. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +30 -82
  24. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +7 -24
  25. package/dist/lib/cjs/bundlers/index.cjs +39 -3
  26. package/dist/lib/cjs/bundlers/index.d.cts +12 -0
  27. package/dist/lib/cjs/bundlers/obsidian-cli-reload.cjs +182 -0
  28. package/dist/lib/cjs/bundlers/obsidian-cli-reload.d.cts +37 -0
  29. package/dist/lib/cjs/bundlers/obsidian-plugin-build.cjs +278 -0
  30. package/dist/lib/cjs/bundlers/obsidian-plugin-build.d.cts +217 -0
  31. package/dist/lib/cjs/bundlers/obsidian-plugin-features.cjs +242 -0
  32. package/dist/lib/cjs/bundlers/obsidian-plugin-features.d.cts +186 -0
  33. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.cjs +306 -0
  34. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.d.cts +231 -0
  35. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.cjs +182 -0
  36. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.d.cts +47 -0
  37. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.cjs +320 -0
  38. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.d.cts +44 -0
  39. package/dist/lib/cjs/bundlers/parcel.cjs +462 -0
  40. package/dist/lib/cjs/bundlers/parcel.d.cts +128 -0
  41. package/dist/lib/cjs/bundlers/rollup-compatible-features.cjs +181 -0
  42. package/dist/lib/cjs/bundlers/rollup-compatible-features.d.cts +128 -0
  43. package/dist/lib/cjs/bundlers/rollup-compatible.cjs +138 -0
  44. package/dist/lib/cjs/bundlers/rollup-compatible.d.cts +84 -0
  45. package/dist/lib/cjs/bundlers/rollup.cjs +218 -0
  46. package/dist/lib/cjs/bundlers/rollup.d.cts +99 -0
  47. package/dist/lib/cjs/bundlers/vite.cjs +229 -0
  48. package/dist/lib/cjs/bundlers/vite.d.cts +105 -0
  49. package/dist/lib/cjs/bundlers/webpack.cjs +354 -0
  50. package/dist/lib/cjs/bundlers/webpack.d.cts +133 -0
  51. package/dist/lib/cjs/demo-vault-cli.cjs +131 -0
  52. package/dist/lib/cjs/demo-vault-cli.d.cts +15 -0
  53. package/dist/lib/cjs/docs-site/index.cjs +118 -0
  54. package/dist/lib/cjs/docs-site/index.d.cts +2 -0
  55. package/dist/lib/cjs/docs-site/obsidian-external-type-links.cjs +119 -0
  56. package/dist/lib/cjs/docs-site/obsidian-external-type-links.d.cts +25 -0
  57. package/dist/lib/cjs/index.cjs +7 -1
  58. package/dist/lib/cjs/index.d.cts +2 -0
  59. package/dist/lib/cjs/test-runners/coverage-badge-cli.cjs +160 -0
  60. package/dist/lib/cjs/test-runners/coverage-badge-cli.d.cts +25 -0
  61. package/dist/lib/cjs/test-runners/coverage-badge.cjs +279 -0
  62. package/dist/lib/cjs/test-runners/coverage-badge.d.cts +143 -0
  63. package/dist/lib/cjs/test-runners/e2e-runner-support.cjs +170 -0
  64. package/dist/lib/cjs/test-runners/e2e-runner-support.d.cts +36 -0
  65. package/dist/lib/cjs/test-runners/index.cjs +18 -3
  66. package/dist/lib/cjs/test-runners/index.d.cts +5 -0
  67. package/dist/lib/cjs/test-runners/obsidian-test-runner.cjs +147 -0
  68. package/dist/lib/cjs/test-runners/obsidian-test-runner.d.cts +42 -0
  69. package/dist/lib/cjs/test-runners/wdio-obsidian.cjs +205 -0
  70. package/dist/lib/cjs/test-runners/wdio-obsidian.d.cts +199 -0
  71. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +2 -18
  72. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -192
  73. package/dist/lib/esm/bundlers/esbuild-impl/feature-options.d.mts +60 -0
  74. package/dist/lib/esm/bundlers/esbuild-impl/feature-options.mjs +82 -0
  75. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
  76. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
  77. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +7 -24
  78. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +41 -87
  79. package/dist/lib/esm/bundlers/index.d.mts +12 -0
  80. package/dist/lib/esm/bundlers/index.mjs +26 -2
  81. package/dist/lib/esm/bundlers/obsidian-cli-reload.d.mts +37 -0
  82. package/dist/lib/esm/bundlers/obsidian-cli-reload.mjs +83 -0
  83. package/dist/lib/esm/bundlers/obsidian-plugin-build.d.mts +217 -0
  84. package/dist/lib/esm/bundlers/obsidian-plugin-build.mjs +166 -0
  85. package/dist/lib/esm/bundlers/obsidian-plugin-features.d.mts +186 -0
  86. package/dist/lib/esm/bundlers/obsidian-plugin-features.mjs +126 -0
  87. package/dist/lib/esm/bundlers/obsidian-plugin-transforms.d.mts +231 -0
  88. package/dist/lib/esm/bundlers/obsidian-plugin-transforms.mjs +194 -0
  89. package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.d.mts +47 -0
  90. package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.mjs +89 -0
  91. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.d.mts +44 -0
  92. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.mjs +228 -0
  93. package/dist/lib/esm/bundlers/parcel.d.mts +128 -0
  94. package/dist/lib/esm/bundlers/parcel.mjs +361 -0
  95. package/dist/lib/esm/bundlers/rollup-compatible-features.d.mts +128 -0
  96. package/dist/lib/esm/bundlers/rollup-compatible-features.mjs +93 -0
  97. package/dist/lib/esm/bundlers/rollup-compatible.d.mts +84 -0
  98. package/dist/lib/esm/bundlers/rollup-compatible.mjs +43 -0
  99. package/dist/lib/esm/bundlers/rollup.d.mts +99 -0
  100. package/dist/lib/esm/bundlers/rollup.mjs +130 -0
  101. package/dist/lib/esm/bundlers/vite.d.mts +105 -0
  102. package/dist/lib/esm/bundlers/vite.mjs +144 -0
  103. package/dist/lib/esm/bundlers/webpack.d.mts +133 -0
  104. package/dist/lib/esm/bundlers/webpack.mjs +259 -0
  105. package/dist/lib/esm/demo-vault-cli.d.mts +15 -0
  106. package/dist/lib/esm/demo-vault-cli.mjs +23 -0
  107. package/dist/lib/esm/docs-site/index.d.mts +2 -0
  108. package/dist/lib/esm/docs-site/index.mjs +10 -0
  109. package/dist/lib/esm/docs-site/obsidian-external-type-links.d.mts +25 -0
  110. package/dist/lib/esm/docs-site/obsidian-external-type-links.mjs +21 -0
  111. package/dist/lib/esm/index.d.mts +2 -0
  112. package/dist/lib/esm/index.mjs +5 -1
  113. package/dist/lib/esm/test-runners/coverage-badge-cli.d.mts +25 -0
  114. package/dist/lib/esm/test-runners/coverage-badge-cli.mjs +51 -0
  115. package/dist/lib/esm/test-runners/coverage-badge.d.mts +143 -0
  116. package/dist/lib/esm/test-runners/coverage-badge.mjs +181 -0
  117. package/dist/lib/esm/test-runners/e2e-runner-support.d.mts +36 -0
  118. package/dist/lib/esm/test-runners/e2e-runner-support.mjs +61 -0
  119. package/dist/lib/esm/test-runners/index.d.mts +5 -0
  120. package/dist/lib/esm/test-runners/index.mjs +12 -2
  121. package/dist/lib/esm/test-runners/obsidian-test-runner.d.mts +42 -0
  122. package/dist/lib/esm/test-runners/obsidian-test-runner.mjs +52 -0
  123. package/dist/lib/esm/test-runners/wdio-obsidian.d.mts +199 -0
  124. package/dist/lib/esm/test-runners/wdio-obsidian.mjs +110 -0
  125. package/dist/templates/dprint.json +1 -0
  126. package/dist/templates/scripts/commitlint-config.ts +2 -2
  127. package/docs-site/index/package.json +6 -0
  128. package/docs-site/obsidian-external-type-links/package.json +6 -0
  129. package/docs-site/package.json +6 -0
  130. package/package.json +136 -7
  131. package/test-runners/coverage-badge/package.json +6 -0
  132. package/test-runners/coverage-badge-cli/package.json +6 -0
  133. package/test-runners/e2e-runner-support/package.json +6 -0
  134. package/test-runners/obsidian-test-runner/package.json +6 -0
  135. package/test-runners/wdio-obsidian/package.json +6 -0
  136. package/tsconfig/preact.json +7 -0
  137. package/tsconfig/react.json +7 -0
  138. package/tsconfig/solid.json +7 -0
  139. package/tsconfig/svelte.json +7 -0
  140. package/tsconfig/vue.json +7 -0
  141. package/types/styles.d.ts +32 -0
  142. package/types/wasm.d.ts +11 -0
@@ -0,0 +1,36 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * What the end-to-end runners share: where the specs live, and the check that the packages a runner drives are
6
+ * installed in the project, so a missing one is reported with the `npm install` line that fixes it instead of as a
7
+ * shell's `command not found`.
8
+ */
9
+ /**
10
+ * The spec files the end-to-end runners run by default.
11
+ */
12
+ export declare const DEFAULT_END_TO_END_SPECS = "./e2e/**/*.spec.ts";
13
+ /**
14
+ * Parameters for {@link assertProjectPackagesInstalled}.
15
+ */
16
+ export interface AssertProjectPackagesInstalledParams {
17
+ /**
18
+ * The packages the runner needs.
19
+ */
20
+ readonly packageNames: readonly string[];
21
+ /**
22
+ * The folder whose `node_modules` the packages are resolved from. Defaults to the project root.
23
+ */
24
+ readonly projectFolder?: string;
25
+ /**
26
+ * What needs the packages, as the error message names it, e.g. `testEndToEndWithWdioObsidian()`.
27
+ */
28
+ readonly requester: string;
29
+ }
30
+ /**
31
+ * Throws when any of the packages is not installed in the project, naming the `npm install` line.
32
+ *
33
+ * @param params - The {@link AssertProjectPackagesInstalledParams}.
34
+ * @throws When a package is missing.
35
+ */
36
+ export declare function assertProjectPackagesInstalled(params: AssertProjectPackagesInstalledParams): void;
@@ -107,18 +107,33 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
107
107
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
108
108
  var test_runners_exports = {};
109
109
  __export(test_runners_exports, {
110
+ "coverage-badge": () => coverage_badge,
111
+ "coverage-badge-cli": () => coverage_badge_cli,
112
+ "e2e-runner-support": () => e2e_runner_support,
110
113
  "integration-test-plugin": () => integration_test_plugin,
114
+ "obsidian-test-runner": () => obsidian_test_runner,
111
115
  "performance-eval-cap": () => performance_eval_cap,
112
- "vitest-config": () => vitest_config
116
+ "vitest-config": () => vitest_config,
117
+ "wdio-obsidian": () => wdio_obsidian
113
118
  });
114
119
  module.exports = __toCommonJS(test_runners_exports);
120
+ var coverage_badge_cli = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./coverage-badge-cli.cjs')), 1);
121
+ var coverage_badge = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./coverage-badge.cjs')), 1);
122
+ var e2e_runner_support = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./e2e-runner-support.cjs')), 1);
115
123
  var integration_test_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./integration-test-plugin.cjs')), 1);
124
+ var obsidian_test_runner = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-test-runner.cjs')), 1);
116
125
  var performance_eval_cap = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./performance-eval-cap.cjs')), 1);
117
126
  var vitest_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./vitest-config.cjs')), 1);
127
+ var wdio_obsidian = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./wdio-obsidian.cjs')), 1);
118
128
  // Annotate the CommonJS export names for ESM import in node:
119
129
  0 && (module.exports = {
130
+ "coverage-badge": null,
131
+ "coverage-badge-cli": null,
132
+ "e2e-runner-support": null,
120
133
  "integration-test-plugin": null,
134
+ "obsidian-test-runner": null,
121
135
  "performance-eval-cap": null,
122
- "vitest-config": null
136
+ "vitest-config": null,
137
+ "wdio-obsidian": null
123
138
  });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdpbnRlZ3JhdGlvbi10ZXN0LXBsdWdpbicgZnJvbSAnLi9pbnRlZ3JhdGlvbi10ZXN0LXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAncGVyZm9ybWFuY2UtZXZhbC1jYXAnIGZyb20gJy4vcGVyZm9ybWFuY2UtZXZhbC1jYXAudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdC1jb25maWcnIGZyb20gJy4vdml0ZXN0LWNvbmZpZy50cyc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLG1DQUFBQTtBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQSx1QkFBQUM7QUFBQTtBQUFBO0FBRUEsSUFBQUYsMEJBQTJDO0FBQzNDLElBQUFDLHVCQUF3QztBQUN4QyxJQUFBQyxnQkFBaUM7IiwibmFtZXMiOlsiaW50ZWdyYXRpb24tdGVzdC1wbHVnaW4iLCJwZXJmb3JtYW5jZS1ldmFsLWNhcCIsInZpdGVzdC1jb25maWciXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdjb3ZlcmFnZS1iYWRnZS1jbGknIGZyb20gJy4vY292ZXJhZ2UtYmFkZ2UtY2xpLnRzJztcbmV4cG9ydCAqIGFzICdjb3ZlcmFnZS1iYWRnZScgZnJvbSAnLi9jb3ZlcmFnZS1iYWRnZS50cyc7XG5leHBvcnQgKiBhcyAnZTJlLXJ1bm5lci1zdXBwb3J0JyBmcm9tICcuL2UyZS1ydW5uZXItc3VwcG9ydC50cyc7XG5leHBvcnQgKiBhcyAnaW50ZWdyYXRpb24tdGVzdC1wbHVnaW4nIGZyb20gJy4vaW50ZWdyYXRpb24tdGVzdC1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXRlc3QtcnVubmVyJyBmcm9tICcuL29ic2lkaWFuLXRlc3QtcnVubmVyLnRzJztcbmV4cG9ydCAqIGFzICdwZXJmb3JtYW5jZS1ldmFsLWNhcCcgZnJvbSAnLi9wZXJmb3JtYW5jZS1ldmFsLWNhcC50cyc7XG5leHBvcnQgKiBhcyAndml0ZXN0LWNvbmZpZycgZnJvbSAnLi92aXRlc3QtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICd3ZGlvLW9ic2lkaWFuJyBmcm9tICcuL3dkaW8tb2JzaWRpYW4udHMnO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSwwQkFBQUE7QUFBQSxFQUFBLDRCQUFBQztBQUFBLEVBQUEsNEJBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLDhCQUFBQztBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQSx1QkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBTixxQkFBc0M7QUFDdEMsSUFBQUQsaUJBQWtDO0FBQ2xDLElBQUFFLHFCQUFzQztBQUN0QyxJQUFBQywwQkFBMkM7QUFDM0MsSUFBQUMsdUJBQXdDO0FBQ3hDLElBQUFDLHVCQUF3QztBQUN4QyxJQUFBQyxnQkFBaUM7QUFDakMsSUFBQUMsZ0JBQWlDOyIsIm5hbWVzIjpbImNvdmVyYWdlLWJhZGdlIiwiY292ZXJhZ2UtYmFkZ2UtY2xpIiwiZTJlLXJ1bm5lci1zdXBwb3J0IiwiaW50ZWdyYXRpb24tdGVzdC1wbHVnaW4iLCJvYnNpZGlhbi10ZXN0LXJ1bm5lciIsInBlcmZvcm1hbmNlLWV2YWwtY2FwIiwidml0ZXN0LWNvbmZpZyIsIndkaW8tb2JzaWRpYW4iXX0=
@@ -1,4 +1,9 @@
1
1
  /// <reference path="../library-references.d.cts" />
2
+ export * as 'coverage-badge-cli' from './coverage-badge-cli.cjs';
3
+ export * as 'coverage-badge' from './coverage-badge.cjs';
4
+ export * as 'e2e-runner-support' from './e2e-runner-support.cjs';
2
5
  export * as 'integration-test-plugin' from './integration-test-plugin.cjs';
6
+ export * as 'obsidian-test-runner' from './obsidian-test-runner.cjs';
3
7
  export * as 'performance-eval-cap' from './performance-eval-cap.cjs';
4
8
  export * as 'vitest-config' from './vitest-config.cjs';
9
+ export * as 'wdio-obsidian' from './wdio-obsidian.cjs';
@@ -0,0 +1,147 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+ (function patchObsidianRequire() {
33
+ const originalRequire = require;
34
+ if (!originalRequire || originalRequire.__isPatched) {
35
+ return;
36
+ }
37
+
38
+ require = Object.assign(
39
+ (id) => requirePatched(id),
40
+ originalRequire,
41
+ {
42
+ __isPatched: true
43
+ }
44
+ );
45
+
46
+ function extractDefault(module) {
47
+ return module && module.__esModule && 'default' in module ? module.default : module;
48
+ }
49
+
50
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
51
+ '@codemirror/autocomplete',
52
+ '@codemirror/collab',
53
+ '@codemirror/commands',
54
+ '@codemirror/language',
55
+ '@codemirror/lint',
56
+ '@codemirror/search',
57
+ '@codemirror/state',
58
+ '@codemirror/text',
59
+ '@codemirror/view',
60
+ '@lezer/common',
61
+ '@lezer/highlight',
62
+ '@lezer/lr',
63
+ 'obsidian']
64
+ );
65
+
66
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
67
+ '@codemirror/closebrackets',
68
+ '@codemirror/comment',
69
+ '@codemirror/fold',
70
+ '@codemirror/gutter',
71
+ '@codemirror/highlight',
72
+ '@codemirror/history',
73
+ '@codemirror/matchbrackets',
74
+ '@codemirror/panel',
75
+ '@codemirror/rangeset',
76
+ '@codemirror/rectangular-selection',
77
+ '@codemirror/stream-parser',
78
+ '@codemirror/tooltip']
79
+ );
80
+
81
+ function requirePatched(id) {
82
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
83
+ return originalRequire?.(id);
84
+ }
85
+
86
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
87
+ if (globalThis.app.isMobile) {
88
+ if (id === 'process' || id === 'node:process') {
89
+ // eslint-disable-next-line no-console -- Valid usage.
90
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
91
+
92
+ return process;
93
+ }
94
+ } else {
95
+ const module = originalRequire?.(id);
96
+ if (module) {
97
+ return extractDefault(module);
98
+ }
99
+ }
100
+
101
+ // eslint-disable-next-line no-console -- Valid usage.
102
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
103
+ return {};
104
+ }
105
+ })();
106
+
107
+ "use strict";
108
+ var __defProp = Object.defineProperty;
109
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
110
+ var __getOwnPropNames = Object.getOwnPropertyNames;
111
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
112
+ var __export = (target, all) => {
113
+ for (var name in all)
114
+ __defProp(target, name, { get: all[name], enumerable: true });
115
+ };
116
+ var __copyProps = (to, from, except, desc) => {
117
+ if (from && typeof from === "object" || typeof from === "function") {
118
+ for (let key of __getOwnPropNames(from))
119
+ if (!__hasOwnProp.call(to, key) && key !== except)
120
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
121
+ }
122
+ return to;
123
+ };
124
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
125
+ var obsidian_test_runner_exports = {};
126
+ __export(obsidian_test_runner_exports, {
127
+ testEndToEndWithObsidianTest: () => testEndToEndWithObsidianTest
128
+ });
129
+ module.exports = __toCommonJS(obsidian_test_runner_exports);
130
+ var import_root = require('@mnaoumov/typescript-dev-toolkit/root');
131
+ var import_e2e_runner_support = require('./e2e-runner-support.cjs');
132
+ async function testEndToEndWithObsidianTest(options = {}) {
133
+ (0, import_e2e_runner_support.assertProjectPackagesInstalled)({ packageNames: ["obsidian-test"], requester: "testEndToEndWithObsidianTest()" });
134
+ await (0, import_root.execFromRoot)([
135
+ "obsidian-test",
136
+ "--testPattern",
137
+ options.testPattern ?? import_e2e_runner_support.DEFAULT_END_TO_END_SPECS,
138
+ ...options.vaultPath === void 0 ? [] : ["--vault-path", options.vaultPath],
139
+ ...options.obsidianCommand === void 0 ? [] : ["--obsidian-cmd", options.obsidianCommand],
140
+ ...options.shouldUseCache ?? true ? [] : ["--force"]
141
+ ], { isInteractive: true });
142
+ }
143
+ // Annotate the CommonJS export names for ESM import in node:
144
+ 0 && (module.exports = {
145
+ testEndToEndWithObsidianTest
146
+ });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvb2JzaWRpYW4tdGVzdC1ydW5uZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVuZC10by1lbmQgdGVzdHMgd2l0aCBgb2JzaWRpYW4tdGVzdGA6IGl0IGJ1bmRsZXMgdGhlIHBsdWdpbiB0b2dldGhlciB3aXRoIHRoZSB0ZXN0IGZpbGVzLCBpbnN0YWxscyBpdCBpbnRvIGFcbiAqIHRlbXBvcmFyeSB2YXVsdCwgbGF1bmNoZXMgdGhlIGluc3RhbGxlZCBPYnNpZGlhbiBhbmQgcnVucyB0aGUgdGVzdHMgaW5zaWRlIGl0IHdpdGggYG5vZGU6dGVzdGAuXG4gKlxuICoge0BsaW5rIHRlc3RFbmRUb0VuZFdpdGhPYnNpZGlhblRlc3R9IGlzIHRoZSBgdGVzdDplMmVgIHNjcmlwdC5cbiAqL1xuXG5pbXBvcnQgeyBleGVjRnJvbVJvb3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yb290JztcblxuaW1wb3J0IHtcbiAgYXNzZXJ0UHJvamVjdFBhY2thZ2VzSW5zdGFsbGVkLFxuICBERUZBVUxUX0VORF9UT19FTkRfU1BFQ1Ncbn0gZnJvbSAnLi9lMmUtcnVubmVyLXN1cHBvcnQudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0ZXN0RW5kVG9FbmRXaXRoT2JzaWRpYW5UZXN0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RW5kVG9FbmRXaXRoT2JzaWRpYW5UZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0aGF0IGxhdW5jaGVzIE9ic2lkaWFuLiBEZWZhdWx0cyB0byBgb2JzaWRpYW4tdGVzdGAncyBvd24sIGBvYnNpZGlhbmA7IHBvaW50IGl0IGF0IHRoZSBleGVjdXRhYmxlXG4gICAqIHdoZW4gYG9ic2lkaWFuYCBpcyBub3Qgb24gYFBBVEhgLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBvYnNpZGlhbi10ZXN0YCBtYXkgcmVwbGF5IGl0cyBjYWNoZWQgcmVzdWx0cyB3aGVuIHRoZSBwbHVnaW4sIHRoZSB0ZXN0cyBhbmQgT2JzaWRpYW4gYXJlIHVuY2hhbmdlZC5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgOyBgZmFsc2VgIHBhc3NlcyBgLS1mb3JjZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRVc2VDYWNoZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBnbG9iIG9mIHRoZSB0ZXN0IGZpbGVzLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTfS5cbiAgICogYG9ic2lkaWFuLXRlc3RgJ3Mgb3duIGRlZmF1bHQgYWxzbyBtYXRjaGVzIGV2ZXJ5IGAqLnRlc3QudHNgLCB3aGljaCB3b3VsZCBidW5kbGUgdGhlIHVuaXQgdGVzdHMgaW50byBPYnNpZGlhbi5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RQYXR0ZXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgdG8gcnVuIGluLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBgb2JzaWRpYW4tdGVzdGAgaW5zdGFsbHMgdGhlIHBsdWdpbiBJTlRPIGl0LCBzbyBpdCBtdXN0IGJlIGFcbiAgICogc2NyYXRjaCB2YXVsdCwgbmV2ZXIgdGhlIGRlbW8gdmF1bHQuIERlZmF1bHRzIHRvIGEgdGVtcG9yYXJ5IHZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGVuZC10by1lbmQgdGVzdHMgd2l0aCBgb2JzaWRpYW4tdGVzdGAuIEl0IGlzIHRoZSBib2R5IG9mIGEgcGx1Z2luJ3MgYHRlc3Q6ZTJlYCBzY3JpcHQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFRlc3RFbmRUb0VuZFdpdGhPYnNpZGlhblRlc3RPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgdGVzdHMgcGFzcy5cbiAqIEB0aHJvd3MgV2hlbiBgb2JzaWRpYW4tdGVzdGAgaXMgbWlzc2luZyBvciBhIHRlc3QgZmFpbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RW5kVG9FbmRXaXRoT2JzaWRpYW5UZXN0KG9wdGlvbnM6IFRlc3RFbmRUb0VuZFdpdGhPYnNpZGlhblRlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXNzZXJ0UHJvamVjdFBhY2thZ2VzSW5zdGFsbGVkKHsgcGFja2FnZU5hbWVzOiBbJ29ic2lkaWFuLXRlc3QnXSwgcmVxdWVzdGVyOiAndGVzdEVuZFRvRW5kV2l0aE9ic2lkaWFuVGVzdCgpJyB9KTtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAnb2JzaWRpYW4tdGVzdCcsXG4gICAgJy0tdGVzdFBhdHRlcm4nLFxuICAgIG9wdGlvbnMudGVzdFBhdHRlcm4gPz8gREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTLFxuICAgIC4uLm9wdGlvbnMudmF1bHRQYXRoID09PSB1bmRlZmluZWQgPyBbXSA6IFsnLS12YXVsdC1wYXRoJywgb3B0aW9ucy52YXVsdFBhdGhdLFxuICAgIC4uLm9wdGlvbnMub2JzaWRpYW5Db21tYW5kID09PSB1bmRlZmluZWQgPyBbXSA6IFsnLS1vYnNpZGlhbi1jbWQnLCBvcHRpb25zLm9ic2lkaWFuQ29tbWFuZF0sXG4gICAgLi4ub3B0aW9ucy5zaG91bGRVc2VDYWNoZSA/PyB0cnVlID8gW10gOiBbJy0tZm9yY2UnXVxuICBdLCB7IGlzSW50ZXJhY3RpdmU6IHRydWUgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0Esa0JBQTZCO0FBRTdCLGdDQUdPO0FBc0NQLGVBQXNCLDZCQUE2QixVQUErQyxDQUFDLEdBQWtCO0FBQ25ILGdFQUErQixFQUFFLGNBQWMsQ0FBQyxlQUFlLEdBQUcsV0FBVyxpQ0FBaUMsQ0FBQztBQUMvRyxZQUFNLDBCQUFhO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRLGVBQWU7QUFBQSxJQUN2QixHQUFHLFFBQVEsY0FBYyxTQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixRQUFRLFNBQVM7QUFBQSxJQUM1RSxHQUFHLFFBQVEsb0JBQW9CLFNBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLFFBQVEsZUFBZTtBQUFBLElBQzFGLEdBQUcsUUFBUSxrQkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTO0FBQUEsRUFDckQsR0FBRyxFQUFFLGVBQWUsS0FBSyxDQUFDO0FBQzVCOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,42 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * End-to-end tests with `obsidian-test`: it bundles the plugin together with the test files, installs it into a
6
+ * temporary vault, launches the installed Obsidian and runs the tests inside it with `node:test`.
7
+ *
8
+ * {@link testEndToEndWithObsidianTest} is the `test:e2e` script.
9
+ */
10
+ /**
11
+ * Options for {@link testEndToEndWithObsidianTest}.
12
+ */
13
+ export interface TestEndToEndWithObsidianTestOptions {
14
+ /**
15
+ * The command that launches Obsidian. Defaults to `obsidian-test`'s own, `obsidian`; point it at the executable
16
+ * when `obsidian` is not on `PATH`.
17
+ */
18
+ readonly obsidianCommand?: string;
19
+ /**
20
+ * Whether `obsidian-test` may replay its cached results when the plugin, the tests and Obsidian are unchanged.
21
+ * Defaults to `true`; `false` passes `--force`.
22
+ */
23
+ readonly shouldUseCache?: boolean;
24
+ /**
25
+ * The glob of the test files, relative to the project root. Defaults to {@link DEFAULT_END_TO_END_SPECS}.
26
+ * `obsidian-test`'s own default also matches every `*.test.ts`, which would bundle the unit tests into Obsidian.
27
+ */
28
+ readonly testPattern?: string;
29
+ /**
30
+ * The vault to run in, relative to the project root. `obsidian-test` installs the plugin INTO it, so it must be a
31
+ * scratch vault, never the demo vault. Defaults to a temporary vault.
32
+ */
33
+ readonly vaultPath?: string;
34
+ }
35
+ /**
36
+ * Runs the end-to-end tests with `obsidian-test`. It is the body of a plugin's `test:e2e` script.
37
+ *
38
+ * @param options - The {@link TestEndToEndWithObsidianTestOptions}.
39
+ * @returns A {@link Promise} that resolves once the tests pass.
40
+ * @throws When `obsidian-test` is missing or a test fails.
41
+ */
42
+ export declare function testEndToEndWithObsidianTest(options?: TestEndToEndWithObsidianTestOptions): Promise<void>;
@@ -0,0 +1,205 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+ (function patchObsidianRequire() {
33
+ const originalRequire = require;
34
+ if (!originalRequire || originalRequire.__isPatched) {
35
+ return;
36
+ }
37
+
38
+ require = Object.assign(
39
+ (id) => requirePatched(id),
40
+ originalRequire,
41
+ {
42
+ __isPatched: true
43
+ }
44
+ );
45
+
46
+ function extractDefault(module) {
47
+ return module && module.__esModule && 'default' in module ? module.default : module;
48
+ }
49
+
50
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
51
+ '@codemirror/autocomplete',
52
+ '@codemirror/collab',
53
+ '@codemirror/commands',
54
+ '@codemirror/language',
55
+ '@codemirror/lint',
56
+ '@codemirror/search',
57
+ '@codemirror/state',
58
+ '@codemirror/text',
59
+ '@codemirror/view',
60
+ '@lezer/common',
61
+ '@lezer/highlight',
62
+ '@lezer/lr',
63
+ 'obsidian']
64
+ );
65
+
66
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
67
+ '@codemirror/closebrackets',
68
+ '@codemirror/comment',
69
+ '@codemirror/fold',
70
+ '@codemirror/gutter',
71
+ '@codemirror/highlight',
72
+ '@codemirror/history',
73
+ '@codemirror/matchbrackets',
74
+ '@codemirror/panel',
75
+ '@codemirror/rangeset',
76
+ '@codemirror/rectangular-selection',
77
+ '@codemirror/stream-parser',
78
+ '@codemirror/tooltip']
79
+ );
80
+
81
+ function requirePatched(id) {
82
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
83
+ return originalRequire?.(id);
84
+ }
85
+
86
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
87
+ if (globalThis.app.isMobile) {
88
+ if (id === 'process' || id === 'node:process') {
89
+ // eslint-disable-next-line no-console -- Valid usage.
90
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
91
+
92
+ return process;
93
+ }
94
+ } else {
95
+ const module = originalRequire?.(id);
96
+ if (module) {
97
+ return extractDefault(module);
98
+ }
99
+ }
100
+
101
+ // eslint-disable-next-line no-console -- Valid usage.
102
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
103
+ return {};
104
+ }
105
+ })();
106
+
107
+ "use strict";
108
+ var __defProp = Object.defineProperty;
109
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
110
+ var __getOwnPropNames = Object.getOwnPropertyNames;
111
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
112
+ var __export = (target, all) => {
113
+ for (var name in all)
114
+ __defProp(target, name, { get: all[name], enumerable: true });
115
+ };
116
+ var __copyProps = (to, from, except, desc) => {
117
+ if (from && typeof from === "object" || typeof from === "function") {
118
+ for (let key of __getOwnPropNames(from))
119
+ if (!__hasOwnProp.call(to, key) && key !== except)
120
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
121
+ }
122
+ return to;
123
+ };
124
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
125
+ var wdio_obsidian_exports = {};
126
+ __export(wdio_obsidian_exports, {
127
+ DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS: () => DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS,
128
+ WDIO_CONFIG_FILE_NAMES: () => WDIO_CONFIG_FILE_NAMES,
129
+ defineWdioObsidianConfig: () => defineWdioObsidianConfig,
130
+ testEndToEndWithWdioObsidian: () => testEndToEndWithWdioObsidian
131
+ });
132
+ module.exports = __toCommonJS(wdio_obsidian_exports);
133
+ var import_npm_run = require('@mnaoumov/typescript-dev-toolkit/npm-run');
134
+ var import_root = require('@mnaoumov/typescript-dev-toolkit/root');
135
+ var import_node_fs = require('node:fs');
136
+ var import_obsidian_plugin_repo_paths = require('../obsidian-plugin-repo-paths.cjs');
137
+ var import_e2e_runner_support = require('./e2e-runner-support.cjs');
138
+ const DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS = 6e4;
139
+ const WDIO_CONFIG_FILE_NAMES = ["wdio.conf.mts", "wdio.conf.ts"];
140
+ const WDIO_OBSIDIAN_PACKAGES = ["@wdio/cli", "@wdio/local-runner", "@wdio/mocha-framework", "wdio-obsidian-reporter", "wdio-obsidian-service"];
141
+ function defineWdioObsidianConfig(options = {}) {
142
+ const pluginFolder = (0, import_root.resolvePathFromRootSafe)({ path: options.pluginFolder ?? import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.DistBuild });
143
+ const vault = resolveVault(options.vault);
144
+ const capabilityOptions = {
145
+ plugins: [pluginFolder],
146
+ ...options.installerVersion !== void 0 && { installerVersion: options.installerVersion },
147
+ ...vault !== void 0 && { vault }
148
+ };
149
+ return {
150
+ // eslint-disable-next-line unicorn/name-replacements -- WebdriverIO's own option name.
151
+ cacheDir: (0, import_root.resolvePathFromRootSafe)({ path: options.cacheFolder ?? ".obsidian-cache" }),
152
+ capabilities: (options.appVersions ?? ["latest"]).map((appVersion) => ({
153
+ "browserName": "obsidian",
154
+ "browserVersion": appVersion,
155
+ "wdio:obsidianOptions": { ...capabilityOptions, plugins: [...capabilityOptions.plugins] }
156
+ })),
157
+ framework: "mocha",
158
+ logLevel: "warn",
159
+ ...options.maxInstances !== void 0 && { maxInstances: options.maxInstances },
160
+ // eslint-disable-next-line unicorn/name-replacements -- WebdriverIO's own option name.
161
+ mochaOpts: {
162
+ timeout: options.testTimeoutInMilliseconds ?? DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS,
163
+ ui: "bdd"
164
+ },
165
+ reporters: ["obsidian"],
166
+ runner: "local",
167
+ services: ["obsidian"],
168
+ specs: [...options.specs ?? [import_e2e_runner_support.DEFAULT_END_TO_END_SPECS]]
169
+ };
170
+ }
171
+ async function testEndToEndWithWdioObsidian(options = {}) {
172
+ (0, import_e2e_runner_support.assertProjectPackagesInstalled)({ packageNames: WDIO_OBSIDIAN_PACKAGES, requester: "testEndToEndWithWdioObsidian()" });
173
+ const configPath = options.configPath ?? findWdioConfigFile();
174
+ if (options.shouldBuild ?? true) {
175
+ await (0, import_npm_run.npmRun)("build");
176
+ }
177
+ await (0, import_root.execFromRoot)(["wdio", "run", configPath], { isInteractive: true });
178
+ }
179
+ function findWdioConfigFile() {
180
+ const configFileName = WDIO_CONFIG_FILE_NAMES.find((fileName) => (0, import_node_fs.existsSync)((0, import_root.resolvePathFromRootSafe)({ path: fileName })));
181
+ if (configFileName === void 0) {
182
+ throw new Error(
183
+ `testEndToEndWithWdioObsidian() found no WebdriverIO config (${WDIO_CONFIG_FILE_NAMES.join(", ")}) in the project root. Create wdio.conf.mts exporting \`config = defineWdioObsidianConfig()\`, or pass \`configPath\`.`
184
+ );
185
+ }
186
+ return configFileName;
187
+ }
188
+ function resolveVault(vault) {
189
+ if (vault === false) {
190
+ return void 0;
191
+ }
192
+ if (vault !== void 0) {
193
+ return (0, import_root.resolvePathFromRootSafe)({ path: vault });
194
+ }
195
+ const demoVaultPath = (0, import_root.resolvePathFromRootSafe)({ path: import_obsidian_plugin_repo_paths.ObsidianPluginRepoPaths.DemoVault });
196
+ return (0, import_node_fs.existsSync)(demoVaultPath) ? demoVaultPath : void 0;
197
+ }
198
+ // Annotate the CommonJS export names for ESM import in node:
199
+ 0 && (module.exports = {
200
+ DEFAULT_WDIO_OBSIDIAN_TEST_TIMEOUT_IN_MILLISECONDS,
201
+ WDIO_CONFIG_FILE_NAMES,
202
+ defineWdioObsidianConfig,
203
+ testEndToEndWithWdioObsidian
204
+ });
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXN0LXJ1bm5lcnMvd2Rpby1vYnNpZGlhbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRW5kLXRvLWVuZCB0ZXN0cyB3aXRoIGB3ZGlvLW9ic2lkaWFuLXNlcnZpY2VgOiBXZWJkcml2ZXJJTyBkcml2ZXMgYSBzYW5kYm94ZWQgY29weSBvZiBPYnNpZGlhbiwgZG93bmxvYWRlZCBwZXJcbiAqIHZlcnNpb24gaW50byBhIGNhY2hlLCB3aXRoIHRoZSBwbHVnaW4gaW5zdGFsbGVkIGludG8gYSBjb3B5IG9mIHRoZSB0ZXN0IHZhdWx0LlxuICpcbiAqIHtAbGluayBkZWZpbmVXZGlvT2JzaWRpYW5Db25maWd9IGRlcml2ZXMgdGhlIGB3ZGlvLmNvbmYubXRzYCBmcm9tIHRoZSBwcm9qZWN0J3MgbGF5b3V0LCBhbmRcbiAqIHtAbGluayB0ZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFufSBpcyB0aGUgYHRlc3Q6ZTJlYCBzY3JpcHQ6IGEgcHJvZHVjdGlvbiBidWlsZCwgdGhlbiBgd2RpbyBydW5gLlxuICpcbiAqIFRoZSBjb25maWcgaXMgdHlwZWQgc3RydWN0dXJhbGx5IHJhdGhlciB0aGFuIHRocm91Z2ggYEB3ZGlvL3R5cGVzYCwgc28gdGhpcyBtb2R1bGUgY29zdHMgYSBwcm9qZWN0IHRoYXQgZG9lcyBub3RcbiAqIHVzZSBXZWJkcml2ZXJJTyBub3RoaW5nLCBhbmQgdGhlIHJldHVybmVkIG9iamVjdCBpcyBhc3NpZ25hYmxlIHRvIGBXZWJkcml2ZXJJTy5Db25maWdgIGluIG9uZSB0aGF0IGRvZXMuXG4gKi9cblxuaW1wb3J0IHsgbnBtUnVuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbnBtLXJ1bic7XG5pbXBvcnQge1xuICBleGVjRnJvbVJvb3QsXG4gIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0L3Jvb3QnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG5pbXBvcnQgeyBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydFByb2plY3RQYWNrYWdlc0luc3RhbGxlZCxcbiAgREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTXG59IGZyb20gJy4vZTJlLXJ1bm5lci1zdXBwb3J0LnRzJztcblxuLyoqXG4gKiBUaGUgcGVyLXRlc3QgdGltZW91dCB7QGxpbmsgZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnfSBnaXZlcyBtb2NoYSBieSBkZWZhdWx0LCBpbiBtaWxsaXNlY29uZHMuIE9ic2lkaWFuIGlzXG4gKiBzdGFydGVkIG9uY2UgcGVyIHNwZWMgZmlsZSwgd2hpY2ggYSBzaW5nbGUgdGVzdCdzIGJ1ZGdldCBoYXMgdG8gYWJzb3JiLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9XRElPX09CU0lESUFOX1RFU1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5cbi8qKlxuICogVGhlIGNvbmZpZyBmaWxlcyB7QGxpbmsgdGVzdEVuZFRvRW5kV2l0aFdkaW9PYnNpZGlhbn0gbG9va3MgZm9yLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IFdESU9fQ09ORklHX0ZJTEVfTkFNRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWyd3ZGlvLmNvbmYubXRzJywgJ3dkaW8uY29uZi50cyddO1xuXG4vKipcbiAqIFRoZSBwYWNrYWdlcyBhIGB3ZGlvLW9ic2lkaWFuLXNlcnZpY2VgIHNldHVwIG5lZWRzIGluIHRoZSBwcm9qZWN0LlxuICovXG5jb25zdCBXRElPX09CU0lESUFOX1BBQ0tBR0VTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnQHdkaW8vY2xpJywgJ0B3ZGlvL2xvY2FsLXJ1bm5lcicsICdAd2Rpby9tb2NoYS1mcmFtZXdvcmsnLCAnd2Rpby1vYnNpZGlhbi1yZXBvcnRlcicsICd3ZGlvLW9ic2lkaWFuLXNlcnZpY2UnXTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbmVXZGlvT2JzaWRpYW5Db25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgdmVyc2lvbnMgdG8gdGVzdCwgb25lIGNhcGFiaWxpdHkgZWFjaDogYSB2ZXJzaW9uIHN1Y2ggYXMgYDEuOC4xMGAsIGBsYXRlc3RgLCBgbGF0ZXN0LWJldGFgLCBvclxuICAgKiBgZWFybGllc3RgICh0aGUgYG1pbkFwcFZlcnNpb25gIG9mIGBtYW5pZmVzdC5qc29uYCkuIERlZmF1bHRzIHRvIGBbJ2xhdGVzdCddYDsgYFsnZWFybGllc3QnLCAnbGF0ZXN0J11gIHRlc3RzXG4gICAqIGJvdGggZW5kcyBvZiB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwVmVyc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBPYnNpZGlhbiB2ZXJzaW9ucyBhcmUgZG93bmxvYWRlZCBpbnRvLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBEZWZhdWx0cyB0byBgLm9ic2lkaWFuLWNhY2hlYCxcbiAgICogd2hpY2ggYmVsb25ncyBpbiBgLmdpdGlnbm9yZWAuXG4gICAqL1xuICByZWFkb25seSBjYWNoZUZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGluc3RhbGxlciAoRWxlY3Ryb24pIHZlcnNpb24sIGBlYXJsaWVzdGAgb3IgYGxhdGVzdGAgY29tcGF0aWJsZSB3aXRoIGVhY2ggYXBwIHZlcnNpb24sIG9yIGFuIGV4YWN0XG4gICAqIG9uZS4gRGVmYXVsdHMgdG8gdGhlIHNlcnZpY2UncyBvd24gY2hvaWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IG1hbnkgT2JzaWRpYW4gaW5zdGFuY2VzIHJ1biBpbiBwYXJhbGxlbC4gRGVmYXVsdHMgdG8gV2ViZHJpdmVySU8ncy5cbiAgICovXG4gIHJlYWRvbmx5IG1heEluc3RhbmNlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBob2xkaW5nIHRoZSBidWlsdCBwbHVnaW4gKGBtYWluLmpzYCwgYG1hbmlmZXN0Lmpzb25gLCBgc3R5bGVzLmNzc2ApLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LlxuICAgKiBEZWZhdWx0cyB0byBgZGlzdC9idWlsZGAsIHdoZXJlIHRoZSBwcm9kdWN0aW9uIGJ1aWxkIHdyaXRlcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkZvbGRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNwZWMgZmlsZXMsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VORF9UT19FTkRfU1BFQ1N9LlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHBlci10ZXN0IHRpbWVvdXQsIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfV0RJT19PQlNJRElBTl9URVNUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTfS5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBldmVyeSB0ZXN0IHN0YXJ0cyBmcm9tLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiBUaGUgc2VydmljZSBvcGVucyBhIENPUFkgb2YgaXQsIHNvIHRoZSB0ZXN0c1xuICAgKiBuZXZlciBjaGFuZ2UgdGhlIGZvbGRlci4gRGVmYXVsdHMgdG8gdGhlIHBsdWdpbidzIGRlbW8gdmF1bHQgKGBkZW1vLXZhdWx0YCkgd2hlbiB0aGUgcHJvamVjdCBoYXMgb25lLCBhbmQgdG8gYW5cbiAgICogZW1wdHkgdmF1bHQgb3RoZXJ3aXNlOyBgZmFsc2VgIGZvcmNlcyB0aGUgZW1wdHkgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSB2YXVsdD86IGZhbHNlIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0ZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgV2ViZHJpdmVySU8gY29uZmlnIGZpbGUsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBvZlxuICAgKiB7QGxpbmsgV0RJT19DT05GSUdfRklMRV9OQU1FU30gdGhhdCBleGlzdHMuXG4gICAqL1xuICByZWFkb25seSBjb25maWdQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJ1biB0aGUgcHJvZHVjdGlvbiBidWlsZCBmaXJzdCwgc28gdGhlIHRlc3RzIGxvYWQgdGhlIGN1cnJlbnQgYGRpc3QvYnVpbGRgLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRCdWlsZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBgd2Rpby1vYnNpZGlhbi1zZXJ2aWNlYCBjYXBhYmlsaXR5OiBvbmUgT2JzaWRpYW4gdmVyc2lvbiB0byBydW4gdGhlIHNwZWNzIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2Rpb09ic2lkaWFuQ2FwYWJpbGl0eSB7XG4gIC8qKlxuICAgKiBBbHdheXMgYG9ic2lkaWFuYCwgd2hpY2ggaXMgd2hhdCByb3V0ZXMgdGhlIGNhcGFiaWxpdHkgdG8gdGhlIHNlcnZpY2UuXG4gICAqL1xuICAnYnJvd3Nlck5hbWUnOiAnb2JzaWRpYW4nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIHZlcnNpb24uXG4gICAqL1xuICAnYnJvd3NlclZlcnNpb24nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlJ3Mgb3duIG9wdGlvbnMgZm9yIHRoaXMgY2FwYWJpbGl0eS5cbiAgICovXG4gICd3ZGlvOm9ic2lkaWFuT3B0aW9ucyc6IFdkaW9PYnNpZGlhbkNhcGFiaWxpdHlPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBgd2RpbzpvYnNpZGlhbk9wdGlvbnNgIG9mIGEge0BsaW5rIFdkaW9PYnNpZGlhbkNhcGFiaWxpdHl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdkaW9PYnNpZGlhbkNhcGFiaWxpdHlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBpbnN0YWxsZXIgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZm9sZGVycyB0byBpbnN0YWxsIGludG8gdGhlIHZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCB0byBvcGVuIGEgY29weSBvZi5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBXZWJkcml2ZXJJTyBjb25maWd1cmF0aW9uIHtAbGluayBkZWZpbmVXZGlvT2JzaWRpYW5Db25maWd9IHJldHVybnMuIEV2ZXJ5IGZpZWxkIGlzIHBsYWluIGRhdGEsIHNvIGEgcHJvamVjdFxuICogY2hhbmdlcyBhbnkgb2YgdGhlbSBieSBzcHJlYWRpbmcgdGhlIHJlc3VsdDogYHsgLi4uZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnKCksIGxvZ0xldmVsOiAnaW5mbycgfWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2Rpb09ic2lkaWFuQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXJlIE9ic2lkaWFuIHZlcnNpb25zIGFyZSBkb3dubG9hZGVkLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gV2ViZHJpdmVySU8ncyBvd24gb3B0aW9uIG5hbWUuXG4gIGNhY2hlRGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9uZSBjYXBhYmlsaXR5IHBlciBPYnNpZGlhbiB2ZXJzaW9uLlxuICAgKi9cbiAgY2FwYWJpbGl0aWVzOiBXZGlvT2JzaWRpYW5DYXBhYmlsaXR5W107XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXN0IGZyYW1ld29yay5cbiAgICovXG4gIGZyYW1ld29yazogJ21vY2hhJztcblxuICAvKipcbiAgICogV2ViZHJpdmVySU8ncyBsb2cgbGV2ZWwuXG4gICAqL1xuICBsb2dMZXZlbDogJ2RlYnVnJyB8ICdlcnJvcicgfCAnaW5mbycgfCAnc2lsZW50JyB8ICd0cmFjZScgfCAnd2Fybic7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IE9ic2lkaWFuIGluc3RhbmNlcyBydW4gaW4gcGFyYWxsZWwuXG4gICAqL1xuICBtYXhJbnN0YW5jZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1vY2hhJ3Mgb3B0aW9ucy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIFdlYmRyaXZlcklPJ3Mgb3duIG9wdGlvbiBuYW1lLlxuICBtb2NoYU9wdHM6IFdkaW9PYnNpZGlhbk1vY2hhT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHJlcG9ydGVycy4gYG9ic2lkaWFuYCBpcyB0aGUgc3BlYyByZXBvcnRlciwgbmFtaW5nIHRoZSBPYnNpZGlhbiB2ZXJzaW9uIGluc3RlYWQgb2YgQ2hyb21pdW0ncy5cbiAgICovXG4gIHJlcG9ydGVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBzcGVjcyBydW4uXG4gICAqL1xuICBydW5uZXI6ICdsb2NhbCc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlcy4gYG9ic2lkaWFuYCBpcyBgd2Rpby1vYnNpZGlhbi1zZXJ2aWNlYC5cbiAgICovXG4gIHNlcnZpY2VzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNwZWMgZmlsZXMuXG4gICAqL1xuICBzcGVjczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGBtb2NoYU9wdHNgIG9mIGEge0BsaW5rIFdkaW9PYnNpZGlhbkNvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2Rpb09ic2lkaWFuTW9jaGFPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwZXItdGVzdCB0aW1lb3V0LCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcmZhY2UgdGhlIHNwZWNzIGFyZSB3cml0dGVuIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgdWk6ICdiZGQnO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgV2ViZHJpdmVySU8gY29uZmlndXJhdGlvbiBmb3IgZW5kLXRvLWVuZCB0ZXN0cyB3aXRoIGB3ZGlvLW9ic2lkaWFuLXNlcnZpY2VgLCBkZXJpdmVkIGZyb20gdGhlIHBsdWdpbidzXG4gKiBsYXlvdXQ6IHRoZSBwcm9kdWN0aW9uIGJ1aWxkIGluIGBkaXN0L2J1aWxkYCBpcyB0aGUgcGx1Z2luIHVuZGVyIHRlc3QsIHRoZSBkZW1vIHZhdWx0ICh3aGVuIHRoZXJlIGlzIG9uZSkgaXMgdGhlXG4gKiB2YXVsdCwgYW5kIHRoZSBzcGVjcyBsaXZlIGluIGBlMmUvYC5cbiAqXG4gKiBgd2Rpby5jb25mLm10c2A6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGRlZmluZVdkaW9PYnNpZGlhbkNvbmZpZyB9IGZyb20gJ0BtbmFvdW1vdi9vYnNpZGlhbi1kZXYtdG9vbGtpdC90ZXN0LXJ1bm5lcnMvd2Rpby1vYnNpZGlhbic7XG4gKlxuICogZXhwb3J0IGNvbnN0IGNvbmZpZzogV2ViZHJpdmVySU8uQ29uZmlnID0gZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnKHsgYXBwVmVyc2lvbnM6IFsnZWFybGllc3QnLCAnbGF0ZXN0J10gfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnT3B0aW9uc30uXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgdG8gZXhwb3J0IGFzIGBjb25maWdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lV2Rpb09ic2lkaWFuQ29uZmlnKG9wdGlvbnM6IERlZmluZVdkaW9PYnNpZGlhbkNvbmZpZ09wdGlvbnMgPSB7fSk6IFdkaW9PYnNpZGlhbkNvbmZpZyB7XG4gIGNvbnN0IHBsdWdpbkZvbGRlciA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogb3B0aW9ucy5wbHVnaW5Gb2xkZXIgPz8gT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMuRGlzdEJ1aWxkIH0pO1xuICBjb25zdCB2YXVsdCA9IHJlc29sdmVWYXVsdChvcHRpb25zLnZhdWx0KTtcbiAgY29uc3QgY2FwYWJpbGl0eU9wdGlvbnM6IFdkaW9PYnNpZGlhbkNhcGFiaWxpdHlPcHRpb25zID0ge1xuICAgIHBsdWdpbnM6IFtwbHVnaW5Gb2xkZXJdLFxuICAgIC4uLihvcHRpb25zLmluc3RhbGxlclZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IGluc3RhbGxlclZlcnNpb246IG9wdGlvbnMuaW5zdGFsbGVyVmVyc2lvbiB9KSxcbiAgICAuLi4odmF1bHQgIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0IH0pXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBXZWJkcml2ZXJJTydzIG93biBvcHRpb24gbmFtZS5cbiAgICBjYWNoZURpcjogcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBvcHRpb25zLmNhY2hlRm9sZGVyID8/ICcub2JzaWRpYW4tY2FjaGUnIH0pLFxuICAgIGNhcGFiaWxpdGllczogKG9wdGlvbnMuYXBwVmVyc2lvbnMgPz8gWydsYXRlc3QnXSkubWFwKChhcHBWZXJzaW9uKSA9PiAoe1xuICAgICAgJ2Jyb3dzZXJOYW1lJzogJ29ic2lkaWFuJyxcbiAgICAgICdicm93c2VyVmVyc2lvbic6IGFwcFZlcnNpb24sXG4gICAgICAnd2RpbzpvYnNpZGlhbk9wdGlvbnMnOiB7IC4uLmNhcGFiaWxpdHlPcHRpb25zLCBwbHVnaW5zOiBbLi4uY2FwYWJpbGl0eU9wdGlvbnMucGx1Z2luc10gfVxuICAgIH0pKSxcbiAgICBmcmFtZXdvcms6ICdtb2NoYScsXG4gICAgbG9nTGV2ZWw6ICd3YXJuJyxcbiAgICAuLi4ob3B0aW9ucy5tYXhJbnN0YW5jZXMgIT09IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlczogb3B0aW9ucy5tYXhJbnN0YW5jZXMgfSksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gV2ViZHJpdmVySU8ncyBvd24gb3B0aW9uIG5hbWUuXG4gICAgbW9jaGFPcHRzOiB7XG4gICAgICB0aW1lb3V0OiBvcHRpb25zLnRlc3RUaW1lb3V0SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9XRElPX09CU0lESUFOX1RFU1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICB1aTogJ2JkZCdcbiAgICB9LFxuICAgIHJlcG9ydGVyczogWydvYnNpZGlhbiddLFxuICAgIHJ1bm5lcjogJ2xvY2FsJyxcbiAgICBzZXJ2aWNlczogWydvYnNpZGlhbiddLFxuICAgIHNwZWNzOiBbLi4ub3B0aW9ucy5zcGVjcyA/PyBbREVGQVVMVF9FTkRfVE9fRU5EX1NQRUNTXV1cbiAgfTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBlbmQtdG8tZW5kIHRlc3RzIHdpdGggYHdkaW8tb2JzaWRpYW4tc2VydmljZWA6IHRoZSBwcm9kdWN0aW9uIGJ1aWxkLCB0aGVuIGB3ZGlvIHJ1biA8Y29uZmlnPmAuIEl0IGlzIHRoZVxuICogYm9keSBvZiBhIHBsdWdpbidzIGB0ZXN0OmUyZWAgc2NyaXB0LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBUZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHRlc3RzIHBhc3MuXG4gKiBAdGhyb3dzIFdoZW4gYSBwYWNrYWdlIGlzIG1pc3NpbmcsIG5vIGNvbmZpZyBmaWxlIGlzIGZvdW5kLCB0aGUgYnVpbGQgZmFpbHMgb3IgYSB0ZXN0IGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEVuZFRvRW5kV2l0aFdkaW9PYnNpZGlhbihvcHRpb25zOiBUZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGFzc2VydFByb2plY3RQYWNrYWdlc0luc3RhbGxlZCh7IHBhY2thZ2VOYW1lczogV0RJT19PQlNJRElBTl9QQUNLQUdFUywgcmVxdWVzdGVyOiAndGVzdEVuZFRvRW5kV2l0aFdkaW9PYnNpZGlhbigpJyB9KTtcbiAgY29uc3QgY29uZmlnUGF0aCA9IG9wdGlvbnMuY29uZmlnUGF0aCA/PyBmaW5kV2Rpb0NvbmZpZ0ZpbGUoKTtcbiAgaWYgKG9wdGlvbnMuc2hvdWxkQnVpbGQgPz8gdHJ1ZSkge1xuICAgIGF3YWl0IG5wbVJ1bignYnVpbGQnKTtcbiAgfVxuICBhd2FpdCBleGVjRnJvbVJvb3QoWyd3ZGlvJywgJ3J1bicsIGNvbmZpZ1BhdGhdLCB7IGlzSW50ZXJhY3RpdmU6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRXZGlvQ29uZmlnRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBjb25maWdGaWxlTmFtZSA9IFdESU9fQ09ORklHX0ZJTEVfTkFNRVMuZmluZCgoZmlsZU5hbWUpID0+IGV4aXN0c1N5bmMocmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBmaWxlTmFtZSB9KSkpO1xuICBpZiAoY29uZmlnRmlsZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGB0ZXN0RW5kVG9FbmRXaXRoV2Rpb09ic2lkaWFuKCkgZm91bmQgbm8gV2ViZHJpdmVySU8gY29uZmlnICgke1dESU9fQ09ORklHX0ZJTEVfTkFNRVMuam9pbignLCAnKX0pIGluIHRoZSBwcm9qZWN0IHJvb3QuIGBcbiAgICAgICAgKyAnQ3JlYXRlIHdkaW8uY29uZi5tdHMgZXhwb3J0aW5nIGBjb25maWcgPSBkZWZpbmVXZGlvT2JzaWRpYW5Db25maWcoKWAsIG9yIHBhc3MgYGNvbmZpZ1BhdGhgLidcbiAgICApO1xuICB9XG4gIHJldHVybiBjb25maWdGaWxlTmFtZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVZhdWx0KHZhdWx0OiBEZWZpbmVXZGlvT2JzaWRpYW5Db25maWdPcHRpb25zWyd2YXVsdCddKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhdWx0ID09PSBmYWxzZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiB2YXVsdCB9KTtcbiAgfVxuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBPYnNpZGlhblBsdWdpblJlcG9QYXRocy5EZW1vVmF1bHQgfSk7XG4gIHJldHVybiBleGlzdHNTeW5jKGRlbW9WYXVsdFBhdGgpID8gZGVtb1ZhdWx0UGF0aCA6IHVuZGVmaW5lZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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