@teambit/install 0.0.0-c7afb20c2cdaf50fefd6a1d91b81ed9f683fa910 → 0.0.0-c7ba19a8e3cf6601136dba4826cc62dba897afeb

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 (40) hide show
  1. package/dist/install.cmd.d.ts +5 -5
  2. package/dist/install.cmd.js +26 -8
  3. package/dist/install.cmd.js.map +1 -1
  4. package/dist/install.main.runtime.d.ts +25 -19
  5. package/dist/install.main.runtime.js +115 -12
  6. package/dist/install.main.runtime.js.map +1 -1
  7. package/dist/link/component-list-links.d.ts +2 -2
  8. package/dist/link/component-list-links.js.map +1 -1
  9. package/dist/link/core-aspects-links.d.ts +1 -1
  10. package/dist/link/core-aspects-links.js.map +1 -1
  11. package/dist/link/link-to-dir.d.ts +1 -1
  12. package/dist/link/link-to-dir.js.map +1 -1
  13. package/dist/link/link.cmd.d.ts +5 -5
  14. package/dist/link/link.cmd.js +4 -2
  15. package/dist/link/link.cmd.js.map +1 -1
  16. package/dist/link/nested-deps-in-nm-links.d.ts +1 -1
  17. package/dist/link/nested-deps-in-nm-links.js.map +1 -1
  18. package/dist/link/rewire-row.d.ts +1 -1
  19. package/dist/link/rewire-row.js.map +1 -1
  20. package/dist/pick-outdated-pkgs.d.ts +1 -1
  21. package/dist/pick-outdated-pkgs.js.map +1 -1
  22. package/dist/pick-outdated-pkgs.spec.js +0 -2
  23. package/dist/pick-outdated-pkgs.spec.js.map +1 -1
  24. package/dist/uninstall.cmd.d.ts +7 -2
  25. package/dist/uninstall.cmd.js +6 -1
  26. package/dist/uninstall.cmd.js.map +1 -1
  27. package/dist/update.cmd.d.ts +3 -2
  28. package/dist/update.cmd.js +4 -1
  29. package/dist/update.cmd.js.map +1 -1
  30. package/install.cmd.tsx +34 -14
  31. package/link/component-list-links.ts +2 -2
  32. package/link/core-aspects-links.ts +1 -1
  33. package/link/link-to-dir.ts +1 -1
  34. package/link/link.cmd.ts +8 -6
  35. package/link/nested-deps-in-nm-links.ts +1 -1
  36. package/link/rewire-row.ts +1 -1
  37. package/package.json +31 -29
  38. package/uninstall.cmd.tsx +5 -3
  39. package/update.cmd.tsx +6 -3
  40. /package/dist/{preview-1752109965747.js → preview-1758832755206.js} +0 -0
