@mnaoumov/obsidian-dev-toolkit 2.1.0 → 3.1.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 (131) hide show
  1. package/README.md +6 -2
  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/demo-vault-helper/main.js +6 -442
  18. package/dist/integration-test-plugin/main.js +918 -4912
  19. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +3 -188
  20. package/dist/lib/cjs/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +2 -18
  21. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.cjs +173 -0
  22. package/dist/lib/cjs/bundlers/esbuild-impl/feature-options.d.cts +60 -0
  23. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
  24. package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
  25. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +30 -82
  26. package/dist/lib/cjs/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +7 -24
  27. package/dist/lib/cjs/bundlers/index.cjs +39 -3
  28. package/dist/lib/cjs/bundlers/index.d.cts +12 -0
  29. package/dist/lib/cjs/bundlers/obsidian-cli-reload.cjs +182 -0
  30. package/dist/lib/cjs/bundlers/obsidian-cli-reload.d.cts +37 -0
  31. package/dist/lib/cjs/bundlers/obsidian-plugin-build.cjs +278 -0
  32. package/dist/lib/cjs/bundlers/obsidian-plugin-build.d.cts +217 -0
  33. package/dist/lib/cjs/bundlers/obsidian-plugin-features.cjs +242 -0
  34. package/dist/lib/cjs/bundlers/obsidian-plugin-features.d.cts +186 -0
  35. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.cjs +306 -0
  36. package/dist/lib/cjs/bundlers/obsidian-plugin-transforms.d.cts +231 -0
  37. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.cjs +182 -0
  38. package/dist/lib/cjs/bundlers/obsidian-plugin-webpack-loader.d.cts +47 -0
  39. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.cjs +320 -0
  40. package/dist/lib/cjs/bundlers/obsidian-plugins-folder-deployment.d.cts +44 -0
  41. package/dist/lib/cjs/bundlers/parcel.cjs +462 -0
  42. package/dist/lib/cjs/bundlers/parcel.d.cts +128 -0
  43. package/dist/lib/cjs/bundlers/rollup-compatible-features.cjs +181 -0
  44. package/dist/lib/cjs/bundlers/rollup-compatible-features.d.cts +128 -0
  45. package/dist/lib/cjs/bundlers/rollup-compatible.cjs +138 -0
  46. package/dist/lib/cjs/bundlers/rollup-compatible.d.cts +84 -0
  47. package/dist/lib/cjs/bundlers/rollup.cjs +218 -0
  48. package/dist/lib/cjs/bundlers/rollup.d.cts +99 -0
  49. package/dist/lib/cjs/bundlers/vite.cjs +229 -0
  50. package/dist/lib/cjs/bundlers/vite.d.cts +105 -0
  51. package/dist/lib/cjs/bundlers/webpack.cjs +354 -0
  52. package/dist/lib/cjs/bundlers/webpack.d.cts +133 -0
  53. package/dist/lib/cjs/demo-vault-cli.cjs +131 -0
  54. package/dist/lib/cjs/demo-vault-cli.d.cts +15 -0
  55. package/dist/lib/cjs/index.cjs +4 -1
  56. package/dist/lib/cjs/index.d.cts +1 -0
  57. package/dist/lib/cjs/test-runners/coverage-badge-cli.cjs +160 -0
  58. package/dist/lib/cjs/test-runners/coverage-badge-cli.d.cts +25 -0
  59. package/dist/lib/cjs/test-runners/coverage-badge.cjs +279 -0
  60. package/dist/lib/cjs/test-runners/coverage-badge.d.cts +143 -0
  61. package/dist/lib/cjs/test-runners/e2e-runner-support.cjs +170 -0
  62. package/dist/lib/cjs/test-runners/e2e-runner-support.d.cts +36 -0
  63. package/dist/lib/cjs/test-runners/index.cjs +18 -3
  64. package/dist/lib/cjs/test-runners/index.d.cts +5 -0
  65. package/dist/lib/cjs/test-runners/obsidian-test-runner.cjs +147 -0
  66. package/dist/lib/cjs/test-runners/obsidian-test-runner.d.cts +42 -0
  67. package/dist/lib/cjs/test-runners/wdio-obsidian.cjs +205 -0
  68. package/dist/lib/cjs/test-runners/wdio-obsidian.d.cts +199 -0
  69. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +2 -18
  70. package/dist/lib/esm/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +3 -192
  71. package/dist/lib/esm/bundlers/esbuild-impl/feature-options.d.mts +60 -0
  72. package/dist/lib/esm/bundlers/esbuild-impl/feature-options.mjs +82 -0
  73. package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
  74. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
  75. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +7 -24
  76. package/dist/lib/esm/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +41 -87
  77. package/dist/lib/esm/bundlers/index.d.mts +12 -0
  78. package/dist/lib/esm/bundlers/index.mjs +26 -2
  79. package/dist/lib/esm/bundlers/obsidian-cli-reload.d.mts +37 -0
  80. package/dist/lib/esm/bundlers/obsidian-cli-reload.mjs +83 -0
  81. package/dist/lib/esm/bundlers/obsidian-plugin-build.d.mts +217 -0
  82. package/dist/lib/esm/bundlers/obsidian-plugin-build.mjs +166 -0
  83. package/dist/lib/esm/bundlers/obsidian-plugin-features.d.mts +186 -0
  84. package/dist/lib/esm/bundlers/obsidian-plugin-features.mjs +126 -0
  85. package/dist/lib/esm/bundlers/obsidian-plugin-transforms.d.mts +231 -0
  86. package/dist/lib/esm/bundlers/obsidian-plugin-transforms.mjs +194 -0
  87. package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.d.mts +47 -0
  88. package/dist/lib/esm/bundlers/obsidian-plugin-webpack-loader.mjs +89 -0
  89. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.d.mts +44 -0
  90. package/dist/lib/esm/bundlers/obsidian-plugins-folder-deployment.mjs +228 -0
  91. package/dist/lib/esm/bundlers/parcel.d.mts +128 -0
  92. package/dist/lib/esm/bundlers/parcel.mjs +361 -0
  93. package/dist/lib/esm/bundlers/rollup-compatible-features.d.mts +128 -0
  94. package/dist/lib/esm/bundlers/rollup-compatible-features.mjs +93 -0
  95. package/dist/lib/esm/bundlers/rollup-compatible.d.mts +84 -0
  96. package/dist/lib/esm/bundlers/rollup-compatible.mjs +43 -0
  97. package/dist/lib/esm/bundlers/rollup.d.mts +99 -0
  98. package/dist/lib/esm/bundlers/rollup.mjs +130 -0
  99. package/dist/lib/esm/bundlers/vite.d.mts +105 -0
  100. package/dist/lib/esm/bundlers/vite.mjs +144 -0
  101. package/dist/lib/esm/bundlers/webpack.d.mts +133 -0
  102. package/dist/lib/esm/bundlers/webpack.mjs +259 -0
  103. package/dist/lib/esm/demo-vault-cli.d.mts +15 -0
  104. package/dist/lib/esm/demo-vault-cli.mjs +23 -0
  105. package/dist/lib/esm/index.d.mts +1 -0
  106. package/dist/lib/esm/index.mjs +3 -1
  107. package/dist/lib/esm/test-runners/coverage-badge-cli.d.mts +25 -0
  108. package/dist/lib/esm/test-runners/coverage-badge-cli.mjs +51 -0
  109. package/dist/lib/esm/test-runners/coverage-badge.d.mts +143 -0
  110. package/dist/lib/esm/test-runners/coverage-badge.mjs +181 -0
  111. package/dist/lib/esm/test-runners/e2e-runner-support.d.mts +36 -0
  112. package/dist/lib/esm/test-runners/e2e-runner-support.mjs +61 -0
  113. package/dist/lib/esm/test-runners/index.d.mts +5 -0
  114. package/dist/lib/esm/test-runners/index.mjs +12 -2
  115. package/dist/lib/esm/test-runners/obsidian-test-runner.d.mts +42 -0
  116. package/dist/lib/esm/test-runners/obsidian-test-runner.mjs +52 -0
  117. package/dist/lib/esm/test-runners/wdio-obsidian.d.mts +199 -0
  118. package/dist/lib/esm/test-runners/wdio-obsidian.mjs +110 -0
  119. package/package.json +104 -5
  120. package/test-runners/coverage-badge/package.json +6 -0
  121. package/test-runners/coverage-badge-cli/package.json +6 -0
  122. package/test-runners/e2e-runner-support/package.json +6 -0
  123. package/test-runners/obsidian-test-runner/package.json +6 -0
  124. package/test-runners/wdio-obsidian/package.json +6 -0
  125. package/tsconfig/preact.json +7 -0
  126. package/tsconfig/react.json +7 -0
  127. package/tsconfig/solid.json +7 -0
  128. package/tsconfig/svelte.json +7 -0
  129. package/tsconfig/vue.json +7 -0
  130. package/types/styles.d.ts +32 -0
  131. package/types/wasm.d.ts +11 -0
@@ -2,33 +2,6 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
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
5
  (function patchObsidianRequire() {
33
6
  const originalRequire = require;
34
7
  if (!originalRequire || originalRequire.__isPatched) {
@@ -105,11 +78,9 @@ ensureBrowserProcess();
105
78
  })();
106
79
 
107
80
  "use strict";
108
- var __create = Object.create;
109
81
  var __defProp = Object.defineProperty;
110
82
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
111
83
  var __getOwnPropNames = Object.getOwnPropertyNames;
112
- var __getProtoOf = Object.getPrototypeOf;
113
84
  var __hasOwnProp = Object.prototype.hasOwnProperty;
114
85
  var __export = (target, all) => {
115
86
  for (var name in all)
@@ -123,181 +94,25 @@ var __copyProps = (to, from, except, desc) => {
123
94
  }
124
95
  return to;
125
96
  };
126
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
127
- // If the importer is in node compatibility mode or this is not an ESM
128
- // file that has been converted to a CommonJS file using a Babel-
129
- // compatible transform (i.e. "__esModule" has not been set), then set
130
- // "default" to the CommonJS "module.exports" for node compatibility.
131
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
132
- mod
133
- ));
134
97
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
135
98
  var copy_to_obsidian_plugins_folder_plugin_exports = {};
136
99
  __export(copy_to_obsidian_plugins_folder_plugin_exports, {
137
100
  copyToObsidianPluginsFolderPlugin: () => copyToObsidianPluginsFolderPlugin
138
101
  });
139
102
  module.exports = __toCommonJS(copy_to_obsidian_plugins_folder_plugin_exports);
