@graphql-eslint/eslint-plugin 4.0.0-alpha.13 → 4.0.0-alpha.15
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.
- package/cjs/graphql-config.d.cts +6 -1
- package/cjs/graphql-config.js +9 -2
- package/cjs/meta.js +1 -1
- package/cjs/parser.js +1 -4
- package/cjs/processor.js +4 -0
- package/cjs/rules/no-deprecated/index.js +7 -4
- package/cjs/rules/no-unreachable-types/index.js +3 -4
- package/esm/graphql-config.d.ts +6 -1
- package/esm/graphql-config.js +8 -1
- package/esm/meta.js +1 -1
- package/esm/parser.js +3 -6
- package/esm/processor.js +4 -0
- package/esm/rules/no-deprecated/index.js +7 -4
- package/esm/rules/no-unreachable-types/index.js +3 -4
- package/index.browser.js +10 -8
- package/package.json +1 -1
package/cjs/graphql-config.d.cts
CHANGED
@@ -8,7 +8,12 @@ import './estree-converter/types.cjs';
|
|
8
8
|
import './siblings.cjs';
|
9
9
|
import '@graphql-tools/utils';
|
10
10
|
|
11
|
+
/**
|
12
|
+
* Filepath can be a virtual file, so we need to find the first existing path
|
13
|
+
*
|
14
|
+
*/
|
15
|
+
declare function getFirstExistingPath(filePath: string): string;
|
11
16
|
declare function loadOnDiskGraphQLConfig(filePath: string): GraphQLConfig;
|
12
17
|
declare function loadGraphQLConfig({ graphQLConfig: config, filePath, }: ParserOptions): GraphQLConfig;
|
13
18
|
|
14
|
-
export { loadGraphQLConfig, loadOnDiskGraphQLConfig };
|
19
|
+
export { getFirstExistingPath, loadGraphQLConfig, loadOnDiskGraphQLConfig };
|
package/cjs/graphql-config.js
CHANGED
@@ -1,14 +1,20 @@
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./chunk-UIAXBAMD.js');
|
2
|
+
var _nodefs = require('node:fs'); var _nodefs2 = _interopRequireDefault(_nodefs);
|
2
3
|
var _nodepath = require('node:path'); var _nodepath2 = _interopRequireDefault(_nodepath);
|
3
4
|
var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug);
|
4
5
|
var _graphqlconfig = require('graphql-config');
|
5
6
|
var _codefileloader = require('@graphql-tools/code-file-loader');
|
6
7
|
const debug = _debug2.default.call(void 0, "graphql-eslint:graphql-config");
|
7
8
|
let graphQLConfig;
|
9
|
+
function getFirstExistingPath(filePath) {
|
10
|
+
for (; !_nodefs2.default.existsSync(filePath); )
|
11
|
+
filePath = _nodepath2.default.dirname(filePath);
|
12
|
+
return filePath;
|
13
|
+
}
|
8
14
|
function loadOnDiskGraphQLConfig(filePath) {
|
9
15
|
return _graphqlconfig.loadConfigSync.call(void 0, {
|
10
16
|
// load config relative to the file being linted
|
11
|
-
rootDir: _nodepath2.default.dirname(filePath),
|
17
|
+
rootDir: getFirstExistingPath(_nodepath2.default.dirname(filePath)),
|
12
18
|
throwOnMissing: !1,
|
13
19
|
extensions: [codeFileLoaderExtension]
|
14
20
|
});
|
@@ -36,4 +42,5 @@ const codeFileLoaderExtension = (api) => {
|
|
36
42
|
|
37
43
|
|
38
44
|
|
39
|
-
|
45
|
+
|
46
|
+
exports.getFirstExistingPath = getFirstExistingPath; exports.loadGraphQLConfig = loadGraphQLConfig; exports.loadOnDiskGraphQLConfig = loadOnDiskGraphQLConfig;
|
package/cjs/meta.js
CHANGED
package/cjs/parser.js
CHANGED
@@ -32,10 +32,7 @@ function parseForESLint(code, options) {
|
|
32
32
|
try {
|
33
33
|
const { filePath } = options, { document } = _utils.parseGraphQLSDL.call(void 0, filePath, code, { noLocation: !1 });
|
34
34
|
let project, schema, documents;
|
35
|
-
|
36
|
-
const gqlConfig = _graphqlconfigjs.loadGraphQLConfig.call(void 0, options), realFilepath = filePath.replace(_utilsjs.VIRTUAL_DOCUMENT_REGEX, "");
|
37
|
-
project = gqlConfig.getProjectForFile(realFilepath), documents = _documentsjs.getDocuments.call(void 0, project);
|
38
|
-
}
|
35
|
+
project = _graphqlconfigjs.loadGraphQLConfig.call(void 0, options).getProjectForFile(_graphqlconfigjs.getFirstExistingPath.call(void 0, filePath)), documents = _documentsjs.getDocuments.call(void 0, project);
|
39
36
|
try {
|
40
37
|
schema = _schemajs.getSchema.call(void 0, project);
|
41
38
|
} catch (error) {
|
package/cjs/processor.js
CHANGED
@@ -16,6 +16,10 @@ const RELEVANT_KEYWORDS = ["gql", "graphql", "GraphQL"], processor = exports.pro
|
|
16
16
|
},
|
17
17
|
supportsAutofix: !0,
|
18
18
|
preprocess(code, filePath) {
|
19
|
+
if (process.env.ESLINT_USE_FLAT_CONFIG !== "false" && filePath.endsWith(".vue"))
|
20
|
+
throw new Error(
|
21
|
+
"Processing of `.vue` files is no longer supported, follow the new official vue example for ESLint's flat config https://github.com/dimaMachina/graphql-eslint/tree/master/examples/vue-code-file"
|
22
|
+
);
|
19
23
|
onDiskConfigLoaded || (onDiskConfig = _graphqlconfigjs.loadOnDiskGraphQLConfig.call(void 0, filePath), onDiskConfigLoaded = !0);
|
20
24
|
let keywords = RELEVANT_KEYWORDS;
|
21
25
|
const pluckConfig = _optionalChain([onDiskConfig, 'optionalAccess', _ => _.getProjectForFile, 'call', _2 => _2(filePath), 'access', _3 => _3.extensions, 'access', _4 => _4.pluckConfig]);
|
@@ -120,10 +120,13 @@ const RULE_ID = "no-deprecated", rule = exports.rule = {
|
|
120
120
|
reason && report(node, reason);
|
121
121
|
},
|
122
122
|
ObjectValue(node) {
|
123
|
-
const
|
124
|
-
|
125
|
-
const
|
126
|
-
|
123
|
+
const { inputType } = node.typeInfo();
|
124
|
+
if (inputType && "getFields" in inputType) {
|
125
|
+
const fields = inputType.getFields();
|
126
|
+
for (const field of node.fields) {
|
127
|
+
const fieldName = field.name.value, reason = fields[fieldName].deprecationReason;
|
128
|
+
reason && report(field, reason);
|
129
|
+
}
|
127
130
|
}
|
128
131
|
}
|
129
132
|
};
|
@@ -4,6 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
+
|
7
8
|
var _graphql = require('graphql');
|
8
9
|
var _lodashlowercase = require('lodash.lowercase'); var _lodashlowercase2 = _interopRequireDefault(_lodashlowercase);
|
9
10
|
var _cachejs = require('../../cache.js');
|
@@ -67,10 +68,8 @@ function getReachableTypes(schema) {
|
|
67
68
|
for (const node of schema.getDirectives())
|
68
69
|
if (node.locations.some((location) => RequestDirectiveLocations.has(location))) {
|
69
70
|
reachableTypes.add(node.name);
|
70
|
-
for (const arg of node.args)
|
71
|
-
|
72
|
-
argTypeName && reachableTypes.add(argTypeName);
|
73
|
-
}
|
71
|
+
for (const arg of node.args)
|
72
|
+
reachableTypes.add(_graphql.getNamedType.call(void 0, arg.type).name);
|
74
73
|
}
|
75
74
|
return reachableTypesCache.set(schema, reachableTypes), reachableTypes;
|
76
75
|
}
|
package/esm/graphql-config.d.ts
CHANGED
@@ -8,7 +8,12 @@ import './estree-converter/types.js';
|
|
8
8
|
import './siblings.js';
|
9
9
|
import '@graphql-tools/utils';
|
10
10
|
|
11
|
+
/**
|
12
|
+
* Filepath can be a virtual file, so we need to find the first existing path
|
13
|
+
*
|
14
|
+
*/
|
15
|
+
declare function getFirstExistingPath(filePath: string): string;
|
11
16
|
declare function loadOnDiskGraphQLConfig(filePath: string): GraphQLConfig;
|
12
17
|
declare function loadGraphQLConfig({ graphQLConfig: config, filePath, }: ParserOptions): GraphQLConfig;
|
13
18
|
|
14
|
-
export { loadGraphQLConfig, loadOnDiskGraphQLConfig };
|
19
|
+
export { getFirstExistingPath, loadGraphQLConfig, loadOnDiskGraphQLConfig };
|
package/esm/graphql-config.js
CHANGED
@@ -1,14 +1,20 @@
|
|
1
1
|
import "./chunk-UIAXBAMD.js";
|
2
|
+
import fs from "node:fs";
|
2
3
|
import path from "node:path";
|
3
4
|
import debugFactory from "debug";
|
4
5
|
import { GraphQLConfig, loadConfigSync } from "graphql-config";
|
5
6
|
import { CodeFileLoader } from "@graphql-tools/code-file-loader";
|
6
7
|
const debug = debugFactory("graphql-eslint:graphql-config");
|
7
8
|
let graphQLConfig;
|
9
|
+
function getFirstExistingPath(filePath) {
|
10
|
+
for (; !fs.existsSync(filePath); )
|
11
|
+
filePath = path.dirname(filePath);
|
12
|
+
return filePath;
|
13
|
+
}
|
8
14
|
function loadOnDiskGraphQLConfig(filePath) {
|
9
15
|
return loadConfigSync({
|
10
16
|
// load config relative to the file being linted
|
11
|
-
rootDir: path.dirname(filePath),
|
17
|
+
rootDir: getFirstExistingPath(path.dirname(filePath)),
|
12
18
|
throwOnMissing: !1,
|
13
19
|
extensions: [codeFileLoaderExtension]
|
14
20
|
});
|
@@ -34,6 +40,7 @@ const codeFileLoaderExtension = (api) => {
|
|
34
40
|
return schema.register(new CodeFileLoader()), documents.register(new CodeFileLoader()), { name: "code-file-loaders" };
|
35
41
|
};
|
36
42
|
export {
|
43
|
+
getFirstExistingPath,
|
37
44
|
loadGraphQLConfig,
|
38
45
|
loadOnDiskGraphQLConfig
|
39
46
|
};
|
package/esm/meta.js
CHANGED
package/esm/parser.js
CHANGED
@@ -4,11 +4,11 @@ import { GraphQLError } from "graphql";
|
|
4
4
|
import { parseGraphQLSDL } from "@graphql-tools/utils";
|
5
5
|
import { getDocuments } from "./documents.js";
|
6
6
|
import { convertToESTree, extractComments, extractTokens } from "./estree-converter/index.js";
|
7
|
-
import { loadGraphQLConfig } from "./graphql-config.js";
|
7
|
+
import { getFirstExistingPath, loadGraphQLConfig } from "./graphql-config.js";
|
8
8
|
import { version } from "./meta.js";
|
9
9
|
import { getSchema } from "./schema.js";
|
10
10
|
import { getSiblings } from "./siblings.js";
|
11
|
-
import { CWD
|
11
|
+
import { CWD } from "./utils.js";
|
12
12
|
const debug = debugFactory("graphql-eslint:parser");
|
13
13
|
debug("cwd %o", CWD);
|
14
14
|
const LEGACY_PARSER_OPTIONS_KEYS = [
|
@@ -32,10 +32,7 @@ function parseForESLint(code, options) {
|
|
32
32
|
try {
|
33
33
|
const { filePath } = options, { document } = parseGraphQLSDL(filePath, code, { noLocation: !1 });
|
34
34
|
let project, schema, documents;
|
35
|
-
|
36
|
-
const gqlConfig = loadGraphQLConfig(options), realFilepath = filePath.replace(VIRTUAL_DOCUMENT_REGEX, "");
|
37
|
-
project = gqlConfig.getProjectForFile(realFilepath), documents = getDocuments(project);
|
38
|
-
}
|
35
|
+
project = loadGraphQLConfig(options).getProjectForFile(getFirstExistingPath(filePath)), documents = getDocuments(project);
|
39
36
|
try {
|
40
37
|
schema = getSchema(project);
|
41
38
|
} catch (error) {
|
package/esm/processor.js
CHANGED
@@ -16,6 +16,10 @@ const RELEVANT_KEYWORDS = ["gql", "graphql", "GraphQL"], processor = {
|
|
16
16
|
},
|
17
17
|
supportsAutofix: !0,
|
18
18
|
preprocess(code, filePath) {
|
19
|
+
if (process.env.ESLINT_USE_FLAT_CONFIG !== "false" && filePath.endsWith(".vue"))
|
20
|
+
throw new Error(
|
21
|
+
"Processing of `.vue` files is no longer supported, follow the new official vue example for ESLint's flat config https://github.com/dimaMachina/graphql-eslint/tree/master/examples/vue-code-file"
|
22
|
+
);
|
19
23
|
onDiskConfigLoaded || (onDiskConfig = loadOnDiskGraphQLConfig(filePath), onDiskConfigLoaded = !0);
|
20
24
|
let keywords = RELEVANT_KEYWORDS;
|
21
25
|
const pluckConfig = onDiskConfig?.getProjectForFile(filePath).extensions.pluckConfig;
|
@@ -120,10 +120,13 @@ const RULE_ID = "no-deprecated", rule = {
|
|
120
120
|
reason && report(node, reason);
|
121
121
|
},
|
122
122
|
ObjectValue(node) {
|
123
|
-
const
|
124
|
-
|
125
|
-
const
|
126
|
-
|
123
|
+
const { inputType } = node.typeInfo();
|
124
|
+
if (inputType && "getFields" in inputType) {
|
125
|
+
const fields = inputType.getFields();
|
126
|
+
for (const field of node.fields) {
|
127
|
+
const fieldName = field.name.value, reason = fields[fieldName].deprecationReason;
|
128
|
+
reason && report(field, reason);
|
129
|
+
}
|
127
130
|
}
|
128
131
|
}
|
129
132
|
};
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import "../../chunk-UIAXBAMD.js";
|
2
2
|
import {
|
3
3
|
DirectiveLocation,
|
4
|
+
getNamedType,
|
4
5
|
isInterfaceType,
|
5
6
|
Kind,
|
6
7
|
visit
|
@@ -67,10 +68,8 @@ function getReachableTypes(schema) {
|
|
67
68
|
for (const node of schema.getDirectives())
|
68
69
|
if (node.locations.some((location) => RequestDirectiveLocations.has(location))) {
|
69
70
|
reachableTypes.add(node.name);
|
70
|
-
for (const arg of node.args)
|
71
|
-
|
72
|
-
argTypeName && reachableTypes.add(argTypeName);
|
73
|
-
}
|
71
|
+
for (const arg of node.args)
|
72
|
+
reachableTypes.add(getNamedType(arg.type).name);
|
74
73
|
}
|
75
74
|
return reachableTypesCache.set(schema, reachableTypes), reachableTypes;
|
76
75
|
}
|
package/index.browser.js
CHANGED
@@ -2716,10 +2716,13 @@ var RULE_ID4 = "no-deprecated", rule8 = {
|
|
2716
2716
|
reason && report(node, reason);
|
2717
2717
|
},
|
2718
2718
|
ObjectValue(node) {
|
2719
|
-
let
|
2720
|
-
|
2721
|
-
let
|
2722
|
-
|
2719
|
+
let { inputType } = node.typeInfo();
|
2720
|
+
if (inputType && "getFields" in inputType) {
|
2721
|
+
let fields = inputType.getFields();
|
2722
|
+
for (let field of node.fields) {
|
2723
|
+
let fieldName = field.name.value, reason = fields[fieldName].deprecationReason;
|
2724
|
+
reason && report(field, reason);
|
2725
|
+
}
|
2723
2726
|
}
|
2724
2727
|
}
|
2725
2728
|
};
|
@@ -3241,6 +3244,7 @@ var NO_TYPENAME_PREFIX = "NO_TYPENAME_PREFIX", rule14 = {
|
|
3241
3244
|
// src/rules/no-unreachable-types/index.ts
|
3242
3245
|
import {
|
3243
3246
|
DirectiveLocation,
|
3247
|
+
getNamedType,
|
3244
3248
|
isInterfaceType,
|
3245
3249
|
Kind as Kind12,
|
3246
3250
|
visit as visit5
|
@@ -3305,10 +3309,8 @@ function getReachableTypes(schema16) {
|
|
3305
3309
|
for (let node of schema16.getDirectives())
|
3306
3310
|
if (node.locations.some((location) => RequestDirectiveLocations.has(location))) {
|
3307
3311
|
reachableTypes.add(node.name);
|
3308
|
-
for (let arg of node.args)
|
3309
|
-
|
3310
|
-
argTypeName && reachableTypes.add(argTypeName);
|
3311
|
-
}
|
3312
|
+
for (let arg of node.args)
|
3313
|
+
reachableTypes.add(getNamedType(arg.type).name);
|
3312
3314
|
}
|
3313
3315
|
return reachableTypesCache.set(schema16, reachableTypes), reachableTypes;
|
3314
3316
|
}
|