isolate-package 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/dist/index.mjs +33 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ use-case, I would love to hear about it.
|
|
|
26
26
|
- Isolates dependencies recursively. If package A depends on local package B
|
|
27
27
|
which depends on local package C, all of them will be isolated.
|
|
28
28
|
- Include and (in the case of PNPM) update the lockfile so the isolated
|
|
29
|
-
deployment should be deterministic.
|
|
29
|
+
deployment should be deterministic. For PNPM see [lockfiles](#lockfiles)
|
|
30
30
|
- Optionally choose to include dev dependencies in the isolated output.
|
|
31
31
|
|
|
32
32
|
## Prerequisites
|
|
@@ -80,8 +80,8 @@ directory, for example:
|
|
|
80
80
|
}
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
Also `version` seems to be required by pack. I like setting it to `"0.0.0"` to
|
|
84
|
-
clear that the version is not really being used.
|
|
83
|
+
Also `version` seems to be required by pack. I like setting it to `"0.0.0"` to
|
|
84
|
+
make it clear that the version is not really being used.
|
|
85
85
|
|
|
86
86
|
A few additional files will be included by `pack` automatically, like the
|
|
87
87
|
`package.json` and `README.md` files.
|
|
@@ -100,8 +100,7 @@ You can, however, declare multiple packages folders like `["packages/*",
|
|
|
100
100
|
|
|
101
101
|
## Usage
|
|
102
102
|
|
|
103
|
-
Run `npm install isolate-package --dev` or the equivalent for `yarn` or
|
|
104
|
-
`pnpm`.
|
|
103
|
+
Run `npm install isolate-package --dev` or the equivalent for `yarn` or `pnpm`.
|
|
105
104
|
|
|
106
105
|
This package exposes the `isolate` executable. Once installed you can run `npx
|
|
107
106
|
isolate` in any package directory _after_ you have build the source files. By
|
|
@@ -288,17 +287,18 @@ isolate process manually with `npx isolate` and possibly
|
|
|
288
287
|
|
|
289
288
|
## Lockfiles
|
|
290
289
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
290
|
+
The lockfiles for NPM as well as the Yarn v1 and v3 seem to have a flat
|
|
291
|
+
structure unrelated to the workspace packages structure, so they are copied to
|
|
292
|
+
the isolate output as-is.
|
|
294
293
|
|
|
295
294
|
The PNPM lockfile clearly has a structure describing the different packages by
|
|
296
295
|
their relative paths, and so to correct the lockfile it is adapted before being
|
|
297
296
|
stored to the isolate directory.
|
|
298
297
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
298
|
+
There is still [an issue with the PNPM lockfile
|
|
299
|
+
conversion](https://github.com/0x80/isolate-package/issues/5). Until that is
|
|
300
|
+
resolved, you can choose to exclude the lockfile by setting the configuration
|
|
301
|
+
`"excludeLockfile": true`.
|
|
302
302
|
|
|
303
303
|
## Used Terminology
|
|
304
304
|
|
package/dist/index.mjs
CHANGED
|
@@ -53,9 +53,13 @@ function toErrorWithMessage(maybeError) {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
// src/utils/get-relative-path.ts
|
|
56
|
-
function
|
|
57
|
-
const strippedPath = path14.replace(
|
|
58
|
-
return strippedPath.startsWith("/") ?
|
|
56
|
+
function getRootRelativePath(path14, rootPath) {
|
|
57
|
+
const strippedPath = path14.replace(rootPath, "");
|
|
58
|
+
return strippedPath.startsWith("/") ? `(root)${strippedPath}` : `(root)/${strippedPath}`;
|
|
59
|
+
}
|
|
60
|
+
function getIsolateRelativePath(path14, isolatePath) {
|
|
61
|
+
const strippedPath = path14.replace(isolatePath, "");
|
|
62
|
+
return strippedPath.startsWith("/") ? `(isolate)${strippedPath}` : `(isolate)/${strippedPath}`;
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
// src/utils/inspect-value.ts
|
|
@@ -124,12 +128,16 @@ async function pack(srcDir, destDir, packageManager) {
|
|
|
124
128
|
switch (packageManager) {
|
|
125
129
|
case "pnpm": {
|
|
126
130
|
const stdout = await new Promise((resolve, reject) => {
|
|
127
|
-
exec(
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
exec(
|
|
132
|
+
`pnpm pack --pack-destination ${destDir}`,
|
|
133
|
+
(err, stdout2, stderr) => {
|
|
134
|
+
if (err) {
|
|
135
|
+
log2.error(stderr);
|
|
136
|
+
return reject(err);
|
|
137
|
+
}
|
|
138
|
+
resolve(stdout2);
|
|
130
139
|
}
|
|
131
|
-
|
|
132
|
-
});
|
|
140
|
+
);
|
|
133
141
|
});
|
|
134
142
|
const packedFilePath = stdout.trim();
|
|
135
143
|
log2.debug("Packed", packedFilePath);
|
|
@@ -225,7 +233,8 @@ var configDefaults = {
|
|
|
225
233
|
targetPackagePath: void 0,
|
|
226
234
|
tsconfigPath: "./tsconfig.json",
|
|
227
235
|
workspacePackages: void 0,
|
|
228
|
-
workspaceRoot: "../.."
|
|
236
|
+
workspaceRoot: "../..",
|
|
237
|
+
excludeLockfile: false
|
|
229
238
|
};
|
|
230
239
|
var __config;
|
|
231
240
|
var validConfigKeys = Object.keys(configDefaults);
|
|
@@ -542,7 +551,7 @@ async function unpackDependencies(packedFilesByName, packagesRegistry, tmpDir, i
|
|
|
542
551
|
overwrite: true
|
|
543
552
|
});
|
|
544
553
|
log2.debug(
|
|
545
|
-
`Moved package files to
|
|
554
|
+
`Moved package files to ${getIsolateRelativePath(
|
|
546
555
|
destinationDir,
|
|
547
556
|
isolateDir
|
|
548
557
|
)}`
|
|
@@ -566,13 +575,13 @@ async function start() {
|
|
|
566
575
|
log.debug("Workspace root", workspaceRootDir);
|
|
567
576
|
log.debug(
|
|
568
577
|
"Isolate target package",
|
|
569
|
-
|
|
578
|
+
getRootRelativePath(targetPackageDir, workspaceRootDir)
|
|
570
579
|
);
|
|
571
580
|
const packageManager = detectPackageManager(workspaceRootDir);
|
|
572
581
|
const isolateDir = path13.join(targetPackageDir, config.isolateDirName);
|
|
573
582
|
log.debug(
|
|
574
583
|
"Isolate output dir",
|
|
575
|
-
|
|
584
|
+
getRootRelativePath(isolateDir, workspaceRootDir)
|
|
576
585
|
);
|
|
577
586
|
await fs13.ensureDir(isolateDir);
|
|
578
587
|
await fs13.remove(`${isolateDir}/**/*`);
|
|
@@ -614,16 +623,20 @@ async function start() {
|
|
|
614
623
|
isolateDir
|
|
615
624
|
});
|
|
616
625
|
await adaptTargetPackageManifest(manifest, packagesRegistry, isolateDir);
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
626
|
+
if (config.excludeLockfile) {
|
|
627
|
+
log.warn("Excluding the lockfile from the isolate output");
|
|
628
|
+
} else {
|
|
629
|
+
await processLockfile({
|
|
630
|
+
workspaceRootDir,
|
|
631
|
+
targetPackageName: manifest.name,
|
|
632
|
+
isolateDir,
|
|
633
|
+
packagesRegistry,
|
|
634
|
+
packageManager
|
|
635
|
+
});
|
|
636
|
+
}
|
|
624
637
|
log.debug(
|
|
625
638
|
"Deleting temporary directory",
|
|
626
|
-
|
|
639
|
+
getRootRelativePath(tmpDir, workspaceRootDir)
|
|
627
640
|
);
|
|
628
641
|
await fs13.remove(tmpDir);
|
|
629
642
|
log.debug("Stored isolate output at", isolateDir);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/helpers/adapt-manifest-files.ts","../src/helpers/adapt-manifest-workspace-deps.ts","../src/utils/filter-object-undefined.ts","../src/utils/get-error-message.ts","../src/utils/get-relative-path.ts","../src/utils/inspect-value.ts","../src/utils/json.ts","../src/utils/logger.ts","../src/utils/pack.ts","../src/utils/unpack.ts","../src/utils/yaml.ts","../src/helpers/adapt-target-package-manifest.ts","../src/helpers/config.ts","../src/helpers/create-packages-registry.ts","../src/helpers/find-packages-globs.ts","../src/helpers/detect-package-manager.ts","../src/helpers/get-build-output-dir.ts","../src/helpers/list-local-dependencies.ts","../src/helpers/manifest.ts","../src/helpers/pack-dependencies.ts","../src/helpers/patch-workspace-entries.ts","../src/helpers/process-build-output-files.ts","../src/helpers/process-lockfile.ts","../src/helpers/unpack-dependencies.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs-extra\";\nimport assert from \"node:assert\";\nimport path from \"node:path\";\nimport sourceMaps from \"source-map-support\";\nimport {\n PackageManifestMinimum,\n adaptManifestFiles,\n adaptTargetPackageManifest,\n createPackagesRegistry,\n detectPackageManager,\n getBuildOutputDir,\n getConfig,\n listLocalDependencies,\n packDependencies,\n processBuildOutputFiles,\n processLockfile,\n unpackDependencies,\n} from \"~/helpers\";\nimport { createLogger, getRelativePath, readTypedJson } from \"~/utils\";\n\nconst config = getConfig();\nconst log = createLogger(config.logLevel);\n\nsourceMaps.install();\n\nasync function start() {\n /**\n * If a targetPackagePath is set, we assume the configuration lives in the\n * root of the workspace. If targetPackagePath is undefined (the default), we\n * assume that the configuration lives in the target package directory.\n */\n const targetPackageDir = config.targetPackagePath\n ? path.join(process.cwd(), config.targetPackagePath)\n : process.cwd();\n\n /**\n * We want a trailing slash here. Functionally it doesn't matter, but it makes\n * the relative paths more correct in the debug output.\n */\n const workspaceRootDir = config.targetPackagePath\n ? process.cwd()\n : path.join(targetPackageDir, config.workspaceRoot);\n\n const buildOutputDir = await getBuildOutputDir(targetPackageDir);\n\n assert(\n fs.existsSync(buildOutputDir),\n `Failed to find build output path at ${buildOutputDir}. Please make sure you build the source before isolating it.`\n );\n\n log.debug(\"Workspace root\", workspaceRootDir);\n log.debug(\n \"Isolate target package\",\n getRelativePath(targetPackageDir, workspaceRootDir)\n );\n\n const packageManager = detectPackageManager(workspaceRootDir);\n\n const isolateDir = path.join(targetPackageDir, config.isolateDirName);\n\n log.debug(\n \"Isolate output dir\",\n getRelativePath(isolateDir, workspaceRootDir)\n );\n\n /**\n * Make sure the isolate dir exists so we can write to it\n */\n await fs.ensureDir(isolateDir);\n\n await fs.remove(`${isolateDir}/**/*`);\n log.debug(\"Cleaned the isolate output directory\");\n\n /**\n * Build a packages registry so we can find the workspace packages by name and\n * have access to their manifest files and relative paths.\n */\n const packagesRegistry = await createPackagesRegistry(\n workspaceRootDir,\n config.workspacePackages\n );\n\n const tmpDir = path.join(isolateDir, \"__tmp\");\n await fs.ensureDir(tmpDir);\n\n /**\n * PNPM pack seems to be much faster than NPM pack so we use that when PNPM is\n * detected. We log it here because the pack function will be called\n * recursively.\n */\n if (packageManager === \"pnpm\") {\n log.debug(\"Using pnpm to pack dependencies\");\n } else {\n log.debug(\"Using npm to pack dependencies\");\n }\n\n const manifest = await readTypedJson<PackageManifestMinimum>(\n path.join(targetPackageDir, \"package.json\")\n );\n\n const localDependencies = listLocalDependencies(manifest, packagesRegistry, {\n includeDevDependencies: config.includeDevDependencies,\n });\n\n const packedFilesByName = await packDependencies({\n localDependencies,\n packagesRegistry,\n packDestinationDir: tmpDir,\n packageManager,\n });\n\n await unpackDependencies(\n packedFilesByName,\n packagesRegistry,\n tmpDir,\n isolateDir\n );\n\n /**\n * Adapt the manifest files for all the unpacked local dependencies\n */\n await adaptManifestFiles(localDependencies, packagesRegistry, isolateDir);\n\n /**\n * Pack the target package directory, and unpack it in the isolate location\n */\n await processBuildOutputFiles({\n targetPackageDir,\n tmpDir,\n packageManager,\n isolateDir,\n });\n\n /**\n * Copy the target manifest file to the isolate location and adapt its\n * workspace dependencies to point to the isolated packages.\n */\n await adaptTargetPackageManifest(manifest, packagesRegistry, isolateDir);\n\n /**\n * Copy and adapt the lockfile\n */\n await processLockfile({\n workspaceRootDir,\n targetPackageName: manifest.name,\n isolateDir,\n packagesRegistry,\n packageManager,\n });\n\n /**\n * Clean up. Only so this in the happy path, so we can look at the temp folder\n * when thing go wrong.\n */\n log.debug(\n \"Deleting temporary directory\",\n getRelativePath(tmpDir, workspaceRootDir)\n );\n await fs.remove(tmpDir);\n\n log.debug(\"Stored isolate output at\", isolateDir);\n\n log.info(\"Isolate completed\");\n}\n\nstart().catch((err) => {\n if (err instanceof Error) {\n log.error(err.stack);\n process.exit(1);\n } else {\n console.error(err);\n }\n});\n\nprocess.on(\"unhandledRejection\", log.error);\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n PackagesRegistry,\n adaptManifestWorkspaceDeps,\n getConfig,\n} from \"~/helpers\";\n\nexport async function adaptManifestFiles(\n localDependencies: string[],\n packagesRegistry: PackagesRegistry,\n isolateDir: string,\n) {\n await Promise.all(\n localDependencies.map(async (packageName) => {\n const { manifest, rootRelativeDir } = packagesRegistry[packageName];\n\n const outputManifest = adaptManifestWorkspaceDeps(\n { manifest, packagesRegistry },\n { includeDevDependencies: getConfig().includeDevDependencies },\n );\n\n await fs.writeFile(\n path.join(isolateDir, rootRelativeDir, \"package.json\"),\n JSON.stringify(outputManifest, null, 2),\n );\n }),\n );\n}\n","import { omit } from \"lodash-es\";\nimport { filterObjectUndefined } from \"~/utils\";\nimport {\n PackageManifestMinimum,\n PackagesRegistry,\n patchWorkspaceEntries,\n} from \".\";\n\nexport function adaptManifestWorkspaceDeps(\n {\n manifest,\n packagesRegistry,\n }: {\n manifest: PackageManifestMinimum;\n packagesRegistry: PackagesRegistry;\n },\n opts: { includeDevDependencies?: boolean } = {},\n): PackageManifestMinimum {\n return Object.assign(\n omit(manifest, [\"scripts\", \"devDependencies\"]),\n filterObjectUndefined({\n dependencies: manifest.dependencies\n ? patchWorkspaceEntries(manifest.dependencies, packagesRegistry)\n : undefined,\n devDependencies:\n opts.includeDevDependencies && manifest.devDependencies\n ? patchWorkspaceEntries(manifest.devDependencies, packagesRegistry)\n : undefined,\n }),\n );\n}\n","export function filterObjectUndefined(object: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(object).filter(([_, value]) => value !== undefined),\n );\n}\n","type ErrorWithMessage = {\n message: string;\n};\n\nexport function getErrorMessage(error: unknown) {\n return toErrorWithMessage(error).message;\n}\n\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n return typeof error === \"object\" && error !== null && \"message\" in error;\n}\n\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage {\n if (isErrorWithMessage(maybeError)) return maybeError;\n\n try {\n return new Error(JSON.stringify(maybeError));\n } catch {\n /**\n * Fallback in case there’s an error stringifying the maybeError\n * like with circular references.\n */\n return new Error(String(maybeError));\n }\n}\n","export function getRelativePath(path: string, relativeTo: string) {\n const strippedPath = path.replace(relativeTo, \"\");\n\n return strippedPath.startsWith(\"/\")\n ? `.${strippedPath}`\n : `./${strippedPath}`;\n}\n","import { inspect } from \"node:util\";\nimport { JsonValue } from \"type-fest\";\n\nexport function inspectValue(value: JsonValue) {\n return inspect(value, false, 4, true);\n}\n","import fs from \"fs-extra\";\nimport { getErrorMessage } from \"./get-error-message\";\n\n/**\n * @TODO pass in zod schema and validate\n */\nexport function readTypedJsonSync<T>(filePath: string) {\n try {\n const rawContent = fs.readFileSync(filePath, \"utf-8\");\n const data = JSON.parse(rawContent) as T;\n return data;\n } catch (err) {\n throw new Error(\n `Failed to read JSON from ${filePath}: ${getErrorMessage(err)}`\n );\n }\n}\n\nexport async function readTypedJson<T>(filePath: string) {\n try {\n const rawContent = await fs.readFile(filePath, \"utf-8\");\n const data = JSON.parse(rawContent) as T;\n return data;\n } catch (err) {\n throw new Error(\n `Failed to read JSON from ${filePath}: ${getErrorMessage(err)}`\n );\n }\n}\n","import chalk from \"chalk\";\nimport { IsolateConfigResolved } from \"~/helpers\";\n\nexport type Logger = {\n debug(...args: any[]): void;\n info(...args: any[]): void;\n warn(...args: any[]): void;\n error(...args: any[]): void;\n};\n\nexport function createLogger(\n logLevel: IsolateConfigResolved[\"logLevel\"]\n): Logger {\n return {\n debug(...args: any[]) {\n if (logLevel === \"debug\") {\n console.log(chalk.blue(\"debug\"), ...args);\n }\n },\n info(...args: any[]) {\n if (logLevel === \"debug\" || logLevel === \"info\") {\n console.log(chalk.green(\"info\"), ...args);\n }\n },\n warn(...args: any[]) {\n if (logLevel === \"debug\" || logLevel === \"info\" || logLevel === \"warn\") {\n console.log(chalk.yellow(\"warning\"), ...args);\n }\n },\n error(...args: any[]) {\n console.log(chalk.red(\"error\"), ...args);\n },\n };\n}\n","import { exec } from \"node:child_process\";\nimport path from \"node:path\";\nimport { PackageManager, getConfig } from \"~/helpers\";\nimport { createLogger } from \"./logger\";\n\nexport async function pack(\n srcDir: string,\n destDir: string,\n packageManager: PackageManager\n) {\n const log = createLogger(getConfig().logLevel);\n const cwd = process.cwd();\n process.chdir(srcDir);\n\n /**\n * PNPM pack seems to be a lot faster than NPM pack, so when PNPM is detected we\n * use that instead.\n */\n switch (packageManager) {\n case \"pnpm\": {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec(`pnpm pack --pack-destination ${destDir}`, (err, stdout) => {\n if (err) {\n return reject(err);\n }\n\n resolve(stdout);\n });\n });\n\n /**\n * Trim newlines and whitespace\n */\n const packedFilePath = stdout.trim();\n\n // log.debug(\"Packed\", path.basename(packedFilePath));\n log.debug(\"Packed\", packedFilePath);\n\n process.chdir(cwd);\n return packedFilePath;\n }\n\n case \"yarn\":\n case \"npm\": {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec(`npm pack --pack-destination ${destDir}`, (err, stdout) => {\n if (err) {\n return reject(err);\n }\n\n resolve(stdout);\n });\n });\n\n /**\n * Trim newlines and whitespace\n */\n const packedFileName = stdout.trim();\n\n log.debug(\"Packed\", packedFileName);\n\n process.chdir(cwd);\n return path.join(destDir, packedFileName);\n }\n }\n}\n","import fs from \"fs-extra\";\nimport tar from \"tar-fs\";\nimport { createGunzip } from \"zlib\";\n\nexport async function unpack(filePath: string, unpackDir: string) {\n await new Promise<void>((resolve, reject) => {\n fs.createReadStream(filePath)\n .pipe(createGunzip())\n .pipe(tar.extract(unpackDir))\n .on(\"finish\", () => resolve())\n .on(\"error\", (err) => reject(err));\n });\n}\n","import fs from \"fs-extra\";\nimport yaml from \"yaml\";\nimport { getErrorMessage } from \"./get-error-message\";\n\nexport function readTypedYamlSync<T>(filePath: string) {\n try {\n const rawContent = fs.readFileSync(filePath, \"utf-8\");\n const data = yaml.parse(rawContent);\n /**\n * @TODO add some zod validation maybe\n */\n return data as T;\n } catch (err) {\n throw new Error(\n `Failed to read YAML from ${filePath}: ${getErrorMessage(err)}`\n );\n }\n}\n\nexport function writeTypedYamlSync<T>(filePath: string, content: T) {\n /**\n * @TODO add some zod validation maybe\n */\n fs.writeFileSync(filePath, yaml.stringify(content), \"utf-8\");\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n PackageManifestMinimum,\n PackagesRegistry,\n adaptManifestWorkspaceDeps,\n getConfig,\n} from \"~/helpers\";\n\nexport async function adaptTargetPackageManifest(\n manifest: PackageManifestMinimum,\n packagesRegistry: PackagesRegistry,\n isolateDir: string,\n) {\n const outputManifest = adaptManifestWorkspaceDeps(\n {\n manifest,\n packagesRegistry,\n },\n { includeDevDependencies: getConfig().includeDevDependencies },\n );\n\n await fs.writeFile(\n path.join(isolateDir, \"package.json\"),\n JSON.stringify(outputManifest, null, 2),\n );\n}\n","import fs from \"fs-extra\";\nimport { isEmpty } from \"lodash-es\";\nimport path from \"node:path\";\nimport { createLogger, inspectValue, readTypedJsonSync } from \"~/utils\";\n\nexport type IsolateConfigResolved = {\n buildDirName?: string;\n includeDevDependencies: boolean;\n isolateDirName: string;\n logLevel: \"info\" | \"debug\" | \"warn\" | \"error\";\n targetPackagePath?: string;\n tsconfigPath: string;\n workspacePackages?: string[];\n workspaceRoot: string;\n};\n\nexport type IsolateConfig = Partial<IsolateConfigResolved>;\n\nconst configDefaults: IsolateConfigResolved = {\n buildDirName: undefined,\n includeDevDependencies: false,\n isolateDirName: \"isolate\",\n logLevel: \"info\",\n targetPackagePath: undefined,\n tsconfigPath: \"./tsconfig.json\",\n workspacePackages: undefined,\n workspaceRoot: \"../..\",\n};\n\n/**\n * Only initialize the configuration once, and keeping it here for subsequent\n * calls to getConfig.\n */\nlet __config: IsolateConfigResolved | undefined;\n\nconst validConfigKeys = Object.keys(configDefaults);\n\nconst CONFIG_FILE_NAME = \"isolate.config.json\";\n\ntype LogLevel = IsolateConfigResolved[\"logLevel\"];\n\nexport function getConfig(): IsolateConfigResolved {\n if (__config) {\n return __config;\n }\n\n /**\n * Since the logLevel is set via config we can't use it to determine if we\n * should output verbose logging as part of the config loading process. Using\n * the env var ISOLATE_CONFIG_LOG_LEVEL you have the option to log debug\n * output.\n */\n const log = createLogger(\n (process.env.ISOLATE_CONFIG_LOG_LEVEL as LogLevel) ?? \"warn\"\n );\n\n const configFilePath = path.join(process.cwd(), CONFIG_FILE_NAME);\n\n log.debug(`Attempting to load config from ${configFilePath}`);\n\n const configFromFile = fs.existsSync(configFilePath)\n ? readTypedJsonSync<IsolateConfig>(configFilePath)\n : {};\n\n const foreignKeys = Object.keys(configFromFile).filter(\n (key) => !validConfigKeys.includes(key)\n );\n\n if (!isEmpty(foreignKeys)) {\n log.warn(`Found invalid config settings:`, foreignKeys.join(\", \"));\n }\n\n const config = Object.assign(\n {},\n configDefaults,\n configFromFile\n ) satisfies IsolateConfigResolved;\n\n log.debug(\"Using configuration:\", inspectValue(config));\n\n __config = config;\n return config;\n}\n","import fs from \"fs-extra\";\nimport { globSync } from \"glob\";\nimport { set } from \"lodash-es\";\nimport path from \"node:path\";\nimport { createLogger, readTypedJson } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { findPackagesGlobs } from \"./find-packages-globs\";\n\nexport type PackageManifestMinimum = {\n name: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n main: string;\n module?: string;\n exports?: Record<string, { require: string; import: string }>;\n files: string[];\n version?: string;\n typings?: string;\n scripts?: Record<string, string>;\n};\n\nexport type WorkspacePackageInfo = {\n absoluteDir: string;\n /**\n * The path of the package relative to the workspace root. This is the path\n * referenced in the lock file.\n */\n rootRelativeDir: string;\n /**\n * The package.json file contents\n */\n manifest: PackageManifestMinimum;\n};\n\nexport type PackagesRegistry = Record<string, WorkspacePackageInfo>;\n\n/**\n * Build a list of all packages in the workspace, depending on the package\n * manager used, with a possible override from the config file. The list contains\n * the manifest with some directory info mapped by module name.\n */\nexport async function createPackagesRegistry(\n workspaceRootDir: string,\n workspacePackagesOverride: string[] | undefined\n): Promise<PackagesRegistry> {\n const log = createLogger(getConfig().logLevel);\n\n if (workspacePackagesOverride) {\n log.debug(\n `Override workspace packages via config: ${workspacePackagesOverride}`\n );\n }\n\n const packagesGlobs =\n workspacePackagesOverride ?? findPackagesGlobs(workspaceRootDir);\n\n const cwd = process.cwd();\n process.chdir(workspaceRootDir);\n\n const allPackages = packagesGlobs\n .flatMap((glob) => globSync(glob))\n /**\n * Make sure to filter any loose files that might hang around.\n */\n .filter((dir) => fs.lstatSync(dir).isDirectory());\n\n const registry: PackagesRegistry = (\n await Promise.all(\n allPackages.map(async (rootRelativeDir) => {\n const manifestPath = path.join(rootRelativeDir, \"package.json\");\n\n if (!fs.existsSync(manifestPath)) {\n log.warn(\n `Ignoring directory ./${rootRelativeDir} because it does not contain a package.json file`\n );\n return;\n } else {\n log.debug(`Registering package ./${rootRelativeDir}`);\n\n const manifest = await readTypedJson<PackageManifestMinimum>(\n path.join(rootRelativeDir, \"package.json\")\n );\n\n return {\n manifest,\n rootRelativeDir,\n absoluteDir: path.join(workspaceRootDir, rootRelativeDir),\n };\n }\n })\n )\n ).reduce<PackagesRegistry>(\n (acc, info) => (info ? set(acc, info.manifest.name, info) : acc),\n {}\n );\n\n process.chdir(cwd);\n\n return registry;\n}\n","import path from \"node:path\";\nimport {\n createLogger,\n inspectValue,\n readTypedJsonSync,\n readTypedYamlSync,\n} from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { detectPackageManager } from \"./detect-package-manager\";\n\n/**\n * Find the globs that define where the packages are located within the\n * monorepo. This configuration is dependent on the package manager used, and I\n * don't know if we're covering all cases yet...\n */\nexport function findPackagesGlobs(workspaceRootDir: string) {\n const log = createLogger(getConfig().logLevel);\n\n const packageManager = detectPackageManager(workspaceRootDir);\n\n switch (packageManager) {\n case \"pnpm\": {\n const { packages: globs } = readTypedYamlSync<{ packages: string[] }>(\n path.join(workspaceRootDir, \"pnpm-workspace.yaml\")\n );\n\n log.debug(\"Detected pnpm packages globs:\", inspectValue(globs));\n return globs;\n }\n case \"yarn\":\n case \"npm\": {\n const workspaceRootManifestPath = path.join(\n workspaceRootDir,\n \"package.json\"\n );\n\n const { workspaces } = readTypedJsonSync<{ workspaces: string[] }>(\n workspaceRootManifestPath\n );\n\n if (!workspaces) {\n throw new Error(\n `No workspaces field found in ${workspaceRootManifestPath}`\n );\n }\n\n return workspaces;\n }\n }\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\n\nexport type PackageManager = \"pnpm\" | \"yarn\" | \"npm\";\n\nexport function detectPackageManager(workspaceRoot: string): PackageManager {\n if (fs.existsSync(path.join(workspaceRoot, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n\n if (fs.existsSync(path.join(workspaceRoot, \"yarn.lock\"))) {\n return \"yarn\";\n }\n\n if (fs.existsSync(path.join(workspaceRoot, \"package-lock.json\"))) {\n return \"npm\";\n }\n\n throw new Error(`Failed to detect package manager`);\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport outdent from \"outdent\";\nimport { getConfig } from \"~/helpers\";\nimport { createLogger, readTypedJson } from \"~/utils\";\n\nexport async function getBuildOutputDir(targetPackageDir: string) {\n const config = getConfig();\n const log = createLogger(getConfig().logLevel);\n\n if (config.buildDirName) {\n log.debug(\"Using buildDirName from config:\", config.buildDirName);\n return path.join(targetPackageDir, config.buildDirName);\n }\n\n const tsconfigPath = path.join(targetPackageDir, config.tsconfigPath);\n\n log.debug(\"Looking for tsconfig at:\", tsconfigPath);\n\n if (fs.existsSync(tsconfigPath)) {\n const tsconfig = await readTypedJson<{\n compilerOptions?: { outDir?: string };\n }>(tsconfigPath);\n\n const outDir = tsconfig.compilerOptions?.outDir;\n\n if (outDir) {\n return path.join(targetPackageDir, outDir);\n } else {\n throw new Error(outdent`\n Failed to find outDir in tsconfig. If you are executing isolate from the root of a monorepo you should specify the buildDirName in isolate.config.json.\n `);\n }\n } else {\n throw new Error(outdent`\n Failed to infer the build output directory from either the isolate config buildDirName or a Typescript config file. See the documentation on how to configure one of these options.\n `);\n }\n}\n","import {\n PackageManifestMinimum,\n PackagesRegistry,\n} from \"./create-packages-registry\";\n\n/**\n * Recursively list the packages from dependencies (and optionally\n * devDependencies) that are found in the workspace.\n *\n * Here we do not need to rely on packages being declared as \"workspace:\" in the\n * manifest. We can simply compare the package names with the list of packages\n * that were found via the workspace glob patterns and added to the registry.\n */\nexport function listLocalDependencies(\n manifest: PackageManifestMinimum,\n packagesRegistry: PackagesRegistry,\n { includeDevDependencies = false } = {},\n): string[] {\n const allWorkspacePackageNames = Object.keys(packagesRegistry);\n\n const localDependencyPackageNames = (\n includeDevDependencies\n ? [\n ...Object.keys(manifest.dependencies ?? {}),\n ...Object.keys(manifest.devDependencies ?? {}),\n ]\n : Object.keys(manifest.dependencies ?? {})\n ).filter((name) => allWorkspacePackageNames.includes(name));\n\n const nestedLocalDependencies = localDependencyPackageNames.flatMap(\n (packageName) =>\n listLocalDependencies(\n packagesRegistry[packageName].manifest,\n packagesRegistry,\n { includeDevDependencies },\n ),\n );\n\n return localDependencyPackageNames.concat(nestedLocalDependencies);\n}\n","import path from \"node:path\";\nimport { readTypedJson } from \"~/utils\";\nimport { PackageManifestMinimum } from \"./create-packages-registry\";\n\nexport async function importManifest(packageDir: string) {\n return readTypedJson<PackageManifestMinimum>(\n path.join(packageDir, \"package.json\"),\n );\n}\n","import assert from \"node:assert\";\nimport { createLogger, pack } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { PackagesRegistry } from \"./create-packages-registry\";\nimport { PackageManager } from \"./detect-package-manager\";\n\n/**\n * Pack dependencies so that we extract only the files that are supposed to be\n * published by the packages.\n *\n * @returns A map of package names to the path of the packed file\n */\nexport async function packDependencies({\n /**\n * All packages found in the monorepo by workspaces declaration\n */\n packagesRegistry,\n /**\n * The package names that appear to be local dependencies\n */\n localDependencies,\n /**\n * The directory where the isolated package and all its dependencies will end\n * up. This is also the directory from where the package will be deployed. By\n * default it is a subfolder in targetPackageDir called \"isolate\" but you can\n * configure it.\n */\n packDestinationDir,\n\n packageManager,\n}: {\n packagesRegistry: PackagesRegistry;\n localDependencies: string[];\n packDestinationDir: string;\n packageManager: PackageManager;\n}) {\n const config = getConfig();\n const log = createLogger(config.logLevel);\n\n const packedFileByName: Record<string, string> = {};\n\n for (const dependency of localDependencies) {\n const def = packagesRegistry[dependency];\n\n assert(dependency, `Failed to find package definition for ${dependency}`);\n\n const { name } = def.manifest;\n\n /**\n * If this dependency has already been packed, we skip it. It could happen\n * because we are packing workspace dependencies recursively.\n */\n if (packedFileByName[name]) {\n log.debug(`Skipping ${name} because it has already been packed`);\n continue;\n }\n\n packedFileByName[name] = await pack(\n def.absoluteDir,\n packDestinationDir,\n packageManager,\n );\n\n /**\n * @TODO call recursively\n */\n }\n\n return packedFileByName;\n}\n","import { createLogger } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { PackagesRegistry } from \"./create-packages-registry\";\n\nexport function patchWorkspaceEntries(\n dependencies: Record<string, string>,\n packagesRegistry: PackagesRegistry,\n) {\n const log = createLogger(getConfig().logLevel);\n const allWorkspacePackageNames = Object.keys(packagesRegistry);\n\n return Object.fromEntries(\n Object.entries(dependencies).map(([key, value]) => {\n if (allWorkspacePackageNames.includes(key)) {\n const def = packagesRegistry[key];\n\n /**\n * The rootRelativeDir is the package location in the monorepo. In the\n * isolate folder we keep the same structure so we can use the same\n * relative path.\n */\n log.debug(`Linking dependency ${key} to file:${def.rootRelativeDir}`);\n\n return [key, `file:${def.rootRelativeDir}`];\n } else {\n return [key, value];\n }\n }),\n );\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { PackageManager } from \"~/helpers\";\nimport { pack, unpack } from \"~/utils\";\n\nexport async function processBuildOutputFiles({\n targetPackageDir,\n tmpDir,\n packageManager,\n isolateDir,\n}: {\n targetPackageDir: string;\n tmpDir: string;\n packageManager: PackageManager;\n isolateDir: string;\n}) {\n const packedFilePath = await pack(targetPackageDir, tmpDir, packageManager);\n const unpackDir = path.join(tmpDir, \"target\");\n await unpack(packedFilePath, unpackDir);\n await fs.copy(path.join(unpackDir, \"package\"), isolateDir);\n}\n","import fs from \"fs-extra\";\nimport assert from \"node:assert\";\nimport path from \"node:path\";\nimport { createLogger, readTypedYamlSync, writeTypedYamlSync } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { PackagesRegistry } from \"./create-packages-registry\";\nimport { PackageManager } from \"./detect-package-manager\";\n\ntype PackagePath = string;\n\ntype PnpmLockfile = {\n lockfileVersion: string;\n importers: Record<\n PackagePath,\n {\n dependencies?: Record<string, unknown>;\n devDependencies?: Record<string, unknown>;\n }\n >;\n};\n\nexport function getLockfileFileName(packageManager: PackageManager) {\n switch (packageManager) {\n case \"pnpm\":\n return \"pnpm-lock.yaml\";\n case \"yarn\":\n return \"yarn.lock\";\n case \"npm\":\n return \"package-lock.json\";\n }\n}\n\n/**\n * Adapt the lockfile and write it to the isolate directory. Because we keep the\n * structure of packages in the isolate directory the same as they were in the\n * monorepo, the lockfile is largely still correct. The only things that need to\n * be done is to remove the root dependencies and devDependencies, and rename\n * the path to the target package to act as the new root.\n */\nexport function processLockfile({\n workspaceRootDir,\n targetPackageName,\n packagesRegistry,\n isolateDir,\n packageManager,\n}: {\n workspaceRootDir: string;\n targetPackageName: string;\n packagesRegistry: PackagesRegistry;\n isolateDir: string;\n packageManager: PackageManager;\n}) {\n const log = createLogger(getConfig().logLevel);\n\n const targetPackageRelativeDir =\n packagesRegistry[targetPackageName].rootRelativeDir;\n\n const fileName = getLockfileFileName(packageManager);\n\n const lockfileSrcPath = path.join(workspaceRootDir, fileName);\n const lockfileDstPath = path.join(isolateDir, fileName);\n\n switch (packageManager) {\n /**\n * It seems that for Yarn v1 and NPM v3 lockfile the content is not\n * dependent on the workspace packages structure, so I am assuming we can\n * just copy it over.\n */\n case \"npm\":\n case \"yarn\": {\n fs.copyFileSync(lockfileSrcPath, lockfileDstPath);\n log.debug(\"Copied lockfile to\", lockfileDstPath);\n return;\n }\n case \"pnpm\": {\n const origLockfile = readTypedYamlSync<PnpmLockfile>(lockfileSrcPath);\n\n log.debug(\"Read PNPM lockfile, version:\", origLockfile.lockfileVersion);\n\n const adaptedLockfile = structuredClone(origLockfile);\n\n const targetPackageDef =\n adaptedLockfile.importers[targetPackageRelativeDir];\n\n assert(\n targetPackageDef,\n `Failed to find target package in lockfile at importers[${targetPackageRelativeDir}]`\n );\n /**\n * Overwrite the root importer with the target package importer contents\n */\n adaptedLockfile.importers[\".\"] = targetPackageDef;\n\n /**\n * Delete the target package original importer. Not really necessary.\n */\n delete adaptedLockfile.importers[targetPackageRelativeDir];\n\n writeTypedYamlSync(lockfileDstPath, adaptedLockfile);\n\n log.debug(\"Stored adapted lockfile at\", lockfileDstPath);\n\n return;\n }\n\n // case \"npm\": {\n // /**\n // * Assuming a v3 lockfile.\n // */\n // const origLockfile = readTypedJsonSync<NpmLockfile_v3>(lockfileSrcPath);\n\n // /**\n // * Overwrite the root importer with the target package importer contents\n // */\n // const adaptedLockfile = structuredClone(origLockfile);\n\n // const targetPackageDef =\n // adaptedLockfile.packages[targetPackageRelativeDir];\n\n // assert(\n // targetPackageDef,\n // `Failed to find target package in lockfile at packages[${targetPackageRelativeDir}]`\n // );\n\n // /**\n // * The root in the NPM lockfile seems to be marked by an empty string\n // */\n // adaptedLockfile.packages[\"\"] = targetPackageDef;\n\n // /**\n // * Delete the target package original importer. Not really necessary.\n // */\n // delete adaptedLockfile.packages[targetPackageRelativeDir];\n\n // writeTypedYamlSync(lockfileDstPath, adaptedLockfile);\n\n // log.debug(\"Stored adapted lockfile at\", lockfileDstPath);\n // }\n }\n}\n","import fs from \"fs-extra\";\nimport { dir } from \"node:console\";\nimport path, { join } from \"node:path\";\nimport { getRelativePath } from \"~/utils\";\nimport { createLogger } from \"~/utils/logger\";\nimport { PackagesRegistry, getConfig } from \".\";\nimport { unpack } from \"../utils/unpack\";\n\nexport async function unpackDependencies(\n packedFilesByName: Record<string, string>,\n packagesRegistry: PackagesRegistry,\n tmpDir: string,\n isolateDir: string\n) {\n const log = createLogger(getConfig().logLevel);\n await Promise.all(\n Object.entries(packedFilesByName).map(async ([packageName, filePath]) => {\n const dir = packagesRegistry[packageName].rootRelativeDir;\n\n const unpackDir = join(tmpDir, dir);\n\n // log.debug(\"Unpacking\", path.basename(filePath));\n log.debug(\"Unpacking\", filePath);\n\n await unpack(filePath, unpackDir);\n\n const destinationDir = join(isolateDir, dir);\n\n await fs.ensureDir(destinationDir);\n\n await fs.move(join(unpackDir, \"package\"), destinationDir, {\n overwrite: true,\n });\n\n log.debug(\n `Moved package files to isolate ${getRelativePath(\n destinationDir,\n isolateDir\n )}`\n );\n })\n );\n}\n"],"mappings":"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","names":["fs","assert","path","path","fs","fs","path","log","stdout","path","fs","fs","fs","fs","path","fs","path","fs","path","log","path","fs","config","fs","path","path","fs","path","log","path","log","fs","path","fs","path","config","log","path","fs","path","config","log","log","fs","path","path","fs","fs","assert","path","log","path","fs","assert","fs","log","fs","path","assert","fs"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/helpers/adapt-manifest-files.ts","../src/helpers/adapt-manifest-workspace-deps.ts","../src/utils/filter-object-undefined.ts","../src/utils/get-error-message.ts","../src/utils/get-relative-path.ts","../src/utils/inspect-value.ts","../src/utils/json.ts","../src/utils/logger.ts","../src/utils/pack.ts","../src/utils/unpack.ts","../src/utils/yaml.ts","../src/helpers/adapt-target-package-manifest.ts","../src/helpers/config.ts","../src/helpers/create-packages-registry.ts","../src/helpers/find-packages-globs.ts","../src/helpers/detect-package-manager.ts","../src/helpers/get-build-output-dir.ts","../src/helpers/list-local-dependencies.ts","../src/helpers/manifest.ts","../src/helpers/pack-dependencies.ts","../src/helpers/patch-workspace-entries.ts","../src/helpers/process-build-output-files.ts","../src/helpers/process-lockfile.ts","../src/helpers/unpack-dependencies.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs-extra\";\nimport assert from \"node:assert\";\nimport path from \"node:path\";\nimport sourceMaps from \"source-map-support\";\nimport {\n PackageManifestMinimum,\n adaptManifestFiles,\n adaptTargetPackageManifest,\n createPackagesRegistry,\n detectPackageManager,\n getBuildOutputDir,\n getConfig,\n listLocalDependencies,\n packDependencies,\n processBuildOutputFiles,\n processLockfile,\n unpackDependencies,\n} from \"~/helpers\";\nimport { createLogger, getRootRelativePath, readTypedJson } from \"~/utils\";\n\nconst config = getConfig();\nconst log = createLogger(config.logLevel);\n\nsourceMaps.install();\n\nasync function start() {\n /**\n * If a targetPackagePath is set, we assume the configuration lives in the\n * root of the workspace. If targetPackagePath is undefined (the default), we\n * assume that the configuration lives in the target package directory.\n */\n const targetPackageDir = config.targetPackagePath\n ? path.join(process.cwd(), config.targetPackagePath)\n : process.cwd();\n\n /**\n * We want a trailing slash here. Functionally it doesn't matter, but it makes\n * the relative paths more correct in the debug output.\n */\n const workspaceRootDir = config.targetPackagePath\n ? process.cwd()\n : path.join(targetPackageDir, config.workspaceRoot);\n\n const buildOutputDir = await getBuildOutputDir(targetPackageDir);\n\n assert(\n fs.existsSync(buildOutputDir),\n `Failed to find build output path at ${buildOutputDir}. Please make sure you build the source before isolating it.`\n );\n\n log.debug(\"Workspace root\", workspaceRootDir);\n log.debug(\n \"Isolate target package\",\n getRootRelativePath(targetPackageDir, workspaceRootDir)\n );\n\n const packageManager = detectPackageManager(workspaceRootDir);\n\n const isolateDir = path.join(targetPackageDir, config.isolateDirName);\n\n log.debug(\n \"Isolate output dir\",\n getRootRelativePath(isolateDir, workspaceRootDir)\n );\n\n /**\n * Make sure the isolate dir exists so we can write to it\n */\n await fs.ensureDir(isolateDir);\n\n await fs.remove(`${isolateDir}/**/*`);\n log.debug(\"Cleaned the isolate output directory\");\n\n /**\n * Build a packages registry so we can find the workspace packages by name and\n * have access to their manifest files and relative paths.\n */\n const packagesRegistry = await createPackagesRegistry(\n workspaceRootDir,\n config.workspacePackages\n );\n\n const tmpDir = path.join(isolateDir, \"__tmp\");\n await fs.ensureDir(tmpDir);\n\n /**\n * PNPM pack seems to be much faster than NPM pack so we use that when PNPM is\n * detected. We log it here because the pack function will be called\n * recursively.\n */\n if (packageManager === \"pnpm\") {\n log.debug(\"Using pnpm to pack dependencies\");\n } else {\n log.debug(\"Using npm to pack dependencies\");\n }\n\n const manifest = await readTypedJson<PackageManifestMinimum>(\n path.join(targetPackageDir, \"package.json\")\n );\n\n const localDependencies = listLocalDependencies(manifest, packagesRegistry, {\n includeDevDependencies: config.includeDevDependencies,\n });\n\n const packedFilesByName = await packDependencies({\n localDependencies,\n packagesRegistry,\n packDestinationDir: tmpDir,\n packageManager,\n });\n\n await unpackDependencies(\n packedFilesByName,\n packagesRegistry,\n tmpDir,\n isolateDir\n );\n\n /**\n * Adapt the manifest files for all the unpacked local dependencies\n */\n await adaptManifestFiles(localDependencies, packagesRegistry, isolateDir);\n\n /**\n * Pack the target package directory, and unpack it in the isolate location\n */\n await processBuildOutputFiles({\n targetPackageDir,\n tmpDir,\n packageManager,\n isolateDir,\n });\n\n /**\n * Copy the target manifest file to the isolate location and adapt its\n * workspace dependencies to point to the isolated packages.\n */\n await adaptTargetPackageManifest(manifest, packagesRegistry, isolateDir);\n\n if (config.excludeLockfile) {\n log.warn(\"Excluding the lockfile from the isolate output\");\n } else {\n /**\n * Copy and adapt the lockfile\n */\n await processLockfile({\n workspaceRootDir,\n targetPackageName: manifest.name,\n isolateDir,\n packagesRegistry,\n packageManager,\n });\n }\n\n /**\n * Clean up. Only so this in the happy path, so we can look at the temp folder\n * when thing go wrong.\n */\n log.debug(\n \"Deleting temporary directory\",\n getRootRelativePath(tmpDir, workspaceRootDir)\n );\n await fs.remove(tmpDir);\n\n log.debug(\"Stored isolate output at\", isolateDir);\n\n log.info(\"Isolate completed\");\n}\n\nstart().catch((err) => {\n if (err instanceof Error) {\n log.error(err.stack);\n process.exit(1);\n } else {\n console.error(err);\n }\n});\n\nprocess.on(\"unhandledRejection\", log.error);\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n PackagesRegistry,\n adaptManifestWorkspaceDeps,\n getConfig,\n} from \"~/helpers\";\n\nexport async function adaptManifestFiles(\n localDependencies: string[],\n packagesRegistry: PackagesRegistry,\n isolateDir: string,\n) {\n await Promise.all(\n localDependencies.map(async (packageName) => {\n const { manifest, rootRelativeDir } = packagesRegistry[packageName];\n\n const outputManifest = adaptManifestWorkspaceDeps(\n { manifest, packagesRegistry },\n { includeDevDependencies: getConfig().includeDevDependencies },\n );\n\n await fs.writeFile(\n path.join(isolateDir, rootRelativeDir, \"package.json\"),\n JSON.stringify(outputManifest, null, 2),\n );\n }),\n );\n}\n","import { omit } from \"lodash-es\";\nimport { filterObjectUndefined } from \"~/utils\";\nimport {\n PackageManifestMinimum,\n PackagesRegistry,\n patchWorkspaceEntries,\n} from \".\";\n\nexport function adaptManifestWorkspaceDeps(\n {\n manifest,\n packagesRegistry,\n }: {\n manifest: PackageManifestMinimum;\n packagesRegistry: PackagesRegistry;\n },\n opts: { includeDevDependencies?: boolean } = {},\n): PackageManifestMinimum {\n return Object.assign(\n omit(manifest, [\"scripts\", \"devDependencies\"]),\n filterObjectUndefined({\n dependencies: manifest.dependencies\n ? patchWorkspaceEntries(manifest.dependencies, packagesRegistry)\n : undefined,\n devDependencies:\n opts.includeDevDependencies && manifest.devDependencies\n ? patchWorkspaceEntries(manifest.devDependencies, packagesRegistry)\n : undefined,\n }),\n );\n}\n","export function filterObjectUndefined(object: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(object).filter(([_, value]) => value !== undefined),\n );\n}\n","type ErrorWithMessage = {\n message: string;\n};\n\nexport function getErrorMessage(error: unknown) {\n return toErrorWithMessage(error).message;\n}\n\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n return typeof error === \"object\" && error !== null && \"message\" in error;\n}\n\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage {\n if (isErrorWithMessage(maybeError)) return maybeError;\n\n try {\n return new Error(JSON.stringify(maybeError));\n } catch {\n /**\n * Fallback in case there’s an error stringifying the maybeError\n * like with circular references.\n */\n return new Error(String(maybeError));\n }\n}\n","export function getRootRelativePath(path: string, rootPath: string) {\n const strippedPath = path.replace(rootPath, \"\");\n\n return strippedPath.startsWith(\"/\")\n ? `(root)${strippedPath}`\n : `(root)/${strippedPath}`;\n}\n\nexport function getIsolateRelativePath(path: string, isolatePath: string) {\n const strippedPath = path.replace(isolatePath, \"\");\n\n return strippedPath.startsWith(\"/\")\n ? `(isolate)${strippedPath}`\n : `(isolate)/${strippedPath}`;\n}\n","import { inspect } from \"node:util\";\nimport { JsonValue } from \"type-fest\";\n\nexport function inspectValue(value: JsonValue) {\n return inspect(value, false, 4, true);\n}\n","import fs from \"fs-extra\";\nimport { getErrorMessage } from \"./get-error-message\";\n\n/**\n * @TODO pass in zod schema and validate\n */\nexport function readTypedJsonSync<T>(filePath: string) {\n try {\n const rawContent = fs.readFileSync(filePath, \"utf-8\");\n const data = JSON.parse(rawContent) as T;\n return data;\n } catch (err) {\n throw new Error(\n `Failed to read JSON from ${filePath}: ${getErrorMessage(err)}`\n );\n }\n}\n\nexport async function readTypedJson<T>(filePath: string) {\n try {\n const rawContent = await fs.readFile(filePath, \"utf-8\");\n const data = JSON.parse(rawContent) as T;\n return data;\n } catch (err) {\n throw new Error(\n `Failed to read JSON from ${filePath}: ${getErrorMessage(err)}`\n );\n }\n}\n","import chalk from \"chalk\";\nimport { IsolateConfigResolved } from \"~/helpers\";\n\nexport type Logger = {\n debug(...args: any[]): void;\n info(...args: any[]): void;\n warn(...args: any[]): void;\n error(...args: any[]): void;\n};\n\nexport function createLogger(\n logLevel: IsolateConfigResolved[\"logLevel\"]\n): Logger {\n return {\n debug(...args: any[]) {\n if (logLevel === \"debug\") {\n console.log(chalk.blue(\"debug\"), ...args);\n }\n },\n info(...args: any[]) {\n if (logLevel === \"debug\" || logLevel === \"info\") {\n console.log(chalk.green(\"info\"), ...args);\n }\n },\n warn(...args: any[]) {\n if (logLevel === \"debug\" || logLevel === \"info\" || logLevel === \"warn\") {\n console.log(chalk.yellow(\"warning\"), ...args);\n }\n },\n error(...args: any[]) {\n console.log(chalk.red(\"error\"), ...args);\n },\n };\n}\n","import { exec } from \"node:child_process\";\nimport path from \"node:path\";\nimport { PackageManager, getConfig } from \"~/helpers\";\nimport { createLogger } from \"./logger\";\n\nexport async function pack(\n srcDir: string,\n destDir: string,\n packageManager: PackageManager\n) {\n const log = createLogger(getConfig().logLevel);\n const cwd = process.cwd();\n process.chdir(srcDir);\n\n /**\n * PNPM pack seems to be a lot faster than NPM pack, so when PNPM is detected\n * we use that instead.\n */\n switch (packageManager) {\n case \"pnpm\": {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec(\n `pnpm pack --pack-destination ${destDir}`,\n (err, stdout, stderr) => {\n if (err) {\n log.error(stderr);\n return reject(err);\n }\n\n resolve(stdout);\n }\n );\n });\n\n /**\n * @TODO use a regex to see if the result from stdout is a valid file\n * path. It could be that other output like warnings are printed. In that\n * case we can to log the stdout.\n */\n\n /**\n * Trim newlines and whitespace\n */\n const packedFilePath = stdout.trim();\n\n // log.debug(\"Packed\", path.basename(packedFilePath));\n log.debug(\"Packed\", packedFilePath);\n\n process.chdir(cwd);\n return packedFilePath;\n }\n\n case \"yarn\":\n case \"npm\": {\n const stdout = await new Promise<string>((resolve, reject) => {\n exec(`npm pack --pack-destination ${destDir}`, (err, stdout) => {\n if (err) {\n return reject(err);\n }\n\n resolve(stdout);\n });\n });\n\n /**\n * Trim newlines and whitespace\n */\n const packedFileName = stdout.trim();\n\n log.debug(\"Packed\", packedFileName);\n\n process.chdir(cwd);\n return path.join(destDir, packedFileName);\n }\n }\n}\n","import fs from \"fs-extra\";\nimport tar from \"tar-fs\";\nimport { createGunzip } from \"zlib\";\n\nexport async function unpack(filePath: string, unpackDir: string) {\n await new Promise<void>((resolve, reject) => {\n fs.createReadStream(filePath)\n .pipe(createGunzip())\n .pipe(tar.extract(unpackDir))\n .on(\"finish\", () => resolve())\n .on(\"error\", (err) => reject(err));\n });\n}\n","import fs from \"fs-extra\";\nimport yaml from \"yaml\";\nimport { getErrorMessage } from \"./get-error-message\";\n\nexport function readTypedYamlSync<T>(filePath: string) {\n try {\n const rawContent = fs.readFileSync(filePath, \"utf-8\");\n const data = yaml.parse(rawContent);\n /**\n * @TODO add some zod validation maybe\n */\n return data as T;\n } catch (err) {\n throw new Error(\n `Failed to read YAML from ${filePath}: ${getErrorMessage(err)}`\n );\n }\n}\n\nexport function writeTypedYamlSync<T>(filePath: string, content: T) {\n /**\n * @TODO add some zod validation maybe\n */\n fs.writeFileSync(filePath, yaml.stringify(content), \"utf-8\");\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport {\n PackageManifestMinimum,\n PackagesRegistry,\n adaptManifestWorkspaceDeps,\n getConfig,\n} from \"~/helpers\";\n\nexport async function adaptTargetPackageManifest(\n manifest: PackageManifestMinimum,\n packagesRegistry: PackagesRegistry,\n isolateDir: string,\n) {\n const outputManifest = adaptManifestWorkspaceDeps(\n {\n manifest,\n packagesRegistry,\n },\n { includeDevDependencies: getConfig().includeDevDependencies },\n );\n\n await fs.writeFile(\n path.join(isolateDir, \"package.json\"),\n JSON.stringify(outputManifest, null, 2),\n );\n}\n","import fs from \"fs-extra\";\nimport { isEmpty } from \"lodash-es\";\nimport path from \"node:path\";\nimport { createLogger, inspectValue, readTypedJsonSync } from \"~/utils\";\n\nexport type IsolateConfigResolved = {\n buildDirName?: string;\n includeDevDependencies: boolean;\n isolateDirName: string;\n logLevel: \"info\" | \"debug\" | \"warn\" | \"error\";\n targetPackagePath?: string;\n tsconfigPath: string;\n workspacePackages?: string[];\n workspaceRoot: string;\n excludeLockfile: boolean;\n};\n\nexport type IsolateConfig = Partial<IsolateConfigResolved>;\n\nconst configDefaults: IsolateConfigResolved = {\n buildDirName: undefined,\n includeDevDependencies: false,\n isolateDirName: \"isolate\",\n logLevel: \"info\",\n targetPackagePath: undefined,\n tsconfigPath: \"./tsconfig.json\",\n workspacePackages: undefined,\n workspaceRoot: \"../..\",\n excludeLockfile: false,\n};\n\n/**\n * Only initialize the configuration once, and keeping it here for subsequent\n * calls to getConfig.\n */\nlet __config: IsolateConfigResolved | undefined;\n\nconst validConfigKeys = Object.keys(configDefaults);\n\nconst CONFIG_FILE_NAME = \"isolate.config.json\";\n\ntype LogLevel = IsolateConfigResolved[\"logLevel\"];\n\nexport function getConfig(): IsolateConfigResolved {\n if (__config) {\n return __config;\n }\n\n /**\n * Since the logLevel is set via config we can't use it to determine if we\n * should output verbose logging as part of the config loading process. Using\n * the env var ISOLATE_CONFIG_LOG_LEVEL you have the option to log debug\n * output.\n */\n const log = createLogger(\n (process.env.ISOLATE_CONFIG_LOG_LEVEL as LogLevel) ?? \"warn\"\n );\n\n const configFilePath = path.join(process.cwd(), CONFIG_FILE_NAME);\n\n log.debug(`Attempting to load config from ${configFilePath}`);\n\n const configFromFile = fs.existsSync(configFilePath)\n ? readTypedJsonSync<IsolateConfig>(configFilePath)\n : {};\n\n const foreignKeys = Object.keys(configFromFile).filter(\n (key) => !validConfigKeys.includes(key)\n );\n\n if (!isEmpty(foreignKeys)) {\n log.warn(`Found invalid config settings:`, foreignKeys.join(\", \"));\n }\n\n const config = Object.assign(\n {},\n configDefaults,\n configFromFile\n ) satisfies IsolateConfigResolved;\n\n log.debug(\"Using configuration:\", inspectValue(config));\n\n __config = config;\n return config;\n}\n","import fs from \"fs-extra\";\nimport { globSync } from \"glob\";\nimport { set } from \"lodash-es\";\nimport path from \"node:path\";\nimport { createLogger, readTypedJson } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { findPackagesGlobs } from \"./find-packages-globs\";\n\nexport type PackageManifestMinimum = {\n name: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n main: string;\n module?: string;\n exports?: Record<string, { require: string; import: string }>;\n files: string[];\n version?: string;\n typings?: string;\n scripts?: Record<string, string>;\n};\n\nexport type WorkspacePackageInfo = {\n absoluteDir: string;\n /**\n * The path of the package relative to the workspace root. This is the path\n * referenced in the lock file.\n */\n rootRelativeDir: string;\n /**\n * The package.json file contents\n */\n manifest: PackageManifestMinimum;\n};\n\nexport type PackagesRegistry = Record<string, WorkspacePackageInfo>;\n\n/**\n * Build a list of all packages in the workspace, depending on the package\n * manager used, with a possible override from the config file. The list contains\n * the manifest with some directory info mapped by module name.\n */\nexport async function createPackagesRegistry(\n workspaceRootDir: string,\n workspacePackagesOverride: string[] | undefined\n): Promise<PackagesRegistry> {\n const log = createLogger(getConfig().logLevel);\n\n if (workspacePackagesOverride) {\n log.debug(\n `Override workspace packages via config: ${workspacePackagesOverride}`\n );\n }\n\n const packagesGlobs =\n workspacePackagesOverride ?? findPackagesGlobs(workspaceRootDir);\n\n const cwd = process.cwd();\n process.chdir(workspaceRootDir);\n\n const allPackages = packagesGlobs\n .flatMap((glob) => globSync(glob))\n /**\n * Make sure to filter any loose files that might hang around.\n */\n .filter((dir) => fs.lstatSync(dir).isDirectory());\n\n const registry: PackagesRegistry = (\n await Promise.all(\n allPackages.map(async (rootRelativeDir) => {\n const manifestPath = path.join(rootRelativeDir, \"package.json\");\n\n if (!fs.existsSync(manifestPath)) {\n log.warn(\n `Ignoring directory ./${rootRelativeDir} because it does not contain a package.json file`\n );\n return;\n } else {\n log.debug(`Registering package ./${rootRelativeDir}`);\n\n const manifest = await readTypedJson<PackageManifestMinimum>(\n path.join(rootRelativeDir, \"package.json\")\n );\n\n return {\n manifest,\n rootRelativeDir,\n absoluteDir: path.join(workspaceRootDir, rootRelativeDir),\n };\n }\n })\n )\n ).reduce<PackagesRegistry>(\n (acc, info) => (info ? set(acc, info.manifest.name, info) : acc),\n {}\n );\n\n process.chdir(cwd);\n\n return registry;\n}\n","import path from \"node:path\";\nimport {\n createLogger,\n inspectValue,\n readTypedJsonSync,\n readTypedYamlSync,\n} from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { detectPackageManager } from \"./detect-package-manager\";\n\n/**\n * Find the globs that define where the packages are located within the\n * monorepo. This configuration is dependent on the package manager used, and I\n * don't know if we're covering all cases yet...\n */\nexport function findPackagesGlobs(workspaceRootDir: string) {\n const log = createLogger(getConfig().logLevel);\n\n const packageManager = detectPackageManager(workspaceRootDir);\n\n switch (packageManager) {\n case \"pnpm\": {\n const { packages: globs } = readTypedYamlSync<{ packages: string[] }>(\n path.join(workspaceRootDir, \"pnpm-workspace.yaml\")\n );\n\n log.debug(\"Detected pnpm packages globs:\", inspectValue(globs));\n return globs;\n }\n case \"yarn\":\n case \"npm\": {\n const workspaceRootManifestPath = path.join(\n workspaceRootDir,\n \"package.json\"\n );\n\n const { workspaces } = readTypedJsonSync<{ workspaces: string[] }>(\n workspaceRootManifestPath\n );\n\n if (!workspaces) {\n throw new Error(\n `No workspaces field found in ${workspaceRootManifestPath}`\n );\n }\n\n return workspaces;\n }\n }\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\n\nexport type PackageManager = \"pnpm\" | \"yarn\" | \"npm\";\n\nexport function detectPackageManager(workspaceRoot: string): PackageManager {\n if (fs.existsSync(path.join(workspaceRoot, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n\n if (fs.existsSync(path.join(workspaceRoot, \"yarn.lock\"))) {\n return \"yarn\";\n }\n\n if (fs.existsSync(path.join(workspaceRoot, \"package-lock.json\"))) {\n return \"npm\";\n }\n\n throw new Error(`Failed to detect package manager`);\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport outdent from \"outdent\";\nimport { getConfig } from \"~/helpers\";\nimport { createLogger, readTypedJson } from \"~/utils\";\n\nexport async function getBuildOutputDir(targetPackageDir: string) {\n const config = getConfig();\n const log = createLogger(getConfig().logLevel);\n\n if (config.buildDirName) {\n log.debug(\"Using buildDirName from config:\", config.buildDirName);\n return path.join(targetPackageDir, config.buildDirName);\n }\n\n const tsconfigPath = path.join(targetPackageDir, config.tsconfigPath);\n\n log.debug(\"Looking for tsconfig at:\", tsconfigPath);\n\n if (fs.existsSync(tsconfigPath)) {\n const tsconfig = await readTypedJson<{\n compilerOptions?: { outDir?: string };\n }>(tsconfigPath);\n\n const outDir = tsconfig.compilerOptions?.outDir;\n\n if (outDir) {\n return path.join(targetPackageDir, outDir);\n } else {\n throw new Error(outdent`\n Failed to find outDir in tsconfig. If you are executing isolate from the root of a monorepo you should specify the buildDirName in isolate.config.json.\n `);\n }\n } else {\n throw new Error(outdent`\n Failed to infer the build output directory from either the isolate config buildDirName or a Typescript config file. See the documentation on how to configure one of these options.\n `);\n }\n}\n","import {\n PackageManifestMinimum,\n PackagesRegistry,\n} from \"./create-packages-registry\";\n\n/**\n * Recursively list the packages from dependencies (and optionally\n * devDependencies) that are found in the workspace.\n *\n * Here we do not need to rely on packages being declared as \"workspace:\" in the\n * manifest. We can simply compare the package names with the list of packages\n * that were found via the workspace glob patterns and added to the registry.\n */\nexport function listLocalDependencies(\n manifest: PackageManifestMinimum,\n packagesRegistry: PackagesRegistry,\n { includeDevDependencies = false } = {},\n): string[] {\n const allWorkspacePackageNames = Object.keys(packagesRegistry);\n\n const localDependencyPackageNames = (\n includeDevDependencies\n ? [\n ...Object.keys(manifest.dependencies ?? {}),\n ...Object.keys(manifest.devDependencies ?? {}),\n ]\n : Object.keys(manifest.dependencies ?? {})\n ).filter((name) => allWorkspacePackageNames.includes(name));\n\n const nestedLocalDependencies = localDependencyPackageNames.flatMap(\n (packageName) =>\n listLocalDependencies(\n packagesRegistry[packageName].manifest,\n packagesRegistry,\n { includeDevDependencies },\n ),\n );\n\n return localDependencyPackageNames.concat(nestedLocalDependencies);\n}\n","import path from \"node:path\";\nimport { readTypedJson } from \"~/utils\";\nimport { PackageManifestMinimum } from \"./create-packages-registry\";\n\nexport async function importManifest(packageDir: string) {\n return readTypedJson<PackageManifestMinimum>(\n path.join(packageDir, \"package.json\"),\n );\n}\n","import assert from \"node:assert\";\nimport { createLogger, pack } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { PackagesRegistry } from \"./create-packages-registry\";\nimport { PackageManager } from \"./detect-package-manager\";\n\n/**\n * Pack dependencies so that we extract only the files that are supposed to be\n * published by the packages.\n *\n * @returns A map of package names to the path of the packed file\n */\nexport async function packDependencies({\n /**\n * All packages found in the monorepo by workspaces declaration\n */\n packagesRegistry,\n /**\n * The package names that appear to be local dependencies\n */\n localDependencies,\n /**\n * The directory where the isolated package and all its dependencies will end\n * up. This is also the directory from where the package will be deployed. By\n * default it is a subfolder in targetPackageDir called \"isolate\" but you can\n * configure it.\n */\n packDestinationDir,\n\n packageManager,\n}: {\n packagesRegistry: PackagesRegistry;\n localDependencies: string[];\n packDestinationDir: string;\n packageManager: PackageManager;\n}) {\n const config = getConfig();\n const log = createLogger(config.logLevel);\n\n const packedFileByName: Record<string, string> = {};\n\n for (const dependency of localDependencies) {\n const def = packagesRegistry[dependency];\n\n assert(dependency, `Failed to find package definition for ${dependency}`);\n\n const { name } = def.manifest;\n\n /**\n * If this dependency has already been packed, we skip it. It could happen\n * because we are packing workspace dependencies recursively.\n */\n if (packedFileByName[name]) {\n log.debug(`Skipping ${name} because it has already been packed`);\n continue;\n }\n\n packedFileByName[name] = await pack(\n def.absoluteDir,\n packDestinationDir,\n packageManager,\n );\n\n /**\n * @TODO call recursively\n */\n }\n\n return packedFileByName;\n}\n","import { createLogger } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { PackagesRegistry } from \"./create-packages-registry\";\n\nexport function patchWorkspaceEntries(\n dependencies: Record<string, string>,\n packagesRegistry: PackagesRegistry,\n) {\n const log = createLogger(getConfig().logLevel);\n const allWorkspacePackageNames = Object.keys(packagesRegistry);\n\n return Object.fromEntries(\n Object.entries(dependencies).map(([key, value]) => {\n if (allWorkspacePackageNames.includes(key)) {\n const def = packagesRegistry[key];\n\n /**\n * The rootRelativeDir is the package location in the monorepo. In the\n * isolate folder we keep the same structure so we can use the same\n * relative path.\n */\n log.debug(`Linking dependency ${key} to file:${def.rootRelativeDir}`);\n\n return [key, `file:${def.rootRelativeDir}`];\n } else {\n return [key, value];\n }\n }),\n );\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { PackageManager } from \"~/helpers\";\nimport { pack, unpack } from \"~/utils\";\n\nexport async function processBuildOutputFiles({\n targetPackageDir,\n tmpDir,\n packageManager,\n isolateDir,\n}: {\n targetPackageDir: string;\n tmpDir: string;\n packageManager: PackageManager;\n isolateDir: string;\n}) {\n const packedFilePath = await pack(targetPackageDir, tmpDir, packageManager);\n const unpackDir = path.join(tmpDir, \"target\");\n await unpack(packedFilePath, unpackDir);\n await fs.copy(path.join(unpackDir, \"package\"), isolateDir);\n}\n","import fs from \"fs-extra\";\nimport assert from \"node:assert\";\nimport path from \"node:path\";\nimport { createLogger, readTypedYamlSync, writeTypedYamlSync } from \"~/utils\";\nimport { getConfig } from \"./config\";\nimport { PackagesRegistry } from \"./create-packages-registry\";\nimport { PackageManager } from \"./detect-package-manager\";\n\ntype PackagePath = string;\n\ntype PnpmLockfile = {\n lockfileVersion: string;\n importers: Record<\n PackagePath,\n {\n dependencies?: Record<string, unknown>;\n devDependencies?: Record<string, unknown>;\n }\n >;\n};\n\nexport function getLockfileFileName(packageManager: PackageManager) {\n switch (packageManager) {\n case \"pnpm\":\n return \"pnpm-lock.yaml\";\n case \"yarn\":\n return \"yarn.lock\";\n case \"npm\":\n return \"package-lock.json\";\n }\n}\n\n/**\n * Adapt the lockfile and write it to the isolate directory. Because we keep the\n * structure of packages in the isolate directory the same as they were in the\n * monorepo, the lockfile is largely still correct. The only things that need to\n * be done is to remove the root dependencies and devDependencies, and rename\n * the path to the target package to act as the new root.\n */\nexport function processLockfile({\n workspaceRootDir,\n targetPackageName,\n packagesRegistry,\n isolateDir,\n packageManager,\n}: {\n workspaceRootDir: string;\n targetPackageName: string;\n packagesRegistry: PackagesRegistry;\n isolateDir: string;\n packageManager: PackageManager;\n}) {\n const log = createLogger(getConfig().logLevel);\n\n const targetPackageRelativeDir =\n packagesRegistry[targetPackageName].rootRelativeDir;\n\n const fileName = getLockfileFileName(packageManager);\n\n const lockfileSrcPath = path.join(workspaceRootDir, fileName);\n const lockfileDstPath = path.join(isolateDir, fileName);\n\n switch (packageManager) {\n /**\n * It seems that for Yarn v1 and NPM v3 lockfile the content is not\n * dependent on the workspace packages structure, so I am assuming we can\n * just copy it over.\n */\n case \"npm\":\n case \"yarn\": {\n fs.copyFileSync(lockfileSrcPath, lockfileDstPath);\n log.debug(\"Copied lockfile to\", lockfileDstPath);\n return;\n }\n case \"pnpm\": {\n const origLockfile = readTypedYamlSync<PnpmLockfile>(lockfileSrcPath);\n\n log.debug(\"Read PNPM lockfile, version:\", origLockfile.lockfileVersion);\n\n const adaptedLockfile = structuredClone(origLockfile);\n\n const targetPackageDef =\n adaptedLockfile.importers[targetPackageRelativeDir];\n\n assert(\n targetPackageDef,\n `Failed to find target package in lockfile at importers[${targetPackageRelativeDir}]`\n );\n /**\n * Overwrite the root importer with the target package importer contents\n */\n adaptedLockfile.importers[\".\"] = targetPackageDef;\n\n /**\n * Delete the target package original importer. Not really necessary.\n */\n delete adaptedLockfile.importers[targetPackageRelativeDir];\n\n writeTypedYamlSync(lockfileDstPath, adaptedLockfile);\n\n log.debug(\"Stored adapted lockfile at\", lockfileDstPath);\n\n return;\n }\n\n // case \"npm\": {\n // /**\n // * Assuming a v3 lockfile.\n // */\n // const origLockfile = readTypedJsonSync<NpmLockfile_v3>(lockfileSrcPath);\n\n // /**\n // * Overwrite the root importer with the target package importer contents\n // */\n // const adaptedLockfile = structuredClone(origLockfile);\n\n // const targetPackageDef =\n // adaptedLockfile.packages[targetPackageRelativeDir];\n\n // assert(\n // targetPackageDef,\n // `Failed to find target package in lockfile at packages[${targetPackageRelativeDir}]`\n // );\n\n // /**\n // * The root in the NPM lockfile seems to be marked by an empty string\n // */\n // adaptedLockfile.packages[\"\"] = targetPackageDef;\n\n // /**\n // * Delete the target package original importer. Not really necessary.\n // */\n // delete adaptedLockfile.packages[targetPackageRelativeDir];\n\n // writeTypedYamlSync(lockfileDstPath, adaptedLockfile);\n\n // log.debug(\"Stored adapted lockfile at\", lockfileDstPath);\n // }\n }\n}\n","import fs from \"fs-extra\";\nimport { dir } from \"node:console\";\nimport path, { join } from \"node:path\";\nimport { getIsolateRelativePath, getRootRelativePath } from \"~/utils\";\nimport { createLogger } from \"~/utils/logger\";\nimport { PackagesRegistry, getConfig } from \".\";\nimport { unpack } from \"../utils/unpack\";\n\nexport async function unpackDependencies(\n packedFilesByName: Record<string, string>,\n packagesRegistry: PackagesRegistry,\n tmpDir: string,\n isolateDir: string\n) {\n const log = createLogger(getConfig().logLevel);\n await Promise.all(\n Object.entries(packedFilesByName).map(async ([packageName, filePath]) => {\n const dir = packagesRegistry[packageName].rootRelativeDir;\n\n const unpackDir = join(tmpDir, dir);\n\n // log.debug(\"Unpacking\", path.basename(filePath));\n log.debug(\"Unpacking\", filePath);\n\n await unpack(filePath, unpackDir);\n\n const destinationDir = join(isolateDir, dir);\n\n await fs.ensureDir(destinationDir);\n\n await fs.move(join(unpackDir, \"package\"), destinationDir, {\n overwrite: true,\n });\n\n log.debug(\n `Moved package files to ${getIsolateRelativePath(\n destinationDir,\n isolateDir\n )}`\n );\n })\n );\n}\n"],"mappings":";;;AAEA,OAAOA,UAAQ;AACf,OAAOC,aAAY;AACnB,OAAOC,YAAU;AACjB,OAAO,gBAAgB;;;ACLvB,OAAO,QAAQ;AACf,OAAO,UAAU;AAOjB,eAAsB,mBACpB,mBACA,kBACA,YACA;AACA,QAAM,QAAQ;AAAA,IACZ,kBAAkB,IAAI,OAAO,gBAAgB;AAC3C,YAAM,EAAE,UAAU,gBAAgB,IAAI,iBAAiB,WAAW;AAElE,YAAM,iBAAiB;AAAA,QACrB,EAAE,UAAU,iBAAiB;AAAA,QAC7B,EAAE,wBAAwB,UAAU,EAAE,uBAAuB;AAAA,MAC/D;AAEA,YAAM,GAAG;AAAA,QACP,KAAK,KAAK,YAAY,iBAAiB,cAAc;AAAA,QACrD,KAAK,UAAU,gBAAgB,MAAM,CAAC;AAAA,MACxC;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC5BA,SAAS,YAAY;;;ACAd,SAAS,sBAAsB,QAAiC;AACrE,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM,UAAU,MAAS;AAAA,EACnE;AACF;;;ACAO,SAAS,gBAAgB,OAAgB;AAC9C,SAAO,mBAAmB,KAAK,EAAE;AACnC;AAEA,SAAS,mBAAmB,OAA2C;AACrE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,aAAa;AACrE;AAEA,SAAS,mBAAmB,YAAuC;AACjE,MAAI,mBAAmB,UAAU;AAAG,WAAO;AAE3C,MAAI;AACF,WAAO,IAAI,MAAM,KAAK,UAAU,UAAU,CAAC;AAAA,EAC7C,QAAE;AAKA,WAAO,IAAI,MAAM,OAAO,UAAU,CAAC;AAAA,EACrC;AACF;;;ACxBO,SAAS,oBAAoBC,QAAc,UAAkB;AAClE,QAAM,eAAeA,OAAK,QAAQ,UAAU,EAAE;AAE9C,SAAO,aAAa,WAAW,GAAG,IAC9B,SAAS,iBACT,UAAU;AAChB;AAEO,SAAS,uBAAuBA,QAAc,aAAqB;AACxE,QAAM,eAAeA,OAAK,QAAQ,aAAa,EAAE;AAEjD,SAAO,aAAa,WAAW,GAAG,IAC9B,YAAY,iBACZ,aAAa;AACnB;;;ACdA,SAAS,eAAe;AAGjB,SAAS,aAAa,OAAkB;AAC7C,SAAO,QAAQ,OAAO,OAAO,GAAG,IAAI;AACtC;;;ACLA,OAAOC,SAAQ;AAMR,SAAS,kBAAqB,UAAkB;AACrD,MAAI;AACF,UAAM,aAAaC,IAAG,aAAa,UAAU,OAAO;AACpD,UAAM,OAAO,KAAK,MAAM,UAAU;AAClC,WAAO;AAAA,EACT,SAAS,KAAP;AACA,UAAM,IAAI;AAAA,MACR,4BAA4B,aAAa,gBAAgB,GAAG;AAAA,IAC9D;AAAA,EACF;AACF;AAEA,eAAsB,cAAiB,UAAkB;AACvD,MAAI;AACF,UAAM,aAAa,MAAMA,IAAG,SAAS,UAAU,OAAO;AACtD,UAAM,OAAO,KAAK,MAAM,UAAU;AAClC,WAAO;AAAA,EACT,SAAS,KAAP;AACA,UAAM,IAAI;AAAA,MACR,4BAA4B,aAAa,gBAAgB,GAAG;AAAA,IAC9D;AAAA,EACF;AACF;;;AC5BA,OAAO,WAAW;AAUX,SAAS,aACd,UACQ;AACR,SAAO;AAAA,IACL,SAAS,MAAa;AACpB,UAAI,aAAa,SAAS;AACxB,gBAAQ,IAAI,MAAM,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,QAAQ,MAAa;AACnB,UAAI,aAAa,WAAW,aAAa,QAAQ;AAC/C,gBAAQ,IAAI,MAAM,MAAM,MAAM,GAAG,GAAG,IAAI;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,QAAQ,MAAa;AACnB,UAAI,aAAa,WAAW,aAAa,UAAU,aAAa,QAAQ;AACtE,gBAAQ,IAAI,MAAM,OAAO,SAAS,GAAG,GAAG,IAAI;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,SAAS,MAAa;AACpB,cAAQ,IAAI,MAAM,IAAI,OAAO,GAAG,GAAG,IAAI;AAAA,IACzC;AAAA,EACF;AACF;;;ACjCA,SAAS,YAAY;AACrB,OAAOC,WAAU;AAIjB,eAAsB,KACpB,QACA,SACA,gBACA;AACA,QAAMC,OAAM,aAAa,UAAU,EAAE,QAAQ;AAC7C,QAAM,MAAM,QAAQ,IAAI;AACxB,UAAQ,MAAM,MAAM;AAMpB,UAAQ,gBAAgB;AAAA,IACtB,KAAK,QAAQ;AACX,YAAM,SAAS,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC5D;AAAA,UACE,gCAAgC;AAAA,UAChC,CAAC,KAAKC,SAAQ,WAAW;AACvB,gBAAI,KAAK;AACP,cAAAD,KAAI,MAAM,MAAM;AAChB,qBAAO,OAAO,GAAG;AAAA,YACnB;AAEA,oBAAQC,OAAM;AAAA,UAChB;AAAA,QACF;AAAA,MACF,CAAC;AAWD,YAAM,iBAAiB,OAAO,KAAK;AAGnC,MAAAD,KAAI,MAAM,UAAU,cAAc;AAElC,cAAQ,MAAM,GAAG;AACjB,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AAAA,IACL,KAAK,OAAO;AACV,YAAM,SAAS,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC5D,aAAK,+BAA+B,WAAW,CAAC,KAAKC,YAAW;AAC9D,cAAI,KAAK;AACP,mBAAO,OAAO,GAAG;AAAA,UACnB;AAEA,kBAAQA,OAAM;AAAA,QAChB,CAAC;AAAA,MACH,CAAC;AAKD,YAAM,iBAAiB,OAAO,KAAK;AAEnC,MAAAD,KAAI,MAAM,UAAU,cAAc;AAElC,cAAQ,MAAM,GAAG;AACjB,aAAOE,MAAK,KAAK,SAAS,cAAc;AAAA,IAC1C;AAAA,EACF;AACF;;;AC3EA,OAAOC,SAAQ;AACf,OAAO,SAAS;AAChB,SAAS,oBAAoB;AAE7B,eAAsB,OAAO,UAAkB,WAAmB;AAChE,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,IAAAA,IAAG,iBAAiB,QAAQ,EACzB,KAAK,aAAa,CAAC,EACnB,KAAK,IAAI,QAAQ,SAAS,CAAC,EAC3B,GAAG,UAAU,MAAM,QAAQ,CAAC,EAC5B,GAAG,SAAS,CAAC,QAAQ,OAAO,GAAG,CAAC;AAAA,EACrC,CAAC;AACH;;;ACZA,OAAOC,SAAQ;AACf,OAAO,UAAU;AAGV,SAAS,kBAAqB,UAAkB;AACrD,MAAI;AACF,UAAM,aAAaC,IAAG,aAAa,UAAU,OAAO;AACpD,UAAM,OAAO,KAAK,MAAM,UAAU;AAIlC,WAAO;AAAA,EACT,SAAS,KAAP;AACA,UAAM,IAAI;AAAA,MACR,4BAA4B,aAAa,gBAAgB,GAAG;AAAA,IAC9D;AAAA,EACF;AACF;AAEO,SAAS,mBAAsB,UAAkB,SAAY;AAIlE,EAAAA,IAAG,cAAc,UAAU,KAAK,UAAU,OAAO,GAAG,OAAO;AAC7D;;;AThBO,SAAS,2BACd;AAAA,EACE;AAAA,EACA;AACF,GAIA,OAA6C,CAAC,GACtB;AACxB,SAAO,OAAO;AAAA,IACZ,KAAK,UAAU,CAAC,WAAW,iBAAiB,CAAC;AAAA,IAC7C,sBAAsB;AAAA,MACpB,cAAc,SAAS,eACnB,sBAAsB,SAAS,cAAc,gBAAgB,IAC7D;AAAA,MACJ,iBACE,KAAK,0BAA0B,SAAS,kBACpC,sBAAsB,SAAS,iBAAiB,gBAAgB,IAChE;AAAA,IACR,CAAC;AAAA,EACH;AACF;;;AU9BA,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAQjB,eAAsB,2BACpB,UACA,kBACA,YACA;AACA,QAAM,iBAAiB;AAAA,IACrB;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA,EAAE,wBAAwB,UAAU,EAAE,uBAAuB;AAAA,EAC/D;AAEA,QAAMC,IAAG;AAAA,IACPC,MAAK,KAAK,YAAY,cAAc;AAAA,IACpC,KAAK,UAAU,gBAAgB,MAAM,CAAC;AAAA,EACxC;AACF;;;AC1BA,OAAOC,SAAQ;AACf,SAAS,eAAe;AACxB,OAAOC,WAAU;AAiBjB,IAAM,iBAAwC;AAAA,EAC5C,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,iBAAiB;AACnB;AAMA,IAAI;AAEJ,IAAM,kBAAkB,OAAO,KAAK,cAAc;AAElD,IAAM,mBAAmB;AAIlB,SAAS,YAAmC;AACjD,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAQA,QAAMC,OAAM;AAAA,IACT,QAAQ,IAAI,4BAAyC;AAAA,EACxD;AAEA,QAAM,iBAAiBC,MAAK,KAAK,QAAQ,IAAI,GAAG,gBAAgB;AAEhE,EAAAD,KAAI,MAAM,kCAAkC,gBAAgB;AAE5D,QAAM,iBAAiBE,IAAG,WAAW,cAAc,IAC/C,kBAAiC,cAAc,IAC/C,CAAC;AAEL,QAAM,cAAc,OAAO,KAAK,cAAc,EAAE;AAAA,IAC9C,CAAC,QAAQ,CAAC,gBAAgB,SAAS,GAAG;AAAA,EACxC;AAEA,MAAI,CAAC,QAAQ,WAAW,GAAG;AACzB,IAAAF,KAAI,KAAK,kCAAkC,YAAY,KAAK,IAAI,CAAC;AAAA,EACnE;AAEA,QAAMG,UAAS,OAAO;AAAA,IACpB,CAAC;AAAA,IACD;AAAA,IACA;AAAA,EACF;AAEA,EAAAH,KAAI,MAAM,wBAAwB,aAAaG,OAAM,CAAC;AAEtD,aAAWA;AACX,SAAOA;AACT;;;ACpFA,OAAOC,SAAQ;AACf,SAAS,gBAAgB;AACzB,SAAS,WAAW;AACpB,OAAOC,WAAU;;;ACHjB,OAAOC,WAAU;;;ACAjB,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAIV,SAAS,qBAAqB,eAAuC;AAC1E,MAAID,IAAG,WAAWC,MAAK,KAAK,eAAe,gBAAgB,CAAC,GAAG;AAC7D,WAAO;AAAA,EACT;AAEA,MAAID,IAAG,WAAWC,MAAK,KAAK,eAAe,WAAW,CAAC,GAAG;AACxD,WAAO;AAAA,EACT;AAEA,MAAID,IAAG,WAAWC,MAAK,KAAK,eAAe,mBAAmB,CAAC,GAAG;AAChE,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,MAAM,kCAAkC;AACpD;;;ADJO,SAAS,kBAAkB,kBAA0B;AAC1D,QAAMC,OAAM,aAAa,UAAU,EAAE,QAAQ;AAE7C,QAAM,iBAAiB,qBAAqB,gBAAgB;AAE5D,UAAQ,gBAAgB;AAAA,IACtB,KAAK,QAAQ;AACX,YAAM,EAAE,UAAU,MAAM,IAAI;AAAA,QAC1BC,MAAK,KAAK,kBAAkB,qBAAqB;AAAA,MACnD;AAEA,MAAAD,KAAI,MAAM,iCAAiC,aAAa,KAAK,CAAC;AAC9D,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AAAA,IACL,KAAK,OAAO;AACV,YAAM,4BAA4BC,MAAK;AAAA,QACrC;AAAA,QACA;AAAA,MACF;AAEA,YAAM,EAAE,WAAW,IAAI;AAAA,QACrB;AAAA,MACF;AAEA,UAAI,CAAC,YAAY;AACf,cAAM,IAAI;AAAA,UACR,gCAAgC;AAAA,QAClC;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ADRA,eAAsB,uBACpB,kBACA,2BAC2B;AAC3B,QAAMC,OAAM,aAAa,UAAU,EAAE,QAAQ;AAE7C,MAAI,2BAA2B;AAC7B,IAAAA,KAAI;AAAA,MACF,2CAA2C;AAAA,IAC7C;AAAA,EACF;AAEA,QAAM,gBACJ,6BAA6B,kBAAkB,gBAAgB;AAEjE,QAAM,MAAM,QAAQ,IAAI;AACxB,UAAQ,MAAM,gBAAgB;AAE9B,QAAM,cAAc,cACjB,QAAQ,CAAC,SAAS,SAAS,IAAI,CAAC,EAIhC,OAAO,CAAC,QAAQC,IAAG,UAAU,GAAG,EAAE,YAAY,CAAC;AAElD,QAAM,YACJ,MAAM,QAAQ;AAAA,IACZ,YAAY,IAAI,OAAO,oBAAoB;AACzC,YAAM,eAAeC,MAAK,KAAK,iBAAiB,cAAc;AAE9D,UAAI,CAACD,IAAG,WAAW,YAAY,GAAG;AAChC,QAAAD,KAAI;AAAA,UACF,wBAAwB;AAAA,QAC1B;AACA;AAAA,MACF,OAAO;AACL,QAAAA,KAAI,MAAM,yBAAyB,iBAAiB;AAEpD,cAAM,WAAW,MAAM;AAAA,UACrBE,MAAK,KAAK,iBAAiB,cAAc;AAAA,QAC3C;AAEA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,aAAaA,MAAK,KAAK,kBAAkB,eAAe;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,GACA;AAAA,IACA,CAAC,KAAK,SAAU,OAAO,IAAI,KAAK,KAAK,SAAS,MAAM,IAAI,IAAI;AAAA,IAC5D,CAAC;AAAA,EACH;AAEA,UAAQ,MAAM,GAAG;AAEjB,SAAO;AACT;;;AGnGA,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAO,aAAa;AAIpB,eAAsB,kBAAkB,kBAA0B;AAChE,QAAMC,UAAS,UAAU;AACzB,QAAMC,OAAM,aAAa,UAAU,EAAE,QAAQ;AAE7C,MAAID,QAAO,cAAc;AACvB,IAAAC,KAAI,MAAM,mCAAmCD,QAAO,YAAY;AAChE,WAAOE,MAAK,KAAK,kBAAkBF,QAAO,YAAY;AAAA,EACxD;AAEA,QAAM,eAAeE,MAAK,KAAK,kBAAkBF,QAAO,YAAY;AAEpE,EAAAC,KAAI,MAAM,4BAA4B,YAAY;AAElD,MAAIE,IAAG,WAAW,YAAY,GAAG;AAC/B,UAAM,WAAW,MAAM,cAEpB,YAAY;AAEf,UAAM,SAAS,SAAS,iBAAiB;AAEzC,QAAI,QAAQ;AACV,aAAOD,MAAK,KAAK,kBAAkB,MAAM;AAAA,IAC3C,OAAO;AACL,YAAM,IAAI,MAAM;AAAA;AAAA,OAEf;AAAA,IACH;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM;AAAA;AAAA,KAEf;AAAA,EACH;AACF;;;ACzBO,SAAS,sBACd,UACA,kBACA,EAAE,yBAAyB,MAAM,IAAI,CAAC,GAC5B;AACV,QAAM,2BAA2B,OAAO,KAAK,gBAAgB;AAE7D,QAAM,+BACJ,yBACI;AAAA,IACE,GAAG,OAAO,KAAK,SAAS,gBAAgB,CAAC,CAAC;AAAA,IAC1C,GAAG,OAAO,KAAK,SAAS,mBAAmB,CAAC,CAAC;AAAA,EAC/C,IACA,OAAO,KAAK,SAAS,gBAAgB,CAAC,CAAC,GAC3C,OAAO,CAAC,SAAS,yBAAyB,SAAS,IAAI,CAAC;AAE1D,QAAM,0BAA0B,4BAA4B;AAAA,IAC1D,CAAC,gBACC;AAAA,MACE,iBAAiB,WAAW,EAAE;AAAA,MAC9B;AAAA,MACA,EAAE,uBAAuB;AAAA,IAC3B;AAAA,EACJ;AAEA,SAAO,4BAA4B,OAAO,uBAAuB;AACnE;;;ACvCA,OAAOE,WAAU;;;ACAjB,OAAO,YAAY;AAYnB,eAAsB,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAIrC;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA,EAEA;AACF,GAKG;AACD,QAAMC,UAAS,UAAU;AACzB,QAAMC,OAAM,aAAaD,QAAO,QAAQ;AAExC,QAAM,mBAA2C,CAAC;AAElD,aAAW,cAAc,mBAAmB;AAC1C,UAAM,MAAM,iBAAiB,UAAU;AAEvC,WAAO,YAAY,yCAAyC,YAAY;AAExE,UAAM,EAAE,KAAK,IAAI,IAAI;AAMrB,QAAI,iBAAiB,IAAI,GAAG;AAC1B,MAAAC,KAAI,MAAM,YAAY,yCAAyC;AAC/D;AAAA,IACF;AAEA,qBAAiB,IAAI,IAAI,MAAM;AAAA,MAC7B,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,IACF;AAAA,EAKF;AAEA,SAAO;AACT;;;ACjEO,SAAS,sBACd,cACA,kBACA;AACA,QAAMC,OAAM,aAAa,UAAU,EAAE,QAAQ;AAC7C,QAAM,2BAA2B,OAAO,KAAK,gBAAgB;AAE7D,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,YAAY,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACjD,UAAI,yBAAyB,SAAS,GAAG,GAAG;AAC1C,cAAM,MAAM,iBAAiB,GAAG;AAOhC,QAAAA,KAAI,MAAM,sBAAsB,eAAe,IAAI,iBAAiB;AAEpE,eAAO,CAAC,KAAK,QAAQ,IAAI,iBAAiB;AAAA,MAC5C,OAAO;AACL,eAAO,CAAC,KAAK,KAAK;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC7BA,OAAOC,UAAQ;AACf,OAAOC,YAAU;AAIjB,eAAsB,wBAAwB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,iBAAiB,MAAM,KAAK,kBAAkB,QAAQ,cAAc;AAC1E,QAAM,YAAYC,OAAK,KAAK,QAAQ,QAAQ;AAC5C,QAAM,OAAO,gBAAgB,SAAS;AACtC,QAAMC,KAAG,KAAKD,OAAK,KAAK,WAAW,SAAS,GAAG,UAAU;AAC3D;;;ACpBA,OAAOE,UAAQ;AACf,OAAOC,aAAY;AACnB,OAAOC,YAAU;AAmBV,SAAS,oBAAoB,gBAAgC;AAClE,UAAQ,gBAAgB;AAAA,IACtB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACX;AACF;AASO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAMC,OAAM,aAAa,UAAU,EAAE,QAAQ;AAE7C,QAAM,2BACJ,iBAAiB,iBAAiB,EAAE;AAEtC,QAAM,WAAW,oBAAoB,cAAc;AAEnD,QAAM,kBAAkBC,OAAK,KAAK,kBAAkB,QAAQ;AAC5D,QAAM,kBAAkBA,OAAK,KAAK,YAAY,QAAQ;AAEtD,UAAQ,gBAAgB;AAAA,IAMtB,KAAK;AAAA,IACL,KAAK,QAAQ;AACX,MAAAC,KAAG,aAAa,iBAAiB,eAAe;AAChD,MAAAF,KAAI,MAAM,sBAAsB,eAAe;AAC/C;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,YAAM,eAAe,kBAAgC,eAAe;AAEpE,MAAAA,KAAI,MAAM,gCAAgC,aAAa,eAAe;AAEtE,YAAM,kBAAkB,gBAAgB,YAAY;AAEpD,YAAM,mBACJ,gBAAgB,UAAU,wBAAwB;AAEpD,MAAAG;AAAA,QACE;AAAA,QACA,0DAA0D;AAAA,MAC5D;AAIA,sBAAgB,UAAU,GAAG,IAAI;AAKjC,aAAO,gBAAgB,UAAU,wBAAwB;AAEzD,yBAAmB,iBAAiB,eAAe;AAEnD,MAAAH,KAAI,MAAM,8BAA8B,eAAe;AAEvD;AAAA,IACF;AAAA,EAmCF;AACF;;;AC3IA,OAAOI,UAAQ;AAEf,SAAe,YAAY;AAM3B,eAAsB,mBACpB,mBACA,kBACA,QACA,YACA;AACA,QAAMC,OAAM,aAAa,UAAU,EAAE,QAAQ;AAC7C,QAAM,QAAQ;AAAA,IACZ,OAAO,QAAQ,iBAAiB,EAAE,IAAI,OAAO,CAAC,aAAa,QAAQ,MAAM;AACvE,YAAM,MAAM,iBAAiB,WAAW,EAAE;AAE1C,YAAM,YAAY,KAAK,QAAQ,GAAG;AAGlC,MAAAA,KAAI,MAAM,aAAa,QAAQ;AAE/B,YAAM,OAAO,UAAU,SAAS;AAEhC,YAAM,iBAAiB,KAAK,YAAY,GAAG;AAE3C,YAAMC,KAAG,UAAU,cAAc;AAEjC,YAAMA,KAAG,KAAK,KAAK,WAAW,SAAS,GAAG,gBAAgB;AAAA,QACxD,WAAW;AAAA,MACb,CAAC;AAED,MAAAD,KAAI;AAAA,QACF,0BAA0B;AAAA,UACxB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AxBpBA,IAAM,SAAS,UAAU;AACzB,IAAM,MAAM,aAAa,OAAO,QAAQ;AAExC,WAAW,QAAQ;AAEnB,eAAe,QAAQ;AAMrB,QAAM,mBAAmB,OAAO,oBAC5BE,OAAK,KAAK,QAAQ,IAAI,GAAG,OAAO,iBAAiB,IACjD,QAAQ,IAAI;AAMhB,QAAM,mBAAmB,OAAO,oBAC5B,QAAQ,IAAI,IACZA,OAAK,KAAK,kBAAkB,OAAO,aAAa;AAEpD,QAAM,iBAAiB,MAAM,kBAAkB,gBAAgB;AAE/D,EAAAC;AAAA,IACEC,KAAG,WAAW,cAAc;AAAA,IAC5B,uCAAuC;AAAA,EACzC;AAEA,MAAI,MAAM,kBAAkB,gBAAgB;AAC5C,MAAI;AAAA,IACF;AAAA,IACA,oBAAoB,kBAAkB,gBAAgB;AAAA,EACxD;AAEA,QAAM,iBAAiB,qBAAqB,gBAAgB;AAE5D,QAAM,aAAaF,OAAK,KAAK,kBAAkB,OAAO,cAAc;AAEpE,MAAI;AAAA,IACF;AAAA,IACA,oBAAoB,YAAY,gBAAgB;AAAA,EAClD;AAKA,QAAME,KAAG,UAAU,UAAU;AAE7B,QAAMA,KAAG,OAAO,GAAG,iBAAiB;AACpC,MAAI,MAAM,sCAAsC;AAMhD,QAAM,mBAAmB,MAAM;AAAA,IAC7B;AAAA,IACA,OAAO;AAAA,EACT;AAEA,QAAM,SAASF,OAAK,KAAK,YAAY,OAAO;AAC5C,QAAME,KAAG,UAAU,MAAM;AAOzB,MAAI,mBAAmB,QAAQ;AAC7B,QAAI,MAAM,iCAAiC;AAAA,EAC7C,OAAO;AACL,QAAI,MAAM,gCAAgC;AAAA,EAC5C;AAEA,QAAM,WAAW,MAAM;AAAA,IACrBF,OAAK,KAAK,kBAAkB,cAAc;AAAA,EAC5C;AAEA,QAAM,oBAAoB,sBAAsB,UAAU,kBAAkB;AAAA,IAC1E,wBAAwB,OAAO;AAAA,EACjC,CAAC;AAED,QAAM,oBAAoB,MAAM,iBAAiB;AAAA,IAC/C;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB;AAAA,EACF,CAAC;AAED,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAKA,QAAM,mBAAmB,mBAAmB,kBAAkB,UAAU;AAKxE,QAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAMD,QAAM,2BAA2B,UAAU,kBAAkB,UAAU;AAEvE,MAAI,OAAO,iBAAiB;AAC1B,QAAI,KAAK,gDAAgD;AAAA,EAC3D,OAAO;AAIL,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA,mBAAmB,SAAS;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAMA,MAAI;AAAA,IACF;AAAA,IACA,oBAAoB,QAAQ,gBAAgB;AAAA,EAC9C;AACA,QAAME,KAAG,OAAO,MAAM;AAEtB,MAAI,MAAM,4BAA4B,UAAU;AAEhD,MAAI,KAAK,mBAAmB;AAC9B;AAEA,MAAM,EAAE,MAAM,CAAC,QAAQ;AACrB,MAAI,eAAe,OAAO;AACxB,QAAI,MAAM,IAAI,KAAK;AACnB,YAAQ,KAAK,CAAC;AAAA,EAChB,OAAO;AACL,YAAQ,MAAM,GAAG;AAAA,EACnB;AACF,CAAC;AAED,QAAQ,GAAG,sBAAsB,IAAI,KAAK;","names":["fs","assert","path","path","fs","fs","path","log","stdout","path","fs","fs","fs","fs","path","fs","path","fs","path","log","path","fs","config","fs","path","path","fs","path","log","path","log","fs","path","fs","path","config","log","path","fs","path","config","log","log","fs","path","path","fs","fs","assert","path","log","path","fs","assert","fs","log","fs","path","assert","fs"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "isolate-package",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Isolate a monorepo package by bundling the build output with its shared workspace packages and lock file to form a self-contained directory.",
|
|
5
5
|
"author": "Thijs Koerselman",
|
|
6
6
|
"license": "MIT",
|