140
- var import_async = require('@mnaoumov/typescript-lib/async');
141
- var import_debug = require('@mnaoumov/typescript-lib/debug');
142
- var import_path = require('@mnaoumov/typescript-lib/path');
143
- var import_promises = require('node:fs/promises');
144
- var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
145
- var import_obsidian_integration_testing = require('obsidian-integration-testing');
146
- const moduleState = {
147
- devInstanceTransportPromise: void 0,
148
- isDevInstanceCleanupRegistered: false,
149
- isDevInstanceDisposed: false
150
- };
151
- const DEV_INSTANCE_PROBE_INTERVAL_IN_MILLISECONDS = 2e3;
152
- const DEV_INSTANCE_CLOSED_PROBE_COUNT = 3;
103
+ var import_obsidian_plugins_folder_deployment = require('../obsidian-plugins-folder-deployment.cjs');
153
104
  function copyToObsidianPluginsFolderPlugin(params) {
154
- const {
155
- distFolder,
156
- isProductionBuild,
157
- pluginName
158
- } = params;
159
- let {
160
- obsidianConfigFolder
161
- } = params;
162
105
  return {
163
106
  name: "copy-to-obsidian-plugins-folder",
164
107
  setup(build) {
165
108
  build.onEnd(async () => {
166
- if (isProductionBuild) {
167
- return;
168
- }
169
- if (!obsidianConfigFolder) {
170
- (0, import_debug.getLibDebugger)("copyToObsidianPluginsFolderPlugin")(
171
- "No Obsidian config folder configured. `OBSIDIAN_CONFIG_FOLDER` environment variable is not set in system or in `.env` file. The compiled plugin will not be copied into Obsidian plugins folder."
172
- );
173
- return;
174
- }
175
- obsidianConfigFolder = (0, import_path.toPosixPath)(obsidianConfigFolder);
176
- const pluginFolder = (0, import_path.join)(obsidianConfigFolder, "plugins", pluginName);
177
- await (0, import_promises.mkdir)(pluginFolder, { recursive: true });
178
- await (0, import_promises.cp)(distFolder, pluginFolder, { recursive: true });
179
- await installAndEnableHotReload({
180
- obsidianConfigFolder,
181
- pluginName
182
- });
109
+ await (0, import_obsidian_plugins_folder_deployment.deployToObsidianPluginsFolder)(params);
183
110
  });
184
111
  }
185
112
  };
186
113
  }
187
- async function getOrLaunchDevInstance(vaultPath) {
188
- moduleState.devInstanceTransportPromise ??= launchDevInstance(vaultPath);
189
- try {
190
- return await moduleState.devInstanceTransportPromise;
191
- } catch (error) {
192
- moduleState.devInstanceTransportPromise = void 0;
193
- throw error;
194
- }
195
- }
196
- async function installAndEnableHotReload(params) {
197
- const {
198
- obsidianConfigFolder,
199
- pluginName
200
- } = params;
201
- const vaultPath = (0, import_path.dirname)(obsidianConfigFolder);
202
- const transport = await getOrLaunchDevInstance(vaultPath);
203
- await (0, import_obsidian_integration_testing.evalInObsidian)({
204
- // eslint-disable-next-line no-shadow -- No actual shadowing as the function is executed externally.
205
- async callback({ app, obsidianModule, pluginName: pluginName2 }) {
206
- const HOT_RELOAD_PLUGIN_ID = "hot-reload";
207
- const COMMUNITY_PLUGINS_REGISTRY_URL = "https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugins.json";
208
- const { requestUrl } = obsidianModule;
209
- await app.plugins.setEnable(true);
210
- if (!Object.hasOwn(app.plugins.manifests, HOT_RELOAD_PLUGIN_ID)) {
211
- const registryResponse = await requestUrl(COMMUNITY_PLUGINS_REGISTRY_URL);
212
- const registryEntries = registryResponse.json;
213
- const entry = registryEntries.find((candidate) => candidate.id === HOT_RELOAD_PLUGIN_ID);
214
- if (!entry) {
215
- throw new Error(`Plugin '${HOT_RELOAD_PLUGIN_ID}' was not found in the Obsidian community plugins registry.`);
216
- }
217
- const latestReleaseResponse = await requestUrl(`https://api.github.com/repos/${entry.repo}/releases/latest`);
218
- const latestRelease = latestReleaseResponse.json;
219
- const version = latestRelease.tag_name;
220
- const manifestResponse = await requestUrl(`https://github.com/${entry.repo}/releases/download/${version}/manifest.json`);
221
- const manifest = manifestResponse.json;
222
- await app.plugins.installPlugin(entry.repo, version, manifest);
223
- }
224
- if (!Object.hasOwn(app.plugins.plugins, HOT_RELOAD_PLUGIN_ID)) {
225
- await app.plugins.enablePluginAndSave(HOT_RELOAD_PLUGIN_ID);
226
- }
227
- await app.plugins.enablePluginAndSave(pluginName2);
228
- },
229
- input: { pluginName },
230
- shouldSkipPreflightChecks: true,
231
- transport,
232
- vaultPath
233
- });
234
- }
235
- async function isDevInstanceRunning(cdpUrl) {
236
- try {
237
- const response = await fetch(`${cdpUrl}/json`);
238
- const targets = await response.json();
239
- return targets.some((target) => target.type === "page");
240
- } catch {
241
- return false;
242
- }
243
- }
244
- async function launchDevInstance(vaultPath) {
245
- const transport = await (0, import_obsidian_integration_testing.createTransportFromOptions)();
246
- try {
247
- await transport.registerVault(vaultPath);
248
- } catch (error) {
249
- transport.disposeSync?.();
250
- throw error;
251
- }
252
- registerDevInstanceCleanup(transport);
253
- watchDevInstanceAndStopOnClose(transport);
254
- return transport;
255
- }
256
- function registerDevInstanceCleanup(transport) {
257
- if (moduleState.isDevInstanceCleanupRegistered) {
258
- return;
259
- }
260
- moduleState.isDevInstanceCleanupRegistered = true;
261
- import_node_process.default.on("exit", disposeDevInstance);
262
- for (const signal of ["SIGHUP", "SIGINT", "SIGTERM"]) {
263
- import_node_process.default.once(signal, () => {
264
- disposeDevInstance();
265
- import_node_process.default.exit();
266
- });
267
- }
268
- function disposeDevInstance() {
269
- if (moduleState.isDevInstanceDisposed) {
270
- return;
271
- }
272
- moduleState.isDevInstanceDisposed = true;
273
- transport.disposeSync?.();
274
- }
275
- }
276
- function watchDevInstanceAndStopOnClose(transport) {
277
- if (!(transport instanceof import_obsidian_integration_testing.DesktopCdpTransport)) {
278
- return;
279
- }
280
- const endpoint = transport.getOwnedInstanceEndpoint();
281
- if (!endpoint) {
282
- return;
283
- }
284
- const cdpUrl = `http://${endpoint.host}:${String(endpoint.port)}`;
285
- (0, import_async.invokeAsyncSafely)(stopWhenDevInstanceCloses);
286
- async function stopWhenDevInstanceCloses() {
287
- let consecutiveFailedProbeCount = 0;
288
- while (consecutiveFailedProbeCount < DEV_INSTANCE_CLOSED_PROBE_COUNT) {
289
- await (0, import_async.sleep)({ milliseconds: DEV_INSTANCE_PROBE_INTERVAL_IN_MILLISECONDS });
290
- if (moduleState.isDevInstanceDisposed) {
291
- return;
292
- }
293
- consecutiveFailedProbeCount = await isDevInstanceRunning(cdpUrl) ? 0 : consecutiveFailedProbeCount + 1;
294
- }
295
- console.warn("The Obsidian instance owned by `npm run dev` was closed. Stopping the development build.");
296
- import_node_process.default.exit();
297
- }
298
- }
299
114
  // Annotate the CommonJS export names for ESM import in node:
