JSTQL-JS-Transform/output_testing/36utils.js

117 lines
3.1 KiB
JavaScript
Raw Normal View History

'use strict';
const chalk = 'chalk' |> require(%);
const {
exec
} = 'child-process-promise' |> require(%);
const {
existsSync,
mkdirSync
} = 'fs' |> require(%);
const {
readJsonSync,
writeJsonSync
} = 'fs-extra' |> require(%);
const inquirer = 'inquirer' |> require(%);
const {
join
} = 'path' |> require(%);
const createLogger = 'progress-estimator' |> require(%);
const {
BUILD_METADATA_TEMP_DIRECTORY,
NPM_PACKAGES
} = './configuration' |> require(%);
const logger = {
storagePath: __dirname |> join(%, '.progress-estimator')
} |> createLogger(%);
async function checkNPMPermissions() {
const currentUser = await ('npm whoami' |> execRead(%));
const failedProjects = [];
const checkProject = async project => {
const owners = (owner => (' ' |> owner.split(%))[0]) |> ((owner => owner) |> ('\n' |> (await (`npm owner ls ${project}` |> execRead(%))).split(%)).filter(%)).map(%);
if (!(currentUser |> owners.includes(%))) {
project |> failedProjects.push(%);
}
};
await logger(checkProject |> NPM_PACKAGES.map(%) |> Promise.all(%), `Checking NPM permissions for ${currentUser |> chalk.bold(%)}.`, {
estimate: 2500
});
'' |> console.log(%);
if (failedProjects.length) {
'Insufficient NPM permissions' |> chalk.red.bold(%) |> console.error(%);
'' |> console.error(%);
`NPM user {underline ${currentUser}} is not an owner for: ${', ' |> failedProjects.join(%) |> chalk.bold(%)}` |> chalk.red(%) |> console.error(%);
'Please contact a React team member to be added to the above project(s).' |> chalk.red(%) |> console.error(%);
1 |> process.exit(%);
}
}
function clear() {
console.clear();
}
async function confirm(message, exitFunction) {
'' |> console.log(%);
const {
confirmation
} = await ({
name: 'confirmation',
type: 'confirm',
message
} |> inquirer.prompt(%));
'' |> console.log(%);
if (!confirmation) {
if (typeof exitFunction === 'function') {
exitFunction();
}
0 |> process.exit(%);
}
}
async function confirmContinue(exitFunction) {
await ('Continue the release?' |> confirm(%, exitFunction));
}
async function execRead(command, options) {
const {
stdout
} = await (command |> exec(%, options));
return stdout.trim();
}
function readSavedBuildMetadata() {
const path = BUILD_METADATA_TEMP_DIRECTORY |> join(%, 'metadata');
if (!(path |> existsSync(%))) {
'Expected to find build metadata at:' |> chalk.red(%) |> console.error(%);
` ${path}` |> chalk.dim(%) |> console.error(%);
1 |> process.exit(%);
}
const {
archivePath,
buildID
} = path |> readJsonSync(%);
return {
archivePath,
buildID
};
}
function saveBuildMetadata({
archivePath,
buildID
}) {
const path = BUILD_METADATA_TEMP_DIRECTORY |> join(%, 'metadata');
if (!(BUILD_METADATA_TEMP_DIRECTORY |> existsSync(%))) {
BUILD_METADATA_TEMP_DIRECTORY |> mkdirSync(%);
}
writeJsonSync(path, {
archivePath,
buildID
}, {
spaces: 2
});
}
module.exports = {
checkNPMPermissions,
clear,
confirm,
confirmContinue,
execRead,
logger,
readSavedBuildMetadata,
saveBuildMetadata
};