eslint-plugin-node-dependencies 1.3.0 → 2.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 (57) hide show
  1. package/README.md +10 -66
  2. package/dist/chunk-C7Uep-_p.mjs +20 -0
  3. package/dist/index.d.mts +28 -0
  4. package/dist/index.mjs +1633 -0
  5. package/dist/worker.d.mts +7 -0
  6. package/dist/worker.mjs +30 -0
  7. package/package.json +17 -11
  8. package/dist/configs/flat/recommended.d.ts +0 -17
  9. package/dist/configs/flat/recommended.js +0 -57
  10. package/dist/configs/recommended.d.ts +0 -9
  11. package/dist/configs/recommended.js +0 -15
  12. package/dist/configs/rules/recommended.d.ts +0 -5
  13. package/dist/configs/rules/recommended.js +0 -9
  14. package/dist/index.d.ts +0 -34
  15. package/dist/index.js +0 -54
  16. package/dist/meta.d.ts +0 -1
  17. package/dist/meta.js +0 -5
  18. package/dist/rules/absolute-version.d.ts +0 -2
  19. package/dist/rules/absolute-version.js +0 -161
  20. package/dist/rules/compat-engines.d.ts +0 -2
  21. package/dist/rules/compat-engines.js +0 -263
  22. package/dist/rules/no-deprecated.d.ts +0 -2
  23. package/dist/rules/no-deprecated.js +0 -63
  24. package/dist/rules/no-dupe-deps.d.ts +0 -2
  25. package/dist/rules/no-dupe-deps.js +0 -90
  26. package/dist/rules/no-restricted-deps.d.ts +0 -2
  27. package/dist/rules/no-restricted-deps.js +0 -259
  28. package/dist/rules/prefer-caret-range-version.d.ts +0 -2
  29. package/dist/rules/prefer-caret-range-version.js +0 -99
  30. package/dist/rules/prefer-tilde-range-version.d.ts +0 -2
  31. package/dist/rules/prefer-tilde-range-version.js +0 -100
  32. package/dist/rules/require-provenance-deps.d.ts +0 -2
  33. package/dist/rules/require-provenance-deps.js +0 -98
  34. package/dist/rules/valid-engines.d.ts +0 -2
  35. package/dist/rules/valid-engines.js +0 -11
  36. package/dist/rules/valid-semver.d.ts +0 -2
  37. package/dist/rules/valid-semver.js +0 -78
  38. package/dist/types.d.ts +0 -51
  39. package/dist/types.js +0 -2
  40. package/dist/utils/ast-utils.d.ts +0 -3
  41. package/dist/utils/ast-utils.js +0 -24
  42. package/dist/utils/index.d.ts +0 -5
  43. package/dist/utils/index.js +0 -72
  44. package/dist/utils/meta.d.ts +0 -30
  45. package/dist/utils/meta.js +0 -269
  46. package/dist/utils/package-json/index.d.ts +0 -1
  47. package/dist/utils/package-json/index.js +0 -17
  48. package/dist/utils/package-json/worker.d.mts +0 -1
  49. package/dist/utils/package-json/worker.mjs +0 -26
  50. package/dist/utils/regexp.d.ts +0 -3
  51. package/dist/utils/regexp.js +0 -20
  52. package/dist/utils/rules.d.ts +0 -2
  53. package/dist/utils/rules.js +0 -28
  54. package/dist/utils/semver-range.d.ts +0 -7
  55. package/dist/utils/semver-range.js +0 -37
  56. package/dist/utils/semver.d.ts +0 -7
  57. package/dist/utils/semver.js +0 -204