300
115
  0 && (module.exports = {
301
116
  copyToObsidianPluginsFolderPlugin
302
117
  });
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCBhdXRvbWF0aWNhbGx5IGNvcGllcyB0aGUgYnVpbGQgb3V0cHV0XG4gKiB0byB0aGUgT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXIgZHVyaW5nIGRldmVsb3BtZW50LiBUaGlzIHBsdWdpbiBoZWxwcyBzdHJlYW1saW5lXG4gKiB0aGUgZGV2ZWxvcG1lbnQgd29ya2Zsb3cgYnkgZW5zdXJpbmcgdGhhdCB0aGUgbGF0ZXN0IGJ1aWxkIGlzIGFsd2F5cyBhdmFpbGFibGVcbiAqIGluIHRoZSBjb3JyZWN0IE9ic2lkaWFuIGZvbGRlciBmb3IgdGVzdGluZyBhbmQgdXNlLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBlc2J1aWxkIHBsdWdpbiB0aGF0IGNvcGllcyBidWlsZCBvdXRwdXQgdG8gT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXI7IHJlcXVpcmVzIGEgbGl2ZSBlc2J1aWxkIGNvbnRleHQuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk1hbmlmZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuXG5pbXBvcnQge1xuICBpbnZva2VBc3luY1NhZmVseSxcbiAgc2xlZXBcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIGpvaW4sXG4gIHRvUG9zaXhQYXRoXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7XG4gIGNwLFxuICBta2RpclxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQge1xuICBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyxcbiAgRGVza3RvcENkcFRyYW5zcG9ydCxcbiAgZXZhbEluT2JzaWRpYW5cbn0gZnJvbSAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvcHlUb09ic2lkaWFuUGx1Z2luc0ZvbGRlclBsdWdpbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hlcmUgdGhlIGJ1aWx0IGZpbGVzIGFyZSBsb2NhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdEZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBidWlsZCBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciBvZiB0aGUgT2JzaWRpYW4gY29uZmlndXJhdGlvbi4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcGx1Z2luIHdpbGwgbm90IGNvcHkgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkNvbmZpZ0ZvbGRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgT2JzaWRpYW4gcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzdWJzZXQgb2YgYSBDRFAgdGFyZ2V0IGRlc2NyaXB0b3IgcmVhZCBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzIGAvanNvbmAgZW5kcG9pbnQuXG4gKi9cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICAvKipcbiAgICogVGhlIGtpbmQgb2YgdGhlIHRhcmdldCwgZS5nLiBgcGFnZWAuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZW50cnkgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeSAoYGNvbW11bml0eS1wbHVnaW5zLmpzb25gKS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgb3duZXIvbmFtZWAgR2l0SHViIHJlcG9zaXRvcnkgdGhlIHBsdWdpbiBpcyBwdWJsaXNoZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkfS5cbiAqL1xuaW50ZXJmYWNlIEluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZvbGRlciBvZiB0aGUgT2JzaWRpYW4gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuQ29uZmlnRm9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBPYnNpZGlhbiBwbHVnaW4gdG8gZW5hYmxlIG9uY2UgSG90UmVsb2FkIGlzIGluIHBsYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vLyBUaGUgYG5wbSBydW4gZGV2YC1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZTogbGF1bmNoZWQgb24gdGhlIGZpcnN0IHJlYnVpbGQgYW5kIHJldXNlZCBhY3Jvc3MgcmVidWlsZHMuXG4vLyBJdHMgbGlmZXRpbWUgaXMgdGllZCB0byB0aGUgYG5wbSBydW4gZGV2YCBwcm9jZXNzIGluIEJPVEggZGlyZWN0aW9ucy5cbi8vIFRoZSBpbnN0YW5jZSBpcyBjbG9zZWQgd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzIChzZWUgYHJlZ2lzdGVyRGV2SW5zdGFuY2VDbGVhbnVwYCkuXG4vLyBUaGUgcHJvY2VzcyBzdG9wcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjbG9zZWQgKHNlZSBgd2F0Y2hEZXZJbnN0YW5jZUFuZFN0b3BPbkNsb3NlYCkuXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHwgdW5kZWZpbmVkO1xuICBpc0Rldkluc3RhbmNlQ2xlYW51cFJlZ2lzdGVyZWQ6IGJvb2xlYW47XG4gIGlzRGV2SW5zdGFuY2VEaXNwb3NlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgbW9kdWxlU3RhdGU6IE1vZHVsZVN0YXRlID0ge1xuICBkZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2U6IHVuZGVmaW5lZCxcbiAgaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkOiBmYWxzZSxcbiAgaXNEZXZJbnN0YW5jZURpc3Bvc2VkOiBmYWxzZVxufTtcblxuLyoqXG4gKiBIb3cgb2Z0ZW4gdGhlIG93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGlzIHByb2JlZCB0byBkZXRlY3QgdGhhdCBpdCB3YXMgY2xvc2VkLlxuICovXG5jb25zdCBERVZfSU5TVEFOQ0VfUFJPQkVfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcblxuLyoqXG4gKiBIb3cgbWFueSBjb25zZWN1dGl2ZSBmYWlsZWQgcHJvYmVzIGFyZSB0b2xlcmF0ZWQgYmVmb3JlIHRoZSBvd25lZCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGNsb3NlZC4gQVxuICogc2luZ2xlIGZhaWx1cmUgY2FuIGJlIGEgdHJhbnNpZW50IGhpY2N1cCAoYSBidXN5IHJlbmRlcmVyLCBhIG1vbWVudGFyaWx5IHJlZnVzZWQgY29ubmVjdGlvbiksIHNvIHRoZVxuICogZGV2ZWxvcG1lbnQgYnVpbGQgaXMgb25seSBzdG9wcGVkIG9uY2UgdGhlIGVuZHBvaW50IHN0YXlzIHVucmVhY2hhYmxlLlxuICovXG5jb25zdCBERVZfSU5TVEFOQ0VfQ0xPU0VEX1BST0JFX0NPVU5UID0gMztcbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGNvcGllcyB0aGUgYnVpbGQgb3V0cHV0IHRvIHRoZSBPYnNpZGlhbiBwbHVnaW5zIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luKHBhcmFtczogQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zKTogUGx1Z2luIHtcbiAgY29uc3Qge1xuICAgIGRpc3RGb2xkZXIsXG4gICAgaXNQcm9kdWN0aW9uQnVpbGQsXG4gICAgcGx1Z2luTmFtZVxuICB9ID0gcGFyYW1zO1xuICBsZXQge1xuICAgIG9ic2lkaWFuQ29uZmlnRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2NvcHktdG8tb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXInLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkVuZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpc1Byb2R1Y3Rpb25CdWlsZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb2JzaWRpYW5Db25maWdGb2xkZXIpIHtcbiAgICAgICAgICBnZXRMaWJEZWJ1Z2dlcignY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luJykoXG4gICAgICAgICAgICAnTm8gT2JzaWRpYW4gY29uZmlnIGZvbGRlciBjb25maWd1cmVkLiBgT0JTSURJQU5fQ09ORklHX0ZPTERFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBpbiBzeXN0ZW0gb3IgaW4gYC5lbnZgIGZpbGUuIFRoZSBjb21waWxlZCBwbHVnaW4gd2lsbCBub3QgYmUgY29waWVkIGludG8gT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzaWRpYW5Db25maWdGb2xkZXIgPSB0b1Bvc2l4UGF0aChvYnNpZGlhbkNvbmZpZ0ZvbGRlcik7XG5cbiAgICAgICAgY29uc3QgcGx1Z2luRm9sZGVyID0gam9pbihvYnNpZGlhbkNvbmZpZ0ZvbGRlciwgJ3BsdWdpbnMnLCBwbHVnaW5OYW1lKTtcbiAgICAgICAgYXdhaXQgbWtkaXIocGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgYXdhaXQgY3AoZGlzdEZvbGRlciwgcGx1Z2luRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkKHtcbiAgICAgICAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlcixcbiAgICAgICAgICBwbHVnaW5OYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGBucG0gcnVuIGRldmAtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiB2YXVsdCwgbGF1bmNoaW5nIGl0IG9uIGZpcnN0IHVzZSBhbmRcbiAqIHJldXNpbmcgaXQgb24gc3Vic2VxdWVudCByZWJ1aWxkcy5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBvd25lZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRPckxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBtb2R1bGVTdGF0ZS5kZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPz89IGxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IG1vZHVsZVN0YXRlLmRldkluc3RhbmNlVHJhbnNwb3J0UHJvbWlzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBDbGVhciB0aGUgY2FjaGUgc28gYSBsYXRlciByZWJ1aWxkIHJldHJpZXMgdGhlIGxhdW5jaC5cbiAgICBtb2R1bGVTdGF0ZS5kZXZJbnN0YW5jZVRyYW5zcG9ydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgSG90UmVsb2FkIHBsdWdpbiBmcm9tIHRoZSBvZmZpY2lhbCBjb21tdW5pdHkgc3RvcmUgKGlmIG5vdCBhbHJlYWR5IGluc3RhbGxlZCksIGxvYWRzIGl0XG4gKiAoaWYgbm90IGFscmVhZHkgcnVubmluZyksIGFuZCBlbmFibGVzIHRoZSBmcmVzaGx5LWJ1aWx0IHBsdWdpbiDigJQgYWxsIHRocm91Z2ggdGhlIGBucG0gcnVuIGRldmAtb3duZWRcbiAqIE9ic2lkaWFuIGluc3RhbmNlLCBzbyBIb3RSZWxvYWQgdGhlbiBhdXRvLXJlZnJlc2hlcyB0aGUgZGVwbG95ZWQgcGx1Z2luIG9uIGV2ZXJ5IHJlYnVpbGQuXG4gKlxuICogVGhlIGluc3RhbGwgZ29lcyB0aHJvdWdoIE9ic2lkaWFuJ3Mgb3duIGBpbnN0YWxsUGx1Z2luYCAodGhlIGNvbW11bml0eS1zdG9yZSBtZWNoYW5pc20pLCBhbmQgZXZlcnkgc3RlcFxuICogcnVucyBhZ2FpbnN0IHRoZSBvd25lZCBpbnN0YW5jZSBvdmVyIENEUDsgYW55IGZhaWx1cmUgc3VyZmFjZXMgKHRoZSBkZXYgYnVpbGQgcmVwb3J0cyBpdCkgcmF0aGVyIHRoYW5cbiAqIGJlaW5nIHNpbGVudGx5IHN3YWxsb3dlZC5cbiAqXG4gKiBUaGUgZmlyc3Qgc3RlcCBpcyBsZWF2aW5nIHJlc3RyaWN0ZWQgbW9kZSBmb3IgcmVhbCwgd2hpY2ggdGhlIG93bmVkIGluc3RhbmNlIGhhcyBvbmx5IGZha2VkIHNvIGZhciDigJRcbiAqIHdpdGhvdXQgaXQgXCJlbmFibGVkXCIgYW5kIFwibG9hZGVkXCIgY29tZSBhcGFydCBhbmQgbm9uZSBvZiB0aGUgdmF1bHQncyBwbHVnaW5zLCBIb3RSZWxvYWQgaW5jbHVkZWQsIGFyZVxuICogcnVubmluZy4gU2VlIHRoZSBjb21tZW50IG9uIHRoZSBgc2V0RW5hYmxlYCBjYWxsLlxuICpcbiAqIFRoZSBpbnN0YWxsLWlmLW1pc3NpbmcgLyBlbmFibGUtaWYtZGlzYWJsZWQgbG9naWMgYmVsb3cgaW50ZW50aW9uYWxseSBtaXJyb3JzIHRoZSBwdWJsaWNcbiAqIGBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luYCAvIGBlbmFibGVDb21tdW5pdHlQbHVnaW5gIGhlbHBlcnMgaW4gYHNyYy9vYnNpZGlhbi9jb21tdW5pdHktcGx1Z2lucy50c2AuIEl0XG4gKiBjYW5ub3QgaW1wb3J0IGFuZCBjYWxsIHRoZW06IHRoZSBgZm5gIGlzIHNlcmlhbGl6ZWQgKGB0b1N0cmluZygpYCkgYW5kIGV4ZWN1dGVkIGluIHRoZSByZW5kZXJlciwgYW5kXG4gKiB0aGlzIGJ1aWxkLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGlzIGJhcmUg4oCUIGl0IGhhcyBubyBkZXYtdXRpbHMgYGxpYmAgcHJvdmlkZXIgd2lyZWQgKHRoYXQgcmVzb2x2ZXIgaXNcbiAqIHJlZ2lzdGVyZWQgb25seSBpbiB0aGUgaW50ZWdyYXRpb24tdGVzdCBzZXR1cCwgd2hvc2UgZml4dHVyZSBwdWJsaXNoZXMgdGhlIG1lcmdlZCBzdXJmYWNlIG9uIGB3aW5kb3dgKSxcbiAqIHNvIHRoZSBjbG9zdXJlIGhhcyBubyBhY2Nlc3MgdG8gdGhlIGxpYnJhcnkgc3VyZmFjZSBhbmQgbXVzdCBpbmxpbmUgdGhlIGVxdWl2YWxlbnQgc3RlcHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbEFuZEVuYWJsZUhvdFJlbG9hZFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgSG90UmVsb2FkIGFuZCB0aGUgYnVpbHQgcGx1Z2luIGFyZSBpbnN0YWxsZWQgYW5kIGVuYWJsZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBbmRFbmFibGVIb3RSZWxvYWQocGFyYW1zOiBJbnN0YWxsQW5kRW5hYmxlSG90UmVsb2FkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBvYnNpZGlhbkNvbmZpZ0ZvbGRlcixcbiAgICBwbHVnaW5OYW1lXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhdWx0UGF0aCA9IGRpcm5hbWUob2JzaWRpYW5Db25maWdGb2xkZXIpO1xuICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBnZXRPckxhdW5jaERldkluc3RhbmNlKHZhdWx0UGF0aCk7XG4gIGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93IC0tIE5vIGFjdHVhbCBzaGFkb3dpbmcgYXMgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGV4dGVybmFsbHkuXG4gICAgYXN5bmMgY2FsbGJhY2soeyBhcHAsIG9ic2lkaWFuTW9kdWxlLCBwbHVnaW5OYW1lIH0pIHtcbiAgICAgIGNvbnN0IEhPVF9SRUxPQURfUExVR0lOX0lEID0gJ2hvdC1yZWxvYWQnO1xuICAgICAgY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL0hFQUQvY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG4gICAgICBjb25zdCB7IHJlcXVlc3RVcmwgfSA9IG9ic2lkaWFuTW9kdWxlO1xuXG4gICAgICAvKlxuICAgICAgICogR2VudWluZWx5IGxlYXZlIHJlc3RyaWN0ZWQgbW9kZSBiZWZvcmUgdG91Y2hpbmcgYW55dGhpbmcgZWxzZS4gVGhlIG93bmVkIGluc3RhbmNlIGJvb3RzIHdpdGggYVxuICAgICAgICogZnJlc2ggdXNlci1kYXRhIGRpciwgc28gT2JzaWRpYW4gc3RhcnRzIHJlc3RyaWN0ZWQgYW5kIGBQbHVnaW5zLmluaXRpYWxpemUoKWAgcmV0dXJucyBiZWZvcmVcbiAgICAgICAqIGxvYWRpbmcgYSBzaW5nbGUgcGx1Z2luLiBUaGUgaGFybmVzcyB0aGVuIGNsb3NlcyB0aGUgdHJ1c3QgbW9kYWwgYW5kIHdyaXRlcyB0aGVcbiAgICAgICAqIGBlbmFibGUtcGx1Z2luLTxhcHBJZD5gIGxvY2FsU3RvcmFnZSBmbGFnIGRpcmVjdGx5IOKAlCBkZWxpYmVyYXRlbHksIHRvIGF2b2lkIGEgc3luY2hyb25vdXMgbG9hZCDigJRcbiAgICAgICAqIHdoaWNoIGxlYXZlcyBgaXNFbmFibGVkKClgIHJlcG9ydGluZyBgdHJ1ZWAgb3ZlciBhIHZhdWx0IHdoZXJlIG5vdGhpbmcgaXMgYWN0dWFsbHkgcnVubmluZy4gRXZlcnlcbiAgICAgICAqIGBlbmFibGVkUGx1Z2luc2AgcmVhZGluZyBiZWxvdyAoYW5kIGluIHRoZSBtaXJyb3JlZCBgY29tbXVuaXR5LXBsdWdpbnMudHNgIGhlbHBlcnMpIHdvdWxkIGJlXG4gICAgICAgKiBhbnN3ZXJpbmcgYWJvdXQgdGhlIHZhdWx0J3MgY29uZmlnIGZpbGUgcmF0aGVyIHRoYW4gdGhpcyBpbnN0YW5jZS5cbiAgICAgICAqXG4gICAgICAgKiBgc2V0RW5hYmxlKHRydWUpYCBpcyB3aGF0IE9ic2lkaWFuJ3Mgb3duIFwiRXhpdCByZXN0cmljdGVkIG1vZGVcIiBidXR0b24gY2FsbHM6IGl0IHJlLWFzc2VydHMgdGhlXG4gICAgICAgKiBmbGFnIGFuZCBsb2FkcyBldmVyeXRoaW5nIGluIGBlbmFibGVkUGx1Z2luc2AuIFVuY29uZGl0aW9uYWwgb24gcHVycG9zZSDigJQgdGhlIGZsYWcgaXMgYWxyZWFkeVxuICAgICAgICogYHRydWVgLCBzbyBhbiBgaXNFbmFibGVkKClgIGd1YXJkIHdvdWxkIHNraXAgdGhlIGxvYWQgdGhhdCBpcyB0aGUgd2hvbGUgcG9pbnQuIElkZW1wb3RlbnQgYW5kXG4gICAgICAgKiBlZmZlY3RpdmVseSBmcmVlIG9uY2Ugd2FybSAoYGxvYWRQbHVnaW5gIHJldHVybnMgdGhlIGxpdmUgaW5zdGFuY2UpLCBzbyByZS1ydW5uaW5nIGl0IG9uIGV2ZXJ5XG4gICAgICAgKiByZWJ1aWxkIGNvc3RzIG5vdGhpbmcuXG4gICAgICAgKi9cbiAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcblxuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGFwcC5wbHVnaW5zLm1hbmlmZXN0cywgSE9UX1JFTE9BRF9QTFVHSU5fSUQpKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5UmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTCk7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5RW50cmllcyA9IHJlZ2lzdHJ5UmVzcG9uc2UuanNvbiBhcyBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W107XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVnaXN0cnlFbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBIT1RfUkVMT0FEX1BMVUdJTl9JRCk7XG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtIT1RfUkVMT0FEX1BMVUdJTl9JRH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGF0ZXN0UmVsZWFzZVJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke2VudHJ5LnJlcG99L3JlbGVhc2VzL2xhdGVzdGApO1xuICAgICAgICBjb25zdCBsYXRlc3RSZWxlYXNlID0gbGF0ZXN0UmVsZWFzZVJlc3BvbnNlLmpzb24gYXMgR2l0SHViUmVsZWFzZTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IGxhdGVzdFJlbGVhc2UudGFnX25hbWU7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0UmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtlbnRyeS5yZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBtYW5pZmVzdFJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG4gICAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW4oZW50cnkucmVwbywgdmVyc2lvbiwgbWFuaWZlc3QpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgICogQXNrIHdoZXRoZXIgSG90UmVsb2FkIGlzIFJVTk5JTkcsIG5vdCB3aGV0aGVyIHRoZSB2YXVsdCBjb25maWcgbGlzdHMgaXQgYXMgZW5hYmxlZC4gQWZ0ZXIgdGhlXG4gICAgICAgKiBgc2V0RW5hYmxlYCBhYm92ZSB0aGUgdHdvIG5vcm1hbGx5IGFncmVlLCBidXQgYSBIb3RSZWxvYWQgdGhhdCBpcyBsaXN0ZWQgYW5kIGZhaWxlZCB0byBsb2FkIHdvdWxkXG4gICAgICAgKiBwYXNzIGFuIGBlbmFibGVkUGx1Z2luc2AgY2hlY2sgd2hpbGUgbGVhdmluZyB0aGUgZGV2IGJ1aWxkIHdpdGhvdXQgYXV0by1yZWZyZXNoLlxuICAgICAgICovXG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMucGx1Z2lucywgSE9UX1JFTE9BRF9QTFVHSU5fSUQpKSB7XG4gICAgICAgIGF3YWl0IGFwcC5wbHVnaW5zLmVuYWJsZVBsdWdpbkFuZFNhdmUoSE9UX1JFTE9BRF9QTFVHSU5fSUQpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbk5hbWUpO1xuICAgIH0sXG4gICAgaW5wdXQ6IHsgcGx1Z2luTmFtZSB9LFxuICAgIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M6IHRydWUsXG4gICAgdHJhbnNwb3J0LFxuICAgIHZhdWx0UGF0aFxuICB9KTtcbn1cblxuLyoqXG4gKiBQcm9iZXMgdGhlIG93bmVkIE9ic2lkaWFuIGluc3RhbmNlJ3MgQ0RQIGVuZHBvaW50IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIHN0aWxsIHJ1bm5pbmcuXG4gKlxuICogQSBjbG9zZWQgaW5zdGFuY2Ugc3RvcHMgc2VydmluZyBDRFAgYWx0b2dldGhlciwgc28gYW4gdW5yZWFjaGFibGUgZW5kcG9pbnQg4oCUIG9yIG9uZSBsZWZ0IHdpdGggbm8gcGFnZVxuICogdGFyZ2V0cyB3aGlsZSB0aGUgYXBwIHRlYXJzIGl0c2VsZiBkb3duIOKAlCBtZWFucyB0aGUgaW5zdGFuY2UgaXMgZ29uZS5cbiAqXG4gKiBAcGFyYW0gY2RwVXJsIC0gVGhlIGJhc2UgQ0RQIFVSTCBvZiB0aGUgb3duZWQgaW5zdGFuY2UsIGUuZy4gYGh0dHA6Ly9sb2NhbGhvc3Q6NTE4ODhgLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIGB0cnVlYCB3aGlsZSB0aGUgaW5zdGFuY2UgaXMgc3RpbGwgc2VydmluZyBhIHBhZ2UgdGFyZ2V0LlxuICovXG5hc3luYyBmdW5jdGlvbiBpc0Rldkluc3RhbmNlUnVubmluZyhjZHBVcmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gV2UgcnVuIHRoaXMgb3V0c2lkZSBvZiBPYnNpZGlhbiwgc28gd2UgZG9uJ3QgaGF2ZSBgcmVxdWVzdFVybCgpYC5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2NkcFVybH0vanNvbmApO1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2RwVGFyZ2V0W107XG4gICAgcmV0dXJuIHRhcmdldHMuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQudHlwZSA9PT0gJ3BhZ2UnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYSBmcmVzaCBvd25lZCBPYnNpZGlhbiBpbnN0YW5jZSAoaXNvbGF0ZWQgdXNlci1kYXRhIGRpcikgYW5kIG9wZW5zIHRoZSBnaXZlbiB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlciB0byBvcGVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXVuY2hlZCB7QGxpbmsgT2JzaWRpYW5UcmFuc3BvcnR9LlxuICovXG5hc3luYyBmdW5jdGlvbiBsYXVuY2hEZXZJbnN0YW5jZSh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8T2JzaWRpYW5UcmFuc3BvcnQ+IHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRyYW5zcG9ydC5kaXNwb3NlU3luYz8uKCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgcmVnaXN0ZXJEZXZJbnN0YW5jZUNsZWFudXAodHJhbnNwb3J0KTtcbiAgd2F0Y2hEZXZJbnN0YW5jZUFuZFN0b3BPbkNsb3NlKHRyYW5zcG9ydCk7XG4gIHJldHVybiB0cmFuc3BvcnQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHByb2Nlc3MtZXhpdCBhbmQgc2lnbmFsIGhhbmRsZXJzIChvbmNlKSB0aGF0IHN5bmNocm9ub3VzbHkgY2xvc2UgdGhlIG93bmVkIE9ic2lkaWFuXG4gKiBpbnN0YW5jZSB3aGVuIHRoZSBgbnBtIHJ1biBkZXZgIHByb2Nlc3MgdGVybWluYXRlcy5cbiAqXG4gKiBUaGVzZSBoYW5kbGVycyBjb3ZlciBhbiBvcmRlcmx5IHNodXRkb3duLiBBIGBTSUdLSUxMYCAob3IgYSBUYXNrIE1hbmFnZXIgLyBJREUgc3RvcCkgcnVucyBubyBoYW5kbGVyXG4gKiBhdCBhbGwsIGFuZCBubyBvcGVyYXRpbmcgc3lzdGVtIGtpbGxzIHRoZSBpbnN0YW5jZSBqdXN0IGZvciBiZWluZyBvdXIgY2hpbGQg4oCUIHNvIHRoYXQgY2FzZSBpcyBjYXVnaHRcbiAqIGZyb20gdGhlIG90aGVyIHNpZGUsIGJ5IHRoZSBoYXJuZXNzJ3MgcGFyZW50LWxpdmVuZXNzIHdhdGNoZG9nOiB0aGUgaW5zdGFuY2UncyByZW5kZXJlciBob2xkcyBhIHNvY2tldFxuICogYmFjayB0byB0aGlzIHByb2Nlc3MgYW5kIGRlc3Ryb3lzIGl0cyB3aW5kb3cgd2hlbiB0aGUga2VybmVsIGNsb3NlcyBpdC4gU2VlIGBwYXJlbnQtbGl2ZW5lc3MudHNgIGluXG4gKiBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AuXG4gKlxuICogQHBhcmFtIHRyYW5zcG9ydCAtIFRoZSBvd25lZCB0cmFuc3BvcnQgdG8gZGlzcG9zZSBvbiBzaHV0ZG93bi5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJEZXZJbnN0YW5jZUNsZWFudXAodHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCk6IHZvaWQge1xuICBpZiAobW9kdWxlU3RhdGUuaXNEZXZJbnN0YW5jZUNsZWFudXBSZWdpc3RlcmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG1vZHVsZVN0YXRlLmlzRGV2SW5zdGFuY2VDbGVhbnVwUmVnaXN0ZXJlZCA9IHRydWU7XG5cbiAgLy8gYGV4aXRgIGNvdmVycyBhbnkgYHByb2Nlc3MuZXhpdCgpYCwgYnV0IGEgZGVmYXVsdCBDdHJsK0MgdGVybWluYXRlcyBXSVRIT1VUIGZpcmluZyBgZXhpdGAsIHNvIHRoZSBzaWduYWwgaGFuZGxlcnMgZ3VhcmFudGVlIHRoZSBvd25lZCBPYnNpZGlhbiBpcyBraWxsZWQgb24gc2h1dGRvd24uXG4gIHByb2Nlc3Mub24oJ2V4aXQnLCBkaXNwb3NlRGV2SW5zdGFuY2UpO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0hVUCcsICdTSUdJTlQnLCAnU0lHVEVSTSddIGFzIGNvbnN0KSB7XG4gICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgZGlzcG9zZURldkluc3RhbmNlKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2VEZXZJbnN0YW5jZSgpOiB2b2lkIHtcbiAgICBpZiAobW9kdWxlU3RhdGUuaXNEZXZJbnN0YW5jZURpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1vZHVsZVN0YXRlLmlzRGV2SW5zdGFuY2VEaXNwb3NlZCA9IHRydWU7XG4gICAgdHJhbnNwb3J0LmRpc3Bvc2VTeW5jPy4oKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhdGNoZXMgdGhlIGBucG0gcnVuIGRldmAtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHN0b3BzIHRoZSBkZXZlbG9wbWVudCBidWlsZCBvbmNlIHRoZSBpbnN0YW5jZSBpc1xuICogY2xvc2VkLlxuICpcbiAqIFRoaXMgaXMgdGhlIG1pcnJvciBpbWFnZSBvZiB7QGxpbmsgcmVnaXN0ZXJEZXZJbnN0YW5jZUNsZWFudXB9OiB0aGF0IG9uZSBjbG9zZXMgdGhlIGluc3RhbmNlIHdoZW4gdGhlXG4gKiBgbnBtIHJ1biBkZXZgIHByb2Nlc3MgdGVybWluYXRlcywgdGhpcyBvbmUgdGVybWluYXRlcyB0aGUgcHJvY2VzcyB3aGVuIHRoZSB1c2VyIGNsb3NlcyB0aGUgaW5zdGFuY2UsIHNvXG4gKiB0aGUgdHdvIG5ldmVyIG91dGxpdmUgZWFjaCBvdGhlci4gQSBidWlsZCB3YXRjaGluZyBhbiBPYnNpZGlhbiB0aGF0IGlzIG5vIGxvbmdlciBydW5uaW5nIGhhcyBub3RoaW5nXG4gKiBsZWZ0IHRvIGRlcGxveSB0by5cbiAqXG4gKiBPbmx5IGEgaGFybmVzcy1vd25lZCBpbnN0YW5jZSBpcyB3YXRjaGVkLiBXaGVuIHRoZSB0cmFuc3BvcnQgYXR0YWNoZXMgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuXG4gKiAodGhlIHVzZXIncyBvd24pLCB0aGF0IGluc3RhbmNlIGlzIG5vdCBvdXJzIHRvIGJlIHRpZWQgdG8gYW5kIGNsb3NpbmcgaXQgbGVhdmVzIHRoZSBidWlsZCBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBUaGUgb3duZWQgdHJhbnNwb3J0IHdob3NlIGluc3RhbmNlIHRvIHdhdGNoLlxuICovXG5mdW5jdGlvbiB3YXRjaERldkluc3RhbmNlQW5kU3RvcE9uQ2xvc2UodHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCk6IHZvaWQge1xuICBpZiAoISh0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVuZHBvaW50ID0gdHJhbnNwb3J0LmdldE93bmVkSW5zdGFuY2VFbmRwb2ludCgpO1xuICBpZiAoIWVuZHBvaW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2RwVXJsID0gYGh0dHA6Ly8ke2VuZHBvaW50Lmhvc3R9OiR7U3RyaW5nKGVuZHBvaW50LnBvcnQpfWA7XG4gIGludm9rZUFzeW5jU2FmZWx5KHN0b3BXaGVuRGV2SW5zdGFuY2VDbG9zZXMpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3BXaGVuRGV2SW5zdGFuY2VDbG9zZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGNvbnNlY3V0aXZlRmFpbGVkUHJvYmVDb3VudCA9IDA7XG4gICAgd2hpbGUgKGNvbnNlY3V0aXZlRmFpbGVkUHJvYmVDb3VudCA8IERFVl9JTlNUQU5DRV9DTE9TRURfUFJPQkVfQ09VTlQpIHtcbiAgICAgIGF3YWl0IHNsZWVwKHsgbWlsbGlzZWNvbmRzOiBERVZfSU5TVEFOQ0VfUFJPQkVfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTIH0pO1xuXG4gICAgICAvLyBUaGUgcHJvY2VzcyBpcyBhbHJlYWR5IHNodXR0aW5nIGRvd24gYW5kIGtpbGxlZCB0aGUgaW5zdGFuY2UgaXRzZWxmOyB0aGUgcHJvYmVzIHdvdWxkIGp1c3QgcmFjZSB0aGUgdGVhcmRvd24uXG4gICAgICBpZiAobW9kdWxlU3RhdGUuaXNEZXZJbnN0YW5jZURpc3Bvc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc2VjdXRpdmVGYWlsZWRQcm9iZUNvdW50ID0gYXdhaXQgaXNEZXZJbnN0YW5jZVJ1bm5pbmcoY2RwVXJsKSA/IDAgOiBjb25zZWN1dGl2ZUZhaWxlZFByb2JlQ291bnQgKyAxO1xuICAgIH1cblxuICAgIGNvbnNvbGUud2FybignVGhlIE9ic2lkaWFuIGluc3RhbmNlIG93bmVkIGJ5IGBucG0gcnVuIGRldmAgd2FzIGNsb3NlZC4gU3RvcHBpbmcgdGhlIGRldmVsb3BtZW50IGJ1aWxkLicpO1xuICAgIHByb2Nlc3MuZXhpdCgpO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLG1CQUdPO0FBQ1AsbUJBQStCO0FBQy9CLGtCQUlPO0FBQ1Asc0JBR087QUFDUCwwQkFBb0I7QUFDcEIsMENBSU87QUEwRlAsTUFBTSxjQUEyQjtBQUFBLEVBQy9CLDZCQUE2QjtBQUFBLEVBQzdCLGdDQUFnQztBQUFBLEVBQ2hDLHVCQUF1QjtBQUN6QjtBQUtBLE1BQU0sOENBQThDO0FBT3BELE1BQU0sa0NBQWtDO0FBT2pDLFNBQVMsa0NBQWtDLFFBQXlEO0FBQ3pHLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJO0FBQUEsSUFDRjtBQUFBLEVBQ0YsSUFBSTtBQUNKLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sT0FBYTtBQUNqQixZQUFNLE1BQU0sWUFBWTtBQUN0QixZQUFJLG1CQUFtQjtBQUNyQjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLENBQUMsc0JBQXNCO0FBQ3pCLDJDQUFlLG1DQUFtQztBQUFBLFlBQ2hEO0FBQUEsVUFDRjtBQUNBO0FBQUEsUUFDRjtBQUVB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
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gZXNidWlsZCBwbHVnaW4gdGhhdCBhdXRvbWF0aWNhbGx5IGNvcGllcyB0aGUgYnVpbGQgb3V0cHV0XG4gKiB0byB0aGUgT2JzaWRpYW4gcGx1Z2lucyBmb2xkZXIgZHVyaW5nIGRldmVsb3BtZW50LiBUaGlzIHBsdWdpbiBoZWxwcyBzdHJlYW1saW5lXG4gKiB0aGUgZGV2ZWxvcG1lbnQgd29ya2Zsb3cgYnkgZW5zdXJpbmcgdGhhdCB0aGUgbGF0ZXN0IGJ1aWxkIGlzIGFsd2F5cyBhdmFpbGFibGVcbiAqIGluIHRoZSBjb3JyZWN0IE9ic2lkaWFuIGZvbGRlciBmb3IgdGVzdGluZyBhbmQgdXNlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5cbmltcG9ydCB0eXBlIHsgRGVwbG95VG9PYnNpZGlhblBsdWdpbnNGb2xkZXJQYXJhbXMgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1kZXBsb3ltZW50LnRzJztcblxuaW1wb3J0IHsgZGVwbG95VG9PYnNpZGlhblBsdWdpbnNGb2xkZXIgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW5zLWZvbGRlci1kZXBsb3ltZW50LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2lufS5cbiAqL1xuZXhwb3J0IHR5cGUgQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zID0gRGVwbG95VG9PYnNpZGlhblBsdWdpbnNGb2xkZXJQYXJhbXM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IGNvcGllcyB0aGUgYnVpbGQgb3V0cHV0IHRvIHRoZSBPYnNpZGlhbiBwbHVnaW5zIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEFuIGVzYnVpbGQgYFBsdWdpbmAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luKHBhcmFtczogQ29weVRvT2JzaWRpYW5QbHVnaW5zRm9sZGVyUGx1Z2luUGFyYW1zKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnY29weS10by1vYnNpZGlhbi1wbHVnaW5zLWZvbGRlcicsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLm9uRW5kKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGVwbG95VG9PYnNpZGlhblBsdWdpbnNGb2xkZXIocGFyYW1zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhQSxnREFBOEM7QUFhdkMsU0FBUyxrQ0FBa0MsUUFBeUQ7QUFDekcsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxPQUFhO0FBQ2pCLFlBQU0sTUFBTSxZQUFZO0FBQ3RCLGtCQUFNLHlFQUE4QixNQUFNO0FBQUEsTUFDNUMsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
@@ -8,27 +8,11 @@
8
8
  * in the correct Obsidian folder for testing and use.
