Skip to content

Commit 54de704

Browse files
committed
refactor(linter/plugins): add registerPlugin function
1 parent c3526d7 commit 54de704

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

apps/oxlint/src-js/plugins/load.ts

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -108,33 +108,30 @@ interface PluginDetails {
108108
*/
109109
export async function loadPlugin(url: string, packageName: string | null): Promise<string> {
110110
try {
111-
const res = await loadPluginImpl(url, packageName);
111+
if (DEBUG) {
112+
if (registeredPluginUrls.has(url)) throw new Error("This plugin has already been registered");
113+
registeredPluginUrls.add(url);
114+
}
115+
116+
const plugin = (await import(url)).default as Plugin;
117+
const res = registerPlugin(plugin, packageName);
112118
return JSON.stringify({ Success: res });
113119
} catch (err) {
114120
return JSON.stringify({ Failure: getErrorMessage(err) });
115121
}
116122
}
117123

118124
/**
119-
* Load a plugin.
125+
* Register a plugin.
120126
*
121-
* @param url - Absolute path of plugin file as a `file://...` URL
127+
* @param plugin - Plugin
122128
* @param packageName - Optional package name from `package.json` (fallback if `plugin.meta.name` is not defined)
123129
* @returns - Plugin details
124-
* @throws {*} If plugin throws during import
125130
* @throws {Error} If `plugin.meta.name` is `null` / `undefined` and `packageName` not provided
126131
* @throws {TypeError} If one of plugin's rules is malformed, or its `createOnce` method returns invalid visitor
127132
* @throws {TypeError} If `plugin.meta.name` is not a string
128-
* @throws {Error} In debug build if plugin has already been registered
129133
*/
130-
async function loadPluginImpl(url: string, packageName: string | null): Promise<PluginDetails> {
131-
if (DEBUG) {
132-
if (registeredPluginUrls.has(url)) throw new Error("This plugin has already been registered");
133-
registeredPluginUrls.add(url);
134-
}
135-
136-
const { default: plugin } = (await import(url)) as { default: Plugin };
137-
134+
function registerPlugin(plugin: Plugin, packageName: string | null): PluginDetails {
138135
// TODO: Use a validation library to assert the shape of the plugin, and of rules
139136

140137
const pluginName = getPluginName(plugin, packageName);

0 commit comments

Comments
 (0)