medusa-dev-cli
Version:
CLI helpers for contributors working on Medusa
101 lines • 4.48 kB
JavaScript
const fs = require(`fs-extra`);
const path = require(`path`);
const { promisifiedSpawn } = require(`../utils/promisified-spawn`);
const { registryUrl } = require(`./verdaccio-config`);
const NPMRCContent = `${registryUrl.replace(/https?:/g, ``)}/:_authToken="medusa-dev"`;
const { getMonorepoPackageJsonPath, } = require(`../utils/get-monorepo-package-json-path`);
const { registerCleanupTask } = require(`./cleanup-tasks`);
/**
* Edit package.json to:
* - adjust version to temporary one
* - change version selectors for dependencies that
* will be published, to make sure that yarn
* install them in local site
*/
const adjustPackageJson = ({ monoRepoPackageJsonPath, packageName, versionPostFix, packagesToPublish, ignorePackageJSONChanges, packageNameToPath, }) => {
// we need to check if package depend on any other package to will be published and
// adjust version selector to point to dev version of package so local registry is used
// for dependencies.
const monorepoPKGjsonString = fs.readFileSync(monoRepoPackageJsonPath, `utf-8`);
const monorepoPKGjson = JSON.parse(monorepoPKGjsonString);
monorepoPKGjson.version = `${monorepoPKGjson.version}-dev-${versionPostFix}`;
packagesToPublish.forEach((packageThatWillBePublished) => {
if (monorepoPKGjson.dependencies &&
monorepoPKGjson.dependencies[packageThatWillBePublished]) {
const currentVersion = JSON.parse(fs.readFileSync(getMonorepoPackageJsonPath({
packageName: packageThatWillBePublished,
packageNameToPath,
}), `utf-8`)).version;
monorepoPKGjson.dependencies[packageThatWillBePublished] = `${currentVersion}-dev-${versionPostFix}`;
}
});
const temporaryMonorepoPKGjsonString = JSON.stringify(monorepoPKGjson);
const unignorePackageJSONChanges = ignorePackageJSONChanges(packageName, [
monorepoPKGjsonString,
temporaryMonorepoPKGjsonString,
]);
// change version and dependency versions
fs.outputFileSync(monoRepoPackageJsonPath, temporaryMonorepoPKGjsonString);
return {
newPackageVersion: monorepoPKGjson.version,
unadjustPackageJson: registerCleanupTask(() => {
// restore original package.json
fs.outputFileSync(monoRepoPackageJsonPath, monorepoPKGjsonString);
unignorePackageJSONChanges();
}),
};
};
/**
* Anonymous publishing require dummy .npmrc
* See https://github.com/verdaccio/verdaccio/issues/212#issuecomment-308578500
* This is `npm publish` (as in linked comment) and `yarn publish` requirement.
* This is not verdaccio restriction.
*/
const createTemporaryNPMRC = ({ pathToPackage, root }) => {
const NPMRCPathInPackage = path.join(pathToPackage, `.npmrc`);
fs.outputFileSync(NPMRCPathInPackage, NPMRCContent);
const NPMRCPathInRoot = path.join(root, `.npmrc`);
fs.outputFileSync(NPMRCPathInRoot, NPMRCContent);
return registerCleanupTask(() => {
fs.removeSync(NPMRCPathInPackage);
fs.removeSync(NPMRCPathInRoot);
});
};
const publishPackage = async ({ packageName, packagesToPublish, versionPostFix, ignorePackageJSONChanges, packageNameToPath, root, }) => {
const monoRepoPackageJsonPath = getMonorepoPackageJsonPath({
packageName,
packageNameToPath,
});
const { unadjustPackageJson, newPackageVersion } = adjustPackageJson({
monoRepoPackageJsonPath,
packageName,
packageNameToPath,
versionPostFix,
packagesToPublish,
ignorePackageJSONChanges,
});
const pathToPackage = path.dirname(monoRepoPackageJsonPath);
const uncreateTemporaryNPMRC = createTemporaryNPMRC({ pathToPackage, root });
// npm publish
const publishCmd = [
`npm`,
[`publish`, `--tag`, `medusa-dev`, `--registry=${registryUrl}`],
{
cwd: pathToPackage,
},
];
console.log(`Publishing ${packageName}@${newPackageVersion} to local registry`);
try {
await promisifiedSpawn(publishCmd);
console.log(`Published ${packageName}@${newPackageVersion} to local registry`);
}
catch (e) {
console.error(`Failed to publish ${packageName}@${newPackageVersion}`, e);
process.exit(1);
}
uncreateTemporaryNPMRC();
unadjustPackageJson();
return newPackageVersion;
};
exports.publishPackage = publishPackage;
//# sourceMappingURL=publish-package.js.map