diff --git a/apps/oxlint/src-js/plugins/load.ts b/apps/oxlint/src-js/plugins/load.ts index 947ff22f94bb9..73f9a429c25a3 100644 --- a/apps/oxlint/src-js/plugins/load.ts +++ b/apps/oxlint/src-js/plugins/load.ts @@ -108,7 +108,13 @@ interface PluginDetails { */ export async function loadPlugin(url: string, packageName: string | null): Promise { try { - const res = await loadPluginImpl(url, packageName); + if (DEBUG) { + if (registeredPluginUrls.has(url)) throw new Error("This plugin has already been registered"); + registeredPluginUrls.add(url); + } + + const plugin = (await import(url)).default as Plugin; + const res = registerPlugin(plugin, packageName); return JSON.stringify({ Success: res }); } catch (err) { return JSON.stringify({ Failure: getErrorMessage(err) }); @@ -116,25 +122,16 @@ export async function loadPlugin(url: string, packageName: string | null): Promi } /** - * Load a plugin. + * Register a plugin. * - * @param url - Absolute path of plugin file as a `file://...` URL + * @param plugin - Plugin * @param packageName - Optional package name from `package.json` (fallback if `plugin.meta.name` is not defined) * @returns - Plugin details - * @throws {*} If plugin throws during import * @throws {Error} If `plugin.meta.name` is `null` / `undefined` and `packageName` not provided * @throws {TypeError} If one of plugin's rules is malformed, or its `createOnce` method returns invalid visitor * @throws {TypeError} If `plugin.meta.name` is not a string - * @throws {Error} In debug build if plugin has already been registered */ -async function loadPluginImpl(url: string, packageName: string | null): Promise { - if (DEBUG) { - if (registeredPluginUrls.has(url)) throw new Error("This plugin has already been registered"); - registeredPluginUrls.add(url); - } - - const { default: plugin } = (await import(url)) as { default: Plugin }; - +function registerPlugin(plugin: Plugin, packageName: string | null): PluginDetails { // TODO: Use a validation library to assert the shape of the plugin, and of rules const pluginName = getPluginName(plugin, packageName);