@nerdwallet/shepherd
Advanced tools
Comparing version 1.6.1 to 1.7.0
@@ -0,1 +1,8 @@ | ||
# [1.7.0](https://github.com/NerdWalletOSS/shepherd/compare/v1.6.1...v1.7.0) (2020-04-10) | ||
### Features | ||
* semantic-release config ([#135](https://github.com/NerdWalletOSS/shepherd/issues/135)) ([634a293](https://github.com/NerdWalletOSS/shepherd/commit/634a29371fbf22b2a9302916156eb39d59ebbd42)) | ||
## [1.6.1](https://github.com/NerdWalletOSS/shepherd/compare/v1.6.0...v1.6.1) (2020-04-10) | ||
@@ -2,0 +9,0 @@ |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -15,3 +16,3 @@ }); | ||
/* eslint-disable class-methods-use-this */ | ||
const fs_extra_promise_1 = __importDefault(require("fs-extra-promise")); | ||
const fs_extra_1 = __importDefault(require("fs-extra")); | ||
const promise_1 = __importDefault(require("simple-git/promise")); | ||
@@ -27,3 +28,3 @@ class GitAdapter { | ||
const localPath = this.getRepoDir(repo); | ||
if ((yield fs_extra_promise_1.default.existsAsync(localPath)) && (yield this.git(repo).checkIsRepo())) { | ||
if ((yield fs_extra_1.default.pathExists(localPath)) && (yield this.git(repo).checkIsRepo())) { | ||
// Repo already exists; just fetch | ||
@@ -30,0 +31,0 @@ yield this.git(repo).fetch('origin'); |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -96,3 +97,3 @@ }); | ||
}); | ||
return Object.assign({}, repo, { defaultBranch: data.default_branch }); | ||
return Object.assign(Object.assign({}, repo), { defaultBranch: data.default_branch }); | ||
}); | ||
@@ -133,3 +134,5 @@ } | ||
pushRepo(repo, force) { | ||
const _super = name => super[name]; | ||
const _super = Object.create(null, { | ||
pushRepo: { get: () => super.pushRepo } | ||
}); | ||
return __awaiter(this, void 0, void 0, function* () { | ||
@@ -151,3 +154,3 @@ let shouldForce = false; | ||
} | ||
yield _super("pushRepo").call(this, repo, force || shouldForce); | ||
yield _super.pushRepo.call(this, repo, force || shouldForce); | ||
}); | ||
@@ -288,6 +291,8 @@ } | ||
getEnvironmentVariables(repo) { | ||
const _super = name => super[name]; | ||
const _super = Object.create(null, { | ||
getEnvironmentVariables: { get: () => super.getEnvironmentVariables } | ||
}); | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const superEnvVars = yield _super("getEnvironmentVariables").call(this, repo); | ||
return Object.assign({}, superEnvVars, { SHEPHERD_GITHUB_REPO_OWNER: repo.owner, SHEPHERD_GITHUB_REPO_NAME: repo.name }); | ||
const superEnvVars = yield _super.getEnvironmentVariables.call(this, repo); | ||
return Object.assign(Object.assign({}, superEnvVars), { SHEPHERD_GITHUB_REPO_OWNER: repo.owner, SHEPHERD_GITHUB_REPO_NAME: repo.name }); | ||
}); | ||
@@ -294,0 +299,0 @@ } |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -39,3 +40,3 @@ }); | ||
describe('mapRepoAfterCheckout', () => { | ||
it('saves the default branch', () => __awaiter(this, void 0, void 0, function* () { | ||
it('saves the default branch', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const mocktokit = { | ||
@@ -56,3 +57,3 @@ repos: { | ||
const mappedRepo = yield adapter.mapRepoAfterCheckout(repo); | ||
expect(mappedRepo).toEqual(Object.assign({}, repo, { defaultBranch: 'develop' })); | ||
expect(mappedRepo).toEqual(Object.assign(Object.assign({}, repo), { defaultBranch: 'develop' })); | ||
})); | ||
@@ -80,3 +81,3 @@ }); | ||
}; | ||
it('creates a new PR if one does not exist', () => __awaiter(this, void 0, void 0, function* () { | ||
it('creates a new PR if one does not exist', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const octokit = mockPrOctokit({ data: [] }); | ||
@@ -95,3 +96,3 @@ const adapter = new github_1.default(mockMigrationContext(), octokit); | ||
})); | ||
it('updates a PR if one exists and is open', () => __awaiter(this, void 0, void 0, function* () { | ||
it('updates a PR if one exists and is open', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const octokit = mockPrOctokit({ | ||
@@ -114,3 +115,3 @@ data: [{ | ||
})); | ||
it('does not update a closed PR', () => __awaiter(this, void 0, void 0, function* () { | ||
it('does not update a closed PR', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const octokit = mockPrOctokit({ | ||
@@ -117,0 +118,0 @@ data: [{ |
#!/usr/bin/env node | ||
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -34,3 +35,4 @@ }); | ||
const logger_1 = __importDefault(require("./logger")); | ||
const shepherdDir = path_1.default.join(os_1.homedir(), '.shepherd'); | ||
const { SHEPHERD_DOT_DIRECTORY } = process.env; | ||
const shepherdDir = SHEPHERD_DOT_DIRECTORY || path_1.default.join(os_1.homedir(), '.shepherd'); | ||
const prefs = new preferences_1.default('com.nerdwallet.shepherd', { | ||
@@ -44,3 +46,3 @@ workingDirectory: shepherdDir, | ||
const logger = new logger_1.default(); | ||
const handleCommand = (handler) => (migration, options) => __awaiter(this, void 0, void 0, function* () { | ||
const handleCommand = (handler) => (migration, options) => __awaiter(void 0, void 0, void 0, function* () { | ||
try { | ||
@@ -47,0 +49,0 @@ const spec = migration_spec_1.loadSpec(migration); |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -16,5 +17,5 @@ }); | ||
const for_each_repo_1 = __importDefault(require("../util/for-each-repo")); | ||
exports.default = (context, options) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context, options) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { adapter, logger } = context; | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const resetSpinner = logger.spinner('Removing uncommitted changes'); | ||
@@ -21,0 +22,0 @@ try { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -14,11 +15,11 @@ }); | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const fs_extra_promise_1 = __importDefault(require("fs-extra-promise")); | ||
const fs_extra_1 = __importDefault(require("fs-extra")); | ||
const execute_steps_1 = __importDefault(require("../util/execute-steps")); | ||
const for_each_repo_1 = __importDefault(require("../util/for-each-repo")); | ||
const persisted_data_1 = require("../util/persisted-data"); | ||
const removeRepoDirectories = (adapter, repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield fs_extra_promise_1.default.removeAsync(adapter.getRepoDir(repo)); | ||
yield fs_extra_promise_1.default.removeAsync(adapter.getDataDir(repo)); | ||
const removeRepoDirectories = (adapter, repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
yield fs_extra_1.default.remove(adapter.getRepoDir(repo)); | ||
yield fs_extra_1.default.remove(adapter.getDataDir(repo)); | ||
}); | ||
exports.default = (context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { migration: { selectedRepos }, adapter, logger, } = context; | ||
@@ -42,3 +43,3 @@ function onRetry(numSeconds) { | ||
const options = { warnMissingDirectory: false }; | ||
yield for_each_repo_1.default(context, options, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, options, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const spinner = logger.spinner('Checking out repo'); | ||
@@ -55,3 +56,3 @@ try { | ||
// We need to create the data directory before running should_migrate | ||
yield fs_extra_promise_1.default.mkdirsAsync(adapter.getDataDir(repo)); | ||
yield fs_extra_1.default.mkdirs(adapter.getDataDir(repo)); | ||
logger.info('> Running should_migrate steps'); | ||
@@ -58,0 +59,0 @@ const stepsResults = yield execute_steps_1.default(context, repo, 'should_migrate'); |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -15,5 +16,5 @@ }); | ||
const for_each_repo_1 = __importDefault(require("../util/for-each-repo")); | ||
exports.default = (context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { adapter, logger, } = context; | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const spinner = logger.spinner('Committing changes'); | ||
@@ -20,0 +21,0 @@ try { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -11,3 +12,3 @@ }); | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.default = (context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { migration: { repos }, logger, adapter, } = context; | ||
@@ -14,0 +15,0 @@ for (const repo of (repos || [])) { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -17,3 +18,3 @@ }); | ||
const generate_pr_message_1 = require("../util/generate-pr-message"); | ||
exports.default = (context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { migration: { spec }, logger, } = context; | ||
@@ -24,3 +25,3 @@ if (!spec.hooks.pr_message || spec.hooks.pr_message.length === 0) { | ||
} | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const spinner = logger.spinner('Generating PR message'); | ||
@@ -27,0 +28,0 @@ const stepResults = yield execute_steps_1.default(context, repo, 'pr_message', false); |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -15,5 +16,5 @@ }); | ||
const for_each_repo_1 = __importDefault(require("../util/for-each-repo")); | ||
exports.default = (context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { logger, adapter } = context; | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const spinner = logger.spinner('Determining repo PR status'); | ||
@@ -20,0 +21,0 @@ try { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -17,3 +18,3 @@ }); | ||
const generate_pr_message_1 = require("../util/generate-pr-message"); | ||
exports.default = (context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { migration: { spec }, logger, } = context; | ||
@@ -24,3 +25,3 @@ if (!spec.hooks.pr_message || spec.hooks.pr_message.length === 0) { | ||
} | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const spinner = logger.spinner('Generating PR message'); | ||
@@ -27,0 +28,0 @@ const stepResults = yield execute_steps_1.default(context, repo, 'pr_message', false); |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -15,5 +16,5 @@ }); | ||
const for_each_repo_1 = __importDefault(require("../util/for-each-repo")); | ||
exports.default = (context, options) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context, options) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { adapter, logger } = context; | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const spinner = logger.spinner('Pushing changes'); | ||
@@ -20,0 +21,0 @@ try { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -15,5 +16,5 @@ }); | ||
const for_each_repo_1 = __importDefault(require("../util/for-each-repo")); | ||
exports.default = (context) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { adapter, logger } = context; | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(this, void 0, void 0, function* () { | ||
yield for_each_repo_1.default(context, (repo) => __awaiter(void 0, void 0, void 0, function* () { | ||
const spinner = logger.spinner('Resetting changes'); | ||
@@ -20,0 +21,0 @@ try { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -12,3 +13,3 @@ }); | ||
const child_process_promise_1 = require("child-process-promise"); | ||
exports.default = (context, repo, command) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context, repo, command) => __awaiter(void 0, void 0, void 0, function* () { | ||
const repoDir = context.adapter.getRepoDir(repo); | ||
@@ -21,3 +22,3 @@ const dataDir = context.adapter.getDataDir(repo); | ||
cwd: repoDir, | ||
env: Object.assign({}, process.env, { SHEPHERD_REPO_DIR: repoDir, SHEPHERD_DATA_DIR: dataDir, SHEPHERD_MIGRATION_DIR: migrationDir, SHEPHERD_BASE_BRANCH: baseBranch }, adapterEnvironmentVars), | ||
env: Object.assign(Object.assign(Object.assign({}, process.env), { SHEPHERD_REPO_DIR: repoDir, SHEPHERD_DATA_DIR: dataDir, SHEPHERD_MIGRATION_DIR: migrationDir, SHEPHERD_BASE_BRANCH: baseBranch }), adapterEnvironmentVars), | ||
shell: true, | ||
@@ -24,0 +25,0 @@ capture: ['stdout', 'stderr'], |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -16,3 +17,3 @@ }); | ||
const exec_in_repo_1 = __importDefault(require("../util/exec-in-repo")); | ||
exports.default = (context, repo, phase, showOutput = true) => __awaiter(this, void 0, void 0, function* () { | ||
exports.default = (context, repo, phase, showOutput = true) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { migration: { spec: { hooks, }, }, logger, } = context; | ||
@@ -19,0 +20,0 @@ const results = { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -15,4 +16,4 @@ }); | ||
const chalk_1 = __importDefault(require("chalk")); | ||
const fs_extra_promise_1 = require("fs-extra-promise"); | ||
exports.default = (context, param1, param2) => __awaiter(this, void 0, void 0, function* () { | ||
const fs_extra_1 = __importDefault(require("fs-extra")); | ||
exports.default = (context, param1, param2) => __awaiter(void 0, void 0, void 0, function* () { | ||
const { migration: { repos: migrationRepos, selectedRepos, }, logger, adapter, } = context; | ||
@@ -54,3 +55,3 @@ let handler; | ||
const repoDir = adapter.getRepoDir(repo); | ||
if (warnMissingDirectory && !(yield fs_extra_promise_1.existsAsync(repoDir))) { | ||
if (warnMissingDirectory && !(yield fs_extra_1.default.pathExists(repoDir))) { | ||
logger.error(`Directory ${repoDir} does not exist`); | ||
@@ -57,0 +58,0 @@ } |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -53,3 +54,3 @@ }); | ||
specs.forEach((spec) => { | ||
it(spec.name, () => __awaiter(this, void 0, void 0, function* () { | ||
it(spec.name, () => __awaiter(void 0, void 0, void 0, function* () { | ||
const results = { | ||
@@ -56,0 +57,0 @@ succeeded: true, |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -12,4 +13,4 @@ }); | ||
const wait = (timeout) => new Promise((resolve) => setTimeout(resolve, timeout)); | ||
exports.paginate = (octokit, method, extractItems = (d) => d, onRetry) => (options) => __awaiter(this, void 0, void 0, function* () { | ||
let response = yield method(Object.assign({}, options, { per_page: 100 })); | ||
exports.paginate = (octokit, method, extractItems = (d) => d, onRetry) => (options) => __awaiter(void 0, void 0, void 0, function* () { | ||
let response = yield method(Object.assign(Object.assign({}, options), { per_page: 100 })); | ||
let data = extractItems(response.data); | ||
@@ -16,0 +17,0 @@ while (octokit.hasNextPage(response)) { |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -14,3 +15,3 @@ }); | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const fs_extra_promise_1 = __importDefault(require("fs-extra-promise")); | ||
const fs_extra_1 = __importDefault(require("fs-extra")); | ||
const js_yaml_1 = __importDefault(require("js-yaml")); | ||
@@ -25,8 +26,8 @@ const lodash_1 = require("lodash"); | ||
*/ | ||
const migrateToJsonIfNeeded = (migrationContext) => __awaiter(this, void 0, void 0, function* () { | ||
const migrateToJsonIfNeeded = (migrationContext) => __awaiter(void 0, void 0, void 0, function* () { | ||
const legacyFile = getLegacyRepoListFile(migrationContext); | ||
if (yield fs_extra_promise_1.default.existsAsync(legacyFile)) { | ||
const data = js_yaml_1.default.safeLoad(yield fs_extra_promise_1.default.readFileAsync(legacyFile, 'utf8')); | ||
yield fs_extra_promise_1.default.writeFileAsync(getRepoListFile(migrationContext), jsonStringify(data)); | ||
yield fs_extra_promise_1.default.unlinkAsync(legacyFile); | ||
if (yield fs_extra_1.default.pathExists(legacyFile)) { | ||
const data = js_yaml_1.default.safeLoad(yield fs_extra_1.default.readFile(legacyFile, 'utf8')); | ||
yield fs_extra_1.default.outputFile(getRepoListFile(migrationContext), jsonStringify(data)); | ||
yield fs_extra_1.default.remove(legacyFile); | ||
} | ||
@@ -40,12 +41,12 @@ }); | ||
}; | ||
const loadRepoList = (migrationContext) => __awaiter(this, void 0, void 0, function* () { | ||
const loadRepoList = (migrationContext) => __awaiter(void 0, void 0, void 0, function* () { | ||
yield migrateToJsonIfNeeded(migrationContext); | ||
const repoListFile = getRepoListFile(migrationContext); | ||
if (!(yield fs_extra_promise_1.default.existsAsync(repoListFile))) { | ||
if (!(yield fs_extra_1.default.pathExists(repoListFile))) { | ||
return null; | ||
} | ||
return JSON.parse(yield fs_extra_promise_1.default.readFileAsync(repoListFile, 'utf8')); | ||
return JSON.parse(yield fs_extra_1.default.readFile(repoListFile, 'utf8')); | ||
}); | ||
exports.loadRepoList = loadRepoList; | ||
const updateRepoList = (migrationContext, checkedOutRepos, discardedRepos) => __awaiter(this, void 0, void 0, function* () { | ||
const updateRepoList = (migrationContext, checkedOutRepos, discardedRepos) => __awaiter(void 0, void 0, void 0, function* () { | ||
// We need to keep the list of repos in sync with what's actually on disk | ||
@@ -58,3 +59,3 @@ // To do this, we'll load the existing list, delete any repos that were not | ||
// No repos stored yet, we can update this list directly | ||
yield fs_extra_promise_1.default.writeFileAsync(getRepoListFile(migrationContext), JSON.stringify(checkedOutRepos)); | ||
yield fs_extra_1.default.outputFile(getRepoListFile(migrationContext), JSON.stringify(checkedOutRepos)); | ||
return checkedOutRepos; | ||
@@ -64,3 +65,3 @@ } | ||
const repos = lodash_1.unionWith(lodash_1.differenceWith(existingRepos, discardedRepos, reposEqual), checkedOutRepos, reposEqual); | ||
yield fs_extra_promise_1.default.writeFileAsync(getRepoListFile(migrationContext), JSON.stringify(repos)); | ||
yield fs_extra_1.default.outputFile(getRepoListFile(migrationContext), JSON.stringify(repos)); | ||
return repos; | ||
@@ -67,0 +68,0 @@ }); |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
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); } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
@@ -15,15 +16,9 @@ }); | ||
/* eslint-env jest */ | ||
const fs_extra_promise_1 = __importDefault(require("fs-extra-promise")); | ||
const jest_plugin_fs_1 = __importDefault(require("jest-plugin-fs")); | ||
const js_yaml_1 = __importDefault(require("js-yaml")); | ||
const fs_extra_1 = __importDefault(require("fs-extra")); | ||
const lodash_1 = require("lodash"); | ||
const path_1 = __importDefault(require("path")); | ||
const persisted_data_1 = require("./persisted-data"); | ||
jest.mock('fs', () => require('jest-plugin-fs/mock')); // eslint-disable-line global-require | ||
const reposFixture = [{ | ||
owner: 'NerdWallet', | ||
name: 'test', | ||
}]; | ||
const makeContext = () => ({ | ||
const makeContext = (workingDirectory) => ({ | ||
migration: { | ||
workingDirectory: '/migration', | ||
workingDirectory, | ||
}, | ||
@@ -35,21 +30,23 @@ adapter: { | ||
describe('persisted-data', () => { | ||
beforeEach(() => jest_plugin_fs_1.default.mock({ | ||
'/migration/repos.json': JSON.stringify(reposFixture), | ||
it('loads repo list from a file', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const workingDirectory = path_1.default.join(__dirname, '../../fixtures/artifacts/.shepherd/load-repo-from-file/'); | ||
const repos = yield persisted_data_1.loadRepoList(makeContext(workingDirectory)); | ||
expect(repos).toEqual([{ 'defaultBranch': 'master', 'name': 'shepherd', 'owner': 'NerdWalletOSS' }]); | ||
})); | ||
afterEach(() => jest_plugin_fs_1.default.restore()); | ||
it('loads repo list from a file', () => __awaiter(this, void 0, void 0, function* () { | ||
const repos = yield persisted_data_1.loadRepoList(makeContext()); | ||
expect(repos).toEqual([{ owner: 'NerdWallet', name: 'test' }]); | ||
})); | ||
it('returns null if the file does not exist', () => __awaiter(this, void 0, void 0, function* () { | ||
yield fs_extra_promise_1.default.unlinkAsync('/migration/repos.json'); | ||
const repos = yield persisted_data_1.loadRepoList(makeContext()); | ||
it('returns null if the file does not exist', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const workingDirectory = path_1.default.join(__dirname, '../../fixtures/artifacts/.shepherd/no-repos-json/'); | ||
const repos = yield persisted_data_1.loadRepoList(makeContext(workingDirectory)); | ||
expect(repos).toEqual(null); | ||
})); | ||
it('migrates from a YAML file to a JSON file', () => __awaiter(this, void 0, void 0, function* () { | ||
const repos = yield persisted_data_1.loadRepoList(makeContext()); | ||
expect(repos).toEqual([{ owner: 'NerdWallet', name: 'test' }]); | ||
it('migrates from a YAML file to a JSON file', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const workingDirectory = path_1.default.join(__dirname, '../../fixtures/artifacts/.shepherd/yaml-to-json/'); | ||
const source = path_1.default.join(workingDirectory, 'repos-artifact.yml'); | ||
const destination = path_1.default.join(workingDirectory, 'repos.yml'); | ||
fs_extra_1.default.copyFileSync(source, destination); | ||
const repos = yield persisted_data_1.loadRepoList(makeContext(workingDirectory)); | ||
fs_extra_1.default.unlinkSync(path_1.default.join(workingDirectory, 'repos.json')); | ||
expect(repos).toEqual([{ 'defaultBranch': 'master', 'name': 'shepherd', 'owner': 'NerdWalletOSS' }]); | ||
})); | ||
it('creates a new repos file if one does not exist', () => __awaiter(this, void 0, void 0, function* () { | ||
yield fs_extra_promise_1.default.unlinkAsync('/migration/repos.json'); | ||
it('creates a new repos file if one does not exist', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const workingDirectory = path_1.default.join(__dirname, '../../fixtures/artifacts/.shepherd/creates-new-repos-file/'); | ||
const checkedOutRepos = [{ | ||
@@ -59,3 +56,3 @@ name: 'test2', | ||
}]; | ||
const repos = yield persisted_data_1.updateRepoList(makeContext(), checkedOutRepos, []); | ||
const repos = yield persisted_data_1.updateRepoList(makeContext(workingDirectory), checkedOutRepos, []); | ||
const expected = [{ | ||
@@ -66,5 +63,9 @@ name: 'test2', | ||
expect(repos).toEqual(expected); | ||
expect(JSON.parse(jest_plugin_fs_1.default.files()['/migration/repos.json'])).toEqual(expected); | ||
const filePath = path_1.default.join(workingDirectory, 'repos.json'); | ||
const result = JSON.parse((yield fs_extra_1.default.readFile(filePath)).toString()); | ||
fs_extra_1.default.unlinkSync(filePath); | ||
expect(result).toEqual(expected); | ||
})); | ||
it('removes repo that was discarded', () => __awaiter(this, void 0, void 0, function* () { | ||
it('removes repo that was discarded', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const workingDirectory = path_1.default.join(__dirname, '../../fixtures/artifacts/.shepherd/removes-repo/'); | ||
const discardedRepos = [{ | ||
@@ -74,23 +75,35 @@ owner: 'NerdWallet', | ||
}]; | ||
const repos = yield persisted_data_1.updateRepoList(makeContext(), [], discardedRepos); | ||
const repos = yield persisted_data_1.updateRepoList(makeContext(workingDirectory), [], discardedRepos); | ||
const filePath = path_1.default.join(workingDirectory, 'repos.json'); | ||
const result = JSON.parse((yield fs_extra_1.default.readFile(filePath)).toString()); | ||
fs_extra_1.default.unlinkSync(filePath); | ||
expect(repos).toEqual([]); | ||
expect(JSON.parse(jest_plugin_fs_1.default.files()['/migration/repos.json'])).toEqual([]); | ||
expect(result).toEqual([]); | ||
})); | ||
it('adds repo that was checked out', () => __awaiter(this, void 0, void 0, function* () { | ||
const checkedOutRepos = [{ | ||
it('adds repo that was checked out', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const workingDirectory = path_1.default.join(__dirname, '../../fixtures/artifacts/.shepherd/adds-checked-out-repo/'); | ||
const source = path_1.default.join(workingDirectory, 'repos-org.json'); | ||
const destination = path_1.default.join(workingDirectory, 'repos.json'); | ||
fs_extra_1.default.copyFileSync(source, destination); | ||
const checkedOutRepos = [ | ||
{ | ||
name: 'test2', | ||
owner: 'NerdWallet', | ||
}]; | ||
const repos = yield persisted_data_1.updateRepoList(makeContext(), checkedOutRepos, []); | ||
const expected = [{ | ||
} | ||
]; | ||
yield persisted_data_1.updateRepoList(makeContext(workingDirectory), checkedOutRepos, [{ | ||
name: 'test', | ||
owner: 'NerdWallet', | ||
}, { | ||
}]); | ||
const expected = [{ | ||
name: 'test2', | ||
owner: 'NerdWallet', | ||
}]; | ||
expect(repos).toEqual(expected); | ||
expect(JSON.parse(jest_plugin_fs_1.default.files()['/migration/repos.json'])).toEqual(expected); | ||
const filePath = path_1.default.join(workingDirectory, 'repos.json'); | ||
const result = JSON.parse((yield fs_extra_1.default.readFile(filePath)).toString()); | ||
fs_extra_1.default.unlinkSync(filePath); | ||
expect(result).toEqual(expected); | ||
})); | ||
it('removes and adds repos at the same time', () => __awaiter(this, void 0, void 0, function* () { | ||
it('removes and adds repos at the same time', () => __awaiter(void 0, void 0, void 0, function* () { | ||
const workingDirectory = path_1.default.join(__dirname, '../../fixtures/artifacts/.shepherd/removes-adds-repos/'); | ||
const checkedOutRepos = [{ | ||
@@ -104,3 +117,3 @@ name: 'test2', | ||
}]; | ||
const repos = yield persisted_data_1.updateRepoList(makeContext(), checkedOutRepos, discardedRepos); | ||
const repos = yield persisted_data_1.updateRepoList(makeContext(workingDirectory), checkedOutRepos, discardedRepos); | ||
const expected = [{ | ||
@@ -111,21 +124,8 @@ owner: 'NerdWallet', | ||
expect(repos).toEqual(expected); | ||
expect(JSON.parse(jest_plugin_fs_1.default.files()['/migration/repos.json'])).toEqual(expected); | ||
const filePath = path_1.default.join(workingDirectory, 'repos.json'); | ||
const result = JSON.parse((yield fs_extra_1.default.readFile(filePath)).toString()); | ||
fs_extra_1.default.unlinkSync(filePath); | ||
expect(result).toEqual(expected); | ||
})); | ||
}); | ||
describe('persisted-data migration', () => { | ||
beforeEach(() => jest_plugin_fs_1.default.mock({ | ||
'/migration/repos.yml': js_yaml_1.default.dump(reposFixture), | ||
})); | ||
afterEach(() => jest_plugin_fs_1.default.restore()); | ||
it('migrates from a YAML file to a JSON file when loadRepoList is called', () => __awaiter(this, void 0, void 0, function* () { | ||
yield persisted_data_1.loadRepoList(makeContext()); | ||
expect(JSON.parse(jest_plugin_fs_1.default.files()['/migration/repos.json'])).toEqual(reposFixture); | ||
expect(jest_plugin_fs_1.default.files()['/migration/repos.yml']).toBe(undefined); | ||
})); | ||
it('migrates from a YAML file to a JSON file when updateRepoList is called', () => __awaiter(this, void 0, void 0, function* () { | ||
yield persisted_data_1.updateRepoList(makeContext(), [], []); | ||
expect(JSON.parse(jest_plugin_fs_1.default.files()['/migration/repos.json'])).toEqual(reposFixture); | ||
expect(jest_plugin_fs_1.default.files()['/migration/repos.yml']).toBe(undefined); | ||
})); | ||
}); | ||
//# sourceMappingURL=persisted-data.test.js.map |
{ | ||
"name": "@nerdwallet/shepherd", | ||
"version": "1.6.1", | ||
"version": "1.7.0", | ||
"description": "A utility for applying code changes across many repositories", | ||
@@ -55,4 +55,3 @@ "keywords": [ | ||
"commander": "^2.16.0", | ||
"fs-extra": "^6.0.1", | ||
"fs-extra-promise": "^1.0.1", | ||
"fs-extra": "^8.1.0", | ||
"js-yaml": "^3.13.1", | ||
@@ -69,16 +68,13 @@ "lodash": "^4.17.15", | ||
"@semantic-release/git": "^9.0.0", | ||
"@types/fs-extra": "^5.0.4", | ||
"@types/fs-extra-promise": "^1.0.7", | ||
"@types/fs-extra": "^8.1.0", | ||
"@types/hapi__joi": "^16.0.12", | ||
"@types/jest": "^23.3.0", | ||
"@types/lodash": "^4.14.112", | ||
"@types/jest": "^25.2.1", | ||
"@types/lodash": "^4.14.149", | ||
"@types/log-symbols": "^2.0.0", | ||
"@types/node": "^10.5.2", | ||
"@types/ora": "^3.2.0", | ||
"jest": "^23.6.0", | ||
"jest-plugin-fs": "^2.9.0", | ||
"@types/node": "^10.17.19", | ||
"jest": "^25.3.0", | ||
"semantic-release": "^17.0.4", | ||
"ts-jest": "^23.0.1", | ||
"tslint": "^5.11.0", | ||
"typescript": "^3.0.1" | ||
"ts-jest": "^25.3.1", | ||
"tslint": "^6.1.1", | ||
"typescript": "^3.8.3" | ||
}, | ||
@@ -85,0 +81,0 @@ "publishConfig": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
172149
14
13
2033
11
+ Addedfs-extra@8.1.0(transitive)
- Removedfs-extra-promise@^1.0.1
- Removedbluebird@3.7.2(transitive)
- Removedfs-extra@2.1.26.0.1(transitive)
- Removedfs-extra-promise@1.0.1(transitive)
- Removedjsonfile@2.4.0(transitive)
Updatedfs-extra@^8.1.0