@@ -0,0 +1,7 @@
1
+ //#region lib/utils/package-json/worker.d.ts
2
+ /**
3
+ * If users are using a proxy for their npm preferences, set the option to use that proxy.
4
+ */
5
+ declare function setupProxy(): void;
6
+ //#endregion
7
+ export { setupProxy };
@@ -0,0 +1,30 @@
1
+ import { runAsWorker } from "synckit";
2
+ import packageJson from "package-json";
3
+ import { ProxyAgent, setGlobalDispatcher } from "undici";
4
+
5
+ //#region lib/utils/package-json/worker.ts
6
+ let proxySet = false;
7
+ const PROXY_ENV = [
8
+ "https_proxy",
9
+ "HTTPS_PROXY",
10
+ "http_proxy",
11
+ "HTTP_PROXY",
12
+ "npm_config_https_proxy",
13
+ "npm_config_http_proxy"
14
+ ];
15
+ /**
16
+ * If users are using a proxy for their npm preferences, set the option to use that proxy.
17
+ */
18
+ function setupProxy() {
19
+ if (proxySet) return;
20
+ proxySet = true;
21
+ const proxy = PROXY_ENV.map((k) => process.env[k]).find((v) => v);
22
+ if (proxy) setGlobalDispatcher(new ProxyAgent(proxy));
23
+ }
24
+ runAsWorker((packageName) => {
25
+ setupProxy();
26
+ return packageJson(packageName, { allVersions: true });
27
+ });
28
+
29
+ //#endregion
30
+ export { setupProxy };
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "eslint-plugin-node-dependencies",
3
- "version": "1.3.0",
3
+ "version": "2.0.0",
4
+ "type": "module",
4
5
  "description": "ESLint plugin to check Node.js dependencies.",
5
6
  "repository": "git+https://github.com/ota-meshi/eslint-plugin-node-dependencies.git",
6
7
  "homepage": "https://github.com/ota-meshi/eslint-plugin-node-dependencies#readme",
@@ -14,10 +15,16 @@
14
15
  ],
15
16
  "license": "MIT",
16
17
  "engines": {
17
- "node": "^18.17.0 || >=20.5.0"
18
+ "node": "^20.19.0 || ^22.13.0 || >=24"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.mts",
23
+ "import": "./dist/index.mjs",
24
+ "default": "./dist/index.mjs"
25
+ },
26
+ "./package.json": "./package.json"
18
27
  },
19
- "main": "dist/index.js",
20
- "types": "dist/index.d.ts",
21
28
  "files": [
22
29
  "dist"
23
30
  ],
@@ -30,16 +37,15 @@
30
37
  "json"
31
38
  ],
32
39
  "peerDependencies": {
33
- "eslint": ">=6.0.0"
40
+ "eslint": ">=9.38.0"
34
41
  },
35
42
  "dependencies": {
36
- "eslint-compat-utils": "^0.6.5",
37
- "jsonc-eslint-parser": "^2.0.2",
38
- "npm-package-arg": "^12.0.2",
43
+ "jsonc-eslint-parser": "^3.1.0",
44
+ "npm-package-arg": "^13.0.2",
39
45
  "package-json": "^10.0.1",
40
- "semver": "^7.3.5",
41
- "synckit": "^0.11.0",
42
- "undici": "^6.21.2 || ^7.8.0"
46
+ "semver": "^7.7.4",
47
+ "synckit": "^0.11.12",
48
+ "undici": "^7.22.0"
43
49
  },
