obsidian-dev-utils 92.0.0 → 93.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/demo-vault-helper/main.js +30 -44
  3. package/dist/integration-test-plugin/main.js +10029 -9743
  4. package/dist/lib/cjs/__merged.cjs +9 -1
  5. package/dist/lib/cjs/__merged.d.cts +2 -2
  6. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  7. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +1 -1
  8. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +5 -0
  9. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +118 -36
  10. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +88 -19
  11. package/dist/lib/cjs/obsidian/demo-vault-helper-settings.cjs +120 -0
  12. package/dist/lib/cjs/obsidian/demo-vault-helper-settings.d.cts +29 -0
  13. package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +31 -32
  14. package/dist/lib/cjs/obsidian/demo-vault-helper.d.cts +7 -3
  15. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +4 -2
  16. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  17. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  18. package/dist/lib/cjs/obsidian/vault.cjs +1 -1
  19. package/dist/lib/cjs/obsidian/vault.d.cts +3 -0
  20. package/dist/lib/cjs/obsidian/workspace.cjs +28 -3
  21. package/dist/lib/cjs/obsidian/workspace.d.cts +50 -0
  22. package/dist/lib/cjs/script-utils/demo-vault.cjs +8 -3
  23. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +1 -1
  24. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +3 -0
  25. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +1 -1
  26. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +3 -0
  27. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +1 -1
  28. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +3 -0
  29. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +1 -1
  30. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.cts +3 -0
  31. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +1 -1
  32. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +3 -0
  33. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +1 -1
  34. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -0
  35. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +1 -1
  36. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +3 -0
  37. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +1 -1
  38. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +3 -0
  39. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +1 -1
  40. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +3 -0
  41. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +1 -1
  42. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +3 -0
  43. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +1 -1
  44. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +12 -0
  45. package/dist/lib/esm/__merged.d.mts +2 -2
  46. package/dist/lib/esm/__merged.mjs +13 -3
  47. package/dist/lib/esm/generated-during-build.mjs +1 -1
  48. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +5 -0
  49. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +1 -1
  50. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +88 -19
  51. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +116 -35
  52. package/dist/lib/esm/obsidian/demo-vault-helper-settings.d.mts +29 -0
  53. package/dist/lib/esm/obsidian/demo-vault-helper-settings.mjs +24 -0
  54. package/dist/lib/esm/obsidian/demo-vault-helper.d.mts +7 -3
  55. package/dist/lib/esm/obsidian/demo-vault-helper.mjs +32 -36
  56. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +4 -2
  57. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  58. package/dist/lib/esm/obsidian/index.mjs +3 -1
  59. package/dist/lib/esm/obsidian/vault.d.mts +3 -0
  60. package/dist/lib/esm/obsidian/vault.mjs +1 -1
  61. package/dist/lib/esm/obsidian/workspace.d.mts +50 -0
  62. package/dist/lib/esm/obsidian/workspace.mjs +24 -2
  63. package/dist/lib/esm/script-utils/demo-vault.mjs +10 -4
  64. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -0
  65. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +1 -1
  66. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -0
  67. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +1 -1
  68. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -0
  69. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +1 -1
  70. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.d.mts +3 -0
  71. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +1 -1
  72. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -0
  73. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +1 -1
  74. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -0
  75. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +1 -1
  76. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -0
  77. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +1 -1
  78. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +3 -0
  79. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +1 -1
  80. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +3 -0
  81. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +1 -1
  82. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -0
  83. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +1 -1
  84. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +12 -0
  85. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +1 -1
  86. package/obsidian/demo-vault-helper-settings/package.json +6 -0
  87. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 93.0.0
4
+
5
+ - feat(demo-vault)!: name the demonstrated plugin in the helper settings
6
+ - fix(demo-vault): keep the opener progress notice out of the shared slot
7
+ - feat(notices)!: replace isReusable with a notice mode, adding append
8
+ - feat(workspace): add main-window helpers and scoped window switching
9
+
10
+ ## 92.1.0
11
+
12
+ - docs: missing descriptions
13
+
3
14
  ## 92.0.0
4
15
 
5
16
  - test(modals): click the mock modal backdrop instead of a hand-built one
@@ -460,21 +460,8 @@ function noop() {
460
460
  }
461
461
  var noopAsyncSingletonPromise = Promise.resolve();
462
462
 
463
- // src/type-guards.ts
464
- function assertNonNullable(value, errorOrMessage) {
465
- if (value !== null && value !== void 0) {
466
- return;
467
- }
468
- errorOrMessage ??= value === null ? "Value is null" : "Value is undefined";
469
- const error = typeof errorOrMessage === "string" ? new Error(errorOrMessage) : errorOrMessage;
470
- throw error;
471
- }
472
- function ensureNonNullable(value, errorOrMessage) {
473
- assertNonNullable(value, errorOrMessage);
474
- return value;
475
- }
476
-
477
463
  // src/string.ts
