@teambit/install 1.0.1083 → 1.0.1085
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/install.cmd.js +9 -34
- package/dist/install.cmd.js.map +1 -1
- package/dist/package-name-utils.d.ts +12 -0
- package/dist/package-name-utils.js +56 -0
- package/dist/package-name-utils.js.map +1 -0
- package/dist/package-name-utils.spec.d.ts +1 -0
- package/dist/package-name-utils.spec.js +56 -0
- package/dist/package-name-utils.spec.js.map +1 -0
- package/install.cmd.tsx +2 -28
- package/package.json +18 -18
- /package/dist/{preview-1785371732014.js → preview-1785438161098.js} +0 -0
package/dist/install.cmd.js
CHANGED
|
@@ -5,13 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
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
8
|
function _chalk() {
|
|
16
9
|
const data = _interopRequireDefault(require("chalk"));
|
|
17
10
|
_chalk = function () {
|
|
@@ -26,6 +19,13 @@ function _workspace() {
|
|
|
26
19
|
};
|
|
27
20
|
return data;
|
|
28
21
|
}
|
|
22
|
+
function _packageNameUtils() {
|
|
23
|
+
const data = require("./package-name-utils");
|
|
24
|
+
_packageNameUtils = function () {
|
|
25
|
+
return data;
|
|
26
|
+
};
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
29
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
30
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
31
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
@@ -65,8 +65,8 @@ automatically imports components, compiles components, links to node_modules, an
|
|
|
65
65
|
this.logger.consoleWarning(`--update-existing is deprecated, please omit it. "bit install" will update existing dependencies by default`);
|
|
66
66
|
}
|
|
67
67
|
const validPackages = await Promise.all(packages.map(async pkg => {
|
|
68
|
-
const pkgName = extractPackageName(pkg);
|
|
69
|
-
if ((0,
|
|
68
|
+
const pkgName = (0, _packageNameUtils().extractPackageName)(pkg);
|
|
69
|
+
if ((0, _packageNameUtils().isValidPackageName)(pkgName)) {
|
|
70
70
|
return pkg;
|
|
71
71
|
}
|
|
72
72
|
// if this is a component-id, find the package name and use it instead.
|
|
@@ -167,30 +167,5 @@ function getAnotherInstallRequiredOutput(recurringInstall = false, oldNonLoadedE
|
|
|
167
167
|
const msg = `${firstPart}${suggestRecurringInstall}\n${envsStr}\n${docsLink}`;
|
|
168
168
|
return _chalk().default.yellow(msg);
|
|
169
169
|
}
|
|
170
|
-
function extractPackageName(packageString) {
|
|
171
|
-
if (!packageString) return '';
|
|
172
|
-
|
|
173
|
-
// Handle https and git protocols. We don't allow "file" protocol here. It won't work for the consumer.
|
|
174
|
-
const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];
|
|
175
|
-
if (allowedPrefixes.some(prefix => packageString.startsWith(prefix))) {
|
|
176
|
-
return packageString;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// If it's a scoped package
|
|
180
|
-
if (packageString.startsWith('@')) {
|
|
181
|
-
// Find the second '@' (first is for scope, second is for version/tag)
|
|
182
|
-
const atIndex = packageString.indexOf('@', 1);
|
|
183
|
-
if (atIndex === -1) return packageString;
|
|
184
|
-
const possibleVersion = packageString.slice(atIndex + 1);
|
|
185
|
-
// If the part after the second '@' contains a slash, it's not a version/tag
|
|
186
|
-
if (possibleVersion.includes('/')) return packageString;
|
|
187
|
-
return packageString.slice(0, atIndex);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// For unscoped packages, split at the last '@'
|
|
191
|
-
const lastAtIndex = packageString.lastIndexOf('@');
|
|
192
|
-
if (lastAtIndex <= 0) return packageString;
|
|
193
|
-
return packageString.slice(0, lastAtIndex);
|
|
194
|
-
}
|
|
195
170
|
|
|
196
171
|
//# sourceMappingURL=install.cmd.js.map
|
package/dist/install.cmd.js.map
CHANGED
|
@@ -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","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","allowScripts","_parseAllowScriptsFlags","disallowScripts","components","endTime","oldNonLoadedEnvs","getOldNonLoadedEnvs","formatOutput","numOfComps","toArray","length","toString","allowScriptsFlag","disallowScriptsFlag","undefined","_parseCommaSeparatedPkgList","pkgList","split","trimmed","trim","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 allowScripts?: string;\n disallowScripts?: string;\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 registry'],\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 [\n '',\n 'allow-scripts [pkgNames]',\n 'a comma separated list of package names that are allowed to run installation scripts',\n ],\n [\n '',\n 'disallow-scripts [pkgNames]',\n 'a comma separated list of package names that are NOT allowed to run installation scripts',\n ],\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 allowScripts: this._parseAllowScriptsFlags(options.allowScripts, options.disallowScripts),\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 private _parseAllowScriptsFlags(\n allowScriptsFlag?: string,\n disallowScriptsFlag?: string\n ): Record<string, boolean> | undefined {\n if (!allowScriptsFlag && !disallowScriptsFlag) return undefined;\n const allowScripts: Record<string, boolean> = {};\n if (allowScriptsFlag) {\n for (const pkgName of this._parseCommaSeparatedPkgList(allowScriptsFlag)) {\n allowScripts[pkgName] = true;\n }\n }\n if (disallowScriptsFlag) {\n for (const pkgName of this._parseCommaSeparatedPkgList(disallowScriptsFlag)) {\n allowScripts[pkgName] = false;\n }\n }\n return allowScripts;\n }\n\n private *_parseCommaSeparatedPkgList(pkgList: string): IterableIterator<string> {\n for (const pkgName of pkgList.split(',')) {\n const trimmed = pkgName.trim();\n if (trimmed) {\n yield trimmed;\n }\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":["_chalk","data","_interopRequireDefault","require","_workspace","_packageNameUtils","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","isValidPackageName","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","allowScripts","_parseAllowScriptsFlags","disallowScripts","components","endTime","oldNonLoadedEnvs","getOldNonLoadedEnvs","formatOutput","numOfComps","toArray","length","toString","allowScriptsFlag","disallowScriptsFlag","undefined","_parseCommaSeparatedPkgList","pkgList","split","trimmed","trim","exports","calculateTime","diff","executionTime","summary","green","anotherInstallRequiredOutput","getAnotherInstallRequiredOutput","oldNonLoadedEnvsStr","join","firstPart","flag","suggestRecurringInstall","envsStr","docsLink","msg","yellow"],"sources":["install.cmd.tsx"],"sourcesContent":["import type { Command, CommandOptions } from '@teambit/cli';\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';\nimport { extractPackageName, isValidPackageName } from './package-name-utils';\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 allowScripts?: string;\n disallowScripts?: string;\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 registry'],\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 [\n '',\n 'allow-scripts [pkgNames]',\n 'a comma separated list of package names that are allowed to run installation scripts',\n ],\n [\n '',\n 'disallow-scripts [pkgNames]',\n 'a comma separated list of package names that are NOT allowed to run installation scripts',\n ],\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 (isValidPackageName(pkgName)) {\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 allowScripts: this._parseAllowScriptsFlags(options.allowScripts, options.disallowScripts),\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 private _parseAllowScriptsFlags(\n allowScriptsFlag?: string,\n disallowScriptsFlag?: string\n ): Record<string, boolean> | undefined {\n if (!allowScriptsFlag && !disallowScriptsFlag) return undefined;\n const allowScripts: Record<string, boolean> = {};\n if (allowScriptsFlag) {\n for (const pkgName of this._parseCommaSeparatedPkgList(allowScriptsFlag)) {\n allowScripts[pkgName] = true;\n }\n }\n if (disallowScriptsFlag) {\n for (const pkgName of this._parseCommaSeparatedPkgList(disallowScriptsFlag)) {\n allowScripts[pkgName] = false;\n }\n }\n return allowScripts;\n }\n\n private *_parseCommaSeparatedPkgList(pkgList: string): IterableIterator<string> {\n for (const pkgName of pkgList.split(',')) {\n const trimmed = pkgName.trim();\n if (trimmed) {\n yield trimmed;\n }\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* whether the given name is a package name that can be installed from a registry.
|
|
3
|
+
* names such as "events" or "string_decoder" collide with Node core module names, so they are not
|
|
4
|
+
* valid for publishing *new* packages, but they exist on npm and are installable, hence the check
|
|
5
|
+
* against `validForOldPackages` and not `validForNewPackages`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isValidPackageName(pkgName: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* extract the package name out of an install argument, stripping the version/tag suffix if exists.
|
|
10
|
+
* e.g. "lodash@4.17.21" => "lodash", "@types/node@20" => "@types/node".
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractPackageName(packageString: string): string;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.extractPackageName = extractPackageName;
|
|
7
|
+
exports.isValidPackageName = isValidPackageName;
|
|
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 _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
/**
|
|
17
|
+
* whether the given name is a package name that can be installed from a registry.
|
|
18
|
+
* names such as "events" or "string_decoder" collide with Node core module names, so they are not
|
|
19
|
+
* valid for publishing *new* packages, but they exist on npm and are installable, hence the check
|
|
20
|
+
* against `validForOldPackages` and not `validForNewPackages`.
|
|
21
|
+
*/
|
|
22
|
+
function isValidPackageName(pkgName) {
|
|
23
|
+
return (0, _validateNpmPackageName().default)(pkgName).validForOldPackages;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* extract the package name out of an install argument, stripping the version/tag suffix if exists.
|
|
28
|
+
* e.g. "lodash@4.17.21" => "lodash", "@types/node@20" => "@types/node".
|
|
29
|
+
*/
|
|
30
|
+
function extractPackageName(packageString) {
|
|
31
|
+
if (!packageString) return '';
|
|
32
|
+
|
|
33
|
+
// Handle https and git protocols. We don't allow "file" protocol here. It won't work for the consumer.
|
|
34
|
+
const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];
|
|
35
|
+
if (allowedPrefixes.some(prefix => packageString.startsWith(prefix))) {
|
|
36
|
+
return packageString;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// If it's a scoped package
|
|
40
|
+
if (packageString.startsWith('@')) {
|
|
41
|
+
// Find the second '@' (first is for scope, second is for version/tag)
|
|
42
|
+
const atIndex = packageString.indexOf('@', 1);
|
|
43
|
+
if (atIndex === -1) return packageString;
|
|
44
|
+
const possibleVersion = packageString.slice(atIndex + 1);
|
|
45
|
+
// If the part after the second '@' contains a slash, it's not a version/tag
|
|
46
|
+
if (possibleVersion.includes('/')) return packageString;
|
|
47
|
+
return packageString.slice(0, atIndex);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// For unscoped packages, split at the last '@'
|
|
51
|
+
const lastAtIndex = packageString.lastIndexOf('@');
|
|
52
|
+
if (lastAtIndex <= 0) return packageString;
|
|
53
|
+
return packageString.slice(0, lastAtIndex);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=package-name-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_validateNpmPackageName","data","_interopRequireDefault","require","e","__esModule","default","isValidPackageName","pkgName","packageNameValidate","validForOldPackages","extractPackageName","packageString","allowedPrefixes","some","prefix","startsWith","atIndex","indexOf","possibleVersion","slice","includes","lastAtIndex","lastIndexOf"],"sources":["package-name-utils.ts"],"sourcesContent":["import packageNameValidate from 'validate-npm-package-name';\n\n/**\n * whether the given name is a package name that can be installed from a registry.\n * names such as \"events\" or \"string_decoder\" collide with Node core module names, so they are not\n * valid for publishing *new* packages, but they exist on npm and are installable, hence the check\n * against `validForOldPackages` and not `validForNewPackages`.\n */\nexport function isValidPackageName(pkgName: string): boolean {\n return packageNameValidate(pkgName).validForOldPackages;\n}\n\n/**\n * extract the package name out of an install argument, stripping the version/tag suffix if exists.\n * e.g. \"lodash@4.17.21\" => \"lodash\", \"@types/node@20\" => \"@types/node\".\n */\nexport function 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":";;;;;;;AAAA,SAAAA,wBAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,uBAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA4D,SAAAC,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE5D;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,kBAAkBA,CAACC,OAAe,EAAW;EAC3D,OAAO,IAAAC,iCAAmB,EAACD,OAAO,CAAC,CAACE,mBAAmB;AACzD;;AAEA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,IAAI,CAACA,aAAa,EAAE,OAAO,EAAE;;EAE7B;EACA,MAAMC,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,CAAC;EAC1E,IAAIA,eAAe,CAACC,IAAI,CAAEC,MAAM,IAAKH,aAAa,CAACI,UAAU,CAACD,MAAM,CAAC,CAAC,EAAE;IACtE,OAAOH,aAAa;EACtB;;EAEA;EACA,IAAIA,aAAa,CAACI,UAAU,CAAC,GAAG,CAAC,EAAE;IACjC;IACA,MAAMC,OAAO,GAAGL,aAAa,CAACM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,IAAID,OAAO,KAAK,CAAC,CAAC,EAAE,OAAOL,aAAa;IACxC,MAAMO,eAAe,GAAGP,aAAa,CAACQ,KAAK,CAACH,OAAO,GAAG,CAAC,CAAC;IACxD;IACA,IAAIE,eAAe,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAOT,aAAa;IACvD,OAAOA,aAAa,CAACQ,KAAK,CAAC,CAAC,EAAEH,OAAO,CAAC;EACxC;;EAEA;EACA,MAAMK,WAAW,GAAGV,aAAa,CAACW,WAAW,CAAC,GAAG,CAAC;EAClD,IAAID,WAAW,IAAI,CAAC,EAAE,OAAOV,aAAa;EAC1C,OAAOA,aAAa,CAACQ,KAAK,CAAC,CAAC,EAAEE,WAAW,CAAC;AAC5C","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _chai() {
|
|
4
|
+
const data = require("chai");
|
|
5
|
+
_chai = function () {
|
|
6
|
+
return data;
|
|
7
|
+
};
|
|
8
|
+
return data;
|
|
9
|
+
}
|
|
10
|
+
function _packageNameUtils() {
|
|
11
|
+
const data = require("./package-name-utils");
|
|
12
|
+
_packageNameUtils = function () {
|
|
13
|
+
return data;
|
|
14
|
+
};
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
describe('isValidPackageName', () => {
|
|
18
|
+
it('should accept regular package names', () => {
|
|
19
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('lodash')).to.be.true;
|
|
20
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('stream-browserify')).to.be.true;
|
|
21
|
+
});
|
|
22
|
+
it('should accept scoped package names', () => {
|
|
23
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('@types/node')).to.be.true;
|
|
24
|
+
});
|
|
25
|
+
it('should accept existing packages whose names collide with Node core module names', () => {
|
|
26
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('events')).to.be.true;
|
|
27
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('string_decoder')).to.be.true;
|
|
28
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('punycode')).to.be.true;
|
|
29
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('constants')).to.be.true;
|
|
30
|
+
});
|
|
31
|
+
it('should reject invalid package names', () => {
|
|
32
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('')).to.be.false;
|
|
33
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('.start-with-period')).to.be.false;
|
|
34
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('_start-with-underscore')).to.be.false;
|
|
35
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('name with spaces')).to.be.false;
|
|
36
|
+
(0, _chai().expect)((0, _packageNameUtils().isValidPackageName)('scope/name')).to.be.false;
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('extractPackageName', () => {
|
|
40
|
+
it('should return the name as-is when no version is specified', () => {
|
|
41
|
+
(0, _chai().expect)((0, _packageNameUtils().extractPackageName)('lodash')).to.equal('lodash');
|
|
42
|
+
(0, _chai().expect)((0, _packageNameUtils().extractPackageName)('@types/node')).to.equal('@types/node');
|
|
43
|
+
});
|
|
44
|
+
it('should strip the version from unscoped packages', () => {
|
|
45
|
+
(0, _chai().expect)((0, _packageNameUtils().extractPackageName)('lodash@4.17.21')).to.equal('lodash');
|
|
46
|
+
});
|
|
47
|
+
it('should strip the version from scoped packages', () => {
|
|
48
|
+
(0, _chai().expect)((0, _packageNameUtils().extractPackageName)('@types/node@20.1.0')).to.equal('@types/node');
|
|
49
|
+
});
|
|
50
|
+
it('should keep git and https urls as-is', () => {
|
|
51
|
+
(0, _chai().expect)((0, _packageNameUtils().extractPackageName)('https://example.com/foo.tgz')).to.equal('https://example.com/foo.tgz');
|
|
52
|
+
(0, _chai().expect)((0, _packageNameUtils().extractPackageName)('git+https://example.com/foo.git')).to.equal('git+https://example.com/foo.git');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=package-name-utils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_chai","data","require","_packageNameUtils","describe","it","expect","isValidPackageName","to","be","true","false","extractPackageName","equal"],"sources":["package-name-utils.spec.ts"],"sourcesContent":["import { expect } from 'chai';\nimport { extractPackageName, isValidPackageName } from './package-name-utils';\n\ndescribe('isValidPackageName', () => {\n it('should accept regular package names', () => {\n expect(isValidPackageName('lodash')).to.be.true;\n expect(isValidPackageName('stream-browserify')).to.be.true;\n });\n it('should accept scoped package names', () => {\n expect(isValidPackageName('@types/node')).to.be.true;\n });\n it('should accept existing packages whose names collide with Node core module names', () => {\n expect(isValidPackageName('events')).to.be.true;\n expect(isValidPackageName('string_decoder')).to.be.true;\n expect(isValidPackageName('punycode')).to.be.true;\n expect(isValidPackageName('constants')).to.be.true;\n });\n it('should reject invalid package names', () => {\n expect(isValidPackageName('')).to.be.false;\n expect(isValidPackageName('.start-with-period')).to.be.false;\n expect(isValidPackageName('_start-with-underscore')).to.be.false;\n expect(isValidPackageName('name with spaces')).to.be.false;\n expect(isValidPackageName('scope/name')).to.be.false;\n });\n});\n\ndescribe('extractPackageName', () => {\n it('should return the name as-is when no version is specified', () => {\n expect(extractPackageName('lodash')).to.equal('lodash');\n expect(extractPackageName('@types/node')).to.equal('@types/node');\n });\n it('should strip the version from unscoped packages', () => {\n expect(extractPackageName('lodash@4.17.21')).to.equal('lodash');\n });\n it('should strip the version from scoped packages', () => {\n expect(extractPackageName('@types/node@20.1.0')).to.equal('@types/node');\n });\n it('should keep git and https urls as-is', () => {\n expect(extractPackageName('https://example.com/foo.tgz')).to.equal('https://example.com/foo.tgz');\n expect(extractPackageName('git+https://example.com/foo.git')).to.equal('git+https://example.com/foo.git');\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
package/install.cmd.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { Command, CommandOptions } from '@teambit/cli';
|
|
2
|
-
import packageNameValidate from 'validate-npm-package-name';
|
|
3
2
|
import type { WorkspaceDependencyLifecycleType } from '@teambit/dependency-resolver';
|
|
4
3
|
import type { Logger } from '@teambit/logger';
|
|
5
4
|
import chalk from 'chalk';
|
|
6
5
|
import type { Workspace } from '@teambit/workspace';
|
|
7
6
|
import { OutsideWorkspaceError } from '@teambit/workspace';
|
|
8
7
|
import type { InstallMain, WorkspaceInstallOptions } from './install.main.runtime';
|
|
8
|
+
import { extractPackageName, isValidPackageName } from './package-name-utils';
|
|
9
9
|
|
|
10
10
|
type InstallCmdOptions = {
|
|
11
11
|
type: WorkspaceDependencyLifecycleType;
|
|
@@ -106,7 +106,7 @@ automatically imports components, compiles components, links to node_modules, an
|
|
|
106
106
|
const validPackages = await Promise.all(
|
|
107
107
|
packages.map(async (pkg) => {
|
|
108
108
|
const pkgName = extractPackageName(pkg);
|
|
109
|
-
if (
|
|
109
|
+
if (isValidPackageName(pkgName)) {
|
|
110
110
|
return pkg;
|
|
111
111
|
}
|
|
112
112
|
// if this is a component-id, find the package name and use it instead.
|
|
@@ -222,29 +222,3 @@ export function getAnotherInstallRequiredOutput(recurringInstall = false, oldNon
|
|
|
222
222
|
const msg = `${firstPart}${suggestRecurringInstall}\n${envsStr}\n${docsLink}`;
|
|
223
223
|
return chalk.yellow(msg);
|
|
224
224
|
}
|
|
225
|
-
|
|
226
|
-
function extractPackageName(packageString: string): string {
|
|
227
|
-
if (!packageString) return '';
|
|
228
|
-
|
|
229
|
-
// Handle https and git protocols. We don't allow "file" protocol here. It won't work for the consumer.
|
|
230
|
-
const allowedPrefixes = ['https://', 'git:', 'git+ssh://', 'git+https://'];
|
|
231
|
-
if (allowedPrefixes.some((prefix) => packageString.startsWith(prefix))) {
|
|
232
|
-
return packageString;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// If it's a scoped package
|
|
236
|
-
if (packageString.startsWith('@')) {
|
|
237
|
-
// Find the second '@' (first is for scope, second is for version/tag)
|
|
238
|
-
const atIndex = packageString.indexOf('@', 1);
|
|
239
|
-
if (atIndex === -1) return packageString;
|
|
240
|
-
const possibleVersion = packageString.slice(atIndex + 1);
|
|
241
|
-
// If the part after the second '@' contains a slash, it's not a version/tag
|
|
242
|
-
if (possibleVersion.includes('/')) return packageString;
|
|
243
|
-
return packageString.slice(0, atIndex);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// For unscoped packages, split at the last '@'
|
|
247
|
-
const lastAtIndex = packageString.lastIndexOf('@');
|
|
248
|
-
if (lastAtIndex <= 0) return packageString;
|
|
249
|
-
return packageString.slice(0, lastAtIndex);
|
|
250
|
-
}
|
package/package.json
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/install",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1085",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/workspace/install",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.workspace",
|
|
8
8
|
"name": "install",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.1085"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"chalk": "4.1.2",
|
|
13
|
-
"validate-npm-package-name": "6.0.0",
|
|
14
13
|
"@pnpm/types": "1001.3.0",
|
|
15
14
|
"fs-extra": "10.0.0",
|
|
16
15
|
"lodash": "4.17.21",
|
|
@@ -19,6 +18,7 @@
|
|
|
19
18
|
"p-map-series": "2.1.0",
|
|
20
19
|
"semver": "7.7.1",
|
|
21
20
|
"yesno": "0.4.0",
|
|
21
|
+
"validate-npm-package-name": "6.0.0",
|
|
22
22
|
"@pnpm/colorize-semver-diff": "1.0.1",
|
|
23
23
|
"@pnpm/semver-diff": "1.1.0",
|
|
24
24
|
"enquirer": "2.4.1",
|
|
@@ -38,21 +38,21 @@
|
|
|
38
38
|
"@teambit/workspace.root-components": "1.0.1",
|
|
39
39
|
"@teambit/bit-error": "0.0.404",
|
|
40
40
|
"@teambit/toolbox.time.time-format": "0.0.502",
|
|
41
|
-
"@teambit/dependency-resolver": "1.0.
|
|
42
|
-
"@teambit/workspace": "1.0.
|
|
43
|
-
"@teambit/application": "1.0.
|
|
44
|
-
"@teambit/aspect-loader": "1.0.
|
|
45
|
-
"@teambit/bundler": "1.0.
|
|
46
|
-
"@teambit/compiler": "1.0.
|
|
47
|
-
"@teambit/component": "1.0.
|
|
48
|
-
"@teambit/envs": "1.0.
|
|
49
|
-
"@teambit/generator": "1.0.
|
|
50
|
-
"@teambit/host-initializer": "0.0.
|
|
51
|
-
"@teambit/ipc-events": "1.0.
|
|
52
|
-
"@teambit/issues": "1.0.
|
|
53
|
-
"@teambit/objects": "0.0.
|
|
54
|
-
"@teambit/ui": "1.0.
|
|
55
|
-
"@teambit/workspace-config-files": "1.0.
|
|
41
|
+
"@teambit/dependency-resolver": "1.0.1085",
|
|
42
|
+
"@teambit/workspace": "1.0.1085",
|
|
43
|
+
"@teambit/application": "1.0.1085",
|
|
44
|
+
"@teambit/aspect-loader": "1.0.1085",
|
|
45
|
+
"@teambit/bundler": "1.0.1085",
|
|
46
|
+
"@teambit/compiler": "1.0.1085",
|
|
47
|
+
"@teambit/component": "1.0.1085",
|
|
48
|
+
"@teambit/envs": "1.0.1085",
|
|
49
|
+
"@teambit/generator": "1.0.1086",
|
|
50
|
+
"@teambit/host-initializer": "0.0.798",
|
|
51
|
+
"@teambit/ipc-events": "1.0.1085",
|
|
52
|
+
"@teambit/issues": "1.0.1085",
|
|
53
|
+
"@teambit/objects": "0.0.592",
|
|
54
|
+
"@teambit/ui": "1.0.1085",
|
|
55
|
+
"@teambit/workspace-config-files": "1.0.1085"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/fs-extra": "9.0.7",
|
|
File without changes
|