9
9
  */
10
10
  import type { Plugin } from 'esbuild' with { 'resolution-mode': 'import' };
11
+ import type { DeployToObsidianPluginsFolderParams } from '../obsidian-plugins-folder-deployment.cjs';
11
12
  /**
12
13
  * Parameters for {@link copyToObsidianPluginsFolderPlugin}.
13
14
  */
14
- export interface CopyToObsidianPluginsFolderPluginParams {
15
- /**
16
- * The folder where the built files are located.
17
- */
18
- readonly distFolder: string;
19
- /**
20
- * A boolean indicating whether the build is a production build.
21
- */
22
- readonly isProductionBuild: boolean;
23
- /**
24
- * The folder of the Obsidian configuration. If not provided, the plugin will not copy files.
25
- */
26
- readonly obsidianConfigFolder: string;
27
- /**
28
- * The name of the Obsidian plugin.
29
- */
30
- readonly pluginName: string;
31
- }
15
+ export type CopyToObsidianPluginsFolderPluginParams = DeployToObsidianPluginsFolderParams;
32
16
  /**
33
17
  * Creates an esbuild plugin that copies the build output to the Obsidian plugins folder.
34
18
  *
@@ -0,0 +1,173 @@
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 patchObsidianRequire() {
6
+ const originalRequire = require;
7
+ if (!originalRequire || originalRequire.__isPatched) {
8
+ return;
9
+ }
10
+
11
+ require = Object.assign(
12
+ (id) => requirePatched(id),
13
+ originalRequire,
14
+ {
15
+ __isPatched: true
16
+ }
17
+ );
18
+
19
+ function extractDefault(module) {
20
+ return module && module.__esModule && 'default' in module ? module.default : module;
21
+ }
22
+
23
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
24
+ '@codemirror/autocomplete',
25
+ '@codemirror/collab',
26
+ '@codemirror/commands',
27
+ '@codemirror/language',
28
+ '@codemirror/lint',
29
+ '@codemirror/search',
30
+ '@codemirror/state',
31
+ '@codemirror/text',
32
+ '@codemirror/view',
33
+ '@lezer/common',
34
+ '@lezer/highlight',
35
+ '@lezer/lr',
36
+ 'obsidian']
37
+ );
38
+
39
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
40
+ '@codemirror/closebrackets',
41
+ '@codemirror/comment',
42
+ '@codemirror/fold',
43
+ '@codemirror/gutter',
44
+ '@codemirror/highlight',
45
+ '@codemirror/history',
46
+ '@codemirror/matchbrackets',
47
+ '@codemirror/panel',
48
+ '@codemirror/rangeset',
49
+ '@codemirror/rectangular-selection',
50
+ '@codemirror/stream-parser',
51
+ '@codemirror/tooltip']
52
+ );
53
+
54
+ function requirePatched(id) {
55
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
56
+ return originalRequire?.(id);
57
+ }
58
+
59
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
60
+ if (globalThis.app.isMobile) {
61
+ if (id === 'process' || id === 'node:process') {
62
+ // eslint-disable-next-line no-console -- Valid usage.
63
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
64
+
65
+ return process;
66
+ }
67
+ } else {
68
+ const module = originalRequire?.(id);
69
+ if (module) {
70
+ return extractDefault(module);
71
+ }
72
+ }
73
+
74
+ // eslint-disable-next-line no-console -- Valid usage.
75
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
76
+ return {};
77
+ }
78
+ })();
79
+
80
+ "use strict";
81
+ var __defProp = Object.defineProperty;
82
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
83
+ var __getOwnPropNames = Object.getOwnPropertyNames;
84
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
85
+ var __export = (target, all) => {
86
+ for (var name in all)
87
+ __defProp(target, name, { get: all[name], enumerable: true });
88
+ };
89
+ var __copyProps = (to, from, except, desc) => {
90
+ if (from && typeof from === "object" || typeof from === "function") {
91
+ for (let key of __getOwnPropNames(from))
92
+ if (!__hasOwnProp.call(to, key) && key !== except)
93
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
94
+ }
95
+ return to;
96
+ };
97
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
98
+ var feature_options_exports = {};
99
+ __export(feature_options_exports, {
100
+ getEsbuildFeatureBuildOptions: () => getEsbuildFeatureBuildOptions,
101
+ getEsbuildFeaturePlugins: () => getEsbuildFeaturePlugins,
102
+ getSassPluginOptionsList: () => getSassPluginOptionsList
103
+ });
104
+ module.exports = __toCommonJS(feature_options_exports);
105
+ var import_promises = require('node:fs/promises');
106
+ var import_obsidian_plugin_features = require('../obsidian-plugin-features.cjs');
107
+ var import_obsidian_plugin_transforms = require('../obsidian-plugin-transforms.cjs');
108
+ const CSS_MODULE_FILTER = /\.module\.(?:css|s[ac]ss)$/i;
109
+ const SOLID_FILTER = /\.[jt]sx$/i;
110
+ function getEsbuildFeatureBuildOptions(params) {
111
+ const { features, isProductionBuild } = params;
112
+ const defines = (0, import_obsidian_plugin_features.getFrameworkDefines)({ framework: features.framework, isProductionBuild });
113
+ const jsxImportSource = (0, import_obsidian_plugin_features.getJsxImportSource)(features.framework);
114
+ return {
115
+ ...Object.keys(defines).length > 0 && { define: defines },
116
+ ...jsxImportSource !== void 0 && { jsx: "automatic", jsxImportSource },
117
+ ...features.wasm && { loader: { ".wasm": "binary" } }
118
+ };
119
+ }
120
+ async function getEsbuildFeaturePlugins(params) {
121
+ const { features, isProductionBuild } = params;
122
+ switch (features.framework) {
123
+ case "solid": {
124
+ return [solidEsbuildPlugin(isProductionBuild)];
125
+ }
126
+ case "vue": {
127
+ const unpluginVue = await (0, import_obsidian_plugin_features.importOptionalPeer)({
128
+ feature: "framework: 'vue'",
129
+ packageName: "unplugin-vue",
130
+ specifier: "unplugin-vue/esbuild"
131
+ });
132
+ return [unpluginVue.default({ isProduction: isProductionBuild })];
133
+ }
134
+ default: {
135
+ return [];
136
+ }
137
+ }
138
+ }
139
+ function getSassPluginOptionsList(params) {
140
+ const { features, isProductionBuild } = params;
141
+ const styles = features.styles ?? {};
142
+ const baseOptions = {
143
+ sourceMap: !isProductionBuild,
144
+ ...(0, import_obsidian_plugin_features.isPostcssNeeded)(styles) && {
145
+ async transform(css, _resolveDirectory, filePath) {
146
+ const result = await (0, import_obsidian_plugin_transforms.transformCss)({ filePath, isCssModuleScoped: false, isProductionBuild, source: css, styles });
147
+ return result.css;
148
+ }
149
+ }
150
+ };
151
+ return styles.cssModules ? [{ ...baseOptions, filter: CSS_MODULE_FILTER, type: "local-css" }, baseOptions] : [baseOptions];
152
+ }
153
+ function solidEsbuildPlugin(isProductionBuild) {
154
+ return {
155
+ name: "obsidian-plugin-solid",
156
+ setup(build) {
157
+ build.onLoad({ filter: SOLID_FILTER }, async ({ path }) => {
158
+ const code = await (0, import_promises.readFile)(path, "utf-8");
159
+ return {
160
+ contents: (0, import_obsidian_plugin_transforms.appendInlineSourceMap)(await (0, import_obsidian_plugin_transforms.transformSolid)({ code, filePath: path, isProductionBuild })),
161
+ loader: "js"
162
+ };
163
+ });
164
+ }
165
+ };
166
+ }
167
+ // Annotate the CommonJS export names for ESM import in node:
168
+ 0 && (module.exports = {
169
+ getEsbuildFeatureBuildOptions,
170
+ getEsbuildFeaturePlugins,
171
+ getSassPluginOptionsList
172
+ });
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvZmVhdHVyZS1vcHRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXaGF0IHRoZSB7QGxpbmsgT2JzaWRpYW5QbHVnaW5GZWF0dXJlT3B0aW9uc30gYWRkIHRvIHRoZSBlc2J1aWxkIGJ1aWxkOiB0aGUgSlNYIHJ1bnRpbWUsIHRoZSBmcmFtZXdvcmsnc1xuICogY29tcGlsZS10aW1lIGNvbnN0YW50cywgdGhlIGAud2FzbWAgbG9hZGVyLCB0aGUgU29saWQgYW5kIFZ1ZSBwbHVnaW5zLCBhbmQgdGhlIHN0eWxlc2hlZXQgb3B0aW9ucyBvZiB0aGUgU2FzcyBwbHVnaW5cbiAqIHRoYXQgbG9hZHMgZXZlcnkgc3R5bGVzaGVldC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEJ1aWxkT3B0aW9ucyxcbiAgUGx1Z2luXG59IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBTYXNzUGx1Z2luT3B0aW9ucyB9IGZyb20gJ2VzYnVpbGQtc2Fzcy1wbHVnaW4nO1xuXG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnMgfSBmcm9tICcuLi9vYnNpZGlhbi1wbHVnaW4tZmVhdHVyZXMudHMnO1xuXG5pbXBvcnQge1xuICBnZXRGcmFtZXdvcmtEZWZpbmVzLFxuICBnZXRKc3hJbXBvcnRTb3VyY2UsXG4gIGltcG9ydE9wdGlvbmFsUGVlcixcbiAgaXNQb3N0Y3NzTmVlZGVkXG59IGZyb20gJy4uL29ic2lkaWFuLXBsdWdpbi1mZWF0dXJlcy50cyc7XG5pbXBvcnQge1xuICBhcHBlbmRJbmxpbmVTb3VyY2VNYXAsXG4gIHRyYW5zZm9ybUNzcyxcbiAgdHJhbnNmb3JtU29saWRcbn0gZnJvbSAnLi4vb2JzaWRpYW4tcGx1Z2luLXRyYW5zZm9ybXMudHMnO1xuXG4vKipcbiAqIFRoZSBlc2J1aWxkIG9wdGlvbnMgb2Yge0BsaW5rIGdldEVzYnVpbGRGZWF0dXJlQnVpbGRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IHR5cGUgRXNidWlsZEZlYXR1cmVCdWlsZE9wdGlvbnMgPSBQaWNrPEJ1aWxkT3B0aW9ucywgJ2RlZmluZScgfCAnanN4JyB8ICdqc3hJbXBvcnRTb3VyY2UnIHwgJ2xvYWRlcic+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRFc2J1aWxkRmVhdHVyZUJ1aWxkT3B0aW9uc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RXNidWlsZEZlYXR1cmVCdWlsZE9wdGlvbnNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGJ1aWxkIGZlYXR1cmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZXM6IE9ic2lkaWFuUGx1Z2luRmVhdHVyZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBpc1Byb2R1Y3Rpb25CdWlsZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0RXNidWlsZEZlYXR1cmVQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0RXNidWlsZEZlYXR1cmVQbHVnaW5zUGFyYW1zID0gR2V0RXNidWlsZEZlYXR1cmVCdWlsZE9wdGlvbnNQYXJhbXM7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFNhc3NQbHVnaW5PcHRpb25zTGlzdH0uXG4gKi9cbmV4cG9ydCB0eXBlIEdldFNhc3NQbHVnaW5PcHRpb25zTGlzdFBhcmFtcyA9IEdldEVzYnVpbGRGZWF0dXJlQnVpbGRPcHRpb25zUGFyYW1zO1xuXG5pbnRlcmZhY2UgVW5wbHVnaW5WdWVFc2J1aWxkTW9kdWxlIHtcbiAgcmVhZG9ubHkgZGVmYXVsdDogKG9wdGlvbnM/OiBvYmplY3QpID0+IFBsdWdpbjtcbn1cblxuLy8gRXNidWlsZCdzIGZpbHRlcnMgYXJlIEdvIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHdoaWNoIHRha2Ugbm8gYHVgIGZsYWcuXG5jb25zdCBDU1NfTU9EVUxFX0ZJTFRFUiA9IC9cXC5tb2R1bGVcXC4oPzpjc3N8c1thY11zcykkL2k7XG5jb25zdCBTT0xJRF9GSUxURVIgPSAvXFwuW2p0XXN4JC9pO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZXNidWlsZCBvcHRpb25zIHRoZSBmZWF0dXJlcyBzZXQ6IHRoZSBhdXRvbWF0aWMgSlNYIHJ1bnRpbWUgZm9yIFJlYWN0IGFuZCBQcmVhY3QsIHRoZSBmcmFtZXdvcmsnc1xuICogY29tcGlsZS10aW1lIGNvbnN0YW50cywgYW5kIHRoZSBgYmluYXJ5YCBsb2FkZXIgZm9yIGAud2FzbWAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgR2V0RXNidWlsZEZlYXR1cmVCdWlsZE9wdGlvbnNQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIG9wdGlvbnMsIHRvIG1lcmdlIHVuZGVyIHRoZSBjb25zdW1lcidzIG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVzYnVpbGRGZWF0dXJlQnVpbGRPcHRpb25zKHBhcmFtczogR2V0RXNidWlsZEZlYXR1cmVCdWlsZE9wdGlvbnNQYXJhbXMpOiBFc2J1aWxkRmVhdHVyZUJ1aWxkT3B0aW9ucyB7XG4gIGNvbnN0IHsgZmVhdHVyZXMsIGlzUHJvZHVjdGlvbkJ1aWxkIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGRlZmluZXMgPSBnZXRGcmFtZXdvcmtEZWZpbmVzKHsgZnJhbWV3b3JrOiBmZWF0dXJlcy5mcmFtZXdvcmssIGlzUHJvZHVjdGlvbkJ1aWxkIH0pO1xuICBjb25zdCBqc3hJbXBvcnRTb3VyY2UgPSBnZXRKc3hJbXBvcnRTb3VyY2UoZmVhdHVyZXMuZnJhbWV3b3JrKTtcbiAgcmV0dXJuIHtcbiAgICAuLi4oT2JqZWN0LmtleXMoZGVmaW5lcykubGVuZ3RoID4gMCAmJiB7IGRlZmluZTogZGVmaW5lcyB9KSxcbiAgICAuLi4oanN4SW1wb3J0U291cmNlICE9PSB1bmRlZmluZWQgJiYgeyBqc3g6ICdhdXRvbWF0aWMnLCBqc3hJbXBvcnRTb3VyY2UgfSksXG4gICAgLi4uKGZlYXR1cmVzLndhc20gJiYgeyBsb2FkZXI6IHsgJy53YXNtJzogJ2JpbmFyeScgfSB9KVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGVzYnVpbGQgcGx1Z2lucyB0aGUgZnJhbWV3b3JrIG5lZWRzOiBgdW5wbHVnaW4tdnVlYCBmb3IgVnVlLCBhbmQgdGhlIHNoYXJlZCBTb2xpZCB0cmFuc2Zvcm0gZm9yIFNvbGlkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEdldEVzYnVpbGRGZWF0dXJlUGx1Z2luc1BhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBwbHVnaW5zLCBlbXB0eSB3aGVuIHRoZSBmcmFtZXdvcmsgbmVlZHMgbm9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEVzYnVpbGRGZWF0dXJlUGx1Z2lucyhwYXJhbXM6IEdldEVzYnVpbGRGZWF0dXJlUGx1Z2luc1BhcmFtcyk6IFByb21pc2U8UGx1Z2luW10+IHtcbiAgY29uc3QgeyBmZWF0dXJlcywgaXNQcm9kdWN0aW9uQnVpbGQgfSA9IHBhcmFtcztcbiAgc3dpdGNoIChmZWF0dXJlcy5mcmFtZXdvcmspIHtcbiAgICBjYXNlICdzb2xpZCc6IHtcbiAgICAgIHJldHVybiBbc29saWRFc2J1aWxkUGx1Z2luKGlzUHJvZHVjdGlvbkJ1aWxkKV07XG4gICAgfVxuICAgIGNhc2UgJ3Z1ZSc6IHtcbiAgICAgIGNvbnN0IHVucGx1Z2luVnVlID0gYXdhaXQgaW1wb3J0T3B0aW9uYWxQZWVyPFVucGx1Z2luVnVlRXNidWlsZE1vZHVsZT4oe1xuICAgICAgICBmZWF0dXJlOiAnZnJhbWV3b3JrOiBcXCd2dWVcXCcnLFxuICAgICAgICBwYWNrYWdlTmFtZTogJ3VucGx1Z2luLXZ1ZScsXG4gICAgICAgIHNwZWNpZmllcjogJ3VucGx1Z2luLXZ1ZS9lc2J1aWxkJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gW3VucGx1Z2luVnVlLmRlZmF1bHQoeyBpc1Byb2R1Y3Rpb246IGlzUHJvZHVjdGlvbkJ1aWxkIH0pXTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgb3B0aW9uIHNldHMgb2YgdGhlIFNhc3MgcGx1Z2luIHRoYXQgbG9hZHMgZXZlcnkgc3R5bGVzaGVldDogb25lIGZvciBvcmRpbmFyeSBzdHlsZXNoZWV0cywgYW5kIHdpdGggQ1NTXG4gKiBtb2R1bGVzIG9uLCBvbmUgYmVmb3JlIGl0IHRoYXQgbG9hZHMgYCoubW9kdWxlLmNzc2Agd2l0aCBlc2J1aWxkJ3Mgb3duIGBsb2NhbC1jc3NgIGxvYWRlci4gRWFjaCBydW5zIHRoZSBzdHlsZXNoZWV0XG4gKiB0aHJvdWdoIFBvc3RDU1MgYW5kIFRhaWx3aW5kIHdoZW4gdGhlIG9wdGlvbnMgYXNrIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBHZXRTYXNzUGx1Z2luT3B0aW9uc0xpc3RQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIG9wdGlvbiBzZXRzLCBpbiB0aGUgb3JkZXIgdGhlaXIgcGx1Z2lucyBtdXN0IGJlIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYXNzUGx1Z2luT3B0aW9uc0xpc3QocGFyYW1zOiBHZXRTYXNzUGx1Z2luT3B0aW9uc0xpc3RQYXJhbXMpOiBTYXNzUGx1Z2luT3B0aW9uc1tdIHtcbiAgY29uc3QgeyBmZWF0dXJlcywgaXNQcm9kdWN0aW9uQnVpbGQgfSA9IHBhcmFtcztcbiAgY29uc3Qgc3R5bGVzID0gZmVhdHVyZXMuc3R5bGVzID8/IHt9O1xuICBjb25zdCBiYXNlT3B0aW9uczogU2Fzc1BsdWdpbk9wdGlvbnMgPSB7XG4gICAgc291cmNlTWFwOiAhaXNQcm9kdWN0aW9uQnVpbGQsXG4gICAgLi4uKGlzUG9zdGNzc05lZWRlZChzdHlsZXMpICYmIHtcbiAgICAgIGFzeW5jIHRyYW5zZm9ybShjc3M6IHN0cmluZywgX3Jlc29sdmVEaXJlY3Rvcnk6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybUNzcyh7IGZpbGVQYXRoLCBpc0Nzc01vZHVsZVNjb3BlZDogZmFsc2UsIGlzUHJvZHVjdGlvbkJ1aWxkLCBzb3VyY2U6IGNzcywgc3R5bGVzIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0LmNzcztcbiAgICAgIH1cbiAgICB9KVxuICB9O1xuXG4gIHJldHVybiBzdHlsZXMuY3NzTW9kdWxlcyA/IFt7IC4uLmJhc2VPcHRpb25zLCBmaWx0ZXI6IENTU19NT0RVTEVfRklMVEVSLCB0eXBlOiAnbG9jYWwtY3NzJyB9LCBiYXNlT3B0aW9uc10gOiBbYmFzZU9wdGlvbnNdO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gQW4gZXNidWlsZCBwbHVnaW47IGV4ZXJjaXNlZCBieSB0aGUgYnVuZGxlciBpbnRlZ3JhdGlvbiB0ZXN0IGFnYWluc3QgYSByZWFsIGVzYnVpbGQgYnVpbGQuICovXG5mdW5jdGlvbiBzb2xpZEVzYnVpbGRQbHVnaW4oaXNQcm9kdWN0aW9uQnVpbGQ6IGJvb2xlYW4pOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvYnNpZGlhbi1wbHVnaW4tc29saWQnLFxuICAgIHNldHVwKGJ1aWxkKTogdm9pZCB7XG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IFNPTElEX0ZJTFRFUiB9LCBhc3luYyAoeyBwYXRoIH0pID0+IHtcbiAgICAgICAgY29uc3QgY29kZSA9IGF3YWl0IHJlYWRGaWxlKHBhdGgsICd1dGYtOCcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzOiBhcHBlbmRJbmxpbmVTb3VyY2VNYXAoYXdhaXQgdHJhbnNmb3JtU29saWQoeyBjb2RlLCBmaWxlUGF0aDogcGF0aCwgaXNQcm9kdWN0aW9uQnVpbGQgfSkpLFxuICAgICAgICAgIGxvYWRlcjogJ2pzJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0Esc0JBQXlCO0FBSXpCLHNDQUtPO0FBQ1Asd0NBSU87QUFxQ1AsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxlQUFlO0FBU2QsU0FBUyw4QkFBOEIsUUFBeUU7QUFDckgsUUFBTSxFQUFFLFVBQVUsa0JBQWtCLElBQUk7QUFDeEMsUUFBTSxjQUFVLHFEQUFvQixFQUFFLFdBQVcsU0FBUyxXQUFXLGtCQUFrQixDQUFDO0FBQ3hGLFFBQU0sc0JBQWtCLG9EQUFtQixTQUFTLFNBQVM7QUFDN0QsU0FBTztBQUFBLElBQ0wsR0FBSSxPQUFPLEtBQUssT0FBTyxFQUFFLFNBQVMsS0FBSyxFQUFFLFFBQVEsUUFBUTtBQUFBLElBQ3pELEdBQUksb0JBQW9CLFVBQWEsRUFBRSxLQUFLLGFBQWEsZ0JBQWdCO0FBQUEsSUFDekUsR0FBSSxTQUFTLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxTQUFTLEVBQUU7QUFBQSxFQUN2RDtBQUNGO0FBUUEsZUFBc0IseUJBQXlCLFFBQTJEO0FBQ3hHLFFBQU0sRUFBRSxVQUFVLGtCQUFrQixJQUFJO0FBQ3hDLFVBQVEsU0FBUyxXQUFXO0FBQUEsSUFDMUIsS0FBSyxTQUFTO0FBQ1osYUFBTyxDQUFDLG1CQUFtQixpQkFBaUIsQ0FBQztBQUFBLElBQy9DO0FBQUEsSUFDQSxLQUFLLE9BQU87QUFDVixZQUFNLGNBQWMsVUFBTSxvREFBNkM7QUFBQSxRQUNyRSxTQUFTO0FBQUEsUUFDVCxhQUFhO0FBQUEsUUFDYixXQUFXO0FBQUEsTUFDYixDQUFDO0FBQ0QsYUFBTyxDQUFDLFlBQVksUUFBUSxFQUFFLGNBQWMsa0JBQWtCLENBQUMsQ0FBQztBQUFBLElBQ2xFO0FBQUEsSUFDQSxTQUFTO0FBQ1AsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFDRjtBQVVPLFNBQVMseUJBQXlCLFFBQTZEO0FBQ3BHLFFBQU0sRUFBRSxVQUFVLGtCQUFrQixJQUFJO0FBQ3hDLFFBQU0sU0FBUyxTQUFTLFVBQVUsQ0FBQztBQUNuQyxRQUFNLGNBQWlDO0FBQUEsSUFDckMsV0FBVyxDQUFDO0FBQUEsSUFDWixPQUFJLGlEQUFnQixNQUFNLEtBQUs7QUFBQSxNQUM3QixNQUFNLFVBQVUsS0FBYSxtQkFBMkIsVUFBbUM7QUFDekYsY0FBTSxTQUFTLFVBQU0sZ0RBQWEsRUFBRSxVQUFVLG1CQUFtQixPQUFPLG1CQUFtQixRQUFRLEtBQUssT0FBTyxDQUFDO0FBQ2hILGVBQU8sT0FBTztBQUFBLE1BQ2hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLE9BQU8sYUFBYSxDQUFDLEVBQUUsR0FBRyxhQUFhLFFBQVEsbUJBQW1CLE1BQU0sWUFBWSxHQUFHLFdBQVcsSUFBSSxDQUFDLFdBQVc7QUFDM0g7QUFHQSxTQUFTLG1CQUFtQixtQkFBb0M7QUFDOUQsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sTUFBTSxPQUFhO0FBQ2pCLFlBQU0sT0FBTyxFQUFFLFFBQVEsYUFBYSxHQUFHLE9BQU8sRUFBRSxLQUFLLE1BQU07QUFDekQsY0FBTSxPQUFPLFVBQU0sMEJBQVMsTUFBTSxPQUFPO0FBQ3pDLGVBQU87QUFBQSxVQUNMLGNBQVUseURBQXNCLFVBQU0sa0RBQWUsRUFBRSxNQUFNLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQyxDQUFDO0FBQUEsVUFDakcsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,60 @@
1
+ /// <reference path="../../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * What the {@link ObsidianPluginFeatureOptions} add to the esbuild build: the JSX runtime, the framework's
6
+ * compile-time constants, the `.wasm` loader, the Solid and Vue plugins, and the stylesheet options of the Sass plugin
7
+ * that loads every stylesheet.
8
+ */
9
+ import type { BuildOptions, Plugin } from 'esbuild' with { 'resolution-mode': 'import' };
10
+ import type { SassPluginOptions } from 'esbuild-sass-plugin' with { 'resolution-mode': 'import' };
11
+ import type { ObsidianPluginFeatureOptions } from '../obsidian-plugin-features.cjs';
12
+ /**
13
+ * The esbuild options of {@link getEsbuildFeatureBuildOptions}.
14
+ */
15
+ export type EsbuildFeatureBuildOptions = Pick<BuildOptions, 'define' | 'jsx' | 'jsxImportSource' | 'loader'>;
16
+ /**
17
+ * Parameters for {@link getEsbuildFeatureBuildOptions}.
18
+ */
19
+ export interface GetEsbuildFeatureBuildOptionsParams {
20
+ /**
21
+ * The build features.
22
+ */
23
+ readonly features: ObsidianPluginFeatureOptions;
24
+ /**
25
+ * Whether this is a production build.
26
+ */
27
+ readonly isProductionBuild: boolean;
28
+ }
29
+ /**
30
+ * Parameters for {@link getEsbuildFeaturePlugins}.
31
+ */
32
+ export type GetEsbuildFeaturePluginsParams = GetEsbuildFeatureBuildOptionsParams;
33
+ /**
34
+ * Parameters for {@link getSassPluginOptionsList}.
35
+ */
36
+ export type GetSassPluginOptionsListParams = GetEsbuildFeatureBuildOptionsParams;
37
+ /**
38
+ * Builds the esbuild options the features set: the automatic JSX runtime for React and Preact, the framework's
39
+ * compile-time constants, and the `binary` loader for `.wasm`.
40
+ *
41
+ * @param params - The {@link GetEsbuildFeatureBuildOptionsParams}.
42
+ * @returns The options, to merge under the consumer's own.
43
+ */
44
+ export declare function getEsbuildFeatureBuildOptions(params: GetEsbuildFeatureBuildOptionsParams): EsbuildFeatureBuildOptions;
45
+ /**
46
+ * Creates the esbuild plugins the framework needs: `unplugin-vue` for Vue, and the shared Solid transform for Solid.
47
+ *
48
+ * @param params - The {@link GetEsbuildFeaturePluginsParams}.
49
+ * @returns A {@link Promise} that resolves to the plugins, empty when the framework needs none.
50
+ */
51
+ export declare function getEsbuildFeaturePlugins(params: GetEsbuildFeaturePluginsParams): Promise<Plugin[]>;
52
+ /**
53
+ * Builds the option sets of the Sass plugin that loads every stylesheet: one for ordinary stylesheets, and with CSS
54
+ * modules on, one before it that loads `*.module.css` with esbuild's own `local-css` loader. Each runs the stylesheet
55
+ * through PostCSS and Tailwind when the options ask for it.
56
+ *
57
+ * @param params - The {@link GetSassPluginOptionsListParams}.
58
+ * @returns The option sets, in the order their plugins must be registered.
59
+ */
60
+ export declare function getSassPluginOptionsList(params: GetSassPluginOptionsListParams): SassPluginOptions[];
@@ -109,6 +109,7 @@ var esbuild_impl_exports = {};
109
109
  __export(esbuild_impl_exports, {
110
110
  "copy-to-obsidian-plugins-folder-plugin": () => copy_to_obsidian_plugins_folder_plugin,
111
111
  dependency: () => dependency,
112
+ "feature-options": () => feature_options,
112
113
  "fix-source-maps-plugin": () => fix_source_maps_plugin,
113
114
  "obsidian-plugin-builder": () => obsidian_plugin_builder,
114
115
  "preprocess-plugin": () => preprocess_plugin,
@@ -117,6 +118,7 @@ __export(esbuild_impl_exports, {
117
118
  module.exports = __toCommonJS(esbuild_impl_exports);
118
119
  var copy_to_obsidian_plugins_folder_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./copy-to-obsidian-plugins-folder-plugin.cjs')), 1);
119
120
  var dependency = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./dependency.cjs')), 1);
121
+ var feature_options = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./feature-options.cjs')), 1);
120
122
  var fix_source_maps_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./fix-source-maps-plugin.cjs')), 1);
121
123
  var obsidian_plugin_builder = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./obsidian-plugin-builder.cjs')), 1);
122
124
  var preprocess_plugin = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./preprocess-plugin.cjs')), 1);
@@ -125,9 +127,10 @@ var rename_css_plugin = __toESM(((module) => module && module.__esModule && 'def
125
127
  0 && (module.exports = {
126
128
  "copy-to-obsidian-plugins-folder-plugin": null,
127
129
  dependency,
130
+ "feature-options": null,
128
131
  "fix-source-maps-plugin": null,
129
132
  "obsidian-plugin-builder": null,
130
133
  "preprocess-plugin": null,
131
134
  "rename-css-plugin": null
132
135
  });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdjb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbicgZnJvbSAnLi9jb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnZGVwZW5kZW5jeScgZnJvbSAnLi9kZXBlbmRlbmN5LnRzJztcbmV4cG9ydCAqIGFzICdmaXgtc291cmNlLW1hcHMtcGx1Z2luJyBmcm9tICcuL2ZpeC1zb3VyY2UtbWFwcy1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXBsdWdpbi1idWlsZGVyJyBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1idWlsZGVyLnRzJztcbmV4cG9ydCAqIGFzICdwcmVwcm9jZXNzLXBsdWdpbicgZnJvbSAnLi9wcmVwcm9jZXNzLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWNzcy1wbHVnaW4nIGZyb20gJy4vcmVuYW1lLWNzcy1wbHVnaW4udHMnO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxrREFBQUE7QUFBQSxFQUFBO0FBQUEsa0NBQUFDO0FBQUEsRUFBQSxpQ0FBQUM7QUFBQSxFQUFBLDJCQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUE7QUFBQTtBQUVBLElBQUFKLHlDQUEwRDtBQUMxRCxpQkFBOEI7QUFDOUIsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyxvQkFBcUM7QUFDckMsSUFBQUMsb0JBQXFDOyIsIm5hbWVzIjpbImNvcHktdG8tb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXItcGx1Z2luIiwiZml4LXNvdXJjZS1tYXBzLXBsdWdpbiIsIm9ic2lkaWFuLXBsdWdpbi1idWlsZGVyIiwicHJlcHJvY2Vzcy1wbHVnaW4iLCJyZW5hbWUtY3NzLXBsdWdpbiJdfQ==
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9idW5kbGVycy9lc2J1aWxkLWltcGwvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdjb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbicgZnJvbSAnLi9jb3B5LXRvLW9ic2lkaWFuLXBsdWdpbnMtZm9sZGVyLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnZGVwZW5kZW5jeScgZnJvbSAnLi9kZXBlbmRlbmN5LnRzJztcbmV4cG9ydCAqIGFzICdmZWF0dXJlLW9wdGlvbnMnIGZyb20gJy4vZmVhdHVyZS1vcHRpb25zLnRzJztcbmV4cG9ydCAqIGFzICdmaXgtc291cmNlLW1hcHMtcGx1Z2luJyBmcm9tICcuL2ZpeC1zb3VyY2UtbWFwcy1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXBsdWdpbi1idWlsZGVyJyBmcm9tICcuL29ic2lkaWFuLXBsdWdpbi1idWlsZGVyLnRzJztcbmV4cG9ydCAqIGFzICdwcmVwcm9jZXNzLXBsdWdpbicgZnJvbSAnLi9wcmVwcm9jZXNzLXBsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAncmVuYW1lLWNzcy1wbHVnaW4nIGZyb20gJy4vcmVuYW1lLWNzcy1wbHVnaW4udHMnO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxrREFBQUE7QUFBQSxFQUFBO0FBQUEsMkJBQUFDO0FBQUEsRUFBQSxnQ0FBQUM7QUFBQSxFQUFBLGlDQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQTtBQUFBO0FBRUEsSUFBQUwseUNBQTBEO0FBQzFELGlCQUE4QjtBQUM5QixJQUFBQyxrQkFBbUM7QUFDbkMsSUFBQUMseUJBQTBDO0FBQzFDLElBQUFDLDBCQUEyQztBQUMzQyxJQUFBQyxvQkFBcUM7QUFDckMsSUFBQUMsb0JBQXFDOyIsIm5hbWVzIjpbImNvcHktdG8tb2JzaWRpYW4tcGx1Z2lucy1mb2xkZXItcGx1Z2luIiwiZmVhdHVyZS1vcHRpb25zIiwiZml4LXNvdXJjZS1tYXBzLXBsdWdpbiIsIm9ic2lkaWFuLXBsdWdpbi1idWlsZGVyIiwicHJlcHJvY2Vzcy1wbHVnaW4iLCJyZW5hbWUtY3NzLXBsdWdpbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  /// <reference path="../../library-references.d.cts" />
2
2
  export * as 'copy-to-obsidian-plugins-folder-plugin' from './copy-to-obsidian-plugins-folder-plugin.cjs';
3
3
  export * as 'dependency' from './dependency.cjs';
4
+ export * as 'feature-options' from './feature-options.cjs';
4
5
  export * as 'fix-source-maps-plugin' from './fix-source-maps-plugin.cjs';
5
6
  export * as 'obsidian-plugin-builder' from './obsidian-plugin-builder.cjs';
6
7
  export * as 'preprocess-plugin' from './preprocess-plugin.cjs';