@graphql-eslint/eslint-plugin 3.12.0-alpha-20221010010740-0fc38bd → 3.12.0

Sign up to get free protection for your applications and to get access to all the features.
package/index.js CHANGED
@@ -24,24 +24,15 @@ const codeFrame = require('@babel/code-frame');
24
24
  const debug = debugFactory('graphql-eslint:graphql-config');
25
25
  let graphQLConfig;
26
26
  function loadOnDiskGraphQLConfig(filePath) {
27
- const rootDir = path.dirname(filePath);
28
- const config = graphqlConfig.loadConfigSync({
27
+ return graphqlConfig.loadConfigSync({
29
28
  // load config relative to the file being linted
30
- rootDir,
29
+ rootDir: path.dirname(filePath),
31
30
  throwOnEmpty: false,
32
31
  throwOnMissing: false,
33
- });
34
- if (!config) {
35
- return null;
36
- }
37
- const project = config.getProjectForFile(filePath);
38
- return graphqlConfig.loadConfigSync({
39
- rootDir,
40
- extensions: [codeFileLoaderExtension(project.extensions.pluckConfig)],
32
+ extensions: [codeFileLoaderExtension],
41
33
  });
42
34
  }
43
35
  function loadGraphQLConfig(options) {
44
- var _a;
45
36
  // We don't want cache config on test environment
46
37
  // Otherwise schema and documents will be same for all tests
47
38
  if (process.env.NODE_ENV !== 'test' && graphQLConfig) {
@@ -66,37 +57,40 @@ function loadGraphQLConfig(options) {
66
57
  new graphqlConfig.GraphQLConfig({
67
58
  config: configOptions,
68
59
  filepath: 'virtual-config',
69
- }, [codeFileLoaderExtension((_a = options.extensions) === null || _a === void 0 ? void 0 : _a.pluckConfig)]);
60
+ }, [codeFileLoaderExtension]);
70
61
  return graphQLConfig;
71
62
  }
72
- const codeFileLoaderExtension = (pluckConfig) => api => {
63
+ const codeFileLoaderExtension = api => {
73
64
  const { schema, documents } = api.loaders;
74
- schema.register(new codeFileLoader.CodeFileLoader({ pluckConfig }));
75
- documents.register(new codeFileLoader.CodeFileLoader({ pluckConfig }));
65
+ schema.register(new codeFileLoader.CodeFileLoader());
66
+ documents.register(new codeFileLoader.CodeFileLoader());
76
67
  return { name: 'graphql-eslint-loaders' };
77
68
  };
78
69
 
79
70
  const blocksMap = new Map();
80
71
  let onDiskConfig;
81
72
  let onDiskConfigLoaded = false;
73
+ const RELEVANT_KEYWORDS = ['gql', 'graphql', 'GraphQL'];
82
74
  const processor = {
83
75
  supportsAutofix: true,
84
76
  preprocess(code, filePath) {
85
- var _a;
86
77
  if (!onDiskConfigLoaded) {
87
78
  onDiskConfig = loadOnDiskGraphQLConfig(filePath);
88
79
  onDiskConfigLoaded = true;
89
80
  }
90
- const pluckConfig = (_a = onDiskConfig === null || onDiskConfig === void 0 ? void 0 : onDiskConfig.getProjectForFile(filePath).extensions) === null || _a === void 0 ? void 0 : _a.pluckConfig;
91
- const { modules = [], globalGqlIdentifierName = ['gql', 'graphql'], gqlMagicComment = 'GraphQL', } = pluckConfig || {};
92
- const RELEVANT_KEYWORDS = [
93
- ...new Set([
94
- ...modules.map(({ identifier }) => identifier),
95
- ...utils.asArray(globalGqlIdentifierName),
96
- gqlMagicComment,
97
- ].filter(Boolean)),
98
- ];
99
- if (RELEVANT_KEYWORDS.every(keyword => !code.includes(keyword))) {
81
+ let keywords = RELEVANT_KEYWORDS;
82
+ const pluckConfig = onDiskConfig === null || onDiskConfig === void 0 ? void 0 : onDiskConfig.getProjectForFile(filePath).extensions.pluckConfig;
83
+ if (pluckConfig) {
84
+ const { modules = [], globalGqlIdentifierName = ['gql', 'graphql'], gqlMagicComment = 'GraphQL', } = pluckConfig;
85
+ keywords = [
86
+ ...new Set([
87
+ ...modules.map(({ identifier }) => identifier),
88
+ ...utils.asArray(globalGqlIdentifierName),
89
+ gqlMagicComment,
90
+ ].filter(Boolean)),
91
+ ];
92
+ }
93
+ if (keywords.every(keyword => !code.includes(keyword))) {
100
94
  return [code];
101
95
  }
102
96
  try {
@@ -115,7 +109,7 @@ const processor = {
115
109
  blocksMap.set(filePath, blocks);
116
110
  return [...blocks, code /* source code must be provided and be last */];
117
111
  }
118
- catch (_b) {
112
+ catch (_a) {
119
113
  // in case of parsing error return code as is
120
114
  return [code];
121
115
  }
@@ -4283,8 +4277,8 @@ const rules = {
4283
4277
 
4284
4278
  const schemaCache = new Map();
4285
4279
  const debug$1 = debugFactory('graphql-eslint:schema');
4286
- function getSchema(projectForFile, options = {}) {
4287
- const schemaKey = utils.asArray(projectForFile.schema).sort().join(',');
4280
+ function getSchema(project, options = {}) {
4281
+ const schemaKey = utils.asArray(project.schema).sort().join(',');
4288
4282
  if (!schemaKey) {
4289
4283
  return null;
4290
4284
  }
@@ -4293,11 +4287,14 @@ function getSchema(projectForFile, options = {}) {
4293
4287
  }
4294
4288
  let schema;
4295
4289
  try {
4296
- debug$1('Loading schema from %o', projectForFile.schema);
4297
- schema = projectForFile.loadSchemaSync(projectForFile.schema, 'GraphQLSchema', options.schemaOptions);
4290
+ debug$1('Loading schema from %o', project.schema);
4291
+ schema = project.loadSchemaSync(project.schema, 'GraphQLSchema', {
4292
+ ...options.schemaOptions,
4293
+ pluckConfig: project.extensions.pluckConfig,
4294
+ });
4298
4295
  if (debug$1.enabled) {
4299
4296
  debug$1('Schema loaded: %o', schema instanceof graphql.GraphQLSchema);
4300
- const schemaPaths = fastGlob.sync(projectForFile.schema, {
4297
+ const schemaPaths = fastGlob.sync(project.schema, {
4301
4298
  absolute: true,
4302
4299
  });
4303
4300
  debug$1('Schema pointers %O', schemaPaths);
@@ -4330,20 +4327,21 @@ const handleVirtualPath = (documents) => {
4330
4327
  };
4331
4328
  const operationsCache = new Map();
4332
4329
  const siblingOperationsCache = new Map();
4333
- const getSiblings = (projectForFile) => {
4334
- const documentsKey = utils.asArray(projectForFile.documents).sort().join(',');
4330
+ const getSiblings = (project) => {
4331
+ const documentsKey = utils.asArray(project.documents).sort().join(',');
4335
4332
  if (!documentsKey) {
4336
4333
  return [];
4337
4334
  }
4338
4335
  let siblings = operationsCache.get(documentsKey);
4339
4336
  if (!siblings) {
4340
- debug$2('Loading operations from %o', projectForFile.documents);
4341
- const documents = projectForFile.loadDocumentsSync(projectForFile.documents, {
4337
+ debug$2('Loading operations from %o', project.documents);
4338
+ const documents = project.loadDocumentsSync(project.documents, {
4342
4339
  skipGraphQLImport: true,
4340
+ pluckConfig: project.extensions.pluckConfig,
4343
4341
  });
4344
4342
  if (debug$2.enabled) {
4345
4343
  debug$2('Loaded %d operations', documents.length);
4346
- const operationsPaths = fastGlob.sync(projectForFile.documents, {
4344
+ const operationsPaths = fastGlob.sync(project.documents, {
4347
4345
  absolute: true,
4348
4346
  });
4349
4347
  debug$2('Operations pointers %O', operationsPaths);
@@ -4353,8 +4351,8 @@ const getSiblings = (projectForFile) => {
4353
4351
  }
4354
4352
  return siblings;
4355
4353
  };
4356
- function getSiblingOperations(projectForFile) {
4357
- const siblings = getSiblings(projectForFile);
4354
+ function getSiblingOperations(project) {
4355
+ const siblings = getSiblings(project);
4358
4356
  if (siblings.length === 0) {
4359
4357
  let printed = false;
4360
4358
  const noopWarn = () => {
package/index.mjs CHANGED
@@ -2,7 +2,7 @@ import { gqlPluckFromCodeStringSync } from '@graphql-tools/graphql-tag-pluck';
2
2
  import { asArray, getDocumentNodeFromSchema, parseGraphQLSDL } from '@graphql-tools/utils';
3
3
  import { dirname, extname, basename, relative, resolve } from 'path';
4
4
  import debugFactory from 'debug';
5
- import { GraphQLConfig, loadConfigSync } from 'graphql-config';
5
+ import { loadConfigSync, GraphQLConfig } from 'graphql-config';
6
6
  import { CodeFileLoader } from '@graphql-tools/code-file-loader';
7
7
  import { Kind, visit, validate, TokenKind, isScalarType, DirectiveLocation, isInterfaceType, TypeInfo, visitWithTypeInfo, isObjectType as isObjectType$1, Source, isNonNullType, isListType, GraphQLObjectType, GraphQLInterfaceType, GraphQLSchema, GraphQLError } from 'graphql';
8
8
  import { validateSDL } from 'graphql/validation/validate';
@@ -18,24 +18,15 @@ import { codeFrameColumns } from '@babel/code-frame';
18
18
  const debug = debugFactory('graphql-eslint:graphql-config');
19
19
  let graphQLConfig;
20
20
  function loadOnDiskGraphQLConfig(filePath) {
21
- const rootDir = dirname(filePath);
22
- const config = loadConfigSync({
21
+ return loadConfigSync({
23
22
  // load config relative to the file being linted
24
- rootDir,
23
+ rootDir: dirname(filePath),
25
24
  throwOnEmpty: false,
26
25
  throwOnMissing: false,
27
- });
28
- if (!config) {
29
- return null;
30
- }
31
- const project = config.getProjectForFile(filePath);
32
- return loadConfigSync({
33
- rootDir,
34
- extensions: [codeFileLoaderExtension(project.extensions.pluckConfig)],
26
+ extensions: [codeFileLoaderExtension],
35
27
  });
36
28
  }
37
29
  function loadGraphQLConfig(options) {
38
- var _a;
39
30
  // We don't want cache config on test environment
40
31
  // Otherwise schema and documents will be same for all tests
41
32
  if (process.env.NODE_ENV !== 'test' && graphQLConfig) {
@@ -60,37 +51,40 @@ function loadGraphQLConfig(options) {
60
51
  new GraphQLConfig({
61
52
  config: configOptions,
62
53
  filepath: 'virtual-config',
63
- }, [codeFileLoaderExtension((_a = options.extensions) === null || _a === void 0 ? void 0 : _a.pluckConfig)]);
54
+ }, [codeFileLoaderExtension]);
64
55
  return graphQLConfig;
65
56
  }
66
- const codeFileLoaderExtension = (pluckConfig) => api => {
57
+ const codeFileLoaderExtension = api => {
67
58
  const { schema, documents } = api.loaders;
68
- schema.register(new CodeFileLoader({ pluckConfig }));
69
- documents.register(new CodeFileLoader({ pluckConfig }));
59
+ schema.register(new CodeFileLoader());
60
+ documents.register(new CodeFileLoader());
70
61
  return { name: 'graphql-eslint-loaders' };
71
62
  };
72
63
 
73
64
  const blocksMap = new Map();
74
65
  let onDiskConfig;
75
66
  let onDiskConfigLoaded = false;
67
+ const RELEVANT_KEYWORDS = ['gql', 'graphql', 'GraphQL'];
76
68
  const processor = {
77
69
  supportsAutofix: true,
78
70
  preprocess(code, filePath) {
79
- var _a;
80
71
  if (!onDiskConfigLoaded) {
81
72
  onDiskConfig = loadOnDiskGraphQLConfig(filePath);
82
73
  onDiskConfigLoaded = true;
83
74
  }
84
- const pluckConfig = (_a = onDiskConfig === null || onDiskConfig === void 0 ? void 0 : onDiskConfig.getProjectForFile(filePath).extensions) === null || _a === void 0 ? void 0 : _a.pluckConfig;
85
- const { modules = [], globalGqlIdentifierName = ['gql', 'graphql'], gqlMagicComment = 'GraphQL', } = pluckConfig || {};
86
- const RELEVANT_KEYWORDS = [
87
- ...new Set([
88
- ...modules.map(({ identifier }) => identifier),
89
- ...asArray(globalGqlIdentifierName),
90
- gqlMagicComment,
91
- ].filter(Boolean)),
92
- ];
93
- if (RELEVANT_KEYWORDS.every(keyword => !code.includes(keyword))) {
75
+ let keywords = RELEVANT_KEYWORDS;
76
+ const pluckConfig = onDiskConfig === null || onDiskConfig === void 0 ? void 0 : onDiskConfig.getProjectForFile(filePath).extensions.pluckConfig;
77
+ if (pluckConfig) {
78
+ const { modules = [], globalGqlIdentifierName = ['gql', 'graphql'], gqlMagicComment = 'GraphQL', } = pluckConfig;
79
+ keywords = [
80
+ ...new Set([
81
+ ...modules.map(({ identifier }) => identifier),
82
+ ...asArray(globalGqlIdentifierName),
83
+ gqlMagicComment,
84
+ ].filter(Boolean)),
85
+ ];
86
+ }
87
+ if (keywords.every(keyword => !code.includes(keyword))) {
94
88
  return [code];
95
89
  }
96
90
  try {
@@ -109,7 +103,7 @@ const processor = {
109
103
  blocksMap.set(filePath, blocks);
110
104
  return [...blocks, code /* source code must be provided and be last */];
111
105
  }
112
- catch (_b) {
106
+ catch (_a) {
113
107
  // in case of parsing error return code as is
114
108
  return [code];
115
109
  }
@@ -4277,8 +4271,8 @@ const rules = {
4277
4271
 
4278
4272
  const schemaCache = new Map();
4279
4273
  const debug$1 = debugFactory('graphql-eslint:schema');
4280
- function getSchema(projectForFile, options = {}) {
4281
- const schemaKey = asArray(projectForFile.schema).sort().join(',');
4274
+ function getSchema(project, options = {}) {
4275
+ const schemaKey = asArray(project.schema).sort().join(',');
4282
4276
  if (!schemaKey) {
4283
4277
  return null;
4284
4278
  }
@@ -4287,11 +4281,14 @@ function getSchema(projectForFile, options = {}) {
4287
4281
  }
4288
4282
  let schema;
4289
4283
  try {
4290
- debug$1('Loading schema from %o', projectForFile.schema);
4291
- schema = projectForFile.loadSchemaSync(projectForFile.schema, 'GraphQLSchema', options.schemaOptions);
4284
+ debug$1('Loading schema from %o', project.schema);
4285
+ schema = project.loadSchemaSync(project.schema, 'GraphQLSchema', {
4286
+ ...options.schemaOptions,
4287
+ pluckConfig: project.extensions.pluckConfig,
4288
+ });
4292
4289
  if (debug$1.enabled) {
4293
4290
  debug$1('Schema loaded: %o', schema instanceof GraphQLSchema);
4294
- const schemaPaths = fastGlob.sync(projectForFile.schema, {
4291
+ const schemaPaths = fastGlob.sync(project.schema, {
4295
4292
  absolute: true,
4296
4293
  });
4297
4294
  debug$1('Schema pointers %O', schemaPaths);
@@ -4324,20 +4321,21 @@ const handleVirtualPath = (documents) => {
4324
4321
  };
4325
4322
  const operationsCache = new Map();
4326
4323
  const siblingOperationsCache = new Map();
4327
- const getSiblings = (projectForFile) => {
4328
- const documentsKey = asArray(projectForFile.documents).sort().join(',');
4324
+ const getSiblings = (project) => {
4325
+ const documentsKey = asArray(project.documents).sort().join(',');
4329
4326
  if (!documentsKey) {
4330
4327
  return [];
4331
4328
  }
4332
4329
  let siblings = operationsCache.get(documentsKey);
4333
4330
  if (!siblings) {
4334
- debug$2('Loading operations from %o', projectForFile.documents);
4335
- const documents = projectForFile.loadDocumentsSync(projectForFile.documents, {
4331
+ debug$2('Loading operations from %o', project.documents);
4332
+ const documents = project.loadDocumentsSync(project.documents, {
4336
4333
  skipGraphQLImport: true,
4334
+ pluckConfig: project.extensions.pluckConfig,
4337
4335
  });
4338
4336
  if (debug$2.enabled) {
4339
4337
  debug$2('Loaded %d operations', documents.length);
4340
- const operationsPaths = fastGlob.sync(projectForFile.documents, {
4338
+ const operationsPaths = fastGlob.sync(project.documents, {
4341
4339
  absolute: true,
4342
4340
  });
4343
4341
  debug$2('Operations pointers %O', operationsPaths);
@@ -4347,8 +4345,8 @@ const getSiblings = (projectForFile) => {
4347
4345
  }
4348
4346
  return siblings;
4349
4347
  };
4350
- function getSiblingOperations(projectForFile) {
4351
- const siblings = getSiblings(projectForFile);
4348
+ function getSiblingOperations(project) {
4349
+ const siblings = getSiblings(project);
4352
4350
  if (siblings.length === 0) {
4353
4351
  let printed = false;
4354
4352
  const noopWarn = () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphql-eslint/eslint-plugin",
3
- "version": "3.12.0-alpha-20221010010740-0fc38bd",
3
+ "version": "3.12.0",
4
4
  "description": "GraphQL plugin for ESLint",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
package/schema.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { GraphQLProjectConfig } from 'graphql-config';
2
2
  import type { ParserOptions, Schema } from './types';
3
- export declare function getSchema(projectForFile: GraphQLProjectConfig, options?: Omit<ParserOptions, 'filePath'>): Schema;
3
+ export declare function getSchema(project: GraphQLProjectConfig, options?: Omit<ParserOptions, 'filePath'>): Schema;
@@ -18,4 +18,4 @@ export declare type SiblingOperations = {
18
18
  getOperations(): OperationSource[];
19
19
  getOperationByType(operationType: OperationTypeNode): OperationSource[];
20
20
  };
21
- export declare function getSiblingOperations(projectForFile: GraphQLProjectConfig): SiblingOperations;
21
+ export declare function getSiblingOperations(project: GraphQLProjectConfig): SiblingOperations;