obsidian-dev-utils 101.5.0 → 101.6.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 (33) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/integration-test-plugin/main.js +1714 -1622
  3. package/dist/lib/cjs/__merged.cjs +4 -1
  4. package/dist/lib/cjs/__merged.d.cts +1 -0
  5. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  6. package/dist/lib/cjs/obsidian/components/index.cjs +4 -1
  7. package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
  8. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +1 -1
  9. package/dist/lib/cjs/obsidian/components/settings-migration-component.cjs +232 -0
  10. package/dist/lib/cjs/obsidian/components/settings-migration-component.d.cts +120 -0
  11. package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +1 -1
  12. package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +5 -3
  13. package/dist/lib/cjs/obsidian/plugin/index.cjs +6 -3
  14. package/dist/lib/cjs/obsidian/plugin/index.d.cts +1 -0
  15. package/dist/lib/cjs/obsidian/plugin/settings-migration-api.cjs +141 -0
  16. package/dist/lib/cjs/obsidian/plugin/settings-migration-api.d.cts +91 -0
  17. package/dist/lib/esm/__merged.d.mts +1 -0
  18. package/dist/lib/esm/__merged.mjs +3 -1
  19. package/dist/lib/esm/generated-during-build.mjs +1 -1
  20. package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
  21. package/dist/lib/esm/obsidian/components/index.mjs +3 -1
  22. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +1 -1
  23. package/dist/lib/esm/obsidian/components/settings-migration-component.d.mts +120 -0
  24. package/dist/lib/esm/obsidian/components/settings-migration-component.mjs +127 -0
  25. package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +5 -3
  26. package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +1 -1
  27. package/dist/lib/esm/obsidian/plugin/index.d.mts +1 -0
  28. package/dist/lib/esm/obsidian/plugin/index.mjs +4 -2
  29. package/dist/lib/esm/obsidian/plugin/settings-migration-api.d.mts +91 -0
  30. package/dist/lib/esm/obsidian/plugin/settings-migration-api.mjs +44 -0
  31. package/obsidian/components/settings-migration-component/package.json +6 -0
  32. package/obsidian/plugin/settings-migration-api/package.json +6 -0
  33. package/package.json +15 -15
