obsidian-dev-utils 74.0.0 → 74.2.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 +21 -0
- package/README.md +1 -0
- package/dist/dev/main.js +225 -135
- package/dist/lib/cjs/async.cjs +37 -5
- package/dist/lib/cjs/async.d.cts +21 -0
- package/dist/lib/cjs/function.cjs +9 -1
- package/dist/lib/cjs/function.d.cts +10 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/object-utils.cjs +1 -1
- package/dist/lib/cjs/object-utils.d.cts +3 -2
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +26 -4
- package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +95 -14
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +118 -99
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +0 -1
- package/dist/lib/cjs/obsidian/constructors/getDomEventsHandlersConstructor.cjs +21 -17
- package/dist/lib/cjs/obsidian/dataview.cjs +1 -1
- package/dist/lib/cjs/obsidian/dataview.d.cts +4 -3
- package/dist/lib/cjs/obsidian/file-change.cjs +1 -1
- package/dist/lib/cjs/obsidian/file-change.d.cts +9 -18
- package/dist/lib/cjs/obsidian/markdown.cjs +24 -15
- package/dist/lib/cjs/script-utils/fs.cjs +1 -1
- package/dist/lib/cjs/script-utils/fs.d.cts +16 -12
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +2 -1
- package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +5 -21
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +315 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +35 -0
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +3 -1
- package/dist/lib/cjs/setup/async-operation-tracking-jest-setup.cjs +115 -0
- package/dist/lib/cjs/setup/async-operation-tracking-jest-setup.d.cts +12 -0
- package/dist/lib/cjs/setup/async-operation-tracking-setup.cjs +140 -0
- package/dist/lib/cjs/setup/async-operation-tracking-setup.d.cts +47 -0
- package/dist/lib/cjs/setup/async-operation-tracking-vitest-setup.cjs +115 -0
- package/dist/lib/cjs/setup/async-operation-tracking-vitest-setup.d.cts +10 -0
- package/dist/lib/cjs/strict-proxy.cjs +1 -1
- package/dist/lib/cjs/strict-proxy.d.cts +4 -2
- package/dist/lib/esm/async.d.mts +21 -0
- package/dist/lib/esm/async.mjs +33 -4
- package/dist/lib/esm/function.d.mts +10 -0
- package/dist/lib/esm/function.mjs +8 -1
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/object-utils.d.mts +3 -2
- package/dist/lib/esm/object-utils.mjs +1 -1
- package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +95 -14
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +26 -4
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +0 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +118 -99
- package/dist/lib/esm/obsidian/constructors/getDomEventsHandlersConstructor.mjs +21 -17
- package/dist/lib/esm/obsidian/dataview.d.mts +4 -3
- package/dist/lib/esm/obsidian/dataview.mjs +1 -1
- package/dist/lib/esm/obsidian/file-change.d.mts +9 -18
- package/dist/lib/esm/obsidian/file-change.mjs +1 -1
- package/dist/lib/esm/obsidian/markdown.mjs +24 -15
- package/dist/lib/esm/script-utils/fs.d.mts +16 -12
- package/dist/lib/esm/script-utils/fs.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +2 -1
- package/dist/lib/esm/script-utils/linters/eslint-no-restricted-syntax.mjs +5 -21
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +35 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +206 -0
- package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +3 -1
- package/dist/lib/esm/setup/async-operation-tracking-jest-setup.d.mts +12 -0
- package/dist/lib/esm/setup/async-operation-tracking-jest-setup.mjs +33 -0
- package/dist/lib/esm/setup/async-operation-tracking-setup.d.mts +47 -0
- package/dist/lib/esm/setup/async-operation-tracking-setup.mjs +35 -0
- package/dist/lib/esm/setup/async-operation-tracking-vitest-setup.d.mts +10 -0
- package/dist/lib/esm/setup/async-operation-tracking-vitest-setup.mjs +33 -0
- package/dist/lib/esm/strict-proxy.d.mts +4 -2
- package/dist/lib/esm/strict-proxy.mjs +1 -1
- package/package.json +17 -6
- package/script-utils/linters/eslint-rules/no-unused-params-members/package.json +6 -0
- package/setup/async-operation-tracking-jest-setup/package.json +6 -0
- package/setup/async-operation-tracking-setup/package.json +6 -0
- package/setup/async-operation-tracking-vitest-setup/package.json +6 -0
|
@@ -0,0 +1,206 @@
|
|
|
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 initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import { ensureNonNullable } from "../../../type-guards.mjs";
|
|
25
|
+
const PARAMS_OPTIONS_SUFFIX_PATTERN = /(?:Params|Options)$/;
|
|
26
|
+
const MESSAGE_ID = "unusedParamsMember";
|
|
27
|
+
const noUnusedParamsMembers = {
|
|
28
|
+
create(context) {
|
|
29
|
+
const interfaceKeyNodes = /* @__PURE__ */ new Map();
|
|
30
|
+
const usageByInterface = /* @__PURE__ */ new Map();
|
|
31
|
+
return {
|
|
32
|
+
":function"(node) {
|
|
33
|
+
for (const param of record(node)["params"]) {
|
|
34
|
+
const info = getParamInfo(param);
|
|
35
|
+
if (!info) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const usage = getOrCreateUsage(info.typeName);
|
|
39
|
+
if (info.binding.type === "pattern") {
|
|
40
|
+
collectPatternMembers(info.binding.pattern, usage);
|
|
41
|
+
} else {
|
|
42
|
+
collectReferenceMembers(context.sourceCode.getScope(node), info.binding.name, usage);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"Program:exit"() {
|
|
47
|
+
for (const [typeName, keyNodes] of interfaceKeyNodes) {
|
|
48
|
+
const usage = usageByInterface.get(typeName);
|
|
49
|
+
if (!usage || usage.usesAll) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
for (const [memberName, keyNode] of keyNodes) {
|
|
53
|
+
if (!usage.used.has(memberName)) {
|
|
54
|
+
context.report({
|
|
55
|
+
data: {
|
|
56
|
+
interfaceName: typeName,
|
|
57
|
+
member: memberName
|
|
58
|
+
},
|
|
59
|
+
messageId: MESSAGE_ID,
|
|
60
|
+
node: keyNode
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
TSInterfaceDeclaration(node) {
|
|
67
|
+
const name = getInterfaceName(node);
|
|
68
|
+
if (!PARAMS_OPTIONS_SUFFIX_PATTERN.test(name)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
interfaceKeyNodes.set(name, getInterfaceMembers(node));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
function getOrCreateUsage(typeName) {
|
|
75
|
+
let usage = usageByInterface.get(typeName);
|
|
76
|
+
if (!usage) {
|
|
77
|
+
usage = { used: /* @__PURE__ */ new Set(), usesAll: false };
|
|
78
|
+
usageByInterface.set(typeName, usage);
|
|
79
|
+
}
|
|
80
|
+
return usage;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
meta: {
|
|
84
|
+
docs: {
|
|
85
|
+
description: "Flag `*Params`/`*Options` interface members never accessed by the function that receives them"
|
|
86
|
+
},
|
|
87
|
+
messages: {
|
|
88
|
+
[MESSAGE_ID]: 'Member "{{ member }}" of "{{ interfaceName }}" is never accessed by the function that receives it. Remove it (the compiler will catch it if it is still needed elsewhere).'
|
|
89
|
+
},
|
|
90
|
+
schema: [],
|
|
91
|
+
type: "suggestion"
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function classifyReference(reference, usage) {
|
|
95
|
+
const parent = record(reference)["parent"];
|
|
96
|
+
if (parent.type === "MemberExpression" && record(parent)["object"] === reference) {
|
|
97
|
+
collectMemberAccess(parent, usage);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (parent.type === "VariableDeclarator" && record(parent)["init"] === reference && record(parent)["id"].type === "ObjectPattern") {
|
|
101
|
+
collectPatternMembers(record(parent)["id"], usage);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
usage.usesAll = true;
|
|
105
|
+
}
|
|
106
|
+
function collectMemberAccess(node, usage) {
|
|
107
|
+
const computed = record(node)["computed"] === true;
|
|
108
|
+
const property = record(node)["property"];
|
|
109
|
+
if (property.type === "Identifier") {
|
|
110
|
+
if (!computed) {
|
|
111
|
+
usage.used.add(record(property)["name"]);
|
|
112
|
+
}
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (property.type === "Literal") {
|
|
116
|
+
const value = record(property)["value"];
|
|
117
|
+
if (typeof value === "string") {
|
|
118
|
+
usage.used.add(value);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function collectPatternMembers(pattern, usage) {
|
|
123
|
+
for (const property of record(pattern)["properties"]) {
|
|
124
|
+
if (property.type !== "Property") {
|
|
125
|
+
usage.usesAll = true;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (record(property)["computed"] === true) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const key = record(property)["key"];
|
|
132
|
+
if (key.type === "Identifier") {
|
|
133
|
+
usage.used.add(record(key)["name"]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function collectReferenceMembers(scope, paramName, usage) {
|
|
138
|
+
const variable = ensureNonNullable(scope.set.get(paramName));
|
|
139
|
+
for (const reference of variable.references) {
|
|
140
|
+
classifyReference(reference.identifier, usage);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function getInterfaceMembers(node) {
|
|
144
|
+
const members = /* @__PURE__ */ new Map();
|
|
145
|
+
const interfaceBody = record(node)["body"];
|
|
146
|
+
for (const signature of record(interfaceBody)["body"]) {
|
|
147
|
+
if (nodeType(signature) !== "TSPropertySignature" && nodeType(signature) !== "TSMethodSignature") {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (record(signature)["computed"] === true) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const key = record(signature)["key"];
|
|
154
|
+
if (key.type === "Identifier") {
|
|
155
|
+
members.set(record(key)["name"], key);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return members;
|
|
159
|
+
}
|
|
160
|
+
function getInterfaceName(node) {
|
|
161
|
+
const id = record(node)["id"];
|
|
162
|
+
return record(id)["name"];
|
|
163
|
+
}
|
|
164
|
+
function getParamInfo(param) {
|
|
165
|
+
const actualParam = nodeType(param) === "TSParameterProperty" ? record(param)["parameter"] : param;
|
|
166
|
+
const typeName = getTypeReferenceName(actualParam);
|
|
167
|
+
if (!typeName || !PARAMS_OPTIONS_SUFFIX_PATTERN.test(typeName)) {
|
|
168
|
+
return void 0;
|
|
169
|
+
}
|
|
170
|
+
if (actualParam.type === "Identifier") {
|
|
171
|
+
return { binding: { name: record(actualParam)["name"], type: "identifier" }, typeName };
|
|
172
|
+
}
|
|
173
|
+
if (actualParam.type === "ObjectPattern") {
|
|
174
|
+
return { binding: { pattern: actualParam, type: "pattern" }, typeName };
|
|
175
|
+
}
|
|
176
|
+
return void 0;
|
|
177
|
+
}
|
|
178
|
+
function getTypeReferenceName(param) {
|
|
179
|
+
const annotation = record(param)["typeAnnotation"];
|
|
180
|
+
if (!isNode(annotation)) {
|
|
181
|
+
return void 0;
|
|
182
|
+
}
|
|
183
|
+
const typeNode = record(annotation)["typeAnnotation"];
|
|
184
|
+
if (nodeType(typeNode) !== "TSTypeReference") {
|
|
185
|
+
return void 0;
|
|
186
|
+
}
|
|
187
|
+
const typeName = record(typeNode)["typeName"];
|
|
188
|
+
if (typeName.type !== "Identifier") {
|
|
189
|
+
return void 0;
|
|
190
|
+
}
|
|
191
|
+
return record(typeName)["name"];
|
|
192
|
+
}
|
|
193
|
+
function isNode(value) {
|
|
194
|
+
return typeof value === "object" && value !== null && typeof value.type === "string";
|
|
195
|
+
}
|
|
196
|
+
function nodeType(node) {
|
|
197
|
+
return record(node)["type"];
|
|
198
|
+
}
|
|
199
|
+
function record(node) {
|
|
200
|
+
return node;
|
|
201
|
+
}
|
|
202
|
+
export {
|
|
203
|
+
MESSAGE_ID,
|
|
204
|
+
noUnusedParamsMembers
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzXG4gKlxuICogRmxhZ3MgbWVtYmVycyBvZiBhIGAqUGFyYW1zYCAvIGAqT3B0aW9uc2AgcGFyYW1ldGVyLWJhZyBpbnRlcmZhY2UgdGhhdCBhcmVcbiAqIG5ldmVyIGFjY2Vzc2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24vbWV0aG9kL2NvbnN0cnVjdG9yIHRoYXQgcmVjZWl2ZXMgdGhlXG4gKiBpbnRlcmZhY2UgYXMgYSBwYXJhbWV0ZXIuXG4gKlxuICogRGV0ZWN0aW9uIGlzIHBlci1mdW5jdGlvbiwgdXNpbmcgc2NvcGUgYW5hbHlzaXMgdG8gZmluZCB0aGUgcmVhbCByZWZlcmVuY2VzXG4gKiB0byB0aGUgcGFyYW1ldGVyIChub3QgdW5yZWxhdGVkIHNhbWUtbmFtZWQgaWRlbnRpZmllcnMpLiBBIG1lbWJlciBjb3VudHMgYXNcbiAqIHVzZWQgd2hlbiBpdCBpcyByZWZlcmVuY2VkIGJ5IG5hbWUgXHUyMDE0IGBwYXJhbXMubWVtYmVyYCwgYHBhcmFtc1snbWVtYmVyJ11gLCBvclxuICogYGNvbnN0IHsgbWVtYmVyIH0gPSBwYXJhbXNgIChwbHVzIGEgZGVzdHJ1Y3R1cmVkIHNpZ25hdHVyZVxuICogYGZuKHsgbWVtYmVyIH06IEZvb1BhcmFtcylgKS5cbiAqXG4gKiBDcnVjaWFsbHksIGlmIHRoZSBvYmplY3QgZXZlciBFU0NBUEVTIHdob2xlIFx1MjAxNCBzcHJlYWQgKGB7IC4uLnBhcmFtcyB9YCksIHJlc3RcbiAqIChgY29uc3QgeyAuLi5yZXN0IH0gPSBwYXJhbXNgKSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IChgZihwYXJhbXMpYCksIHJldHVybmVkLFxuICogb3Igc3RvcmVkIChgdGhpcy5wYXJhbXMgPSBwYXJhbXNgKSBcdTIwMTQgZXZlcnkgbWVtYmVyIGlzIHRyZWF0ZWQgYXMgdXNlZCBhbmRcbiAqIG5vdGhpbmcgaXMgcmVwb3J0ZWQgZm9yIHRoYXQgaW50ZXJmYWNlLiBTdWNoIGFuIGVzY2FwZSBlaXRoZXIgcmVhZHMgZXZlcnlcbiAqIG1lbWJlciAoc3ByZWFkL3Jlc3QpIG9yIGhhbmRzIHRoZSBvYmplY3QgdG8gY29kZSB0aGlzIHJ1bGUgY2Fubm90IHNlZSwgc29cbiAqIG1lbWJlciBkZWFkbmVzcyBjYW5ub3QgYmUgZGVjaWRlZCBsb2NhbGx5LlxuICpcbiAqIEEgbWVtYmVyIGlzIHRoZXJlZm9yZSBmbGFnZ2VkIG9ubHkgd2hlbiBpdCBpcyBuZXZlciByZWZlcmVuY2VkIGJ5IG5hbWUgQU5EXG4gKiB0aGUgb2JqZWN0IG5ldmVyIGVzY2FwZXMgXHUyMDE0IGkuZS4gdGhlIFwiYSBgcGFyYW1zLnhgIHVzYWdlIHdhcyBkZWxldGVkIGJ1dCBgeGBcbiAqIHdhcyBsZWZ0IG9uIHRoZSBpbnRlcmZhY2VcIiBjYXNlLiBBIG1lbWJlciB0aGF0IGlzIGFjdHVhbGx5IHN0aWxsIG5lZWRlZCAocmVhZFxuICogdmlhIGFuIGVzY2FwZSkgaXMgbmV2ZXIgd3JvbmdseSBmbGFnZ2VkOyBhIG1lbWJlciB0aGF0IGlzIGVzY2FwZWQgYnV0IGRlYWRcbiAqIGRvd25zdHJlYW0gaXMgYSB0b2xlcmF0ZWQgZmFsc2UgbmVnYXRpdmUgKGl0cyBkZWFkbmVzcyBpcyBub3QgbG9jYWwpLlxuICpcbiAqIE9ubHkgaW50ZXJmYWNlcyBkZWNsYXJlZCBpbiB0aGUgc2FtZSBmaWxlIGFyZSBjaGVja2VkOyBhbiBpbXBvcnRlZCBwYXJhbWV0ZXJcbiAqIHR5cGUgaXMgc2tpcHBlZC4gT25seSBpZGVudGlmaWVyLW5hbWVkIG1lbWJlcnMgYXJlIHRyYWNrZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBSdWxlLFxuICBTY29wZVxufSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuY29uc3QgUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4gPSAvKD86UGFyYW1zfE9wdGlvbnMpJC87XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3VudXNlZFBhcmFtc01lbWJlcic7XG5cbmludGVyZmFjZSBJZGVudGlmaWVyQmluZGluZyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ2lkZW50aWZpZXInO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJmYWNlVXNhZ2Uge1xuICByZWFkb25seSB1c2VkOiBTZXQ8c3RyaW5nPjtcbiAgdXNlc0FsbDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIE1heWJlVHlwZWROb2RlIHtcbiAgdHlwZT86IHVua25vd247XG59XG5cbnR5cGUgUGFyYW1CaW5kaW5nID0gSWRlbnRpZmllckJpbmRpbmcgfCBQYXR0ZXJuQmluZGluZztcblxuaW50ZXJmYWNlIFBhcmFtSW5mbyB7XG4gIHJlYWRvbmx5IGJpbmRpbmc6IFBhcmFtQmluZGluZztcbiAgcmVhZG9ubHkgdHlwZU5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBhdHRlcm5CaW5kaW5nIHtcbiAgcGF0dGVybjogUnVsZS5Ob2RlO1xuICB0eXBlOiAncGF0dGVybic7XG59XG5cbmV4cG9ydCBjb25zdCBub1VudXNlZFBhcmFtc01lbWJlcnM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VLZXlOb2RlcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBSdWxlLk5vZGU+PigpO1xuICAgIGNvbnN0IHVzYWdlQnlJbnRlcmZhY2UgPSBuZXcgTWFwPHN0cmluZywgSW50ZXJmYWNlVXNhZ2U+KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgJzpmdW5jdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcmVjb3JkKG5vZGUpWydwYXJhbXMnXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgICAgICAgIGNvbnN0IGluZm8gPSBnZXRQYXJhbUluZm8ocGFyYW0pO1xuICAgICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdXNhZ2UgPSBnZXRPckNyZWF0ZVVzYWdlKGluZm8udHlwZU5hbWUpO1xuICAgICAgICAgIGlmIChpbmZvLmJpbmRpbmcudHlwZSA9PT0gJ3BhdHRlcm4nKSB7XG4gICAgICAgICAgICBjb2xsZWN0UGF0dGVybk1lbWJlcnMoaW5mby5iaW5kaW5nLnBhdHRlcm4sIHVzYWdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sbGVjdFJlZmVyZW5jZU1lbWJlcnMoY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpLCBpbmZvLmJpbmRpbmcubmFtZSwgdXNhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IFt0eXBlTmFtZSwga2V5Tm9kZXNdIG9mIGludGVyZmFjZUtleU5vZGVzKSB7XG4gICAgICAgICAgY29uc3QgdXNhZ2UgPSB1c2FnZUJ5SW50ZXJmYWNlLmdldCh0eXBlTmFtZSk7XG4gICAgICAgICAgaWYgKCF1c2FnZSB8fCB1c2FnZS51c2VzQWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFttZW1iZXJOYW1lLCBrZXlOb2RlXSBvZiBrZXlOb2Rlcykge1xuICAgICAgICAgICAgaWYgKCF1c2FnZS51c2VkLmhhcyhtZW1iZXJOYW1lKSkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZTogdHlwZU5hbWUsXG4gICAgICAgICAgICAgICAgICBtZW1iZXI6IG1lbWJlck5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICAgICAgICBub2RlOiBrZXlOb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFRTSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRJbnRlcmZhY2VOYW1lKG5vZGUpO1xuICAgICAgICBpZiAoIVBBUkFNU19PUFRJT05TX1NVRkZJWF9QQVRURVJOLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW50ZXJmYWNlS2V5Tm9kZXMuc2V0KG5hbWUsIGdldEludGVyZmFjZU1lbWJlcnMobm9kZSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRPckNyZWF0ZVVzYWdlKHR5cGVOYW1lOiBzdHJpbmcpOiBJbnRlcmZhY2VVc2FnZSB7XG4gICAgICBsZXQgdXNhZ2UgPSB1c2FnZUJ5SW50ZXJmYWNlLmdldCh0eXBlTmFtZSk7XG4gICAgICBpZiAoIXVzYWdlKSB7XG4gICAgICAgIHVzYWdlID0geyB1c2VkOiBuZXcgU2V0PHN0cmluZz4oKSwgdXNlc0FsbDogZmFsc2UgfTtcbiAgICAgICAgdXNhZ2VCeUludGVyZmFjZS5zZXQodHlwZU5hbWUsIHVzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1c2FnZTtcbiAgICB9XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0ZsYWcgYCpQYXJhbXNgL2AqT3B0aW9uc2AgaW50ZXJmYWNlIG1lbWJlcnMgbmV2ZXIgYWNjZXNzZWQgYnkgdGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgdGhlbSdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdNZW1iZXIgXCJ7eyBtZW1iZXIgfX1cIiBvZiBcInt7IGludGVyZmFjZU5hbWUgfX1cIiBpcyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBpdC4gUmVtb3ZlIGl0ICh0aGUgY29tcGlsZXIgd2lsbCBjYXRjaCBpdCBpZiBpdCBpcyBzdGlsbCBuZWVkZWQgZWxzZXdoZXJlKS4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2U6IG9iamVjdCwgdXNhZ2U6IEludGVyZmFjZVVzYWdlKTogdm9pZCB7XG4gIGNvbnN0IHBhcmVudCA9IHJlY29yZChyZWZlcmVuY2UpWydwYXJlbnQnXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIHJlY29yZChwYXJlbnQpWydvYmplY3QnXSA9PT0gcmVmZXJlbmNlKSB7XG4gICAgY29sbGVjdE1lbWJlckFjY2VzcyhwYXJlbnQsIHVzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGFyZW50LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0b3InICYmIHJlY29yZChwYXJlbnQpWydpbml0J10gPT09IHJlZmVyZW5jZSAmJiAocmVjb3JkKHBhcmVudClbJ2lkJ10gYXMgUnVsZS5Ob2RlKS50eXBlID09PSAnT2JqZWN0UGF0dGVybicpIHtcbiAgICBjb2xsZWN0UGF0dGVybk1lbWJlcnMocmVjb3JkKHBhcmVudClbJ2lkJ10gYXMgUnVsZS5Ob2RlLCB1c2FnZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlIG9iamVjdCBlc2NhcGVzIHdob2xlIChwYXNzZWQgYXMgYW4gYXJndW1lbnQsIHJldHVybmVkLCBzdG9yZWQsIHNwcmVhZCwgLi4uKTogZXZlcnkgbWVtYmVyIG1heSBiZSByZWFkIGVsc2V3aGVyZS5cbiAgdXNhZ2UudXNlc0FsbCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RNZW1iZXJBY2Nlc3Mobm9kZTogUnVsZS5Ob2RlLCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgY29uc3QgY29tcHV0ZWQgPSByZWNvcmQobm9kZSlbJ2NvbXB1dGVkJ10gPT09IHRydWU7XG4gIGNvbnN0IHByb3BlcnR5ID0gcmVjb3JkKG5vZGUpWydwcm9wZXJ0eSddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIGlmICghY29tcHV0ZWQpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHJlY29yZChwcm9wZXJ0eSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydHkudHlwZSA9PT0gJ0xpdGVyYWwnKSB7XG4gICAgY29uc3QgdmFsdWUgPSByZWNvcmQocHJvcGVydHkpWyd2YWx1ZSddO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB1c2FnZS51c2VkLmFkZCh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhwYXR0ZXJuOiBSdWxlLk5vZGUsIHVzYWdlOiBJbnRlcmZhY2VVc2FnZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHJlY29yZChwYXR0ZXJuKVsncHJvcGVydGllcyddIGFzIFJ1bGUuTm9kZVtdKSB7XG4gICAgaWYgKHByb3BlcnR5LnR5cGUgIT09ICdQcm9wZXJ0eScpIHtcbiAgICAgIC8vIGBjb25zdCB7IC4uLnJlc3QgfSA9IHBhcmFtc2AgcmVhZHMgZXZlcnkgcmVtYWluaW5nIG1lbWJlci5cbiAgICAgIHVzYWdlLnVzZXNBbGwgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZWNvcmQocHJvcGVydHkpWydjb21wdXRlZCddID09PSB0cnVlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcmVjb3JkKHByb3BlcnR5KVsna2V5J10gYXMgUnVsZS5Ob2RlO1xuICAgIGlmIChrZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICB1c2FnZS51c2VkLmFkZChyZWNvcmQoa2V5KVsnbmFtZSddIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RSZWZlcmVuY2VNZW1iZXJzKHNjb3BlOiBTY29wZS5TY29wZSwgcGFyYW1OYW1lOiBzdHJpbmcsIHVzYWdlOiBJbnRlcmZhY2VVc2FnZSk6IHZvaWQge1xuICBjb25zdCB2YXJpYWJsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNjb3BlLnNldC5nZXQocGFyYW1OYW1lKSk7XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHZhcmlhYmxlLnJlZmVyZW5jZXMpIHtcbiAgICBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2UuaWRlbnRpZmllciwgdXNhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU1lbWJlcnMobm9kZTogUnVsZS5Ob2RlKTogTWFwPHN0cmluZywgUnVsZS5Ob2RlPiB7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWFwPHN0cmluZywgUnVsZS5Ob2RlPigpO1xuICBjb25zdCBpbnRlcmZhY2VCb2R5ID0gcmVjb3JkKG5vZGUpWydib2R5J10gYXMgUnVsZS5Ob2RlO1xuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiByZWNvcmQoaW50ZXJmYWNlQm9keSlbJ2JvZHknXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmIChub2RlVHlwZShzaWduYXR1cmUpICE9PSAnVFNQcm9wZXJ0eVNpZ25hdHVyZScgJiYgbm9kZVR5cGUoc2lnbmF0dXJlKSAhPT0gJ1RTTWV0aG9kU2lnbmF0dXJlJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZWNvcmQoc2lnbmF0dXJlKVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHJlY29yZChzaWduYXR1cmUpWydrZXknXSBhcyBSdWxlLk5vZGU7XG4gICAgaWYgKGtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIG1lbWJlcnMuc2V0KHJlY29yZChrZXkpWyduYW1lJ10gYXMgc3RyaW5nLCBrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVtYmVycztcbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJmYWNlTmFtZShub2RlOiBSdWxlLk5vZGUpOiBzdHJpbmcge1xuICBjb25zdCBpZCA9IHJlY29yZChub2RlKVsnaWQnXSBhcyBSdWxlLk5vZGU7XG4gIHJldHVybiByZWNvcmQoaWQpWyduYW1lJ10gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbUluZm8ocGFyYW06IFJ1bGUuTm9kZSk6IFBhcmFtSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFjdHVhbFBhcmFtID0gbm9kZVR5cGUocGFyYW0pID09PSAnVFNQYXJhbWV0ZXJQcm9wZXJ0eScgPyByZWNvcmQocGFyYW0pWydwYXJhbWV0ZXInXSBhcyBSdWxlLk5vZGUgOiBwYXJhbTtcblxuICBjb25zdCB0eXBlTmFtZSA9IGdldFR5cGVSZWZlcmVuY2VOYW1lKGFjdHVhbFBhcmFtKTtcbiAgaWYgKCF0eXBlTmFtZSB8fCAhUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdCh0eXBlTmFtZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGFjdHVhbFBhcmFtLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiB7IGJpbmRpbmc6IHsgbmFtZTogcmVjb3JkKGFjdHVhbFBhcmFtKVsnbmFtZSddIGFzIHN0cmluZywgdHlwZTogJ2lkZW50aWZpZXInIH0sIHR5cGVOYW1lIH07XG4gIH1cblxuICBpZiAoYWN0dWFsUGFyYW0udHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKSB7XG4gICAgcmV0dXJuIHsgYmluZGluZzogeyBwYXR0ZXJuOiBhY3R1YWxQYXJhbSwgdHlwZTogJ3BhdHRlcm4nIH0sIHR5cGVOYW1lIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUeXBlUmVmZXJlbmNlTmFtZShwYXJhbTogUnVsZS5Ob2RlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW5ub3RhdGlvbiA9IHJlY29yZChwYXJhbSlbJ3R5cGVBbm5vdGF0aW9uJ107XG4gIGlmICghaXNOb2RlKGFubm90YXRpb24pKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOb2RlID0gcmVjb3JkKGFubm90YXRpb24pWyd0eXBlQW5ub3RhdGlvbiddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKG5vZGVUeXBlKHR5cGVOb2RlKSAhPT0gJ1RTVHlwZVJlZmVyZW5jZScpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdHlwZU5hbWUgPSByZWNvcmQodHlwZU5vZGUpWyd0eXBlTmFtZSddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHR5cGVOYW1lLnR5cGUgIT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHJlY29yZCh0eXBlTmFtZSlbJ25hbWUnXSBhcyBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1bGUuTm9kZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiAodmFsdWUgYXMgTWF5YmVUeXBlZE5vZGUpLnR5cGUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZShub2RlOiBSdWxlLk5vZGUpOiBzdHJpbmcge1xuICByZXR1cm4gcmVjb3JkKG5vZGUpWyd0eXBlJ10gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiByZWNvcmQobm9kZTogb2JqZWN0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gbm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUNBLFNBQVMseUJBQXlCO0FBRWxDLE1BQU0sZ0NBQWdDO0FBRS9CLE1BQU0sYUFBYTtBQTRCbkIsTUFBTSx3QkFBeUM7QUFBQSxFQUNwRCxPQUFPLFNBQVM7QUFDZCxVQUFNLG9CQUFvQixvQkFBSSxJQUFvQztBQUNsRSxVQUFNLG1CQUFtQixvQkFBSSxJQUE0QjtBQUV6RCxXQUFPO0FBQUEsTUFDTCxZQUFZLE1BQXVCO0FBQ2pDLG1CQUFXLFNBQVMsT0FBTyxJQUFJLEVBQUUsUUFBUSxHQUFrQjtBQUN6RCxnQkFBTSxPQUFPLGFBQWEsS0FBSztBQUMvQixjQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsVUFDRjtBQUVBLGdCQUFNLFFBQVEsaUJBQWlCLEtBQUssUUFBUTtBQUM1QyxjQUFJLEtBQUssUUFBUSxTQUFTLFdBQVc7QUFDbkMsa0NBQXNCLEtBQUssUUFBUSxTQUFTLEtBQUs7QUFBQSxVQUNuRCxPQUFPO0FBQ0wsb0NBQXdCLFFBQVEsV0FBVyxTQUFTLElBQUksR0FBRyxLQUFLLFFBQVEsTUFBTSxLQUFLO0FBQUEsVUFDckY7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLE1BQ0EsaUJBQXVCO0FBQ3JCLG1CQUFXLENBQUMsVUFBVSxRQUFRLEtBQUssbUJBQW1CO0FBQ3BELGdCQUFNLFFBQVEsaUJBQWlCLElBQUksUUFBUTtBQUMzQyxjQUFJLENBQUMsU0FBUyxNQUFNLFNBQVM7QUFDM0I7QUFBQSxVQUNGO0FBRUEscUJBQVcsQ0FBQyxZQUFZLE9BQU8sS0FBSyxV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
|
|
@@ -22,6 +22,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
24
|
import { noAsyncCallbackToUnsafeReturn } from "./no-async-callback-to-unsafe-return.mjs";
|
|
25
|
+
import { noUnusedParamsMembers } from "./no-unused-params-members.mjs";
|
|
25
26
|
import { noUsedUnderscoreVariables } from "./no-used-underscore-variables.mjs";
|
|
26
27
|
import { paramsOptionsNameMatch } from "./params-options-name-match.mjs";
|
|
27
28
|
import { preferNoopAsync } from "./prefer-noop-async.mjs";
|
|
@@ -32,6 +33,7 @@ import { requireSuperCall } from "./require-super-call.mjs";
|
|
|
32
33
|
const obsidianDevUtilsPlugin = {
|
|
33
34
|
rules: {
|
|
34
35
|
"no-async-callback-to-unsafe-return": noAsyncCallbackToUnsafeReturn,
|
|
36
|
+
"no-unused-params-members": noUnusedParamsMembers,
|
|
35
37
|
"no-used-underscore-variables": noUsedUnderscoreVariables,
|
|
36
38
|
"params-options-name-match": paramsOptionsNameMatch,
|
|
37
39
|
"prefer-noop-async": preferNoopAsync,
|
|
@@ -44,4 +46,4 @@ const obsidianDevUtilsPlugin = {
|
|
|
44
46
|
export {
|
|
45
47
|
obsidianDevUtilsPlugin
|
|
46
48
|
};
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL2VzbGludC1ydWxlcy9vYnNpZGlhbi1kZXYtdXRpbHMtcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHBsdWdpbiBmb3IgT2JzaWRpYW4gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzLlxuICovXG5pbXBvcnQgdHlwZSB7IEVTTGludCB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuIH0gZnJvbSAnLi9uby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuLnRzJztcbmltcG9ydCB7IG5vVW51c2VkUGFyYW1zTWVtYmVycyB9IGZyb20gJy4vbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzLnRzJztcbmltcG9ydCB7IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXMgfSBmcm9tICcuL25vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMudHMnO1xuaW1wb3J0IHsgcGFyYW1zT3B0aW9uc05hbWVNYXRjaCB9IGZyb20gJy4vcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaC50cyc7XG5pbXBvcnQgeyBwcmVmZXJOb29wQXN5bmMgfSBmcm9tICcuL3ByZWZlci1ub29wLWFzeW5jLnRzJztcbmltcG9ydCB7IHJlYWRvbmx5UGFyYW1zT3B0aW9uc1Jlc3VsdE1lbWJlcnMgfSBmcm9tICcuL3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzLnRzJztcbmltcG9ydCB7IHJlcXVpcmVDb21wb25lbnRTdWZmaXggfSBmcm9tICcuL3JlcXVpcmUtY29tcG9uZW50LXN1ZmZpeC50cyc7XG5pbXBvcnQgeyByZXF1aXJlTWV0aG9kVGVtcGxhdGUgfSBmcm9tICcuL3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlLnRzJztcbmltcG9ydCB7IHJlcXVpcmVTdXBlckNhbGwgfSBmcm9tICcuL3JlcXVpcmUtc3VwZXItY2FsbC50cyc7XG5cbmV4cG9ydCBjb25zdCBvYnNpZGlhbkRldlV0aWxzUGx1Z2luOiBFU0xpbnQuUGx1Z2luID0ge1xuICBydWxlczoge1xuICAgICduby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuJzogbm9Bc3luY0NhbGxiYWNrVG9VbnNhZmVSZXR1cm4sXG4gICAgJ25vLXVudXNlZC1wYXJhbXMtbWVtYmVycyc6IG5vVW51c2VkUGFyYW1zTWVtYmVycyxcbiAgICAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXMsXG4gICAgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiBwYXJhbXNPcHRpb25zTmFtZU1hdGNoLFxuICAgICdwcmVmZXItbm9vcC1hc3luYyc6IHByZWZlck5vb3BBc3luYyxcbiAgICAncmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMnOiByZWFkb25seVBhcmFtc09wdGlvbnNSZXN1bHRNZW1iZXJzLFxuICAgICdyZXF1aXJlLWNvbXBvbmVudC1zdWZmaXgnOiByZXF1aXJlQ29tcG9uZW50U3VmZml4LFxuICAgICdyZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZSc6IHJlcXVpcmVNZXRob2RUZW1wbGF0ZSxcbiAgICAncmVxdWlyZS1zdXBlci1jYWxsJzogcmVxdWlyZVN1cGVyQ2FsbFxuICB9XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxTQUFTLHFDQUFxQztBQUM5QyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLGlDQUFpQztBQUMxQyxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDBDQUEwQztBQUNuRCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLHdCQUF3QjtBQUUxQixNQUFNLHlCQUF3QztBQUFBLEVBQ25ELE9BQU87QUFBQSxJQUNMLHNDQUFzQztBQUFBLElBQ3RDLDRCQUE0QjtBQUFBLElBQzVCLGdDQUFnQztBQUFBLElBQ2hDLDZCQUE2QjtBQUFBLElBQzdCLHFCQUFxQjtBQUFBLElBQ3JCLDBDQUEwQztBQUFBLElBQzFDLDRCQUE0QjtBQUFBLElBQzVCLDJCQUEyQjtBQUFBLElBQzNCLHNCQUFzQjtBQUFBLEVBQ3hCO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference path="../library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Jest setup file that enables async-operation tracking for the duration of each test.
|
|
6
|
+
*
|
|
7
|
+
* Add it to your Jest config's `setupFilesAfterEach` (or import it from another setup file). It enables
|
|
8
|
+
* tracking before each test and disables it afterwards, so tests can `await waitForAllAsyncOperations()`.
|
|
9
|
+
*
|
|
10
|
+
* This is a per-test setup file, not a Jest `globalSetup` module, so it has no default export.
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
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 initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
afterEach,
|
|
26
|
+
beforeEach
|
|
27
|
+
} from "@jest/globals";
|
|
28
|
+
import { setupAsyncOperationTracking } from "./async-operation-tracking-setup.mjs";
|
|
29
|
+
setupAsyncOperationTracking({
|
|
30
|
+
afterEach,
|
|
31
|
+
beforeEach
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NldHVwL2FzeW5jLW9wZXJhdGlvbi10cmFja2luZy1qZXN0LXNldHVwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSmVzdCBzZXR1cCBmaWxlIHRoYXQgZW5hYmxlcyBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiBlYWNoIHRlc3QuXG4gKlxuICogQWRkIGl0IHRvIHlvdXIgSmVzdCBjb25maWcncyBgc2V0dXBGaWxlc0FmdGVyRWFjaGAgKG9yIGltcG9ydCBpdCBmcm9tIGFub3RoZXIgc2V0dXAgZmlsZSkuIEl0IGVuYWJsZXNcbiAqIHRyYWNraW5nIGJlZm9yZSBlYWNoIHRlc3QgYW5kIGRpc2FibGVzIGl0IGFmdGVyd2FyZHMsIHNvIHRlc3RzIGNhbiBgYXdhaXQgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpYC5cbiAqXG4gKiBUaGlzIGlzIGEgcGVyLXRlc3Qgc2V0dXAgZmlsZSwgbm90IGEgSmVzdCBgZ2xvYmFsU2V0dXBgIG1vZHVsZSwgc28gaXQgaGFzIG5vIGRlZmF1bHQgZXhwb3J0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGluIEplc3Qgc2V0dXAtZmlsZSBnbHVlOyBzZXR1cEFzeW5jT3BlcmF0aW9uVHJhY2tpbmcgaXMgdW5pdC10ZXN0ZWQgc2VwYXJhdGVseS4gKi9cbmltcG9ydCB7XG4gIGFmdGVyRWFjaCxcbiAgYmVmb3JlRWFjaFxufSBmcm9tICdAamVzdC9nbG9iYWxzJztcblxuaW1wb3J0IHsgc2V0dXBBc3luY09wZXJhdGlvblRyYWNraW5nIH0gZnJvbSAnLi9hc3luYy1vcGVyYXRpb24tdHJhY2tpbmctc2V0dXAudHMnO1xuXG5zZXR1cEFzeW5jT3BlcmF0aW9uVHJhY2tpbmcoe1xuICBhZnRlckVhY2gsXG4gIGJlZm9yZUVhY2hcbn0pO1xuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLG1DQUFtQztBQUU1Qyw0QkFBNEI7QUFBQSxFQUMxQjtBQUFBLEVBQ0E7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/// <reference path="../library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Framework-agnostic test-setup endpoint for async-operation tracking.
|
|
6
|
+
*
|
|
7
|
+
* Wires {@link enableAsyncOperationTracking} / {@link disableAsyncOperationTracking} into a test
|
|
8
|
+
* framework's `beforeEach` / `afterEach` lifecycle hooks. Each test gets a fresh tracking session:
|
|
9
|
+
* tracking is enabled before the test runs and disabled (clearing any tracked operations) after it
|
|
10
|
+
* finishes, so a test can `await waitForAllAsyncOperations()` without leaking module-global state into
|
|
11
|
+
* the next test.
|
|
12
|
+
*
|
|
13
|
+
* This module has no import-time side effects and no dependency on any specific test framework. The
|
|
14
|
+
* thin Vitest/Jest setup files (`async-operation-tracking-vitest-setup.ts` /
|
|
15
|
+
* `async-operation-tracking-jest-setup.ts`) call {@link setupAsyncOperationTracking} with the hooks
|
|
16
|
+
* imported from their respective frameworks.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* A test-framework lifecycle hook registrar, such as `beforeEach` or `afterEach`.
|
|
20
|
+
*
|
|
21
|
+
* @param fn - The callback to register with the hook.
|
|
22
|
+
*/
|
|
23
|
+
export type HookRegistrar = (fn: () => void) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Parameters for {@link setupAsyncOperationTracking}.
|
|
26
|
+
*/
|
|
27
|
+
export interface SetupAsyncOperationTrackingParams {
|
|
28
|
+
/**
|
|
29
|
+
* The test framework's `afterEach` hook registrar. Used to disable async-operation tracking after
|
|
30
|
+
* each test.
|
|
31
|
+
*/
|
|
32
|
+
readonly afterEach: HookRegistrar;
|
|
33
|
+
/**
|
|
34
|
+
* The test framework's `beforeEach` hook registrar. Used to enable async-operation tracking before
|
|
35
|
+
* each test.
|
|
36
|
+
*/
|
|
37
|
+
readonly beforeEach: HookRegistrar;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Registers async-operation tracking with a test framework's lifecycle hooks.
|
|
41
|
+
*
|
|
42
|
+
* Enables tracking before each test (via the supplied `beforeEach`) and disables it after each test
|
|
43
|
+
* (via the supplied `afterEach`), so every test runs with a fresh tracking session.
|
|
44
|
+
*
|
|
45
|
+
* @param params - The lifecycle hook registrars to wire tracking into.
|
|
46
|
+
*/
|
|
47
|
+
export declare function setupAsyncOperationTracking(params: SetupAsyncOperationTrackingParams): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
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 initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
disableAsyncOperationTracking,
|
|
26
|
+
enableAsyncOperationTracking
|
|
27
|
+
} from "../async.mjs";
|
|
28
|
+
function setupAsyncOperationTracking(params) {
|
|
29
|
+
params.beforeEach(enableAsyncOperationTracking);
|
|
30
|
+
params.afterEach(disableAsyncOperationTracking);
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
setupAsyncOperationTracking
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NldHVwL2FzeW5jLW9wZXJhdGlvbi10cmFja2luZy1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEZyYW1ld29yay1hZ25vc3RpYyB0ZXN0LXNldHVwIGVuZHBvaW50IGZvciBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmcuXG4gKlxuICogV2lyZXMge0BsaW5rIGVuYWJsZUFzeW5jT3BlcmF0aW9uVHJhY2tpbmd9IC8ge0BsaW5rIGRpc2FibGVBc3luY09wZXJhdGlvblRyYWNraW5nfSBpbnRvIGEgdGVzdFxuICogZnJhbWV3b3JrJ3MgYGJlZm9yZUVhY2hgIC8gYGFmdGVyRWFjaGAgbGlmZWN5Y2xlIGhvb2tzLiBFYWNoIHRlc3QgZ2V0cyBhIGZyZXNoIHRyYWNraW5nIHNlc3Npb246XG4gKiB0cmFja2luZyBpcyBlbmFibGVkIGJlZm9yZSB0aGUgdGVzdCBydW5zIGFuZCBkaXNhYmxlZCAoY2xlYXJpbmcgYW55IHRyYWNrZWQgb3BlcmF0aW9ucykgYWZ0ZXIgaXRcbiAqIGZpbmlzaGVzLCBzbyBhIHRlc3QgY2FuIGBhd2FpdCB3YWl0Rm9yQWxsQXN5bmNPcGVyYXRpb25zKClgIHdpdGhvdXQgbGVha2luZyBtb2R1bGUtZ2xvYmFsIHN0YXRlIGludG9cbiAqIHRoZSBuZXh0IHRlc3QuXG4gKlxuICogVGhpcyBtb2R1bGUgaGFzIG5vIGltcG9ydC10aW1lIHNpZGUgZWZmZWN0cyBhbmQgbm8gZGVwZW5kZW5jeSBvbiBhbnkgc3BlY2lmaWMgdGVzdCBmcmFtZXdvcmsuIFRoZVxuICogdGhpbiBWaXRlc3QvSmVzdCBzZXR1cCBmaWxlcyAoYGFzeW5jLW9wZXJhdGlvbi10cmFja2luZy12aXRlc3Qtc2V0dXAudHNgIC9cbiAqIGBhc3luYy1vcGVyYXRpb24tdHJhY2tpbmctamVzdC1zZXR1cC50c2ApIGNhbGwge0BsaW5rIHNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZ30gd2l0aCB0aGUgaG9va3NcbiAqIGltcG9ydGVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBmcmFtZXdvcmtzLlxuICovXG5cbmltcG9ydCB7XG4gIGRpc2FibGVBc3luY09wZXJhdGlvblRyYWNraW5nLFxuICBlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nXG59IGZyb20gJy4uL2FzeW5jLnRzJztcblxuLyoqXG4gKiBBIHRlc3QtZnJhbWV3b3JrIGxpZmVjeWNsZSBob29rIHJlZ2lzdHJhciwgc3VjaCBhcyBgYmVmb3JlRWFjaGAgb3IgYGFmdGVyRWFjaGAuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGNhbGxiYWNrIHRvIHJlZ2lzdGVyIHdpdGggdGhlIGhvb2suXG4gKi9cbmV4cG9ydCB0eXBlIEhvb2tSZWdpc3RyYXIgPSAoZm46ICgpID0+IHZvaWQpID0+IHZvaWQ7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBBc3luY09wZXJhdGlvblRyYWNraW5nUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXN0IGZyYW1ld29yaydzIGBhZnRlckVhY2hgIGhvb2sgcmVnaXN0cmFyLiBVc2VkIHRvIGRpc2FibGUgYXN5bmMtb3BlcmF0aW9uIHRyYWNraW5nIGFmdGVyXG4gICAqIGVhY2ggdGVzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFmdGVyRWFjaDogSG9va1JlZ2lzdHJhcjtcblxuICAvKipcbiAgICogVGhlIHRlc3QgZnJhbWV3b3JrJ3MgYGJlZm9yZUVhY2hgIGhvb2sgcmVnaXN0cmFyLiBVc2VkIHRvIGVuYWJsZSBhc3luYy1vcGVyYXRpb24gdHJhY2tpbmcgYmVmb3JlXG4gICAqIGVhY2ggdGVzdC5cbiAgICovXG4gIHJlYWRvbmx5IGJlZm9yZUVhY2g6IEhvb2tSZWdpc3RyYXI7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFzeW5jLW9wZXJhdGlvbiB0cmFja2luZyB3aXRoIGEgdGVzdCBmcmFtZXdvcmsncyBsaWZlY3ljbGUgaG9va3MuXG4gKlxuICogRW5hYmxlcyB0cmFja2luZyBiZWZvcmUgZWFjaCB0ZXN0ICh2aWEgdGhlIHN1cHBsaWVkIGBiZWZvcmVFYWNoYCkgYW5kIGRpc2FibGVzIGl0IGFmdGVyIGVhY2ggdGVzdFxuICogKHZpYSB0aGUgc3VwcGxpZWQgYGFmdGVyRWFjaGApLCBzbyBldmVyeSB0ZXN0IHJ1bnMgd2l0aCBhIGZyZXNoIHRyYWNraW5nIHNlc3Npb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBsaWZlY3ljbGUgaG9vayByZWdpc3RyYXJzIHRvIHdpcmUgdHJhY2tpbmcgaW50by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZyhwYXJhbXM6IFNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZ1BhcmFtcyk6IHZvaWQge1xuICBwYXJhbXMuYmVmb3JlRWFjaChlbmFibGVBc3luY09wZXJhdGlvblRyYWNraW5nKTtcbiAgcGFyYW1zLmFmdGVyRWFjaChkaXNhYmxlQXN5bmNPcGVyYXRpb25UcmFja2luZyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQWtDQSxTQUFTLDRCQUE0QixRQUFpRDtBQUMzRixTQUFPLFdBQVcsNEJBQTRCO0FBQzlDLFNBQU8sVUFBVSw2QkFBNkI7QUFDaEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference path="../library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Vitest setup file that enables async-operation tracking for the duration of each test.
|
|
6
|
+
*
|
|
7
|
+
* Add it to your Vitest config's `setupFiles` (or import it from another setup file). It enables
|
|
8
|
+
* tracking before each test and disables it afterwards, so tests can `await waitForAllAsyncOperations()`.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
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 initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
afterEach,
|
|
26
|
+
beforeEach
|
|
27
|
+
} from "vitest";
|
|
28
|
+
import { setupAsyncOperationTracking } from "./async-operation-tracking-setup.mjs";
|
|
29
|
+
setupAsyncOperationTracking({
|
|
30
|
+
afterEach,
|
|
31
|
+
beforeEach
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NldHVwL2FzeW5jLW9wZXJhdGlvbi10cmFja2luZy12aXRlc3Qtc2V0dXAudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWaXRlc3Qgc2V0dXAgZmlsZSB0aGF0IGVuYWJsZXMgYXN5bmMtb3BlcmF0aW9uIHRyYWNraW5nIGZvciB0aGUgZHVyYXRpb24gb2YgZWFjaCB0ZXN0LlxuICpcbiAqIEFkZCBpdCB0byB5b3VyIFZpdGVzdCBjb25maWcncyBgc2V0dXBGaWxlc2AgKG9yIGltcG9ydCBpdCBmcm9tIGFub3RoZXIgc2V0dXAgZmlsZSkuIEl0IGVuYWJsZXNcbiAqIHRyYWNraW5nIGJlZm9yZSBlYWNoIHRlc3QgYW5kIGRpc2FibGVzIGl0IGFmdGVyd2FyZHMsIHNvIHRlc3RzIGNhbiBgYXdhaXQgd2FpdEZvckFsbEFzeW5jT3BlcmF0aW9ucygpYC5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhpbiBWaXRlc3Qgc2V0dXAtZmlsZSBnbHVlOyBzZXR1cEFzeW5jT3BlcmF0aW9uVHJhY2tpbmcgaXMgdW5pdC10ZXN0ZWQgc2VwYXJhdGVseS4gKi9cbmltcG9ydCB7XG4gIGFmdGVyRWFjaCxcbiAgYmVmb3JlRWFjaFxufSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQgeyBzZXR1cEFzeW5jT3BlcmF0aW9uVHJhY2tpbmcgfSBmcm9tICcuL2FzeW5jLW9wZXJhdGlvbi10cmFja2luZy1zZXR1cC50cyc7XG5cbnNldHVwQXN5bmNPcGVyYXRpb25UcmFja2luZyh7XG4gIGFmdGVyRWFjaCxcbiAgYmVmb3JlRWFjaFxufSk7XG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsbUNBQW1DO0FBRTVDLDRCQUE0QjtBQUFBLEVBQzFCO0FBQUEsRUFDQTtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -19,9 +19,10 @@ import type { GenericFunction } from './function.mjs';
|
|
|
19
19
|
*
|
|
20
20
|
* @typeParam T - The target type to create a partial version of.
|
|
21
21
|
*/
|
|
22
|
-
export type StrictProxyPartial<T> = T extends GenericFunction ? T : T extends readonly unknown[] ? T : T extends object ?
|
|
22
|
+
export type StrictProxyPartial<T> = T extends GenericFunction ? T : T extends readonly unknown[] ? T : T extends object ? StrictProxyPartialObject<T> : T;
|
|
23
|
+
type StrictProxyPartialObject<T> = {
|
|
23
24
|
[K in keyof T]?: StrictProxyPartial<T[K]> | T[K];
|
|
24
|
-
}
|
|
25
|
+
};
|
|
25
26
|
/**
|
|
26
27
|
* Bypasses strict proxy to access the underlying object.
|
|
27
28
|
*
|
|
@@ -48,3 +49,4 @@ export declare function bypassStrictProxy<T>(obj: T): T;
|
|
|
48
49
|
* @returns A proxy typed as `T` that throws on unmocked property access.
|
|
49
50
|
*/
|
|
50
51
|
export declare function strictProxy<T>(partial: StrictProxyPartial<T>): T;
|
|
52
|
+
export {};
|
|
@@ -86,4 +86,4 @@ export {
|
|
|
86
86
|
bypassStrictProxy,
|
|
87
87
|
strictProxy
|
|
88
88
|
};
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmljdC1wcm94eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0cmljdGx5LXR5cGVkIG1vY2sgb2JqZWN0IGZhY3RvcnkgdmlhIGBQcm94eWAuIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yXG4gKiB3aGVuIGFueSB1bm1vY2tlZCBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiBUaGUgcHJveHkgaW1wbGVtZW50YXRpb24gbWlycm9ycyB0aGUgZGVzaWduIG9mXG4gKiBgb2JzaWRpYW4tdGVzdC1tb2Nrcy9zcmMvaW50ZXJuYWwvc3RyaWN0LXByb3h5LnRzYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuXG4vKipcbiAqIEEgcmVjdXJzaXZlIHBhcnRpYWwgdHlwZSBjb21wYXRpYmxlIHdpdGggYGV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzYC5cbiAqXG4gKiBVbmxpa2UgYFBhcnRpYWxEZWVwYCBmcm9tIHR5cGUtZmVzdCwgdGhpcyB0eXBlIGFsbG93cyBmdWxsIGBUYCB2YWx1ZXMgYXQgYW55XG4gKiBuZXN0aW5nIGxldmVsIHZpYSB0aGUgYHwgVFtLXWAgdW5pb24uIFRoaXMgaXMgZXNzZW50aWFsIGZvciBjb21wb3NpbmcgbmVzdGVkXG4gKiBgc3RyaWN0UHJveHlgIGNhbGxzIFx1MjAxNCBhbiBpbm5lciBgc3RyaWN0UHJveHk8TWV0YWRhdGFDYWNoZT4oey4uLn0pYCByZXR1cm5zXG4gKiBgTWV0YWRhdGFDYWNoZWAsIHdoaWNoIG11c3QgYmUgYXNzaWduYWJsZSB0byB0aGUgb3V0ZXIgcGFydGlhbCB0eXBlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgdHlwZSB0byBjcmVhdGUgYSBwYXJ0aWFsIHZlcnNpb24gb2YuXG4gKi9cbmV4cG9ydCB0eXBlIFN0cmljdFByb3h5UGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBHZW5lcmljRnVuY3Rpb24gPyBUXG4gIDogVCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA/
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmljdC1wcm94eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0cmljdGx5LXR5cGVkIG1vY2sgb2JqZWN0IGZhY3RvcnkgdmlhIGBQcm94eWAuIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yXG4gKiB3aGVuIGFueSB1bm1vY2tlZCBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiBUaGUgcHJveHkgaW1wbGVtZW50YXRpb24gbWlycm9ycyB0aGUgZGVzaWduIG9mXG4gKiBgb2JzaWRpYW4tdGVzdC1tb2Nrcy9zcmMvaW50ZXJuYWwvc3RyaWN0LXByb3h5LnRzYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuXG4vKipcbiAqIEEgcmVjdXJzaXZlIHBhcnRpYWwgdHlwZSBjb21wYXRpYmxlIHdpdGggYGV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzYC5cbiAqXG4gKiBVbmxpa2UgYFBhcnRpYWxEZWVwYCBmcm9tIHR5cGUtZmVzdCwgdGhpcyB0eXBlIGFsbG93cyBmdWxsIGBUYCB2YWx1ZXMgYXQgYW55XG4gKiBuZXN0aW5nIGxldmVsIHZpYSB0aGUgYHwgVFtLXWAgdW5pb24uIFRoaXMgaXMgZXNzZW50aWFsIGZvciBjb21wb3NpbmcgbmVzdGVkXG4gKiBgc3RyaWN0UHJveHlgIGNhbGxzIFx1MjAxNCBhbiBpbm5lciBgc3RyaWN0UHJveHk8TWV0YWRhdGFDYWNoZT4oey4uLn0pYCByZXR1cm5zXG4gKiBgTWV0YWRhdGFDYWNoZWAsIHdoaWNoIG11c3QgYmUgYXNzaWduYWJsZSB0byB0aGUgb3V0ZXIgcGFydGlhbCB0eXBlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgdHlwZSB0byBjcmVhdGUgYSBwYXJ0aWFsIHZlcnNpb24gb2YuXG4gKi9cbmV4cG9ydCB0eXBlIFN0cmljdFByb3h5UGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBHZW5lcmljRnVuY3Rpb24gPyBUXG4gIDogVCBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA/IFRcbiAgOiBUIGV4dGVuZHMgb2JqZWN0ID8gU3RyaWN0UHJveHlQYXJ0aWFsT2JqZWN0PFQ+XG4gIDogVDtcblxudHlwZSBTdHJpY3RQcm94eVBhcnRpYWxPYmplY3Q8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdPzogU3RyaWN0UHJveHlQYXJ0aWFsPFRbS10+IHwgVFtLXTtcbn07XG5cbmNvbnN0IFNUUklDVF9QUk9YWV9UQVJHRVRfU1lNQk9MID0gU3ltYm9sLmZvcignc3RyaWN0UHJveHlUYXJnZXQnKTtcblxuY29uc3QgUEFTU1RIUk9VR0hfUFJPUFMgPSBuZXcgU2V0PHN0cmluZyB8IHN5bWJvbD4oW1xuICAnX2lzTW9ja0Z1bmN0aW9uJyxcbiAgJyQkdHlwZW9mJyxcbiAgJ2FzeW1tZXRyaWNNYXRjaCcsXG4gICdub2RlVHlwZScsXG4gIFN5bWJvbC5pdGVyYXRvcixcbiAgU3ltYm9sLnRvUHJpbWl0aXZlLFxuICBTeW1ib2wudG9TdHJpbmdUYWcsXG4gICd0YWdOYW1lJyxcbiAgJ3RoZW4nLFxuICAndG9KU09OJ1xuXSk7XG5cbi8qKlxuICogQnlwYXNzZXMgc3RyaWN0IHByb3h5IHRvIGFjY2VzcyB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gKlxuICogSWYgdGhlIG9iamVjdCBpcyB3cmFwcGVkIGluIGEgc3RyaWN0IHByb3h5LCByZXR1cm5zIHRoZSB1bndyYXBwZWQgdGFyZ2V0LlxuICogT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBvYmplY3QgYXMtaXMuIFRoaXMgYWxsb3dzIHNhZmVseSBhY2Nlc3NpbmdcbiAqIG9wdGlvbmFsIHByb3BlcnRpZXMgd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBwcm94eSdzIGVycm9yIG9uIG1pc3NpbmcgcHJvcHMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIG9iamVjdCB0eXBlLlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gYnlwYXNzLlxuICogQHJldHVybnMgVGhlIHVud3JhcHBlZCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXBhc3NTdHJpY3RQcm94eTxUPihvYmo6IFQpOiBUIHtcbiAgaWYgKCFpc09iamVjdExpa2Uob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgaWYgKCEoU1RSSUNUX1BST1hZX1RBUkdFVF9TWU1CT0wgaW4gb2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgcmV0dXJuIG9ialtTVFJJQ1RfUFJPWFlfVEFSR0VUX1NZTUJPTF0gYXMgVDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaWN0bHktdHlwZWQgbW9jayBvYmplY3QgZnJvbSBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uXG4gKiBVc2VzIGEgYFByb3h5YCB0aGF0IHRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIHdoZW4gYW55IHVubW9ja2VkXG4gKiBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiAtIElkZW1wb3RlbnQ6IGRvdWJsZS13cmFwcGluZyBpcyBhIG5vLW9wLlxuICogLSBQYXNzdGhyb3VnaCBmb3Igd2VsbC1rbm93biBwcm9wcyAoYHRoZW5gLCBgdG9KU09OYCwgYFN5bWJvbC5pdGVyYXRvcmAsIGV0Yy4pLlxuICogLSBSZWN1cnNpdmUgcHJveHlpbmcgb2YgbmVzdGVkIHBsYWluIG9iamVjdHMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHRhcmdldCB0eXBlIHRvIG1vY2suXG4gKiBAcGFyYW0gcGFydGlhbCAtIEEgcGFydGlhbCBvYmplY3QgY29udGFpbmluZyBvbmx5IHRoZSBtb2NrZWQgbWVtYmVycy5cbiAqIEByZXR1cm5zIEEgcHJveHkgdHlwZWQgYXMgYFRgIHRoYXQgdGhyb3dzIG9uIHVubW9ja2VkIHByb3BlcnR5IGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmljdFByb3h5PFQ+KHBhcnRpYWw6IFN0cmljdFByb3h5UGFydGlhbDxUPik6IFQge1xuICByZXR1cm4gd3JhcFByb3h5PFQ+KHBhcnRpYWwpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGFuIG9iamVjdC1saWtlIHZhbHVlIChub3QgbnVsbCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgb2JqZWN0LWxpa2UuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IChub3QgYSBjbGFzcyBpbnN0YW5jZSwgYXJyYXksIG51bGwsIGV0Yy4pLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgdmFsdWUgaW4gYSBzdHJpY3QgcHJveHkuIElkZW1wb3RlbnQgXHUyMDE0IGRvdWJsZS13cmFwcGluZyBpcyBhIG5vLW9wLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgdHlwZSBmb3IgdGhlIHByb3h5LlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcmV0dXJucyBUaGUgcHJveGllZCB2YWx1ZSB0eXBlZCBhcyBgVGAuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFQgcHJvdmlkZXMgcmV0dXJuIHR5cGUgaW5mZXJlbmNlIGF0IGNhbGwgc2l0ZXMuXG5mdW5jdGlvbiB3cmFwUHJveHk8VD4odmFsdWU6IHVua25vd24pOiBUIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIFQ7XG4gIH1cblxuICBpZiAoU1RSSUNUX1BST1hZX1RBUkdFVF9TWU1CT0wgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsIFNUUklDVF9QUk9YWV9UQVJHRVRfU1lNQk9MLCB7IHZhbHVlIH0pO1xuXG4gIGNvbnN0IHByb3hpZWRDaGlsZHJlbiA9IG5ldyBNYXA8c3RyaW5nIHwgc3ltYm9sPigpO1xuXG4gIHJldHVybiBuZXcgUHJveHkodmFsdWUsIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik6IHVua25vd24ge1xuICAgICAgaWYgKHByb3AgaW4gdGFyZ2V0KSB7XG4gICAgICAgIGlmIChwcm94aWVkQ2hpbGRyZW4uaGFzKHByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3hpZWRDaGlsZHJlbi5nZXQocHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWw6IHVua25vd24gPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHdyYXBQcm94eTx1bmtub3duPih2YWwpO1xuICAgICAgICAgIHByb3hpZWRDaGlsZHJlbi5zZXQocHJvcCwgcmVzdWx0KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcgfHwgUEFTU1RIUk9VR0hfUFJPUFMuaGFzKHByb3ApKSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbm1vY2tlZCBwcm9wZXJ0eSBcIiR7cHJvcH1cIiB3YXMgYWNjZXNzZWQgb24gbW9jayBvYmplY3RgKTtcbiAgICB9XG4gIH0pIGFzIFQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCQSxNQUFNLDZCQUE2Qix1QkFBTyxJQUFJLG1CQUFtQjtBQUVqRSxNQUFNLG9CQUFvQixvQkFBSSxJQUFxQjtBQUFBLEVBQ2pEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQztBQWFNLFNBQVMsa0JBQXFCLEtBQVc7QUFDOUMsTUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHO0FBQ3RCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxFQUFFLDhCQUE4QixNQUFNO0FBQ3hDLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxJQUFJLDBCQUEwQjtBQUN2QztBQWVPLFNBQVMsWUFBZSxTQUFtQztBQUNoRSxTQUFPLFVBQWEsT0FBTztBQUM3QjtBQVFBLFNBQVMsYUFBYSxPQUFpQztBQUNyRCxTQUFPLFVBQVUsUUFBUSxPQUFPLFVBQVU7QUFDNUM7QUFRQSxTQUFTLGNBQWMsT0FBa0Q7QUFDdkUsU0FBTyxhQUFhLEtBQUssS0FBSyxPQUFPLGVBQWUsS0FBSyxNQUFNLE9BQU87QUFDeEU7QUFVQSxTQUFTLFVBQWEsT0FBbUI7QUFDdkMsTUFBSSxDQUFDLGFBQWEsS0FBSyxHQUFHO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSw4QkFBOEIsT0FBTztBQUN2QyxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sZUFBZSxPQUFPLDRCQUE0QixFQUFFLE1BQU0sQ0FBQztBQUVsRSxRQUFNLGtCQUFrQixvQkFBSSxJQUFxQjtBQUVqRCxTQUFPLElBQUksTUFBTSxPQUFPO0FBQUEsSUFDdEIsSUFBSSxRQUFRLE1BQU0sVUFBbUI7QUFDbkMsVUFBSSxRQUFRLFFBQVE7QUFDbEIsWUFBSSxnQkFBZ0IsSUFBSSxJQUFJLEdBQUc7QUFDN0IsaUJBQU8sZ0JBQWdCLElBQUksSUFBSTtBQUFBLFFBQ2pDO0FBRUEsY0FBTSxNQUFlLFFBQVEsSUFBSSxRQUFRLE1BQU0sUUFBUTtBQUN2RCxZQUFJLGNBQWMsR0FBRyxHQUFHO0FBQ3RCLGdCQUFNLFNBQVMsVUFBbUIsR0FBRztBQUNyQywwQkFBZ0IsSUFBSSxNQUFNLE1BQU07QUFDaEMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLE9BQU8sU0FBUyxZQUFZLGtCQUFrQixJQUFJLElBQUksR0FBRztBQUMzRCxlQUFPLFFBQVEsSUFBSSxRQUFRLE1BQU0sUUFBUTtBQUFBLE1BQzNDO0FBRUEsWUFBTSxJQUFJLE1BQU0sc0JBQXNCLElBQUksK0JBQStCO0FBQUEsSUFDM0U7QUFBQSxFQUNGLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-dev-utils",
|
|
3
|
-
"version": "74.
|
|
3
|
+
"version": "74.2.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"
|
|
@@ -577,6 +577,16 @@
|
|
|
577
577
|
"default": "./dist/lib/cjs/script-utils/test-runners/*.cjs"
|
|
578
578
|
}
|
|
579
579
|
},
|
|
580
|
+
"./setup/*": {
|
|
581
|
+
"import": {
|
|
582
|
+
"types": "./dist/lib/esm/setup/*.d.mts",
|
|
583
|
+
"default": "./dist/lib/esm/setup/*.mjs"
|
|
584
|
+
},
|
|
585
|
+
"require": {
|
|
586
|
+
"types": "./dist/lib/cjs/setup/*.d.cts",
|
|
587
|
+
"default": "./dist/lib/cjs/setup/*.cjs"
|
|
588
|
+
}
|
|
589
|
+
},
|
|
580
590
|
"./transformers": {
|
|
581
591
|
"import": {
|
|
582
592
|
"types": "./dist/lib/esm/transformers/index.d.mts",
|
|
@@ -662,8 +672,8 @@
|
|
|
662
672
|
"@types/babel__core": "^7.20.5",
|
|
663
673
|
"@types/doctrine": "^0.0.9",
|
|
664
674
|
"@types/eslint": "^9.6.1",
|
|
665
|
-
"@types/luxon": "^3.7.
|
|
666
|
-
"@types/node": "^
|
|
675
|
+
"@types/luxon": "^3.7.2",
|
|
676
|
+
"@types/node": "^26.0.0",
|
|
667
677
|
"@types/parsimmon": "^1.10.9",
|
|
668
678
|
"@types/path-browserify": "^1.0.3",
|
|
669
679
|
"@types/picomatch": "^4.0.3",
|
|
@@ -685,7 +695,7 @@
|
|
|
685
695
|
"eslint": "^10.5.0",
|
|
686
696
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
687
697
|
"eslint-plugin-import-x": "^4.16.2",
|
|
688
|
-
"eslint-plugin-jsdoc": "^63.0.
|
|
698
|
+
"eslint-plugin-jsdoc": "^63.0.6",
|
|
689
699
|
"eslint-plugin-no-unsanitized": "^4.1.5",
|
|
690
700
|
"eslint-plugin-obsidianmd": "^0.3.0",
|
|
691
701
|
"eslint-plugin-perfectionist": "^5.9.1",
|
|
@@ -710,7 +720,7 @@
|
|
|
710
720
|
"remark-parse": "^11.0.0",
|
|
711
721
|
"remark-wiki-link": "^2.0.1",
|
|
712
722
|
"sass": "^1.101.0",
|
|
713
|
-
"semver": "^7.8.
|
|
723
|
+
"semver": "^7.8.5",
|
|
714
724
|
"shell-quote": "^1.8.4",
|
|
715
725
|
"svelte-check": "^4.6.0",
|
|
716
726
|
"svelte-preprocess": "^6.0.5",
|
|
@@ -723,6 +733,7 @@
|
|
|
723
733
|
"@commitlint/cli": "^21.0.2",
|
|
724
734
|
"@commitlint/config-conventional": "^21.0.2",
|
|
725
735
|
"@commitlint/types": "^21.0.1",
|
|
736
|
+
"@jest/globals": "^30.4.1",
|
|
726
737
|
"@total-typescript/ts-reset": "^0.6.1",
|
|
727
738
|
"@typescript-eslint/rule-tester": "^8.61.1",
|
|
728
739
|
"@vitest/coverage-v8": "^4.1.9",
|
|
@@ -735,7 +746,7 @@
|
|
|
735
746
|
"jsdom": "^29.1.1",
|
|
736
747
|
"moment": "^2.30.1",
|
|
737
748
|
"nano-staged": "^1.0.2",
|
|
738
|
-
"obsidian-integration-testing": "^4.2.
|
|
749
|
+
"obsidian-integration-testing": "^4.2.6",
|
|
739
750
|
"obsidian-test-mocks": "^3.1.1",
|
|
740
751
|
"ts-declaration-location": "^1.0.7",
|
|
741
752
|
"vitest": "^4.1.9",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"main": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs",
|
|
3
|
+
"module": "../../../../dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "../../../../dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts"
|
|
6
|
+
}
|