Skip to content

Commit 6b92cab

Browse files
committed
refactor(index.js): replace glob package with fast-glob package for faster and more efficient file globbing
build(package.json): add fast-glob package as a dependency to the project test(purifier.spec.ts): update mock imports from glob to fast-glob for consistency and efficiency refactor(index.ts): replace glob package with fast-glob package for faster and more efficient file globbing
1 parent 2511ee2 commit 6b92cab

5 files changed

Lines changed: 73 additions & 15 deletions

File tree

dist/index.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ exports.GraphQLQueryPurifier = void 0;
77
const fs_1 = __importDefault(require("fs"));
88
const graphql_1 = require("graphql");
99
const path_1 = __importDefault(require("path"));
10-
// @ts-ignore
11-
const glob_1 = __importDefault(require("glob"));
10+
const fast_glob_1 = __importDefault(require("fast-glob"));
1211
const merge_1 = require("./merge");
1312
const get_allowed_query_1 = require("./get-allowed-query");
1413
class GraphQLQueryPurifier {
@@ -84,7 +83,7 @@ class GraphQLQueryPurifier {
8483
* @private
8584
*/
8685
loadQueries() {
87-
const files = glob_1.default.sync(`${this.gqlPath}/**/*.gql`.replace(/\\/g, '/'));
86+
const files = fast_glob_1.default.sync(`${this.gqlPath}/**/*.gql`, { absolute: true });
8887
if (!files || files.length === 0) {
8988
console.warn(`No GraphQL files found in path: ${this.gqlPath}`);
9089
return;

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,8 @@
3838
"terser": "^5.26.0",
3939
"ts-jest": "^29.1.1",
4040
"typescript": "^5.3.3"
41+
},
42+
"dependencies": {
43+
"fast-glob": "^3.3.3"
4144
}
4245
}

src/__tests__/purifier.spec.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { GraphQLQueryPurifier } from '..';
22
import { Request, Response, NextFunction } from 'express';
33
import fs from 'fs';
4-
import glob from 'glob';
4+
import fg from 'fast-glob';
55

66
jest.mock('fs');
7-
jest.mock('glob');
7+
jest.mock('fast-glob');
88

99
describe('GraphQLQueryPurifier', () => {
1010
let purifier: GraphQLQueryPurifier;
@@ -33,7 +33,7 @@ describe('GraphQLQueryPurifier', () => {
3333
}
3434
`);
3535

36-
(glob.sync as jest.Mock).mockReturnValue(['./graphql/queries/test.gql']);
36+
(fg.sync as jest.Mock).mockReturnValue(['./graphql/queries/test.gql']);
3737
});
3838

3939
afterEach(() => {
@@ -100,7 +100,7 @@ describe('GraphQLQueryPurifier', () => {
100100
});
101101

102102
test('should throw error for duplicate operation names when loading queries', () => {
103-
(glob.sync as jest.Mock).mockReturnValue([
103+
(fg.sync as jest.Mock).mockReturnValue([
104104
'./graphql/queries/findMyJobs1.gql',
105105
'./graphql/queries/findMyJobs2.gql',
106106
]);
@@ -134,8 +134,7 @@ describe('GraphQLQueryPurifier', () => {
134134
`);
135135

136136
expect(() => {
137-
// @ts-ignore
138-
purifier.loadQueries();
137+
purifier['loadQueries']();
139138
}).toThrowError('Duplicate operation name detected: FindMyJobs.');
140139
});
141140
});

src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import { NextFunction, Request, Response } from 'express';
22
import fs from 'fs';
33
import { FieldNode, OperationDefinitionNode, parse } from 'graphql';
44
import path from 'path';
5-
// @ts-ignore
6-
import glob from 'glob';
5+
import fg from 'fast-glob';
76
import { mergeQueries } from './merge';
87
import { getAllowedQueryForRequest } from './get-allowed-query';
98

