New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@expo/package-manager

Package Overview
Dependencies
Maintainers
24
Versions
139
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@expo/package-manager - npm Package Compare versions

Comparing version 0.0.0 to 0.0.1-canary-20231125-d600e44

build/index.d.ts

86

build/PackageManager.d.ts

@@ -1,44 +0,46 @@

import { SpawnOptions } from '@expo/spawn-async';
export declare function isUsingYarn(projectRoot: string): boolean;
declare type Logger = (...args: any[]) => void;
import { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/spawn-async';
import { PendingSpawnPromise } from './utils/spawn';
export interface PackageManagerOptions extends SpawnOptions {
/**
* If the package manager should run in silent mode.
* Note, this will hide possible error output from executed commands.
* When running in silent mode, make sure you handle them properly.
*/
silent?: boolean;
/**
* The logging method used to communicate the command which is executed.
* Without `silent`, this defaults to `console.log`.
* When `silent` is set to `true`, this defaults to a no-op.
*/
log?: (...args: any[]) => void;
}
export interface PackageManager {
installAsync(): Promise<void>;
addAsync(...names: string[]): Promise<void>;
addDevAsync(...names: string[]): Promise<void>;
/** The options for this package manager */
readonly options: PackageManagerOptions;
/** Run any command using the package manager */
runAsync(command: string[]): SpawnPromise<SpawnResult>;
/** Get the version of the used package manager */
versionAsync(): Promise<string>;
/** Get a single configuration property from the package manager */
getConfigAsync(key: string): Promise<string>;
/** Remove the lock file within the project, if any */
removeLockfileAsync(): Promise<void>;
/** Get the workspace root package manager, if this project is within a workspace/monorepo */
workspaceRoot(): PackageManager | null;
/** Install all current dependencies using the package manager */
installAsync(): Promise<SpawnResult> | SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
/** Uninstall all current dependencies by removing the folder containing the packages */
uninstallAsync(): Promise<void>;
/** Add a normal dependency to the project */
addAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
/** Add a development dependency to the project */
addDevAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
/** Add a global dependency to the environment */
addGlobalAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
/** Remove a normal dependency from the project */
removeAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
/** Remove a development dependency from the project */
removeDevAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
/** Remove a global dependency from the environments */
removeGlobalAsync(namesOrFlags: string[]): SpawnPromise<SpawnResult> | PendingSpawnPromise<SpawnResult>;
}
export declare class NpmPackageManager implements PackageManager {
options: SpawnOptions;
private log;
constructor({ cwd, log }: {
cwd: string;
log?: Logger;
});
readonly name: string;
installAsync(): Promise<void>;
addAsync(...names: string[]): Promise<void>;
addDevAsync(...names: string[]): Promise<void>;
private _runAsync;
private _parseSpecs;
private _patchAsync;
}
export declare class YarnPackageManager implements PackageManager {
options: SpawnOptions;
private log;
constructor({ cwd, log }: {
cwd: string;
log?: Logger;
});
readonly name: string;
installAsync(): Promise<void>;
addAsync(...names: string[]): Promise<void>;
addDevAsync(...names: string[]): Promise<void>;
private _runAsync;
}
export declare function createForProject(projectRoot: string, options?: {
npm?: boolean;
yarn?: boolean;
log?: Logger;
}): NpmPackageManager | YarnPackageManager;
export declare function getModulesPath(projectRoot: string): string;
export declare function getPossibleProjectRoot(): string;
export {};
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ansi_regex_1 = __importDefault(require("ansi-regex"));
const find_yarn_workspace_root_1 = __importDefault(require("find-yarn-workspace-root"));
const spawn_async_1 = __importDefault(require("@expo/spawn-async"));
const split_1 = __importDefault(require("split"));
const stream_1 = require("stream");
const npm_package_arg_1 = __importDefault(require("npm-package-arg"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const detect_indent_1 = __importDefault(require("detect-indent"));
const detect_newline_1 = __importDefault(require("detect-newline"));
const ansi = `(?:${ansi_regex_1.default().source})*`;
const npmPeerDependencyWarningPattern = new RegExp(`${ansi}npm${ansi} ${ansi}WARN${ansi}.+You must install peer dependencies yourself\\.\n`, 'g');
const yarnPeerDependencyWarningPattern = new RegExp(`${ansi}warning${ansi} "[^"]+" has (?:unmet|incorrect) peer dependency "[^"]+"\\.\n`, 'g');
function isUsingYarn(projectRoot) {
const workspaceRoot = find_yarn_workspace_root_1.default(projectRoot);
if (workspaceRoot) {
return fs_extra_1.default.existsSync(path_1.default.join(workspaceRoot, 'yarn.lock'));
}
else {
return fs_extra_1.default.existsSync(path_1.default.join(projectRoot, 'yarn.lock'));
}
}
exports.isUsingYarn = isUsingYarn;
class NpmStderrTransform extends stream_1.Transform {
_transform(chunk, encoding, callback) {
this.push(chunk.toString().replace(npmPeerDependencyWarningPattern, ''));
callback();
}
}
class YarnStderrTransform extends stream_1.Transform {
_transform(chunk, encoding, callback) {
this.push(chunk.toString().replace(yarnPeerDependencyWarningPattern, ''));
callback();
}
}
class NpmPackageManager {
constructor({ cwd, log }) {
this.log = log || console.log;
this.options = { cwd, stdio: ['inherit', 'inherit', 'pipe'] };
}
get name() {
return 'npm';
}
installAsync() {
return __awaiter(this, void 0, void 0, function* () {
yield this._runAsync(['install']);
});
}
addAsync(...names) {
return __awaiter(this, void 0, void 0, function* () {
const { versioned, unversioned } = this._parseSpecs(names);
if (versioned.length) {
yield this._patchAsync(versioned, 'dependencies');
yield this._runAsync(['install']);
}
if (unversioned.length) {
yield this._runAsync(['install', '--save', ...unversioned.map(spec => spec.raw)]);
}
});
}
addDevAsync(...names) {
return __awaiter(this, void 0, void 0, function* () {
const { versioned, unversioned } = this._parseSpecs(names);
if (versioned.length) {
yield this._patchAsync(versioned, 'devDependencies');
yield this._runAsync(['install']);
}
if (unversioned.length) {
yield this._runAsync(['install', '--save-dev', ...unversioned.map(spec => spec.raw)]);
}
});
}
// Private
_runAsync(args) {
return __awaiter(this, void 0, void 0, function* () {
this.log(`> npm ${args.join(' ')}`);
const promise = spawn_async_1.default('npm', [...args], this.options);
if (promise.child.stderr) {
promise.child.stderr
.pipe(split_1.default(/\r?\n/, (line) => line + '\n'))
.pipe(new NpmStderrTransform())
.pipe(process.stderr);
}
yield promise;
});
}
_parseSpecs(names) {
const result = { versioned: [], unversioned: [] };
names
.map(name => npm_package_arg_1.default(name))
.forEach(spec => {
if (spec.rawSpec) {
result.versioned.push(spec);
}
else {
result.unversioned.push(spec);
}
});
return result;
}
_patchAsync(specs, packageType) {
return __awaiter(this, void 0, void 0, function* () {
const pkgPath = path_1.default.join(this.options.cwd || '.', 'package.json');
const pkgRaw = yield fs_extra_1.default.readFile(pkgPath, { encoding: 'utf8', flag: 'r' });
const pkg = JSON.parse(pkgRaw);
specs.forEach(spec => {
pkg[packageType] = pkg[packageType] || {};
pkg[packageType][spec.name] = spec.rawSpec;
});
yield fs_extra_1.default.writeJson(pkgPath, pkg, {
spaces: detect_indent_1.default(pkgRaw).indent,
EOL: detect_newline_1.default(pkgRaw),
});
});
}
}
exports.NpmPackageManager = NpmPackageManager;
class YarnPackageManager {
constructor({ cwd, log }) {
this.log = log || console.log;
this.options = {
cwd,
stdio: ['inherit', 'inherit', 'pipe'],
};
}
get name() {
return 'Yarn';
}
installAsync() {
return __awaiter(this, void 0, void 0, function* () {
yield this._runAsync(['install']);
});
}
addAsync(...names) {
return __awaiter(this, void 0, void 0, function* () {
yield this._runAsync(['add', ...names]);
});
}
addDevAsync(...names) {
return __awaiter(this, void 0, void 0, function* () {
yield this._runAsync(['add', '--dev', ...names]);
});
}
// Private
_runAsync(args) {
return __awaiter(this, void 0, void 0, function* () {
this.log(`> yarn ${args.join(' ')}`);
const promise = spawn_async_1.default('yarnpkg', args, this.options);
if (promise.child.stderr) {
promise.child.stderr.pipe(new YarnStderrTransform()).pipe(process.stderr);
}
yield promise;
});
}
}
exports.YarnPackageManager = YarnPackageManager;
function createForProject(projectRoot, options = {}) {
let PackageManager;
if (options.npm) {
PackageManager = NpmPackageManager;
}
else if (options.yarn) {
PackageManager = YarnPackageManager;
}
else if (isUsingYarn(projectRoot)) {
PackageManager = YarnPackageManager;
}
else {
PackageManager = NpmPackageManager;
}
return new PackageManager({ cwd: projectRoot, log: options.log });
}
exports.createForProject = createForProject;
function getModulesPath(projectRoot) {
const workspaceRoot = find_yarn_workspace_root_1.default(path_1.default.resolve(projectRoot)); // Absolute path or null
if (workspaceRoot) {
return path_1.default.resolve(workspaceRoot, 'node_modules');
}
return path_1.default.resolve(projectRoot, 'node_modules');
}
exports.getModulesPath = getModulesPath;
function getPossibleProjectRoot() {
return fs_extra_1.default.realpathSync(process.cwd());
}
exports.getPossibleProjectRoot = getPossibleProjectRoot;
//# sourceMappingURL=PackageManager.js.map
{
"name": "@expo/package-manager",
"version": "0.0.0",
"description": "A library for installing and finding packages in a node project",
"main": "build/PackageManager.js",
"types": "build/PackageManager.d.ts",
"version": "0.0.1-canary-20231125-d600e44",
"description": "A library for installing and finding packages in a project",
"main": "build/index.js",
"types": "build/index.d.ts",
"scripts": {
"watch": "tsc --watch",
"build": "tsc",
"prepare": "yarn run clean && yarn build",
"clean": "rm -rf build ./tsconfig.tsbuildinfo",
"lint": "eslint .",
"test": "jest"
"build": "expo-module build",
"clean": "expo-module clean",
"lint": "expo-module lint",
"prepare": "expo-module clean && expo-module build",
"prepublishOnly": "expo-module prepublishOnly",
"test": "expo-module test",
"typecheck": "expo-module typecheck"
},
"repository": {
"type": "git",
"url": "https://github.com/expo/expo-cli.git",
"directory": "packages/package-manager"
"url": "https://github.com/expo/expo.git",
"directory": "packages/@expo/package-manager"
},

@@ -26,9 +27,11 @@ "keywords": [

"yarn",
"yarnpkg"
"yarnpkg",
"pnpm",
"bun"
],
"license": "MIT",
"bugs": {
"url": "https://github.com/expo/expo-cli/issues"
"url": "https://github.com/expo/expo/issues"
},
"homepage": "https://github.com/expo/expo-cli/tree/master/packages/package-manager#readme",
"homepage": "https://github.com/expo/expo/tree/main/packages/@expo/package-manager#readme",
"files": [

@@ -38,19 +41,26 @@ "build"

"dependencies": {
"@expo/json-file": "0.0.1-canary-20231125-d600e44",
"@expo/spawn-async": "^1.5.0",
"ansi-regex": "^5.0.0",
"detect-indent": "^6.0.0",
"detect-newline": "^3.1.0",
"find-yarn-workspace-root": "^1.2.1",
"fs-extra": "^8.1.0",
"chalk": "^4.0.0",
"find-up": "^5.0.0",
"find-yarn-workspace-root": "~2.0.0",
"js-yaml": "^3.13.1",
"micromatch": "^4.0.2",
"npm-package-arg": "^7.0.0",
"split": "^1.0.1",
"stream": "^0.0.2"
"sudo-prompt": "9.1.1"
},
"devDependencies": {
"@expo/babel-preset-cli": "^0.2.0",
"typescript": "3.4.5"
"@types/npm-package-arg": "^6.1.0",
"@types/rimraf": "^3.0.0",
"@types/split": "^1.0.0",
"@types/js-yaml": "^3.12.5",
"@types/micromatch": "^4.0.2",
"expo-module-scripts": "0.0.1-canary-20231125-d600e44"
},
"publishConfig": {
"access": "public"
}
},
"gitHead": "d600e446fb6eaa71a089309b28076f312f0773a3"
}

@@ -6,11 +6,12 @@ <!-- Title -->

<p align="center">A library for installing and finding packages in a project.</p>
<!-- Header -->
<p align="center">
<b>A library for installing and finding packages in a node project</b>
<br/>
<br/>
<a aria-label="Circle CI" href="https://circleci.com/gh/expo/expo-cli/tree/master">
<img alt="Circle CI" src="https://flat.badgen.net/circleci/github/expo/expo-cli?label=Circle%20CI&labelColor=555555&icon=circleci">
</a>
<img src="https://flat.badgen.net/packagephobia/install/@expo/package-manager">
<a href="https://www.npmjs.com/package/@expo/package-manager">
<img src="https://flat.badgen.net/npm/dw/@expo/package-manager" target="_blank" />
</a>
</p>

@@ -35,25 +36,8 @@

const manager = await PackageManager.createForProject(projectRoot);
const manager = PackageManager.createForProject(projectRoot);
await Promise.all([
manager.addDevAsync('@expo/webpack-config'),
manager.addAsync('expo', 'expo-camera'),
manager.addDevAsync(['@expo/webpack-config']),
manager.addAsync(['expo', 'expo-camera']),
]);
```
## License
The Expo source code is made available under the [MIT license](LICENSE). Some of the dependencies are licensed differently, with the BSD license, for example.
<!-- Footer -->
---
<p>
<a aria-label="sponsored by expo" href="http://expo.io">
<img src="https://img.shields.io/badge/SPONSORED%20BY%20EXPO-4630EB.svg?style=for-the-badge" target="_blank" />
</a>
<a aria-label="@expo/package-manager is free to use" href="/LICENSE" target="_blank">
<img align="right" alt="License: MIT" src="https://img.shields.io/badge/License-MIT-success.svg?style=for-the-badge&color=33CC12" target="_blank" />
</a>
</p>

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc