socket 0.14.11 → 0.14.13

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.
@@ -4,18 +4,18 @@ var vendor = require('./vendor.js');
4
4
  var require$$0 = require('node:fs');
5
5
  var require$$1 = require('node:path');
6
6
  var link = require('./link.js');
7
- var require$$0$1 = require('node:events');
7
+ var require$$2$1 = require('node:events');
8
8
  var require$$4 = require('node:https');
9
9
  var require$$3 = require('node:readline');
10
- var require$$1$2 = require('node:stream');
11
- var require$$8 = require('node:timers/promises');
10
+ var require$$5 = require('node:stream');
11
+ var require$$8$1 = require('node:timers/promises');
12
12
  var require$$3$1 = require('@socketsecurity/config');
13
13
  var require$$1$1 = require('node:net');
14
14
  var require$$2 = require('node:os');
15
15
  var require$$6 = require('../package.json');
16
16
  var sdk = require('./sdk.js');
17
17
  var pathResolve = require('./path-resolve.js');
18
- var require$$21 = require('pacote');
18
+ var require$$8 = require('pacote');
19
19
 
20
20
  var npmInjection$1 = {};
21
21
 
@@ -34,7 +34,7 @@ var _nodeNet = require$$1$1;
34
34
  var _nodeOs = require$$2;
35
35
  var _nodePath$2 = require$$1;
36
36
  var _nodeReadline$1 = require$$3;
37
- var _nodeStream$1 = require$$1$2;
37
+ var _nodeStream$1 = require$$5;
38
38
  var _package = require$$6;
39
39
  var _misc$1 = sdk.misc;
40
40
  const NEWLINE_CHAR_CODE = 10; /*'\n'*/
@@ -382,13 +382,13 @@ Object.defineProperty(arborist, "__esModule", {
382
382
  });
383
383
  arborist.SafeArborist = void 0;
384
384
  arborist.installSafeArborist = installSafeArborist;
385
- var _nodeEvents = require$$0$1;
385
+ var _nodeEvents = require$$2$1;
386
386
  var _nodeFs$1 = require$$0;
387
387
  var _nodeHttps = require$$4;
388
388
  var _nodePath$1 = require$$1;
389
389
  var _nodeReadline = require$$3;
390
- var _nodeStream = require$$1$2;
391
- var _promises = require$$8;
390
+ var _nodeStream = require$$5;
391
+ var _promises = require$$8$1;
392
392
  var _config = require$$3$1;
393
393
  var _chalk = _interopRequireDefault(vendor.source);
394
394
  var _isInteractive = _interopRequireDefault(vendor.isInteractive);
@@ -437,7 +437,7 @@ let tarball;
437
437
  try {
438
438
  tarball = require(_nodePath$1.join(npmNmPath, 'pacote')).tarball;
439
439
  } catch {
440
- tarball = require$$21.tarball;
440
+ tarball = require$$8.tarball;
441
441
  }
442
442
  const Arborist = require(arboristClassPath);
443
443
  const Edge = require(arboristEdgeClassPath);
@@ -2,10 +2,7 @@
2
2
  import { SocketYml } from '@socketsecurity/config';
3
3
  import { SocketSdkReturnType } from '@socketsecurity/sdk';
4
4
  declare function directoryPatterns(): string[];
