isolate-package 1.33.0 → 1.35.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.
Files changed (68) hide show
  1. package/dist/index.mjs +1 -1
  2. package/dist/index.mjs.map +1 -1
  3. package/dist/isolate-bin.mjs +5 -6
  4. package/dist/isolate-bin.mjs.map +1 -1
  5. package/dist/{isolate-DyRD5Zd_.mjs → isolate-ts-Igq7C.mjs} +888 -271
  6. package/dist/isolate-ts-Igq7C.mjs.map +1 -0
  7. package/package.json +23 -19
  8. package/src/get-internal-package-names.test.ts +1 -1
  9. package/src/get-internal-package-names.ts +2 -2
  10. package/src/isolate-bin.ts +5 -5
  11. package/src/isolate.ts +22 -17
  12. package/src/lib/config.test.ts +1 -1
  13. package/src/lib/config.ts +3 -3
  14. package/src/lib/lockfile/helpers/bun-lockfile.ts +153 -0
  15. package/src/lib/lockfile/helpers/generate-bun-lockfile.test.ts +3 -3
  16. package/src/lib/lockfile/helpers/generate-bun-lockfile.ts +14 -146
  17. package/src/lib/lockfile/helpers/generate-npm-lockfile.integration.test.ts +1 -5
  18. package/src/lib/lockfile/helpers/generate-npm-lockfile.test.ts +311 -16
  19. package/src/lib/lockfile/helpers/generate-npm-lockfile.ts +193 -22
  20. package/src/lib/lockfile/helpers/generate-pnpm-lockfile.test.ts +83 -2
  21. package/src/lib/lockfile/helpers/generate-pnpm-lockfile.ts +33 -6
  22. package/src/lib/lockfile/helpers/generate-yarn-lockfile.ts +5 -5
  23. package/src/lib/lockfile/process-lockfile.test.ts +2 -2
  24. package/src/lib/manifest/adapt-target-package-manifest.ts +22 -13
  25. package/src/lib/manifest/helpers/adapt-internal-package-manifests.test.ts +72 -3
  26. package/src/lib/manifest/helpers/adapt-internal-package-manifests.ts +22 -12
  27. package/src/lib/manifest/helpers/adapt-manifest-internal-deps.ts +1 -1
  28. package/src/lib/manifest/helpers/adopt-pnpm-fields-from-root.test.ts +4 -4
  29. package/src/lib/manifest/helpers/adopt-pnpm-fields-from-root.ts +7 -7
  30. package/src/lib/manifest/helpers/resolve-catalog-dependencies.test.ts +410 -0
  31. package/src/lib/manifest/helpers/resolve-catalog-dependencies.ts +115 -27
  32. package/src/lib/manifest/io.ts +6 -2
  33. package/src/lib/manifest/validate-manifest.ts +2 -2
  34. package/src/lib/output/get-build-output-dir.ts +1 -1
  35. package/src/lib/output/pack-dependencies.ts +1 -1
  36. package/src/lib/output/process-build-output-files.ts +6 -17
  37. package/src/lib/package-manager/helpers/infer-from-files.ts +5 -5
  38. package/src/lib/package-manager/helpers/infer-from-manifest.ts +7 -8
  39. package/src/lib/package-manager/index.ts +1 -1
  40. package/src/lib/package-manager/names.ts +8 -10
  41. package/src/lib/patches/collect-installed-names-bun.test.ts +154 -0
  42. package/src/lib/patches/collect-installed-names-bun.ts +87 -0
  43. package/src/lib/patches/collect-installed-names-pnpm.test.ts +316 -0
  44. package/src/lib/patches/collect-installed-names-pnpm.ts +365 -0
  45. package/src/lib/patches/copy-patches.test.ts +130 -13
  46. package/src/lib/patches/copy-patches.ts +47 -10
  47. package/src/lib/patches/write-isolate-pnpm-workspace.test.ts +83 -3
  48. package/src/lib/patches/write-isolate-pnpm-workspace.ts +4 -4
  49. package/src/lib/registry/collect-reachable-package-names.test.ts +1 -1
  50. package/src/lib/registry/create-packages-registry.ts +34 -31
  51. package/src/lib/registry/helpers/find-packages-globs.ts +23 -19
  52. package/src/lib/registry/list-internal-packages.test.ts +2 -2
  53. package/src/lib/types.ts +2 -2
  54. package/src/lib/utils/filter-patched-dependencies.test.ts +1 -1
  55. package/src/lib/utils/filter-patched-dependencies.ts +2 -2
  56. package/src/lib/utils/get-dirname.ts +1 -1
  57. package/src/lib/utils/index.ts +1 -1
  58. package/src/lib/utils/json.ts +12 -14
  59. package/src/lib/utils/pack.ts +32 -22
  60. package/src/lib/utils/reset-isolate-dir.test.ts +165 -0
  61. package/src/lib/utils/reset-isolate-dir.ts +147 -0
  62. package/src/lib/utils/unpack.test.ts +76 -0
  63. package/src/lib/utils/unpack.ts +16 -10
  64. package/src/lib/utils/wait-for-complete-file.test.ts +105 -0
  65. package/src/lib/utils/wait-for-complete-file.ts +44 -0
  66. package/src/lib/utils/yaml.ts +8 -9
  67. package/src/testing/setup.ts +1 -1
  68. package/dist/isolate-DyRD5Zd_.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { c as detectPackageManager, i as defineConfig, l as readTypedJson, n as listInternalPackages, o as resolveConfig, r as createPackagesRegistry, s as resolveWorkspacePaths, t as isolate } from "./isolate-DyRD5Zd_.mjs";