@@ -0,0 +1,232 @@
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
+
6
+ (function () {
7
+ function ensureBrowserProcess() {
8
+ const browserProcess = {
9
+ browser: true,
10
+ cwd() {
11
+ return '/';
12
+ },
13
+ env: {},
14
+ platform: 'android'
15
+ };
16
+
17
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
18
+ const existingProcess = globalThis.process;
19
+
20
+ if (!existingProcess) {
21
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
22
+ globalThis.process = browserProcess;
23
+ return;
24
+ }
25
+
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+
30
+ const existingProcessRecord = existingProcess;
31
+
32
+ for (const [key, value] of Object.entries(browserProcess)) {
33
+ existingProcessRecord[key] ??= value;
34
+ }
35
+
36
+ existingProcessRecord['browser'] = true;
37
+ }
38
+
39
+ function keepName($unknown) {
40
+ return $unknown;
41
+ }
42
+
43
+ (function initCjs() {
44
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
45
+ const globalThisRecord = globalThis;
46
+ globalThisRecord['__name'] ??= keepName;
47
+ const originalRequire = require;
48
+ if (originalRequire && !originalRequire.__isPatched) {
49
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
50
+ require = Object.assign(
51
+ (id) => requirePatched(id),
52
+ originalRequire,
53
+ {
54
+ __isPatched: true
55
+ }
56
+ );
57
+ }
58
+
59
+ globalThisRecord['__extractDefault'] ??= extractDefault;
60
+
61
+ ensureBrowserProcess();
62
+
63
+ function extractDefault(module) {
64
+ return module && module.__esModule && 'default' in module ? module.default : module;
65
+ }
66
+
67
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
+ '@codemirror/autocomplete',
69
+ '@codemirror/collab',
70
+ '@codemirror/commands',
71
+ '@codemirror/language',
72
+ '@codemirror/lint',
73
+ '@codemirror/search',
74
+ '@codemirror/state',
75
+ '@codemirror/text',
76
+ '@codemirror/view',
77
+ '@lezer/common',
78
+ '@lezer/highlight',
79
+ '@lezer/lr',
80
+ 'obsidian']
81
+ );
82
+
83
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
84
+ '@codemirror/closebrackets',
85
+ '@codemirror/comment',
86
+ '@codemirror/fold',
87
+ '@codemirror/gutter',
88
+ '@codemirror/highlight',
89
+ '@codemirror/history',
90
+ '@codemirror/matchbrackets',
91
+ '@codemirror/panel',
92
+ '@codemirror/rangeset',
93
+ '@codemirror/rectangular-selection',
94
+ '@codemirror/stream-parser',
95
+ '@codemirror/tooltip']
96
+ );
97
+
98
+ function requirePatched(id) {
99
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
100
+ return originalRequire?.(id);
101
+ }
102
+
103
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
104
+ if (globalThis.app.isMobile) {
105
+ if (id === 'process' || id === 'node:process') {
106
+ // eslint-disable-next-line no-console -- Valid usage.
107
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
108
+
109
+ return process;
110
+ }
111
+ } else {
112
+ const module = originalRequire?.(id);
113
+ if (module) {
114
+ return extractDefault(module);
115
+ }
116
+ }
117
+
118
+ // eslint-disable-next-line no-console -- Valid usage.
119
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
120
+ return {};
121
+ }
122
+ })();
123
+ })();
124
+
125
+ "use strict";
126
+ var __defProp = Object.defineProperty;
127
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
128
+ var __getOwnPropNames = Object.getOwnPropertyNames;
129
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
130
+ var __export = (target, all) => {
131
+ for (var name in all)
132
+ __defProp(target, name, { get: all[name], enumerable: true });
133
+ };
134
+ var __copyProps = (to, from, except, desc) => {
135
+ if (from && typeof from === "object" || typeof from === "function") {
136
+ for (let key of __getOwnPropNames(from))
137
+ if (!__hasOwnProp.call(to, key) && key !== except)
138
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
139
+ }
140
+ return to;
141
+ };
142
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
143
+ var settings_migration_component_exports = {};
144
+ __export(settings_migration_component_exports, {
145
+ SettingsMigrationComponent: () => SettingsMigrationComponent
146
+ });
147
+ module.exports = __toCommonJS(settings_migration_component_exports);
148
+ var import_async = require('../../async.cjs');
149
+ var import_object_utils = require('../../object-utils.cjs');
150
+ var import_plugin_api = require('../plugin/plugin-api.cjs');
151
+ var import_async_events_component = require('./async-events-component.cjs');
152
+ var import_component_ex = require('./component-ex.cjs');
153
+ class SettingsMigrationComponent extends import_component_ex.ComponentEx {
154
+ apiVersionRange;
155
+ app;
156
+ contract;
157
+ getProposedSettings;
158
+ isProposing = false;
159
+ pluginSettingsComponent;
160
+ providerPluginId;
161
+ retireProposedSettings;
162
+ sourcePluginId;
163
+ /**
164
+ * Creates an instance of {@link SettingsMigrationComponent}.
165
+ *
166
+ * @param params - The constructor parameters.
167
+ */
168
+ constructor(params) {
169
+ super();
170
+ this.apiVersionRange = params.apiVersionRange;
171
+ this.app = params.app;
172
+ this.contract = params.contract;
173
+ this.getProposedSettings = params.getProposedSettings;
174
+ this.pluginSettingsComponent = params.pluginSettingsComponent;
175
+ this.providerPluginId = params.providerPluginId;
176
+ this.retireProposedSettings = params.retireProposedSettings;
177
+ this.sourcePluginId = params.sourcePluginId;
178
+ }
179
+ /**
180
+ * Loads the component, wiring both edges that can make an offer possible.
181
+ */
182
+ onload() {
183
+ const ref = (0, import_plugin_api.watchPluginApi)((0, import_object_utils.normalizeOptionalProperties)({
184
+ apiVersionRange: this.apiVersionRange,
185
+ app: this.app,
186
+ component: this,
187
+ contract: this.contract,
188
+ pluginId: this.providerPluginId
189
+ }));
190
+ (0, import_async_events_component.registerAsyncEvent)(
191
+ this,
192
+ ref.on("change", () => {
193
+ this.handleChange(ref);
194
+ })
195
+ );
196
+ (0, import_async_events_component.registerAsyncEvent)(
197
+ this,
198
+ this.pluginSettingsComponent.on("loadSettings", () => {
199
+ this.handleChange(ref);
200
+ })
201
+ );
202
+ this.handleChange(ref);
203
+ }
204
+ handleChange(ref) {
205
+ (0, import_async.invokeAsyncSafely)(async () => {
206
+ await this.propose(ref.value);
207
+ });
208
+ }
209
+ async propose(api) {
210
+ const proposedSettings = this.getProposedSettings();
211
+ if (!api || this.isProposing || proposedSettings === null) {
212
+ return;
213
+ }
214
+ this.isProposing = true;
215
+ try {
216
+ const result = await api.migrateSettings({
217
+ proposedSettings,
218
+ sourcePluginId: this.sourcePluginId
219
+ });
220
+ if (result.isApplied) {
221
+ await this.retireProposedSettings();
222
+ }
223
+ } finally {
224
+ this.isProposing = false;
225
+ }
226
+ }
227
+ }
228
+ // Annotate the CommonJS export names for ESM import in node:
229
+ 0 && (module.exports = {
230
+ SettingsMigrationComponent
231
+ });
232
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvc2V0dGluZ3MtbWlncmF0aW9uLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IG9mZmVycyBzZXR0aW5ncyB0aGlzIHBsdWdpbiB1c2VkIHRvIG93biB0byB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGVtIG5vdywgb25jZSwgdGhyb3VnaFxuICogdGhhdCBwbHVnaW4ncyBwdWJsaWMgQVBJLlxuICpcbiAqIFRoaXMgaXMgdGhlIG90aGVyIGhhbGYgb2Yge0BsaW5rIG9ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50IVBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnR9LlxuICogVGhlIHN1Z2dlc3Rpb24gYXNrcyB0aGUgdXNlciB0byBpbnN0YWxsIHRoZSBwbHVnaW4gdGhhdCB0b29rIGEgZmVhdHVyZSBvdmVyOyB0aGlzIGNhcnJpZXMgdGhlIHNldHRpbmdzIHRoZXlcbiAqIGhhZCBjb25maWd1cmVkIGZvciBpdCBhY3Jvc3MsIHNvIHRha2luZyB0aGUgc3VnZ2VzdGlvbiBkb2VzIG5vdCBtZWFuIHJlLWVudGVyaW5nIGV2ZXJ5dGhpbmcgYnkgaGFuZC5cbiAqXG4gKiBBIHByb3Bvc2luZyBwbHVnaW4gbmV2ZXIgd3JpdGVzIGludG8gYW5vdGhlciBwbHVnaW4ncyBgZGF0YS5qc29uYC4gSXQgUFJPUE9TRVM6IHRoZSBvdGhlciBwbHVnaW4gb3ducyB0aGVcbiAqIHNldHRpbmdzLCBzbyBpdCBvd25zIHRoZSBkaWFsb2csIGFuZCB0aGUgdXNlciBhcHByb3ZlcywgZWRpdHMgb3IgZGVjbGluZXMuIE9ubHkgYW4gYXBwbGllZCBtaWdyYXRpb24gcmV0aXJlc1xuICogdGhlIHBlbmRpbmcgdmFsdWVzLlxuICpcbiAqIFRoZSBvZmZlciBpcyBtYWRlIHdoZW5ldmVyIGl0IENBTiBzdWNjZWVkLCB3aGljaCBuZWVkcyB0d28gaW5kZXBlbmRlbnQgdGhpbmdzIHRvIGhhdmUgaGFwcGVuZWQgXHUyMDE0IHRoZVxuICogcHJvdmlkZXIncyBBUEkgYmVpbmcgYXZhaWxhYmxlLCBhbmQgdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgaGF2aW5nIGFycml2ZWQgZnJvbSBkaXNrLiBFaXRoZXIgY2FuIGxhbmRcbiAqIGZpcnN0LCBzbyBib3RoIGVkZ2VzIGFyZSB3aXJlZCBhbmQgZWFjaCByZS1yZWFkcyB0aGUgY3VycmVudCBzdGF0ZSByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgb3RoZXIgaGFzXG4gKiBhbHJlYWR5IGhhcHBlbmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUge1xuICBQbHVnaW5BcGlDb250cmFjdCxcbiAgUGx1Z2luQXBpUmVmLFxuICBXYXRjaFBsdWdpbkFwaVBhcmFtc1xufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdzTWlncmF0aW9uQXBpIH0gZnJvbSAnLi4vcGx1Z2luL3NldHRpbmdzLW1pZ3JhdGlvbi1hcGkudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyB3YXRjaFBsdWdpbkFwaSB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4vYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFNldHRpbmdzTWlncmF0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNaWdyYXRhYmxlU2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MgdGhpcyBwbHVnaW4gbWF5IGhhbmQgb3Zlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFRNaWdyYXRhYmxlU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgY29udHJhY3QgdmVyc2lvbnMgdGhpcyBwbHVnaW4gY29tcGlsZWQgYWdhaW5zdCwgZS5nLiBgJ14xJ2AuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEV2YWx1YXRlZCBieSBgY29tcGFyZS12ZXJzaW9uc2AsIHdoaWNoIGRvZXMgTk9UIGFjY2VwdCBhIGJhcmUgYCpgLiBTcGVsbCBcImFueSB2ZXJzaW9uXCIgYXMgYCc+PTAuMC4wJ2AuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uUmFuZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdGhpcyBwbHVnaW4gZXhwZWN0cyBvZiB0aGUgcHJvdmlkZXIsIHdoaWNoIHdpbnMgb3ZlciB0aGUgcHJvdmlkZXIncyBvd24gd2hlbiBzdXBwbGllZC5cbiAgICpcbiAgICogV29ydGggc3VwcGx5aW5nLCBhbmQgd29ydGgga2VlcGluZyBOQVJST1cuIEEgbWlncmF0aW9uIHVzdWFsbHkgbmVlZHMgb25lIG1ldGhvZCB0aGF0IGhhcyBleGlzdGVkIHNpbmNlIHRoZVxuICAgKiBwcm92aWRlcidzIGZpcnN0IGNvbnRyYWN0IHZlcnNpb24sIHdoaWxlIHRoZSBzYW1lIHBsdWdpbiBtYXkgcmVhZCBvdGhlciBwYXJ0cyBvZiB0aGF0IEFQSSB0aHJvdWdoIGEgbXVjaFxuICAgKiBuZXdlciBvbmUuIERlY2xhcmluZyB0aGUgd2lkZXIgZXhwZWN0YXRpb24gaGVyZSB3b3VsZCByZWZ1c2UgdG8gb2ZmZXIgdGhlIG1pZ3JhdGlvbiB0byBhIHVzZXIgb24gYW4gb2xkZXJcbiAgICogcHJvdmlkZXIgXHUyMDE0IHdoaWNoIGlzIHByZWNpc2VseSB0aGUgdXNlciB3aG8gc3RpbGwgaGFzIHNldHRpbmdzIHRvIG1pZ3JhdGUuXG4gICAqL1xuICByZWFkb25seSBjb250cmFjdD86IFBsdWdpbkFwaUNvbnRyYWN0O1xuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgdmFsdWVzIGN1cnJlbnRseSB3YWl0aW5nIHRvIGJlIGhhbmRlZCBvdmVyLlxuICAgKlxuICAgKiBDYWxsZWQgYWZyZXNoIG9uIGV2ZXJ5IGVkZ2UgcmF0aGVyIHRoYW4gb25jZSwgc28gYW4gaW1wbGVtZW50YXRpb24gc2ltcGx5IHJlYWRzIGl0cyBwbHVnaW4ncyBzZXR0aW5ncy5cbiAgICogUmV0dXJuIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgcGVuZGluZyBcdTIwMTQgYWZ0ZXIgYSBtaWdyYXRpb24gaGFzIGJlZW4gYXBwbGllZCwgb3Igb24gYSB2YXVsdCB0aGF0IG5ldmVyXG4gICAqIGhhZCB0aGVzZSBzZXR0aW5ncyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWVzIHRvIHByb3Bvc2UsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gb2ZmZXIuXG4gICAqL1xuICBnZXRQcm9wb3NlZFNldHRpbmdzKHRoaXM6IHZvaWQpOiBudWxsIHwgVE1pZ3JhdGFibGVTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudCBvZiB0aGUgcGx1Z2luIG1ha2luZyB0aGUgcHJvcG9zYWwuXG4gICAqXG4gICAqIFRha2VuIGFzIGEgd2hvbGUgY29tcG9uZW50IHJhdGhlciB0aGFuIGFzIGEgYmFyZSBcInJlYWR5XCIgZmxhZyBzbyB0aGUgaG9zdCBjYW5ub3QgZm9yZ2V0IHRvIHdpcmUgdGhlIHdhaXQ6XG4gICAqIHdoYXRldmVyIHtAbGluayBnZXRQcm9wb3NlZFNldHRpbmdzfSByZWFkcyBpcyBtZWFuaW5nbGVzcyB1bnRpbCB0aGlzIGNvbXBvbmVudCBoYXMgcmVhZCBgZGF0YS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0PjtcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHBsdWdpbiB0aGF0IG93bnMgdGhlc2Ugc2V0dGluZ3Mgbm93LCBhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luXG4gICAqIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJQbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgdGhlIHBlbmRpbmcgdmFsdWVzIGhhdmUgYmVlbiBoYW5kZWQgb3Zlciwgc28gdGhlIG9mZmVyIGlzIG5vdCBtYWRlIGFnYWluLlxuICAgKlxuICAgKiBDYWxsZWQgT05MWSB3aGVuIHRoZSB1c2VyIGFjdHVhbGx5IGFwcGxpZWQgdGhlIG1pZ3JhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSByZXRpcmVtZW50IGlzIHBlcnNpc3RlZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQW4gaW1wbGVtZW50YXRpb24gbXVzdCBQRVJTSVNUIHRoZSByZXRpcmVtZW50IFx1MjAxNCBgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQuZWRpdEFuZFNhdmUoXHUyMDI2KWAsIG5vdFxuICAgKiBgc2V0UHJvcGVydHkoXHUyMDI2KWAuIFRoZSBsYXR0ZXIgb25seSBlZGl0cyB0aGUgaW4tbWVtb3J5IHN0YXRlLCBzbyB0aGUgcmV0aXJlbWVudCBpcyBmb3Jnb3R0ZW4gb24gdGhlIG5leHRcbiAgICogcmVsb2FkIGFuZCB0aGUgbWlncmF0aW9uIGlzIG9mZmVyZWQgYWdhaW4gZm9yZXZlci5cbiAgICovXG4gIHJldGlyZVByb3Bvc2VkU2V0dGluZ3ModGhpczogdm9pZCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4gbWFraW5nIHRoZSBwcm9wb3NhbCwgc28gdGhlIHByb3ZpZGVyJ3MgZGlhbG9nIGNhbiBzYXkgd2hvc2Ugc2V0dGluZ3MgdGhlc2VcbiAgICogYXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPZmZlcnMgc2V0dGluZ3MgdGhpcyBwbHVnaW4gdXNlZCB0byBvd24gdG8gdGhlIHBsdWdpbiB0aGF0IG93bnMgdGhlbSBub3cuXG4gKlxuICogQHR5cGVQYXJhbSBUTWlncmF0YWJsZVNldHRpbmdzIC0gVGhlIHNldHRpbmdzIHRoaXMgcGx1Z2luIG1heSBoYW5kIG92ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudDxUTWlncmF0YWJsZVNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlWZXJzaW9uUmFuZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250cmFjdDogUGx1Z2luQXBpQ29udHJhY3QgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2V0UHJvcG9zZWRTZXR0aW5nczogKCkgPT4gbnVsbCB8IFRNaWdyYXRhYmxlU2V0dGluZ3M7XG4gIHByaXZhdGUgaXNQcm9wb3NpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJQbHVnaW5JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJldGlyZVByb3Bvc2VkU2V0dGluZ3M6ICgpID0+IFByb21pc2FibGU8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlUGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgU2V0dGluZ3NNaWdyYXRpb25Db21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFRNaWdyYXRhYmxlU2V0dGluZ3M+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwaVZlcnNpb25SYW5nZSA9IHBhcmFtcy5hcGlWZXJzaW9uUmFuZ2U7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMuY29udHJhY3QgPSBwYXJhbXMuY29udHJhY3Q7XG4gICAgdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzID0gcGFyYW1zLmdldFByb3Bvc2VkU2V0dGluZ3M7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICB0aGlzLnByb3ZpZGVyUGx1Z2luSWQgPSBwYXJhbXMucHJvdmlkZXJQbHVnaW5JZDtcbiAgICB0aGlzLnJldGlyZVByb3Bvc2VkU2V0dGluZ3MgPSBwYXJhbXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncztcbiAgICB0aGlzLnNvdXJjZVBsdWdpbklkID0gcGFyYW1zLnNvdXJjZVBsdWdpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHdpcmluZyBib3RoIGVkZ2VzIHRoYXQgY2FuIG1ha2UgYW4gb2ZmZXIgcG9zc2libGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIC8vIE5vdGhpbmcgaXMgZ2F0ZWQgb24gdGhlIHBlbmRpbmcgdmFsdWVzIEhFUkUuIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaXMgYSBzaWJsaW5nIHdob3NlIG93biBsb2FkIGlzIHN0aWxsXG4gICAgLy8gSW4gZmxpZ2h0IGF0IHRoaXMgcG9pbnQsIHNvIGl0IHN0aWxsIGhvbGRzIHRoZSBERUZBVUxUUyBcdTIwMTQgcmVhZGluZyB0aGUgcGVuZGluZyB2YWx1ZXMgbm93IHdvdWxkIHNlZVxuICAgIC8vIE5vdGhpbmcgb24gZXhhY3RseSB0aGUgdmF1bHRzIHRoYXQgaGF2ZSBzb21ldGhpbmcsIHJlZ2lzdGVyIG5vIHdhdGNoLCBhbmQgbG9zZSB0aGUgbWlncmF0aW9uIGZvciBnb29kLlxuICAgIC8vIEJvdGggZWRnZXMgYXJlIHdpcmVkIGluc3RlYWQsIGFuZCBgcHJvcG9zZWAgcmUtcmVhZHMgdGhlIHZhbHVlcyBlYWNoIHRpbWUgaXQgcnVucy5cbiAgICBjb25zdCByZWYgPSB3YXRjaFBsdWdpbkFwaTxTZXR0aW5nc01pZ3JhdGlvbkFwaTxUTWlncmF0YWJsZVNldHRpbmdzPj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFdhdGNoUGx1Z2luQXBpUGFyYW1zPih7XG4gICAgICBhcGlWZXJzaW9uUmFuZ2U6IHRoaXMuYXBpVmVyc2lvblJhbmdlLFxuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGNvbnRyYWN0OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgcGx1Z2luSWQ6IHRoaXMucHJvdmlkZXJQbHVnaW5JZFxuICAgIH0pKTtcblxuICAgIC8vIERyaXZlbiBieSB0aGUgcmVmJ3Mgb3duIGV2ZW50IHJhdGhlciB0aGFuIGJ5IGB3aGVuQXZhaWxhYmxlKClgLCBkZWxpYmVyYXRlbHkuIFRoYXQgd2FpdCBibG9ja3MgZm9yIHRlblxuICAgIC8vIFNlY29uZHMgYW5kIHRoZW4gdGhyb3dzIHdoZW4gdGhlIHByb3ZpZGVyIGlzIHNpbXBseSBub3QgaW5zdGFsbGVkLCB3aGljaCB3b3VsZCBzdGFsbCB0aGlzIHBsdWdpbidzIGxvYWRcbiAgICAvLyBGb3IgZXZlcnkgdXNlciB3aG8gZGVjbGluZXMgdGhlIHN1Z2dlc3Rpb24uIFdhdGNoaW5nIGNvc3RzIG5vdGhpbmcgd2hpbGUgdGhlIHByb3ZpZGVyIGlzIGFic2VudCBhbmRcbiAgICAvLyBPZmZlcnMgdGhlIG1pZ3JhdGlvbiB0aGUgbW9tZW50IGl0IGFwcGVhcnMgXHUyMDE0IGluY2x1ZGluZyByaWdodCBhZnRlciB0aGUgdXNlciBpbnN0YWxscyBpdCBmcm9tIHRoZVxuICAgIC8vIFN1Z2dlc3Rpb24gYmFubmVyLlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICByZWYub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UocmVmKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFRoZSBzZWNvbmQgZWRnZTogdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgYXJyaXZpbmcgZnJvbSBkaXNrLiBJdCBtYXkgZmlyZSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHJlZik7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmhhbmRsZUNoYW5nZShyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2UocmVmOiBQbHVnaW5BcGlSZWY8U2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4+KTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5wcm9wb3NlKHJlZi52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb3Bvc2UoYXBpOiBudWxsIHwgU2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9wb3NlZFNldHRpbmdzID0gdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzKCk7XG4gICAgaWYgKCFhcGkgfHwgdGhpcy5pc1Byb3Bvc2luZyB8fCBwcm9wb3NlZFNldHRpbmdzID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQm90aCBlZGdlcyBjYW4gZmlyZSB3aGlsZSB0aGUgcHJvdmlkZXIncyBkaWFsb2cgaXMgb3BlbiwgYW5kIGVhY2ggd291bGQgcmFpc2UgYSBzZWNvbmQgb25lLlxuICAgIHRoaXMuaXNQcm9wb3NpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGkubWlncmF0ZVNldHRpbmdzKHtcbiAgICAgICAgcHJvcG9zZWRTZXR0aW5ncyxcbiAgICAgICAgc291cmNlUGx1Z2luSWQ6IHRoaXMuc291cmNlUGx1Z2luSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBIGNhbmNlbCBpcyBub3QgYW4gYW5zd2VyLCBzbyB0aGUgdmFsdWVzIHN0YXkgcGVuZGluZyBhbmQgdGhlIG9mZmVyIGNvbWVzIGJhY2sgXHUyMDE0IG9uIHRoZSBuZXh0IGxvYWQsIG9yXG4gICAgICAvLyBBcyBzb29uIGFzIHRoZSBwcm92aWRlciByZWxvYWRzLiBPbmx5IGFuIGFwcGxpZWQgbWlncmF0aW9uIHJldGlyZXMgdGhlbS5cbiAgICAgIGlmIChyZXN1bHQuaXNBcHBsaWVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncygpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzUHJvcG9zaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQStCQSxtQkFBa0M7QUFDbEMsMEJBQTRDO0FBQzVDLHdCQUErQjtBQUMvQixvQ0FBbUM7QUFDbkMsMEJBQTRCO0FBa0ZyQixNQUFNLG1DQUF1RSxnQ0FBWTtBQUFBLEVBQzdFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDVCxjQUFjO0FBQUEsRUFDTDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBMEU7QUFDM0YsVUFBTTtBQUNOLFNBQUssa0JBQWtCLE9BQU87QUFDOUIsU0FBSyxNQUFNLE9BQU87QUFDbEIsU0FBSyxXQUFXLE9BQU87QUFDdkIsU0FBSyxzQkFBc0IsT0FBTztBQUNsQyxTQUFLLDBCQUEwQixPQUFPO0FBQ3RDLFNBQUssbUJBQW1CLE9BQU87QUFDL0IsU0FBSyx5QkFBeUIsT0FBTztBQUNyQyxTQUFLLGlCQUFpQixPQUFPO0FBQUEsRUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtnQixTQUFlO0FBSzdCLFVBQU0sVUFBTSxzQ0FBMEQsaURBQWtEO0FBQUEsTUFDdEgsaUJBQWlCLEtBQUs7QUFBQSxNQUN0QixLQUFLLEtBQUs7QUFBQSxNQUNWLFdBQVc7QUFBQSxNQUNYLFVBQVUsS0FBSztBQUFBLE1BQ2YsVUFBVSxLQUFLO0FBQUEsSUFDakIsQ0FBQyxDQUFDO0FBT0Y7QUFBQSxNQUNFO0FBQUEsTUFDQSxJQUFJLEdBQUcsVUFBVSxNQUFNO0FBQ3JCLGFBQUssYUFBYSxHQUFHO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0g7QUFHQTtBQUFBLE1BQ0U7QUFBQSxNQUNBLEtBQUssd0JBQXdCLEdBQUcsZ0JBQWdCLE1BQU07QUFDcEQsYUFBSyxhQUFhLEdBQUc7QUFBQSxNQUN2QixDQUFDO0FBQUEsSUFDSDtBQUVBLFNBQUssYUFBYSxHQUFHO0FBQUEsRUFDdkI7QUFBQSxFQUVRLGFBQWEsS0FBb0U7QUFDdkYsd0NBQWtCLFlBQVk7QUFDNUIsWUFBTSxLQUFLLFFBQVEsSUFBSSxLQUFLO0FBQUEsSUFDOUIsQ0FBQztBQUFBLEVBQ0g7QUFBQSxFQUVBLE1BQWMsUUFBUSxLQUFzRTtBQUMxRixVQUFNLG1CQUFtQixLQUFLLG9CQUFvQjtBQUNsRCxRQUFJLENBQUMsT0FBTyxLQUFLLGVBQWUscUJBQXFCLE1BQU07QUFDekQ7QUFBQSxJQUNGO0FBR0EsU0FBSyxjQUFjO0FBQ25CLFFBQUk7QUFDRixZQUFNLFNBQVMsTUFBTSxJQUFJLGdCQUFnQjtBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxnQkFBZ0IsS0FBSztBQUFBLE1BQ3ZCLENBQUM7QUFJRCxVQUFJLE9BQU8sV0FBVztBQUNwQixjQUFNLEtBQUssdUJBQXVCO0FBQUEsTUFDcEM7QUFBQSxJQUNGLFVBQUU7QUFDQSxXQUFLLGNBQWM7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,120 @@
1
+ /// <reference path="../../library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Component that offers settings this plugin used to own to the plugin that owns them now, once, through
6
+ * that plugin's public API.
7
+ *
8
+ * This is the other half of {@link obsidian/components/plugin-suggestion-component!PluginSuggestionComponent}.
9
+ * The suggestion asks the user to install the plugin that took a feature over; this carries the settings they
10
+ * had configured for it across, so taking the suggestion does not mean re-entering everything by hand.
11
+ *
12
+ * A proposing plugin never writes into another plugin's `data.json`. It PROPOSES: the other plugin owns the
13
+ * settings, so it owns the dialog, and the user approves, edits or declines. Only an applied migration retires
14
+ * the pending values.
15
+ *
16
+ * The offer is made whenever it CAN succeed, which needs two independent things to have happened — the
17
+ * provider's API being available, and this plugin's own settings having arrived from disk. Either can land
18
+ * first, so both edges are wired and each re-reads the current state rather than assuming the other has
19
+ * already happened.
20
+ */
21
+ import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
22
+ import type { Promisable } from 'type-fest' with { 'resolution-mode': 'import' };
23
+ import type { PluginApiContract } from '../plugin/plugin-api.cjs';
24
+ import type { PluginSettingsComponentBase } from './plugin-settings-component.cjs';
25
+ import { ComponentEx } from './component-ex.cjs';
26
+ /**
27
+ * Parameters for the {@link SettingsMigrationComponent} constructor.
28
+ *
29
+ * @typeParam TMigratableSettings - The settings this plugin may hand over.
30
+ */
31
+ export interface SettingsMigrationComponentConstructorParams<TMigratableSettings extends object> {
32
+ /**
33
+ * The semver range of contract versions this plugin compiled against, e.g. `'^1'`.
34
+ *
35
+ * @remarks
36
+ * Evaluated by `compare-versions`, which does NOT accept a bare `*`. Spell "any version" as `'>=0.0.0'`.
37
+ */
38
+ readonly apiVersionRange: string;
39
+ /**
40
+ * The Obsidian app instance.
41
+ */
42
+ readonly app: App;
43
+ /**
44
+ * The contract this plugin expects of the provider, which wins over the provider's own when supplied.
45
+ *
46
+ * Worth supplying, and worth keeping NARROW. A migration usually needs one method that has existed since the
47
+ * provider's first contract version, while the same plugin may read other parts of that API through a much
48
+ * newer one. Declaring the wider expectation here would refuse to offer the migration to a user on an older
49
+ * provider — which is precisely the user who still has settings to migrate.
50
+ */
51
+ readonly contract?: PluginApiContract;
52
+ /**
53
+ * Reads the values currently waiting to be handed over.
54
+ *
55
+ * Called afresh on every edge rather than once, so an implementation simply reads its plugin's settings.
56
+ * Return `null` when there is nothing pending — after a migration has been applied, or on a vault that never
57
+ * had these settings configured.
58
+ *
59
+ * @returns The values to propose, or `null` when there is nothing to offer.
60
+ */
61
+ getProposedSettings(this: void): null | TMigratableSettings;
62
+ /**
63
+ * The settings component of the plugin making the proposal.
64
+ *
65
+ * Taken as a whole component rather than as a bare "ready" flag so the host cannot forget to wire the wait:
66
+ * whatever {@link getProposedSettings} reads is meaningless until this component has read `data.json`.
67
+ */
68
+ readonly pluginSettingsComponent: PluginSettingsComponentBase<object>;
69
+ /**
70
+ * The `manifest.id` of the plugin that owns these settings now, as listed in Obsidian's community plugin
71
+ * registry.
72
+ */
73
+ readonly providerPluginId: string;
74
+ /**
75
+ * Records that the pending values have been handed over, so the offer is not made again.
76
+ *
77
+ * Called ONLY when the user actually applied the migration.
78
+ *
79
+ * @returns A {@link Promise} that resolves once the retirement is persisted.
80
+ *
81
+ * @remarks
82
+ * An implementation must PERSIST the retirement — `pluginSettingsComponent.editAndSave(…)`, not
83
+ * `setProperty(…)`. The latter only edits the in-memory state, so the retirement is forgotten on the next
84
+ * reload and the migration is offered again forever.
85
+ */
86
+ retireProposedSettings(this: void): Promisable<void>;
87
+ /**
88
+ * The `manifest.id` of the plugin making the proposal, so the provider's dialog can say whose settings these
89
+ * are.
90
+ */
91
+ readonly sourcePluginId: string;
92
+ }
93
+ /**
94
+ * Offers settings this plugin used to own to the plugin that owns them now.
95
+ *
96
+ * @typeParam TMigratableSettings - The settings this plugin may hand over.
97
+ */
98
+ export declare class SettingsMigrationComponent<TMigratableSettings extends object> extends ComponentEx {
99
+ private readonly apiVersionRange;
100
+ private readonly app;
101
+ private readonly contract;
102
+ private readonly getProposedSettings;
103
+ private isProposing;
104
+ private readonly pluginSettingsComponent;
105
+ private readonly providerPluginId;
106
+ private readonly retireProposedSettings;
107
+ private readonly sourcePluginId;
108
+ /**
109
+ * Creates an instance of {@link SettingsMigrationComponent}.
110
+ *
111
+ * @param params - The constructor parameters.
112
+ */
113
+ constructor(params: SettingsMigrationComponentConstructorParams<TMigratableSettings>);
114
+ /**
115
+ * Loads the component, wiring both edges that can make an offer possible.
116
+ */
117
+ onload(): void;
118
+ private handleChange;
119
+ private propose;
120
+ }
@@ -192,4 +192,4 @@ function getSeamFunction(name) {
192
192
  typeIntoEditor,
193
193
  unhoverElement
194
194
  });
