The Demo Vault Helper (obsidian-dev-utils `bootstrapDemoVault`) now creates the
CodeScript Toolkit invocable-scripts folder at runtime, so the vault no longer
commits an otherwise-empty `Invocables/.gitkeep` placeholder.
CodeScript Toolkit runs the startup script via `startupScript.invoke(app)`, so a
top-level script with no `invoke` export threw `this.startupScript.invoke is not
a function` on vault open. Wrap the body in an exported `invoke(app)`. Also add an
empty `Invocables/` folder so every demo vault has the same CodeScript Toolkit
layout regardless of whether it ships invocable scripts.
Migrate to obsidian-dev-utils 87.1.0, register the open-demo-vault command,
and add a numbered demo vault with a no-app coverage suite for the settings.
Pass the PluginSettingsComponent itself instead of a settings snapshot/getter,
so attachment-link settings are read live from the component. Drop the unused
pluginName constructor param from InvokeCommandHandler (the plugin name reaches
the base handler via the command registration context), and restore the unit
tests for the new wiring.
Bump obsidian-dev-utils to ^76.1.0 and obsidian-integration-testing to ^4.4.0.
No source changes required; the stricter params-options-name-match and unbound-method
lint rules introduced in 76.1.0 produced no new violations.
Upgrade obsidian-dev-utils ^74.2.0 -> ^75.0.0 (major), plus
@obsidian-typings/obsidian-public-latest ^6.15.0 -> ^6.16.0 and
obsidian-test-mocks ^3.2.0 -> ^3.3.0.
Add the obsidian-dev-utils/vitest-setup endpoint to the unit-tests
project's setupFiles (after the two obsidian-test-mocks setup files),
as required by 75.0.0.
The unit tests mocked obsidian-dev-utils base classes (PluginBase,
EditorCommandHandler, PluginSettingsTabBase, PluginSettingsComponentBase)
and wholesale-replaced the obsidian module, re-creating their bodies. Those
fakes had drifted from obsidian-dev-utils 74.1.0, leaving the suite red.
Convert every unit test to the real bases via the obsidian-test-mocks
bridge:
- plugin: driven through the real PluginBase.onload lifecycle
- invoke command handler: real EditorCommandHandler via buildCommand
- settings component: real legacy-converter flow via loadWithPromises
- settings tab: real base + real Setting/TextComponent, bind neutralized
- insert attachments control: real basename/extname, only convertAsyncToSync
kept as the sanctioned identity stub
Add offref to cspell words.
Align the getPluginSettings closure return type with the handler's
ReadonlyDeep<PluginSettings> param to remove an `as PluginSettings` cast,
and replace the definite-assignment on pluginSettingsComponent with an
optional field guarded by ensureNonNullable.