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.
- package/CHANGELOG.md +7 -0
- package/dist/integration-test-plugin/main.js +1714 -1622
- package/dist/lib/cjs/__merged.cjs +4 -1
- package/dist/lib/cjs/__merged.d.cts +1 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/settings-migration-component.cjs +232 -0
- package/dist/lib/cjs/obsidian/components/settings-migration-component.d.cts +120 -0
- package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +1 -1
- package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +5 -3
- package/dist/lib/cjs/obsidian/plugin/index.cjs +6 -3
- package/dist/lib/cjs/obsidian/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/plugin/settings-migration-api.cjs +141 -0
- package/dist/lib/cjs/obsidian/plugin/settings-migration-api.d.cts +91 -0
- package/dist/lib/esm/__merged.d.mts +1 -0
- package/dist/lib/esm/__merged.mjs +3 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/components/index.mjs +3 -1
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/settings-migration-component.d.mts +120 -0
- package/dist/lib/esm/obsidian/components/settings-migration-component.mjs +127 -0
- package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +5 -3
- package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/plugin/index.mjs +4 -2
- package/dist/lib/esm/obsidian/plugin/settings-migration-api.d.mts +91 -0
- package/dist/lib/esm/obsidian/plugin/settings-migration-api.mjs +44 -0
- package/obsidian/components/settings-migration-component/package.json +6 -0
- package/obsidian/plugin/settings-migration-api/package.json +6 -0
- package/package.json +15 -15
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/// <reference path="../../library.d.mts" />
|
|
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';
|
|
22
|
+
import type { Promisable } from 'type-fest';
|
|
23
|
+
import type { PluginApiContract } from '../plugin/plugin-api.mjs';
|
|
24
|
+
import type { PluginSettingsComponentBase } from './plugin-settings-component.mjs';
|
|
25
|
+
import { ComponentEx } from './component-ex.mjs';
|
|
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
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
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 initEsm() {
|
|
40
|
+
ensureBrowserProcess();
|
|
41
|
+
})();
|
|
42
|
+
})();
|
|
43
|
+
|
|
44
|
+
import { invokeAsyncSafely } from "../../async.mjs";
|
|
45
|
+
import { normalizeOptionalProperties } from "../../object-utils.mjs";
|
|
46
|
+
import { watchPluginApi } from "../plugin/plugin-api.mjs";
|
|
47
|
+
import { registerAsyncEvent } from "./async-events-component.mjs";
|
|
48
|
+
import { ComponentEx } from "./component-ex.mjs";
|
|
49
|
+
class SettingsMigrationComponent extends ComponentEx {
|
|
50
|
+
apiVersionRange;
|
|
51
|
+
app;
|
|
52
|
+
contract;
|
|
53
|
+
getProposedSettings;
|
|
54
|
+
isProposing = false;
|
|
55
|
+
pluginSettingsComponent;
|
|
56
|
+
providerPluginId;
|
|
57
|
+
retireProposedSettings;
|
|
58
|
+
sourcePluginId;
|
|
59
|
+
/**
|
|
60
|
+
* Creates an instance of {@link SettingsMigrationComponent}.
|
|
61
|
+
*
|
|
62
|
+
* @param params - The constructor parameters.
|
|
63
|
+
*/
|
|
64
|
+
constructor(params) {
|
|
65
|
+
super();
|
|
66
|
+
this.apiVersionRange = params.apiVersionRange;
|
|
67
|
+
this.app = params.app;
|
|
68
|
+
this.contract = params.contract;
|
|
69
|
+
this.getProposedSettings = params.getProposedSettings;
|
|
70
|
+
this.pluginSettingsComponent = params.pluginSettingsComponent;
|
|
71
|
+
this.providerPluginId = params.providerPluginId;
|
|
72
|
+
this.retireProposedSettings = params.retireProposedSettings;
|
|
73
|
+
this.sourcePluginId = params.sourcePluginId;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Loads the component, wiring both edges that can make an offer possible.
|
|
77
|
+
*/
|
|
78
|
+
onload() {
|
|
79
|
+
const ref = watchPluginApi(normalizeOptionalProperties({
|
|
80
|
+
apiVersionRange: this.apiVersionRange,
|
|
81
|
+
app: this.app,
|
|
82
|
+
component: this,
|
|
83
|
+
contract: this.contract,
|
|
84
|
+
pluginId: this.providerPluginId
|
|
85
|
+
}));
|
|
86
|
+
registerAsyncEvent(
|
|
87
|
+
this,
|
|
88
|
+
ref.on("change", () => {
|
|
89
|
+
this.handleChange(ref);
|
|
90
|
+
})
|
|
91
|
+
);
|
|
92
|
+
registerAsyncEvent(
|
|
93
|
+
this,
|
|
94
|
+
this.pluginSettingsComponent.on("loadSettings", () => {
|
|
95
|
+
this.handleChange(ref);
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
this.handleChange(ref);
|
|
99
|
+
}
|
|
100
|
+
handleChange(ref) {
|
|
101
|
+
invokeAsyncSafely(async () => {
|
|
102
|
+
await this.propose(ref.value);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
async propose(api) {
|
|
106
|
+
const proposedSettings = this.getProposedSettings();
|
|
107
|
+
if (!api || this.isProposing || proposedSettings === null) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this.isProposing = true;
|
|
111
|
+
try {
|
|
112
|
+
const result = await api.migrateSettings({
|
|
113
|
+
proposedSettings,
|
|
114
|
+
sourcePluginId: this.sourcePluginId
|
|
115
|
+
});
|
|
116
|
+
if (result.isApplied) {
|
|
117
|
+
await this.retireProposedSettings();
|
|
118
|
+
}
|
|
119
|
+
} finally {
|
|
120
|
+
this.isProposing = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export {
|
|
125
|
+
SettingsMigrationComponent
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvc2V0dGluZ3MtbWlncmF0aW9uLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IG9mZmVycyBzZXR0aW5ncyB0aGlzIHBsdWdpbiB1c2VkIHRvIG93biB0byB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGVtIG5vdywgb25jZSwgdGhyb3VnaFxuICogdGhhdCBwbHVnaW4ncyBwdWJsaWMgQVBJLlxuICpcbiAqIFRoaXMgaXMgdGhlIG90aGVyIGhhbGYgb2Yge0BsaW5rIG9ic2lkaWFuL2NvbXBvbmVudHMvcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50IVBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnR9LlxuICogVGhlIHN1Z2dlc3Rpb24gYXNrcyB0aGUgdXNlciB0byBpbnN0YWxsIHRoZSBwbHVnaW4gdGhhdCB0b29rIGEgZmVhdHVyZSBvdmVyOyB0aGlzIGNhcnJpZXMgdGhlIHNldHRpbmdzIHRoZXlcbiAqIGhhZCBjb25maWd1cmVkIGZvciBpdCBhY3Jvc3MsIHNvIHRha2luZyB0aGUgc3VnZ2VzdGlvbiBkb2VzIG5vdCBtZWFuIHJlLWVudGVyaW5nIGV2ZXJ5dGhpbmcgYnkgaGFuZC5cbiAqXG4gKiBBIHByb3Bvc2luZyBwbHVnaW4gbmV2ZXIgd3JpdGVzIGludG8gYW5vdGhlciBwbHVnaW4ncyBgZGF0YS5qc29uYC4gSXQgUFJPUE9TRVM6IHRoZSBvdGhlciBwbHVnaW4gb3ducyB0aGVcbiAqIHNldHRpbmdzLCBzbyBpdCBvd25zIHRoZSBkaWFsb2csIGFuZCB0aGUgdXNlciBhcHByb3ZlcywgZWRpdHMgb3IgZGVjbGluZXMuIE9ubHkgYW4gYXBwbGllZCBtaWdyYXRpb24gcmV0aXJlc1xuICogdGhlIHBlbmRpbmcgdmFsdWVzLlxuICpcbiAqIFRoZSBvZmZlciBpcyBtYWRlIHdoZW5ldmVyIGl0IENBTiBzdWNjZWVkLCB3aGljaCBuZWVkcyB0d28gaW5kZXBlbmRlbnQgdGhpbmdzIHRvIGhhdmUgaGFwcGVuZWQgXHUyMDE0IHRoZVxuICogcHJvdmlkZXIncyBBUEkgYmVpbmcgYXZhaWxhYmxlLCBhbmQgdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgaGF2aW5nIGFycml2ZWQgZnJvbSBkaXNrLiBFaXRoZXIgY2FuIGxhbmRcbiAqIGZpcnN0LCBzbyBib3RoIGVkZ2VzIGFyZSB3aXJlZCBhbmQgZWFjaCByZS1yZWFkcyB0aGUgY3VycmVudCBzdGF0ZSByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgb3RoZXIgaGFzXG4gKiBhbHJlYWR5IGhhcHBlbmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUge1xuICBQbHVnaW5BcGlDb250cmFjdCxcbiAgUGx1Z2luQXBpUmVmLFxuICBXYXRjaFBsdWdpbkFwaVBhcmFtc1xufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7IFNldHRpbmdzTWlncmF0aW9uQXBpIH0gZnJvbSAnLi4vcGx1Z2luL3NldHRpbmdzLW1pZ3JhdGlvbi1hcGkudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4uLy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQgeyB3YXRjaFBsdWdpbkFwaSB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4vYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFNldHRpbmdzTWlncmF0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNaWdyYXRhYmxlU2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MgdGhpcyBwbHVnaW4gbWF5IGhhbmQgb3Zlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFRNaWdyYXRhYmxlU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgY29udHJhY3QgdmVyc2lvbnMgdGhpcyBwbHVnaW4gY29tcGlsZWQgYWdhaW5zdCwgZS5nLiBgJ14xJ2AuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEV2YWx1YXRlZCBieSBgY29tcGFyZS12ZXJzaW9uc2AsIHdoaWNoIGRvZXMgTk9UIGFjY2VwdCBhIGJhcmUgYCpgLiBTcGVsbCBcImFueSB2ZXJzaW9uXCIgYXMgYCc+PTAuMC4wJ2AuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uUmFuZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdGhpcyBwbHVnaW4gZXhwZWN0cyBvZiB0aGUgcHJvdmlkZXIsIHdoaWNoIHdpbnMgb3ZlciB0aGUgcHJvdmlkZXIncyBvd24gd2hlbiBzdXBwbGllZC5cbiAgICpcbiAgICogV29ydGggc3VwcGx5aW5nLCBhbmQgd29ydGgga2VlcGluZyBOQVJST1cuIEEgbWlncmF0aW9uIHVzdWFsbHkgbmVlZHMgb25lIG1ldGhvZCB0aGF0IGhhcyBleGlzdGVkIHNpbmNlIHRoZVxuICAgKiBwcm92aWRlcidzIGZpcnN0IGNvbnRyYWN0IHZlcnNpb24sIHdoaWxlIHRoZSBzYW1lIHBsdWdpbiBtYXkgcmVhZCBvdGhlciBwYXJ0cyBvZiB0aGF0IEFQSSB0aHJvdWdoIGEgbXVjaFxuICAgKiBuZXdlciBvbmUuIERlY2xhcmluZyB0aGUgd2lkZXIgZXhwZWN0YXRpb24gaGVyZSB3b3VsZCByZWZ1c2UgdG8gb2ZmZXIgdGhlIG1pZ3JhdGlvbiB0byBhIHVzZXIgb24gYW4gb2xkZXJcbiAgICogcHJvdmlkZXIgXHUyMDE0IHdoaWNoIGlzIHByZWNpc2VseSB0aGUgdXNlciB3aG8gc3RpbGwgaGFzIHNldHRpbmdzIHRvIG1pZ3JhdGUuXG4gICAqL1xuICByZWFkb25seSBjb250cmFjdD86IFBsdWdpbkFwaUNvbnRyYWN0O1xuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgdmFsdWVzIGN1cnJlbnRseSB3YWl0aW5nIHRvIGJlIGhhbmRlZCBvdmVyLlxuICAgKlxuICAgKiBDYWxsZWQgYWZyZXNoIG9uIGV2ZXJ5IGVkZ2UgcmF0aGVyIHRoYW4gb25jZSwgc28gYW4gaW1wbGVtZW50YXRpb24gc2ltcGx5IHJlYWRzIGl0cyBwbHVnaW4ncyBzZXR0aW5ncy5cbiAgICogUmV0dXJuIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgcGVuZGluZyBcdTIwMTQgYWZ0ZXIgYSBtaWdyYXRpb24gaGFzIGJlZW4gYXBwbGllZCwgb3Igb24gYSB2YXVsdCB0aGF0IG5ldmVyXG4gICAqIGhhZCB0aGVzZSBzZXR0aW5ncyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWVzIHRvIHByb3Bvc2UsIG9yIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gb2ZmZXIuXG4gICAqL1xuICBnZXRQcm9wb3NlZFNldHRpbmdzKHRoaXM6IHZvaWQpOiBudWxsIHwgVE1pZ3JhdGFibGVTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGNvbXBvbmVudCBvZiB0aGUgcGx1Z2luIG1ha2luZyB0aGUgcHJvcG9zYWwuXG4gICAqXG4gICAqIFRha2VuIGFzIGEgd2hvbGUgY29tcG9uZW50IHJhdGhlciB0aGFuIGFzIGEgYmFyZSBcInJlYWR5XCIgZmxhZyBzbyB0aGUgaG9zdCBjYW5ub3QgZm9yZ2V0IHRvIHdpcmUgdGhlIHdhaXQ6XG4gICAqIHdoYXRldmVyIHtAbGluayBnZXRQcm9wb3NlZFNldHRpbmdzfSByZWFkcyBpcyBtZWFuaW5nbGVzcyB1bnRpbCB0aGlzIGNvbXBvbmVudCBoYXMgcmVhZCBgZGF0YS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0PjtcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHBsdWdpbiB0aGF0IG93bnMgdGhlc2Ugc2V0dGluZ3Mgbm93LCBhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luXG4gICAqIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJQbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoYXQgdGhlIHBlbmRpbmcgdmFsdWVzIGhhdmUgYmVlbiBoYW5kZWQgb3Zlciwgc28gdGhlIG9mZmVyIGlzIG5vdCBtYWRlIGFnYWluLlxuICAgKlxuICAgKiBDYWxsZWQgT05MWSB3aGVuIHRoZSB1c2VyIGFjdHVhbGx5IGFwcGxpZWQgdGhlIG1pZ3JhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSByZXRpcmVtZW50IGlzIHBlcnNpc3RlZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQW4gaW1wbGVtZW50YXRpb24gbXVzdCBQRVJTSVNUIHRoZSByZXRpcmVtZW50IFx1MjAxNCBgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQuZWRpdEFuZFNhdmUoXHUyMDI2KWAsIG5vdFxuICAgKiBgc2V0UHJvcGVydHkoXHUyMDI2KWAuIFRoZSBsYXR0ZXIgb25seSBlZGl0cyB0aGUgaW4tbWVtb3J5IHN0YXRlLCBzbyB0aGUgcmV0aXJlbWVudCBpcyBmb3Jnb3R0ZW4gb24gdGhlIG5leHRcbiAgICogcmVsb2FkIGFuZCB0aGUgbWlncmF0aW9uIGlzIG9mZmVyZWQgYWdhaW4gZm9yZXZlci5cbiAgICovXG4gIHJldGlyZVByb3Bvc2VkU2V0dGluZ3ModGhpczogdm9pZCk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4gbWFraW5nIHRoZSBwcm9wb3NhbCwgc28gdGhlIHByb3ZpZGVyJ3MgZGlhbG9nIGNhbiBzYXkgd2hvc2Ugc2V0dGluZ3MgdGhlc2VcbiAgICogYXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPZmZlcnMgc2V0dGluZ3MgdGhpcyBwbHVnaW4gdXNlZCB0byBvd24gdG8gdGhlIHBsdWdpbiB0aGF0IG93bnMgdGhlbSBub3cuXG4gKlxuICogQHR5cGVQYXJhbSBUTWlncmF0YWJsZVNldHRpbmdzIC0gVGhlIHNldHRpbmdzIHRoaXMgcGx1Z2luIG1heSBoYW5kIG92ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudDxUTWlncmF0YWJsZVNldHRpbmdzIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlWZXJzaW9uUmFuZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250cmFjdDogUGx1Z2luQXBpQ29udHJhY3QgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2V0UHJvcG9zZWRTZXR0aW5nczogKCkgPT4gbnVsbCB8IFRNaWdyYXRhYmxlU2V0dGluZ3M7XG4gIHByaXZhdGUgaXNQcm9wb3NpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJQbHVnaW5JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJldGlyZVByb3Bvc2VkU2V0dGluZ3M6ICgpID0+IFByb21pc2FibGU8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlUGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgU2V0dGluZ3NNaWdyYXRpb25Db21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFRNaWdyYXRhYmxlU2V0dGluZ3M+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwaVZlcnNpb25SYW5nZSA9IHBhcmFtcy5hcGlWZXJzaW9uUmFuZ2U7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMuY29udHJhY3QgPSBwYXJhbXMuY29udHJhY3Q7XG4gICAgdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzID0gcGFyYW1zLmdldFByb3Bvc2VkU2V0dGluZ3M7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICB0aGlzLnByb3ZpZGVyUGx1Z2luSWQgPSBwYXJhbXMucHJvdmlkZXJQbHVnaW5JZDtcbiAgICB0aGlzLnJldGlyZVByb3Bvc2VkU2V0dGluZ3MgPSBwYXJhbXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncztcbiAgICB0aGlzLnNvdXJjZVBsdWdpbklkID0gcGFyYW1zLnNvdXJjZVBsdWdpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHdpcmluZyBib3RoIGVkZ2VzIHRoYXQgY2FuIG1ha2UgYW4gb2ZmZXIgcG9zc2libGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIC8vIE5vdGhpbmcgaXMgZ2F0ZWQgb24gdGhlIHBlbmRpbmcgdmFsdWVzIEhFUkUuIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaXMgYSBzaWJsaW5nIHdob3NlIG93biBsb2FkIGlzIHN0aWxsXG4gICAgLy8gSW4gZmxpZ2h0IGF0IHRoaXMgcG9pbnQsIHNvIGl0IHN0aWxsIGhvbGRzIHRoZSBERUZBVUxUUyBcdTIwMTQgcmVhZGluZyB0aGUgcGVuZGluZyB2YWx1ZXMgbm93IHdvdWxkIHNlZVxuICAgIC8vIE5vdGhpbmcgb24gZXhhY3RseSB0aGUgdmF1bHRzIHRoYXQgaGF2ZSBzb21ldGhpbmcsIHJlZ2lzdGVyIG5vIHdhdGNoLCBhbmQgbG9zZSB0aGUgbWlncmF0aW9uIGZvciBnb29kLlxuICAgIC8vIEJvdGggZWRnZXMgYXJlIHdpcmVkIGluc3RlYWQsIGFuZCBgcHJvcG9zZWAgcmUtcmVhZHMgdGhlIHZhbHVlcyBlYWNoIHRpbWUgaXQgcnVucy5cbiAgICBjb25zdCByZWYgPSB3YXRjaFBsdWdpbkFwaTxTZXR0aW5nc01pZ3JhdGlvbkFwaTxUTWlncmF0YWJsZVNldHRpbmdzPj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFdhdGNoUGx1Z2luQXBpUGFyYW1zPih7XG4gICAgICBhcGlWZXJzaW9uUmFuZ2U6IHRoaXMuYXBpVmVyc2lvblJhbmdlLFxuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGNvbnRyYWN0OiB0aGlzLmNvbnRyYWN0LFxuICAgICAgcGx1Z2luSWQ6IHRoaXMucHJvdmlkZXJQbHVnaW5JZFxuICAgIH0pKTtcblxuICAgIC8vIERyaXZlbiBieSB0aGUgcmVmJ3Mgb3duIGV2ZW50IHJhdGhlciB0aGFuIGJ5IGB3aGVuQXZhaWxhYmxlKClgLCBkZWxpYmVyYXRlbHkuIFRoYXQgd2FpdCBibG9ja3MgZm9yIHRlblxuICAgIC8vIFNlY29uZHMgYW5kIHRoZW4gdGhyb3dzIHdoZW4gdGhlIHByb3ZpZGVyIGlzIHNpbXBseSBub3QgaW5zdGFsbGVkLCB3aGljaCB3b3VsZCBzdGFsbCB0aGlzIHBsdWdpbidzIGxvYWRcbiAgICAvLyBGb3IgZXZlcnkgdXNlciB3aG8gZGVjbGluZXMgdGhlIHN1Z2dlc3Rpb24uIFdhdGNoaW5nIGNvc3RzIG5vdGhpbmcgd2hpbGUgdGhlIHByb3ZpZGVyIGlzIGFic2VudCBhbmRcbiAgICAvLyBPZmZlcnMgdGhlIG1pZ3JhdGlvbiB0aGUgbW9tZW50IGl0IGFwcGVhcnMgXHUyMDE0IGluY2x1ZGluZyByaWdodCBhZnRlciB0aGUgdXNlciBpbnN0YWxscyBpdCBmcm9tIHRoZVxuICAgIC8vIFN1Z2dlc3Rpb24gYmFubmVyLlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICByZWYub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UocmVmKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFRoZSBzZWNvbmQgZWRnZTogdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgYXJyaXZpbmcgZnJvbSBkaXNrLiBJdCBtYXkgZmlyZSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHJlZik7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmhhbmRsZUNoYW5nZShyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2UocmVmOiBQbHVnaW5BcGlSZWY8U2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4+KTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5wcm9wb3NlKHJlZi52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb3Bvc2UoYXBpOiBudWxsIHwgU2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9wb3NlZFNldHRpbmdzID0gdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzKCk7XG4gICAgaWYgKCFhcGkgfHwgdGhpcy5pc1Byb3Bvc2luZyB8fCBwcm9wb3NlZFNldHRpbmdzID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQm90aCBlZGdlcyBjYW4gZmlyZSB3aGlsZSB0aGUgcHJvdmlkZXIncyBkaWFsb2cgaXMgb3BlbiwgYW5kIGVhY2ggd291bGQgcmFpc2UgYSBzZWNvbmQgb25lLlxuICAgIHRoaXMuaXNQcm9wb3NpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGkubWlncmF0ZVNldHRpbmdzKHtcbiAgICAgICAgcHJvcG9zZWRTZXR0aW5ncyxcbiAgICAgICAgc291cmNlUGx1Z2luSWQ6IHRoaXMuc291cmNlUGx1Z2luSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBIGNhbmNlbCBpcyBub3QgYW4gYW5zd2VyLCBzbyB0aGUgdmFsdWVzIHN0YXkgcGVuZGluZyBhbmQgdGhlIG9mZmVyIGNvbWVzIGJhY2sgXHUyMDE0IG9uIHRoZSBuZXh0IGxvYWQsIG9yXG4gICAgICAvLyBBcyBzb29uIGFzIHRoZSBwcm92aWRlciByZWxvYWRzLiBPbmx5IGFuIGFwcGxpZWQgbWlncmF0aW9uIHJldGlyZXMgdGhlbS5cbiAgICAgIGlmIChyZXN1bHQuaXNBcHBsaWVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncygpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzUHJvcG9zaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsbUJBQW1CO0FBa0ZyQixNQUFNLG1DQUF1RSxZQUFZO0FBQUEsRUFDN0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNULGNBQWM7QUFBQSxFQUNMO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEwRTtBQUMzRixVQUFNO0FBQ04sU0FBSyxrQkFBa0IsT0FBTztBQUM5QixTQUFLLE1BQU0sT0FBTztBQUNsQixTQUFLLFdBQVcsT0FBTztBQUN2QixTQUFLLHNCQUFzQixPQUFPO0FBQ2xDLFNBQUssMEJBQTBCLE9BQU87QUFDdEMsU0FBSyxtQkFBbUIsT0FBTztBQUMvQixTQUFLLHlCQUF5QixPQUFPO0FBQ3JDLFNBQUssaUJBQWlCLE9BQU87QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS2dCLFNBQWU7QUFLN0IsVUFBTSxNQUFNLGVBQTBELDRCQUFrRDtBQUFBLE1BQ3RILGlCQUFpQixLQUFLO0FBQUEsTUFDdEIsS0FBSyxLQUFLO0FBQUEsTUFDVixXQUFXO0FBQUEsTUFDWCxVQUFVLEtBQUs7QUFBQSxNQUNmLFVBQVUsS0FBSztBQUFBLElBQ2pCLENBQUMsQ0FBQztBQU9GO0FBQUEsTUFDRTtBQUFBLE1BQ0EsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNyQixhQUFLLGFBQWEsR0FBRztBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNIO0FBR0E7QUFBQSxNQUNFO0FBQUEsTUFDQSxLQUFLLHdCQUF3QixHQUFHLGdCQUFnQixNQUFNO0FBQ3BELGFBQUssYUFBYSxHQUFHO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0g7QUFFQSxTQUFLLGFBQWEsR0FBRztBQUFBLEVBQ3ZCO0FBQUEsRUFFUSxhQUFhLEtBQW9FO0FBQ3ZGLHNCQUFrQixZQUFZO0FBQzVCLFlBQU0sS0FBSyxRQUFRLElBQUksS0FBSztBQUFBLElBQzlCLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxNQUFjLFFBQVEsS0FBc0U7QUFDMUYsVUFBTSxtQkFBbUIsS0FBSyxvQkFBb0I7QUFDbEQsUUFBSSxDQUFDLE9BQU8sS0FBSyxlQUFlLHFCQUFxQixNQUFNO0FBQ3pEO0FBQUEsSUFDRjtBQUdBLFNBQUssY0FBYztBQUNuQixRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sSUFBSSxnQkFBZ0I7QUFBQSxRQUN2QztBQUFBLFFBQ0EsZ0JBQWdCLEtBQUs7QUFBQSxNQUN2QixDQUFDO0FBSUQsVUFBSSxPQUFPLFdBQVc7QUFDcEIsY0FBTSxLQUFLLHVCQUF1QjtBQUFBLE1BQ3BDO0FBQUEsSUFDRixVQUFFO0FBQ0EsV0FBSyxjQUFjO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -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.mjs';
|
|
27
29
|
/**
|
|
28
|
-
* Clicks the center of an element using **trusted** touch input
|
|
29
|
-
*
|
|
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
|
|
@@ -81,4 +81,4 @@ export {
|
|
|
81
81
|
typeIntoEditor,
|
|
82
82
|
unhoverElement
|
|
83
83
|
};
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTW9iaWxlLW9ubHkgdHJ1c3RlZCBpbnB1dCBoZWxwZXJzLiBUaGVyZSBpcyBubyBpbi1yZW5kZXJlciByb3V0ZSB0byBhIHRydXN0ZWQgZXZlbnQgb24gYSBwaG9uZSBcdTIwMTRcbiAqIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGAgaXMgRWxlY3Ryb24tb25seSBhbmQgYSBkaXNwYXRjaGVkIGV2ZW50IGlzIHVudHJ1c3RlZCBcdTIwMTQgc28gdGhlIGluamVjdGlvblxuICogaGFzIHRvIGJlIGEgcm91bmQtdHJpcDogdGhlIHJlcXVlc3QgZ29lcyB0byB0aGUgaG9zdCBvdmVyIHRoZSBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgaGFybmVzcydzXG4gKiBiaW5kaW5nIGNoYW5uZWwsIGFuZCB0aGUgaG9zdCBpbmplY3RzIGl0IGludG8gdGhlIFdlYlZpZXcgb3ZlciBDRFAuXG4gKlxuICogVGhhdCBjaGFubmVsIGlzIGluc3RhbGxlZCBieSB0aGUgaGFybmVzcydzIEFwcGl1bSB0cmFuc3BvcnQsIHNvIHRoZXNlIGhlbHBlcnMgKipkZWxlZ2F0ZSoqIHRvIHRoZVxuICogaGFybmVzcyByYXRoZXIgdGhhbiByZWltcGxlbWVudGluZyB0aGUgd2lyZSBmb3JtYXQ6IHRoZXkgY2FsbFxuICogYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRydXN0ZWRJbnB1dC4qYCwgd2hpY2ggaG9sZHMgdGhlIHZlcnkgZnVuY3Rpb24gb2JqZWN0cyB0aGUgaGFybmVzc1xuICogc2VlZHMgaW50byBhbiBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmUncyBgbGliYCBiYWcuIERlbGVnYXRpbmcgaXMgd2hhdCBrZWVwcyB0aGUgbW9iaWxlIHNlbWFudGljcyBcdTIwMTRcbiAqIHRhcCwgbG9uZy1wcmVzcyBmb3IgYGJ1dHRvbjogJ3JpZ2h0J2AsIGEgdGhyb3cgZm9yIGAnbWlkZGxlJ2AsIHRoZSBgcHJlc3NLZXlgIGtleSBzZXQsIGFuZCB0aGUgdGhyb3dzXG4gKiBmb3IgdGhlIGA6aG92ZXJgIGhlbHBlcnMgXHUyMDE0IGlkZW50aWNhbCB0byB0aGUgaGFybmVzcydzIG93biBjb3B5IGZvciBmcmVlLCBpbnN0ZWFkIG9mIGEgc2Vjb25kXG4gKiBpbXBsZW1lbnRhdGlvbiB0byBoYW5kLXN5bmMgKHNlZSB0aGUgcHJvamVjdCBgQUdFTlRTLm1kYCAqKkw0KiopLlxuICpcbiAqIFRoZSBuYW1lc3BhY2Ugc2hhcGUgaXMgZGVjbGFyZWQgKipsb2NhbGx5Kio6IHRoZSBoYXJuZXNzIG11c3QgbmV2ZXIgYmUgYSBkZXBlbmRlbmN5IG9mIHRoaXMgbGlicmFyeSwgaW5cbiAqIGVpdGhlciBkaXJlY3Rpb24sIGF0IHJ1bnRpbWUgb3IgaW4gdHlwZXMuXG4gKlxuICogKipDb25zZXF1ZW5jZSwgYW5kIGl0IGlzIGRlbGliZXJhdGU6KiogdGhlc2UgaGVscGVycyBvbmx5IHdvcmsgaW5zaWRlIGFuIGFwcCB0aGUgaGFybmVzcyBib290c3RyYXBwZWQuXG4gKiBPdXRzaWRlIG9uZSB0aGV5IHRocm93IGEgbWVzc2FnZSBzYXlpbmcgc28sIHJhdGhlciB0aGFuIHNpbGVudGx5IGRvaW5nIG5vdGhpbmcgXHUyMDE0IGEgbm8tb3Agd291bGQgcmVjcmVhdGVcbiAqIGV4YWN0bHkgdGhlIGZhbHNlLWNvbmZpZGVuY2UgZmFpbHVyZSB0cnVzdGVkIGlucHV0IGV4aXN0cyB0byBlbmQuIENvbnN1bWVycyB3YW50aW5nIHRoZSBwbGF0Zm9ybS1jb3JyZWN0XG4gKiBoZWxwZXIgc2hvdWxkIGltcG9ydCB0aGUge0BsaW5rIC4uL3RydXN0ZWQtaW5wdXQudHMgfCB0cnVzdGVkLWlucHV0fSBmYWNhZGUgaW5zdGVhZCBvZiB0aGlzIG1vZHVsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIFByZXNzS2V5UGFyYW1zLFxuICBUeXBlSW50b0VkaXRvclBhcmFtcyxcbiAgVW5ob3ZlckVsZW1lbnRQYXJhbXNcbiAgLy8gVGhlIHBhcmFtZXRlciBjb250cmFjdHMgbGl2ZSB3aXRoIHRoZSBkZXNrdG9wIHR3aW4gYW5kIGFyZSBzaGFyZWQgdmVyYmF0aW0sIHNvIHRoZSB0d28gcGxhdGZvcm1zXG4gIC8vIENhbm5vdCBkcmlmdCBhcGFydCBvbiB3aGF0IGEgY2FsbGVyIHBhc3Nlcy4gQSB0eXBlLW9ubHkgaW1wb3J0IGxvYWRzIG5vdGhpbmcgKEw1KS5cbn0gZnJvbSAnLi9kZXNrdG9wLXRydXN0ZWQtaW5wdXQudHMnO1xuXG4vKipcbiAqIFRoZSBnbG9iYWwgdGhlIGhhcm5lc3MgYm9vdHN0cmFwcyBpdHMgbmFtZXNwYWNlIG9udG8uXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIHRoZSBoYXJuZXNzIG5hbWVzcGFjZSB0aGlzIG1vZHVsZSByZWFkcy4gRXZlcnl0aGluZyBlbHNlIG9uIGl0IGlzIG5vbmUgb2YgdGhpcyBtb2R1bGUnc1xuICogYnVzaW5lc3MuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSB7XG4gIHRydXN0ZWRJbnB1dD86IFBhcnRpYWw8VHJ1c3RlZElucHV0U2VhbT47XG59XG5cbi8qKlxuICogVGhlIHRydXN0ZWQtaW5wdXQgc2VhbSB0aGUgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgIGhhcm5lc3MgcHVibGlzaGVzIG9uIGl0cyBuYW1lc3BhY2UuXG4gKlxuICogRGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZDogdGhlIGhhcm5lc3MgaXMgbm90IGEgZGVwZW5kZW5jeSBvZiB0aGlzIGxpYnJhcnkuIEl0IG1pcnJvcnNcbiAqIGBuYW1lc3BhY2UtYm9vdHN0cmFwLnRzYCdzIGB0cnVzdGVkSW5wdXRgIG9iamVjdCwgYW5kIHRoZSBtaXJyb3JpbmcgaXMgYnkgaGFuZCBcdTIwMTQgdGhlIHNhbWVcbiAqIGJlaGF2aW9yYWwtc3luYyBvYmxpZ2F0aW9uIHRoZSBkZXNrdG9wIHR3aW4gY2Fycmllcy5cbiAqL1xuaW50ZXJmYWNlIFRydXN0ZWRJbnB1dFNlYW0ge1xuICBjbGlja0VsZW1lbnQocGFyYW1zOiBDbGlja0VsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBjbGlja01vdXNlKHBhcmFtczogQ2xpY2tNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIGhvdmVyRWxlbWVudChwYXJhbXM6IEhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIG1vdmVNb3VzZShwYXJhbXM6IE1vdmVNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIHByZXNzS2V5KHBhcmFtczogUHJlc3NLZXlQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgdW5ob3ZlckVsZW1lbnQocGFyYW1zOiBVbmhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2xpY2tzIHRoZSBjZW50ZXIgb2YgYW4gZWxlbWVudCB1c2luZyAqKnRydXN0ZWQqKiB0b3VjaCBpbnB1dCBcdTIwMTQgYSBDRFAgdGFwIGluIHRoZSBXZWJWaWV3LCBpbmplY3RlZCBieVxuICogdGhlIGhvc3QuXG4gKlxuICogVGhlIGVsZW1lbnQtcmVsYXRpdmUgY291bnRlcnBhcnQgb2Yge0BsaW5rIGNsaWNrTW91c2V9LiBgYnV0dG9uOiAncmlnaHQnYCBpcyB0aGUgbG9uZy1wcmVzcyB0aGF0IG9wZW5zXG4gKiBPYnNpZGlhbiBNb2JpbGUncyBjb250ZXh0IG1lbnU7IGAnbWlkZGxlJ2AgdGhyb3dzLCBiZWNhdXNlIHRvdWNoIGhhcyBubyBnZXN0dXJlIGZvciBpdCBhbmQgaW52ZW50aW5nXG4gKiBvbmUgd291bGQgYmUgd29yc2UgdGhhbiBzYXlpbmcgc28uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGNsaWNrLCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2tFbGVtZW50KHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignY2xpY2tFbGVtZW50JykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBDbGlja3MgYXQgdGhlIGdpdmVuIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHVzaW5nICoqdHJ1c3RlZCoqIHRvdWNoIGlucHV0LCBpbmplY3RlZCBieSB0aGUgaG9zdCBvdmVyIENEUC5cbiAqXG4gKiBUaGUgY29vcmRpbmF0ZXMgYXJlIENTUyBwaXhlbHMgaW4gdGhlIFdlYlZpZXcncyBvd24gdmlld3BvcnQgXHUyMDE0IHdoaWNoIGlzIHdoYXQgQ0RQIHRha2VzIFx1MjAxNCBzb1xuICogYGRldmljZVBpeGVsUmF0aW9gIG5ldmVyIGVudGVycyB0aGUgcGljdHVyZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHRvIGNsaWNrIGF0LCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2tNb3VzZShwYXJhbXM6IENsaWNrTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCdjbGlja01vdXNlJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzOiBgOmhvdmVyYCBoYXMgbm8gdG91Y2ggZXF1aXZhbGVudC5cbiAqXG4gKiBBIHNpbGVudCBuby1vcCBoZXJlIHdvdWxkIGxldCBhIGhvdmVyIHRlc3QgcGFzcyBvbiBhIHBob25lIHdpdGhvdXQgaG92ZXJpbmcgYW55dGhpbmcsIHNvIHRoZSBtb2JpbGUgYXJtXG4gKiByZWZ1c2VzIGluc3RlYWQuIEdhdGUgdGhlIGFzc2VydGlvbiBvbiBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYCwgb3IgZHJpdmUgdGhlIGVsZW1lbnQgd2l0aFxuICoge0BsaW5rIGNsaWNrRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGhvdmVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcyBcdTIwMTQgdGhlIGNhbGwgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaG92ZXJFbGVtZW50KHBhcmFtczogSG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignaG92ZXJFbGVtZW50JykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzOiBhIHRvdWNoIHNjcmVlbiBoYXMgbm8gcGVyc2lzdGVudCBwb2ludGVyIHRvIG1vdmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcyB0byBtb3ZlIHRvLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcyBcdTIwMTQgdGhlIGNhbGwgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbW92ZU1vdXNlKHBhcmFtczogTW92ZU1vdXNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignbW92ZU1vdXNlJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBQcmVzc2VzIGEgc2luZ2xlIGtleSB1c2luZyAqKnRydXN0ZWQqKiBrZXlib2FyZCBpbnB1dCwgaW5qZWN0ZWQgYnkgdGhlIGhvc3Qgb3ZlciBDRFAuXG4gKlxuICogTmFtZWQga2V5cyAoYCdFbnRlcidgLCBgJ0VzY2FwZSdgLCBgJ1RhYidgLCBgJ0JhY2tzcGFjZSdgLCBgJ0RlbGV0ZSdgLCB0aGUgYXJyb3dzKSBhbmQgc2luZ2xlIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkOyBhbnl0aGluZyBlbHNlIHRocm93cyByYXRoZXIgdGhhbiBwcmVzc2luZyBub3RoaW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUga2V5IHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleSBwcmVzcyBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXNzS2V5KHBhcmFtczogUHJlc3NLZXlQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCdwcmVzc0tleScpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciBlZGl0b3IgdXNpbmcgKip0cnVzdGVkKioga2V5Ym9hcmQgaW5wdXQsIGluamVjdGVkIGJ5IHRoZSBob3N0IG92ZXIgQ0RQLlxuICpcbiAqIEZvY3VzZXMgdGhlIGVkaXRvciAoY2FyZXQgdG8gdGhlIGVuZCksIHByZXNzZXMgZXZlcnkgY29kZSBwb2ludCBvZiB0aGUgdGV4dCwgdGhlbiBwb2xscyB1bnRpbCB0aGVcbiAqIGRvY3VtZW50IHJlZmxlY3RzIHRoZSBpbnB1dCBvciBhIGJvdW5kZWQgdGltZW91dCBlbGFwc2VzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5c3Ryb2tlcyBoYXZlIHNldHRsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbigndHlwZUludG9FZGl0b3InKShwYXJhbXMpO1xufVxuXG4vKipcbiAqIEFsd2F5cyB0aHJvd3MsIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIGhvdmVyRWxlbWVudH06IHRoZXJlIGlzIG5vIGA6aG92ZXJgIHN0YXRlIHRvIGNsZWFyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgbmV2ZXIgcmVzb2x2ZXMgXHUyMDE0IHRoZSBjYWxsIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuaG92ZXJFbGVtZW50KHBhcmFtczogVW5ob3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCd1bmhvdmVyRWxlbWVudCcpKHBhcmFtcyk7XG59XG5cbmZ1bmN0aW9uIGdldFNlYW1GdW5jdGlvbjxLZXkgZXh0ZW5kcyBrZXlvZiBUcnVzdGVkSW5wdXRTZWFtPihuYW1lOiBLZXkpOiBUcnVzdGVkSW5wdXRTZWFtW0tleV0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBUaGUgaGFybmVzcyBpbnN0YWxscyBpdHMgbmFtZXNwYWNlIG9uIHRoZSByZWFsbSBnbG9iYWw7IHRoZXJlIGlzIG5vd2hlcmUgZWxzZSB0byByZWFkIGl0IGZyb20uXG4gIGNvbnN0IGhvbGRlciA9IGdsb2JhbFRoaXMgYXMgUGFydGlhbDxPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlcj47XG4gIGNvbnN0IHNlYW1GdW5jdGlvbiA9IGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cnVzdGVkSW5wdXQ/LltuYW1lXTtcbiAgaWYgKCFzZWFtRnVuY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVHJ1c3RlZCBpbnB1dCBpcyB1bmF2YWlsYWJsZSBvbiBtb2JpbGU6IFxcYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRydXN0ZWRJbnB1dC4ke25hbWV9XFxgIGlzIG5vdCBpbnN0YWxsZWQuIGBcbiAgICAgICAgKyAnQSBwaG9uZSBoYXMgbm8gaW4tcmVuZGVyZXIgcm91dGUgdG8gYSB0cnVzdGVkIGV2ZW50LCBzbyB0aGUgaW5qZWN0aW9uIGlzIGEgcm91bmQtdHJpcCB0byB0aGUgaG9zdCBvdmVyIHRoZSAnXG4gICAgICAgICsgJ2BvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nYCBBcHBpdW0gdHJhbnNwb3J0XFwncyBjaGFubmVsIFx1MjAxNCB3aGljaCBtZWFucyB0aGVzZSBoZWxwZXJzIG9ubHkgd29yayBpbnNpZGUgYW4gYXBwIHRoYXQgJ1xuICAgICAgICArICdoYXJuZXNzIGJvb3RzdHJhcHBlZC4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzZWFtRnVuY3Rpb247XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0ZBLGVBQXNCLGFBQWEsUUFBMkM7QUFDNUUsUUFBTSxnQkFBZ0IsY0FBYyxFQUFFLE1BQU07QUFDOUM7QUFXQSxlQUFzQixXQUFXLFFBQXlDO0FBQ3hFLFFBQU0sZ0JBQWdCLFlBQVksRUFBRSxNQUFNO0FBQzVDO0FBWUEsZUFBc0IsYUFBYSxRQUEyQztBQUM1RSxRQUFNLGdCQUFnQixjQUFjLEVBQUUsTUFBTTtBQUM5QztBQVFBLGVBQXNCLFVBQVUsUUFBd0M7QUFDdEUsUUFBTSxnQkFBZ0IsV0FBVyxFQUFFLE1BQU07QUFDM0M7QUFXQSxlQUFzQixTQUFTLFFBQXVDO0FBQ3BFLFFBQU0sZ0JBQWdCLFVBQVUsRUFBRSxNQUFNO0FBQzFDO0FBV0EsZUFBc0IsZUFBZSxRQUE2QztBQUNoRixRQUFNLGdCQUFnQixnQkFBZ0IsRUFBRSxNQUFNO0FBQ2hEO0FBUUEsZUFBc0IsZUFBZSxRQUE2QztBQUNoRixRQUFNLGdCQUFnQixnQkFBZ0IsRUFBRSxNQUFNO0FBQ2hEO0FBRUEsU0FBUyxnQkFBb0QsTUFBa0M7QUFFN0YsUUFBTSxTQUFTO0FBQ2YsUUFBTSxlQUFlLE9BQU8sOEJBQThCLGVBQWUsSUFBSTtBQUM3RSxNQUFJLENBQUMsY0FBYztBQUNqQixVQUFNLElBQUk7QUFBQSxNQUNSLDhGQUE4RixJQUFJO0FBQUEsSUFJcEc7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTW9iaWxlLW9ubHkgdHJ1c3RlZCBpbnB1dCBoZWxwZXJzLiBUaGVyZSBpcyBubyBpbi1yZW5kZXJlciByb3V0ZSB0byBhIHRydXN0ZWQgZXZlbnQgb24gYSBwaG9uZSBcdTIwMTRcbiAqIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGAgaXMgRWxlY3Ryb24tb25seSBhbmQgYSBkaXNwYXRjaGVkIGV2ZW50IGlzIHVudHJ1c3RlZCBcdTIwMTQgc28gdGhlIGluamVjdGlvblxuICogaGFzIHRvIGJlIGEgcm91bmQtdHJpcDogdGhlIHJlcXVlc3QgZ29lcyB0byB0aGUgaG9zdCBvdmVyIHRoZSBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgaGFybmVzcydzXG4gKiBiaW5kaW5nIGNoYW5uZWwsIGFuZCB0aGUgaG9zdCBpbmplY3RzIGl0IGludG8gdGhlIFdlYlZpZXcgb3ZlciBDRFAgXHUyMDE0IGFzIGBJbnB1dC5kaXNwYXRjaFRvdWNoRXZlbnRgIGZvclxuICogYSB0YXAgYnV0IGBJbnB1dC5zeW50aGVzaXplVGFwR2VzdHVyZWAgZm9yIGEgbG9uZy1wcmVzcywgYmVjYXVzZSBgZGlzcGF0Y2hUb3VjaEV2ZW50YCBpbmplY3RzIHBhc3RcbiAqIEFuZHJvaWQncyBnZXN0dXJlIHJlY29nbml6ZXIgYW5kIHNvIGlzIGNsYXNzaWZpZWQgYXMgYSB0YXAgYXQgYW55IGR3ZWxsLlxuICpcbiAqIFRoYXQgY2hhbm5lbCBpcyBpbnN0YWxsZWQgYnkgdGhlIGhhcm5lc3MncyBBcHBpdW0gdHJhbnNwb3J0LCBzbyB0aGVzZSBoZWxwZXJzICoqZGVsZWdhdGUqKiB0byB0aGVcbiAqIGhhcm5lc3MgcmF0aGVyIHRoYW4gcmVpbXBsZW1lbnRpbmcgdGhlIHdpcmUgZm9ybWF0OiB0aGV5IGNhbGxcbiAqIGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy50cnVzdGVkSW5wdXQuKmAsIHdoaWNoIGhvbGRzIHRoZSB2ZXJ5IGZ1bmN0aW9uIG9iamVjdHMgdGhlIGhhcm5lc3NcbiAqIHNlZWRzIGludG8gYW4gYGV2YWxJbk9ic2lkaWFuYCBjbG9zdXJlJ3MgYGxpYmAgYmFnLiBEZWxlZ2F0aW5nIGlzIHdoYXQga2VlcHMgdGhlIG1vYmlsZSBzZW1hbnRpY3MgXHUyMDE0XG4gKiB0YXAsIGxvbmctcHJlc3MgZm9yIGBidXR0b246ICdyaWdodCdgLCBhIHRocm93IGZvciBgJ21pZGRsZSdgLCB0aGUgYHByZXNzS2V5YCBrZXkgc2V0LCBhbmQgdGhlIHRocm93c1xuICogZm9yIHRoZSBgOmhvdmVyYCBoZWxwZXJzIFx1MjAxNCBpZGVudGljYWwgdG8gdGhlIGhhcm5lc3MncyBvd24gY29weSBmb3IgZnJlZSwgaW5zdGVhZCBvZiBhIHNlY29uZFxuICogaW1wbGVtZW50YXRpb24gdG8gaGFuZC1zeW5jIChzZWUgdGhlIHByb2plY3QgYEFHRU5UUy5tZGAgKipMNCoqKS5cbiAqXG4gKiBUaGUgbmFtZXNwYWNlIHNoYXBlIGlzIGRlY2xhcmVkICoqbG9jYWxseSoqOiB0aGUgaGFybmVzcyBtdXN0IG5ldmVyIGJlIGEgZGVwZW5kZW5jeSBvZiB0aGlzIGxpYnJhcnksIGluXG4gKiBlaXRoZXIgZGlyZWN0aW9uLCBhdCBydW50aW1lIG9yIGluIHR5cGVzLlxuICpcbiAqICoqQ29uc2VxdWVuY2UsIGFuZCBpdCBpcyBkZWxpYmVyYXRlOioqIHRoZXNlIGhlbHBlcnMgb25seSB3b3JrIGluc2lkZSBhbiBhcHAgdGhlIGhhcm5lc3MgYm9vdHN0cmFwcGVkLlxuICogT3V0c2lkZSBvbmUgdGhleSB0aHJvdyBhIG1lc3NhZ2Ugc2F5aW5nIHNvLCByYXRoZXIgdGhhbiBzaWxlbnRseSBkb2luZyBub3RoaW5nIFx1MjAxNCBhIG5vLW9wIHdvdWxkIHJlY3JlYXRlXG4gKiBleGFjdGx5IHRoZSBmYWxzZS1jb25maWRlbmNlIGZhaWx1cmUgdHJ1c3RlZCBpbnB1dCBleGlzdHMgdG8gZW5kLiBDb25zdW1lcnMgd2FudGluZyB0aGUgcGxhdGZvcm0tY29ycmVjdFxuICogaGVscGVyIHNob3VsZCBpbXBvcnQgdGhlIHtAbGluayAuLi90cnVzdGVkLWlucHV0LnRzIHwgdHJ1c3RlZC1pbnB1dH0gZmFjYWRlIGluc3RlYWQgb2YgdGhpcyBtb2R1bGUuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDbGlja0VsZW1lbnRQYXJhbXMsXG4gIENsaWNrTW91c2VQYXJhbXMsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBQcmVzc0tleVBhcmFtcyxcbiAgVHlwZUludG9FZGl0b3JQYXJhbXMsXG4gIFVuaG92ZXJFbGVtZW50UGFyYW1zXG4gIC8vIFRoZSBwYXJhbWV0ZXIgY29udHJhY3RzIGxpdmUgd2l0aCB0aGUgZGVza3RvcCB0d2luIGFuZCBhcmUgc2hhcmVkIHZlcmJhdGltLCBzbyB0aGUgdHdvIHBsYXRmb3Jtc1xuICAvLyBDYW5ub3QgZHJpZnQgYXBhcnQgb24gd2hhdCBhIGNhbGxlciBwYXNzZXMuIEEgdHlwZS1vbmx5IGltcG9ydCBsb2FkcyBub3RoaW5nIChMNSkuXG59IGZyb20gJy4vZGVza3RvcC10cnVzdGVkLWlucHV0LnRzJztcblxuLyoqXG4gKiBUaGUgZ2xvYmFsIHRoZSBoYXJuZXNzIGJvb3RzdHJhcHMgaXRzIG5hbWVzcGFjZSBvbnRvLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nOiBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBUaGUgcGFydCBvZiB0aGUgaGFybmVzcyBuYW1lc3BhY2UgdGhpcyBtb2R1bGUgcmVhZHMuIEV2ZXJ5dGhpbmcgZWxzZSBvbiBpdCBpcyBub25lIG9mIHRoaXMgbW9kdWxlJ3NcbiAqIGJ1c2luZXNzLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdOYW1lc3BhY2Uge1xuICB0cnVzdGVkSW5wdXQ/OiBQYXJ0aWFsPFRydXN0ZWRJbnB1dFNlYW0+O1xufVxuXG4vKipcbiAqIFRoZSB0cnVzdGVkLWlucHV0IHNlYW0gdGhlIGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nYCBoYXJuZXNzIHB1Ymxpc2hlcyBvbiBpdHMgbmFtZXNwYWNlLlxuICpcbiAqIERlY2xhcmVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQ6IHRoZSBoYXJuZXNzIGlzIG5vdCBhIGRlcGVuZGVuY3kgb2YgdGhpcyBsaWJyYXJ5LiBJdCBtaXJyb3JzXG4gKiBgbmFtZXNwYWNlLWJvb3RzdHJhcC50c2AncyBgdHJ1c3RlZElucHV0YCBvYmplY3QsIGFuZCB0aGUgbWlycm9yaW5nIGlzIGJ5IGhhbmQgXHUyMDE0IHRoZSBzYW1lXG4gKiBiZWhhdmlvcmFsLXN5bmMgb2JsaWdhdGlvbiB0aGUgZGVza3RvcCB0d2luIGNhcnJpZXMuXG4gKi9cbmludGVyZmFjZSBUcnVzdGVkSW5wdXRTZWFtIHtcbiAgY2xpY2tFbGVtZW50KHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgY2xpY2tNb3VzZShwYXJhbXM6IENsaWNrTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBob3ZlckVsZW1lbnQocGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBtb3ZlTW91c2UocGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBwcmVzc0tleShwYXJhbXM6IFByZXNzS2V5UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgdHlwZUludG9FZGl0b3IocGFyYW1zOiBUeXBlSW50b0VkaXRvclBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIHVuaG92ZXJFbGVtZW50KHBhcmFtczogVW5ob3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIENsaWNrcyB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKiogdG91Y2ggaW5wdXQsIGluamVjdGVkIGludG8gdGhlIFdlYlZpZXcgYnkgdGhlIGhvc3RcbiAqIG92ZXIgQ0RQLlxuICpcbiAqIFRoZSBlbGVtZW50LXJlbGF0aXZlIGNvdW50ZXJwYXJ0IG9mIHtAbGluayBjbGlja01vdXNlfS4gYGJ1dHRvbjogJ3JpZ2h0J2AgaXMgdGhlIGxvbmctcHJlc3MgdGhhdCBvcGVuc1xuICogT2JzaWRpYW4gTW9iaWxlJ3MgY29udGV4dCBtZW51OyBgJ21pZGRsZSdgIHRocm93cywgYmVjYXVzZSB0b3VjaCBoYXMgbm8gZ2VzdHVyZSBmb3IgaXQgYW5kIGludmVudGluZ1xuICogb25lIHdvdWxkIGJlIHdvcnNlIHRoYW4gc2F5aW5nIHNvLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBjbGljaywgdGhlIGJ1dHRvbiB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGljayBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaWNrRWxlbWVudChwYXJhbXM6IENsaWNrRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ2NsaWNrRWxlbWVudCcpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogQ2xpY2tzIGF0IHRoZSBnaXZlbiB2aWV3cG9ydCBjb29yZGluYXRlcyB1c2luZyAqKnRydXN0ZWQqKiB0b3VjaCBpbnB1dCwgaW5qZWN0ZWQgYnkgdGhlIGhvc3Qgb3ZlciBDRFAuXG4gKlxuICogVGhlIGNvb3JkaW5hdGVzIGFyZSBDU1MgcGl4ZWxzIGluIHRoZSBXZWJWaWV3J3Mgb3duIHZpZXdwb3J0IFx1MjAxNCB3aGljaCBpcyB3aGF0IENEUCB0YWtlcyBcdTIwMTQgc29cbiAqIGBkZXZpY2VQaXhlbFJhdGlvYCBuZXZlciBlbnRlcnMgdGhlIHBpY3R1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcyB0byBjbGljayBhdCwgdGhlIGJ1dHRvbiB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGljayBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaWNrTW91c2UocGFyYW1zOiBDbGlja01vdXNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignY2xpY2tNb3VzZScpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogQWx3YXlzIHRocm93czogYDpob3ZlcmAgaGFzIG5vIHRvdWNoIGVxdWl2YWxlbnQuXG4gKlxuICogQSBzaWxlbnQgbm8tb3AgaGVyZSB3b3VsZCBsZXQgYSBob3ZlciB0ZXN0IHBhc3Mgb24gYSBwaG9uZSB3aXRob3V0IGhvdmVyaW5nIGFueXRoaW5nLCBzbyB0aGUgbW9iaWxlIGFybVxuICogcmVmdXNlcyBpbnN0ZWFkLiBHYXRlIHRoZSBhc3NlcnRpb24gb24gYFBsYXRmb3JtLmlzRGVza3RvcEFwcGAsIG9yIGRyaXZlIHRoZSBlbGVtZW50IHdpdGhcbiAqIHtAbGluayBjbGlja0VsZW1lbnR9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBob3Zlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgbmV2ZXIgcmVzb2x2ZXMgXHUyMDE0IHRoZSBjYWxsIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhvdmVyRWxlbWVudChwYXJhbXM6IEhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ2hvdmVyRWxlbWVudCcpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogQWx3YXlzIHRocm93czogYSB0b3VjaCBzY3JlZW4gaGFzIG5vIHBlcnNpc3RlbnQgcG9pbnRlciB0byBtb3ZlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgdmlld3BvcnQgY29vcmRpbmF0ZXMgdG8gbW92ZSB0by5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgbmV2ZXIgcmVzb2x2ZXMgXHUyMDE0IHRoZSBjYWxsIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1vdmVNb3VzZShwYXJhbXM6IE1vdmVNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ21vdmVNb3VzZScpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgdXNpbmcgKip0cnVzdGVkKioga2V5Ym9hcmQgaW5wdXQsIGluamVjdGVkIGJ5IHRoZSBob3N0IG92ZXIgQ0RQLlxuICpcbiAqIE5hbWVkIGtleXMgKGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYCdCYWNrc3BhY2UnYCwgYCdEZWxldGUnYCwgdGhlIGFycm93cykgYW5kIHNpbmdsZSBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZDsgYW55dGhpbmcgZWxzZSB0aHJvd3MgcmF0aGVyIHRoYW4gcHJlc3Npbmcgbm90aGluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXkgcHJlc3MgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVzc0tleShwYXJhbXM6IFByZXNzS2V5UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbigncHJlc3NLZXknKShwYXJhbXMpO1xufVxuXG4vKipcbiAqIFR5cGVzIHRleHQgaW50byBhIENvZGVNaXJyb3IgZWRpdG9yIHVzaW5nICoqdHJ1c3RlZCoqIGtleWJvYXJkIGlucHV0LCBpbmplY3RlZCBieSB0aGUgaG9zdCBvdmVyIENEUC5cbiAqXG4gKiBGb2N1c2VzIHRoZSBlZGl0b3IgKGNhcmV0IHRvIHRoZSBlbmQpLCBwcmVzc2VzIGV2ZXJ5IGNvZGUgcG9pbnQgb2YgdGhlIHRleHQsIHRoZW4gcG9sbHMgdW50aWwgdGhlXG4gKiBkb2N1bWVudCByZWZsZWN0cyB0aGUgaW5wdXQgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVkaXRvciB0byB0eXBlIGludG8gYW5kIHRoZSB0ZXh0IHRvIHR5cGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleXN0cm9rZXMgaGF2ZSBzZXR0bGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHlwZUludG9FZGl0b3IocGFyYW1zOiBUeXBlSW50b0VkaXRvclBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBnZXRTZWFtRnVuY3Rpb24oJ3R5cGVJbnRvRWRpdG9yJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBob3ZlckVsZW1lbnR9OiB0aGVyZSBpcyBubyBgOmhvdmVyYCBzdGF0ZSB0byBjbGVhci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IG5ldmVyIHJlc29sdmVzIFx1MjAxNCB0aGUgY2FsbCB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmhvdmVyRWxlbWVudChwYXJhbXM6IFVuaG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbigndW5ob3ZlckVsZW1lbnQnKShwYXJhbXMpO1xufVxuXG5mdW5jdGlvbiBnZXRTZWFtRnVuY3Rpb248S2V5IGV4dGVuZHMga2V5b2YgVHJ1c3RlZElucHV0U2VhbT4obmFtZTogS2V5KTogVHJ1c3RlZElucHV0U2VhbVtLZXldIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvbm8tZ2xvYmFsLXRoaXMgLS0gVGhlIGhhcm5lc3MgaW5zdGFsbHMgaXRzIG5hbWVzcGFjZSBvbiB0aGUgcmVhbG0gZ2xvYmFsOyB0aGVyZSBpcyBub3doZXJlIGVsc2UgdG8gcmVhZCBpdCBmcm9tLlxuICBjb25zdCBob2xkZXIgPSBnbG9iYWxUaGlzIGFzIFBhcnRpYWw8T2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXI+O1xuICBjb25zdCBzZWFtRnVuY3Rpb24gPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8udHJ1c3RlZElucHV0Py5bbmFtZV07XG4gIGlmICghc2VhbUZ1bmN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRydXN0ZWQgaW5wdXQgaXMgdW5hdmFpbGFibGUgb24gbW9iaWxlOiBcXGB3aW5kb3cuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZy50cnVzdGVkSW5wdXQuJHtuYW1lfVxcYCBpcyBub3QgaW5zdGFsbGVkLiBgXG4gICAgICAgICsgJ0EgcGhvbmUgaGFzIG5vIGluLXJlbmRlcmVyIHJvdXRlIHRvIGEgdHJ1c3RlZCBldmVudCwgc28gdGhlIGluamVjdGlvbiBpcyBhIHJvdW5kLXRyaXAgdG8gdGhlIGhvc3Qgb3ZlciB0aGUgJ1xuICAgICAgICArICdgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgQXBwaXVtIHRyYW5zcG9ydFxcJ3MgY2hhbm5lbCBcdTIwMTQgd2hpY2ggbWVhbnMgdGhlc2UgaGVscGVycyBvbmx5IHdvcmsgaW5zaWRlIGFuIGFwcCB0aGF0ICdcbiAgICAgICAgKyAnaGFybmVzcyBib290c3RyYXBwZWQuJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gc2VhbUZ1bmN0aW9uO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtGQSxlQUFzQixhQUFhLFFBQTJDO0FBQzVFLFFBQU0sZ0JBQWdCLGNBQWMsRUFBRSxNQUFNO0FBQzlDO0FBV0EsZUFBc0IsV0FBVyxRQUF5QztBQUN4RSxRQUFNLGdCQUFnQixZQUFZLEVBQUUsTUFBTTtBQUM1QztBQVlBLGVBQXNCLGFBQWEsUUFBMkM7QUFDNUUsUUFBTSxnQkFBZ0IsY0FBYyxFQUFFLE1BQU07QUFDOUM7QUFRQSxlQUFzQixVQUFVLFFBQXdDO0FBQ3RFLFFBQU0sZ0JBQWdCLFdBQVcsRUFBRSxNQUFNO0FBQzNDO0FBV0EsZUFBc0IsU0FBUyxRQUF1QztBQUNwRSxRQUFNLGdCQUFnQixVQUFVLEVBQUUsTUFBTTtBQUMxQztBQVdBLGVBQXNCLGVBQWUsUUFBNkM7QUFDaEYsUUFBTSxnQkFBZ0IsZ0JBQWdCLEVBQUUsTUFBTTtBQUNoRDtBQVFBLGVBQXNCLGVBQWUsUUFBNkM7QUFDaEYsUUFBTSxnQkFBZ0IsZ0JBQWdCLEVBQUUsTUFBTTtBQUNoRDtBQUVBLFNBQVMsZ0JBQW9ELE1BQWtDO0FBRTdGLFFBQU0sU0FBUztBQUNmLFFBQU0sZUFBZSxPQUFPLDhCQUE4QixlQUFlLElBQUk7QUFDN0UsTUFBSSxDQUFDLGNBQWM7QUFDakIsVUFBTSxJQUFJO0FBQUEsTUFDUiw4RkFBOEYsSUFBSTtBQUFBLElBSXBHO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -5,3 +5,4 @@ export * as 'plugin-context' from './plugin-context.mjs';
|
|
|
5
5
|
export * as 'plugin-event-source' from './plugin-event-source.mjs';
|
|
6
6
|
export * as 'plugin-settings-tab' from './plugin-settings-tab.mjs';
|
|
7
7
|
export * as 'plugin' from './plugin.mjs';
|
|
8
|
+
export * as 'settings-migration-api' from './settings-migration-api.mjs';
|
|
@@ -47,12 +47,14 @@ import * as plugin_context from "./plugin-context.mjs";
|
|
|
47
47
|
import * as plugin_event_source from "./plugin-event-source.mjs";
|
|
48
48
|
import * as plugin_settings_tab from "./plugin-settings-tab.mjs";
|
|
49
49
|
import * as plugin from "./plugin.mjs";
|
|
50
|
+
import * as settings_migration_api from "./settings-migration-api.mjs";
|
|
50
51
|
export {
|
|
51
52
|
obsidian_plugin_repo_paths as "obsidian-plugin-repo-paths",
|
|
52
53
|
plugin,
|
|
53
54
|
plugin_api as "plugin-api",
|
|
54
55
|
plugin_context as "plugin-context",
|
|
55
56
|
plugin_event_source as "plugin-event-source",
|
|
56
|
-
plugin_settings_tab as "plugin-settings-tab"
|
|
57
|
+
plugin_settings_tab as "plugin-settings-tab",
|
|
58
|
+
settings_migration_api as "settings-migration-api"
|
|
57
59
|
};
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocycgZnJvbSAnLi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWFwaScgZnJvbSAnLi9wbHVnaW4tYXBpLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tY29udGV4dCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWV2ZW50LXNvdXJjZScgZnJvbSAnLi9wbHVnaW4tZXZlbnQtc291cmNlLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tc2V0dGluZ3MtdGFiJyBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWIudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbicgZnJvbSAnLi9wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ3NldHRpbmdzLW1pZ3JhdGlvbi1hcGknIGZyb20gJy4vc2V0dGluZ3MtbWlncmF0aW9uLWFwaS50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWUEsZ0NBQWtDO0FBQzlDLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMseUJBQTJCO0FBQ3ZDLFlBQVlDLHlCQUEyQjtBQUN2QyxZQUFZLFlBQWM7QUFDMUIsWUFBWUMsNEJBQThCOyIsCiAgIm5hbWVzIjogWyJvYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocyIsICJwbHVnaW4tYXBpIiwgInBsdWdpbi1jb250ZXh0IiwgInBsdWdpbi1ldmVudC1zb3VyY2UiLCAicGx1Z2luLXNldHRpbmdzLXRhYiIsICJzZXR0aW5ncy1taWdyYXRpb24tYXBpIl0KfQo=
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/// <reference path="../../library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The generic half of a settings HANDOVER contract: one plugin offers another the settings it used to own,
|
|
6
|
+
* and the plugin that owns them now decides what to do with the offer.
|
|
7
|
+
*
|
|
8
|
+
* The shape below is deliberately the *envelope* and nothing else. A handover has three parts, and only one
|
|
9
|
+
* of them is generic:
|
|
10
|
+
*
|
|
11
|
+
* - The **envelope** — a `migrateSettings` call, who is proposing, and whether the user applied it. Identical
|
|
12
|
+
* for every pair of plugins, so it lives here.
|
|
13
|
+
* - The **payload** — which settings are being proposed. Entirely the pair's own business, so it stays a type
|
|
14
|
+
* parameter and is never named here.
|
|
15
|
+
* - The **provider's identity** — its plugin id and display name. Also the pair's own business, and not
|
|
16
|
+
* something this library has any standing to own.
|
|
17
|
+
*
|
|
18
|
+
* Why it is declared rather than imported. A provider is typically an Obsidian *plugin* repo, not an npm
|
|
19
|
+
* package, so a consumer has nothing to depend on and hand-writes its own copy of the contract. Five copies
|
|
20
|
+
* of one contract with no compiler link between them means drift is SILENT — every copy still compiles and
|
|
21
|
+
* the handover fails at runtime instead. Declaring the envelope here gives both ends one declaration to
|
|
22
|
+
* compile against; `watchPluginApi` still negotiates the version at runtime, because the two ends ship
|
|
23
|
+
* independently and always will.
|
|
24
|
+
*
|
|
25
|
+
* The provider publishes it:
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* publishPluginApi<SettingsMigrationApi<MyMigratableSettings>>({
|
|
29
|
+
* api: this.settingsMigrationApi,
|
|
30
|
+
* apiVersion: '1.0.0',
|
|
31
|
+
* contract: { migrateSettings: {} },
|
|
32
|
+
* plugin: this
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* The consumer reaches it through {@link obsidian/components/settings-migration-component!SettingsMigrationComponent},
|
|
37
|
+
* which owns the whole offer-and-retire dance.
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* Parameters for {@link SettingsMigrationApi.migrateSettings}.
|
|
41
|
+
*
|
|
42
|
+
* @typeParam TMigratableSettings - The settings the proposing plugin may hand over.
|
|
43
|
+
*/
|
|
44
|
+
export interface MigrateSettingsParams<TMigratableSettings extends object> {
|
|
45
|
+
/**
|
|
46
|
+
* The values the proposing plugin offers.
|
|
47
|
+
*
|
|
48
|
+
* Conventionally every member is optional, so a plugin proposes only what it actually held and a value the
|
|
49
|
+
* provider already owns is never overwritten by a default nobody chose. That convention belongs to the pair,
|
|
50
|
+
* though — this type imposes only the envelope.
|
|
51
|
+
*/
|
|
52
|
+
readonly proposedSettings: TMigratableSettings;
|
|
53
|
+
/**
|
|
54
|
+
* The `manifest.id` of the plugin making the proposal, so the provider's dialog can say whose settings
|
|
55
|
+
* these are.
|
|
56
|
+
*/
|
|
57
|
+
readonly sourcePluginId: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The outcome of {@link SettingsMigrationApi.migrateSettings}.
|
|
61
|
+
*/
|
|
62
|
+
export interface MigrateSettingsResult {
|
|
63
|
+
/**
|
|
64
|
+
* Whether the user approved the migration.
|
|
65
|
+
*
|
|
66
|
+
* `false` means they cancelled and nothing was written, so the proposing plugin must NOT record the
|
|
67
|
+
* migration as done — a cancel is not an answer, and the offer has to come back.
|
|
68
|
+
*/
|
|
69
|
+
readonly isApplied: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The API a plugin publishes when it is willing to receive settings another plugin used to own.
|
|
73
|
+
*
|
|
74
|
+
* @typeParam TMigratableSettings - The settings this provider accepts.
|
|
75
|
+
*
|
|
76
|
+
* @remarks
|
|
77
|
+
* The provider owns the settings, so it owns the dialog: a proposing plugin never writes into another
|
|
78
|
+
* plugin's `data.json`. It proposes, and the user approves, edits or declines.
|
|
79
|
+
*/
|
|
80
|
+
export interface SettingsMigrationApi<TMigratableSettings extends object> {
|
|
81
|
+
/**
|
|
82
|
+
* Offers the user a set of settings values another plugin proposes, and applies what they approve.
|
|
83
|
+
*
|
|
84
|
+
* Resolves only once the dialog is closed, so the caller learns whether the migration actually happened and
|
|
85
|
+
* can retire — or withhold — its own pending values on that answer.
|
|
86
|
+
*
|
|
87
|
+
* @param params - The proposal.
|
|
88
|
+
* @returns What the user approved.
|
|
89
|
+
*/
|
|
90
|
+
migrateSettings(params: MigrateSettingsParams<TMigratableSettings>): Promise<MigrateSettingsResult>;
|
|
91
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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 initEsm() {
|
|
40
|
+
ensureBrowserProcess();
|
|
41
|
+
})();
|
|
42
|
+
})();
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"main": "../../../dist/lib/cjs/obsidian/components/settings-migration-component.cjs",
|
|
3
|
+
"module": "../../../dist/lib/esm/obsidian/components/settings-migration-component.mjs",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "../../../dist/lib/cjs/obsidian/components/settings-migration-component.d.cts"
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-dev-utils",
|
|
3
|
-
"version": "101.
|
|
3
|
+
"version": "101.6.0",
|
|
4
4
|
"description": "This is the collection of useful functions that you can use for your Obsidian plugin development.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian"
|
|
@@ -680,7 +680,7 @@
|
|
|
680
680
|
"eslint-plugin-import": "npm:eslint-plugin-import-x@^4.17.1",
|
|
681
681
|
"eslint-plugin-json-schema-validator": "^6.3.1",
|
|
682
682
|
"eslint-plugin-n": "$eslint-plugin-n",
|
|
683
|
-
"fflate": "^0.
|
|
683
|
+
"fflate": "^0.8.3",
|
|
684
684
|
"glob": "^13.0.6",
|
|
685
685
|
"js-yaml": "4.3.1",
|
|
686
686
|
"markdown-it": "^15.0.1",
|
|
@@ -691,7 +691,7 @@
|
|
|
691
691
|
"dependencies": {
|
|
692
692
|
"@codemirror/state": "6.5.0",
|
|
693
693
|
"@codemirror/view": "6.38.6",
|
|
694
|
-
"@eslint-community/eslint-plugin-eslint-comments": "^4.
|
|
694
|
+
"@eslint-community/eslint-plugin-eslint-comments": "^4.8.0",
|
|
695
695
|
"@eslint/config-helpers": "^0.7.0",
|
|
696
696
|
"@eslint/js": "^10.0.1",
|
|
697
697
|
"@eslint/json": "^2.1.0",
|
|
@@ -703,26 +703,26 @@
|
|
|
703
703
|
"@types/babel__core": "^7.20.5",
|
|
704
704
|
"@types/eslint": "^9.6.1",
|
|
705
705
|
"@types/luxon": "^3.7.5",
|
|
706
|
-
"@types/node": "^26.
|
|
706
|
+
"@types/node": "^26.5.0",
|
|
707
707
|
"@types/parsimmon": "^1.10.9",
|
|
708
708
|
"@types/path-browserify": "^1.0.3",
|
|
709
709
|
"@types/pug": "^2.0.10",
|
|
710
710
|
"@types/react": "^19.2.18",
|
|
711
711
|
"@types/semver": "^7.8.0",
|
|
712
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
713
|
-
"@typescript-eslint/parser": "^8.
|
|
712
|
+
"@typescript-eslint/eslint-plugin": "^8.70.0",
|
|
713
|
+
"@typescript-eslint/parser": "^8.70.0",
|
|
714
714
|
"adm-zip": "^0.6.0",
|
|
715
715
|
"compare-versions": "^6.1.1",
|
|
716
|
-
"cspell": "^10.
|
|
716
|
+
"cspell": "^10.3.0",
|
|
717
717
|
"debug": "^4.4.3",
|
|
718
|
-
"dprint": "^0.57.
|
|
718
|
+
"dprint": "^0.57.4",
|
|
719
719
|
"esbuild": "^0.28.2",
|
|
720
720
|
"esbuild-sass-plugin": "^3.7.0",
|
|
721
721
|
"esbuild-svelte": "^0.9.5",
|
|
722
|
-
"eslint": "^10.
|
|
722
|
+
"eslint": "^10.10.0",
|
|
723
723
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
724
724
|
"eslint-plugin-import-x": "^4.17.1",
|
|
725
|
-
"eslint-plugin-jsdoc": "^64.3.
|
|
725
|
+
"eslint-plugin-jsdoc": "^64.3.6",
|
|
726
726
|
"eslint-plugin-obsidianmd": "^0.4.2",
|
|
727
727
|
"eslint-plugin-perfectionist": "^5.11.0",
|
|
728
728
|
"eslint-plugin-tsdoc": "^0.5.2",
|
|
@@ -749,10 +749,10 @@
|
|
|
749
749
|
"svelte-preprocess": "^6.0.5",
|
|
750
750
|
"type-fest": "^5.9.0",
|
|
751
751
|
"typescript": "6.0.3",
|
|
752
|
-
"typescript-eslint": "^8.
|
|
752
|
+
"typescript-eslint": "^8.70.0"
|
|
753
753
|
},
|
|
754
754
|
"devDependencies": {
|
|
755
|
-
"@astrojs/markdown-remark": "^7.3.
|
|
755
|
+
"@astrojs/markdown-remark": "^7.3.1",
|
|
756
756
|
"@astrojs/starlight": "^0.42.0",
|
|
757
757
|
"@commitlint/cli": "^21.2.2",
|
|
758
758
|
"@commitlint/config-conventional": "^21.2.2",
|
|
@@ -761,9 +761,9 @@
|
|
|
761
761
|
"@resvg/resvg-js": "^2.6.2",
|
|
762
762
|
"@total-typescript/ts-reset": "^0.6.1",
|
|
763
763
|
"@types/adm-zip": "^0.5.8",
|
|
764
|
-
"@typescript-eslint/rule-tester": "^8.
|
|
764
|
+
"@typescript-eslint/rule-tester": "^8.70.0",
|
|
765
765
|
"@vitest/coverage-v8": "^5.0.0",
|
|
766
|
-
"astro": "^7.3.
|
|
766
|
+
"astro": "^7.3.2",
|
|
767
767
|
"better-typescript-lib": "^2.12.0",
|
|
768
768
|
"czg": "^1.14.0",
|
|
769
769
|
"dedent": "^1.7.2",
|
|
@@ -774,7 +774,7 @@
|
|
|
774
774
|
"moment": "^2.30.1",
|
|
775
775
|
"nano-staged": "^1.0.2",
|
|
776
776
|
"obsidian-integration-testing": "^12.0.0",
|
|
777
|
-
"obsidian-test-mocks": "^5.
|
|
777
|
+
"obsidian-test-mocks": "^5.1.0",
|
|
778
778
|
"satori": "^0.33.4",
|
|
779
779
|
"starlight-github-alerts": "^0.4.0",
|
|
780
780
|
"ts-declaration-location": "^1.0.7",
|