eslint-plugin-nextjs 0.1.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +13 -13
  2. package/dist/index.d.ts +4 -39
  3. package/dist/index.js +403 -274
  4. package/dist/index.js.map +1 -1
  5. package/package.json +15 -10
  6. package/dist/index.cjs +0 -1494
  7. package/dist/index.cjs.map +0 -1
  8. package/dist/index.d.cts +0 -43
  9. package/dist/rules/google-font-display.cjs +0 -119
  10. package/dist/rules/google-font-display.cjs.map +0 -1
  11. package/dist/rules/google-font-display.d.cts +0 -8
  12. package/dist/rules/google-font-display.d.ts +0 -8
  13. package/dist/rules/google-font-display.js +0 -92
  14. package/dist/rules/google-font-display.js.map +0 -1
  15. package/dist/rules/google-font-preconnect.cjs +0 -109
  16. package/dist/rules/google-font-preconnect.cjs.map +0 -1
  17. package/dist/rules/google-font-preconnect.d.cts +0 -5
  18. package/dist/rules/google-font-preconnect.d.ts +0 -5
  19. package/dist/rules/google-font-preconnect.js +0 -82
  20. package/dist/rules/google-font-preconnect.js.map +0 -1
  21. package/dist/rules/inline-script-id.cjs +0 -94
  22. package/dist/rules/inline-script-id.cjs.map +0 -1
  23. package/dist/rules/inline-script-id.d.cts +0 -5
  24. package/dist/rules/inline-script-id.d.ts +0 -5
  25. package/dist/rules/inline-script-id.js +0 -67
  26. package/dist/rules/inline-script-id.js.map +0 -1
  27. package/dist/rules/next-script-for-ga.cjs +0 -129
  28. package/dist/rules/next-script-for-ga.cjs.map +0 -1
  29. package/dist/rules/next-script-for-ga.d.cts +0 -5
  30. package/dist/rules/next-script-for-ga.d.ts +0 -5
  31. package/dist/rules/next-script-for-ga.js +0 -102
  32. package/dist/rules/next-script-for-ga.js.map +0 -1
  33. package/dist/rules/no-assign-module-variable.cjs +0 -64
  34. package/dist/rules/no-assign-module-variable.cjs.map +0 -1
  35. package/dist/rules/no-assign-module-variable.d.cts +0 -5
  36. package/dist/rules/no-assign-module-variable.d.ts +0 -5
  37. package/dist/rules/no-assign-module-variable.js +0 -37
  38. package/dist/rules/no-assign-module-variable.js.map +0 -1
  39. package/dist/rules/no-async-client-component.cjs +0 -99
  40. package/dist/rules/no-async-client-component.cjs.map +0 -1
  41. package/dist/rules/no-async-client-component.d.cts +0 -5
  42. package/dist/rules/no-async-client-component.d.ts +0 -5
  43. package/dist/rules/no-async-client-component.js +0 -72
  44. package/dist/rules/no-async-client-component.js.map +0 -1
  45. package/dist/rules/no-before-interactive-script-outside-document.cjs +0 -94
  46. package/dist/rules/no-before-interactive-script-outside-document.cjs.map +0 -1
  47. package/dist/rules/no-before-interactive-script-outside-document.d.cts +0 -5
  48. package/dist/rules/no-before-interactive-script-outside-document.d.ts +0 -5
  49. package/dist/rules/no-before-interactive-script-outside-document.js +0 -59
  50. package/dist/rules/no-before-interactive-script-outside-document.js.map +0 -1
  51. package/dist/rules/no-css-tags.cjs +0 -70
  52. package/dist/rules/no-css-tags.cjs.map +0 -1
  53. package/dist/rules/no-css-tags.d.cts +0 -5
  54. package/dist/rules/no-css-tags.d.ts +0 -5
  55. package/dist/rules/no-css-tags.js +0 -43
  56. package/dist/rules/no-css-tags.js.map +0 -1
  57. package/dist/rules/no-document-import-in-page.cjs +0 -74
  58. package/dist/rules/no-document-import-in-page.cjs.map +0 -1
  59. package/dist/rules/no-document-import-in-page.d.cts +0 -5
  60. package/dist/rules/no-document-import-in-page.d.ts +0 -5
  61. package/dist/rules/no-document-import-in-page.js +0 -39
  62. package/dist/rules/no-document-import-in-page.js.map +0 -1
  63. package/dist/rules/no-duplicate-head.cjs +0 -87
  64. package/dist/rules/no-duplicate-head.cjs.map +0 -1
  65. package/dist/rules/no-duplicate-head.d.cts +0 -5
  66. package/dist/rules/no-duplicate-head.d.ts +0 -5
  67. package/dist/rules/no-duplicate-head.js +0 -60
  68. package/dist/rules/no-duplicate-head.js.map +0 -1
  69. package/dist/rules/no-head-element.cjs +0 -76
  70. package/dist/rules/no-head-element.cjs.map +0 -1
  71. package/dist/rules/no-head-element.d.cts +0 -5
  72. package/dist/rules/no-head-element.d.ts +0 -5
  73. package/dist/rules/no-head-element.js +0 -41
  74. package/dist/rules/no-head-element.js.map +0 -1
  75. package/dist/rules/no-head-import-in-document.cjs +0 -76
  76. package/dist/rules/no-head-import-in-document.cjs.map +0 -1
  77. package/dist/rules/no-head-import-in-document.d.cts +0 -5
  78. package/dist/rules/no-head-import-in-document.d.ts +0 -5
  79. package/dist/rules/no-head-import-in-document.js +0 -41
  80. package/dist/rules/no-head-import-in-document.js.map +0 -1
  81. package/dist/rules/no-html-link-for-pages.cjs +0 -302
  82. package/dist/rules/no-html-link-for-pages.cjs.map +0 -1
  83. package/dist/rules/no-html-link-for-pages.d.cts +0 -5
  84. package/dist/rules/no-html-link-for-pages.d.ts +0 -5
  85. package/dist/rules/no-html-link-for-pages.js +0 -267
  86. package/dist/rules/no-html-link-for-pages.js.map +0 -1
  87. package/dist/rules/no-img-element.cjs +0 -83
  88. package/dist/rules/no-img-element.cjs.map +0 -1
  89. package/dist/rules/no-img-element.d.cts +0 -5
  90. package/dist/rules/no-img-element.d.ts +0 -5
  91. package/dist/rules/no-img-element.js +0 -48
  92. package/dist/rules/no-img-element.js.map +0 -1
  93. package/dist/rules/no-page-custom-font.cjs +0 -184
  94. package/dist/rules/no-page-custom-font.cjs.map +0 -1
  95. package/dist/rules/no-page-custom-font.d.cts +0 -5
  96. package/dist/rules/no-page-custom-font.d.ts +0 -5
  97. package/dist/rules/no-page-custom-font.js +0 -159
  98. package/dist/rules/no-page-custom-font.js.map +0 -1
  99. package/dist/rules/no-script-component-in-head.cjs +0 -74
  100. package/dist/rules/no-script-component-in-head.cjs.map +0 -1
  101. package/dist/rules/no-script-component-in-head.d.cts +0 -5
  102. package/dist/rules/no-script-component-in-head.d.ts +0 -5
  103. package/dist/rules/no-script-component-in-head.js +0 -47
  104. package/dist/rules/no-script-component-in-head.js.map +0 -1
  105. package/dist/rules/no-styled-jsx-in-document.cjs +0 -78
  106. package/dist/rules/no-styled-jsx-in-document.cjs.map +0 -1
  107. package/dist/rules/no-styled-jsx-in-document.d.cts +0 -5
  108. package/dist/rules/no-styled-jsx-in-document.d.ts +0 -5
  109. package/dist/rules/no-styled-jsx-in-document.js +0 -43
  110. package/dist/rules/no-styled-jsx-in-document.js.map +0 -1
  111. package/dist/rules/no-sync-scripts.cjs +0 -64
  112. package/dist/rules/no-sync-scripts.cjs.map +0 -1
  113. package/dist/rules/no-sync-scripts.d.cts +0 -5
  114. package/dist/rules/no-sync-scripts.d.ts +0 -5
  115. package/dist/rules/no-sync-scripts.js +0 -37
  116. package/dist/rules/no-sync-scripts.js.map +0 -1
  117. package/dist/rules/no-title-in-document-head.cjs +0 -78
  118. package/dist/rules/no-title-in-document-head.cjs.map +0 -1
  119. package/dist/rules/no-title-in-document-head.d.cts +0 -5
  120. package/dist/rules/no-title-in-document-head.d.ts +0 -5
  121. package/dist/rules/no-title-in-document-head.js +0 -51
  122. package/dist/rules/no-title-in-document-head.js.map +0 -1
  123. package/dist/rules/no-typos.cjs +0 -133
  124. package/dist/rules/no-typos.cjs.map +0 -1
  125. package/dist/rules/no-typos.d.cts +0 -5
  126. package/dist/rules/no-typos.d.ts +0 -5
  127. package/dist/rules/no-typos.js +0 -98
  128. package/dist/rules/no-typos.js.map +0 -1
  129. package/dist/rules/no-unwanted-polyfillio.cjs +0 -164
  130. package/dist/rules/no-unwanted-polyfillio.cjs.map +0 -1
  131. package/dist/rules/no-unwanted-polyfillio.d.cts +0 -5
  132. package/dist/rules/no-unwanted-polyfillio.d.ts +0 -5
  133. package/dist/rules/no-unwanted-polyfillio.js +0 -137
  134. package/dist/rules/no-unwanted-polyfillio.js.map +0 -1
  135. package/dist/utils/define-rule.cjs +0 -31
  136. package/dist/utils/define-rule.cjs.map +0 -1
  137. package/dist/utils/define-rule.d.cts +0 -5
  138. package/dist/utils/define-rule.d.ts +0 -5
  139. package/dist/utils/define-rule.js +0 -6
  140. package/dist/utils/define-rule.js.map +0 -1
  141. package/dist/utils/get-root-dirs.cjs +0 -60
  142. package/dist/utils/get-root-dirs.cjs.map +0 -1
  143. package/dist/utils/get-root-dirs.d.cts +0 -8
  144. package/dist/utils/get-root-dirs.d.ts +0 -8
  145. package/dist/utils/get-root-dirs.js +0 -25
  146. package/dist/utils/get-root-dirs.js.map +0 -1
  147. package/dist/utils/node-attributes.cjs +0 -67
  148. package/dist/utils/node-attributes.cjs.map +0 -1
  149. package/dist/utils/node-attributes.d.cts +0 -15
  150. package/dist/utils/node-attributes.d.ts +0 -15
  151. package/dist/utils/node-attributes.js +0 -46
  152. package/dist/utils/node-attributes.js.map +0 -1
  153. package/dist/utils/url.cjs +0 -167
  154. package/dist/utils/url.cjs.map +0 -1
  155. package/dist/utils/url.d.cts +0 -35
  156. package/dist/utils/url.d.ts +0 -35
  157. package/dist/utils/url.js +0 -128
  158. package/dist/utils/url.js.map +0 -1
