From a51b2d3ffa1070ad0cfa0074bc542674a0220ef1 Mon Sep 17 00:00:00 2001 From: Nystik <236107-Nystik@users.noreply.gitlab.com> Date: Sat, 6 Jun 2026 19:28:17 +0200 Subject: [PATCH] convert bridge to ESM --- packages/bridge/package.json | 1 + packages/bridge/src/demo-guards.js | 2 +- packages/bridge/src/file-actions.js | 4 ++-- packages/bridge/src/main.js | 20 +++++++++---------- packages/bridge/src/plugin-registry.js | 2 +- packages/bridge/src/settings/general-tab.js | 10 +++++----- packages/bridge/src/settings/inject.js | 12 +++++------ .../bridge/src/settings/list-editor-modal.js | 4 ++-- packages/bridge/src/settings/plugin-tabs.js | 8 ++++---- .../bridge/src/settings/server-plugins-tab.js | 6 +++--- packages/bridge/src/settings/settings-ui.js | 4 ++-- packages/bridge/src/status-bar.js | 2 +- packages/bridge/src/util/version.js | 2 +- .../{version.test.mjs => version.test.js} | 5 +---- packages/bridge/src/workspace-picker.js | 4 ++-- packages/shim/src/loader.js | 2 +- 16 files changed, 43 insertions(+), 45 deletions(-) rename packages/bridge/src/util/{version.test.mjs => version.test.js} (85%) diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 7dadf12..347ff40 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -2,5 +2,6 @@ "name": "@ignis/bridge", "version": "0.0.0-internal", "private": true, + "type": "module", "main": "src/main.js" } diff --git a/packages/bridge/src/demo-guards.js b/packages/bridge/src/demo-guards.js index 8a792e6..fc52e0c 100644 --- a/packages/bridge/src/demo-guards.js +++ b/packages/bridge/src/demo-guards.js @@ -51,4 +51,4 @@ function stopDemoGuards() { } } -module.exports = { startDemoGuards, stopDemoGuards, isDemoMode }; +export { startDemoGuards, stopDemoGuards, isDemoMode }; diff --git a/packages/bridge/src/file-actions.js b/packages/bridge/src/file-actions.js index 7624ac3..e680a43 100644 --- a/packages/bridge/src/file-actions.js +++ b/packages/bridge/src/file-actions.js @@ -1,4 +1,4 @@ -const { Notice, TFile, TFolder } = require("obsidian"); +import { Notice, TFile, TFolder } from "obsidian"; function getVaultId() { return window.__currentVaultId || ""; @@ -92,4 +92,4 @@ function addFolderMenuItems(menu, folder, app) { }); } -module.exports = { showFilePicker, addFileMenuItems, addFolderMenuItems }; +export { showFilePicker, addFileMenuItems, addFolderMenuItems }; diff --git a/packages/bridge/src/main.js b/packages/bridge/src/main.js index 3dae017..015584a 100644 --- a/packages/bridge/src/main.js +++ b/packages/bridge/src/main.js @@ -1,17 +1,17 @@ -const { Plugin, TFile, TFolder } = require("obsidian"); -const { +import { Plugin, TFile, TFolder } from "obsidian"; +import { showFilePicker, addFileMenuItems, addFolderMenuItems, -} = require("./file-actions"); -const { +} from "./file-actions.js"; +import { patchSettingsModal, unpatchSettingsModal, -} = require("./settings/inject"); -const pluginRegistry = require("./plugin-registry"); -const { initStatusBar } = require("./status-bar"); -const { WorkspacePickerModal } = require("./workspace-picker"); -const { startDemoGuards, stopDemoGuards } = require("./demo-guards"); +} from "./settings/inject.js"; +import * as pluginRegistry from "./plugin-registry.js"; +import { initStatusBar } from "./status-bar.js"; +import { WorkspacePickerModal } from "./workspace-picker.js"; +import { startDemoGuards, stopDemoGuards } from "./demo-guards.js"; class IgnisBridgePlugin extends Plugin { async onload() { @@ -65,4 +65,4 @@ class IgnisBridgePlugin extends Plugin { } } -module.exports = IgnisBridgePlugin; +export default IgnisBridgePlugin; diff --git a/packages/bridge/src/plugin-registry.js b/packages/bridge/src/plugin-registry.js index 77f5fcc..3e95499 100644 --- a/packages/bridge/src/plugin-registry.js +++ b/packages/bridge/src/plugin-registry.js @@ -34,4 +34,4 @@ function getKnownIds() { return knownIds; } -module.exports = { refresh, isIgnisPlugin, addId, getKnownIds }; +export { refresh, isIgnisPlugin, addId, getKnownIds }; diff --git a/packages/bridge/src/settings/general-tab.js b/packages/bridge/src/settings/general-tab.js index 529c5b5..40475b3 100644 --- a/packages/bridge/src/settings/general-tab.js +++ b/packages/bridge/src/settings/general-tab.js @@ -1,7 +1,7 @@ -const { Setting, Notice } = require("obsidian"); -const { isDemoMode } = require("../demo-guards"); -const { stripBuildMetadata, isNewer } = require("../util/version"); -const { ListEditorModal } = require("./list-editor-modal"); +import { Setting, Notice } from "obsidian"; +import { isDemoMode } from "../demo-guards.js"; +import { stripBuildMetadata, isNewer } from "../util/version.js"; +import { ListEditorModal } from "./list-editor-modal.js"; const GITHUB_URL = "https://github.com/Nystik-gh/ignis"; const GITHUB_API_LATEST = @@ -353,4 +353,4 @@ function listField(containerEl, { name, desc, value, key, app, modal }) { return setting; } -module.exports = { display }; +export { display }; diff --git a/packages/bridge/src/settings/inject.js b/packages/bridge/src/settings/inject.js index 427c0e9..d92de8f 100644 --- a/packages/bridge/src/settings/inject.js +++ b/packages/bridge/src/settings/inject.js @@ -1,14 +1,14 @@ -const generalTab = require("./general-tab"); -const serverPluginsTab = require("./server-plugins-tab"); -const { createNavEl, createTab, createGroup } = require("./settings-ui"); -const { +import * as generalTab from "./general-tab.js"; +import * as serverPluginsTab from "./server-plugins-tab.js"; +import { createNavEl, createTab, createGroup } from "./settings-ui.js"; +import { allIgnisNavEls, setupPluginTabs, reconcilePluginTabs, hideIgnisFromCommunityPlugins, restoreCommunityPlugins, clearOwnedPluginIds, -} = require("./plugin-tabs"); +} from "./plugin-tabs.js"; function removeExistingIgnisGroups(tabHeadersEl) { const groups = tabHeadersEl.querySelectorAll(".vertical-tab-header-group"); @@ -139,4 +139,4 @@ function unpatchSettingsModal(plugin) { clearOwnedPluginIds(); } -module.exports = { patchSettingsModal, unpatchSettingsModal, reconcilePluginTabs }; +export { patchSettingsModal, unpatchSettingsModal, reconcilePluginTabs }; diff --git a/packages/bridge/src/settings/list-editor-modal.js b/packages/bridge/src/settings/list-editor-modal.js index 63b4af6..7a503e3 100644 --- a/packages/bridge/src/settings/list-editor-modal.js +++ b/packages/bridge/src/settings/list-editor-modal.js @@ -1,4 +1,4 @@ -const { Modal, Setting, Notice } = require("obsidian"); +import { Modal, Setting, Notice } from "obsidian"; // Modal editor for a list of string entries (the proxy host allowlist). class ListEditorModal extends Modal { @@ -131,4 +131,4 @@ class ListEditorModal extends Modal { } } -module.exports = { ListEditorModal }; +export { ListEditorModal }; diff --git a/packages/bridge/src/settings/plugin-tabs.js b/packages/bridge/src/settings/plugin-tabs.js index a86da07..8362806 100644 --- a/packages/bridge/src/settings/plugin-tabs.js +++ b/packages/bridge/src/settings/plugin-tabs.js @@ -1,6 +1,6 @@ -const { setIcon } = require("obsidian"); -const { findGroupByTitle } = require("./settings-ui"); -const { isIgnisPlugin } = require("../plugin-registry"); +import { setIcon } from "obsidian"; +import { findGroupByTitle } from "./settings-ui.js"; +import { isIgnisPlugin } from "../plugin-registry.js"; // All ignis-managed nav elements (both Ignis group and Ignis Core Plugins group). // Shared with inject.js so the openTab patch can manage is-active across all of them. @@ -232,7 +232,7 @@ function clearOwnedPluginIds() { ownedPluginIds.clear(); } -module.exports = { +export { allIgnisNavEls, setupPluginTabs, reconcilePluginTabs, diff --git a/packages/bridge/src/settings/server-plugins-tab.js b/packages/bridge/src/settings/server-plugins-tab.js index bff53e4..0791223 100644 --- a/packages/bridge/src/settings/server-plugins-tab.js +++ b/packages/bridge/src/settings/server-plugins-tab.js @@ -1,5 +1,5 @@ -const { Setting, Notice } = require("obsidian"); -const { reconcilePluginTabs } = require("./plugin-tabs"); +import { Setting, Notice } from "obsidian"; +import { reconcilePluginTabs } from "./plugin-tabs.js"; function getVaultId() { return window.__currentVaultId || ""; @@ -94,4 +94,4 @@ function display(containerEl, app) { }); } -module.exports = { display }; +export { display }; diff --git a/packages/bridge/src/settings/settings-ui.js b/packages/bridge/src/settings/settings-ui.js index 041c634..7382ee2 100644 --- a/packages/bridge/src/settings/settings-ui.js +++ b/packages/bridge/src/settings/settings-ui.js @@ -1,4 +1,4 @@ -const { setIcon } = require("obsidian"); +import { setIcon } from "obsidian"; function createNavEl(tab, setting) { const nav = document.createElement("div"); @@ -86,4 +86,4 @@ function findGroupByTitle(tabHeadersEl, title) { return null; } -module.exports = { createNavEl, createTab, createGroup, findGroupByTitle }; +export { createNavEl, createTab, createGroup, findGroupByTitle }; diff --git a/packages/bridge/src/status-bar.js b/packages/bridge/src/status-bar.js index e3f882d..567650c 100644 --- a/packages/bridge/src/status-bar.js +++ b/packages/bridge/src/status-bar.js @@ -32,4 +32,4 @@ function initStatusBar(plugin) { return ws.onStateChange(render); } -module.exports = { initStatusBar }; +export { initStatusBar }; diff --git a/packages/bridge/src/util/version.js b/packages/bridge/src/util/version.js index c44ce81..e7c2fd5 100644 --- a/packages/bridge/src/util/version.js +++ b/packages/bridge/src/util/version.js @@ -36,4 +36,4 @@ function isNewer(latest, current) { return false; } -module.exports = { stripBuildMetadata, parseSemver, isNewer }; +export { stripBuildMetadata, parseSemver, isNewer }; diff --git a/packages/bridge/src/util/version.test.mjs b/packages/bridge/src/util/version.test.js similarity index 85% rename from packages/bridge/src/util/version.test.mjs rename to packages/bridge/src/util/version.test.js index 9472995..f2eb66e 100644 --- a/packages/bridge/src/util/version.test.mjs +++ b/packages/bridge/src/util/version.test.js @@ -1,8 +1,5 @@ import { describe, it, expect } from "vitest"; -import { createRequire } from "module"; - -const require = createRequire(import.meta.url); -const { stripBuildMetadata, isNewer } = require("./version.js"); +import { stripBuildMetadata, isNewer } from "./version.js"; describe("isNewer", () => { it("is true when latest is strictly newer", () => { diff --git a/packages/bridge/src/workspace-picker.js b/packages/bridge/src/workspace-picker.js index 91e9753..14e9703 100644 --- a/packages/bridge/src/workspace-picker.js +++ b/packages/bridge/src/workspace-picker.js @@ -1,4 +1,4 @@ -const { FuzzySuggestModal } = require("obsidian"); +import { FuzzySuggestModal } from "obsidian"; class WorkspacePickerModal extends FuzzySuggestModal { constructor(app) { @@ -29,4 +29,4 @@ class WorkspacePickerModal extends FuzzySuggestModal { } } -module.exports = { WorkspacePickerModal }; +export { WorkspacePickerModal }; diff --git a/packages/shim/src/loader.js b/packages/shim/src/loader.js index 19a1b07..e45f4d1 100644 --- a/packages/shim/src/loader.js +++ b/packages/shim/src/loader.js @@ -52,7 +52,7 @@ if (window.__currentVaultId) { extractObsidianModule() .then(async () => { - // Dynamic import so bridge's top-level require("obsidian") fires after installRequire + extractObsidianModule. + // Dynamic import so the bridge's top-level obsidian import resolves after installRequire + extractObsidianModule. const mod = await import("@ignis/bridge"); const IgnisBridgePlugin = mod.default || mod; const bridge = new IgnisBridgePlugin(window.app, BRIDGE_MANIFEST);