195
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTW9iaWxlLW9ubHkgdHJ1c3RlZCBpbnB1dCBoZWxwZXJzLiBUaGVyZSBpcyBubyBpbi1yZW5kZXJlciByb3V0ZSB0byBhIHRydXN0ZWQgZXZlbnQgb24gYSBwaG9uZSBcdTIwMTRcbiAqIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGAgaXMgRWxlY3Ryb24tb25seSBhbmQgYSBkaXNwYXRjaGVkIGV2ZW50IGlzIHVudHJ1c3RlZCBcdTIwMTQgc28gdGhlIGluamVjdGlvblxuICogaGFzIHRvIGJlIGEgcm91bmQtdHJpcDogdGhlIHJlcXVlc3QgZ29lcyB0byB0aGUgaG9zdCBvdmVyIHRoZSBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgaGFybmVzcydzXG4gKiBiaW5kaW5nIGNoYW5uZWwsIGFuZCB0aGUgaG9zdCBpbmplY3RzIGl0IGludG8gdGhlIFdlYlZpZXcgb3ZlciBDRFAuXG4gKlxuICogVGhhdCBjaGFubmVsIGlzIGluc3RhbGxlZCBieSB0aGUgaGFybmVzcydzIEFwcGl1bSB0cmFuc3BvcnQsIHNvIHRoZXNlIGhlbHBlcnMgKipkZWxlZ2F0ZSoqIHRvIHRoZVxuICogaGFybmVzcyByYXRoZXIgdGhhbiByZWltcGxlbWVudGluZyB0aGUgd2lyZSBmb3JtYXQ6IHRoZXkgY2FsbFxuICogYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRydXN0ZWRJbnB1dC4qYCwgd2hpY2ggaG9sZHMgdGhlIHZlcnkgZnVuY3Rpb24gb2JqZWN0cyB0aGUgaGFybmVzc1xuICogc2VlZHMgaW50byBhbiBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmUncyBgbGliYCBiYWcuIERlbGVnYXRpbmcgaXMgd2hhdCBrZWVwcyB0aGUgbW9iaWxlIHNlbWFudGljcyBcdTIwMTRcbiAqIHRhcCwgbG9uZy1wcmVzcyBmb3IgYGJ1dHRvbjogJ3JpZ2h0J2AsIGEgdGhyb3cgZm9yIGAnbWlkZGxlJ2AsIHRoZSBgcHJlc3NLZXlgIGtleSBzZXQsIGFuZCB0aGUgdGhyb3dzXG4gKiBmb3IgdGhlIGA6aG92ZXJgIGhlbHBlcnMgXHUyMDE0IGlkZW50aWNhbCB0byB0aGUgaGFybmVzcydzIG93biBjb3B5IGZvciBmcmVlLCBpbnN0ZWFkIG9mIGEgc2Vjb25kXG4gKiBpbXBsZW1lbnRhdGlvbiB0byBoYW5kLXN5bmMgKHNlZSB0aGUgcHJvamVjdCBgQUdFTlRTLm1kYCAqKkw0KiopLlxuICpcbiAqIFRoZSBuYW1lc3BhY2Ugc2hhcGUgaXMgZGVjbGFyZWQgKipsb2NhbGx5Kio6IHRoZSBoYXJuZXNzIG11c3QgbmV2ZXIgYmUgYSBkZXBlbmRlbmN5IG9mIHRoaXMgbGlicmFyeSwgaW5cbiAqIGVpdGhlciBkaXJlY3Rpb24sIGF0IHJ1bnRpbWUgb3IgaW4gdHlwZXMuXG4gKlxuICogKipDb25zZXF1ZW5jZSwgYW5kIGl0IGlzIGRlbGliZXJhdGU6KiogdGhlc2UgaGVscGVycyBvbmx5IHdvcmsgaW5zaWRlIGFuIGFwcCB0aGUgaGFybmVzcyBib290c3RyYXBwZWQuXG4gKiBPdXRzaWRlIG9uZSB0aGV5IHRocm93IGEgbWVzc2FnZSBzYXlpbmcgc28sIHJhdGhlciB0aGFuIHNpbGVudGx5IGRvaW5nIG5vdGhpbmcgXHUyMDE0IGEgbm8tb3Agd291bGQgcmVjcmVhdGVcbiAqIGV4YWN0bHkgdGhlIGZhbHNlLWNvbmZpZGVuY2UgZmFpbHVyZSB0cnVzdGVkIGlucHV0IGV4aXN0cyB0byBlbmQuIENvbnN1bWVycyB3YW50aW5nIHRoZSBwbGF0Zm9ybS1jb3JyZWN0XG4gKiBoZWxwZXIgc2hvdWxkIGltcG9ydCB0aGUge0BsaW5rIC4uL3RydXN0ZWQtaW5wdXQudHMgfCB0cnVzdGVkLWlucHV0fSBmYWNhZGUgaW5zdGVhZCBvZiB0aGlzIG1vZHVsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIFByZXNzS2V5UGFyYW1zLFxuICBUeXBlSW50b0VkaXRvclBhcmFtcyxcbiAgVW5ob3ZlckVsZW1lbnRQYXJhbXNcbiAgLy8gVGhlIHBhcmFtZXRlciBjb250cmFjdHMgbGl2ZSB3aXRoIHRoZSBkZXNrdG9wIHR3aW4gYW5kIGFyZSBzaGFyZWQgdmVyYmF0aW0sIHNvIHRoZSB0d28gcGxhdGZvcm1zXG4gIC8vIENhbm5vdCBkcmlmdCBhcGFydCBvbiB3aGF0IGEgY2FsbGVyIHBhc3Nlcy4gQSB0eXBlLW9ubHkgaW1wb3J0IGxvYWRzIG5vdGhpbmcgKEw1KS5cbn0gZnJvbSAnLi9kZXNrdG9wLXRydXN0ZWQtaW5wdXQudHMnO1xuXG4vKipcbiAqIFRoZSBnbG9iYWwgdGhlIGhhcm5lc3MgYm9vdHN0cmFwcyBpdHMgbmFtZXNwYWNlIG9udG8uXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIHRoZSBoYXJuZXNzIG5hbWVzcGFjZSB0aGlzIG1vZHVsZSByZWFkcy4gRXZlcnl0aGluZyBlbHNlIG9uIGl0IGlzIG5vbmUgb2YgdGhpcyBtb2R1bGUnc1xuICogYnVzaW5lc3MuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSB7XG4gIHRydXN0ZWRJbnB1dD86IFBhcnRpYWw8VHJ1c3RlZElucHV0U2VhbT47XG59XG5cbi8qKlxuICogVGhlIHRydXN0ZWQtaW5wdXQgc2VhbSB0aGUgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgIGhhcm5lc3MgcHVibGlzaGVzIG9uIGl0cyBuYW1lc3BhY2UuXG4gKlxuICogRGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZDogdGhlIGhhcm5lc3MgaXMgbm90IGEgZGVwZW5kZW5jeSBvZiB0aGlzIGxpYnJhcnkuIEl0IG1pcnJvcnNcbiAqIGBuYW1lc3BhY2UtYm9vdHN0cmFwLnRzYCdzIGB0cnVzdGVkSW5wdXRgIG9iamVjdCwgYW5kIHRoZSBtaXJyb3JpbmcgaXMgYnkgaGFuZCBcdTIwMTQgdGhlIHNhbWVcbiAqIGJlaGF2aW9yYWwtc3luYyBvYmxpZ2F0aW9uIHRoZSBkZXNrdG9wIHR3aW4gY2Fycmllcy5cbiAqL1xuaW50ZXJmYWNlIFRydXN0ZWRJbnB1dFNlYW0ge1xuICBjbGlja0VsZW1lbnQocGFyYW1zOiBDbGlja0VsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBjbGlja01vdXNlKHBhcmFtczogQ2xpY2tNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIGhvdmVyRWxlbWVudChwYXJhbXM6IEhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIG1vdmVNb3VzZShwYXJhbXM6IE1vdmVNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIHByZXNzS2V5KHBhcmFtczogUHJlc3NLZXlQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgdW5ob3ZlckVsZW1lbnQocGFyYW1zOiBVbmhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2xpY2tzIHRoZSBjZW50ZXIgb2YgYW4gZWxlbWVudCB1c2luZyAqKnRydXN0ZWQqKiB0b3VjaCBpbnB1dCBcdTIwMTQgYSBDRFAgdGFwIGluIHRoZSBXZWJWaWV3LCBpbmplY3RlZCBieVxuICogdGhlIGhvc3QuXG4gKlxuICogVGhlIGVsZW1lbnQtcmVsYXRpdmUgY291bnRlcnBhcnQgb2Yge0BsaW5rIGNsaWNrTW91c2V9LiBgYnV0dG9uOiAncmlnaHQnYCBpcyB0aGUgbG9uZy1wcmVzcyB0aGF0IG9wZW5zXG4gKiBPYnNpZGlhbiBNb2JpbGUncyBjb250ZXh0IG1lbnU7IGAnbWlkZGxlJ2AgdGhyb3dzLCBiZWNhdXNlIHRvdWNoIGhhcyBubyBnZXN0dXJlIGZvciBpdCBhbmQgaW52ZW50aW5nXG4gKiBvbmUgd291bGQgYmUgd29yc2UgdGhhbiBzYXlpbmcgc28uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGNsaWNrLCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2tFbGVtZW50KHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignY2xpY2tFbGVtZW50JykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBDbGlja3MgYXQgdGhlIGdpdmVuIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHVzaW5nICoqdHJ1c3RlZCoqIHRvdWNoIGlucHV0LCBpbmplY3RlZCBieSB0aGUgaG9zdCBvdmVyIENEUC5cbiAqXG4gKiBUaGUgY29vcmRpbmF0ZXMgYXJlIENTUyBwaXhlbHMgaW4gdGhlIFdlYlZpZXcncyBvd24gdmlld3BvcnQgXHUyMDE0IHdoaWNoIGlzIHdoYXQgQ0RQIHRha2VzIFx1MjAxNCBzb1xuICogYGRldmljZVBpeGVsUmF0aW9gIG5ldmVyIGVudGVycyB0aGUgcGljdHVyZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHRvIGNsaWNrIGF0LCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2tNb3VzZShwYXJhbXM6IENsaWNrTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCdjbGlja01vdXNlJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzOiBgOmhvdmVyYCBoYXMgbm8gdG91Y2ggZXF1aXZhbGVudC5cbiAqXG4gKiBBIHNpbGVudCBuby1vcCBoZXJlIHdvdWxkIGxldCBhIGhvdmVyIHRlc3QgcGFzcyBvbiBhIHBob25lIHdpdGhvdXQgaG92ZXJpbmcgYW55dGhpbmcsIHNvIHRoZSBtb2JpbGUgYXJtXG4gKiByZWZ1c2VzIGluc3RlYWQuIEdhdGUgdGhlIGFzc2VydGlvbiBvbiBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYCwgb3IgZHJpdmUgdGhlIGVsZW1lbnQgd2l0aFxuICoge0BsaW5rIGNsaWNrRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGhvdmVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcyBcdTIwMTQgdGhlIGNhbGwgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaG92ZXJFbGVtZW50KHBhcmFtczogSG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignaG92ZXJFbGVtZW50JykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzOiBhIHRvdWNoIHNjcmVlbiBoYXMgbm8gcGVyc2lzdGVudCBwb2ludGVyIHRvIG1vdmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcyB0byBtb3ZlIHRvLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcyBcdTIwMTQgdGhlIGNhbGwgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbW92ZU1vdXNlKHBhcmFtczogTW92ZU1vdXNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignbW92ZU1vdXNlJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBQcmVzc2VzIGEgc2luZ2xlIGtleSB1c2luZyAqKnRydXN0ZWQqKiBrZXlib2FyZCBpbnB1dCwgaW5qZWN0ZWQgYnkgdGhlIGhvc3Qgb3ZlciBDRFAuXG4gKlxuICogTmFtZWQga2V5cyAoYCdFbnRlcidgLCBgJ0VzY2FwZSdgLCBgJ1RhYidgLCBgJ0JhY2tzcGFjZSdgLCBgJ0RlbGV0ZSdgLCB0aGUgYXJyb3dzKSBhbmQgc2luZ2xlIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkOyBhbnl0aGluZyBlbHNlIHRocm93cyByYXRoZXIgdGhhbiBwcmVzc2luZyBub3RoaW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUga2V5IHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleSBwcmVzcyBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXNzS2V5KHBhcmFtczogUHJlc3NLZXlQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCdwcmVzc0tleScpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciBlZGl0b3IgdXNpbmcgKip0cnVzdGVkKioga2V5Ym9hcmQgaW5wdXQsIGluamVjdGVkIGJ5IHRoZSBob3N0IG92ZXIgQ0RQLlxuICpcbiAqIEZvY3VzZXMgdGhlIGVkaXRvciAoY2FyZXQgdG8gdGhlIGVuZCksIHByZXNzZXMgZXZlcnkgY29kZSBwb2ludCBvZiB0aGUgdGV4dCwgdGhlbiBwb2xscyB1bnRpbCB0aGVcbiAqIGRvY3VtZW50IHJlZmxlY3RzIHRoZSBpbnB1dCBvciBhIGJvdW5kZWQgdGltZW91dCBlbGFwc2VzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5c3Ryb2tlcyBoYXZlIHNldHRsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbigndHlwZUludG9FZGl0b3InKShwYXJhbXMpO1xufVxuXG4vKipcbiAqIEFsd2F5cyB0aHJvd3MsIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIGhvdmVyRWxlbWVudH06IHRoZXJlIGlzIG5vIGA6aG92ZXJgIHN0YXRlIHRvIGNsZWFyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgbmV2ZXIgcmVzb2x2ZXMgXHUyMDE0IHRoZSBjYWxsIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuaG92ZXJFbGVtZW50KHBhcmFtczogVW5ob3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCd1bmhvdmVyRWxlbWVudCcpKHBhcmFtcyk7XG59XG5cbmZ1bmN0aW9uIGdldFNlYW1GdW5jdGlvbjxLZXkgZXh0ZW5kcyBrZXlvZiBUcnVzdGVkSW5wdXRTZWFtPihuYW1lOiBLZXkpOiBUcnVzdGVkSW5wdXRTZWFtW0tleV0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBUaGUgaGFybmVzcyBpbnN0YWxscyBpdHMgbmFtZXNwYWNlIG9uIHRoZSByZWFsbSBnbG9iYWw7IHRoZXJlIGlzIG5vd2hlcmUgZWxzZSB0byByZWFkIGl0IGZyb20uXG4gIGNvbnN0IGhvbGRlciA9IGdsb2JhbFRoaXMgYXMgUGFydGlhbDxPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlcj47XG4gIGNvbnN0IHNlYW1GdW5jdGlvbiA9IGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cnVzdGVkSW5wdXQ/LltuYW1lXTtcbiAgaWYgKCFzZWFtRnVuY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVHJ1c3RlZCBpbnB1dCBpcyB1bmF2YWlsYWJsZSBvbiBtb2JpbGU6IFxcYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRydXN0ZWRJbnB1dC4ke25hbWV9XFxgIGlzIG5vdCBpbnN0YWxsZWQuIGBcbiAgICAgICAgKyAnQSBwaG9uZSBoYXMgbm8gaW4tcmVuZGVyZXIgcm91dGUgdG8gYSB0cnVzdGVkIGV2ZW50LCBzbyB0aGUgaW5qZWN0aW9uIGlzIGEgcm91bmQtdHJpcCB0byB0aGUgaG9zdCBvdmVyIHRoZSAnXG4gICAgICAgICsgJ2BvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nYCBBcHBpdW0gdHJhbnNwb3J0XFwncyBjaGFubmVsIFx1MjAxNCB3aGljaCBtZWFucyB0aGVzZSBoZWxwZXJzIG9ubHkgd29yayBpbnNpZGUgYW4gYXBwIHRoYXQgJ1xuICAgICAgICArICdoYXJuZXNzIGJvb3RzdHJhcHBlZC4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzZWFtRnVuY3Rpb247XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdGQSxlQUFzQixhQUFhLFFBQTJDO0FBQzVFLFFBQU0sZ0JBQWdCLGNBQWMsRUFBRSxNQUFNO0FBQzlDO0FBV0EsZUFBc0IsV0FBVyxRQUF5QztBQUN4RSxRQUFNLGdCQUFnQixZQUFZLEVBQUUsTUFBTTtBQUM1QztBQVlBLGVBQXNCLGFBQWEsUUFBMkM7QUFDNUUsUUFBTSxnQkFBZ0IsY0FBYyxFQUFFLE1BQU07QUFDOUM7QUFRQSxlQUFzQixVQUFVLFFBQXdDO0FBQ3RFLFFBQU0sZ0JBQWdCLFdBQVcsRUFBRSxNQUFNO0FBQzNDO0FBV0EsZUFBc0IsU0FBUyxRQUF1QztBQUNwRSxRQUFNLGdCQUFnQixVQUFVLEVBQUUsTUFBTTtBQUMxQztBQVdBLGVBQXNCLGVBQWUsUUFBNkM7QUFDaEYsUUFBTSxnQkFBZ0IsZ0JBQWdCLEVBQUUsTUFBTTtBQUNoRDtBQVFBLGVBQXNCLGVBQWUsUUFBNkM7QUFDaEYsUUFBTSxnQkFBZ0IsZ0JBQWdCLEVBQUUsTUFBTTtBQUNoRDtBQUVBLFNBQVMsZ0JBQW9ELE1BQWtDO0FBRTdGLFFBQU0sU0FBUztBQUNmLFFBQU0sZUFBZSxPQUFPLDhCQUE4QixlQUFlLElBQUk7QUFDN0UsTUFBSSxDQUFDLGNBQWM7QUFDakIsVUFBTSxJQUFJO0FBQUEsTUFDUiw4RkFBOEYsSUFBSTtBQUFBLElBSXBHO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
195
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTW9iaWxlLW9ubHkgdHJ1c3RlZCBpbnB1dCBoZWxwZXJzLiBUaGVyZSBpcyBubyBpbi1yZW5kZXJlciByb3V0ZSB0byBhIHRydXN0ZWQgZXZlbnQgb24gYSBwaG9uZSBcdTIwMTRcbiAqIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGAgaXMgRWxlY3Ryb24tb25seSBhbmQgYSBkaXNwYXRjaGVkIGV2ZW50IGlzIHVudHJ1c3RlZCBcdTIwMTQgc28gdGhlIGluamVjdGlvblxuICogaGFzIHRvIGJlIGEgcm91bmQtdHJpcDogdGhlIHJlcXVlc3QgZ29lcyB0byB0aGUgaG9zdCBvdmVyIHRoZSBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgaGFybmVzcydzXG4gKiBiaW5kaW5nIGNoYW5uZWwsIGFuZCB0aGUgaG9zdCBpbmplY3RzIGl0IGludG8gdGhlIFdlYlZpZXcgb3ZlciBDRFAgXHUyMDE0IGFzIGBJbnB1dC5kaXNwYXRjaFRvdWNoRXZlbnRgIGZvclxuICogYSB0YXAgYnV0IGBJbnB1dC5zeW50aGVzaXplVGFwR2VzdHVyZWAgZm9yIGEgbG9uZy1wcmVzcywgYmVjYXVzZSBgZGlzcGF0Y2hUb3VjaEV2ZW50YCBpbmplY3RzIHBhc3RcbiAqIEFuZHJvaWQncyBnZXN0dXJlIHJlY29nbml6ZXIgYW5kIHNvIGlzIGNsYXNzaWZpZWQgYXMgYSB0YXAgYXQgYW55IGR3ZWxsLlxuICpcbiAqIFRoYXQgY2hhbm5lbCBpcyBpbnN0YWxsZWQgYnkgdGhlIGhhcm5lc3MncyBBcHBpdW0gdHJhbnNwb3J0LCBzbyB0aGVzZSBoZWxwZXJzICoqZGVsZWdhdGUqKiB0byB0aGVcbiAqIGhhcm5lc3MgcmF0aGVyIHRoYW4gcmVpbXBsZW1lbnRpbmcgdGhlIHdpcmUgZm9ybWF0OiB0aGV5IGNhbGxcbiAqIGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy50cnVzdGVkSW5wdXQuKmAsIHdoaWNoIGhvbGRzIHRoZSB2ZXJ5IGZ1bmN0aW9uIG9iamVjdHMgdGhlIGhhcm5lc3NcbiAqIHNlZWRzIGludG8gYW4gYGV2YWxJbk9ic2lkaWFuYCBjbG9zdXJlJ3MgYGxpYmAgYmFnLiBEZWxlZ2F0aW5nIGlzIHdoYXQga2VlcHMgdGhlIG1vYmlsZSBzZW1hbnRpY3MgXHUyMDE0XG4gKiB0YXAsIGxvbmctcHJlc3MgZm9yIGBidXR0b246ICdyaWdodCdgLCBhIHRocm93IGZvciBgJ21pZGRsZSdgLCB0aGUgYHByZXNzS2V5YCBrZXkgc2V0LCBhbmQgdGhlIHRocm93c1xuICogZm9yIHRoZSBgOmhvdmVyYCBoZWxwZXJzIFx1MjAxNCBpZGVudGljYWwgdG8gdGhlIGhhcm5lc3MncyBvd24gY29weSBmb3IgZnJlZSwgaW5zdGVhZCBvZiBhIHNlY29uZFxuICogaW1wbGVtZW50YXRpb24gdG8gaGFuZC1zeW5jIChzZWUgdGhlIHByb2plY3QgYEFHRU5UUy5tZGAgKipMNCoqKS5cbiAqXG4gKiBUaGUgbmFtZXNwYWNlIHNoYXBlIGlzIGRlY2xhcmVkICoqbG9jYWxseSoqOiB0aGUgaGFybmVzcyBtdXN0IG5ldmVyIGJlIGEgZGVwZW5kZW5jeSBvZiB0aGlzIGxpYnJhcnksIGluXG4gKiBlaXRoZXIgZGlyZWN0aW9uLCBhdCBydW50aW1lIG9yIGluIHR5cGVzLlxuICpcbiAqICoqQ29uc2VxdWVuY2UsIGFuZCBpdCBpcyBkZWxpYmVyYXRlOioqIHRoZXNlIGhlbHBlcnMgb25seSB3b3JrIGluc2lkZSBhbiBhcHAgdGhlIGhhcm5lc3MgYm9vdHN0cmFwcGVkLlxuICogT3V0c2lkZSBvbmUgdGhleSB0aHJvdyBhIG1lc3NhZ2Ugc2F5aW5nIHNvLCByYXRoZXIgdGhhbiBzaWxlbnRseSBkb2luZyBub3RoaW5nIFx1MjAxNCBhIG5vLW9wIHdvdWxkIHJlY3JlYXRlXG4gKiBleGFjdGx5IHRoZSBmYWxzZS1jb25maWRlbmNlIGZhaWx1cmUgdHJ1c3RlZCBpbnB1dCBleGlzdHMgdG8gZW5kLiBDb25zdW1lcnMgd2FudGluZyB0aGUgcGxhdGZvcm0tY29ycmVjdFxuICogaGVscGVyIHNob3VsZCBpbXBvcnQgdGhlIHtAbGluayAuLi90cnVzdGVkLWlucHV0LnRzIHwgdHJ1c3RlZC1pbnB1dH0gZmFjYWRlIGluc3RlYWQgb2YgdGhpcyBtb2R1bGUuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDbGlja0VsZW1lbnRQYXJhbXMsXG4gIENsaWNrTW91c2VQYXJhbXMsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBQcmVzc0tleVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zXG4gIC8vIFRoZSBwYXJhbWV0ZXIgY29udHJhY3RzIGxpdmUgd2l0aCB0aGUgZGVza3RvcCB0d2luIGFuZCBhcmUgc2hhcmVkIHZlcmJhdGltLCBzbyB0aGUgdHdvIHBsYXRmb3Jtc1xuICAvLyBDYW5ub3QgZHJpZnQgYXBhcnQgb24gd2hhdCBhIGNhbGxlciBwYXNzZXMuIEEgdHlwZS1vbmx5IGltcG9ydCBsb2FkcyBub3RoaW5nIChMNSkuXG59IGZyb20gJy4vZGVza3RvcC10cnVzdGVkLWlucHV0LnRzJztcblxuLyoqXG4gKiBUaGUgZ2xvYmFsIHRoZSBoYXJuZXNzIGJvb3RzdHJhcHMgaXRzIG5hbWVzcGFjZSBvbnRvLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nOiBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBUaGUgcGFydCBvZiB0aGUgaGFybmVzcyBuYW1lc3BhY2UgdGhpcyBtb2R1bGUgcmVhZHMuIEV2ZXJ5dGhpbmcgZWxzZSBvbiBpdCBpcyBub25lIG9mIHRoaXMgbW9kdWxlJ3NcbiAqIGJ1c2luZXNzLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2Uge1xuICB0cnVzdGVkSW5wdXQ/OiBQYXJ0aWFsPFRydXN0ZWRJbnB1dFNlYW0+O1xufVxuXG4vKipcbiAqIFRoZSB0cnVzdGVkLWlucHV0IHNlYW0gdGhlIGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nYCBoYXJuZXNzIHB1Ymxpc2hlcyBvbiBpdHMgbmFtZXNwYWNlLlxuICpcbiAqIERlY2xhcmVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQ6IHRoZSBoYXJuZXNzIGlzIG5vdCBhIGRlcGVuZGVuY3kgb2YgdGhpcyBsaWJyYXJ5LiBJdCBtaXJyb3JzXG4gKiBgbmFtZXNwYWNlLWJvb3RzdHJhcC50c2AncyBgdHJ1c3RlZElucHV0YCBvYmplY3QsIGFuZCB0aGUgbWlycm9yaW5nIGlzIGJ5IGhhbmQgXHUyMDE0IHRoZSBzYW1lXG4gKiBiZWhhdmlvcmFsLXN5bmMgb2JsaWdhdGlvbiB0aGUgZGVza3RvcCB0d2luIGNhcnJpZXMuXG4gKi9cbmludGVyZmFjZSBUcnVzdGVkSW5wdXRTZWFtIHtcbiAgY2xpY2tFbGVtZW50KHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgY2xpY2tNb3VzZShwYXJhbXM6IENsaWNrTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBob3ZlckVsZW1lbnQocGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBtb3ZlTW91c2UocGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBwcmVzc0tleShwYXJhbXM6IFByZXNzS2V5UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgdHlwZUludG9FZGl0b3IocGFyYW1zOiBUeXBlSW50b0VkaXRvclBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIHVuaG92ZXJFbGVtZW50KHBhcmFtczogVW5ob3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIENsaWNrcyB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKiogdG91Y2ggaW5wdXQsIGluamVjdGVkIGludG8gdGhlIFdlYlZpZXcgYnkgdGhlIGhvc3RcbiAqIG92ZXIgQ0RQLlxuICpcbiAqIFRoZSBlbGVtZW50LXJlbGF0aXZlIGNvdW50ZXJwYXJ0IG9mIHtAbGluayBjbGlja01vdXNlfS4gYGJ1dHRvbjogJ3JpZ2h0J2AgaXMgdGhlIGxvbmctcHJlc3MgdGhhdCBvcGVuc1xuICogT2JzaWRpYW4gTW9iaWxlJ3MgY29udGV4dCBtZW51OyBgJ21pZGRsZSdgIHRocm93cywgYmVjYXVzZSB0b3VjaCBoYXMgbm8gZ2VzdHVyZSBmb3IgaXQgYW5kIGludmVudGluZ1xuICogb25lIHdvdWxkIGJlIHdvcnNlIHRoYW4gc2F5aW5nIHNvLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBjbGljaywgdGhlIGJ1dHRvbiB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGljayBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaWNrRWxlbWVudChwYXJhbXM6IENsaWNrRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ2NsaWNrRWxlbWVudCcpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogQ2xpY2tzIGF0IHRoZSBnaXZlbiB2aWV3cG9ydCBjb29yZGluYXRlcyB1c2luZyAqKnRydXN0ZWQqKiB0b3VjaCBpbnB1dCwgaW5qZWN0ZWQgYnkgdGhlIGhvc3Qgb3ZlciBDRFAuXG4gKlxuICogVGhlIGNvb3JkaW5hdGVzIGFyZSBDU1MgcGl4ZWxzIGluIHRoZSBXZWJWaWV3J3Mgb3duIHZpZXdwb3J0IFx1MjAxNCB3aGljaCBpcyB3aGF0IENEUCB0YWtlcyBcdTIwMTQgc29cbiAqIGBkZXZpY2VQaXhlbFJhdGlvYCBuZXZlciBlbnRlcnMgdGhlIHBpY3R1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcyB0byBjbGljayBhdCwgdGhlIGJ1dHRvbiB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGljayBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaWNrTW91c2UocGFyYW1zOiBDbGlja01vdXNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignY2xpY2tNb3VzZScpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogQWx3YXlzIHRocm93czogYDpob3ZlcmAgaGFzIG5vIHRvdWNoIGVxdWl2YWxlbnQuXG4gKlxuICogQSBzaWxlbnQgbm8tb3AgaGVyZSB3b3VsZCBsZXQgYSBob3ZlciB0ZXN0IHBhc3Mgb24gYSBwaG9uZSB3aXRob3V0IGhvdmVyaW5nIGFueXRoaW5nLCBzbyB0aGUgbW9iaWxlIGFybVxuICogcmVmdXNlcyBpbnN0ZWFkLiBHYXRlIHRoZSBhc3NlcnRpb24gb24gYFBsYXRmb3JtLmlzRGVza3RvcEFwcGAsIG9yIGRyaXZlIHRoZSBlbGVtZW50IHdpdGhcbiAqIHtAbGluayBjbGlja0VsZW1lbnR9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBob3Zlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgbmV2ZXIgcmVzb2x2ZXMgXHUyMDE0IHRoZSBjYWxsIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhvdmVyRWxlbWVudChwYXJhbXM6IEhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ2hvdmVyRWxlbWVudCcpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogQWx3YXlzIHRocm93czogYSB0b3VjaCBzY3JlZW4gaGFzIG5vIHBlcnNpc3RlbnQgcG9pbnRlciB0byBtb3ZlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmlld3BvcnQgY29vcmRpbmF0ZXMgdG8gbW92ZSB0by5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgbmV2ZXIgcmVzb2x2ZXMgXHUyMDE0IHRoZSBjYWxsIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1vdmVNb3VzZShwYXJhbXM6IE1vdmVNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ21vdmVNb3VzZScpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgdXNpbmcgKip0cnVzdGVkKioga2V5Ym9hcmQgaW5wdXQsIGluamVjdGVkIGJ5IHRoZSBob3N0IG92ZXIgQ0RQLlxuICpcbiAqIE5hbWVkIGtleXMgKGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYCdCYWNrc3BhY2UnYCwgYCdEZWxldGUnYCwgdGhlIGFycm93cykgYW5kIHNpbmdsZSBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZDsgYW55dGhpbmcgZWxzZSB0aHJvd3MgcmF0aGVyIHRoYW4gcHJlc3Npbmcgbm90aGluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXkgcHJlc3MgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVzc0tleShwYXJhbXM6IFByZXNzS2V5UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbigncHJlc3NLZXknKShwYXJhbXMpO1xufVxuXG4vKipcbiAqIFR5cGVzIHRleHQgaW50byBhIENvZGVNaXJyb3IgZWRpdG9yIHVzaW5nICoqdHJ1c3RlZCoqIGtleWJvYXJkIGlucHV0LCBpbmplY3RlZCBieSB0aGUgaG9zdCBvdmVyIENEUC5cbiAqXG4gKiBGb2N1c2VzIHRoZSBlZGl0b3IgKGNhcmV0IHRvIHRoZSBlbmQpLCBwcmVzc2VzIGV2ZXJ5IGNvZGUgcG9pbnQgb2YgdGhlIHRleHQsIHRoZW4gcG9sbHMgdW50aWwgdGhlXG4gKiBkb2N1bWVudCByZWZsZWN0cyB0aGUgaW5wdXQgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVkaXRvciB0byB0eXBlIGludG8gYW5kIHRoZSB0ZXh0IHRvIHR5cGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleXN0cm9rZXMgaGF2ZSBzZXR0bGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHlwZUludG9FZGl0b3IocGFyYW1zOiBUeXBlSW50b0VkaXRvclBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ3R5cGVJbnRvRWRpdG9yJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBob3ZlckVsZW1lbnR9OiB0aGVyZSBpcyBubyBgOmhvdmVyYCBzdGF0ZSB0byBjbGVhci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IG5ldmVyIHJlc29sdmVzIFx1MjAxNCB0aGUgY2FsbCB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmhvdmVyRWxlbWVudChwYXJhbXM6IFVuaG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbigndW5ob3ZlckVsZW1lbnQnKShwYXJhbXMpO1xufVxuXG5mdW5jdGlvbiBnZXRTZWFtRnVuY3Rpb248S2V5IGV4dGVuZHMga2V5b2YgVHJ1c3RlZElucHV0U2VhbT4obmFtZTogS2V5KTogVHJ1c3RlZElucHV0U2VhbVtLZXldIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvbm8tZ2xvYmFsLXRoaXMgLS0gVGhlIGhhcm5lc3MgaW5zdGFsbHMgaXRzIG5hbWVzcGFjZSBvbiB0aGUgcmVhbG0gZ2xvYmFsOyB0aGVyZSBpcyBub3doZXJlIGVsc2UgdG8gcmVhZCBpdCBmcm9tLlxuICBjb25zdCBob2xkZXIgPSBnbG9iYWxUaGlzIGFzIFBhcnRpYWw8T2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXI+O1xuICBjb25zdCBzZWFtRnVuY3Rpb24gPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8udHJ1c3RlZElucHV0Py5bbmFtZV07XG4gIGlmICghc2VhbUZ1bmN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRydXN0ZWQgaW5wdXQgaXMgdW5hdmFpbGFibGUgb24gbW9iaWxlOiBcXGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy50cnVzdGVkSW5wdXQuJHtuYW1lfVxcYCBpcyBub3QgaW5zdGFsbGVkLiBgXG4gICAgICAgICsgJ0EgcGhvbmUgaGFzIG5vIGluLXJlbmRlcmVyIHJvdXRlIHRvIGEgdHJ1c3RlZCBldmVudCwgc28gdGhlIGluamVjdGlvbiBpcyBhIHJvdW5kLXRyaXAgdG8gdGhlIGhvc3Qgb3ZlciB0aGUgJ1xuICAgICAgICArICdgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgQXBwaXVtIHRyYW5zcG9ydFxcJ3MgY2hhbm5lbCBcdTIwMTQgd2hpY2ggbWVhbnMgdGhlc2UgaGVscGVycyBvbmx5IHdvcmsgaW5zaWRlIGFuIGFwcCB0aGF0ICdcbiAgICAgICAgKyAnaGFybmVzcyBib290c3RyYXBwZWQuJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gc2VhbUZ1bmN0aW9uO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrRkEsZUFBc0IsYUFBYSxRQUEyQztBQUM1RSxRQUFNLGdCQUFnQixjQUFjLEVBQUUsTUFBTTtBQUM5QztBQVdBLGVBQXNCLFdBQVcsUUFBeUM7QUFDeEUsUUFBTSxnQkFBZ0IsWUFBWSxFQUFFLE1BQU07QUFDNUM7QUFZQSxlQUFzQixhQUFhLFFBQTJDO0FBQzVFLFFBQU0sZ0JBQWdCLGNBQWMsRUFBRSxNQUFNO0FBQzlDO0FBUUEsZUFBc0IsVUFBVSxRQUF3QztBQUN0RSxRQUFNLGdCQUFnQixXQUFXLEVBQUUsTUFBTTtBQUMzQztBQVdBLGVBQXNCLFNBQVMsUUFBdUM7QUFDcEUsUUFBTSxnQkFBZ0IsVUFBVSxFQUFFLE1BQU07QUFDMUM7QUFXQSxlQUFzQixlQUFlLFFBQTZDO0FBQ2hGLFFBQU0sZ0JBQWdCLGdCQUFnQixFQUFFLE1BQU07QUFDaEQ7QUFRQSxlQUFzQixlQUFlLFFBQTZDO0FBQ2hGLFFBQU0sZ0JBQWdCLGdCQUFnQixFQUFFLE1BQU07QUFDaEQ7QUFFQSxTQUFTLGdCQUFvRCxNQUFrQztBQUU3RixRQUFNLFNBQVM7QUFDZixRQUFNLGVBQWUsT0FBTyw4QkFBOEIsZUFBZSxJQUFJO0FBQzdFLE1BQUksQ0FBQyxjQUFjO0FBQ2pCLFVBQU0sSUFBSTtBQUFBLE1BQ1IsOEZBQThGLElBQUk7QUFBQSxJQUlwRztBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -5,7 +5,9 @@
5
5
  * Mobile-only trusted input helpers. There is no in-renderer route to a trusted event on a phone —
