package-preview
Version:
Creates a production preview of a package
59 lines • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const exec_1 = require("@pnpm/exec");
const path = require("path");
const writeJsonFile = require("write-json-file");
const getPreviewDir_1 = require("./getPreviewDir");
const publishToDir_1 = require("./publishToDir");
const DEFAULT_OPTIONS = {
skipPrepack: false,
skipPrepare: false,
skipPrepublish: false,
skipPrepublishOnly: false,
};
async function default_1(what, where, maybeOpts) {
const opts = { ...DEFAULT_OPTIONS, ...maybeOpts };
const pkgDir = path.resolve(what);
where = path.resolve(where);
if (alreadyRunsFor(pkgDir)) {
throw new Error('package-preview cannot be executed inside another package-preview. ' +
'You might have a loop somewhere. Try running package-preview with --skip-prepublish or --skip-prepublishOnly flag');
}
const subenv = Object.create(process.env);
subenv.PREVIEW_IS_RUNNING = process.env.PREVIEW_IS_RUNNING
? process.env.PREVIEW_IS_RUNNING + path.delimiter + pkgDir
: pkgDir;
const previewDir = await getPreviewDir_1.default(where, path.basename(pkgDir));
const pkg = require(path.join(pkgDir, 'package.json'));
const distDir = path.join(previewDir, pkg.name);
await publishToDir_1.default(pkgDir, distDir, { ...opts, env: subenv });
const wrapperPkg = {
dependencies: pkg.peerDependencies || {},
};
// Would be better to install the package dirrectly from the tarball
// in that case this hack would not be needed
if (pkg.scripts) {
delete pkg.scripts.prepare;
delete pkg.scripts.prepublish;
}
await writeJsonFile(path.join(distDir, 'package.json'), pkg);
await writeJsonFile(path.join(previewDir, 'package.json'), wrapperPkg);
// This is where the peer dependencies are installed
await exec_1.default(['install', '--production'], {
cwd: previewDir,
env: subenv,
});
// Dependencies in the preview folder are installed during linking
await exec_1.default(['link', '--production', path.relative(where, distDir)], {
cwd: where,
env: subenv,
});
}
exports.default = default_1;
function alreadyRunsFor(pkgDir) {
const pkgs = typeof process.env.PREVIEW_IS_RUNNING === 'string'
? process.env.PREVIEW_IS_RUNNING.split(path.delimiter)
: [];
return pkgs.indexOf(pkgDir) !== -1;
}
//# sourceMappingURL=index.js.map