isolate-package
Version:
Isolate monorepo packages to form a self-contained deployable unit
42 lines (33 loc) • 1.14 kB
text/typescript
import fs from "fs-extra";
import { got } from "get-or-throw";
import path, { join } from "node:path";
import { useLogger } from "../logger";
import type { PackagesRegistry } from "../types";
import { getIsolateRelativeLogPath, unpack } from "../utils";
export async function unpackDependencies(
packedFilesByName: Record<string, string>,
packagesRegistry: PackagesRegistry,
tmpDir: string,
isolateDir: string,
) {
const log = useLogger();
await Promise.all(
Object.entries(packedFilesByName).map(async ([packageName, filePath]) => {
const dir = got(packagesRegistry, packageName).rootRelativeDir;
const unpackDir = join(tmpDir, dir);
log.debug("Unpacking", `(temp)/${path.basename(filePath)}`);
await unpack(filePath, unpackDir);
const destinationDir = join(isolateDir, dir);
await fs.ensureDir(destinationDir);
await fs.move(join(unpackDir, "package"), destinationDir, {
overwrite: true,
});
log.debug(
`Moved package files to ${getIsolateRelativeLogPath(
destinationDir,
isolateDir,
)}`,
);
}),
);
}