6
6
  * `webContents.sendInputEvent` is Electron-only and a dispatched event is untrusted — so the injection
7
7
  * has to be a round-trip: the request goes to the host over the `obsidian-integration-testing` harness's
8
- * binding channel, and the host injects it into the WebView over CDP.
8
+ * binding channel, and the host injects it into the WebView over CDP — as `Input.dispatchTouchEvent` for
9
+ * a tap but `Input.synthesizeTapGesture` for a long-press, because `dispatchTouchEvent` injects past
10
+ * Android's gesture recognizer and so is classified as a tap at any dwell.
9
11
  *
10
12
  * That channel is installed by the harness's Appium transport, so these helpers **delegate** to the
11
13
  * harness rather than reimplementing the wire format: they call
@@ -25,8 +27,8 @@
25
27
  */
26
28
  import type { ClickElementParams, ClickMouseParams, HoverElementParams, MoveMouseParams, PressKeyParams, TypeIntoEditorParams, UnhoverElementParams } from './desktop-trusted-input.cjs';
27
29
  /**
28
- * Clicks the center of an element using **trusted** touch input a CDP tap in the WebView, injected by
29
- * the host.
30
+ * Clicks the center of an element using **trusted** touch input, injected into the WebView by the host
31
+ * over CDP.
30
32
  *
31
33
  * The element-relative counterpart of {@link clickMouse}. `button: 'right'` is the long-press that opens
32
34
  * Obsidian Mobile's context menu; `'middle'` throws, because touch has no gesture for it and inventing
@@ -157,7 +157,8 @@ __export(plugin_exports, {
157
157
  "plugin-api": () => plugin_api,
158
158
  "plugin-context": () => plugin_context,
159
159
  "plugin-event-source": () => plugin_event_source,
160
- "plugin-settings-tab": () => plugin_settings_tab
160
+ "plugin-settings-tab": () => plugin_settings_tab,
161
+ "settings-migration-api": () => settings_migration_api
161
162
  });
162
163
  module.exports = __toCommonJS(plugin_exports);
163
164
  var obsidian_plugin_repo_paths = __toESM(__extractDefault(require('./obsidian-plugin-repo-paths.cjs')), 1);
@@ -166,6 +167,7 @@ var plugin_context = __toESM(__extractDefault(require('./plugin-context.cjs')),
166
167
  var plugin_event_source = __toESM(__extractDefault(require('./plugin-event-source.cjs')), 1);
167
168
  var plugin_settings_tab = __toESM(__extractDefault(require('./plugin-settings-tab.cjs')), 1);
168
169
  var plugin = __toESM(__extractDefault(require('./plugin.cjs')), 1);
170
+ var settings_migration_api = __toESM(__extractDefault(require('./settings-migration-api.cjs')), 1);
169
171
  // Annotate the CommonJS export names for ESM import in node:
170
172
  0 && (module.exports = {
171
173
  "obsidian-plugin-repo-paths": null,
@@ -173,6 +175,7 @@ var plugin = __toESM(__extractDefault(require('./plugin.cjs')), 1);
173
175
  "plugin-api": null,
174
176
  "plugin-context": null,
175
177
  "plugin-event-source": null,
176
- "plugin-settings-tab": null
178
+ "plugin-settings-tab": null,
179
+ "settings-migration-api": null
177
180
  });
178
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocycgZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWFwaScgZnJvbSAnLi9wbHVnaW4tYXBpLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tY29udGV4dCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWV2ZW50LXNvdXJjZScgZnJvbSAnLi9wbHVnaW4tZXZlbnQtc291cmNlLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtdGFiJyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWIudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbicgZnJvbSAnLi9wbHVnaW4udHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUEsc0NBQUFBO0FBQUEsRUFBQTtBQUFBLHNCQUFBQztBQUFBLEVBQUEsd0JBQUFDO0FBQUEsRUFBQSw2QkFBQUM7QUFBQSxFQUFBLDZCQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBSiw2QkFBOEM7QUFDOUMsSUFBQUMsYUFBOEI7QUFDOUIsSUFBQUMsaUJBQWtDO0FBQ2xDLElBQUFDLHNCQUF1QztBQUN2QyxJQUFBQyxzQkFBdUM7QUFDdkMsYUFBMEI7IiwKICAibmFtZXMiOiBbIm9ic2lkaWFuLXBsdWdpbi1yZXBvLXBhdGhzIiwgInBsdWdpbi1hcGkiLCAicGx1Z2luLWNvbnRleHQiLCAicGx1Z2luLWV2ZW50LXNvdXJjZSIsICJwbHVnaW4tc2V0dGluZ3MtdGFiIl0KfQo=
181
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocycgZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWFwaScgZnJvbSAnLi9wbHVnaW4tYXBpLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tY29udGV4dCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWV2ZW50LXNvdXJjZScgZnJvbSAnLi9wbHVnaW4tZXZlbnQtc291cmNlLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtdGFiJyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWIudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbicgZnJvbSAnLi9wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ3NldHRpbmdzLW1pZ3JhdGlvbi1hcGknIGZyb20gJy4vc2V0dGluZ3MtbWlncmF0aW9uLWFwaS50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxzQ0FBQUE7QUFBQSxFQUFBO0FBQUEsc0JBQUFDO0FBQUEsRUFBQSx3QkFBQUM7QUFBQSxFQUFBLDZCQUFBQztBQUFBLEVBQUEsNkJBQUFDO0FBQUEsRUFBQSxnQ0FBQUM7QUFBQTtBQUFBO0FBRUEsSUFBQUwsNkJBQThDO0FBQzlDLElBQUFDLGFBQThCO0FBQzlCLElBQUFDLGlCQUFrQztBQUNsQyxJQUFBQyxzQkFBdUM7QUFDdkMsSUFBQUMsc0JBQXVDO0FBQ3ZDLGFBQTBCO0FBQzFCLElBQUFDLHlCQUEwQzsiLAogICJuYW1lcyI6IFsib2JzaWRpYW4tcGx1Z2luLXJlcG8tcGF0aHMiLCAicGx1Z2luLWFwaSIsICJwbHVnaW4tY29udGV4dCIsICJwbHVnaW4tZXZlbnQtc291cmNlIiwgInBsdWdpbi1zZXR0aW5ncy10YWIiLCAic2V0dGluZ3MtbWlncmF0aW9uLWFwaSJdCn0K
@@ -5,3 +5,4 @@ export * as 'plugin-context' from './plugin-context.cjs';
5
5
  export * as 'plugin-event-source' from './plugin-event-source.cjs';
6
6
  export * as 'plugin-settings-tab' from './plugin-settings-tab.cjs';
7
7
  export * as 'plugin' from './plugin.cjs';
8
+ export * as 'settings-migration-api' from './settings-migration-api.cjs';
@@ -0,0 +1,141 @@
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
+
6
+ (function () {
7
+ function ensureBrowserProcess() {
8
+ const browserProcess = {
9
+ browser: true,
10
+ cwd() {
11
+ return '/';
12
+ },
13
+ env: {},
14
+ platform: 'android'
15
+ };
16
+
17
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
18
+ const existingProcess = globalThis.process;
19
+
20
+ if (!existingProcess) {
21
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
22
+ globalThis.process = browserProcess;
23
+ return;
24
+ }
25
+
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+
30
+ const existingProcessRecord = existingProcess;
31
+
32
+ for (const [key, value] of Object.entries(browserProcess)) {
33
+ existingProcessRecord[key] ??= value;
34
+ }
35
+
36
+ existingProcessRecord['browser'] = true;
37
+ }
38
+
39
+ function keepName($unknown) {
40
+ return $unknown;
41
+ }
42
+
43
+ (function initCjs() {
44
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
45
+ const globalThisRecord = globalThis;
46
+ globalThisRecord['__name'] ??= keepName;
47
+ const originalRequire = require;
48
+ if (originalRequire && !originalRequire.__isPatched) {
49
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
50
+ require = Object.assign(
51
+ (id) => requirePatched(id),
52
+ originalRequire,
53
+ {
54
+ __isPatched: true
55
+ }
56
+ );
57
+ }
58
+
59
+ globalThisRecord['__extractDefault'] ??= extractDefault;
60
+
61
+ ensureBrowserProcess();
62
+
63
+ function extractDefault(module) {
64
+ return module && module.__esModule && 'default' in module ? module.default : module;
65
+ }
66
+
67
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
+ '@codemirror/autocomplete',
69
+ '@codemirror/collab',
70
+ '@codemirror/commands',
71
+ '@codemirror/language',
72
+ '@codemirror/lint',
73
+ '@codemirror/search',
74
+ '@codemirror/state',
75
+ '@codemirror/text',
76
+ '@codemirror/view',
77
+ '@lezer/common',
78
+ '@lezer/highlight',
79
+ '@lezer/lr',
80
+ 'obsidian']
81
+ );
82
+
83
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
84
+ '@codemirror/closebrackets',
85
+ '@codemirror/comment',
86
+ '@codemirror/fold',
87
+ '@codemirror/gutter',
88
+ '@codemirror/highlight',
89
+ '@codemirror/history',
90
+ '@codemirror/matchbrackets',
91
+ '@codemirror/panel',
92
+ '@codemirror/rangeset',
93
+ '@codemirror/rectangular-selection',
94
+ '@codemirror/stream-parser',
95
+ '@codemirror/tooltip']
96
+ );
97
+
98
+ function requirePatched(id) {
99
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
100
+ return originalRequire?.(id);
101
+ }
102
+
103
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
104
+ if (globalThis.app.isMobile) {
105
+ if (id === 'process' || id === 'node:process') {
106
+ // eslint-disable-next-line no-console -- Valid usage.
107
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
108
+
109
+ return process;
110
+ }
111
+ } else {
112
+ const module = originalRequire?.(id);
113
+ if (module) {
114
+ return extractDefault(module);
115
+ }
116
+ }
117
+
118
+ // eslint-disable-next-line no-console -- Valid usage.
119
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
120
+ return {};
121
+ }
122
+ })();
123
+ })();
124
+
125
+ "use strict";
126
+ var __defProp = Object.defineProperty;
127
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
128
+ var __getOwnPropNames = Object.getOwnPropertyNames;
129
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
130
+ var __copyProps = (to, from, except, desc) => {
131
+ if (from && typeof from === "object" || typeof from === "function") {
132
+ for (let key of __getOwnPropNames(from))
133
+ if (!__hasOwnProp.call(to, key) && key !== except)
134
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
135
+ }
136
+ return to;
137
+ };
138
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
139
+ var settings_migration_api_exports = {};
140
+ module.exports = __toCommonJS(settings_migration_api_exports);
141
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9zZXR0aW5ncy1taWdyYXRpb24tYXBpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGdlbmVyaWMgaGFsZiBvZiBhIHNldHRpbmdzIEhBTkRPVkVSIGNvbnRyYWN0OiBvbmUgcGx1Z2luIG9mZmVycyBhbm90aGVyIHRoZSBzZXR0aW5ncyBpdCB1c2VkIHRvIG93bixcbiAqIGFuZCB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGVtIG5vdyBkZWNpZGVzIHdoYXQgdG8gZG8gd2l0aCB0aGUgb2ZmZXIuXG4gKlxuICogVGhlIHNoYXBlIGJlbG93IGlzIGRlbGliZXJhdGVseSB0aGUgKmVudmVsb3BlKiBhbmQgbm90aGluZyBlbHNlLiBBIGhhbmRvdmVyIGhhcyB0aHJlZSBwYXJ0cywgYW5kIG9ubHkgb25lXG4gKiBvZiB0aGVtIGlzIGdlbmVyaWM6XG4gKlxuICogLSBUaGUgKiplbnZlbG9wZSoqIFx1MjAxNCBhIGBtaWdyYXRlU2V0dGluZ3NgIGNhbGwsIHdobyBpcyBwcm9wb3NpbmcsIGFuZCB3aGV0aGVyIHRoZSB1c2VyIGFwcGxpZWQgaXQuIElkZW50aWNhbFxuICogICBmb3IgZXZlcnkgcGFpciBvZiBwbHVnaW5zLCBzbyBpdCBsaXZlcyBoZXJlLlxuICogLSBUaGUgKipwYXlsb2FkKiogXHUyMDE0IHdoaWNoIHNldHRpbmdzIGFyZSBiZWluZyBwcm9wb3NlZC4gRW50aXJlbHkgdGhlIHBhaXIncyBvd24gYnVzaW5lc3MsIHNvIGl0IHN0YXlzIGEgdHlwZVxuICogICBwYXJhbWV0ZXIgYW5kIGlzIG5ldmVyIG5hbWVkIGhlcmUuXG4gKiAtIFRoZSAqKnByb3ZpZGVyJ3MgaWRlbnRpdHkqKiBcdTIwMTQgaXRzIHBsdWdpbiBpZCBhbmQgZGlzcGxheSBuYW1lLiBBbHNvIHRoZSBwYWlyJ3Mgb3duIGJ1c2luZXNzLCBhbmQgbm90XG4gKiAgIHNvbWV0aGluZyB0aGlzIGxpYnJhcnkgaGFzIGFueSBzdGFuZGluZyB0byBvd24uXG4gKlxuICogV2h5IGl0IGlzIGRlY2xhcmVkIHJhdGhlciB0aGFuIGltcG9ydGVkLiBBIHByb3ZpZGVyIGlzIHR5cGljYWxseSBhbiBPYnNpZGlhbiAqcGx1Z2luKiByZXBvLCBub3QgYW4gbnBtXG4gKiBwYWNrYWdlLCBzbyBhIGNvbnN1bWVyIGhhcyBub3RoaW5nIHRvIGRlcGVuZCBvbiBhbmQgaGFuZC13cml0ZXMgaXRzIG93biBjb3B5IG9mIHRoZSBjb250cmFjdC4gRml2ZSBjb3BpZXNcbiAqIG9mIG9uZSBjb250cmFjdCB3aXRoIG5vIGNvbXBpbGVyIGxpbmsgYmV0d2VlbiB0aGVtIG1lYW5zIGRyaWZ0IGlzIFNJTEVOVCBcdTIwMTQgZXZlcnkgY29weSBzdGlsbCBjb21waWxlcyBhbmRcbiAqIHRoZSBoYW5kb3ZlciBmYWlscyBhdCBydW50aW1lIGluc3RlYWQuIERlY2xhcmluZyB0aGUgZW52ZWxvcGUgaGVyZSBnaXZlcyBib3RoIGVuZHMgb25lIGRlY2xhcmF0aW9uIHRvXG4gKiBjb21waWxlIGFnYWluc3Q7IGB3YXRjaFBsdWdpbkFwaWAgc3RpbGwgbmVnb3RpYXRlcyB0aGUgdmVyc2lvbiBhdCBydW50aW1lLCBiZWNhdXNlIHRoZSB0d28gZW5kcyBzaGlwXG4gKiBpbmRlcGVuZGVudGx5IGFuZCBhbHdheXMgd2lsbC5cbiAqXG4gKiBUaGUgcHJvdmlkZXIgcHVibGlzaGVzIGl0OlxuICpcbiAqIGBgYHRzXG4gKiBwdWJsaXNoUGx1Z2luQXBpPFNldHRpbmdzTWlncmF0aW9uQXBpPE15TWlncmF0YWJsZVNldHRpbmdzPj4oe1xuICogICBhcGk6IHRoaXMuc2V0dGluZ3NNaWdyYXRpb25BcGksXG4gKiAgIGFwaVZlcnNpb246ICcxLjAuMCcsXG4gKiAgIGNvbnRyYWN0OiB7IG1pZ3JhdGVTZXR0aW5nczoge30gfSxcbiAqICAgcGx1Z2luOiB0aGlzXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIFRoZSBjb25zdW1lciByZWFjaGVzIGl0IHRocm91Z2gge0BsaW5rIG9ic2lkaWFuL2NvbXBvbmVudHMvc2V0dGluZ3MtbWlncmF0aW9uLWNvbXBvbmVudCFTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudH0sXG4gKiB3aGljaCBvd25zIHRoZSB3aG9sZSBvZmZlci1hbmQtcmV0aXJlIGRhbmNlLlxuICovXG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFNldHRpbmdzTWlncmF0aW9uQXBpLm1pZ3JhdGVTZXR0aW5nc30uXG4gKlxuICogQHR5cGVQYXJhbSBUTWlncmF0YWJsZVNldHRpbmdzIC0gVGhlIHNldHRpbmdzIHRoZSBwcm9wb3NpbmcgcGx1Z2luIG1heSBoYW5kIG92ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0ZVNldHRpbmdzUGFyYW1zPFRNaWdyYXRhYmxlU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgdGhlIHByb3Bvc2luZyBwbHVnaW4gb2ZmZXJzLlxuICAgKlxuICAgKiBDb252ZW50aW9uYWxseSBldmVyeSBtZW1iZXIgaXMgb3B0aW9uYWwsIHNvIGEgcGx1Z2luIHByb3Bvc2VzIG9ubHkgd2hhdCBpdCBhY3R1YWxseSBoZWxkIGFuZCBhIHZhbHVlIHRoZVxuICAgKiBwcm92aWRlciBhbHJlYWR5IG93bnMgaXMgbmV2ZXIgb3ZlcndyaXR0ZW4gYnkgYSBkZWZhdWx0IG5vYm9keSBjaG9zZS4gVGhhdCBjb252ZW50aW9uIGJlbG9uZ3MgdG8gdGhlIHBhaXIsXG4gICAqIHRob3VnaCBcdTIwMTQgdGhpcyB0eXBlIGltcG9zZXMgb25seSB0aGUgZW52ZWxvcGUuXG4gICAqL1xuICByZWFkb25seSBwcm9wb3NlZFNldHRpbmdzOiBUTWlncmF0YWJsZVNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcGx1Z2luIG1ha2luZyB0aGUgcHJvcG9zYWwsIHNvIHRoZSBwcm92aWRlcidzIGRpYWxvZyBjYW4gc2F5IHdob3NlIHNldHRpbmdzXG4gICAqIHRoZXNlIGFyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG91dGNvbWUgb2Yge0BsaW5rIFNldHRpbmdzTWlncmF0aW9uQXBpLm1pZ3JhdGVTZXR0aW5nc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0ZVNldHRpbmdzUmVzdWx0IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHVzZXIgYXBwcm92ZWQgdGhlIG1pZ3JhdGlvbi5cbiAgICpcbiAgICogYGZhbHNlYCBtZWFucyB0aGV5IGNhbmNlbGxlZCBhbmQgbm90aGluZyB3YXMgd3JpdHRlbiwgc28gdGhlIHByb3Bvc2luZyBwbHVnaW4gbXVzdCBOT1QgcmVjb3JkIHRoZVxuICAgKiBtaWdyYXRpb24gYXMgZG9uZSBcdTIwMTQgYSBjYW5jZWwgaXMgbm90IGFuIGFuc3dlciwgYW5kIHRoZSBvZmZlciBoYXMgdG8gY29tZSBiYWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBcHBsaWVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBBUEkgYSBwbHVnaW4gcHVibGlzaGVzIHdoZW4gaXQgaXMgd2lsbGluZyB0byByZWNlaXZlIHNldHRpbmdzIGFub3RoZXIgcGx1Z2luIHVzZWQgdG8gb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVE1pZ3JhdGFibGVTZXR0aW5ncyAtIFRoZSBzZXR0aW5ncyB0aGlzIHByb3ZpZGVyIGFjY2VwdHMuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBwcm92aWRlciBvd25zIHRoZSBzZXR0aW5ncywgc28gaXQgb3ducyB0aGUgZGlhbG9nOiBhIHByb3Bvc2luZyBwbHVnaW4gbmV2ZXIgd3JpdGVzIGludG8gYW5vdGhlclxuICogcGx1Z2luJ3MgYGRhdGEuanNvbmAuIEl0IHByb3Bvc2VzLCBhbmQgdGhlIHVzZXIgYXBwcm92ZXMsIGVkaXRzIG9yIGRlY2xpbmVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzTWlncmF0aW9uQXBpPFRNaWdyYXRhYmxlU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIE9mZmVycyB0aGUgdXNlciBhIHNldCBvZiBzZXR0aW5ncyB2YWx1ZXMgYW5vdGhlciBwbHVnaW4gcHJvcG9zZXMsIGFuZCBhcHBsaWVzIHdoYXQgdGhleSBhcHByb3ZlLlxuICAgKlxuICAgKiBSZXNvbHZlcyBvbmx5IG9uY2UgdGhlIGRpYWxvZyBpcyBjbG9zZWQsIHNvIHRoZSBjYWxsZXIgbGVhcm5zIHdoZXRoZXIgdGhlIG1pZ3JhdGlvbiBhY3R1YWxseSBoYXBwZW5lZCBhbmRcbiAgICogY2FuIHJldGlyZSBcdTIwMTQgb3Igd2l0aGhvbGQgXHUyMDE0IGl0cyBvd24gcGVuZGluZyB2YWx1ZXMgb24gdGhhdCBhbnN3ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJvcG9zYWwuXG4gICAqIEByZXR1cm5zIFdoYXQgdGhlIHVzZXIgYXBwcm92ZWQuXG4gICAqL1xuICBtaWdyYXRlU2V0dGluZ3MocGFyYW1zOiBNaWdyYXRlU2V0dGluZ3NQYXJhbXM8VE1pZ3JhdGFibGVTZXR0aW5ncz4pOiBQcm9taXNlPE1pZ3JhdGVTZXR0aW5nc1Jlc3VsdD47XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=