464
+ var EMPTY = "";
478
465
  var ESCAPE_MAP = {
479
466
  "\n": String.raw`\n`,
480
467
  "\r": String.raw`\r`,
@@ -674,6 +661,8 @@ var CODE_SCRIPT_TOOLKIT_SETTINGS = {
674
661
  };
675
662
  var DEMO_VAULT_HELPER_PLUGIN_ID = "demo-vault-helper";
676
663
  var PLUGINS_FOLDER_NAME = "plugins";
664
+ var DATA_JSON_FILE_NAME = "data.json";
665
+ var INVALID_DEMO_VAULT_ERROR_MESSAGE = "Invalid demo vault";
677
666
  var OPEN_DEMO_VAULT_COMMAND_NAME = "Open demo vault";
678
667
  var SANDBOX_NOTICE_DURATION_IN_MILLISECONDS = 0;
679
668
  async function bootstrapDemoVault(params) {
@@ -694,23 +683,17 @@ async function bootstrapDemoVault(params) {
694
683
  }
695
684
  showSandboxNotice(app, demoedPluginId);
696
685
  }
697
- function buildSandboxNoticeFragment(pluginName, basePath) {
686
+ function buildSandboxNoticeFragment(pluginName) {
698
687
  return createFragment((fragment) => {
699
- if (pluginName === null) {
700
- fragment.appendText("This is a demo vault.");
701
- } else {
702
- fragment.appendText("This is a demo vault for ");
703
- fragment.createEl("b", { text: pluginName });
704
- fragment.appendText(".");
705
- }
706
- fragment.appendText(" It is a temporary sandbox");
707
- if (basePath !== null) {
708
- fragment.appendText(" at ");
709
- fragment.createEl("code", { text: basePath });
710
- }
711
- fragment.appendText(", cleaned up automatically about a day after you last use it \u2014 copy anything you want to keep into your own vault. Running ");
712
- fragment.createEl("b", { text: pluginName === null ? OPEN_DEMO_VAULT_COMMAND_NAME : `${pluginName}: ${OPEN_DEMO_VAULT_COMMAND_NAME}` });
713
- fragment.appendText(" again creates a new copy with the latest plugin version, so your notes will not appear in it.");
688
+ fragment.appendText("This is a demo vault for ");
689
+ fragment.createEl("b", { text: pluginName });
690
+ fragment.appendText(".");
691
+ fragment.createEl("br");
692
+ fragment.appendText("It is a temporary sandbox, cleaned up automatically about a day after you last use it.");
693
+ fragment.createEl("br");
694
+ fragment.appendText("Executing ");
695
+ fragment.createEl("b", { text: `${pluginName}: ${OPEN_DEMO_VAULT_COMMAND_NAME}` });
696
+ fragment.appendText(" command again creates a new copy with the latest plugin version, so your notes will not appear in it.");
714
697
  });
715
698
  }
716
699
  async function ensureInvocableScriptsFolder(app) {
@@ -720,23 +703,26 @@ async function ensureInvocableScriptsFolder(app) {
720
703
  }
721
704
  }
722
705
  async function getDemoedPluginId(app) {
723
- const pluginsFolderPath = join(app.vault.configDir, PLUGINS_FOLDER_NAME);
724
- if (!await app.vault.adapter.exists(pluginsFolderPath)) {
725
- return null;
706
+ const settingsPath = join(app.vault.configDir, PLUGINS_FOLDER_NAME, DEMO_VAULT_HELPER_PLUGIN_ID, DATA_JSON_FILE_NAME);
707
+ if (!await app.vault.adapter.exists(settingsPath)) {
708
+ throw new Error(INVALID_DEMO_VAULT_ERROR_MESSAGE);
726
709
  }
727
- const listedFiles = await app.vault.adapter.list(pluginsFolderPath);
728
- const demoedPluginIds = listedFiles.folders.map((folderPath) => basename(folderPath)).filter((pluginId) => pluginId !== DEMO_VAULT_HELPER_PLUGIN_ID);
729
- return demoedPluginIds.length === 1 ? ensureNonNullable(demoedPluginIds[0]) : null;
730
- }
731
- function getVaultBasePath(app) {
732
- return isBasePathAdapter(app.vault.adapter) ? app.vault.adapter.getBasePath() : null;
733
- }
734
- function isBasePathAdapter(adapter) {
735
- return typeof Reflect.get(adapter, "getBasePath") === "function";
710
+ let parsed;
711
+ try {
712
+ parsed = JSON.parse(await app.vault.adapter.read(settingsPath));
713
+ } catch (error) {
714
+ throw new Error(INVALID_DEMO_VAULT_ERROR_MESSAGE, { cause: error });
715
+ }
716
+ const demoedPluginId = parsed?.demoedPluginId;
717
+ if (typeof demoedPluginId !== "string" || demoedPluginId === EMPTY) {
718
+ throw new Error(INVALID_DEMO_VAULT_ERROR_MESSAGE);
719
+ }
720
+ return demoedPluginId;
736
721
  }
737
722
  function showSandboxNotice(app, demoedPluginId) {
738
- const pluginName = demoedPluginId === null ? null : app.plugins.manifests[demoedPluginId]?.name ?? demoedPluginId;
739
- const fragment = buildSandboxNoticeFragment(pluginName, getVaultBasePath(app));
723
+ const pluginName = app.plugins.manifests[demoedPluginId]?.name ?? demoedPluginId;
724
+ const fragment = buildSandboxNoticeFragment(pluginName);
725
+ app.setting.close();
740
726
  new import_obsidian2.Notice(fragment, SANDBOX_NOTICE_DURATION_IN_MILLISECONDS);
741
727
  }
742
728