2019-05-15 01:25:46 +03:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
const packlist = require("npm-packlist");
|
|
|
|
const tar = require("tar");
|
2019-08-25 09:39:20 +03:00
|
|
|
|
|
|
|
const keccak256 = (function() {
|
|
|
|
try {
|
|
|
|
return require("../packages/keccak256").keccak256;
|
|
|
|
} catch (error) {
|
|
|
|
console.log("Cannot load Keccak256 (maybe not built yet? Not really a problem for most things)");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
})();
|
|
|
|
|
2019-05-15 01:25:46 +03:00
|
|
|
const { dirnames, loadPackage, ROOT } = require("./depgraph");
|
|
|
|
const { resolve, saveJson } = require("./utils");
|
|
|
|
|
|
|
|
function savePackage(dirname, info) {
|
|
|
|
return saveJson(resolve(ROOT, dirname, "package.json"), info);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function createTarball(dirname) {
|
|
|
|
let base = resolve(ROOT, dirname);
|
|
|
|
|
|
|
|
// From NPM publish, create the packed version
|
|
|
|
let files = await packlist({ path: base });
|
|
|
|
files = files.map((f) => ("./" + f));
|
|
|
|
|
|
|
|
let options = {
|
|
|
|
cwd: base,
|
|
|
|
prefix: 'package/',
|
|
|
|
portable: true,
|
|
|
|
sync: true,
|
|
|
|
// Provide a specific date in the 1980s for the benefit of zip,
|
|
|
|
// which is confounded by files dated at the Unix epoch 0.
|
|
|
|
mtime: new Date('1985-10-26T08:15:00.000Z'),
|
|
|
|
gzip: true
|
|
|
|
};
|
|
|
|
|
|
|
|
// Take the hash of the package sans
|
|
|
|
return tar.create(options, files).read();
|
|
|
|
}
|
|
|
|
|
|
|
|
async function updatePackage(dirname, values) {
|
|
|
|
let info = loadPackage(dirname);
|
|
|
|
|
|
|
|
if (values) {
|
|
|
|
for (let key in values) {
|
|
|
|
info[key] = values[key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
["dependencies", "devDependencies"].forEach((key) => {
|
|
|
|
let deps = info[key] || [];
|
|
|
|
for (let name in deps) {
|
|
|
|
if (name.substring(0, "@ethersproject".length) === "@ethersproject" || name === "ethers") {
|
|
|
|
deps[name] = ">5.0.0-beta.0";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
*/
|
|
|
|
|
|
|
|
//if (dirname !== "ethers") {
|
|
|
|
// delete info.publishConfig.tag;
|
|
|
|
//}
|
|
|
|
|
|
|
|
// Create a normalized version sans tarballHash to compute the tarballHash
|
|
|
|
delete info.tarballHash;
|
|
|
|
savePackage(dirname, info);
|
|
|
|
|
|
|
|
// Compute the tarballHash
|
|
|
|
let tarball = await createTarball(dirname);
|
|
|
|
info.tarballHash = keccak256(tarball);
|
|
|
|
|
|
|
|
// Save the updated package.json to disk
|
|
|
|
savePackage(dirname, info);
|
|
|
|
|
|
|
|
return info;
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
ROOT: ROOT,
|
|
|
|
createTarball: createTarball,
|
|
|
|
dirnames: dirnames,
|
|
|
|
getVersion: function(dirname) { return ((loadPackage(dirname) || {}).version || null); },
|
|
|
|
loadPackage: loadPackage,
|
|
|
|
savePackage: savePackage,
|
|
|
|
updatePackage: updatePackage,
|
|
|
|
}
|