5
- declare function arrayUnique<T>(array: T[]): T[];
6
- declare function getPackageFiles(cwd: string, inputPaths: string[], config: SocketYml | undefined, supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data'], debugLog: typeof console.error): Promise<string[]>;
7
- declare function getPackageFilesFullScans(cwd: string, inputPaths: string[], supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data'], debugLog: typeof console.error): Promise<string[]>;
8
- declare function mapGlobResultToFiles(entries: string[], supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data']): Promise<string[]>;
9
- declare function mapGlobEntryToFiles(entry: string, supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data']): Promise<string[]>;
10
5
  declare function findRoot(filepath: string): string | undefined;
11
- export { directoryPatterns, arrayUnique, getPackageFiles, getPackageFilesFullScans, mapGlobResultToFiles, mapGlobEntryToFiles, findRoot };
6
+ declare function getPackageFiles(cwd: string, inputPaths: string[], config: SocketYml | undefined, supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data'], debugLog?: typeof console.error): Promise<string[]>;
7
+ declare function getPackageFilesFullScans(cwd: string, inputPaths: string[], supportedFiles: SocketSdkReturnType<'getReportSupportedFiles'>['data'], debugLog?: typeof console.error): Promise<string[]>;
8
+ export { directoryPatterns, findRoot, getPackageFiles, getPackageFilesFullScans };
@@ -1,22 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var require$$1 = require('node:fs/promises');
4
- var require$$1$1 = require('node:path');
5
- var vendor = require('./vendor.js');
6
- var require$$3 = require('ignore');
3
+ var require$$1$1 = require('node:fs/promises');
4
+ var require$$1 = require('node:path');
5
+ var require$$2 = require('ignore');
6
+ var require$$3 = require('micromatch');
7
+ var require$$4 = require('tinyglobby');
7
8
 
8
9
  var pathResolve = {};
9
10
 
10
- var arrays = {};
11
-
12
- Object.defineProperty(arrays, "__esModule", {
13
- value: true
14
- });
15
- arrays.arrayUnique = arrayUnique;
16
- function arrayUnique(array) {
17
- return [...new Set(array)];
18
- }
19
-
20
11
  var ignoreByDefault = {};
21
12
 
22
13
  Object.defineProperty(ignoreByDefault, "__esModule", {
@@ -56,68 +47,101 @@ Object.defineProperty(pathResolve, "__esModule", {
56
47
  pathResolve.findRoot = findRoot;
57
48
  pathResolve.getPackageFiles = getPackageFiles;
58
49
  pathResolve.getPackageFilesFullScans = getPackageFilesFullScans;
59
- pathResolve.mapGlobEntryToFiles = mapGlobEntryToFiles;
60
- pathResolve.mapGlobResultToFiles = mapGlobResultToFiles;
61
- var _promises = require$$1;
62
- var _nodePath = require$$1$1;
63
- var _globby = vendor.globby;
64
- var _ignore = require$$3;
65
- var _arrays = arrays;
50
+ var _promises = require$$1$1;
51
+ var _nodePath = require$$1;
52
+ var _ignore = require$$2;
53
+ var _micromatch = require$$3;
54
+ var _tinyglobby = require$$4;
66
55
  var _ignoreByDefault = ignoreByDefault;
67
- const BASE_GLOBBY_OPTS = {
68
- __proto__: null,
69
- absolute: true,
70
- expandDirectories: false,
71
- gitignore: true,
72
- ignore: (0, _ignoreByDefault.directoryPatterns)(),
73
- markDirectories: true,
74
- onlyFiles: true,
75
- unique: true
76
- };
77
- async function getPackageFiles(cwd, inputPaths, config, supportedFiles, debugLog) {
78
- debugLog(`Globbed resolving ${inputPaths.length} paths:`, inputPaths);
79
-
80
- // TODO: Does not support `~/` paths
81
- const entries = await (0, _globby.globby)(inputPaths, {
82
- ...BASE_GLOBBY_OPTS,
83
- cwd,
84
- onlyFiles: false
85
- });
86
- debugLog(`Globbed resolved ${inputPaths.length} paths to ${entries.length} paths:`, entries);
87
- const packageFiles = await mapGlobResultToFiles(entries, supportedFiles);
88
- debugLog(`Mapped ${entries.length} entries to ${packageFiles.length} files:`, packageFiles);
89
- const includedPackageFiles = config?.projectIgnorePaths?.length ? _ignore().add(config.projectIgnorePaths).filter(packageFiles.map(item => _nodePath.relative(cwd, item))).map(item => _nodePath.resolve(cwd, item)) : packageFiles;
90
- return includedPackageFiles;
56
+ async function filterGlobResultToSupportedFiles(entries, supportedFiles) {
57
+ const patterns = ['golang', 'npm', 'pypi'].reduce((r, n) => {
58
+ const supported = supportedFiles[n];
59
+ r.push(...(supported ? Object.values(supported).map(p => `**/${p.pattern}`) : []));
60
+ return r;
61
+ }, []);
62
+ return entries.filter(p => _micromatch.some(p, patterns));
91
63
  }
92
- async function getPackageFilesFullScans(cwd, inputPaths, supportedFiles, debugLog) {
93
- debugLog(`Globbed resolving ${inputPaths.length} paths:`, inputPaths);
94
-
95
- // TODO: Does not support `~/` paths
96
- const entries = await (0, _globby.globby)(inputPaths, {
97
- ...BASE_GLOBBY_OPTS,
64
+ async function globWithGitIgnore(patterns, options) {
65
+ const {
66
+ socketConfig,
67
+ cwd = process.cwd(),
68
+ ...additionalOptions
69
+ } = {
70
+ __proto__: null,
71
+ ...options
72
+ };
73
+ const projectIgnorePaths = socketConfig?.projectIgnorePaths;
74
+ const ignoreFiles = await (0, _tinyglobby.glob)(['**/.gitignore'], {
75
+ __proto__: null,
76
+ absolute: true,
98
77
  cwd,
99
- onlyFiles: false
78
+ expandDirectories: true
100
79
  });
101
- debugLog(`Globbed resolved ${inputPaths.length} paths to ${entries.length} paths:`, entries);
102
- const packageFiles = await mapGlobResultToFiles(entries, supportedFiles);
103
- debugLog(`Mapped ${entries.length} entries to ${packageFiles.length} files:`, packageFiles);
104
- return packageFiles;
80
+ const ignores = [...(0, _ignoreByDefault.directoryPatterns)(), ...(Array.isArray(projectIgnorePaths) ? ignoreFileLinesToGlobPatterns(projectIgnorePaths, _nodePath.join(cwd, '.gitignore'), cwd) : []), ...(await Promise.all(ignoreFiles.map(async filepath => ignoreFileToGlobPatterns(await _promises.readFile(filepath, 'utf8'), filepath, cwd)))).flat()];
81
+ const hasNegatedPattern = ignores.some(p => p.charCodeAt(0) === 33 /*'!'*/);
82
+ const globOptions = {
83
+ __proto__: null,
84
+ absolute: true,
85
+ cwd,
86
+ expandDirectories: false,
87
+ ignore: hasNegatedPattern ? [] : ignores,
88
+ ...additionalOptions
89
+ };
90
+ const result = await (0, _tinyglobby.glob)(patterns, globOptions);
91
+ if (!hasNegatedPattern) {
92
+ return result;
93
+ }
94
+ const {
95
+ absolute
96
+ } = globOptions;
97
+ const filtered = _ignore().add(ignores).filter(absolute ? result.map(p => _nodePath.relative(cwd, p)) : result);
98
+ return absolute ? filtered.map(p => _nodePath.resolve(cwd, p)) : filtered;
99
+ }
100
+ function ignoreFileLinesToGlobPatterns(lines, filepath, cwd) {
101
+ const base = _nodePath.relative(cwd, _nodePath.dirname(filepath)).replace(/\\/g, '/');
102
+ const patterns = [];
103
+ for (let i = 0, {
104
+ length
105
+ } = lines; i < length; i += 1) {
106
+ const pattern = lines[i].trim();
107
+ if (pattern.length > 0 && pattern.charCodeAt(0) !== 35 /*'#'*/) {
108
+ patterns.push(ignorePatternToMinimatch(pattern.length && pattern.charCodeAt(0) === 33 /*'!'*/ ? `!${_nodePath.posix.join(base, pattern.slice(1))}` : _nodePath.posix.join(base, pattern)));
109
+ }
110
+ }
111
+ return patterns;
105
112
  }
106
- async function mapGlobResultToFiles(entries, supportedFiles) {
107
- const packageFiles = await Promise.all(entries.map(entry => mapGlobEntryToFiles(entry, supportedFiles)));
108
- return (0, _arrays.arrayUnique)(packageFiles.flat());
113
+ function ignoreFileToGlobPatterns(content, filepath, cwd) {
114
+ return ignoreFileLinesToGlobPatterns(content.split(/\r?\n/), filepath, cwd);
109
115
  }
110
- async function mapGlobEntryToFiles(entry, supportedFiles) {
111
- const jsSupported = supportedFiles['npm'] ?? {};
112
- const jsLockFilePatterns = Object.values(jsSupported).map(p => `**/${p.pattern}`);
113
- const pyFilePatterns = Object.values(supportedFiles['pypi'] ?? {}).map(p => `**/${p.pattern}`);
114
- const goSupported = supportedFiles['golang'] ?? {};
115
- const goSupplementalPatterns = Object.values(goSupported).map(p => `**/${p.pattern}`);
116
- return await (0, _globby.globby)([...jsLockFilePatterns, ...pyFilePatterns, ...goSupplementalPatterns], {
117
- ...BASE_GLOBBY_OPTS,
118
- onlyFiles: true,
119
- cwd: _nodePath.resolve((await (0, _promises.stat)(entry)).isDirectory() ? entry : _nodePath.dirname(entry))
120
- });
116
+
117
+ // Based on `@eslint/compat` convertIgnorePatternToMinimatch.
118
+ // Apache v2.0 licensed
119
+ // Copyright Nicholas C. Zakas
120
+ // https://github.com/eslint/rewrite/blob/compat-v1.2.1/packages/compat/src/ignore-file.js#L28
121
+ function ignorePatternToMinimatch(pattern) {
122
+ const isNegated = pattern.startsWith('!');
123
+ const negatedPrefix = isNegated ? '!' : '';
124
+ const patternToTest = (isNegated ? pattern.slice(1) : pattern).trimEnd();
125
+ // Special cases.
126
+ if (patternToTest === '' || patternToTest === '**' || patternToTest === '/**' || patternToTest === '**') {
127
+ return `${negatedPrefix}${patternToTest}`;
128
+ }
129
+ const firstIndexOfSlash = patternToTest.indexOf('/');
130
+ const matchEverywherePrefix = firstIndexOfSlash === -1 || firstIndexOfSlash === patternToTest.length - 1 ? '**/' : '';
131
+ const patternWithoutLeadingSlash = firstIndexOfSlash === 0 ? patternToTest.slice(1) : patternToTest;
132
+ // Escape `{` and `(` because in gitignore patterns they are just
133
+ // literal characters without any specific syntactic meaning,
134
+ // while in minimatch patterns they can form brace expansion or extglob syntax.
135
+ //
136
+ // For example, gitignore pattern `src/{a,b}.js` ignores file `src/{a,b}.js`.
137
+ // But, the same minimatch pattern `src/{a,b}.js` ignores files `src/a.js` and `src/b.js`.
138
+ // Minimatch pattern `src/\{a,b}.js` is equivalent to gitignore pattern `src/{a,b}.js`.
139
+ const escapedPatternWithoutLeadingSlash = patternWithoutLeadingSlash.replaceAll(/(?=((?:\\.|[^{(])*))\1([{(])/guy, '$1\\$2');
140
+ const matchInsideSuffix = patternToTest.endsWith('/**') ? '/*' : '';
141
+ return `${negatedPrefix}${matchEverywherePrefix}${escapedPatternWithoutLeadingSlash}${matchInsideSuffix}`;
142
+ }
143
+ function pathsToPatterns(paths) {
144
+ return paths.map(p => p === '.' ? '**/*' : p);
121
145
  }
122
146
  function findRoot(filepath) {
123
147
  let curPath = filepath;
@@ -132,5 +156,30 @@ function findRoot(filepath) {
132
156
  curPath = parent;
133
157
  }
134
158
  }
159
+ async function getPackageFiles(cwd, inputPaths, config, supportedFiles, debugLog = () => {}) {
160
+ debugLog(`Globbed resolving ${inputPaths.length} paths:`, inputPaths);
161
+
162
+ // TODO: Does not support `~/` paths
163
+ const entries = await globWithGitIgnore(pathsToPatterns(inputPaths), {
164
+ cwd,
165
+ socketConfig: config
166
+ });
167
+ debugLog(`Globbed resolved ${inputPaths.length} paths to ${entries.length} paths:`, entries);
168
+ const packageFiles = await filterGlobResultToSupportedFiles(entries, supportedFiles);
169
+ debugLog(`Mapped ${entries.length} entries to ${packageFiles.length} files:`, packageFiles);
170
+ return packageFiles;
171
+ }
172
+ async function getPackageFilesFullScans(cwd, inputPaths, supportedFiles, debugLog = () => {}) {
173
+ debugLog(`Globbed resolving ${inputPaths.length} paths:`, inputPaths);
174
+
175
+ // TODO: Does not support `~/` paths
176
+ const entries = await globWithGitIgnore(pathsToPatterns(inputPaths), {
177
+ cwd
178
+ });
179
+ debugLog(`Globbed resolved ${inputPaths.length} paths to ${entries.length} paths:`, entries);
180
+ const packageFiles = await filterGlobResultToSupportedFiles(entries, supportedFiles);
181
+ debugLog(`Mapped ${entries.length} entries to ${packageFiles.length} files:`, packageFiles);
182
+ return packageFiles;
183
+ }
135
184
 
136
185
  exports.pathResolve = pathResolve;