@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.
@@ -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
- const parcelWatcher = await Promise.resolve().then(() => tslib_1.__importStar(require('@parcel/watcher')));
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
- // Return longest common prefix if it's accessible, otherwise process.cwd()
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, debugging_js_1.debugLog)(`[Watcher] Longest common prefix of all files: ${maybeValidPath}...`);
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)(maybeValidPath);
177
- return maybeValidPath;
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 (${maybeValidPath}) is not accessible`);
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 is an array of path segments which comprise an absolute path when
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
- * This version has been adjusted to support Windows paths, by treating the drive letter
195
- * as a separate segment and accounting for Windows-style backslashes as path separators.
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 [driveLetter, ...splitPaths[0].slice(0, i)];
214
+ return splitPaths[0].slice(0, i);
220
215
  }
221
216
  }
222
- return [driveLetter, ...splitPaths[0]];
217
+ return splitPaths[0];
223
218
  };
@@ -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
- const parcelWatcher = await import('@parcel/watcher');
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
- // Return longest common prefix if it's accessible, otherwise process.cwd()
172
+ .map(patterned => mm.scan(patterned).base)
173
+ .map(path => normalize(path)); // Added normalization here
168
174
  return (async (maybeValidPath) => {
169
- debugLog(`[Watcher] Longest common prefix of all files: ${maybeValidPath}...`);
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(maybeValidPath);
172
- return maybeValidPath;
178
+ await access(normalizedPath); // Access the normalized path
179
+ return normalizedPath;
173
180
  }
174
181
  catch {
175
- log(`[Watcher] Longest common prefix (${maybeValidPath}) is not accessible`);
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 is an array of path segments which comprise an absolute path when
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
- * This version has been adjusted to support Windows paths, by treating the drive letter
190
- * as a separate segment and accounting for Windows-style backslashes as path separators.
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 [driveLetter, ...splitPaths[0].slice(0, i)];
209
+ return splitPaths[0].slice(0, i);
215
210
  }
216
211
  }
217
- return [driveLetter, ...splitPaths[0]];
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-20230706143738-f59fb0497",
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
  },