snyk-nodejs-lockfile-parser 2.7.1 → 2.8.1

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.
Files changed (60) hide show
  1. package/dist/c-map.js +1 -2
  2. package/dist/c-map.js.map +1 -1
  3. package/dist/cli-parsers/index.js +2 -1
  4. package/dist/cli-parsers/index.js.map +1 -1
  5. package/dist/cli-parsers/yarn-info-parser.js +1 -2
  6. package/dist/cli-parsers/yarn-info-parser.js.map +1 -1
  7. package/dist/dep-graph-builders/npm-lock-v2/extract-npm-lock-v2-pkgs.js +2 -1
  8. package/dist/dep-graph-builders/npm-lock-v2/extract-npm-lock-v2-pkgs.js.map +1 -1
  9. package/dist/dep-graph-builders/npm-lock-v2/index.js +15 -3
  10. package/dist/dep-graph-builders/npm-lock-v2/index.js.map +1 -1
  11. package/dist/dep-graph-builders/pnpm/build-dep-graph-pnpm.js +20 -12
  12. package/dist/dep-graph-builders/pnpm/build-dep-graph-pnpm.js.map +1 -1
  13. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-parser.js +11 -6
  14. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-parser.js.map +1 -1
  15. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-v5.js +2 -2
  16. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-v5.js.map +1 -1
  17. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-v6.js +4 -4
  18. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-v6.js.map +1 -1
  19. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-v9.js +6 -1
  20. package/dist/dep-graph-builders/pnpm/lockfile-parser/lockfile-v9.js.map +1 -1
  21. package/dist/dep-graph-builders/pnpm/parse-project.js +1 -2
  22. package/dist/dep-graph-builders/pnpm/parse-project.js.map +1 -1
  23. package/dist/dep-graph-builders/pnpm/utils.js +5 -1
  24. package/dist/dep-graph-builders/pnpm/utils.js.map +1 -1
  25. package/dist/dep-graph-builders/types.d.ts +7 -0
  26. package/dist/dep-graph-builders/util.js +28 -24
  27. package/dist/dep-graph-builders/util.js.map +1 -1
  28. package/dist/dep-graph-builders/yarn-lock-v1/build-depgraph-simple.js +31 -17
  29. package/dist/dep-graph-builders/yarn-lock-v1/build-depgraph-simple.js.map +1 -1
  30. package/dist/dep-graph-builders/yarn-lock-v2/build-depgraph-simple.js +35 -21
  31. package/dist/dep-graph-builders/yarn-lock-v2/build-depgraph-simple.js.map +1 -1
  32. package/dist/dep-graph-builders/yarn-lock-v2/utils.d.ts +2 -2
  33. package/dist/dep-graph-builders/yarn-lock-v2/utils.js +95 -17
  34. package/dist/dep-graph-builders/yarn-lock-v2/utils.js.map +1 -1
  35. package/dist/errors/invalid-user-input-error.js +2 -2
  36. package/dist/errors/invalid-user-input-error.js.map +1 -1
  37. package/dist/errors/out-of-sync-error.js +4 -2
  38. package/dist/errors/out-of-sync-error.js.map +1 -1
  39. package/dist/errors/tree-size-limit-error.js +3 -2
  40. package/dist/errors/tree-size-limit-error.js.map +1 -1
  41. package/dist/errors/unsupported-error.js +2 -2
  42. package/dist/errors/unsupported-error.js.map +1 -1
  43. package/dist/errors/unsupported-runtime-error.js +2 -2
  44. package/dist/errors/unsupported-runtime-error.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/parsers/index.js +13 -11
  48. package/dist/parsers/index.js.map +1 -1
  49. package/dist/parsers/lock-parser-base.js +40 -15
  50. package/dist/parsers/lock-parser-base.js.map +1 -1
  51. package/dist/parsers/package-lock-parser.js +16 -18
  52. package/dist/parsers/package-lock-parser.js.map +1 -1
  53. package/dist/parsers/yarn-lock-parser.js +12 -3
  54. package/dist/parsers/yarn-lock-parser.js.map +1 -1
  55. package/dist/parsers/yarn2-lock-parser.js +12 -3
  56. package/dist/parsers/yarn2-lock-parser.js.map +1 -1
  57. package/dist/utils.d.ts +17 -0
  58. package/dist/utils.js +58 -15
  59. package/dist/utils.js.map +1 -1
  60. package/package.json +12 -7
package/dist/utils.js CHANGED
@@ -4,6 +4,8 @@ exports.getLockfileVersionFromFile = exports.NodeLockfileVersion = void 0;
4
4
  exports.getPnpmLockfileVersion = getPnpmLockfileVersion;
5
5
  exports.getYarnLockfileVersion = getYarnLockfileVersion;
6
6
  exports.getNpmLockfileVersion = getNpmLockfileVersion;
7
+ exports.parseJsonFile = parseJsonFile;
8
+ exports.describeLikelyJsonCause = describeLikelyJsonCause;
7
9
  const fs_1 = require("fs");
8
10
  const js_yaml_1 = require("js-yaml");
9
11
  const errors_1 = require("./errors");
@@ -64,24 +66,65 @@ function getYarnLockfileVersion(lockFileContents) {
64
66
  }
65
67
  }
