Replace inline setTimeout-Promise delay patterns with the sleep helper.
The unit test now imports sleep from obsidian-dev-utils/async; the
integration-test closure uses the Obsidian runtime global sleep.
Bump obsidian-dev-utils 75.0.0 -> 76.1.0 and obsidian-integration-testing 4.3.0 -> 4.4.0.
The new obsidian-dev-utils/params-options-name-match ESLint rule now checks param-bag names on
all members. Rename the AddLongStackTracesPatchComponent private param-bag interfaces to be
class-qualified, and add a scoped eslint-disable for afterPatchAddEventListener whose param must
remain the shared AfterPatchParams (it implements the AfterPatchFn callback signature).
Bump obsidian-dev-utils ^74.2.0 -> ^75.0.0 (major: renamed the test-setup
endpoints) and obsidian-test-mocks ^3.2.0 -> ^3.3.0.
Replace the removed unit-test setup file
obsidian-dev-utils/setup/async-operation-tracking-vitest-setup with the new
consolidated obsidian-dev-utils/vitest-setup endpoint, which resets shared
state on globalThis.__obsidianDevUtils and enables async tracking.
Wire obsidian-dev-utils/setup/async-operation-tracking-vitest-setup into the unit-tests
vitest project and replace the flaky setTimeout(0) settle-waits after the convertAsyncToSync
toggle onChange handlers with await waitForAllAsyncOperations().
dev-utils 74.2.0 distinguishes methods from function-like values: registerMethodPatch
now constrains methodName to MethodKeys<Obj>, which excludes callables carrying extra
members. Because GenericFunction adds an optional originalFn, Record<string, GenericFunction>
has no method keys, so AddLongStackTracesPatchComponent failed to compile (methodName: never).
Add GenericMethod (a bare callable) and GenericMethodObject (a record of them) and type the
patched obj as GenericMethodObject so methodName resolves to string. Extract the originalFn
carrier into a named interface to satisfy the no-anonymous-inline-object-types rule.
The template refactor renamed Plugin.onload() to Plugin.onloadImpl(),
so the real PluginBase.onload now wraps onloadImpl. The test mock still
returned noopAsync() directly and never invoked onloadImpl, so onload
added zero child components instead of seven and the test failed.
Mirror the real base: MockPluginBase.onload now calls this.onloadImpl()
(with a noop base placeholder the Plugin subclass overrides).
Use typed helpers from obsidian-dev-utils instead of double type assertions
for safer test mocking: strictProxy for partial mock objects, castTo for
constructor and type reinterpretation casts, ensureGenericObject for
property access on typed objects.