package/README.md CHANGED
@@ -14,8 +14,11 @@ This is a unofficial fork of [`@next/eslint-plugin-next`](https://www.npmjs.com/
14
14
  If you're using `eslint-config-next`, you _do not_ need this plugin.
15
15
  You only need this plugin if you're rolling your own ESLint config.
16
16
 
17
+ Beginning with v1, this plugin is ESM only and requires ESLint v9. If you need legacy support, use v0.1.2.
18
+
17
19
  ## Requirements
18
20
 
21
+ - ESLint v9
19
22
  - Node.js v20.11.0 or higher
20
23
 
21
24
  ## Installation
@@ -32,34 +35,30 @@ bun add eslint eslint-plugin-nextjs -d
32
35
 
33
36
  ## Usage
34
37
 
35
- > **Note**: The API _will_ break in v1. I want to clean up this API follow ESLint standards.
38
+ I've cleaned up the API, so it's not 1:1 with the original plugin, but all of the rules remain the same.
36
39
 
37
- This plugin ships two configs for both legacy and flat ESLint configuration formats:
40
+ The original plugin ships two configs, recommended and core-web-vitals. They're the same but the latter has two rules upgraded to errors. I've consolidated this to a single "recommended" config with all rules warnings by default.
38
41
 
39
- - "recommended" or "recommended/flat" - includes most rules from Next.js
40
- - "core-web-vitals" or "core-web-vitals/flat" - same thing but two rules get upgraded to errors 🤷‍♂️
42
+ My belief is that all ESLint rules should be warnings to allow you to distinguish between ESLint issues and TypeScript issues easily in your IDE (orange squiggly vs red squiggly).
41
43
 
42
- You probably want Core Web Vitals (that's what ships inside of `eslint-config-next`), but you never need both.
44
+ If you're migrating from either config, all rules will still be enabled. I didn't changed any core functionality.
43
45
 
44
- ### Legacy Config
45
-
46
- ```js
47
- {
48
- extends: ["nextjs/core-web-vitals"],
49
- }
50
- ```
46
+ > **Note**: If you run this plugin with `next lint`, it will give you a warning that the next eslint plugin is not installed. You can either ignore this, or run your lint with `eslint .` instead.
51
47
 
52
48
  ### Flat Config
53
49
 
54
50
  ```js
51
+ // eslint.config.js/mjs
55
52
  import nextjs from "eslint-plugin-nextjs";
56
53
 
57
54
  export default [
58
55
  // ... other configs
59
- nextjs.configs["core-web-vitals/flat"],
56
+ nextjs.configs.recommended,
60
57
  ];
61
58
  ```
62
59
 
60
+ If your project has `"type": "module"` in `package.json`, you can use `eslint.config.js`, otherwise use `eslint.config.mjs` which will allow you to use ESM syntax in that file.
61
+
63
62
  ### Custom Config
64
63
 
65
64
  ```js
@@ -72,6 +71,7 @@ export default [
72
71
  nextjs,
73
72
  },
74
73
  rules: {
74
+ // note that the prefix is different, the original plugin uses "@next/next/"
75
75
  "nextjs/google-font-display": "warn",
76
76
  "nextjs/no-img-element": "warn",
77
77
  },
package/dist/index.d.ts CHANGED
@@ -1,43 +1,8 @@
1
- import * as _eslint_core from '@eslint/core';
2
- import { ESLint, Linter, Rule } from 'eslint';
1
+ import { ESLint } from 'eslint';
3
2
 
4
- interface PluginConfig extends ESLint.Plugin {
5
- configs: {
6
- "core-web-vitals": Linter.LegacyConfig;
7
- "core-web-vitals/flat": Linter.Config;
8
- recommended: Linter.LegacyConfig;
9
- "recommended/flat": Linter.Config;
10
- };
11
- name: string;
12
- rules: {
13
- "nextjs/google-font-display": Rule.RuleModule;
14
- "nextjs/google-font-preconnect": Rule.RuleModule;
15
- "nextjs/inline-script-id": Rule.RuleModule;
16
- "nextjs/next-script-for-ga": Rule.RuleModule;
17
- "nextjs/no-assign-module-variable": Rule.RuleModule;
18
- "nextjs/no-async-client-component": Rule.RuleModule;
19
- "nextjs/no-before-interactive-script-outside-document": Rule.RuleModule;
20
- "nextjs/no-css-tags": Rule.RuleModule;
21
- "nextjs/no-document-import-in-page": Rule.RuleModule;
22
- "nextjs/no-duplicate-head": Rule.RuleModule;
23
- "nextjs/no-head-element": Rule.RuleModule;
24
- "nextjs/no-head-import-in-document": Rule.RuleModule;
25
- "nextjs/no-html-link-for-pages": Rule.RuleModule;
26
- "nextjs/no-img-element": Rule.RuleModule;
27
- "nextjs/no-page-custom-font": Rule.RuleModule;
28
- "nextjs/no-script-component-in-head": Rule.RuleModule;
29
- "nextjs/no-styled-jsx-in-document": Rule.RuleModule;
30
- "nextjs/no-sync-scripts": Rule.RuleModule;
31
- "nextjs/no-title-in-document-head": Rule.RuleModule;
32
- "nextjs/no-typos": Rule.RuleModule;
33
- "nextjs/no-unwanted-polyfillio": Rule.RuleModule;
34
- };
35
- }
36
3
  /**
37
- * ESLint plugin for Next.js projects
4
+ * ESLint V9 plugin for Next.js projects
38
5
  */
39
- declare const _default: PluginConfig;
6
+ declare const nextjsPlugin: ESLint.Plugin;
40
7
 
41
- declare const rules: Record<string, _eslint_core.RuleDefinition<_eslint_core.RuleDefinitionTypeOptions>> | undefined;
42
-
43
- export { _default as default, rules };
8
+ export { nextjsPlugin as default };