From ac7f48fdc5f4b561a5b192d8d2b30e6c54e0b38c Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Wed, 1 Oct 2025 17:01:34 +0300 Subject: [PATCH] refactor: code --- lib/config/browserslistTargetHandler.js | 78 +++++++++---------------- lib/config/target.js | 2 +- 2 files changed, 30 insertions(+), 50 deletions(-) diff --git a/lib/config/browserslistTargetHandler.js b/lib/config/browserslistTargetHandler.js index 6b42b54ac..e84eb3742 100644 --- a/lib/config/browserslistTargetHandler.js +++ b/lib/config/browserslistTargetHandler.js @@ -22,65 +22,45 @@ const inputRx = /^(?:((?:[A-Z]:)?[/\\].*?))?(?::(.+?))?$/i; * @property {string=} query */ -/** - * @param {string | null | undefined} input input string - * @param {string} context the context directory - * @returns {BrowserslistHandlerConfig} config - */ -const parse = (input, context) => { - // browserslist - if (!input) { - return {}; - } - - // browserslist:path-to-config - // browserslist:path-to-config:env - if (path.isAbsolute(input)) { - const [, configPath, env] = inputRx.exec(input) || []; - - return { configPath, env }; - } - - const config = browserslist.findConfig(context); - - // browserslist:query - // browserslist:env - // When we have a configuration file and value after `:` it can be env or query - if (config) { - return { env: input, query: input }; - } - - return { query: input }; -}; - /** * @param {string | null | undefined} input input string * @param {string} context the context directory * @returns {string[] | undefined} selected browsers */ const load = (input, context) => { - const { configPath, env, query } = parse(input, context); + // browserslist:path-to-config + // browserslist:path-to-config:env + if (input && path.isAbsolute(input)) { + const [, configPath, env] = inputRx.exec(input) || []; - // TODO refactor me after resolve - https://github.com/browserslist/browserslist/issues/906 - // Try to apply query firstly, - if (query) { - try { - return browserslist(query); - } catch (_err) { - // Nothing + const config = browserslist.loadConfig({ + config: configPath, + env + }); + + return browserslist(config, { env }); + } + + const env = input || undefined; + + // browserslist:env + const config = browserslist.loadConfig({ + path: context, + env + }); + + if (config) { + const result = browserslist(config, { env }); + + if (result.length > 0) { + return browserslist(config, { env }); } } - // if a path to a config is specified then load it, else find a nearest config - const config = configPath - ? browserslist.loadConfig({ - config: configPath, - env - }) - : browserslist.loadConfig({ path: context, env }); - - if (!config) return; - return browserslist(config, { env, throwOnMissing: true }); + // browserslist:query + if (env) { + return browserslist(env); + } }; /** diff --git a/lib/config/target.js b/lib/config/target.js index e8bb48d00..bc97347f1 100644 --- a/lib/config/target.js +++ b/lib/config/target.js @@ -16,7 +16,7 @@ const getBrowserslistTargetHandler = memoize(() => * @returns {string} default target */ const getDefaultTarget = (context) => { - const browsers = getBrowserslistTargetHandler().load(null, context); + const browsers = getBrowserslistTargetHandler().load(undefined, context); return browsers ? "browserslist" : "web"; };