44
50
  "publishConfig": {
45
51
  "access": "public"
@@ -1,17 +0,0 @@
1
- import type { ESLint } from "eslint";
2
- import * as jsonParser from "jsonc-eslint-parser";
3
- export declare const recommendedConfig: ({
4
- plugins: {
5
- readonly "node-dependencies": ESLint.Plugin;
6
- };
7
- files?: undefined;
8
- languageOptions?: undefined;
9
- rules?: undefined;
10
- } | {
11
- files: string[];
12
- languageOptions: {
13
- parser: typeof jsonParser;
14
- };
15
- rules: import("@eslint/core").RulesConfig;
16
- plugins?: undefined;
17
- })[];
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.recommendedConfig = void 0;
40
- const recommended_1 = __importDefault(require("../rules/recommended"));
41
- const jsonParser = __importStar(require("jsonc-eslint-parser"));
42
- exports.recommendedConfig = [
43
- {
44
- plugins: {
45
- get "node-dependencies"() {
46
- return require("../../index");
47
- },
48
- },
49
- },
50
- {
51
- files: ["**/package.json", "package.json"],
52
- languageOptions: {
53
- parser: jsonParser,
54
- },
55
- rules: recommended_1.default.rules,
56
- },
57
- ];
@@ -1,9 +0,0 @@
1
- declare const _default: {
2
- plugins: string[];
3
- overrides: {
4
- files: string[];
5
- parser: string;
6
- rules: import("@eslint/core").RulesConfig;
7
- }[];
8
- };
9
- export = _default;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- const recommended_1 = __importDefault(require("./rules/recommended"));
6
- module.exports = {
7
- plugins: ["node-dependencies"],
8
- overrides: [
9
- {
10
- files: ["package.json"],
11
- parser: require.resolve("jsonc-eslint-parser"),
12
- rules: recommended_1.default.rules,
13
- },
14
- ],
15
- };
@@ -1,5 +0,0 @@
1
- import type { Linter } from "eslint";
2
- declare const _default: {
3
- rules: Linter.RulesRecord;
4
- };
5
- export default _default;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = {
4
- rules: {
5
- "node-dependencies/compat-engines": "error",
6
- "node-dependencies/no-dupe-deps": "error",
7
- "node-dependencies/valid-semver": "error",
8
- },
9
- };
package/dist/index.d.ts DELETED
@@ -1,34 +0,0 @@
1
- import type { RuleModule } from "./types";
2
- import * as meta from "./meta";
3
- declare const _default: {
4
- meta: typeof meta;
5
- configs: {
6
- recommended: {
7
- plugins: string[];
8
- overrides: {
9
- files: string[];
10
- parser: string;
11
- rules: import("@eslint/core").RulesConfig;
12
- }[];
13
- };
14
- "flat/recommended": ({
15
- plugins: {
16
- readonly "node-dependencies": import("eslint").ESLint.Plugin;
17
- };
18
- files?: undefined;
19
- languageOptions?: undefined;
20
- rules?: undefined;
21
- } | {
22
- files: string[];
23
- languageOptions: {
24
- parser: typeof import("jsonc-eslint-parser");
25
- };
26
- rules: import("@eslint/core").RulesConfig;
27
- plugins?: undefined;
28
- })[];
29
- };
30
- rules: {
31
- [key: string]: RuleModule;
32
- };
33
- };
34
- export = _default;
package/dist/index.js DELETED
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- const rules_1 = require("./utils/rules");
39
- const recommended_1 = __importDefault(require("./configs/recommended"));
40
- const recommended_2 = require("./configs/flat/recommended");
41
- const meta = __importStar(require("./meta"));
42
- const configs = {
43
- recommended: recommended_1.default,
44
- "flat/recommended": recommended_2.recommendedConfig,
45
- };
46
- const rules = rules_1.rules.reduce((obj, r) => {
47
- obj[r.meta.docs.ruleName] = r;
48
- return obj;
49
- }, {});
50
- module.exports = {
51
- meta,
52
- configs,
53
- rules,
54
- };
package/dist/meta.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare const name: any, version: any;
package/dist/meta.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.version = exports.name = void 0;
5
- _a = require("../package.json"), exports.name = _a.name, exports.version = _a.version;
@@ -1,2 +0,0 @@
1
- declare const _default: import("../types").RuleModule;
2
- export default _default;
@@ -1,161 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsonc_eslint_parser_1 = require("jsonc-eslint-parser");
4
- const utils_1 = require("../utils");
5
- const ast_utils_1 = require("../utils/ast-utils");
6
- const regexp_1 = require("../utils/regexp");
7
- const semver_1 = require("../utils/semver");
8
- const eslint_compat_utils_1 = require("eslint-compat-utils");
9
- const PREFERS = ["always", "never", "ignore"];
10
- const SCHEMA_FOR_DEPS_PROPERTIES = {
11
- dependencies: { enum: PREFERS },
12
- peerDependencies: { enum: PREFERS },
13
- optionalDependencies: { enum: PREFERS },
14
- devDependencies: { enum: PREFERS },
15
- };
16
- const DEFAULT = {
17
- dependencies: "ignore",
18
- peerDependencies: "ignore",
19
- optionalDependencies: "ignore",
20
- devDependencies: "always",
21
- };
22
- function stringToOption(option) {
23
- return {
24
- dependencies: option,
25
- peerDependencies: option,
26
- optionalDependencies: option,
27
- devDependencies: option,
28
- };
29
- }
30
- function objectToOption(option, defaults) {
31
- return {
32
- dependencies: option.dependencies || defaults.dependencies,
33
- peerDependencies: option.peerDependencies || defaults.peerDependencies,
34
- optionalDependencies: option.optionalDependencies || defaults.optionalDependencies,
35
- devDependencies: option.devDependencies || defaults.devDependencies,
36
- };
37
- }
38
- function parseOption(option) {
39
- if (!option) {
40
- return () => DEFAULT;
41
- }
42
- if (typeof option === "string") {
43
- const objectOption = stringToOption(option);
44
- return () => objectOption;
45
- }
46
- const baseOption = objectToOption(option, DEFAULT);
47
- if (!option.overridePackages) {
48
- return () => baseOption;
49
- }
50
- const overridePackages = Object.entries(option.overridePackages).map(([packageName, opt]) => {
51
- const regexp = (0, regexp_1.toRegExp)(packageName);
52
- return Object.assign({ test: (s) => regexp.test(s) }, (typeof opt === "string"
53
- ? stringToOption(opt)
54
- : objectToOption(opt, baseOption)));
55
- });
56
- return (name) => {
57
- for (const overridePackage of overridePackages) {
58
- if (overridePackage.test(name)) {
59
- return overridePackage;
60
- }
61
- }
62
- return baseOption;
63
- };
64
- }
65
- exports.default = (0, utils_1.createRule)("absolute-version", {
66
- meta: {
67
- docs: {
68
- description: "require or disallow absolute version of dependency.",
69
- category: "Best Practices",
70
- recommended: false,
71
- },
72
- schema: [
73
- {
74
- oneOf: [
75
- { enum: PREFERS.filter((p) => p !== "ignore") },
76
- {
77
- type: "object",
78
- properties: Object.assign(Object.assign({}, SCHEMA_FOR_DEPS_PROPERTIES), { overridePackages: {
79
- type: "object",
80
- patternProperties: {
81
- "^(?:\\S+)$": {
82
- oneOf: [
83
- { enum: PREFERS },
84
- {
85
- type: "object",
86
- properties: SCHEMA_FOR_DEPS_PROPERTIES,
87
- additionalProperties: false,
88
- },
89
- ],
90
- },
91
- },
92
- minProperties: 1,
93
- additionalProperties: false,
94
- } }),
95
- additionalProperties: false,
96
- },
97
- ],
98
- },
99
- ],
100
- messages: {},
101
- type: "suggestion",
102
- },
103
- create(context) {
104
- const sourceCode = (0, eslint_compat_utils_1.getSourceCode)(context);
105
- if (!sourceCode.parserServices.isJSON) {
106
- return {};
107
- }
108
- const getOption = parseOption(context.options[0]);
109
- function defineVisitor(visitName) {
110
- return (node) => {
111
- const ver = (0, jsonc_eslint_parser_1.getStaticJSONValue)(node.value);
112
- if (typeof ver !== "string" || ver == null) {
113
- return;
114
- }
115
- const name = String((0, ast_utils_1.getKeyFromJSONProperty)(node));
116
- const option = getOption(name)[visitName];
117
- const semver = (0, semver_1.getSemverRange)(ver);
118
- if (semver == null) {
119
- return;
120
- }
121
- if (option === "always") {
122
- if (isAbsoluteVersion(semver)) {
123
- return;
124
- }
125
- context.report({
126
- loc: node.value.loc,
127
- message: "Use the absolute version instead.",
128
- });
129
- }
130
- else if (option === "never") {
131
- if (!isAbsoluteVersion(semver)) {
132
- return;
133
- }
134
- context.report({
135
- loc: node.value.loc,
136
- message: "Do not use the absolute version.",
137
- });
138
- }
139
- };
140
- }
141
- return (0, utils_1.defineJsonVisitor)({
142
- dependencies: defineVisitor("dependencies"),
143
- peerDependencies: defineVisitor("peerDependencies"),
144
- optionalDependencies: defineVisitor("optionalDependencies"),
145
- devDependencies: defineVisitor("devDependencies"),
146
- });
147
- },
148
- });
149
- function isAbsoluteVersion(semver) {
150
- for (const comparators of semver.set) {
151
- for (const comparator of comparators) {
152
- if ((0, semver_1.isAnyComparator)(comparator)) {
153
- return false;
154
- }
155
- if (comparator.operator !== "=" && comparator.operator !== "") {
156
- return false;
157
- }
158
- }
159
- }
160
- return true;
161
- }
@@ -1,2 +0,0 @@
1
- declare const _default: import("../types").RuleModule;
2
- export default _default;