@expo/image-utils
Advanced tools
| declare module 'module' { | ||
| namespace Module { | ||
| const globalPaths: readonly string[] | void; | ||
| } | ||
| } | ||
| /** Resolve a globally installed module before a locally installed one */ | ||
| export declare const resolveGlobal: (id: string) => string; |
| "use strict"; | ||
| // NOTE: This file is replicated to multiple packages! Keep these files in-sync: | ||
| // - packages/@expo/cli/src/utils/resolveGlobal.ts | ||
| // - packages/@expo/image-utils/src/resolveGlobal.ts | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.resolveGlobal = void 0; | ||
| const child_process_1 = require("child_process"); | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const module_1 = __importDefault(require("module")); | ||
| const os_1 = __importDefault(require("os")); | ||
| const path_1 = __importDefault(require("path")); | ||
| const memoize = (fn) => { | ||
| let result; | ||
| return (...args) => { | ||
| if (result === undefined) { | ||
| result = { value: fn(...args) }; | ||
| } | ||
| return result.value; | ||
| }; | ||
| }; | ||
| const isWindows = process.platform === 'win32'; | ||
| const getDelimitedPaths = (delimited) => delimited | ||
| .split(path_1.default.delimiter) | ||
| .map((target) => { | ||
| try { | ||
| const normalized = path_1.default.normalize(target.trim()); | ||
| if (!normalized) { | ||
| return null; | ||
| } | ||
| else if (!path_1.default.isAbsolute(normalized)) { | ||
| return path_1.default.resolve(process.cwd(), normalized); | ||
| } | ||
| else { | ||
| return normalized; | ||
| } | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| }) | ||
| .filter((target) => !!target); | ||
| const execGetPaths = (cmd, args) => { | ||
| const result = (0, child_process_1.spawnSync)(cmd, args, { encoding: 'utf8' }); | ||
| if (!result.error && result.status === 0 && result.stdout) { | ||
| const paths = getDelimitedPaths(result.stdout.replace(/[\r\n]+/g, path_1.default.delimiter)); | ||
| return paths.filter((target) => fs_1.default.existsSync(target)); | ||
| } | ||
| return []; | ||
| }; | ||
| const getNativeNodePaths = () => { | ||
| if (Array.isArray(module_1.default.globalPaths)) { | ||
| return module_1.default.globalPaths; | ||
| } | ||
| else { | ||
| return []; | ||
| } | ||
| }; | ||
| const getHomePath = memoize(() => { | ||
| try { | ||
| return os_1.default.homedir(); | ||
| } | ||
| catch { | ||
| return isWindows ? (process.env.UserProfile ?? process.env.USERPROFILE) : process.env.HOME; | ||
| } | ||
| }); | ||
| const getNpmDefaultPaths = () => { | ||
| const prefix = []; | ||
| const localAppData = process.env.LocalAppData || process.env.LOCALAPPDATA; | ||
| if (isWindows && localAppData) { | ||
| prefix.push(path_1.default.resolve(localAppData, 'npm')); | ||
| } | ||
| else if (!isWindows) { | ||
| prefix.push('/usr/local/lib/node_modules'); | ||
| } | ||
| return prefix.filter((target) => fs_1.default.existsSync(target)); | ||
| }; | ||
| const getNpmPrefixPaths = memoize(() => { | ||
| const npmPrefix = execGetPaths(isWindows ? 'npm.cmd' : 'npm', ['config', '-g', 'get', 'prefix']); | ||
| return npmPrefix.map((prefix) => path_1.default.resolve(prefix, 'lib')); | ||
| }); | ||
| const getYarnDefaultPaths = () => { | ||
| const prefix = []; | ||
| const homePath = getHomePath(); | ||
| const localAppData = process.env.LocalAppData || process.env.LOCALAPPDATA; | ||
| const dataHomePath = process.env.XDG_DATA_HOME || (homePath && path_1.default.join(homePath, '.local', 'share')); | ||
| if (isWindows && localAppData) { | ||
| prefix.push(path_1.default.resolve(localAppData, 'Yarn', 'global')); | ||
| } | ||
| if (dataHomePath) { | ||
| prefix.push(path_1.default.resolve(dataHomePath, 'yarn', 'global')); | ||
| } | ||
| if (homePath) { | ||
| prefix.push(path_1.default.resolve(homePath, '.yarn', 'global')); | ||
| } | ||
| return prefix.filter((target) => fs_1.default.existsSync(target)); | ||
| }; | ||
| const getYarnPrefixPaths = memoize(() => { | ||
| return execGetPaths(isWindows ? 'yarn.cmd' : 'yarn', ['global', 'dir']); | ||
| }); | ||
| const getPnpmPrefixPaths = memoize(() => { | ||
| return execGetPaths(isWindows ? 'pnpm.cmd' : 'pnpm', ['root', '-g']); | ||
| }); | ||
| const getBunPrefixPaths = memoize(() => { | ||
| const prefix = []; | ||
| const bunPath = execGetPaths(isWindows ? 'bun.cmd' : 'bun', ['pm', 'bin', '-g'])[0]; | ||
| if (!bunPath) { | ||
| return []; | ||
| } | ||
| prefix.push(path_1.default.resolve(bunPath, 'global')); | ||
| const moduleEntry = fs_1.default.readdirSync(bunPath, { withFileTypes: true }).find((entry) => { | ||
| return entry.isSymbolicLink() && entry.name !== 'global'; | ||
| }); | ||
| if (moduleEntry) { | ||
| try { | ||
| const moduleTarget = fs_1.default.realpathSync(path_1.default.resolve(bunPath, moduleEntry.name)); | ||
| const splitIdx = moduleTarget.indexOf(path_1.default.sep + 'node_modules' + path_1.default.sep); | ||
| if (splitIdx > -1) { | ||
| const modulePath = moduleTarget.slice(0, splitIdx); | ||
| prefix.push(modulePath); | ||
| } | ||
| } | ||
| catch { } | ||
| } | ||
| return prefix.filter((target) => fs_1.default.existsSync(target)); | ||
| }); | ||
| const getPaths = () => [ | ||
| ...getNpmDefaultPaths(), | ||
| ...getNpmPrefixPaths(), | ||
| ...getYarnDefaultPaths(), | ||
| ...getYarnPrefixPaths(), | ||
| ...getPnpmPrefixPaths(), | ||
| ...getBunPrefixPaths(), | ||
| ...getNativeNodePaths(), | ||
| process.cwd(), | ||
| ]; | ||
| /** Resolve a globally installed module before a locally installed one */ | ||
| const resolveGlobal = (id) => { | ||
| return require.resolve(id, { paths: getPaths() }); | ||
| }; | ||
| exports.resolveGlobal = resolveGlobal; | ||
| //# sourceMappingURL=resolveGlobal.js.map |
| {"version":3,"file":"resolveGlobal.js","sourceRoot":"","sources":["../src/resolveGlobal.ts"],"names":[],"mappings":"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"} |
+8
-5
@@ -15,5 +15,5 @@ "use strict"; | ||
| const resolve_from_1 = __importDefault(require("resolve-from")); | ||
| const resolve_global_1 = __importDefault(require("resolve-global")); | ||
| const semver_1 = __importDefault(require("semver")); | ||
| const env_1 = require("./env"); | ||
| const resolveGlobal_1 = require("./resolveGlobal"); | ||
| const SHARP_HELP_PATTERN = /\n\nSpecify --help for available options/g; | ||
@@ -116,6 +116,9 @@ const SHARP_REQUIRED_VERSION = '^5.2.0'; | ||
| try { | ||
| const sharpCliPackagePath = resolve_global_1.default.silent('sharp-cli/package.json') ?? | ||
| require.resolve('sharp-cli/package.json', { | ||
| paths: require.resolve.paths('sharp-cli') ?? undefined, | ||
| }); | ||
| let sharpCliPackagePath; | ||
| try { | ||
| sharpCliPackagePath = (0, resolveGlobal_1.resolveGlobal)('sharp-cli/package.json'); | ||
| } | ||
| catch { | ||
| sharpCliPackagePath = require.resolve('sharp-cli/package.json'); | ||
| } | ||
| const sharpCliPackage = require(sharpCliPackagePath); | ||
@@ -122,0 +125,0 @@ const sharpInstance = sharpCliPackagePath |
+3
-3
| { | ||
| "name": "@expo/image-utils", | ||
| "version": "0.8.12-canary-20260128-67ce8d5", | ||
| "version": "0.8.12", | ||
| "description": "A package used by Expo CLI for processing images", | ||
@@ -40,3 +40,2 @@ "main": "build/index.js", | ||
| "resolve-from": "^5.0.0", | ||
| "resolve-global": "^1.0.0", | ||
| "semver": "^7.6.0" | ||
@@ -52,3 +51,4 @@ }, | ||
| "access": "public" | ||
| } | ||
| }, | ||
| "gitHead": "436ffb4355d5207f4a03fbc3568cd33424a40f3e" | ||
| } |
Sorry, the diff of this file is not supported yet
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 7 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
92223
13.55%7
-12.5%36
9.09%1292
13.43%18
125%2
100%- Removed
- Removed
- Removed
- Removed