Skip to content

Commit afc5df6

Browse files
committed
refactor(linter/plugins): add registerPlugin function
1 parent c4dd27b commit afc5df6

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
@@ -113,33 +113,30 @@ interface PluginDetails {
113113
*/
114114
export async function loadPlugin(url: string, packageName: string | null): Promise<string> {
115115
try {
116-
const res = await loadPluginImpl(url, packageName);
116+
if (DEBUG) {
117+
if (registeredPluginUrls.has(url)) throw new Error("This plugin has already been registered");
118+
registeredPluginUrls.add(url);
119+
}
120+
121+
const plugin = (await import(url)).default as Plugin;
122+
const res = registerPlugin(plugin, packageName);
117123
return JSON.stringify({ Success: res });
118124
} catch (err) {
119125
return JSON.stringify({ Failure: getErrorMessage(err) });
120126
}
121127
}
122128

123129
/**
124-
* Load a plugin.
130+
* Register a plugin.
125131
*
126-
* @param url - Absolute path of plugin file as a `file://...` URL
132+
* @param plugin - Plugin
127133
* @param packageName - Optional package name from `package.json` (fallback if `plugin.meta.name` is not defined)
128134
* @returns - Plugin details
129-
* @throws {*} If plugin throws during import
130135
* @throws {Error} If `plugin.meta.name` is `null` / `undefined` and `packageName` not provided
131136
* @throws {TypeError} If one of plugin's rules is malformed, or its `createOnce` method returns invalid visitor
132137
* @throws {TypeError} if `plugin.meta.name` is not a string
133-
* @throws {Error} In debug build if plugin has already been registered
134138
*/
135-
async function loadPluginImpl(url: string, packageName: string | null): Promise<PluginDetails> {
136-
if (DEBUG) {
137-
if (registeredPluginUrls.has(url)) throw new Error("This plugin has already been registered");
138-
registeredPluginUrls.add(url);
139-
}
140-
141-
const { default: plugin } = (await import(url)) as { default: Plugin };
142-
139+
function registerPlugin(plugin: Plugin, packageName: string | null): PluginDetails {
143140
// TODO: Use a validation library to assert the shape of the plugin, and of rules
144141

145142
const pluginName = getPluginName(plugin, packageName);

0 commit comments

Comments
 (0)