@graphql-codegen/cli 4.0.2-alpha-20230706143738-f59fb0497 → 4.0.2-alpha-20230725231005-5bc75d7f6
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/utils/watcher.js +24 -29
- package/esm/utils/watcher.js +25 -30
- package/package.json +1 -1
package/cjs/utils/watcher.js
CHANGED
|
@@ -34,7 +34,15 @@ const createWatcher = (initialContext, onNext) => {
|
|
|
34
34
|
let watcherSubscription;
|
|
35
35
|
const runWatcher = async (abortSignal) => {
|
|
36
36
|
const watchDirectory = await findHighestCommonDirectory(allAffirmativePatterns);
|
|
37
|
-
|
|
37
|
+
// Try to load the parcel watcher, but don't fail if it's not available.
|
|
38
|
+
let parcelWatcher;
|
|
39
|
+
try {
|
|
40
|
+
parcelWatcher = await Promise.resolve().then(() => tslib_1.__importStar(require('@parcel/watcher')));
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
log(`Parcel watcher not found. To use this feature, please make sure to provide @parcel/watcher as a peer dependency.`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
38
46
|
(0, debugging_js_1.debugLog)(`[Watcher] Parcel watcher loaded...`);
|
|
39
47
|
let isShutdown = false;
|
|
40
48
|
const debouncedExec = (0, debounce_1.default)(() => {
|
|
@@ -164,60 +172,47 @@ exports.createWatcher = createWatcher;
|
|
|
164
172
|
* @param files List of relative and/or absolute file paths (or micromatch patterns)
|
|
165
173
|
*/
|
|
166
174
|
const findHighestCommonDirectory = async (files) => {
|
|
167
|
-
// Map files to a list of basePaths, where "base" is the result of mm.scan(pathOrPattern)
|
|
168
|
-
// e.g. mm.scan("/**/foo/bar").base -> "/" ; mm.scan("/foo/bar/**/fizz/*.graphql") -> /foo/bar
|
|
169
175
|
const dirPaths = files
|
|
170
176
|
.map(filePath => ((0, path_1.isAbsolute)(filePath) ? filePath : (0, path_1.resolve)(filePath)))
|
|
171
|
-
.map(patterned => micromatch_1.default.scan(patterned).base)
|
|
172
|
-
|
|
177
|
+
.map(patterned => micromatch_1.default.scan(patterned).base)
|
|
178
|
+
.map(path => (0, path_1.normalize)(path)); // Added normalization here
|
|
173
179
|
return (async (maybeValidPath) => {
|
|
174
|
-
(0,
|
|
180
|
+
const normalizedPath = (0, path_1.normalize)(maybeValidPath); // Normalize the path before checking accessibility
|
|
181
|
+
(0, debugging_js_1.debugLog)(`[Watcher] Longest common prefix of all files: ${normalizedPath}...`);
|
|
175
182
|
try {
|
|
176
|
-
await (0, file_system_js_1.access)(
|
|
177
|
-
return
|
|
183
|
+
await (0, file_system_js_1.access)(normalizedPath); // Access the normalized path
|
|
184
|
+
return normalizedPath;
|
|
178
185
|
}
|
|
179
186
|
catch {
|
|
180
|
-
log(`[Watcher] Longest common prefix (${
|
|
181
|
-
log(`[Watcher] Watching current working directory (${process.cwd()}) instead`);
|
|
182
|
-
return process.cwd();
|
|
187
|
+
log(`[Watcher] Longest common prefix (${normalizedPath}) is not accessible`);
|
|
188
|
+
log(`[Watcher] Watching current working directory (${(0, path_1.normalize)(process.cwd())}) instead`);
|
|
189
|
+
return (0, path_1.normalize)(process.cwd());
|
|
183
190
|
}
|
|
184
191
|
})(longestCommonPrefix(dirPaths.map(path => path.split(path_1.sep))).join(path_1.sep));
|
|
185
192
|
};
|
|
186
193
|
/**
|
|
187
194
|
* Find the longest common prefix of an array of paths, where each item in
|
|
188
|
-
* the array
|
|
189
|
-
* joined together by a path separator
|
|
195
|
+
* the array an array of path segments which comprise an absolute path when
|
|
196
|
+
* joined together by a path separator
|
|
190
197
|
*
|
|
191
198
|
* Adapted from:
|
|
192
199
|
* https://duncan-mcardle.medium.com/leetcode-problem-14-longest-common-prefix-javascript-3bc6a2f777c4
|
|
193
200
|
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
* @param splitPaths An array of arrays, where each item is a path split by its separator.
|
|
198
|
-
* The first item is treated separately as it could be a drive letter in Windows.
|
|
199
|
-
* @returns An array of path segments representing the longest common prefix of splitPaths.
|
|
201
|
+
* @param splitPaths An array of arrays, where each item is a path split by its separator
|
|
202
|
+
* @returns An array of path segments representing the longest common prefix of splitPaths
|
|
200
203
|
*/
|
|
201
204
|
const longestCommonPrefix = (splitPaths) => {
|
|
202
205
|
// Return early on empty input
|
|
203
206
|
if (!splitPaths.length) {
|
|
204
207
|
return [];
|
|
205
208
|
}
|
|
206
|
-
// Added: handle Windows drive letters
|
|
207
|
-
const driveLetter = splitPaths[0][0];
|
|
208
|
-
if (driveLetter && splitPaths.every(string => string[0] === driveLetter)) {
|
|
209
|
-
splitPaths = splitPaths.map(path => path.slice(1));
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
return [];
|
|
213
|
-
}
|
|
214
209
|
// Loop through the segments of the first path
|
|
215
210
|
for (let i = 0; i <= splitPaths[0].length; i++) {
|
|
216
211
|
// Check if this path segment is present in the same position of every path
|
|
217
212
|
if (!splitPaths.every(string => string[i] === splitPaths[0][i])) {
|
|
218
213
|
// If not, return the path segments up to and including the previous segment
|
|
219
|
-
return
|
|
214
|
+
return splitPaths[0].slice(0, i);
|
|
220
215
|
}
|
|
221
216
|
}
|
|
222
|
-
return
|
|
217
|
+
return splitPaths[0];
|
|
223
218
|
};
|
package/esm/utils/watcher.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { join, isAbsolute, relative, resolve, sep } from 'path';
|
|
1
|
+
import { join, isAbsolute, relative, resolve, sep, normalize } from 'path';
|
|
2
2
|
import { normalizeOutputParam } from '@graphql-codegen/plugin-helpers';
|
|
3
3
|
import debounce from 'debounce';
|
|
4
4
|
import mm from 'micromatch';
|
|
@@ -30,7 +30,15 @@ export const createWatcher = (initialContext, onNext) => {
|
|
|
30
30
|
let watcherSubscription;
|
|
31
31
|
const runWatcher = async (abortSignal) => {
|
|
32
32
|
const watchDirectory = await findHighestCommonDirectory(allAffirmativePatterns);
|
|
33
|
-
|
|
33
|
+
// Try to load the parcel watcher, but don't fail if it's not available.
|
|
34
|
+
let parcelWatcher;
|
|
35
|
+
try {
|
|
36
|
+
parcelWatcher = await import('@parcel/watcher');
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
log(`Parcel watcher not found. To use this feature, please make sure to provide @parcel/watcher as a peer dependency.`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
34
42
|
debugLog(`[Watcher] Parcel watcher loaded...`);
|
|
35
43
|
let isShutdown = false;
|
|
36
44
|
const debouncedExec = debounce(() => {
|
|
@@ -159,60 +167,47 @@ export const createWatcher = (initialContext, onNext) => {
|
|
|
159
167
|
* @param files List of relative and/or absolute file paths (or micromatch patterns)
|
|
160
168
|
*/
|
|
161
169
|
const findHighestCommonDirectory = async (files) => {
|
|
162
|
-
// Map files to a list of basePaths, where "base" is the result of mm.scan(pathOrPattern)
|
|
163
|
-
// e.g. mm.scan("/**/foo/bar").base -> "/" ; mm.scan("/foo/bar/**/fizz/*.graphql") -> /foo/bar
|
|
164
170
|
const dirPaths = files
|
|
165
171
|
.map(filePath => (isAbsolute(filePath) ? filePath : resolve(filePath)))
|
|
166
|
-
.map(patterned => mm.scan(patterned).base)
|
|
167
|
-
|
|
172
|
+
.map(patterned => mm.scan(patterned).base)
|
|
173
|
+
.map(path => normalize(path)); // Added normalization here
|
|
168
174
|
return (async (maybeValidPath) => {
|
|
169
|
-
|
|
175
|
+
const normalizedPath = normalize(maybeValidPath); // Normalize the path before checking accessibility
|
|
176
|
+
debugLog(`[Watcher] Longest common prefix of all files: ${normalizedPath}...`);
|
|
170
177
|
try {
|
|
171
|
-
await access(
|
|
172
|
-
return
|
|
178
|
+
await access(normalizedPath); // Access the normalized path
|
|
179
|
+
return normalizedPath;
|
|
173
180
|
}
|
|
174
181
|
catch {
|
|
175
|
-
log(`[Watcher] Longest common prefix (${
|
|
176
|
-
log(`[Watcher] Watching current working directory (${process.cwd()}) instead`);
|
|
177
|
-
return process.cwd();
|
|
182
|
+
log(`[Watcher] Longest common prefix (${normalizedPath}) is not accessible`);
|
|
183
|
+
log(`[Watcher] Watching current working directory (${normalize(process.cwd())}) instead`);
|
|
184
|
+
return normalize(process.cwd());
|
|
178
185
|
}
|
|
179
186
|
})(longestCommonPrefix(dirPaths.map(path => path.split(sep))).join(sep));
|
|
180
187
|
};
|
|
181
188
|
/**
|
|
182
189
|
* Find the longest common prefix of an array of paths, where each item in
|
|
183
|
-
* the array
|
|
184
|
-
* joined together by a path separator
|
|
190
|
+
* the array an array of path segments which comprise an absolute path when
|
|
191
|
+
* joined together by a path separator
|
|
185
192
|
*
|
|
186
193
|
* Adapted from:
|
|
187
194
|
* https://duncan-mcardle.medium.com/leetcode-problem-14-longest-common-prefix-javascript-3bc6a2f777c4
|
|
188
195
|
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
* @param splitPaths An array of arrays, where each item is a path split by its separator.
|
|
193
|
-
* The first item is treated separately as it could be a drive letter in Windows.
|
|
194
|
-
* @returns An array of path segments representing the longest common prefix of splitPaths.
|
|
196
|
+
* @param splitPaths An array of arrays, where each item is a path split by its separator
|
|
197
|
+
* @returns An array of path segments representing the longest common prefix of splitPaths
|
|
195
198
|
*/
|
|
196
199
|
const longestCommonPrefix = (splitPaths) => {
|
|
197
200
|
// Return early on empty input
|
|
198
201
|
if (!splitPaths.length) {
|
|
199
202
|
return [];
|
|
200
203
|
}
|
|
201
|
-
// Added: handle Windows drive letters
|
|
202
|
-
const driveLetter = splitPaths[0][0];
|
|
203
|
-
if (driveLetter && splitPaths.every(string => string[0] === driveLetter)) {
|
|
204
|
-
splitPaths = splitPaths.map(path => path.slice(1));
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
return [];
|
|
208
|
-
}
|
|
209
204
|
// Loop through the segments of the first path
|
|
210
205
|
for (let i = 0; i <= splitPaths[0].length; i++) {
|
|
211
206
|
// Check if this path segment is present in the same position of every path
|
|
212
207
|
if (!splitPaths.every(string => string[i] === splitPaths[0][i])) {
|
|
213
208
|
// If not, return the path segments up to and including the previous segment
|
|
214
|
-
return
|
|
209
|
+
return splitPaths[0].slice(0, i);
|
|
215
210
|
}
|
|
216
211
|
}
|
|
217
|
-
return
|
|
212
|
+
return splitPaths[0];
|
|
218
213
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphql-codegen/cli",
|
|
3
|
-
"version": "4.0.2-alpha-
|
|
3
|
+
"version": "4.0.2-alpha-20230725231005-5bc75d7f6",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
|
|
6
6
|
},
|