1
+ import { a as defineConfig, c as resolveWorkspacePaths, i as detectPackageManager, l as readTypedJson, n as listInternalPackages, r as createPackagesRegistry, s as resolveConfig, t as isolate } from "./isolate-ts-Igq7C.mjs";
2
2
  import path from "node:path";
3
3
  //#region src/get-internal-package-names.ts
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/get-internal-package-names.ts"],"sourcesContent":["import path from \"node:path\";\nimport type { IsolateConfig } from \"./lib/config\";\nimport { resolveConfig, resolveWorkspacePaths } from \"./lib/config\";\nimport { detectPackageManager } from \"./lib/package-manager\";\nimport { createPackagesRegistry, listInternalPackages } from \"./lib/registry\";\nimport type { PackageManifest } from \"./lib/types\";\nimport { readTypedJson } from \"./lib/utils\";\n\n/**\n * Get the names of all internal workspace packages that the target package\n * depends on. This is useful for tools like tsup that need a list of internal\n * packages to include in `noExternal`.\n *\n * If no config is passed, it reads from `isolate.config.{ts,js,json}` in the\n * current working directory.\n */\nexport async function getInternalPackageNames(\n config?: IsolateConfig,\n): Promise<string[]> {\n const resolvedConfig = resolveConfig(config);\n const { targetPackageDir, workspaceRootDir } =\n resolveWorkspacePaths(resolvedConfig);\n\n detectPackageManager(workspaceRootDir);\n\n const targetPackageManifest = await readTypedJson<PackageManifest>(\n path.join(targetPackageDir, \"package.json\"),\n );\n\n const packagesRegistry = await createPackagesRegistry(\n workspaceRootDir,\n resolvedConfig.workspacePackages,\n );\n\n return listInternalPackages(targetPackageManifest, packagesRegistry, {\n includeDevDependencies: resolvedConfig.includeDevDependencies,\n });\n}\n"],"mappings":";;;;;;;;;;;AAgBA,eAAsB,wBACpB,QACmB;CACnB,MAAM,iBAAiB,cAAc,OAAO;CAC5C,MAAM,EAAE,kBAAkB,qBACxB,sBAAsB,eAAe;AAEvC,sBAAqB,iBAAiB;AAWtC,QAAO,qBATuB,MAAM,cAClC,KAAK,KAAK,kBAAkB,eAAe,CAC5C,EAEwB,MAAM,uBAC7B,kBACA,eAAe,kBAChB,EAEoE,EACnE,wBAAwB,eAAe,wBACxC,CAAC"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/get-internal-package-names.ts"],"sourcesContent":["import path from \"node:path\";\nimport type { IsolateConfig } from \"./lib/config\";\nimport { resolveConfig, resolveWorkspacePaths } from \"./lib/config\";\nimport { detectPackageManager } from \"./lib/package-manager\";\nimport { createPackagesRegistry, listInternalPackages } from \"./lib/registry\";\nimport type { PackageManifest } from \"./lib/types\";\nimport { readTypedJson } from \"./lib/utils\";\n\n/**\n * Get the names of all internal workspace packages that the target package\n * depends on. This is useful for tools like tsup that need a list of internal\n * packages to include in `noExternal`.\n *\n * If no config is passed, it reads from `isolate.config.{ts,js,json}` in the\n * current working directory.\n */\nexport async function getInternalPackageNames(\n config?: IsolateConfig,\n): Promise<string[]> {\n const resolvedConfig = resolveConfig(config);\n const { targetPackageDir, workspaceRootDir } =\n resolveWorkspacePaths(resolvedConfig);\n\n detectPackageManager(workspaceRootDir);\n\n const targetPackageManifest = (await readTypedJson(\n path.join(targetPackageDir, \"package.json\"),\n )) as PackageManifest;\n\n const packagesRegistry = await createPackagesRegistry(\n workspaceRootDir,\n resolvedConfig.workspacePackages,\n );\n\n return listInternalPackages(targetPackageManifest, packagesRegistry, {\n includeDevDependencies: resolvedConfig.includeDevDependencies,\n });\n}\n"],"mappings":";;;;;;;;;;;AAgBA,eAAsB,wBACpB,QACmB;CACnB,MAAM,iBAAiB,cAAc,OAAO;CAC5C,MAAM,EAAE,kBAAkB,qBACxB,sBAAsB,eAAe;CAEvC,qBAAqB,iBAAiB;CAWtC,OAAO,qBAAqB,MATS,cACnC,KAAK,KAAK,kBAAkB,eAAe,CAC5C,EAOkD,MALpB,uBAC7B,kBACA,eAAe,kBAChB,EAEoE,EACnE,wBAAwB,eAAe,wBACxC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as loadConfigFromFile, t as isolate, u as filterObjectUndefined } from "./isolate-DyRD5Zd_.mjs";
2
+ import { o as loadConfigFromFile, t as isolate, u as filterObjectUndefined } from "./isolate-ts-Igq7C.mjs";
3
3
  import { outdent } from "outdent";