@@ -82,7 +81,7 @@ export class GraphQLQueryPurifier {
8281
* @private
8382
*/
8483
private loadQueries() {
85-
const files = glob.sync(`${this.gqlPath}/**/*.gql`.replace(/\\/g, '/'));
84+
const files = fg.sync(`${this.gqlPath}/**/*.gql`, { absolute: true });
8685
if (!files || files.length === 0) {
8786
console.warn(`No GraphQL files found in path: ${this.gqlPath}`);
8887
return;

yarn.lock

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -808,14 +808,14 @@ __metadata:
808808
languageName: node
809809
linkType: hard
810810

811-
"@nodelib/fs.stat@npm:2.0.5":
811+
"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
812812
version: 2.0.5
813813
resolution: "@nodelib/fs.stat@npm:2.0.5"
814814
checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0
815815
languageName: node
816816
linkType: hard
817817

818-
"@nodelib/fs.walk@npm:^1.2.8":
818+
"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8":
819819
version: 1.2.8
820820
resolution: "@nodelib/fs.walk@npm:1.2.8"
821821
dependencies:
@@ -1376,6 +1376,15 @@ __metadata:
13761376
languageName: node
13771377
linkType: hard
13781378

1379+
"braces@npm:^3.0.3":
1380+
version: 3.0.3
1381+
resolution: "braces@npm:3.0.3"
1382+
dependencies:
1383+
fill-range: ^7.1.1
1384+
checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69
1385+
languageName: node
1386+
linkType: hard
1387+
13791388
"browserslist@npm:^4.21.9":
13801389
version: 4.22.1
13811390
resolution: "browserslist@npm:4.22.1"
@@ -1950,6 +1959,19 @@ __metadata:
19501959
languageName: node
19511960
linkType: hard
19521961

1962+
"fast-glob@npm:^3.3.3":
1963+
version: 3.3.3
1964+
resolution: "fast-glob@npm:3.3.3"
1965+
dependencies:
1966+
"@nodelib/fs.stat": ^2.0.2
1967+
"@nodelib/fs.walk": ^1.2.3
1968+
glob-parent: ^5.1.2
1969+
merge2: ^1.3.0
1970+
micromatch: ^4.0.8
1971+
checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd
1972+
languageName: node
1973+
linkType: hard
1974+
19531975
"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
19541976
version: 2.1.0
19551977
resolution: "fast-json-stable-stringify@npm:2.1.0"
@@ -2000,6 +2022,15 @@ __metadata:
20002022
languageName: node
20012023
linkType: hard
20022024

2025+
"fill-range@npm:^7.1.1":
2026+
version: 7.1.1
2027+
resolution: "fill-range@npm:7.1.1"
2028+
dependencies:
2029+
to-regex-range: ^5.0.1
2030+
checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798
2031+
languageName: node
2032+
linkType: hard
2033+
20032034
"find-up@npm:^4.0.0, find-up@npm:^4.1.0":
20042035
version: 4.1.0
20052036
resolution: "find-up@npm:4.1.0"
@@ -2127,6 +2158,15 @@ __metadata:
21272158
languageName: node
21282159
linkType: hard
21292160

2161+
"glob-parent@npm:^5.1.2":
2162+
version: 5.1.2
2163+
resolution: "glob-parent@npm:5.1.2"
2164+
dependencies:
2165+
is-glob: ^4.0.1
2166+
checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
2167+
languageName: node
2168+
linkType: hard
2169+
21302170
"glob-parent@npm:^6.0.2":
21312171
version: 6.0.2
21322172
resolution: "glob-parent@npm:6.0.2"
@@ -2204,6 +2244,7 @@ __metadata:
22042244
"@types/jest": ^29.5.11
22052245
"@types/node": ^20.10.6
22062246
eslint: ^8.56.0
2247+
fast-glob: ^3.3.3
22072248
graphql: ^16.8.1
22082249
jest: ^29.7.0
22092250
prettier: ^3.1.1
@@ -2397,7 +2438,7 @@ __metadata:
23972438
languageName: node
23982439
linkType: hard
23992440

2400-
"is-glob@npm:^4.0.0, is-glob@npm:^4.0.3":
2441+
"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3":
24012442
version: 4.0.3
24022443
resolution: "is-glob@npm:4.0.3"
24032444
dependencies:
@@ -3189,6 +3230,13 @@ __metadata:
31893230
languageName: node
31903231
linkType: hard
31913232

3233+
"merge2@npm:^1.3.0":
3234+
version: 1.4.1
3235+
resolution: "merge2@npm:1.4.1"
3236+
checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
3237+
languageName: node
3238+
linkType: hard
3239+
31923240
"micromatch@npm:^4.0.4":
31933241
version: 4.0.5
31943242
resolution: "micromatch@npm:4.0.5"
@@ -3199,6 +3247,16 @@ __metadata:
31993247
languageName: node
32003248
linkType: hard
32013249

3250+
"micromatch@npm:^4.0.8":
3251+
version: 4.0.8
3252+
resolution: "micromatch@npm:4.0.8"
3253+
dependencies:
3254+
braces: ^3.0.3
3255+
picomatch: ^2.3.1
3256+
checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966
3257+
languageName: node
3258+
linkType: hard
3259+
32023260
"mimic-fn@npm:^2.1.0":
32033261
version: 2.1.0
32043262
resolution: "mimic-fn@npm:2.1.0"

0 commit comments

Comments
 (0)