@teambit/install 0.0.0-038c3ec7ffafaeb6a0ef7e522053a6312c90ac14
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/dist/esm.mjs +7 -0
- package/dist/exceptions/dependency-type-not-supported-in-policy.d.ts +4 -0
- package/dist/exceptions/dependency-type-not-supported-in-policy.js +21 -0
- package/dist/exceptions/dependency-type-not-supported-in-policy.js.map +1 -0
- package/dist/exceptions/index.d.ts +1 -0
- package/dist/exceptions/index.js +20 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/install.aspect.d.ts +2 -0
- package/dist/install.aspect.js +18 -0
- package/dist/install.aspect.js.map +1 -0
- package/dist/install.cmd.d.ts +55 -0
- package/dist/install.cmd.js +155 -0
- package/dist/install.cmd.js.map +1 -0
- package/dist/install.main.runtime.d.ts +248 -0
- package/dist/install.main.runtime.js +1408 -0
- package/dist/install.main.runtime.js.map +1 -0
- package/dist/link/component-list-links.d.ts +10 -0
- package/dist/link/component-list-links.js +102 -0
- package/dist/link/component-list-links.js.map +1 -0
- package/dist/link/core-aspects-links.d.ts +7 -0
- package/dist/link/core-aspects-links.js +83 -0
- package/dist/link/core-aspects-links.js.map +1 -0
- package/dist/link/get-package-name-from-target.d.ts +1 -0
- package/dist/link/get-package-name-from-target.js +13 -0
- package/dist/link/get-package-name-from-target.js.map +1 -0
- package/dist/link/index.d.ts +1 -0
- package/dist/link/index.js +20 -0
- package/dist/link/index.js.map +1 -0
- package/dist/link/link-row.d.ts +12 -0
- package/dist/link/link-row.js +32 -0
- package/dist/link/link-row.js.map +1 -0
- package/dist/link/link-to-dir.d.ts +2 -0
- package/dist/link/link-to-dir.js +35 -0
- package/dist/link/link-to-dir.js.map +1 -0
- package/dist/link/link.cmd.d.ts +47 -0
- package/dist/link/link.cmd.js +145 -0
- package/dist/link/link.cmd.js.map +1 -0
- package/dist/link/nested-deps-in-nm-links.d.ts +7 -0
- package/dist/link/nested-deps-in-nm-links.js +59 -0
- package/dist/link/nested-deps-in-nm-links.js.map +1 -0
- package/dist/link/rewire-row.d.ts +6 -0
- package/dist/link/rewire-row.js +26 -0
- package/dist/link/rewire-row.js.map +1 -0
- package/dist/pick-outdated-pkgs.d.ts +12 -0
- package/dist/pick-outdated-pkgs.js +180 -0
- package/dist/pick-outdated-pkgs.js.map +1 -0
- package/dist/pick-outdated-pkgs.spec.d.ts +1 -0
- package/dist/pick-outdated-pkgs.spec.js +171 -0
- package/dist/pick-outdated-pkgs.spec.js.map +1 -0
- package/dist/preview-1753890535938.js +7 -0
- package/dist/uninstall.cmd.d.ts +12 -0
- package/dist/uninstall.cmd.js +26 -0
- package/dist/uninstall.cmd.js.map +1 -0
- package/dist/update.cmd.d.ts +26 -0
- package/dist/update.cmd.js +52 -0
- package/dist/update.cmd.js.map +1 -0
- package/esm.mjs +7 -0
- package/exceptions/dependency-type-not-supported-in-policy.ts +7 -0
- package/exceptions/index.ts +1 -0
- package/install.cmd.tsx +191 -0
- package/link/component-list-links.ts +79 -0
- package/link/core-aspects-links.ts +57 -0
- package/link/get-package-name-from-target.ts +5 -0
- package/link/index.ts +1 -0
- package/link/link-row.ts +20 -0
- package/link/link-to-dir.ts +13 -0
- package/link/link.cmd.ts +118 -0
- package/link/nested-deps-in-nm-links.ts +47 -0
- package/link/rewire-row.ts +17 -0
- package/package.json +96 -0
- package/types/asset.d.ts +41 -0
- package/types/style.d.ts +42 -0
- package/uninstall.cmd.tsx +18 -0
- package/update.cmd.tsx +67 -0
package/dist/esm.mjs
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.DependencyTypeNotSupportedInPolicy = void 0;
|
7
|
+
function _bitError() {
|
8
|
+
const data = require("@teambit/bit-error");
|
9
|
+
_bitError = function () {
|
10
|
+
return data;
|
11
|
+
};
|
12
|
+
return data;
|
13
|
+
}
|
14
|
+
class DependencyTypeNotSupportedInPolicy extends _bitError().BitError {
|
15
|
+
constructor(type) {
|
16
|
+
super(`the workspace policy does not support ${type} dependencies`);
|
17
|
+
}
|
18
|
+
}
|
19
|
+
exports.DependencyTypeNotSupportedInPolicy = DependencyTypeNotSupportedInPolicy;
|
20
|
+
|
21
|
+
//# sourceMappingURL=dependency-type-not-supported-in-policy.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_bitError","data","require","DependencyTypeNotSupportedInPolicy","BitError","constructor","type","exports"],"sources":["dependency-type-not-supported-in-policy.ts"],"sourcesContent":["import { BitError } from '@teambit/bit-error';\n\nexport class DependencyTypeNotSupportedInPolicy extends BitError {\n constructor(type: string) {\n super(`the workspace policy does not support ${type} dependencies`);\n }\n}\n"],"mappings":";;;;;;AAAA,SAAAA,UAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,SAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,kCAAkC,SAASC,oBAAQ,CAAC;EAC/DC,WAAWA,CAACC,IAAY,EAAE;IACxB,KAAK,CAAC,yCAAyCA,IAAI,eAAe,CAAC;EACrE;AACF;AAACC,OAAA,CAAAJ,kCAAA,GAAAA,kCAAA","ignoreList":[]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export { DependencyTypeNotSupportedInPolicy } from './dependency-type-not-supported-in-policy';
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
Object.defineProperty(exports, "DependencyTypeNotSupportedInPolicy", {
|
7
|
+
enumerable: true,
|
8
|
+
get: function () {
|
9
|
+
return _dependencyTypeNotSupportedInPolicy().DependencyTypeNotSupportedInPolicy;
|
10
|
+
}
|
11
|
+
});
|
12
|
+
function _dependencyTypeNotSupportedInPolicy() {
|
13
|
+
const data = require("./dependency-type-not-supported-in-policy");
|
14
|
+
_dependencyTypeNotSupportedInPolicy = function () {
|
15
|
+
return data;
|
16
|
+
};
|
17
|
+
return data;
|
18
|
+
}
|
19
|
+
|
20
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_dependencyTypeNotSupportedInPolicy","data","require"],"sources":["index.ts"],"sourcesContent":["export { DependencyTypeNotSupportedInPolicy } from './dependency-type-not-supported-in-policy';\n"],"mappings":";;;;;;;;;;;AAAA,SAAAA,oCAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,mCAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA","ignoreList":[]}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
Object.defineProperty(exports, "InstallAspect", {
|
7
|
+
enumerable: true,
|
8
|
+
get: function () {
|
9
|
+
return _install().InstallAspect;
|
10
|
+
}
|
11
|
+
});
|
12
|
+
exports.default = void 0;
|
13
|
+
Object.defineProperty(exports, "getAnotherInstallRequiredOutput", {
|
14
|
+
enumerable: true,
|
15
|
+
get: function () {
|
16
|
+
return _install2().getAnotherInstallRequiredOutput;
|
17
|
+
}
|
18
|
+
});
|
19
|
+
function _install() {
|
20
|
+
const data = require("./install.aspect");
|
21
|
+
_install = function () {
|
22
|
+
return data;
|
23
|
+
};
|
24
|
+
return data;
|
25
|
+
}
|
26
|
+
function _install2() {
|
27
|
+
const data = require("./install.cmd");
|
28
|
+
_install2 = function () {
|
29
|
+
return data;
|
30
|
+
};
|
31
|
+
return data;
|
32
|
+
}
|
33
|
+
var _default = exports.default = _install().InstallAspect;
|
34
|
+
|
35
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_install","data","require","_install2","_default","exports","default","InstallAspect"],"sources":["index.ts"],"sourcesContent":["import { InstallAspect } from './install.aspect';\n\nexport { getAnotherInstallRequiredOutput } from './install.cmd';\nexport type { InstallMain } from './install.main.runtime';\nexport default InstallAspect;\nexport { InstallAspect };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAE,UAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,SAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAgE,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEjDC,wBAAa","ignoreList":[]}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.InstallAspect = void 0;
|
7
|
+
function _harmony() {
|
8
|
+
const data = require("@teambit/harmony");
|
9
|
+
_harmony = function () {
|
10
|
+
return data;
|
11
|
+
};
|
12
|
+
return data;
|
13
|
+
}
|
14
|
+
const InstallAspect = exports.InstallAspect = _harmony().Aspect.create({
|
15
|
+
id: 'teambit.workspace/install'
|
16
|
+
});
|
17
|
+
|
18
|
+
//# sourceMappingURL=install.aspect.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_harmony","data","require","InstallAspect","exports","Aspect","create","id"],"sources":["install.aspect.ts"],"sourcesContent":["import { Aspect } from '@teambit/harmony';\n\nexport const InstallAspect = Aspect.create({\n id: 'teambit.workspace/install',\n});\n"],"mappings":";;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEO,MAAME,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAGE,iBAAM,CAACC,MAAM,CAAC;EACzCC,EAAE,EAAE;AACN,CAAC,CAAC","ignoreList":[]}
|
@@ -0,0 +1,55 @@
|
|
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
|
+
type InstallCmdOptions = {
|
7
|
+
type: WorkspaceDependencyLifecycleType;
|
8
|
+
skipDedupe: boolean;
|
9
|
+
skipImport: boolean;
|
10
|
+
skipCompile: boolean;
|
11
|
+
skipWriteConfigFiles: boolean;
|
12
|
+
update: boolean;
|
13
|
+
updateExisting: boolean;
|
14
|
+
savePrefix: string;
|
15
|
+
addMissingDeps: boolean;
|
16
|
+
skipUnavailable: boolean;
|
17
|
+
addMissingPeers: boolean;
|
18
|
+
noOptional: boolean;
|
19
|
+
recurringInstall: boolean;
|
20
|
+
lockfileOnly: boolean;
|
21
|
+
};
|
22
|
+
export default class InstallCmd implements Command {
|
23
|
+
private install;
|
24
|
+
/**
|
25
|
+
* workspace extension.
|
26
|
+
*/
|
27
|
+
private workspace;
|
28
|
+
/**
|
29
|
+
* logger extension.
|
30
|
+
*/
|
31
|
+
private logger;
|
32
|
+
name: string;
|
33
|
+
description: string;
|
34
|
+
extendedDescription: string;
|
35
|
+
helpUrl: string;
|
36
|
+
arguments: {
|
37
|
+
name: string;
|
38
|
+
description: string;
|
39
|
+
}[];
|
40
|
+
alias: string;
|
41
|
+
group: string;
|
42
|
+
options: CommandOptions;
|
43
|
+
constructor(install: InstallMain,
|
44
|
+
/**
|
45
|
+
* workspace extension.
|
46
|
+
*/
|
47
|
+
workspace: Workspace,
|
48
|
+
/**
|
49
|
+
* logger extension.
|
50
|
+
*/
|
51
|
+
logger: Logger);
|
52
|
+
report([packages]: [string[]], options: InstallCmdOptions): Promise<string>;
|
53
|
+
}
|
54
|
+
export declare function getAnotherInstallRequiredOutput(recurringInstall?: boolean, oldNonLoadedEnvs?: string[]): string;
|
55
|
+
export {};
|
@@ -0,0 +1,155 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.default = void 0;
|
7
|
+
exports.getAnotherInstallRequiredOutput = getAnotherInstallRequiredOutput;
|
8
|
+
function _validateNpmPackageName() {
|
9
|
+
const data = _interopRequireDefault(require("validate-npm-package-name"));
|
10
|
+
_validateNpmPackageName = function () {
|
11
|
+
return data;
|
12
|
+
};
|
13
|
+
return data;
|
14
|
+
}
|
15
|
+
function _chalk() {
|
16
|
+
const data = _interopRequireDefault(require("chalk"));
|
17
|
+
_chalk = function () {
|
18
|
+
return data;
|
19
|
+
};
|
20
|
+
return data;
|
21
|
+
}
|
22
|
+
function _workspace() {
|
23
|
+
const data = require("@teambit/workspace");
|
24
|
+
_workspace = function () {
|
25
|
+
return data;
|
26
|
+
};
|
27
|
+
return data;
|
28
|
+
}
|
29
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
30
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
31
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
32
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
33
|
+
const recurringInstallFlagName = 'recurring-install';
|
34
|
+
class InstallCmd {
|
35
|
+
constructor(install,
|
36
|
+
/**
|
37
|
+
* workspace extension.
|
38
|
+
*/
|
39
|
+
workspace,
|
40
|
+
/**
|
41
|
+
* logger extension.
|
42
|
+
*/
|
43
|
+
logger) {
|
44
|
+
this.install = install;
|
45
|
+
this.workspace = workspace;
|
46
|
+
this.logger = logger;
|
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.');
|
50
|
+
_defineProperty(this, "helpUrl", 'reference/dependencies/dependency-installation');
|
51
|
+
_defineProperty(this, "arguments", [{
|
52
|
+
name: 'packages...',
|
53
|
+
description: 'a list of packages to install (separated by spaces)'
|
54
|
+
}]);
|
55
|
+
_defineProperty(this, "alias", 'in');
|
56
|
+
_defineProperty(this, "group", 'dependencies');
|
57
|
+
_defineProperty(this, "options", [['t', 'type [lifecycleType]', '"runtime" (default) or "peer" (dev is not a valid option)'], ['u', 'update', 'update all dependencies to latest version according to their semver range'], ['', 'update-existing', 'DEPRECATED (not needed anymore, it is the default now). update existing dependencies version and types'], ['', 'save-prefix [savePrefix]', 'set the prefix to use when adding dependency to workspace.jsonc'], ['', 'skip-dedupe', 'do not dedupe dependencies on installation'], ['', 'skip-import', 'do not import bit objects post installation'], ['', 'skip-compile', 'do not compile components'], ['', 'skip-write-config-files', 'do not write config files (such as eslint, tsconfig, prettier, etc...)'], ['a', 'add-missing-deps', 'install all missing dependencies'], ['', 'skip-unavailable', 'when adding missing dependencies, skip those that are not found in the regisry'], ['', 'add-missing-peers', 'install all missing peer dependencies'], ['', recurringInstallFlagName, 'automatically run install again if there are non loaded old envs in your workspace'], ['', 'no-optional [noOptional]', 'do not install optional dependencies (works with pnpm only)'], ['', 'lockfile-only', 'dependencies are not written to node_modules. Only the lockfile is updated']]);
|
58
|
+
}
|
59
|
+
async report([packages = []], options) {
|
60
|
+
const startTime = Date.now();
|
61
|
+
if (!this.workspace) throw new (_workspace().OutsideWorkspaceError)();
|
62
|
+
if (options.updateExisting) {
|
63
|
+
this.logger.consoleWarning(`--update-existing is deprecated, please omit it. "bit install" will update existing dependencies by default`);
|
64
|
+
}
|
65
|
+
packages.forEach(pkg => {
|
66
|
+
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
|
+
}
|
70
|
+
});
|
71
|
+
this.logger.console(`Resolving component dependencies for workspace: '${_chalk().default.cyan(this.workspace.name)}'`);
|
72
|
+
const installOpts = {
|
73
|
+
lifecycleType: options.addMissingPeers ? 'peer' : options.type,
|
74
|
+
dedupe: !options.skipDedupe,
|
75
|
+
import: !options.skipImport,
|
76
|
+
updateExisting: true,
|
77
|
+
savePrefix: options.savePrefix,
|
78
|
+
addMissingDeps: options.addMissingDeps,
|
79
|
+
skipUnavailable: options.skipUnavailable,
|
80
|
+
addMissingPeers: options.addMissingPeers,
|
81
|
+
compile: !options.skipCompile,
|
82
|
+
includeOptionalDeps: !options.noOptional,
|
83
|
+
writeConfigFiles: !options.skipWriteConfigFiles,
|
84
|
+
updateAll: options.update,
|
85
|
+
recurringInstall: options.recurringInstall,
|
86
|
+
lockfileOnly: options.lockfileOnly,
|
87
|
+
showExternalPackageManagerPrompt: true
|
88
|
+
};
|
89
|
+
const components = await this.install.install(packages, installOpts);
|
90
|
+
const endTime = Date.now();
|
91
|
+
const oldNonLoadedEnvs = this.install.getOldNonLoadedEnvs();
|
92
|
+
return formatOutput({
|
93
|
+
startTime,
|
94
|
+
endTime,
|
95
|
+
numOfComps: components.toArray().length.toString(),
|
96
|
+
recurringInstall: options[recurringInstallFlagName],
|
97
|
+
oldNonLoadedEnvs
|
98
|
+
});
|
99
|
+
}
|
100
|
+
}
|
101
|
+
exports.default = InstallCmd;
|
102
|
+
function calculateTime(startTime, endTime) {
|
103
|
+
const diff = endTime - startTime;
|
104
|
+
return diff / 1000;
|
105
|
+
}
|
106
|
+
function formatOutput({
|
107
|
+
numOfComps,
|
108
|
+
endTime,
|
109
|
+
startTime,
|
110
|
+
recurringInstall,
|
111
|
+
oldNonLoadedEnvs
|
112
|
+
}) {
|
113
|
+
const executionTime = calculateTime(startTime, endTime);
|
114
|
+
const summary = _chalk().default.green(`Successfully installed dependencies and compiled ${_chalk().default.cyan(numOfComps)} component(s) in ${_chalk().default.cyan(executionTime.toString())} seconds`);
|
115
|
+
const anotherInstallRequiredOutput = getAnotherInstallRequiredOutput(recurringInstall, oldNonLoadedEnvs);
|
116
|
+
return anotherInstallRequiredOutput ? `\n${anotherInstallRequiredOutput}\n\n${summary}` : `\n${summary}`;
|
117
|
+
}
|
118
|
+
function getAnotherInstallRequiredOutput(recurringInstall = false, oldNonLoadedEnvs = []) {
|
119
|
+
if (!oldNonLoadedEnvs.length) return '';
|
120
|
+
const oldNonLoadedEnvsStr = oldNonLoadedEnvs.join(', ');
|
121
|
+
const firstPart = `Bit was not able to install all dependencies. Please run "${_chalk().default.cyan('bit install')}" again `;
|
122
|
+
const flag = _chalk().default.cyan(`--${recurringInstallFlagName}`);
|
123
|
+
const suggestRecurringInstall = recurringInstall ? '' : `(or use the "${flag}" option next time).`;
|
124
|
+
const envsStr = `The following environments need to add support for "dependency policy" to fix the warning: ${_chalk().default.cyan(oldNonLoadedEnvsStr)}`;
|
125
|
+
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`;
|
126
|
+
const msg = `${firstPart}${suggestRecurringInstall}\n${envsStr}\n${docsLink}`;
|
127
|
+
return _chalk().default.yellow(msg);
|
128
|
+
}
|
129
|
+
function extractPackageName(packageString) {
|
130
|
+
if (!packageString) return '';
|
131
|
+
|
132
|
+
// Handle https and git protocols. We don't allow "file" protocol here. It won't work for the consumer.
|
133
|
+
const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];
|
134
|
+
if (allowedPrefixes.some(prefix => packageString.startsWith(prefix))) {
|
135
|
+
return packageString;
|
136
|
+
}
|
137
|
+
|
138
|
+
// If it's a scoped package
|
139
|
+
if (packageString.startsWith('@')) {
|
140
|
+
// Find the second '@' (first is for scope, second is for version/tag)
|
141
|
+
const atIndex = packageString.indexOf('@', 1);
|
142
|
+
if (atIndex === -1) return packageString;
|
143
|
+
const possibleVersion = packageString.slice(atIndex + 1);
|
144
|
+
// If the part after the second '@' contains a slash, it's not a version/tag
|
145
|
+
if (possibleVersion.includes('/')) return packageString;
|
146
|
+
return packageString.slice(0, atIndex);
|
147
|
+
}
|
148
|
+
|
149
|
+
// For unscoped packages, split at the last '@'
|
150
|
+
const lastAtIndex = packageString.lastIndexOf('@');
|
151
|
+
if (lastAtIndex <= 0) return packageString;
|
152
|
+
return packageString.slice(0, lastAtIndex);
|
153
|
+
}
|
154
|
+
|
155
|
+
//# sourceMappingURL=install.cmd.js.map
|
@@ -0,0 +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","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","startsWith","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 = '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 showExternalPackageManagerPrompt: true,\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":[]}
|
@@ -0,0 +1,248 @@
|
|
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';
|
10
|
+
import { type DependenciesGraph } from '@teambit/objects';
|
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';
|
21
|
+
export type WorkspaceLinkOptions = LinkingOptions & {
|
22
|
+
rootPolicy?: WorkspacePolicy;
|
23
|
+
linkToBitRoots?: boolean;
|
24
|
+
includePeers?: boolean;
|
25
|
+
};
|
26
|
+
export type WorkspaceLinkResults = {
|
27
|
+
legacyLinkResults?: NodeModulesLinksResult[];
|
28
|
+
legacyLinkCodemodResults?: CodemodResult[];
|
29
|
+
} & LinkResults;
|
30
|
+
export type WorkspaceInstallOptions = {
|
31
|
+
addMissingDeps?: boolean;
|
32
|
+
skipUnavailable?: boolean;
|
33
|
+
addMissingPeers?: boolean;
|
34
|
+
lifecycleType?: WorkspaceDependencyLifecycleType;
|
35
|
+
dedupe?: boolean;
|
36
|
+
import?: boolean;
|
37
|
+
showExternalPackageManagerPrompt?: boolean;
|
38
|
+
copyPeerToRuntimeOnRoot?: boolean;
|
39
|
+
copyPeerToRuntimeOnComponents?: boolean;
|
40
|
+
updateExisting?: boolean;
|
41
|
+
skipIfExisting?: boolean;
|
42
|
+
savePrefix?: string;
|
43
|
+
compile?: boolean;
|
44
|
+
includeOptionalDeps?: boolean;
|
45
|
+
updateAll?: boolean;
|
46
|
+
recurringInstall?: boolean;
|
47
|
+
optimizeReportForNonTerminal?: boolean;
|
48
|
+
lockfileOnly?: boolean;
|
49
|
+
writeConfigFiles?: boolean;
|
50
|
+
skipPrune?: boolean;
|
51
|
+
dependenciesGraph?: DependenciesGraph;
|
52
|
+
};
|
53
|
+
export type ModulesInstallOptions = Omit<WorkspaceInstallOptions, 'updateExisting' | 'lifecycleType' | 'import'>;
|
54
|
+
type PreLink = (linkOpts?: WorkspaceLinkOptions) => Promise<void>;
|
55
|
+
type PreInstall = (installOpts?: WorkspaceInstallOptions) => Promise<void>;
|
56
|
+
type PostInstall = () => Promise<void>;
|
57
|
+
type PreLinkSlot = SlotRegistry<PreLink>;
|
58
|
+
type PreInstallSlot = SlotRegistry<PreInstall>;
|
59
|
+
type PostInstallSlot = SlotRegistry<PostInstall>;
|
60
|
+
export declare class InstallMain {
|
61
|
+
private dependencyResolver;
|
62
|
+
private logger;
|
63
|
+
private workspace;
|
64
|
+
private variants;
|
65
|
+
private compiler;
|
66
|
+
private envs;
|
67
|
+
private wsConfigFiles;
|
68
|
+
private aspectLoader;
|
69
|
+
private app;
|
70
|
+
private generator;
|
71
|
+
private preLinkSlot;
|
72
|
+
private preInstallSlot;
|
73
|
+
private postInstallSlot;
|
74
|
+
private ipcEvents;
|
75
|
+
private harmony;
|
76
|
+
private visitedAspects;
|
77
|
+
private oldNonLoadedEnvs;
|
78
|
+
constructor(dependencyResolver: DependencyResolverMain, logger: Logger, workspace: Workspace, variants: VariantsMain, compiler: CompilerMain, envs: EnvsMain, wsConfigFiles: WorkspaceConfigFilesMain, aspectLoader: AspectLoaderMain, app: ApplicationMain, generator: GeneratorMain, preLinkSlot: PreLinkSlot, preInstallSlot: PreInstallSlot, postInstallSlot: PostInstallSlot, ipcEvents: IpcEventsMain, harmony: Harmony);
|
79
|
+
/**
|
80
|
+
* Install dependencies for all components in the workspace
|
81
|
+
*
|
82
|
+
* @returns
|
83
|
+
* @memberof Workspace
|
84
|
+
*/
|
85
|
+
install(packages?: string[], options?: WorkspaceInstallOptions): Promise<ComponentMap<string>>;
|
86
|
+
registerPreLink(fn: PreLink): void;
|
87
|
+
registerPreInstall(fn: PreInstall): void;
|
88
|
+
registerPostInstall(fn: PostInstall): void;
|
89
|
+
onComponentCreate(generateResults: GenerateResult[], installOptions?: Partial<WorkspaceInstallOptions>): Promise<void>;
|
90
|
+
private _addPackages;
|
91
|
+
private _installModules;
|
92
|
+
private shouldClearCacheOnInstall;
|
93
|
+
/**
|
94
|
+
* This function is very important to fix some issues that might happen during the installation process.
|
95
|
+
* The case is the following:
|
96
|
+
* during/before the installation process we load some envs from their bit.env files
|
97
|
+
* this contains code like:
|
98
|
+
* protected tsconfigPath = require.resolve('./config/tsconfig.json');
|
99
|
+
* protected eslintConfigPath = require.resolve('./config/eslintrc.cjs');
|
100
|
+
* When we load that file, we calculated the resolved path, and it's stored in the env
|
101
|
+
* object instance.
|
102
|
+
* then later on during the install we move the env to another location (like bit roots)
|
103
|
+
* which points to a .pnpm folder with some peers, that changed during the install
|
104
|
+
* then when we take this env object and call write ws config for example
|
105
|
+
* or compile
|
106
|
+
* we use that resolved path to calculate the final tsconfig
|
107
|
+
* however that file is no longer exists which result in an error
|
108
|
+
* This function will check if an env folder doesn't exist anymore, and will re-load it
|
109
|
+
* from its new location.
|
110
|
+
* This usually happen when we have install running in the middle of the process followed
|
111
|
+
* by other bit ops.
|
112
|
+
* examples:
|
113
|
+
* bit new - which might run few installs then other ops.
|
114
|
+
* bit switch - which might run few installs then other ops, and potentially change the
|
115
|
+
* peer deps during the install.
|
116
|
+
* bit server (vscode plugin) - which keep the process always live, so any install ops
|
117
|
+
* that change the location, will cause the vscode plugin/bit server to crash later.
|
118
|
+
* @returns
|
119
|
+
*/
|
120
|
+
private reloadMovedEnvs;
|
121
|
+
private reloadRegisteredEnvs;
|
122
|
+
private reloadNonLoadedEnvs;
|
123
|
+
private reloadEnvs;
|
124
|
+
private reloadAspects;
|
125
|
+
private reloadOneAspectsGroup;
|
126
|
+
/**
|
127
|
+
* This function groups the components to aspects to load into groups.
|
128
|
+
* The order of the groups is important, the first group should be loaded first.
|
129
|
+
* The order inside the group is not important.
|
130
|
+
* The groups are:
|
131
|
+
* 1. aspects definitions without components (this should be an empty group, if it's not, we should check why).
|
132
|
+
* 2. aspects which are not in the workspace but in the scope / node modules.
|
133
|
+
* 3. envs of aspects (which are also aspects)
|
134
|
+
* 4. other aspects (the rest)
|
135
|
+
* @param aspects
|
136
|
+
* @returns
|
137
|
+
*/
|
138
|
+
private groupAspectsToLoad;
|
139
|
+
private regroupEnvsIdsFromTheList;
|
140
|
+
private _getComponentsManifestsAndRootPolicy;
|
141
|
+
/**
|
142
|
+
* The function `tryWriteConfigFiles` attempts to write workspace config files, and if it fails, it logs an error
|
143
|
+
* message.
|
144
|
+
* @returns If the condition `!shouldWrite` is true, then nothing is being returned. Otherwise, if the `writeConfigFiles`
|
145
|
+
* function is successfully executed, nothing is being returned. If an error occurs during the execution of
|
146
|
+
* `writeConfigFiles`, an error message is being returned.
|
147
|
+
*/
|
148
|
+
private tryWriteConfigFiles;
|
149
|
+
private addConfiguredAspectsToWorkspacePolicy;
|
150
|
+
private addConfiguredGeneratorEnvsToWorkspacePolicy;
|
151
|
+
private _addMissingPackagesToRootPolicy;
|
152
|
+
private _getMissingPackagesWithoutRootDeps;
|
153
|
+
private _getAllMissingPackages;
|
154
|
+
private _getComponentsManifests;
|
155
|
+
setOldNonLoadedEnvs(): string[];
|
156
|
+
/**
|
157
|
+
* This function returns a list of old non-loaded environments names.
|
158
|
+
* @returns an array of strings called `oldNonLoadedEnvs`. This array contains the names of environment variables that
|
159
|
+
* failed to load as extensions and are also don't have an env.jsonc file.
|
160
|
+
* If this list is not empty, then the user might need to run another install to make sure all dependencies resolved
|
161
|
+
* correctly
|
162
|
+
*/
|
163
|
+
getOldNonLoadedEnvs(): string[];
|
164
|
+
private _updateRootDirs;
|
165
|
+
private _getRootManifests;
|
166
|
+
private _getEnvManifests;
|
167
|
+
private _getEnvDependencies;
|
168
|
+
/**
|
169
|
+
* Return the package name of the env with its version.
|
170
|
+
* (only if the env is not a core env and is not in the workspace)
|
171
|
+
* @param envId
|
172
|
+
* @returns
|
173
|
+
*/
|
174
|
+
private _getEnvPackage;
|
175
|
+
private _getAppManifests;
|
176
|
+
private _getAllUsedEnvIds;
|
177
|
+
/**
|
178
|
+
* Updates out-of-date dependencies in the workspace.
|
179
|
+
*
|
180
|
+
* @param options.all {Boolean} updates all outdated dependencies without showing a prompt.
|
181
|
+
*/
|
182
|
+
updateDependencies(options: {
|
183
|
+
forceVersionBump?: 'major' | 'minor' | 'patch' | 'compatible';
|
184
|
+
patterns?: string[];
|
185
|
+
all: boolean;
|
186
|
+
}): Promise<ComponentMap<string> | null>;
|
187
|
+
addDuplicateComponentAndPackageIssue(components: Component[]): Promise<void>;
|
188
|
+
private _updateComponentsConfig;
|
189
|
+
private _updateVariantsPolicies;
|
190
|
+
/**
|
191
|
+
* Uninstall the specified packages from dependencies.
|
192
|
+
*
|
193
|
+
* @param {string[]} the list of packages that should be removed from dependencies.
|
194
|
+
*/
|
195
|
+
uninstallDependencies(packages: string[]): Promise<ComponentMap<string>>;
|
196
|
+
/**
|
197
|
+
* This function returns all the locations of the external links that should be created inside node_modules.
|
198
|
+
* This information may then be passed to the package manager, which will create the links on its own.
|
199
|
+
*/
|
200
|
+
calculateLinks(options?: WorkspaceLinkOptions): Promise<{
|
201
|
+
linkResults: WorkspaceLinkResults;
|
202
|
+
linkedRootDeps: Record<string, string>;
|
203
|
+
}>;
|
204
|
+
linkCodemods(compDirMap: ComponentMap<string>, options?: {
|
205
|
+
rewire?: boolean;
|
206
|
+
}): Promise<{
|
207
|
+
linksResults: NodeModulesLinksResult[];
|
208
|
+
codemodResults: any;
|
209
|
+
}>;
|
210
|
+
link(options?: WorkspaceLinkOptions): Promise<WorkspaceLinkResults>;
|
211
|
+
private _linkAllComponentsToBitRoots;
|
212
|
+
private getRootComponentDirByRootId;
|
213
|
+
/**
|
214
|
+
* Generate a filter to pass to the installer
|
215
|
+
* This will filter deps which are come from remotes which defined in scope.json
|
216
|
+
* those components comes from local remotes, usually doesn't have a package in a registry
|
217
|
+
* so no reason to try to install them (it will fail)
|
218
|
+
*/
|
219
|
+
private generateFilterFnForDepsFromLocalRemote;
|
220
|
+
private getComponentsDirectory;
|
221
|
+
private onRootAspectAddedSubscriber;
|
222
|
+
private onAspectsResolveSubscriber;
|
223
|
+
onComponentChange(component: Component): Promise<void>;
|
224
|
+
static slots: (((registerFn: () => string) => SlotRegistry<PreLinkSlot>) | ((registerFn: () => string) => SlotRegistry<PreInstallSlot>))[];
|
225
|
+
static dependencies: import("@teambit/harmony").Aspect[];
|
226
|
+
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
227
|
+
static provider([dependencyResolver, workspace, loggerExt, variants, cli, compiler, issues, envs, app, ipcEvents, generator, wsConfigFiles, aspectLoader, bundler, ui,]: [
|
228
|
+
DependencyResolverMain,
|
229
|
+
Workspace,
|
230
|
+
LoggerMain,
|
231
|
+
VariantsMain,
|
232
|
+
CLIMain,
|
233
|
+
CompilerMain,
|
234
|
+
IssuesMain,
|
235
|
+
EnvsMain,
|
236
|
+
ApplicationMain,
|
237
|
+
IpcEventsMain,
|
238
|
+
GeneratorMain,
|
239
|
+
WorkspaceConfigFilesMain,
|
240
|
+
AspectLoaderMain,
|
241
|
+
BundlerMain,
|
242
|
+
UiMain
|
243
|
+
], _: any, [preLinkSlot, preInstallSlot, postInstallSlot]: [PreLinkSlot, PreInstallSlot, PostInstallSlot], harmony: Harmony): Promise<InstallMain>;
|
244
|
+
private handleExternalPackageManagerPrompt;
|
245
|
+
private disableExternalPackageManagerMode;
|
246
|
+
private removePostInstallScript;
|
247
|
+
}
|
248
|
+
export default InstallMain;
|