UNPKG

oxlint

Version:

Linter for the JavaScript Oxidation Compiler

85 lines (84 loc) 4.13 kB
import { r as lint } from "./bindings.js"; //#region src-js/cli.ts let loadPlugin = null, setupRuleConfigs = null, lintFile = null, createWorkspace = null, destroyWorkspace = null, resolvedConfigLoader = null; /** * Load a plugin. * * Lazy-loads plugins code on first call, so that overhead is skipped if user doesn't use JS plugins. * * @param path - Absolute path of plugin file * @param pluginName - Plugin name (either alias or package name) * @param pluginNameIsAlias - `true` if plugin name is an alias (takes priority over name that plugin defines itself) * @param workspaceUri - Workspace URI (`null` in CLI mode, `string` in LSP mode) * @returns Plugin details or error serialized to JSON string */ function loadPluginWrapper(path, pluginName, pluginNameIsAlias, workspaceUri) { return loadPlugin === null ? import("./plugins.js").then((mod) => ({loadPlugin, lintFile, setupRuleConfigs} = mod, loadPlugin(path, pluginName, pluginNameIsAlias, workspaceUri))) : loadPlugin(path, pluginName, pluginNameIsAlias, workspaceUri); } /** * Bootstrap configuration options. * * Delegates to `setupRuleConfigs`, which was lazy-loaded by `loadPluginWrapper`. * * @param optionsJSON - Array of all rule options across all configurations, serialized as JSON * @returns `null` if success, or error message string */ function setupRuleConfigsWrapper(optionsJSON) { return setupRuleConfigs(optionsJSON); } /** * Lint a file. * * Delegates to `lintFile`, which was lazy-loaded by `loadPluginWrapper`. * * @param filePath - Absolute path of file being linted * @param bufferId - ID of buffer containing file data * @param buffer - Buffer containing file data, or `null` if buffer with this ID was previously sent to JS * @param ruleIds - IDs of rules to run on this file * @param optionsIds - IDs of options to use for rules on this file, in same order as `ruleIds` * @param settingsJSON - Settings for file, as JSON * @param globalsJSON - Globals for file, as JSON * @param workspaceUri - Workspace URI (`null` in CLI mode, `string` in LSP mode) * @returns Diagnostics or error serialized to JSON string */ function lintFileWrapper(filePath, bufferId, buffer, ruleIds, optionsIds, settingsJSON, globalsJSON, workspaceUri) { return lintFile(filePath, bufferId, buffer, ruleIds, optionsIds, settingsJSON, globalsJSON, workspaceUri); } /** * Create a new workspace. * * Lazy-loads workspace code on first call, so that overhead is skipped if user doesn't use JS plugins. * * @param workspace - Workspace URI * @returns Promise which resolves when workspace is created */ function createWorkspaceWrapper(workspace) { return createWorkspace === null ? import("./workspace.js").then((mod) => ({createWorkspace, destroyWorkspace} = mod, createWorkspace(workspace))) : Promise.resolve(createWorkspace(workspace)); } /** * Destroy a workspace. * * Delegates to `destroyWorkspace`, which was lazy-loaded by `createWorkspaceWrapper`. * * @param workspace - Workspace URI * @returns `undefined` */ function destroyWorkspaceWrapper(workspace) { destroyWorkspace(workspace); } /** * Load JavaScript/TypeScript config files (experimental). * * Lazy-loads the js_config module on first call. * Uses native Node.js TypeScript support to import config files. * * @param paths - Array of absolute paths to JavaScript/TypeScript config files * @returns JSON-stringified result with all configs or error */ function loadJsConfigsWrapper(paths) { return resolvedConfigLoader === null ? import("./js_config.js").then(({ loadJsConfigs, loadVitePlusConfigs }) => (resolvedConfigLoader = process.env.VP_VERSION ? loadVitePlusConfigs : loadJsConfigs, resolvedConfigLoader(paths))) : resolvedConfigLoader(paths); } const args = process.argv.slice(2); process.stdout.isTTY || (process.stdin._handle?.setBlocking?.(!0), process.stdout._handle?.setBlocking?.(!0)), args.includes("--lsp") && (process.stdout.write = process.stderr.write.bind(process.stderr)), await lint(args, loadPluginWrapper, setupRuleConfigsWrapper, lintFileWrapper, createWorkspaceWrapper, destroyWorkspaceWrapper, loadJsConfigsWrapper) || (process.exitCode = 1); //#endregion export {};