Skip to content

Commit 63c9d13

Browse files
feat: new browsers and universal presets
1 parent 08c3da3 commit 63c9d13

File tree

15 files changed

+241
-5
lines changed

15 files changed

+241
-5
lines changed

configs.js

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,9 @@ const typescriptConfig = getTypescriptConfig();
288288
const reactConfig = getReactConfig();
289289
const jestConfig = getJestConfig();
290290

291-
configs.recommended = [
291+
// TODO remove old alises (not started with `node-`) in the next major release
292+
293+
const recommended = [
292294
globalIgnores(ignorePaths),
293295
isModule
294296
? configs["node/mixed-module-and-commonjs"]
@@ -303,7 +305,10 @@ configs.recommended = [
303305
configs["package-json/recommended"],
304306
];
305307

306-
configs["recommended-module"] = [
308+
configs.recommended = recommended;
309+
configs["node-recommended"] = recommended;
310+
311+
const nodeRecommendedModule = [
307312
globalIgnores(ignorePaths),
308313
configs["node/mixed-module-and-commonjs"],
309314
javascriptConfig,
@@ -316,7 +321,10 @@ configs["recommended-module"] = [
316321
configs["package-json/recommended"],
317322
];
318323

319-
configs["recommended-commonjs"] = [
324+
configs["recommended-module"] = nodeRecommendedModule;
325+
configs["node-recommended-module"] = nodeRecommendedModule;
326+
327+
const nodeRecommendedCommonJS = [
320328
globalIgnores(ignorePaths),
321329
configs["node/mixed-commonjs-and-module"],
322330
javascriptConfig,
@@ -329,7 +337,10 @@ configs["recommended-commonjs"] = [
329337
configs["package-json/recommended"],
330338
];
331339

332-
configs["recommended-dirty"] = [
340+
configs["recommended-commonjs"] = nodeRecommendedCommonJS;
341+
configs["node-recommended-commonjs"] = nodeRecommendedCommonJS;
342+
343+
const nodeRecommendedDirty = [
333344
globalIgnores(ignorePaths),
334345
configs["node/mixed-dirty"],
335346
javascriptConfig,
@@ -341,4 +352,57 @@ configs["recommended-dirty"] = [
341352
configs["package-json/recommended"],
342353
];
343354

355+
configs["recommended-dirty"] = nodeRecommendedDirty;
356+
configs["node-recommended-dirty"] = nodeRecommendedDirty;
357+
358+
const browserRecommended = [
359+
globalIgnores(ignorePaths),
360+
configs["browser/recommended"],
361+
javascriptConfig,
362+
typescriptJSDocConfig,
363+
typescriptConfig,
364+
jestConfig,
365+
configs["markdown/recommended"],
366+
configs["stylistic/recommended"],
367+
configs["package-json/recommended"],
368+
];
369+
370+
configs["browser-recommended"] = browserRecommended;
371+
372+
const browserOutdatedRecommended = [
373+
globalIgnores(ignorePaths),
374+
configs["browser/recommended-outdated"],
375+
{
376+
...configs["javascript/es5"],
377+
languageOptions: {
378+
ecmaVersion: "latest",
379+
},
380+
},
381+
typescriptJSDocConfig,
382+
typescriptConfig,
383+
jestConfig,
384+
configs["markdown/recommended"],
385+
configs["stylistic/recommended"],
386+
configs["package-json/recommended"],
387+
];
388+
389+
configs["browser-outdated-recommended"] = browserOutdatedRecommended;
390+
391+
const universalRecommended = [
392+
globalIgnores(ignorePaths),
393+
configs["browser/recommended"],
394+
isModule
395+
? configs["node/mixed-module-and-commonjs"]
396+
: configs["node/mixed-commonjs-and-module"],
397+
javascriptConfig,
398+
typescriptJSDocConfig,
399+
typescriptConfig,
400+
jestConfig,
401+
configs["markdown/recommended"],
402+
configs["stylistic/recommended"],
403+
configs["package-json/recommended"],
404+
];
405+
406+
configs["universal-recommended"] = universalRecommended;
407+
344408
export { default } from "./configs/index.js";

configs/browser.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@ import importPlugin from "eslint-plugin-import";
22
import unicornPlugin from "eslint-plugin-unicorn";
33
import globals from "globals";
44

5+
const recommendedBrowserOutdatedConfig = {
6+
languageOptions: {
7+
globals: {
8+
...globals.browser,
9+
},
10+
},
11+
};
12+
513
const recommendedBrowserConfig = {
614
languageOptions: {
715
globals: {
@@ -27,10 +35,15 @@ const recommendedBrowserConfig = {
2735

2836
"unicorn/prefer-query-selector": "error",
2937

30-
"import/extensions": ["error", "always", { ignorePackages: true }],
38+
"import/extensions": [
39+
"error",
40+
"always",
41+
{ ignorePackages: true, checkTypeImports: true },
42+
],
3143
},
3244
};
3345

3446
export default {
3547
"browser/recommended": recommendedBrowserConfig,
48+
"browser/recommended-outdated": recommendedBrowserOutdatedConfig,
3649
};

configs/javascript.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,7 @@ function getConfig(esVersion) {
12141214
};
12151215

12161216
if (esVersion === 5) {
1217+
config.rules["arrow-body-style"] = "off";
12171218
config.rules["object-shorthand"] = "off";
12181219
config.rules["no-var"] = "off";
12191220
config.rules["prefer-arrow-callback"] = "off";
@@ -1226,6 +1227,8 @@ function getConfig(esVersion) {
12261227
config.rules["prefer-template"] = "off";
12271228
config.rules["no-template-curly-in-string"] = "off";
12281229
config.rules["unicorn/prefer-spread"] = "off";
1230+
config.rules["unicorn/prefer-includes"] = "off";
1231+
config.rules["unicorn/no-array-for-each"] = "off";
12291232
}
12301233

12311234
if (esVersion < 2018) {

eslint.config.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ export default defineConfig([
88
"./validation/commonjs-package/**/*",
99
"./validation/module-package/**/*",
1010
"./validation/dirty-package/**/*",
11+
"./validation/browser/**/*",
12+
"./validation/browser-outdated/**/*",
13+
"./validation/universal/**/*",
1114
],
1215
extends: [config],
1316
},
@@ -33,6 +36,21 @@ export default defineConfig([
3336
"n/no-unpublished-require": "off",
3437
},
3538
},
39+
{
40+
files: ["./validation/browser/**/*"],
41+
extends: [configs["browser-recommended"]],
42+
},
43+
{
44+
files: ["./validation/browser-outdated/**/*"],
45+
extends: [configs["browser-outdated-recommended"]],
46+
},
47+
{
48+
files: ["./validation/universal/**/*"],
49+
extends: [configs["universal-recommended"]],
50+
rules: {
51+
"n/no-unsupported-features/node-builtins": "off",
52+
},
53+
},
3654
{
3755
files: ["./validation/hashbang.js"],
3856
rules: {

validation/browser-outdated/code.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import sum from "./module.js";
2+
3+
const heading = document.querySelector("h1");
4+
5+
// Change the text content
6+
heading.textContent = "New Heading Text";
7+
8+
// Add a new element
9+
const newParagraph = document.createElement("p");
10+
11+
newParagraph.textContent = `Sum (1 + 2) = ${sum(1, 2)}`;
12+
13+
heading.appendChild(newParagraph);

validation/browser-outdated/module.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* @param {number} a number
3+
* @param {number} b number
4+
* @returns {number} sum
5+
*/
6+
export default function sum(a, b) {
7+
return a + b;
8+
}

validation/browser/code.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import sum from "./module.js";
2+
3+
const heading = document.querySelector("h1");
4+
5+
// Change the text content
6+
heading.textContent = "New Heading Text";
7+
8+
// Add a new element
9+
const newParagraph = document.createElement("p");
10+
11+
newParagraph.textContent = `Sum (1 + 2) = ${sum(1, 2)}`;
12+
13+
heading.append(newParagraph);

validation/browser/module.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* @param {number} a number
3+
* @param {number} b number
4+
* @returns {number} sum
5+
*/
6+
export default function sum(a, b) {
7+
return a + b;
8+
}

validation/universal/code.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/**
2+
* @param {URL} url url
3+
* @returns {Promise<Response>} result
4+
*/
5+
async function readFile(url) {
6+
if (globalThis === globalThis.global) {
7+
const fs = (await import("node:fs")).default;
8+
9+
return fs.promises.readFile(url, "utf8");
10+
}
11+
12+
const response = await fetch(url);
13+
14+
return response.text();
15+
}
16+
17+
/**
18+
* @returns {Promise<[number, number, number]>} random numbers
19+
*/
20+
async function getRandomNumbers() {
21+
const crypto =
22+
globalThis === globalThis.global
23+
? (await import("node:crypto")).webcrypto
24+
: globalThis.crypto;
25+
26+
const array = new Uint8Array(3);
27+
const randomNumbers = crypto.getRandomValues(array);
28+
29+
return [randomNumbers[0], randomNumbers[1], randomNumbers[2]];
30+
}
31+
32+
let content;
33+
34+
try {
35+
content = await readFile(new URL("file.txt", import.meta.url));
36+
} catch (err) {
37+
throw new Error("Error fetching data", { cause: err });
38+
}
39+
40+
/**
41+
* @returns {Promise<number>} number
42+
*/
43+
async function loadModule() {
44+
if (globalThis === globalThis.global) {
45+
const { createRequire } = await import("node:module");
46+
const require = createRequire(import.meta.url);
47+
48+
return require("./module.cjs");
49+
}
50+
51+
const module = (await import("./module.mjs")).default;
52+
53+
return module;
54+
}
55+
56+
/**
57+
* @returns {string} title
58+
*/
59+
function getTitle() {
60+
return (globalThis.process && process.title) || document.title;
61+
}
62+
63+
// eslint-disable-next-line
64+
console.log(content);
65+
// eslint-disable-next-line
66+
console.log(await getRandomNumbers());
67+
// eslint-disable-next-line
68+
console.log(await loadModule());
69+
// eslint-disable-next-line
70+
console.log(getTitle());

validation/universal/file.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Text

0 commit comments

Comments
 (0)