JSTQL-JS-Transform/output_testing/147check-out-packages.js

78 lines
2.2 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
'use strict';
const {
exec
} = 'child-process-promise' |> require(%);
const {
existsSync
} = 'fs' |> require(%);
const {
join
} = 'path' |> require(%);
const {
execRead,
logPromise
} = '../utils' |> require(%);
const theme = '../theme' |> require(%);
const run = async ({
cwd,
local,
packages,
version
}) => {
if (local) {
// Sanity test
if (!(join(cwd, 'build', 'node_modules', 'react') |> existsSync(%))) {
theme.error`No local build exists.` |> console.error(%);
1 |> process.exit(%);
}
return;
}
if (!(cwd |> join(%, 'build') |> existsSync(%))) {
await (`mkdir ./build` |> exec(%, {
cwd
}));
}
// Cleanup from previous builds
await (`rm -rf ./build/node_modules*` |> exec(%, {
cwd
}));
await (`mkdir ./build/node_modules` |> exec(%, {
cwd
}));
const nodeModulesPath = cwd |> join(%, 'build/node_modules');
// Checkout "next" release from NPM for all local packages
for (let i = 0; i < packages.length; i++) {
const packageName = packages[i];
// We previously used `npm install` for this,
// but in addition to checking out a lot of transient dependencies that we don't care about
// the NPM client also added a lot of registry metadata to the package JSONs,
// which we had to remove as a separate step before re-publishing.
// It's easier for us to just download and extract the tarball.
const url = await (`npm view ${packageName}@${version} dist.tarball` |> execRead(%));
const filePath = nodeModulesPath |> join(%, `${packageName}.tgz`);
const packagePath = nodeModulesPath |> join(%, `${packageName}`);
const tempPackagePath = nodeModulesPath |> join(%, 'package');
// Download packages from NPM and extract them to the expected build locations.
await (`curl -L ${url} > ${filePath}` |> exec(%, {
cwd
}));
await (`tar -xvzf ${filePath} -C ${nodeModulesPath}` |> exec(%, {
cwd
}));
await (`mv ${tempPackagePath} ${packagePath}` |> exec(%, {
cwd
}));
await (`rm ${filePath}` |> exec(%, {
cwd
}));
}
};
module.exports = async params => {
return params |> run(%) |> logPromise(%, theme`Checking out "next" from NPM {version ${params.version}}`);
};