@@ -1,8 +1,8 @@
1
- import { Command, CommandOptions } from '@teambit/cli';
2
- import { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';
3
- import { Logger } from '@teambit/logger';
4
- import { Workspace } from '@teambit/workspace';
5
- import { InstallMain } from './install.main.runtime';
1
+ import type { Command, CommandOptions } from '@teambit/cli';
2
+ import type { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';
3
+ import type { Logger } from '@teambit/logger';
4
+ import type { Workspace } from '@teambit/workspace';
5
+ import type { InstallMain } from './install.main.runtime';
6
6
  type InstallCmdOptions = {
7
7
  type: WorkspaceDependencyLifecycleType;
8
8
  skipDedupe: boolean;
@@ -45,8 +45,10 @@ class InstallCmd {
45
45
  this.workspace = workspace;
46
46
  this.logger = logger;
47
47
  _defineProperty(this, "name", 'install [packages...]');
48
- _defineProperty(this, "description", 'installs workspace dependencies');
49
- _defineProperty(this, "extendedDescription", 'when no package is specified, all workspace dependencies are installed and all workspace components are imported.');
48
+ _defineProperty(this, "description", 'install workspace dependencies');
49
+ _defineProperty(this, "extendedDescription", `installs workspace dependencies and prepares the workspace for development.
50
+ when packages are specified, adds them to workspace.jsonc policy and installs. when no packages specified, installs existing dependencies.
51
+ automatically imports components, compiles components, links to node_modules, and writes config files.`);
50
52
  _defineProperty(this, "helpUrl", 'reference/dependencies/dependency-installation');
51
53
  _defineProperty(this, "arguments", [{
52
54
  name: 'packages...',
@@ -62,12 +64,27 @@ class InstallCmd {
62
64
  if (options.updateExisting) {
63
65
  this.logger.consoleWarning(`--update-existing is deprecated, please omit it. "bit install" will update existing dependencies by default`);
64
66
  }
65
- packages.forEach(pkg => {
67
+ const validPackages = await Promise.all(packages.map(async pkg => {
66
68
  const pkgName = extractPackageName(pkg);
67
- if (!(0, _validateNpmPackageName().default)(pkgName).validForNewPackages) {
68
- throw new Error(`the package name "${pkgName}" is invalid. please provide a valid package name.`);
69
+ if ((0, _validateNpmPackageName().default)(pkgName).validForNewPackages) {
70
+ return pkg;
69
71
  }
70
- });
72
+ // if this is a component-id, find the package name and use it instead.
73
+ try {
74
+ // Check if it's not a package name (doesn't start with @)
75
+ if (!pkgName.startsWith('@')) {
76
+ // Try to resolve it as a component ID
77
+ const componentId = await this.workspace.resolveComponentId(pkg);
78
+ // Get the package name for this component
79
+ const component = await this.workspace.get(componentId);
80
+ const componentPackageName = this.workspace.componentPackageName(component);
81
+ return componentPackageName;
82
+ }
83
+ } catch {
84
+ // If component resolution fails, fall through to original error
85
+ }
86
+ throw new Error(`the package name "${pkgName}" is invalid. please provide a valid package name.`);
87
+ }));
71
88
  this.logger.console(`Resolving component dependencies for workspace: '${_chalk().default.cyan(this.workspace.name)}'`);
72
89
  const installOpts = {
73
90
  lifecycleType: options.addMissingPeers ? 'peer' : options.type,
@@ -83,9 +100,10 @@ class InstallCmd {
83
100
  writeConfigFiles: !options.skipWriteConfigFiles,
84
101
  updateAll: options.update,
85
102
  recurringInstall: options.recurringInstall,
86
- lockfileOnly: options.lockfileOnly
103
+ lockfileOnly: options.lockfileOnly,
104
+ showExternalPackageManagerPrompt: true
87
105
  };
88
- const components = await this.install.install(packages, installOpts);
106
+ const components = await this.install.install(validPackages, installOpts);
89
107
  const endTime = Date.now();
90
108
  const oldNonLoadedEnvs = this.install.getOldNonLoadedEnvs();
91
109
  return formatOutput({
@@ -1 +1 @@
1
- {"version":3,"names":["_validateNpmPackageName","data","_interopRequireDefault","require","_chalk","_workspace","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","recurringInstallFlagName","InstallCmd","constructor","install","workspace","logger","name","description","report","packages","options","startTime","Date","now","OutsideWorkspaceError","updateExisting","consoleWarning","forEach","pkg","pkgName","extractPackageName","packageNameValidate","validForNewPackages","Error","console","chalk","cyan","installOpts","lifecycleType","addMissingPeers","type","dedupe","skipDedupe","import","skipImport","savePrefix","addMissingDeps","skipUnavailable","compile","skipCompile","includeOptionalDeps","noOptional","writeConfigFiles","skipWriteConfigFiles","updateAll","update","recurringInstall","lockfileOnly","components","endTime","oldNonLoadedEnvs","getOldNonLoadedEnvs","formatOutput","numOfComps","toArray","length","toString","exports","calculateTime","diff","executionTime","summary","green","anotherInstallRequiredOutput","getAnotherInstallRequiredOutput","oldNonLoadedEnvsStr","join","firstPart","flag","suggestRecurringInstall","envsStr","docsLink","msg","yellow","packageString","allowedPrefixes","some","prefix","startsWith","atIndex","indexOf","possibleVersion","slice","includes","lastAtIndex","lastIndexOf"],"sources":["install.cmd.tsx"],"sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport packageNameValidate from 'validate-npm-package-name';\nimport { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport chalk from 'chalk';\nimport { OutsideWorkspaceError, Workspace } from '@teambit/workspace';\nimport { InstallMain, WorkspaceInstallOptions } from './install.main.runtime';\n\ntype InstallCmdOptions = {\n type: WorkspaceDependencyLifecycleType;\n skipDedupe: boolean;\n skipImport: boolean;\n skipCompile: boolean;\n skipWriteConfigFiles: boolean;\n update: boolean;\n updateExisting: boolean;\n savePrefix: string;\n addMissingDeps: boolean;\n skipUnavailable: boolean;\n addMissingPeers: boolean;\n noOptional: boolean;\n recurringInstall: boolean;\n lockfileOnly: boolean;\n};\n\ntype FormatOutputArgs = {\n numOfComps: string;\n startTime: number;\n endTime: number;\n oldNonLoadedEnvs: string[];\n recurringInstall: boolean;\n};\n\nconst recurringInstallFlagName = 'recurring-install';\n\nexport default class InstallCmd implements Command {\n name = 'install [packages...]';\n description = 'installs workspace dependencies';\n extendedDescription =\n 'when no package is specified, all workspace dependencies are installed and all workspace components are imported.';\n helpUrl = 'reference/dependencies/dependency-installation';\n arguments = [{ name: 'packages...', description: 'a list of packages to install (separated by spaces)' }];\n alias = 'in';\n group = 'dependencies';\n options = [\n ['t', 'type [lifecycleType]', '\"runtime\" (default) or \"peer\" (dev is not a valid option)'],\n ['u', 'update', 'update all dependencies to latest version according to their semver range'],\n [\n '',\n 'update-existing',\n 'DEPRECATED (not needed anymore, it is the default now). update existing dependencies version and types',\n ],\n ['', 'save-prefix [savePrefix]', 'set the prefix to use when adding dependency to workspace.jsonc'],\n ['', 'skip-dedupe', 'do not dedupe dependencies on installation'],\n ['', 'skip-import', 'do not import bit objects post installation'],\n ['', 'skip-compile', 'do not compile components'],\n ['', 'skip-write-config-files', 'do not write config files (such as eslint, tsconfig, prettier, etc...)'],\n ['a', 'add-missing-deps', 'install all missing dependencies'],\n ['', 'skip-unavailable', 'when adding missing dependencies, skip those that are not found in the regisry'],\n ['', 'add-missing-peers', 'install all missing peer dependencies'],\n [\n '',\n recurringInstallFlagName,\n 'automatically run install again if there are non loaded old envs in your workspace',\n ],\n ['', 'no-optional [noOptional]', 'do not install optional dependencies (works with pnpm only)'],\n ['', 'lockfile-only', 'dependencies are not written to node_modules. Only the lockfile is updated'],\n ] as CommandOptions;\n\n constructor(\n private install: InstallMain,\n /**\n * workspace extension.\n */\n private workspace: Workspace,\n\n /**\n * logger extension.\n */\n private logger: Logger\n ) {}\n\n async report([packages = []]: [string[]], options: InstallCmdOptions) {\n const startTime = Date.now();\n if (!this.workspace) throw new OutsideWorkspaceError();\n if (options.updateExisting) {\n this.logger.consoleWarning(\n `--update-existing is deprecated, please omit it. \"bit install\" will update existing dependencies by default`\n );\n }\n\n packages.forEach((pkg) => {\n const pkgName = extractPackageName(pkg);\n if (!packageNameValidate(pkgName).validForNewPackages) {\n throw new Error(`the package name \"${pkgName}\" is invalid. please provide a valid package name.`);\n }\n });\n this.logger.console(`Resolving component dependencies for workspace: '${chalk.cyan(this.workspace.name)}'`);\n const installOpts: WorkspaceInstallOptions = {\n lifecycleType: options.addMissingPeers ? 'peer' : options.type,\n dedupe: !options.skipDedupe,\n import: !options.skipImport,\n updateExisting: true,\n savePrefix: options.savePrefix,\n addMissingDeps: options.addMissingDeps,\n skipUnavailable: options.skipUnavailable,\n addMissingPeers: options.addMissingPeers,\n compile: !options.skipCompile,\n includeOptionalDeps: !options.noOptional,\n writeConfigFiles: !options.skipWriteConfigFiles,\n updateAll: options.update,\n recurringInstall: options.recurringInstall,\n lockfileOnly: options.lockfileOnly,\n };\n const components = await this.install.install(packages, installOpts);\n const endTime = Date.now();\n const oldNonLoadedEnvs = this.install.getOldNonLoadedEnvs();\n return formatOutput({\n startTime,\n endTime,\n numOfComps: components.toArray().length.toString(),\n recurringInstall: options[recurringInstallFlagName],\n oldNonLoadedEnvs,\n });\n }\n}\n\nfunction calculateTime(startTime: number, endTime: number) {\n const diff = endTime - startTime;\n return diff / 1000;\n}\n\nfunction formatOutput({\n numOfComps,\n endTime,\n startTime,\n recurringInstall,\n oldNonLoadedEnvs,\n}: FormatOutputArgs): string {\n const executionTime = calculateTime(startTime, endTime);\n const summary = chalk.green(\n `Successfully installed dependencies and compiled ${chalk.cyan(numOfComps)} component(s) in ${chalk.cyan(\n executionTime.toString()\n )} seconds`\n );\n const anotherInstallRequiredOutput = getAnotherInstallRequiredOutput(recurringInstall, oldNonLoadedEnvs);\n return anotherInstallRequiredOutput ? `\\n${anotherInstallRequiredOutput}\\n\\n${summary}` : `\\n${summary}`;\n}\n\nexport function getAnotherInstallRequiredOutput(recurringInstall = false, oldNonLoadedEnvs: string[] = []): string {\n if (!oldNonLoadedEnvs.length) return '';\n const oldNonLoadedEnvsStr = oldNonLoadedEnvs.join(', ');\n const firstPart = `Bit was not able to install all dependencies. Please run \"${chalk.cyan('bit install')}\" again `;\n const flag = chalk.cyan(`--${recurringInstallFlagName}`);\n const suggestRecurringInstall = recurringInstall ? '' : `(or use the \"${flag}\" option next time).`;\n const envsStr = `The following environments need to add support for \"dependency policy\" to fix the warning: ${chalk.cyan(\n oldNonLoadedEnvsStr\n )}`;\n const docsLink = `Read more about how to fix this issue in: https://bit.dev/blog/using-a-static-dependency-policy-in-a-legacy-env-lihfbt9b`;\n\n const msg = `${firstPart}${suggestRecurringInstall}\\n${envsStr}\\n${docsLink}`;\n return chalk.yellow(msg);\n}\n\nfunction extractPackageName(packageString: string): string {\n if (!packageString) return '';\n\n // Handle https and git protocols. We don't allow \"file\" protocol here. It won't work for the consumer.\n const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];\n if (allowedPrefixes.some((prefix) => packageString.startsWith(prefix))) {\n return packageString;\n }\n\n // If it's a scoped package\n if (packageString.startsWith('@')) {\n // Find the second '@' (first is for scope, second is for version/tag)\n const atIndex = packageString.indexOf('@', 1);\n if (atIndex === -1) return packageString;\n const possibleVersion = packageString.slice(atIndex + 1);\n // If the part after the second '@' contains a slash, it's not a version/tag\n if (possibleVersion.includes('/')) return packageString;\n return packageString.slice(0, atIndex);\n }\n\n // For unscoped packages, split at the last '@'\n const lastAtIndex = packageString.lastIndexOf('@');\n if (lastAtIndex <= 0) return packageString;\n return packageString.slice(0, lastAtIndex);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_validateNpmPackageName","data","_interopRequireDefault","require","_chalk","_workspace","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","recurringInstallFlagName","InstallCmd","constructor","install","workspace","logger","name","description","report","packages","options","startTime","Date","now","OutsideWorkspaceError","updateExisting","consoleWarning","validPackages","Promise","all","map","pkg","pkgName","extractPackageName","packageNameValidate","validForNewPackages","startsWith","componentId","resolveComponentId","component","get","componentPackageName","Error","console","chalk","cyan","installOpts","lifecycleType","addMissingPeers","type","dedupe","skipDedupe","import","skipImport","savePrefix","addMissingDeps","skipUnavailable","compile","skipCompile","includeOptionalDeps","noOptional","writeConfigFiles","skipWriteConfigFiles","updateAll","update","recurringInstall","lockfileOnly","showExternalPackageManagerPrompt","components","endTime","oldNonLoadedEnvs","getOldNonLoadedEnvs","formatOutput","numOfComps","toArray","length","toString","exports","calculateTime","diff","executionTime","summary","green","anotherInstallRequiredOutput","getAnotherInstallRequiredOutput","oldNonLoadedEnvsStr","join","firstPart","flag","suggestRecurringInstall","envsStr","docsLink","msg","yellow","packageString","allowedPrefixes","some","prefix","atIndex","indexOf","possibleVersion","slice","includes","lastAtIndex","lastIndexOf"],"sources":["install.cmd.tsx"],"sourcesContent":["import type { Command, CommandOptions } from '@teambit/cli';\nimport packageNameValidate from 'validate-npm-package-name';\nimport type { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';\nimport type { Logger } from '@teambit/logger';\nimport chalk from 'chalk';\nimport type { Workspace } from '@teambit/workspace';\nimport { OutsideWorkspaceError } from '@teambit/workspace';\nimport type { InstallMain, WorkspaceInstallOptions } from './install.main.runtime';\n\ntype InstallCmdOptions = {\n type: WorkspaceDependencyLifecycleType;\n skipDedupe: boolean;\n skipImport: boolean;\n skipCompile: boolean;\n skipWriteConfigFiles: boolean;\n update: boolean;\n updateExisting: boolean;\n savePrefix: string;\n addMissingDeps: boolean;\n skipUnavailable: boolean;\n addMissingPeers: boolean;\n noOptional: boolean;\n recurringInstall: boolean;\n lockfileOnly: boolean;\n};\n\ntype FormatOutputArgs = {\n numOfComps: string;\n startTime: number;\n endTime: number;\n oldNonLoadedEnvs: string[];\n recurringInstall: boolean;\n};\n\nconst recurringInstallFlagName = 'recurring-install';\n\nexport default class InstallCmd implements Command {\n name = 'install [packages...]';\n description = 'install workspace dependencies';\n extendedDescription = `installs workspace dependencies and prepares the workspace for development.\nwhen packages are specified, adds them to workspace.jsonc policy and installs. when no packages specified, installs existing dependencies.\nautomatically imports components, compiles components, links to node_modules, and writes config files.`;\n helpUrl = 'reference/dependencies/dependency-installation';\n arguments = [{ name: 'packages...', description: 'a list of packages to install (separated by spaces)' }];\n alias = 'in';\n group = 'dependencies';\n options = [\n ['t', 'type [lifecycleType]', '\"runtime\" (default) or \"peer\" (dev is not a valid option)'],\n ['u', 'update', 'update all dependencies to latest version according to their semver range'],\n [\n '',\n 'update-existing',\n 'DEPRECATED (not needed anymore, it is the default now). update existing dependencies version and types',\n ],\n ['', 'save-prefix [savePrefix]', 'set the prefix to use when adding dependency to workspace.jsonc'],\n ['', 'skip-dedupe', 'do not dedupe dependencies on installation'],\n ['', 'skip-import', 'do not import bit objects post installation'],\n ['', 'skip-compile', 'do not compile components'],\n ['', 'skip-write-config-files', 'do not write config files (such as eslint, tsconfig, prettier, etc...)'],\n ['a', 'add-missing-deps', 'install all missing dependencies'],\n ['', 'skip-unavailable', 'when adding missing dependencies, skip those that are not found in the regisry'],\n ['', 'add-missing-peers', 'install all missing peer dependencies'],\n [\n '',\n recurringInstallFlagName,\n 'automatically run install again if there are non loaded old envs in your workspace',\n ],\n ['', 'no-optional [noOptional]', 'do not install optional dependencies (works with pnpm only)'],\n ['', 'lockfile-only', 'dependencies are not written to node_modules. Only the lockfile is updated'],\n ] as CommandOptions;\n\n constructor(\n private install: InstallMain,\n /**\n * workspace extension.\n */\n private workspace: Workspace,\n\n /**\n * logger extension.\n */\n private logger: Logger\n ) {}\n\n async report([packages = []]: [string[]], options: InstallCmdOptions) {\n const startTime = Date.now();\n if (!this.workspace) throw new OutsideWorkspaceError();\n if (options.updateExisting) {\n this.logger.consoleWarning(\n `--update-existing is deprecated, please omit it. \"bit install\" will update existing dependencies by default`\n );\n }\n\n const validPackages = await Promise.all(\n packages.map(async (pkg) => {\n const pkgName = extractPackageName(pkg);\n if (packageNameValidate(pkgName).validForNewPackages) {\n return pkg;\n }\n // if this is a component-id, find the package name and use it instead.\n try {\n // Check if it's not a package name (doesn't start with @)\n if (!pkgName.startsWith('@')) {\n // Try to resolve it as a component ID\n const componentId = await this.workspace.resolveComponentId(pkg);\n // Get the package name for this component\n const component = await this.workspace.get(componentId);\n const componentPackageName = this.workspace.componentPackageName(component);\n return componentPackageName;\n }\n } catch {\n // If component resolution fails, fall through to original error\n }\n throw new Error(`the package name \"${pkgName}\" is invalid. please provide a valid package name.`);\n })\n );\n this.logger.console(`Resolving component dependencies for workspace: '${chalk.cyan(this.workspace.name)}'`);\n const installOpts: WorkspaceInstallOptions = {\n lifecycleType: options.addMissingPeers ? 'peer' : options.type,\n dedupe: !options.skipDedupe,\n import: !options.skipImport,\n updateExisting: true,\n savePrefix: options.savePrefix,\n addMissingDeps: options.addMissingDeps,\n skipUnavailable: options.skipUnavailable,\n addMissingPeers: options.addMissingPeers,\n compile: !options.skipCompile,\n includeOptionalDeps: !options.noOptional,\n writeConfigFiles: !options.skipWriteConfigFiles,\n updateAll: options.update,\n recurringInstall: options.recurringInstall,\n lockfileOnly: options.lockfileOnly,\n showExternalPackageManagerPrompt: true,\n };\n const components = await this.install.install(validPackages, installOpts);\n const endTime = Date.now();\n const oldNonLoadedEnvs = this.install.getOldNonLoadedEnvs();\n return formatOutput({\n startTime,\n endTime,\n numOfComps: components.toArray().length.toString(),\n recurringInstall: options[recurringInstallFlagName],\n oldNonLoadedEnvs,\n });\n }\n}\n\nfunction calculateTime(startTime: number, endTime: number) {\n const diff = endTime - startTime;\n return diff / 1000;\n}\n\nfunction formatOutput({\n numOfComps,\n endTime,\n startTime,\n recurringInstall,\n oldNonLoadedEnvs,\n}: FormatOutputArgs): string {\n const executionTime = calculateTime(startTime, endTime);\n const summary = chalk.green(\n `Successfully installed dependencies and compiled ${chalk.cyan(numOfComps)} component(s) in ${chalk.cyan(\n executionTime.toString()\n )} seconds`\n );\n const anotherInstallRequiredOutput = getAnotherInstallRequiredOutput(recurringInstall, oldNonLoadedEnvs);\n return anotherInstallRequiredOutput ? `\\n${anotherInstallRequiredOutput}\\n\\n${summary}` : `\\n${summary}`;\n}\n\nexport function getAnotherInstallRequiredOutput(recurringInstall = false, oldNonLoadedEnvs: string[] = []): string {\n if (!oldNonLoadedEnvs.length) return '';\n const oldNonLoadedEnvsStr = oldNonLoadedEnvs.join(', ');\n const firstPart = `Bit was not able to install all dependencies. Please run \"${chalk.cyan('bit install')}\" again `;\n const flag = chalk.cyan(`--${recurringInstallFlagName}`);\n const suggestRecurringInstall = recurringInstall ? '' : `(or use the \"${flag}\" option next time).`;\n const envsStr = `The following environments need to add support for \"dependency policy\" to fix the warning: ${chalk.cyan(\n oldNonLoadedEnvsStr\n )}`;\n const docsLink = `Read more about how to fix this issue in: https://bit.dev/blog/using-a-static-dependency-policy-in-a-legacy-env-lihfbt9b`;\n\n const msg = `${firstPart}${suggestRecurringInstall}\\n${envsStr}\\n${docsLink}`;\n return chalk.yellow(msg);\n}\n\nfunction extractPackageName(packageString: string): string {\n if (!packageString) return '';\n\n // Handle https and git protocols. We don't allow \"file\" protocol here. It won't work for the consumer.\n const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];\n if (allowedPrefixes.some((prefix) => packageString.startsWith(prefix))) {\n return packageString;\n }\n\n // If it's a scoped package\n if (packageString.startsWith('@')) {\n // Find the second '@' (first is for scope, second is for version/tag)\n const atIndex = packageString.indexOf('@', 1);\n if (atIndex === -1) return packageString;\n const possibleVersion = packageString.slice(atIndex + 1);\n // If the part after the second '@' contains a slash, it's not a version/tag\n if (possibleVersion.includes('/')) return packageString;\n return packageString.slice(0, atIndex);\n }\n\n // For unscoped packages, split at the last '@'\n const lastAtIndex = packageString.lastIndexOf('@');\n if (lastAtIndex <= 0) return packageString;\n return packageString.slice(0, lastAtIndex);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,22 +1,23 @@
1
- import { CompilerMain } from '@teambit/compiler';
2
- import { CLIMain } from '@teambit/cli';
3
- import { Workspace } from '@teambit/workspace';
4
- import { GenerateResult, GeneratorMain } from '@teambit/generator';
5
- import { ApplicationMain } from '@teambit/application';
6
- import { VariantsMain } from '@teambit/variants';
7
- import { Component, ComponentMap } from '@teambit/component';
8
- import { Harmony, SlotRegistry } from '@teambit/harmony';
1
+ import type { CompilerMain } from '@teambit/compiler';
2
+ import type { CLIMain } from '@teambit/cli';
3
+ import type { Workspace } from '@teambit/workspace';
4
+ import type { GenerateResult, GeneratorMain } from '@teambit/generator';
5
+ import type { ApplicationMain } from '@teambit/application';
6
+ import type { VariantsMain } from '@teambit/variants';
7
+ import type { Component } from '@teambit/component';
8
+ import { ComponentMap } from '@teambit/component';
9
+ import type { Harmony, SlotRegistry } from '@teambit/harmony';
9
10
  import { type DependenciesGraph } from '@teambit/objects';
10
- import { CodemodResult, NodeModulesLinksResult } from '@teambit/workspace.modules.node-modules-linker';
11
- import { EnvsMain } from '@teambit/envs';
12
- import { IpcEventsMain } from '@teambit/ipc-events';
13
- import { WorkspaceDependencyLifecycleType, DependencyResolverMain, LinkingOptions, LinkResults, WorkspacePolicy } from '@teambit/dependency-resolver';
14
- import { WorkspaceConfigFilesMain } from '@teambit/workspace-config-files';
15
- import { Logger, LoggerMain } from '@teambit/logger';
16
- import { IssuesMain } from '@teambit/issues';
17
- import { AspectLoaderMain } from '@teambit/aspect-loader';
18
- import { BundlerMain } from '@teambit/bundler';
19
- import { UiMain } from '@teambit/ui';
11
+ import type { CodemodResult, NodeModulesLinksResult } from '@teambit/workspace.modules.node-modules-linker';
12
+ import type { EnvsMain } from '@teambit/envs';
13
+ import type { IpcEventsMain } from '@teambit/ipc-events';
14
+ import type { WorkspaceDependencyLifecycleType, DependencyResolverMain, LinkingOptions, LinkResults, WorkspacePolicy } from '@teambit/dependency-resolver';
15
+ import type { WorkspaceConfigFilesMain } from '@teambit/workspace-config-files';
16
+ import type { Logger, LoggerMain } from '@teambit/logger';
17
+ import type { IssuesMain } from '@teambit/issues';
18
+ import type { AspectLoaderMain } from '@teambit/aspect-loader';
19
+ import type { BundlerMain } from '@teambit/bundler';
20
+ import type { UiMain } from '@teambit/ui';
20
21
  export type WorkspaceLinkOptions = LinkingOptions & {
21
22
  rootPolicy?: WorkspacePolicy;
22
23
  linkToBitRoots?: boolean;
@@ -33,6 +34,7 @@ export type WorkspaceInstallOptions = {
33
34
  lifecycleType?: WorkspaceDependencyLifecycleType;
34
35
  dedupe?: boolean;
35
36
  import?: boolean;
37
+ showExternalPackageManagerPrompt?: boolean;
36
38
  copyPeerToRuntimeOnRoot?: boolean;
37
39
  copyPeerToRuntimeOnComponents?: boolean;
38
40
  updateExisting?: boolean;
@@ -81,6 +83,7 @@ export declare class InstallMain {
81
83
  * @memberof Workspace
82
84
  */
83
85
  install(packages?: string[], options?: WorkspaceInstallOptions): Promise<ComponentMap<string>>;
86
+ writeDependenciesToPackageJson(): Promise<void>;
84
87
  registerPreLink(fn: PreLink): void;
85
88
  registerPreInstall(fn: PreInstall): void;
86
89
  registerPostInstall(fn: PostInstall): void;
@@ -222,7 +225,7 @@ export declare class InstallMain {
222
225
  static slots: (((registerFn: () => string) => SlotRegistry<PreLinkSlot>) | ((registerFn: () => string) => SlotRegistry<PreInstallSlot>))[];
223
226
  static dependencies: import("@teambit/harmony").Aspect[];
224
227
  static runtime: import("@teambit/harmony").RuntimeDefinition;
225
- static provider([dependencyResolver, workspace, loggerExt, variants, cli, compiler, issues, envs, app, ipcEvents, generator, wsConfigFiles, aspectLoader, bundler, ui]: [
228
+ static provider([dependencyResolver, workspace, loggerExt, variants, cli, compiler, issues, envs, app, ipcEvents, generator, wsConfigFiles, aspectLoader, bundler, ui,]: [
226
229
  DependencyResolverMain,
227
230
  Workspace,
228
231
  LoggerMain,
@@ -239,5 +242,8 @@ export declare class InstallMain {
239
242
  BundlerMain,
240
243
  UiMain
241
244
  ], _: any, [preLinkSlot, preInstallSlot, postInstallSlot]: [PreLinkSlot, PreInstallSlot, PostInstallSlot], harmony: Harmony): Promise<InstallMain>;
245
+ private handleExternalPackageManagerPrompt;
246
+ private disableExternalPackageManagerMode;
247
+ private removePostInstallScript;
242
248
  }
243
249
  export default InstallMain;
@@ -53,6 +53,13 @@ function _chalk() {
53
53
  };
54
54
  return data;
55
55
  }
56
+ function _yesno() {
57
+ const data = _interopRequireDefault(require("yesno"));
58
+ _yesno = function () {
59
+ return data;
60
+ };
61
+ return data;
62
+ }
56
63
  function _workspace2() {
57
64
  const data = require("@teambit/workspace");
58
65
  _workspace2 = function () {
@@ -102,6 +109,13 @@ function _component() {
102
109
  };
103
110
  return data;
104
111
  }
112
+ function _component2() {
113
+ const data = require("@teambit/component.sources");
114
+ _component2 = function () {
115
+ return data;
116
+ };
117
+ return data;
118
+ }
105
119
  function _dependenciesFs() {
106
120
  const data = require("@teambit/dependencies.fs.linked-dependencies");
107
121
  _dependenciesFs = function () {
@@ -297,6 +311,20 @@ class InstallMain {
297
311
  * @memberof Workspace
298
312
  */
299
313
  async install(packages, options) {
314
+ // Check if external package manager mode is enabled
315
+ const workspaceConfig = this.workspace.getWorkspaceConfig();
316
+ const depResolverExtConfig = workspaceConfig.extensions.findExtension('teambit.dependencies/dependency-resolver');
317
+ if (depResolverExtConfig?.config.externalPackageManager) {
318
+ if (options?.showExternalPackageManagerPrompt) {
319
+ // For explicit "bit install" commands, show the prompt
320
+ await this.handleExternalPackageManagerPrompt();
321
+ } else {
322
+ await this.writeDependenciesToPackageJson();
323
+ this.logger.console(_chalk().default.yellow('Installation was skipped due to external package manager configuration. Please run your package manager to install dependencies.'));
324
+ return new (_component().ComponentMap)(new Map());
325
+ }
326
+ }
327
+
300
328
  // set workspace in install context
301
329
  this.workspace.inInstallContext = true;
302
330
  this.workspace.inInstallAfterPmContext = false;
@@ -330,6 +358,19 @@ class InstallMain {
330
358
  await this.ipcEvents.publishIpcEvent('onPostInstall');
331
359
  return res;
332
360
  }
361
+ async writeDependenciesToPackageJson() {
362
+ const installer = this.dependencyResolver.getInstaller({});
363
+ const mergedRootPolicy = await this.addConfiguredAspectsToWorkspacePolicy();
364
+ await this.addConfiguredGeneratorEnvsToWorkspacePolicy(mergedRootPolicy);
365
+ const componentsAndManifests = await this._getComponentsManifests(installer, mergedRootPolicy, {
366
+ dedupe: true
367
+ });
368
+ const {
369
+ dependencies,
370
+ devDependencies
371
+ } = componentsAndManifests.manifests[this.workspace.path];
372
+ return this.workspace.writeDependenciesToPackageJson(_objectSpread(_objectSpread({}, devDependencies), dependencies));
373
+ }
333
374
  registerPreLink(fn) {
334
375
  this.preLinkSlot.register(fn);
335
376
  }
@@ -942,22 +983,15 @@ class InstallMain {
942
983
  name
943
984
  }) => name !== 'workspace');
944
985
  const workspaceDeps = this.dependencyResolver.getWorkspaceDepsOfBitRoots(nonRootManifests);
945
- const workspaceDepsMeta = Object.keys(workspaceDeps).reduce((acc, depName) => {
946
- acc[depName] = {
947
- injected: true
948
- };
949
- return acc;
950
- }, {});
951
- const envManifests = await this._getEnvManifests(workspaceDeps, workspaceDepsMeta);
952
- const appManifests = await this._getAppManifests(manifests, workspaceDeps, workspaceDepsMeta);
986
+ const envManifests = await this._getEnvManifests(workspaceDeps);
987
+ const appManifests = await this._getAppManifests(manifests, workspaceDeps);
953
988
  return _objectSpread(_objectSpread({}, envManifests), appManifests);
954
989
  }
955
- async _getEnvManifests(workspaceDeps, workspaceDepsMeta) {
990
+ async _getEnvManifests(workspaceDeps) {
956
991
  const envs = await this._getAllUsedEnvIds();
957
992
  return Object.fromEntries(await Promise.all(envs.map(async envId => {
958
993
  return [await this.getRootComponentDirByRootId(this.workspace.rootComponentsPath, envId), {
959
994
  dependencies: _objectSpread(_objectSpread(_objectSpread({}, await this._getEnvDependencies(envId)), workspaceDeps), await this._getEnvPackage(envId)),
960
- dependenciesMeta: workspaceDepsMeta,
961
995
  installConfig: {
962
996
  hoistingLimits: 'workspaces'
963
997
  }
@@ -995,7 +1029,7 @@ class InstallMain {
995
1029
  [packageName]: finalVersion
996
1030
  };
997
1031
  }
998
- async _getAppManifests(manifests, workspaceDeps, workspaceDepsMeta) {
1032
+ async _getAppManifests(manifests, workspaceDeps) {
999
1033
  return Object.fromEntries((0, _lodash().compact)(await Promise.all((await this.app.listAppsComponents()).map(async app => {
1000
1034
  const appPkgName = this.dependencyResolver.getPackageName(app);
1001
1035
  const appManifest = Object.values(manifests).find(({
@@ -1005,7 +1039,6 @@ class InstallMain {
1005
1039
  const envId = await this.envs.calculateEnvId(app);
1006
1040
  return [await this.getRootComponentDirByRootId(this.workspace.rootComponentsPath, app.id), _objectSpread(_objectSpread({}, (0, _lodash().omit)(appManifest, ['name', 'version'])), {}, {
1007
1041
  dependencies: _objectSpread(_objectSpread(_objectSpread({}, await this._getEnvDependencies(envId)), appManifest.dependencies), workspaceDeps),
1008
- dependenciesMeta: _objectSpread(_objectSpread({}, appManifest.dependenciesMeta), workspaceDepsMeta),
1009
1042
  installConfig: {
1010
1043
  hoistingLimits: 'workspaces'
1011
1044
  }
@@ -1280,6 +1313,76 @@ class InstallMain {
1280
1313
  cli.register(...commands);
1281
1314
  return installExt;
1282
1315
  }
1316
+ async handleExternalPackageManagerPrompt() {
1317
+ this.logger.clearStatusLine();
1318
+
1319
+ // Display a colorful and informative message
1320
+ this.logger.console(_chalk().default.cyan('\nšŸ“¦ External Package Manager Mode Detected'));
1321
+ this.logger.console(_chalk().default.gray('Your workspace is configured to use external package managers (npm, yarn, pnpm).'));
1322
+ this.logger.console(_chalk().default.gray('Running "bit install" is not available in this mode.\n'));
1323
+ const question = _chalk().default.bold("Would you like to switch to Bit's package manager for dependency management? [yes(y)/no(n)]");
1324
+ const shouldSwitchToBitPM = await (0, _yesno().default)({
1325
+ question
1326
+ });
1327
+ if (!shouldSwitchToBitPM) {
1328
+ throw new Error('External package manager mode is enabled. Please use your preferred package manager (npm, yarn, pnpm) to install dependencies instead of "bit install".');
1329
+ }
1330
+
1331
+ // User chose to switch to Bit's package manager
1332
+ await this.disableExternalPackageManagerMode();
1333
+ }
1334
+ async disableExternalPackageManagerMode() {
1335
+ try {
1336
+ // Get the workspace config
1337
+ const workspaceConfig = this.workspace.getWorkspaceConfig();
1338
+
1339
+ // Remove externalPackageManager property and restore default settings
1340
+ const depResolverExt = workspaceConfig.extensions.findExtension('teambit.dependencies/dependency-resolver');
1341
+ if (depResolverExt?.config.externalPackageManager) {
1342
+ delete depResolverExt.config.externalPackageManager;
1343
+ }
1344
+ if (depResolverExt) {
1345
+ depResolverExt.config.rootComponent = true;
1346
+ }
1347
+
1348
+ // Enable workspace config write
1349
+ const workspaceConfigFilesExt = workspaceConfig.extensions.findExtension('teambit.workspace/workspace-config-files');
1350
+ if (workspaceConfigFilesExt) {
1351
+ workspaceConfigFilesExt.config.enableWorkspaceConfigWrite = true;
1352
+ }
1353
+
1354
+ // Remove postInstall script from package.json (preserve user's existing scripts)
1355
+ await this.removePostInstallScript();
1356
+
1357
+ // Write the updated config
1358
+ await workspaceConfig.write();
1359
+ this.logger.console(_chalk().default.green('āœ“ Successfully switched to Bit package manager mode'));
1360
+ } catch (error) {
1361
+ this.logger.console(_chalk().default.red('āœ— Failed to switch to Bit package manager mode'));
1362
+ throw error;
1363
+ }
1364
+ }
1365
+ async removePostInstallScript() {
1366
+ try {
1367
+ const packageJsonFile = await _component2().PackageJsonFile.load(this.workspace.path);
1368
+ if (!packageJsonFile.fileExist) {
1369
+ return;
1370
+ }
1371
+
1372
+ // Only remove our specific postInstall script, preserve user's custom scripts
1373
+ if (packageJsonFile.packageJsonObject.scripts?.postinstall === 'bit link && bit compile') {
1374
+ delete packageJsonFile.packageJsonObject.scripts.postinstall;
1375
+
1376
+ // Clean up empty scripts object
1377
+ if (Object.keys(packageJsonFile.packageJsonObject.scripts).length === 0) {
1378
+ delete packageJsonFile.packageJsonObject.scripts;
1379
+ }
1380
+ await packageJsonFile.write();
1381
+ }
1382
+ } catch {
1383
+ this.logger.console(_chalk().default.yellow('⚠ Warning: Could not remove postInstall script from package.json'));
1384
+ }
1385
+ }
1283
1386
  }
1284
1387
  exports.InstallMain = InstallMain;
1285
1388
  _defineProperty(InstallMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);