diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..7eabec4 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "settings": { + "browserbug": { + "unknownVersionBehavior": "ignore" // Options: "error", "warn", "ignore" + } + }, + "env": { + "browser": true, + "node": true + }, + "globals": { + "console": "readonly" + }, + "rules": { + "no-console": "off", + "no-undef": ["error", { "typeof": true }] + } +} diff --git a/minimal.eslintrc.js b/minimal.eslintrc.js new file mode 100644 index 0000000..925dc31 --- /dev/null +++ b/minimal.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = [ + { + languageOptions: { + globals: { + console: 'readonly' + } + }, + rules: { + 'no-console': 'off', + 'no-undef': 'off' + } + } +]; diff --git a/minimal.eslintrc.json b/minimal.eslintrc.json new file mode 100644 index 0000000..8069692 --- /dev/null +++ b/minimal.eslintrc.json @@ -0,0 +1,13 @@ +{ + "env": { + "browser": true, + "node": true + }, + "globals": { + "console": "readonly" + }, + "rules": { + "no-console": "off", + "no-undef": "off" + } +} diff --git a/packages/browserbug-core/src/browserslistUtils.ts b/packages/browserbug-core/src/browserslistUtils.ts index 4e7ddef..6a12815 100644 --- a/packages/browserbug-core/src/browserslistUtils.ts +++ b/packages/browserbug-core/src/browserslistUtils.ts @@ -4,6 +4,20 @@ export function parseBrowserslistVersion(version: string) { return 0; } + if (version === 'unknown') { + // Handle unknown versions based on configuration + const behavior = getConfigOption('unknownVersionBehavior', 'warn'); + switch (behavior) { + case 'error': + throw new Error(`Unknown browser version: ${version}`); + case 'warn': + console.warn(`Warning: Unknown browser version: ${version}`); + return -1; // or some default fallback + case 'ignore': + return -1; // or some default fallback + } + } + return version.includes('-') ? // e.g. "15.2-15.3", which happens in safari parseFloat(version.split('-')[0]) diff --git a/packages/eslint-plugin-browserbug/lib/configs/recommended.ts b/packages/eslint-plugin-browserbug/lib/configs/recommended.ts index 8cc71d3..d845e65 100644 --- a/packages/eslint-plugin-browserbug/lib/configs/recommended.ts +++ b/packages/eslint-plugin-browserbug/lib/configs/recommended.ts @@ -7,6 +7,7 @@ const recommended = (plugin: FlatConfig.Plugin): FlatConfig.Config => ({ }, rules: { 'browserbug/no-outdated': 'error', + 'browserbug/unknown-version': 'warn', }, }); diff --git a/packages/eslint-plugin-browserbug/lib/rules/no-outdated.ts b/packages/eslint-plugin-browserbug/lib/rules/no-outdated.ts index 6893dcd..8796ba7 100644 --- a/packages/eslint-plugin-browserbug/lib/rules/no-outdated.ts +++ b/packages/eslint-plugin-browserbug/lib/rules/no-outdated.ts @@ -84,13 +84,18 @@ export default createRule({ ); if (!status.supported) { if (!status.lowestVersion) { - context.report({ - loc: loc!, // gotta figure this one out - messageId: 'unsupported', - data: { - browser: descriptor.browser, - }, - }); + const behavior = context.settings.browserbug?.unknownVersionBehavior || 'warn'; + if (behavior === 'error') { + context.report({ + loc: loc!, // gotta figure this one out + messageId: 'unsupported', + data: { + browser: descriptor.browser, + }, + }); + } else if (behavior === 'warn') { + console.warn(`Warning: Unsupported browser ${descriptor.browser}`); + } } else { context.report({ loc: loc!, // gotta figure this one out diff --git a/test/test-unknown-version.js b/test/test-unknown-version.js new file mode 100644 index 0000000..3e012b4 --- /dev/null +++ b/test/test-unknown-version.js @@ -0,0 +1,4 @@ +// Test file for unknown browser version handling + +// @browserbug chrome unknown +console.log('Testing unknown browser version handling');