4
4
  import console from "node:console";
5
5
  import meow from "meow";
@@ -134,11 +134,10 @@ async function run() {
134
134
  ...cliOverrides
135
135
  });
136
136
  }
137
- run().catch((err) => {
138
- if (err instanceof Error) {
139
- console.error(err.stack);
140
- process.exit(1);
141
- } else console.error(err);
137
+ run().catch((error) => {
138
+ if (error instanceof Error) console.error(error.stack);
139
+ else console.error(error);
140
+ process.exit(1);
142
141
  });
143
142
  //#endregion
144
143
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"isolate-bin.mjs","names":[],"sources":["../src/lib/cli.ts","../src/isolate-bin.ts"],"sourcesContent":["import type { IsolateConfig } from \"./config\";\nimport type { LogLevel } from \"./logger\";\nimport { filterObjectUndefined } from \"./utils/filter-object-undefined\";\n\nconst validLogLevels: readonly LogLevel[] = [\"info\", \"debug\", \"warn\", \"error\"];\n\n/**\n * Check if a boolean flag was explicitly passed on the command line. meow\n * returns `false` for unset boolean flags, making it impossible to distinguish\n * \"not passed\" from \"explicitly set to false\" via `--no-<flag>`.\n */\nexport function wasFlagExplicitlyPassed(\n flagName: string,\n argv: string[],\n shortFlag?: string,\n): boolean {\n const kebab = flagName.replace(/[A-Z]/g, (l) => `-${l.toLowerCase()}`);\n return argv.some(\n (arg) =>\n arg === `--${kebab}` ||\n arg === `--no-${kebab}` ||\n (shortFlag !== undefined && arg === `-${shortFlag}`),\n );\n}\n\n/**\n * Validate a log level string against the allowed values. Returns undefined if\n * the input is undefined, throws if the value is not a valid log level.\n */\nexport function parseLogLevel(value: string | undefined): LogLevel | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (!validLogLevels.includes(value as LogLevel)) {\n throw new Error(\n `Invalid log level: \"${value}\". Must be one of: ${validLogLevels.join(\", \")}`,\n );\n }\n\n return value as LogLevel;\n}\n\n/** The parsed flags shape that meow produces for our flag definitions. */\nexport type ParsedFlags = {\n buildDirName: string | undefined;\n includeDevDependencies: boolean | undefined;\n isolateDirName: string | undefined;\n logLevel: string | undefined;\n targetPackagePath: string | undefined;\n tsconfigPath: string | undefined;\n workspacePackages: string[] | undefined;\n workspaceRoot: string | undefined;\n forceNpm: boolean | undefined;\n pickFromScripts: string[] | undefined;\n omitFromScripts: string[] | undefined;\n omitPackageManager: boolean | undefined;\n};\n\n/**\n * Build CLI overrides from parsed meow flags. Only includes values that were\n * actually provided by the user, so they can cleanly override config file\n * values via spread.\n */\nexport function buildCliOverrides(\n flags: ParsedFlags,\n argv: string[],\n): IsolateConfig {\n const logLevel = parseLogLevel(flags.logLevel);\n\n return filterObjectUndefined({\n buildDirName: flags.buildDirName,\n isolateDirName: flags.isolateDirName,\n logLevel,\n targetPackagePath: flags.targetPackagePath,\n tsconfigPath: flags.tsconfigPath,\n workspaceRoot: flags.workspaceRoot,\n workspacePackages: flags.workspacePackages?.length\n ? flags.workspacePackages\n : undefined,\n pickFromScripts: flags.pickFromScripts?.length\n ? flags.pickFromScripts\n : undefined,\n omitFromScripts: flags.omitFromScripts?.length\n ? flags.omitFromScripts\n : undefined,\n ...(wasFlagExplicitlyPassed(\"forceNpm\", argv) && {\n forceNpm: flags.forceNpm,\n }),\n ...(wasFlagExplicitlyPassed(\"includeDevDependencies\", argv, \"d\") && {\n includeDevDependencies: flags.includeDevDependencies,\n }),\n ...(wasFlagExplicitlyPassed(\"omitPackageManager\", argv) && {\n omitPackageManager: flags.omitPackageManager,\n }),\n }) as IsolateConfig;\n}\n","#!/usr/bin/env node\nimport console from \"node:console\";\nimport meow from \"meow\";\nimport { outdent } from \"outdent\";\nimport sourceMaps from \"source-map-support\";\nimport { isolate } from \"./isolate\";\nimport { buildCliOverrides } from \"./lib/cli\";\nimport { loadConfigFromFile } from \"./lib/config\";\n\nsourceMaps.install();\n\nconst cli = meow(\n outdent`\n Isolate a monorepo workspace package into a self-contained directory.\n\n Usage\n $ isolate [options]\n\n Options\n -b, --build-dir-name <name> Build output directory name\n -d, --include-dev-dependencies Include devDependencies in the isolated package\n -o, --isolate-dir-name <name> Name of the isolate output directory (default: isolate)\n -l, --log-level <level> Log level: info, debug, warn, error (default: info)\n -t, --target-package-path <path> Path to the target package\n -c, --tsconfig-path <path> Path to tsconfig.json (default: ./tsconfig.json)\n -w, --workspace-packages <glob> Workspace package globs (repeatable)\n -r, --workspace-root <path> Path to the workspace root (auto-detected by default)\n --force-npm Force npm lockfile generation\n -p, --pick-from-scripts <name> Scripts to include (repeatable)\n --omit-from-scripts <name> Scripts to exclude (repeatable)\n --omit-package-manager Omit the packageManager field from the manifest\n\n Examples\n $ isolate --log-level debug\n $ isolate --force-npm\n $ isolate --pick-from-scripts build --pick-from-scripts start\n `,\n {\n importMeta: import.meta,\n flags: {\n buildDirName: {\n type: \"string\",\n shortFlag: \"b\",\n },\n includeDevDependencies: {\n type: \"boolean\",\n shortFlag: \"d\",\n },\n isolateDirName: {\n type: \"string\",\n shortFlag: \"o\",\n },\n logLevel: {\n type: \"string\",\n shortFlag: \"l\",\n },\n targetPackagePath: {\n type: \"string\",\n shortFlag: \"t\",\n },\n tsconfigPath: {\n type: \"string\",\n shortFlag: \"c\",\n },\n workspacePackages: {\n type: \"string\",\n shortFlag: \"w\",\n isMultiple: true,\n },\n workspaceRoot: {\n type: \"string\",\n shortFlag: \"r\",\n },\n forceNpm: {\n type: \"boolean\",\n },\n pickFromScripts: {\n type: \"string\",\n shortFlag: \"p\",\n isMultiple: true,\n },\n omitFromScripts: {\n type: \"string\",\n isMultiple: true,\n },\n omitPackageManager: {\n type: \"boolean\",\n },\n },\n },\n);\n\nasync function run() {\n const cliOverrides = buildCliOverrides(cli.flags, process.argv);\n const fileConfig = loadConfigFromFile();\n const mergedConfig = { ...fileConfig, ...cliOverrides };\n await isolate(mergedConfig);\n}\n\nrun().catch((err) => {\n if (err instanceof Error) {\n console.error(err.stack);\n process.exit(1);\n } else {\n console.error(err);\n }\n});\n"],"mappings":";;;;;;;AAIA,MAAM,iBAAsC;CAAC;CAAQ;CAAS;CAAQ;CAAQ;;;;;;AAO9E,SAAgB,wBACd,UACA,MACA,WACS;CACT,MAAM,QAAQ,SAAS,QAAQ,WAAW,MAAM,IAAI,EAAE,aAAa,GAAG;AACtE,QAAO,KAAK,MACT,QACC,QAAQ,KAAK,WACb,QAAQ,QAAQ,WACf,cAAc,KAAA,KAAa,QAAQ,IAAI,YAC3C;;;;;;AAOH,SAAgB,cAAc,OAAiD;AAC7E,KAAI,UAAU,KAAA,EACZ;AAGF,KAAI,CAAC,eAAe,SAAS,MAAkB,CAC7C,OAAM,IAAI,MACR,uBAAuB,MAAM,qBAAqB,eAAe,KAAK,KAAK,GAC5E;AAGH,QAAO;;;;;;;AAwBT,SAAgB,kBACd,OACA,MACe;CACf,MAAM,WAAW,cAAc,MAAM,SAAS;AAE9C,QAAO,sBAAsB;EAC3B,cAAc,MAAM;EACpB,gBAAgB,MAAM;EACtB;EACA,mBAAmB,MAAM;EACzB,cAAc,MAAM;EACpB,eAAe,MAAM;EACrB,mBAAmB,MAAM,mBAAmB,SACxC,MAAM,oBACN,KAAA;EACJ,iBAAiB,MAAM,iBAAiB,SACpC,MAAM,kBACN,KAAA;EACJ,iBAAiB,MAAM,iBAAiB,SACpC,MAAM,kBACN,KAAA;EACJ,GAAI,wBAAwB,YAAY,KAAK,IAAI,EAC/C,UAAU,MAAM,UACjB;EACD,GAAI,wBAAwB,0BAA0B,MAAM,IAAI,IAAI,EAClE,wBAAwB,MAAM,wBAC/B;EACD,GAAI,wBAAwB,sBAAsB,KAAK,IAAI,EACzD,oBAAoB,MAAM,oBAC3B;EACF,CAAC;;;;ACtFJ,WAAW,SAAS;AAEpB,MAAM,MAAM,KACV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;KAyBP;CACE,YAAY,OAAO;CACnB,OAAO;EACL,cAAc;GACZ,MAAM;GACN,WAAW;GACZ;EACD,wBAAwB;GACtB,MAAM;GACN,WAAW;GACZ;EACD,gBAAgB;GACd,MAAM;GACN,WAAW;GACZ;EACD,UAAU;GACR,MAAM;GACN,WAAW;GACZ;EACD,mBAAmB;GACjB,MAAM;GACN,WAAW;GACZ;EACD,cAAc;GACZ,MAAM;GACN,WAAW;GACZ;EACD,mBAAmB;GACjB,MAAM;GACN,WAAW;GACX,YAAY;GACb;EACD,eAAe;GACb,MAAM;GACN,WAAW;GACZ;EACD,UAAU,EACR,MAAM,WACP;EACD,iBAAiB;GACf,MAAM;GACN,WAAW;GACX,YAAY;GACb;EACD,iBAAiB;GACf,MAAM;GACN,YAAY;GACb;EACD,oBAAoB,EAClB,MAAM,WACP;EACF;CACF,CACF;AAED,eAAe,MAAM;CACnB,MAAM,eAAe,kBAAkB,IAAI,OAAO,QAAQ,KAAK;AAG/D,OAAM,QADe;EAAE,GADJ,oBAAoB;EACD,GAAG;EAAc,CAC5B;;AAG7B,KAAK,CAAC,OAAO,QAAQ;AACnB,KAAI,eAAe,OAAO;AACxB,UAAQ,MAAM,IAAI,MAAM;AACxB,UAAQ,KAAK,EAAE;OAEf,SAAQ,MAAM,IAAI;EAEpB"}
1
+ {"version":3,"file":"isolate-bin.mjs","names":[],"sources":["../src/lib/cli.ts","../src/isolate-bin.ts"],"sourcesContent":["import type { IsolateConfig } from \"./config\";\nimport type { LogLevel } from \"./logger\";\nimport { filterObjectUndefined } from \"./utils/filter-object-undefined\";\n\nconst validLogLevels: readonly LogLevel[] = [\"info\", \"debug\", \"warn\", \"error\"];\n\n/**\n * Check if a boolean flag was explicitly passed on the command line. meow\n * returns `false` for unset boolean flags, making it impossible to distinguish\n * \"not passed\" from \"explicitly set to false\" via `--no-<flag>`.\n */\nexport function wasFlagExplicitlyPassed(\n flagName: string,\n argv: string[],\n shortFlag?: string,\n): boolean {\n const kebab = flagName.replace(/[A-Z]/g, (l) => `-${l.toLowerCase()}`);\n return argv.some(\n (arg) =>\n arg === `--${kebab}` ||\n arg === `--no-${kebab}` ||\n (shortFlag !== undefined && arg === `-${shortFlag}`),\n );\n}\n\n/**\n * Validate a log level string against the allowed values. Returns undefined if\n * the input is undefined, throws if the value is not a valid log level.\n */\nexport function parseLogLevel(value: string | undefined): LogLevel | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (!validLogLevels.includes(value as LogLevel)) {\n throw new Error(\n `Invalid log level: \"${value}\". Must be one of: ${validLogLevels.join(\", \")}`,\n );\n }\n\n return value as LogLevel;\n}\n\n/** The parsed flags shape that meow produces for our flag definitions. */\nexport type ParsedFlags = {\n buildDirName: string | undefined;\n includeDevDependencies: boolean | undefined;\n isolateDirName: string | undefined;\n logLevel: string | undefined;\n targetPackagePath: string | undefined;\n tsconfigPath: string | undefined;\n workspacePackages: string[] | undefined;\n workspaceRoot: string | undefined;\n forceNpm: boolean | undefined;\n pickFromScripts: string[] | undefined;\n omitFromScripts: string[] | undefined;\n omitPackageManager: boolean | undefined;\n};\n\n/**\n * Build CLI overrides from parsed meow flags. Only includes values that were\n * actually provided by the user, so they can cleanly override config file\n * values via spread.\n */\nexport function buildCliOverrides(\n flags: ParsedFlags,\n argv: string[],\n): IsolateConfig {\n const logLevel = parseLogLevel(flags.logLevel);\n\n return filterObjectUndefined({\n buildDirName: flags.buildDirName,\n isolateDirName: flags.isolateDirName,\n logLevel,\n targetPackagePath: flags.targetPackagePath,\n tsconfigPath: flags.tsconfigPath,\n workspaceRoot: flags.workspaceRoot,\n workspacePackages: flags.workspacePackages?.length\n ? flags.workspacePackages\n : undefined,\n pickFromScripts: flags.pickFromScripts?.length\n ? flags.pickFromScripts\n : undefined,\n omitFromScripts: flags.omitFromScripts?.length\n ? flags.omitFromScripts\n : undefined,\n ...(wasFlagExplicitlyPassed(\"forceNpm\", argv) && {\n forceNpm: flags.forceNpm,\n }),\n ...(wasFlagExplicitlyPassed(\"includeDevDependencies\", argv, \"d\") && {\n includeDevDependencies: flags.includeDevDependencies,\n }),\n ...(wasFlagExplicitlyPassed(\"omitPackageManager\", argv) && {\n omitPackageManager: flags.omitPackageManager,\n }),\n }) as IsolateConfig;\n}\n","#!/usr/bin/env node\nimport console from \"node:console\";\nimport meow from \"meow\";\nimport { outdent } from \"outdent\";\nimport sourceMaps from \"source-map-support\";\nimport { isolate } from \"./isolate\";\nimport { buildCliOverrides } from \"./lib/cli\";\nimport { loadConfigFromFile } from \"./lib/config\";\n\nsourceMaps.install();\n\nconst cli = meow(\n outdent`\n Isolate a monorepo workspace package into a self-contained directory.\n\n Usage\n $ isolate [options]\n\n Options\n -b, --build-dir-name <name> Build output directory name\n -d, --include-dev-dependencies Include devDependencies in the isolated package\n -o, --isolate-dir-name <name> Name of the isolate output directory (default: isolate)\n -l, --log-level <level> Log level: info, debug, warn, error (default: info)\n -t, --target-package-path <path> Path to the target package\n -c, --tsconfig-path <path> Path to tsconfig.json (default: ./tsconfig.json)\n -w, --workspace-packages <glob> Workspace package globs (repeatable)\n -r, --workspace-root <path> Path to the workspace root (auto-detected by default)\n --force-npm Force npm lockfile generation\n -p, --pick-from-scripts <name> Scripts to include (repeatable)\n --omit-from-scripts <name> Scripts to exclude (repeatable)\n --omit-package-manager Omit the packageManager field from the manifest\n\n Examples\n $ isolate --log-level debug\n $ isolate --force-npm\n $ isolate --pick-from-scripts build --pick-from-scripts start\n `,\n {\n importMeta: import.meta,\n flags: {\n buildDirName: {\n type: \"string\",\n shortFlag: \"b\",\n },\n includeDevDependencies: {\n type: \"boolean\",\n shortFlag: \"d\",\n },\n isolateDirName: {\n type: \"string\",\n shortFlag: \"o\",\n },\n logLevel: {\n type: \"string\",\n shortFlag: \"l\",\n },\n targetPackagePath: {\n type: \"string\",\n shortFlag: \"t\",\n },\n tsconfigPath: {\n type: \"string\",\n shortFlag: \"c\",\n },\n workspacePackages: {\n type: \"string\",\n shortFlag: \"w\",\n isMultiple: true,\n },\n workspaceRoot: {\n type: \"string\",\n shortFlag: \"r\",\n },\n forceNpm: {\n type: \"boolean\",\n },\n pickFromScripts: {\n type: \"string\",\n shortFlag: \"p\",\n isMultiple: true,\n },\n omitFromScripts: {\n type: \"string\",\n isMultiple: true,\n },\n omitPackageManager: {\n type: \"boolean\",\n },\n },\n },\n);\n\nasync function run() {\n const cliOverrides = buildCliOverrides(cli.flags, process.argv);\n const fileConfig = loadConfigFromFile();\n const mergedConfig = { ...fileConfig, ...cliOverrides };\n await isolate(mergedConfig);\n}\n\nrun().catch((error) => {\n if (error instanceof Error) {\n console.error(error.stack);\n } else {\n console.error(error);\n }\n process.exit(1);\n});\n"],"mappings":";;;;;;;AAIA,MAAM,iBAAsC;CAAC;CAAQ;CAAS;CAAQ;CAAQ;;;;;;AAO9E,SAAgB,wBACd,UACA,MACA,WACS;CACT,MAAM,QAAQ,SAAS,QAAQ,WAAW,MAAM,IAAI,EAAE,aAAa,GAAG;CACtE,OAAO,KAAK,MACT,QACC,QAAQ,KAAK,WACb,QAAQ,QAAQ,WACf,cAAc,KAAA,KAAa,QAAQ,IAAI,YAC3C;;;;;;AAOH,SAAgB,cAAc,OAAiD;CAC7E,IAAI,UAAU,KAAA,GACZ;CAGF,IAAI,CAAC,eAAe,SAAS,MAAkB,EAC7C,MAAM,IAAI,MACR,uBAAuB,MAAM,qBAAqB,eAAe,KAAK,KAAK,GAC5E;CAGH,OAAO;;;;;;;AAwBT,SAAgB,kBACd,OACA,MACe;CACf,MAAM,WAAW,cAAc,MAAM,SAAS;CAE9C,OAAO,sBAAsB;EAC3B,cAAc,MAAM;EACpB,gBAAgB,MAAM;EACtB;EACA,mBAAmB,MAAM;EACzB,cAAc,MAAM;EACpB,eAAe,MAAM;EACrB,mBAAmB,MAAM,mBAAmB,SACxC,MAAM,oBACN,KAAA;EACJ,iBAAiB,MAAM,iBAAiB,SACpC,MAAM,kBACN,KAAA;EACJ,iBAAiB,MAAM,iBAAiB,SACpC,MAAM,kBACN,KAAA;EACJ,GAAI,wBAAwB,YAAY,KAAK,IAAI,EAC/C,UAAU,MAAM,UACjB;EACD,GAAI,wBAAwB,0BAA0B,MAAM,IAAI,IAAI,EAClE,wBAAwB,MAAM,wBAC/B;EACD,GAAI,wBAAwB,sBAAsB,KAAK,IAAI,EACzD,oBAAoB,MAAM,oBAC3B;EACF,CAAC;;;;ACtFJ,WAAW,SAAS;AAEpB,MAAM,MAAM,KACV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;KAyBP;CACE,YAAY,OAAO;CACnB,OAAO;EACL,cAAc;GACZ,MAAM;GACN,WAAW;GACZ;EACD,wBAAwB;GACtB,MAAM;GACN,WAAW;GACZ;EACD,gBAAgB;GACd,MAAM;GACN,WAAW;GACZ;EACD,UAAU;GACR,MAAM;GACN,WAAW;GACZ;EACD,mBAAmB;GACjB,MAAM;GACN,WAAW;GACZ;EACD,cAAc;GACZ,MAAM;GACN,WAAW;GACZ;EACD,mBAAmB;GACjB,MAAM;GACN,WAAW;GACX,YAAY;GACb;EACD,eAAe;GACb,MAAM;GACN,WAAW;GACZ;EACD,UAAU,EACR,MAAM,WACP;EACD,iBAAiB;GACf,MAAM;GACN,WAAW;GACX,YAAY;GACb;EACD,iBAAiB;GACf,MAAM;GACN,YAAY;GACb;EACD,oBAAoB,EAClB,MAAM,WACP;EACF;CACF,CACF;AAED,eAAe,MAAM;CACnB,MAAM,eAAe,kBAAkB,IAAI,OAAO,QAAQ,KAAK;CAG/D,MAAM,QAAQ;EADS,GADJ,oBACiB;EAAE,GAAG;EACf,CAAC;;AAG7B,KAAK,CAAC,OAAO,UAAU;CACrB,IAAI,iBAAiB,OACnB,QAAQ,MAAM,MAAM,MAAM;MAE1B,QAAQ,MAAM,MAAM;CAEtB,QAAQ,KAAK,EAAE;EACf"}