66
68
  function getNpmLockfileVersion(lockFileContents) {
69
+ // Parse first; surfacing the real JSON error happens inside parseJsonFile.
70
+ const lockfileJson = parseJsonFile(lockFileContents, 'package-lock.json');
71
+ // The version check runs *outside* the parse try/catch so that an
72
+ // unsupported (but otherwise valid JSON) lockfile is not mis-reported as a
73
+ // JSON syntax error.
74
+ const lockfileVersion = lockfileJson.lockfileVersion || null;
75
+ switch (lockfileVersion) {
76
+ case null:
77
+ case 1:
78
+ return NodeLockfileVersion.NpmLockV1;
79
+ case 2:
80
+ return NodeLockfileVersion.NpmLockV2;
81
+ case 3:
82
+ return NodeLockfileVersion.NpmLockV3;
83
+ default:
84
+ throw new errors_1.InvalidUserInputError(`Unsupported npm lockfile version "${lockfileVersion}" in package-lock.json. ` +
85
+ 'Please provide a package-lock.json with lockfileVersion 1, 2 or 3');
86
+ }
87
+ }
88
+ /**
89
+ * Parse JSON from a manifest or lockfile. On failure throws an
90
+ * InvalidUserInputError that preserves the underlying parser message
91
+ * (including the position of the syntax error) and appends a best-effort hint
92
+ * about the likely cause.
93
+ *
94
+ * `fileLabel` is the file kind shown in the error, e.g. 'package.json' or
95
+ * 'package-lock.json'.
96
+ */
97
+ function parseJsonFile(content, fileLabel) {
67
98
  try {
68
- const lockfileJson = JSON.parse(lockFileContents);
69
- const lockfileVersion = lockfileJson.lockfileVersion || null;
70
- switch (lockfileVersion) {
71
- case null:
72
- case 1:
73
- return NodeLockfileVersion.NpmLockV1;
74
- case 2:
75
- return NodeLockfileVersion.NpmLockV2;
76
- case 3:
77
- return NodeLockfileVersion.NpmLockV3;
78
- default:
79
- throw new errors_1.InvalidUserInputError(`Unsupported npm lockfile version in package-lock.json. ` +
80
- 'Please provide a package-lock.json with lockfileVersion 1, 2 or 3');
81
- }
99
+ return JSON.parse(content);
82
100
  }
83
101
  catch (e) {
84
- throw new errors_1.InvalidUserInputError(`Problem parsing package-lock.json - make sure the package-lock.json is a valid JSON file`);
102
+ throw new errors_1.InvalidUserInputError(`${fileLabel} parsing failed with error ${e.message}` +
103
+ describeLikelyJsonCause(content));
104
+ }
105
+ }
106
+ /**
107
+ * Best-effort, allocation-light hint describing the most likely reason a JSON
108
+ * parse failed. Inspects only the leading characters of the content, never
109
+ * throws, and returns '' when nothing recognisable is found - so it is always
110
+ * safe to append to a parse-error message.
111
+ */
112
+ function describeLikelyJsonCause(content) {
113
+ if (!content) {
114
+ return ' The file is empty.';
115
+ }
116
+ // A byte-order mark (UTF-8/UTF-16/UTF-32) decoded into the string.
117
+ if (content.charCodeAt(0) === 0xfeff) {
118
+ return ' The file begins with a byte-order mark (BOM); re-save it as UTF-8 without a BOM.';
119
+ }
120
+ // NUL bytes strongly suggest the file is UTF-16/UTF-32 encoded.
121
+ if (content.includes('\x00')) {
122
+ return ' The file contains NUL bytes; it may be UTF-16/UTF-32 encoded. Re-save it as UTF-8.';
123
+ }
124
+ // Unresolved git merge-conflict markers.
125
+ if (/^(<{7}|={7}|>{7})( |$)/m.test(content)) {
126
+ return ' The file appears to contain unresolved git merge-conflict markers.';
85
127
  }
128
+ return '';
86
129
  }
87
130
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -22,8 +22,13 @@
22
22
  },
23
23
  "author": "snyk.io",
24
24
  "license": "Apache-2.0",
25
+ "publishConfig": {
26
+ "registry": "https://registry.npmjs.org/",
27
+ "access": "public"
28
+ },
25
29
  "engines": {
26
- "node": ">=18"
30
+ "node": "^20.19.0 || ^22.13.0 || >=24.0.0",
31
+ "npm": ">=10"
27
32
  },
28
33
  "files": [
29
34
  "bin",
@@ -53,13 +58,13 @@
53
58
  "devDependencies": {
54
59
  "@types/jest": "^28.1.3",
55
60
  "@types/lodash": "^4.17.20",
56
- "@types/node": "^18.19.127",
61
+ "@types/node": "^24",
57
62
  "@types/semver": "^7.3.6",
58
63
  "@types/uuid": "^8.3.0",
59
- "@typescript-eslint/eslint-plugin": "^4.33.0",
60
- "@typescript-eslint/parser": "^4.33.0",
61
- "eslint": "7.32.0",
62
- "eslint-config-prettier": "^8.3.0",
64
+ "@typescript-eslint/eslint-plugin": "^8.60.0",
65
+ "@typescript-eslint/parser": "^8.60.0",
66
+ "eslint": "^8.57.1",
67
+ "eslint-config-prettier": "^9.1.0",
63
68
  "jest": "^28.1.3",
64
69
  "prettier": "^2.7.1",
65
70
  "tap": "^15.0.4",
@@ -71,5 +76,5 @@
71
76
  "tar": "7.5.11"
72
77
  },
73
78
  "packageManager": "yarn@2.4.1",
74
- "version": "2.7.1"
79
+ "version": "2.8.1"
75
80
  }