diff --git a/components/modules/component-package-name/index.ts b/components/modules/component-package-name/index.ts index 0d210131a8ac..f09b8505256d 100644 --- a/components/modules/component-package-name/index.ts +++ b/components/modules/component-package-name/index.ts @@ -1,3 +1,4 @@ export { componentIdToPackageName } from './component-id-to-package-name'; export { getNodeModulesPathOfComponent } from './component-node-modules-path'; export { resolveComponentIdFromPackageName, isLikelyPackageName } from './package-name-to-component-id'; +export type { PackageManifestFetcher } from './package-name-to-component-id'; diff --git a/components/modules/component-package-name/package-name-to-component-id.ts b/components/modules/component-package-name/package-name-to-component-id.ts index 7c7ae71226fd..28c523987141 100644 --- a/components/modules/component-package-name/package-name-to-component-id.ts +++ b/components/modules/component-package-name/package-name-to-component-id.ts @@ -2,6 +2,8 @@ import type { ComponentIdObj } from '@teambit/component-id'; import { ComponentID } from '@teambit/component-id'; import { BitError } from '@teambit/bit-error'; +export type PackageManifestFetcher = { fetchFullPackageManifest: (packageName: string) => Promise }; + /** * Utility function to check if a string looks like a package name vs component ID * @param id - The string to check @@ -23,7 +25,7 @@ export function isLikelyPackageName(id: string): boolean { */ export async function resolveComponentIdFromPackageName( packageName: string, - dependencyResolver: { fetchFullPackageManifest: (name: string) => Promise } + dependencyResolver: PackageManifestFetcher ): Promise { if (!packageName.startsWith('@')) { throw new BitError( diff --git a/scopes/component/component/aspect-definition.ts b/scopes/component/component/aspect-definition.ts new file mode 100644 index 000000000000..4fe22166dec6 --- /dev/null +++ b/scopes/component/component/aspect-definition.ts @@ -0,0 +1,51 @@ +import type { Component } from './component'; + +export type AspectDefinitionProps = { + id?: string; + component?: Component; + aspectPath: string; + runtimePath: string | null; + aspectFilePath: string | null; + local?: boolean; +}; + +export class AspectDefinition { + constructor( + /** + * path to the root directory of the aspect module. + */ + readonly aspectPath: string, + + /** + * path to the aspect file (.aspect). + */ + readonly aspectFilePath: string | null, + + /** + * path to the runtime entry + */ + readonly runtimePath: string | null, + /** + * aspect component + */ + readonly component?: Component, + /** + * id of the component (used instead of component in the case of core aspect) + */ + readonly id?: string, + /** + * aspect defined using 'file://' protocol + */ + readonly local?: boolean + ) {} + + get getId() { + if (this.component) return this.component.id.toString(); + if (this.id) return this.id; + return null; + } + + static from({ component, aspectPath, aspectFilePath, runtimePath, id, local }: AspectDefinitionProps) { + return new AspectDefinition(aspectPath, aspectFilePath, runtimePath, component, id, local); + } +} diff --git a/scopes/component/component/component-dependencies.ts b/scopes/component/component/component-dependencies.ts new file mode 100644 index 000000000000..0e483159505a --- /dev/null +++ b/scopes/component/component/component-dependencies.ts @@ -0,0 +1,34 @@ +/** + * a dependency of a component, as the dependency-resolver resolves it (its `Dependency`). + * defined here so the component aspect doesn't depend on the dependency-resolver aspect. + */ +export type ComponentDependencyEntry = { + id: string; + version: string; + type: string; + lifecycle: string; + source?: string; + hidden?: boolean; + optional?: boolean; + getPackageName?: () => string; +}; + +export type ComponentDependenciesManifest = { + dependencies: Record; + optionalDependencies: Record; + devDependencies: Record; + peerDependencies: Record; + peerDependenciesMeta?: Record; +}; + +/** + * the dependencies of a component, as the dependency-resolver resolves them (its `DependencyList`). + * defined here so the component aspect doesn't depend on the dependency-resolver aspect. + */ +export interface ComponentDependencyList { + readonly dependencies: ComponentDependencyEntry[]; + forEach(predicate: (dep: ComponentDependencyEntry, index?: number) => void): void; + filter(predicate: (dep: ComponentDependencyEntry, index?: number) => boolean): ComponentDependencyList; + map(predicate: (dep: ComponentDependencyEntry, index?: number) => any): any[]; + toDependenciesManifest(): ComponentDependenciesManifest; +} diff --git a/scopes/component/component/component-factory.ts b/scopes/component/component/component-factory.ts index 3bc604fe249e..617aebbb4cb0 100644 --- a/scopes/component/component/component-factory.ts +++ b/scopes/component/component/component-factory.ts @@ -3,8 +3,8 @@ import type { BitId } from '@teambit/legacy-bit-id'; import type { ComponentID } from '@teambit/component-id'; import type { ConsumerComponent } from '@teambit/legacy.consumer-component'; import type { ComponentLog } from '@teambit/objects'; -import type { AspectDefinition } from '@teambit/aspect-loader'; -import type { DependencyList } from '@teambit/dependency-resolver'; +import type { AspectDefinition } from './aspect-definition'; +import type { ComponentDependencyList } from './component-dependencies'; import type { Component, InvalidComponent } from './component'; import type { State } from './state'; import type { Snap } from './snap'; @@ -145,7 +145,7 @@ export interface ComponentFactory { getLogs(id: ComponentID, shortHash?: boolean, startsFrom?: string): Promise; - getDependencies(component: Component): DependencyList; + getDependencies(component: Component): ComponentDependencyList; componentPackageName(component: Component): string; diff --git a/scopes/component/component/component.main.runtime.ts b/scopes/component/component/component.main.runtime.ts index 631b5ad3a2bb..9d4ac4f9fb91 100644 --- a/scopes/component/component/component.main.runtime.ts +++ b/scopes/component/component/component.main.runtime.ts @@ -11,8 +11,8 @@ import type { ComponentID } from '@teambit/component-id'; import { flatten, orderBy } from 'lodash'; import type { LoggerMain } from '@teambit/logger'; import { LoggerAspect } from '@teambit/logger'; -import type { DependencyResolverMain } from '@teambit/dependency-resolver'; import type { ExtensionDataList } from '@teambit/legacy.extension-data'; +import type { PackageManifestFetcher } from '@teambit/pkg.modules.component-package-name'; import type { ComponentFactory } from './component-factory'; import { ComponentAspect } from './component.aspect'; import { componentSchema } from './component.graphql'; @@ -38,7 +38,7 @@ export type ComponentHostSlot = SlotRegistry; export type ShowFragmentSlot = SlotRegistry; export class ComponentMain { - dependencyResolver: DependencyResolverMain; + private packageManifestFetcher?: PackageManifestFetcher; constructor( /** * slot for component hosts to register. @@ -149,6 +149,18 @@ export class ComponentMain { return !!this.hostSlot.get(name); } + /** + * lets the commands of this aspect fetch package manifests, e.g. `bit show `. + */ + registerPackageManifestFetcher(packageManifestFetcher: PackageManifestFetcher) { + this.packageManifestFetcher = packageManifestFetcher; + } + + getPackageManifestFetcher(): PackageManifestFetcher { + if (!this.packageManifestFetcher) throw new Error('no package-manifest fetcher was registered'); + return this.packageManifestFetcher; + } + /** * register a show fragment to display further information in the `bit show` command. */ diff --git a/scopes/component/component/component.ts b/scopes/component/component/component.ts index 38a6bd4d4cb4..b81dcffde87c 100644 --- a/scopes/component/component/component.ts +++ b/scopes/component/component/component.ts @@ -5,9 +5,9 @@ import type { ComponentID } from '@teambit/component-id'; import { BitError } from '@teambit/bit-error'; import type { BuildStatus } from '@teambit/legacy.constants'; import type { ComponentLog } from '@teambit/objects'; -import type { DependencyList } from '@teambit/dependency-resolver'; import { slice } from 'lodash'; import type { ComponentFactory } from './component-factory'; +import type { ComponentDependencyList } from './component-dependencies'; import type ComponentFS from './component-fs'; // import { NothingToSnap } from './exceptions'; import type { Config as ComponentConfig } from './config'; @@ -150,7 +150,10 @@ export class Component implements IComponent { return filteredLogs; } - getDependencies(): DependencyList { + /** + * @deprecated use `DependencyResolverMain.getDependencies(component)`, which returns the full `DependencyList`. + */ + getDependencies(): ComponentDependencyList { return this.factory.getDependencies(this); } diff --git a/scopes/component/component/esm.mjs b/scopes/component/component/esm.mjs index 0edda7084f61..585a34d57275 100644 --- a/scopes/component/component/esm.mjs +++ b/scopes/component/component/esm.mjs @@ -7,6 +7,7 @@ export const Component = cjsModule.Component; export const ComponentID = cjsModule.ComponentID; export const ComponentAspect = cjsModule.ComponentAspect; export const AspectEntry = cjsModule.AspectEntry; +export const AspectDefinition = cjsModule.AspectDefinition; export const Snap = cjsModule.Snap; export const Tag = cjsModule.Tag; export const State = cjsModule.State; diff --git a/scopes/component/component/index.ts b/scopes/component/component/index.ts index 239b398a430d..5049e44287f7 100644 --- a/scopes/component/component/index.ts +++ b/scopes/component/component/index.ts @@ -31,6 +31,7 @@ export type { Hash } from './hash'; export { TagMap } from './tag-map'; export { ComponentMap } from './component-map'; export type { ComponentMain } from './component.main.runtime'; +export type { ComponentDependencyList } from './component-dependencies'; export type { ComponentUI } from './component.ui.runtime'; export type { Section } from './section'; export { ComponentContext, ComponentDescriptorContext, useComponentDescriptor } from './ui/context/component-context'; @@ -57,3 +58,5 @@ export { useComponent, useIdFromLocation, useComponentLogs, ComponentLogsResult, // export { AspectEntry } from './aspect-entry'; export { ComponentAspect }; export default ComponentAspect; +export { AspectDefinition } from './aspect-definition'; +export type { AspectDefinitionProps } from './aspect-definition'; diff --git a/scopes/component/component/show/show.cmd.ts b/scopes/component/component/show/show.cmd.ts index 99c000ad6fdb..e0d3f42efdbe 100644 --- a/scopes/component/component/show/show.cmd.ts +++ b/scopes/component/component/show/show.cmd.ts @@ -64,7 +64,7 @@ to see the legacy bit show, please use "--legacy" flag`); private async resolveIdWithoutWorkspace(id: string): Promise { if (isLikelyPackageName(id)) { try { - const compId = await resolveComponentIdFromPackageName(id, this.component.dependencyResolver); + const compId = await resolveComponentIdFromPackageName(id, this.component.getPackageManifestFetcher()); return compId.toString(); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); diff --git a/scopes/dependencies/dependency-resolver/dependencies/dependency.ts b/scopes/dependencies/dependency-resolver/dependencies/dependency.ts index 42e7381d1332..8600ec678cb1 100644 --- a/scopes/dependencies/dependency-resolver/dependencies/dependency.ts +++ b/scopes/dependencies/dependency-resolver/dependencies/dependency.ts @@ -1,3 +1,4 @@ +import type { SemverVersion } from '@teambit/envs'; import type { DependencySource } from '../policy/variant-policy/variant-policy'; export type WorkspaceDependencyLifecycleType = 'runtime' | 'peer'; @@ -16,10 +17,7 @@ export interface SerializedDependency { packageName?: string; } -/** - * Allowed values are valid semver values and the "-" sign. - */ -export type SemverVersion = string; +export type { SemverVersion }; export type PackageName = string; export type DependencyManifest = { diff --git a/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts b/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts index f08517e02f89..d94b00455326 100644 --- a/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts +++ b/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts @@ -2015,7 +2015,7 @@ as an alternative, you can use "+" to keep the same version installed in the wor new DevDependenciesFragment(dependencyResolver), new PeerDependenciesFragment(dependencyResolver), ]); - componentAspect.dependencyResolver = dependencyResolver; + componentAspect.registerPackageManifestFetcher(dependencyResolver); // TODO: solve this generics issue and remove the ts-ignore // @ts-ignore dependencyResolver.registerDependencyFactories([new ComponentDependencyFactory(componentAspect)]); diff --git a/scopes/dependencies/dependency-resolver/policy/env-policy/env-policy.ts b/scopes/dependencies/dependency-resolver/policy/env-policy/env-policy.ts index 4bf047e775a6..4f682e5cd2d5 100644 --- a/scopes/dependencies/dependency-resolver/policy/env-policy/env-policy.ts +++ b/scopes/dependencies/dependency-resolver/policy/env-policy/env-policy.ts @@ -6,54 +6,23 @@ import type { } from '../variant-policy'; import { createVariantPolicyEntry, VariantPolicy } from '../variant-policy'; import type { DependencyLifecycleType } from '../../dependencies'; +import type { + EnvJsoncPolicyEntry, + EnvJsoncPolicyPeerEntry, + VersionKeyName, + EnvJsoncPolicyConfigKey, + EnvPolicyConfigObject, +} from '@teambit/envs'; -export type EnvJsoncPolicyEntry = { - name: string; - version: string; - /** - * hide the dependency from the component's package.json / dependencies list - */ - hidden?: boolean; - /** - * force add to component dependencies even if it's not used by the component. - */ - force?: boolean; - optional?: boolean; -}; - -export type EnvJsoncPolicyPeerEntry = EnvJsoncPolicyEntry & { - supportedRange: string; - /** - * When true, this peer dependency will be resolved as a single version at the workspace root, - * even if different envs specify different versions. Useful for @types packages and workspace-level - * tools (eslint, prettier) that must resolve from the workspace root. - * When false (default), conflicts are resolved per-component via env roots. - */ - workspaceSingleton?: boolean; - /** - * When true, generates a pnpm override for this peer using its version, - * forcing all transitive dependencies to use the same version. - * Useful to prevent old versions from being pulled by published packages. - */ - override?: boolean; -}; - -export type VersionKeyName = 'version' | 'supportedRange'; - -export type EnvJsoncPolicyConfigKey = 'peers' | 'dev' | 'runtime'; - -export type EnvPolicyEnvJsoncConfigObject = { - peers?: EnvJsoncPolicyPeerEntry[]; - dev?: EnvJsoncPolicyEntry[]; - runtime?: EnvJsoncPolicyEntry[]; -}; - -/** - * Config that is used before the new env.jsonc format was introduced. - */ -export type EnvPolicyLegacyConfigObject = Pick & VariantPolicyConfigObject; - -export type EnvPolicyConfigObject = EnvPolicyEnvJsoncConfigObject | EnvPolicyLegacyConfigObject; +export type { + EnvJsoncPolicyEntry, + EnvJsoncPolicyPeerEntry, + VersionKeyName, + EnvJsoncPolicyConfigKey, + EnvPolicyEnvJsoncConfigObject, + EnvPolicyLegacyConfigObject, + EnvPolicyConfigObject, +} from '@teambit/envs'; export class EnvPolicy extends VariantPolicy { constructor( diff --git a/scopes/dependencies/dependency-resolver/policy/policy.ts b/scopes/dependencies/dependency-resolver/policy/policy.ts index 622b5bfb79d7..cdb5640acd40 100644 --- a/scopes/dependencies/dependency-resolver/policy/policy.ts +++ b/scopes/dependencies/dependency-resolver/policy/policy.ts @@ -1,13 +1,11 @@ import type { DependencyLifecycleType } from '../dependencies'; +import type { SemverVersion } from '@teambit/envs'; + +export type { SemverVersion, PolicyConfigKeys, PolicyConfigKeysNames } from '@teambit/envs'; // TODO: add DetailedDependencyPolicy once support the force prop // export type DependencyPolicy = SemverVersionRule | DetailedDependencyPolicy; -/** - * Allowed values are valid semver values - */ -export type SemverVersion = string; - export type GitUrlVersion = string; export type FileSystemPath = string; @@ -23,15 +21,6 @@ export type PolicySemver = SemverVersion | RemoveDepSign; */ export type PolicyVersion = PolicySemver | GitUrlVersion | FileSystemPath; -// TODO: think if it might need to be in another place and just reference there -export type PolicyConfigKeys = { - dependencies: 'dependencies'; - devDependencies: 'devDependencies'; - peerDependencies: 'peerDependencies'; -}; - -export type PolicyConfigKeysNames = keyof PolicyConfigKeys; - export interface Policy { toConfigObject(): T; } diff --git a/scopes/dependencies/dependency-resolver/policy/variant-policy/variant-policy.ts b/scopes/dependencies/dependency-resolver/policy/variant-policy/variant-policy.ts index 716c93dc3f5e..8ec4f0dfbec0 100644 --- a/scopes/dependencies/dependency-resolver/policy/variant-policy/variant-policy.ts +++ b/scopes/dependencies/dependency-resolver/policy/variant-policy/variant-policy.ts @@ -2,48 +2,27 @@ import { sha1 } from '@teambit/toolbox.crypto.sha1'; import { compact, sortBy, uniqWith } from 'lodash'; import { snapToSemver } from '@teambit/component-package-version'; import type { DependenciesOverridesData } from '@teambit/legacy.consumer-config'; -import type { Policy, PolicyConfigKeys, PolicyConfigKeysNames, PolicyEntry, SemverVersion } from '../policy'; +import type { + VariantPolicyConfigObject, + VariantPolicyConfigEntryValue, + VariantPolicyEntryVersion, + VariantPolicyEntryValue, + VariantPolicyLifecycleConfigEntryObject, +} from '@teambit/envs'; +import type { Policy, PolicyConfigKeysNames, PolicyEntry } from '../policy'; import type { DependencyLifecycleType } from '../../dependencies'; import { KEY_NAME_BY_LIFECYCLE_TYPE, LIFECYCLE_TYPE_BY_KEY_NAME } from '../../dependencies'; -export type VariantPolicyConfigObject = Partial>; - -type VariantPolicyLifecycleConfigObject = { - [dependencyId: string]: VariantPolicyConfigEntryValue; -}; - -type VariantPolicyLifecycleConfigEntryObject = { - name: string; - version: string; - /** - * hide the dependency from the component's package.json / dependencies list - */ - hidden?: boolean; - /** - * force add to component dependencies even if it's not used by the component. - */ - force?: boolean; - optional?: boolean; -}; +export type { + VariantPolicyConfigObject, + VariantPolicyConfigEntryValue, + VariantPolicyEntryVersion, + VariantPolicyEntryValue, +} from '@teambit/envs'; export type VariantPolicyConfigArr = Partial>; type VariantPolicyConfigObj = Partial>>; -export type VariantPolicyConfigEntryValue = VariantPolicyEntryValue | VariantPolicyEntryVersion; - -/** - * Allowed values are valid semver values, git urls, fs path. - */ -export type VariantPolicyEntryVersion = SemverVersion; - -export type VariantPolicyEntryValue = { - version: VariantPolicyEntryVersion; - resolveFromEnv?: boolean; - optional?: boolean; - workspaceSingleton?: boolean; - override?: boolean; -}; - export type DependencySource = 'auto' | 'env' | 'env-own' | 'slots' | 'config'; export type VariantPolicyEntry = PolicyEntry & { diff --git a/scopes/envs/envs/env-jsonc.detector.ts b/scopes/envs/envs/env-jsonc.detector.ts index 706e0c101966..218cce703b02 100644 --- a/scopes/envs/envs/env-jsonc.detector.ts +++ b/scopes/envs/envs/env-jsonc.detector.ts @@ -1,8 +1,10 @@ import { parse } from 'comment-json'; -import type { DependencyDetector, FileContext } from '@teambit/dependency-resolver'; -export class EnvJsoncDetector implements DependencyDetector { - isSupported(context: FileContext): boolean { +/** + * a dependency-resolver detector (registered by dependency-resolver) that reports the env an env.jsonc extends. + */ +export class EnvJsoncDetector { + isSupported(context: { filename: string }): boolean { return context.filename.endsWith('env.jsonc'); } diff --git a/scopes/envs/envs/env-policy-config.ts b/scopes/envs/envs/env-policy-config.ts new file mode 100644 index 000000000000..25f12a3100f6 --- /dev/null +++ b/scopes/envs/envs/env-policy-config.ts @@ -0,0 +1,85 @@ +// the shape of the dependency policies in the config files (workspace.jsonc variants, env.jsonc). + +/** + * Allowed values are valid semver values and the "-" sign. + */ +export type SemverVersion = string; + +export type PolicyConfigKeys = { + dependencies: 'dependencies'; + devDependencies: 'devDependencies'; + peerDependencies: 'peerDependencies'; +}; + +export type PolicyConfigKeysNames = keyof PolicyConfigKeys; + +export type VariantPolicyConfigObject = Partial>; + +type VariantPolicyLifecycleConfigObject = { + [dependencyId: string]: VariantPolicyConfigEntryValue; +}; + +export type VariantPolicyLifecycleConfigEntryObject = { + name: string; + version: string; + /** + * hide the dependency from the component's package.json / dependencies list + */ + hidden?: boolean; + /** + * force add to component dependencies even if it's not used by the component. + */ + force?: boolean; + optional?: boolean; +}; + +export type VariantPolicyConfigEntryValue = VariantPolicyEntryValue | VariantPolicyEntryVersion; + +/** + * Allowed values are valid semver values, git urls, fs path. + */ +export type VariantPolicyEntryVersion = SemverVersion; + +export type VariantPolicyEntryValue = { + version: VariantPolicyEntryVersion; + resolveFromEnv?: boolean; + optional?: boolean; + workspaceSingleton?: boolean; + override?: boolean; +}; + +export type EnvJsoncPolicyEntry = VariantPolicyLifecycleConfigEntryObject; + +export type EnvJsoncPolicyPeerEntry = EnvJsoncPolicyEntry & { + supportedRange: string; + /** + * When true, this peer dependency will be resolved as a single version at the workspace root, + * even if different envs specify different versions. Useful for @types packages and workspace-level + * tools (eslint, prettier) that must resolve from the workspace root. + * When false (default), conflicts are resolved per-component via env roots. + */ + workspaceSingleton?: boolean; + /** + * When true, generates a pnpm override for this peer using its version, + * forcing all transitive dependencies to use the same version. + * Useful to prevent old versions from being pulled by published packages. + */ + override?: boolean; +}; + +export type VersionKeyName = 'version' | 'supportedRange'; + +export type EnvJsoncPolicyConfigKey = 'peers' | 'dev' | 'runtime'; + +export type EnvPolicyEnvJsoncConfigObject = { + peers?: EnvJsoncPolicyPeerEntry[]; + dev?: EnvJsoncPolicyEntry[]; + runtime?: EnvJsoncPolicyEntry[]; +}; + +/** + * Config that is used before the new env.jsonc format was introduced. + */ +export type EnvPolicyLegacyConfigObject = Pick & VariantPolicyConfigObject; + +export type EnvPolicyConfigObject = EnvPolicyEnvJsoncConfigObject | EnvPolicyLegacyConfigObject; diff --git a/scopes/envs/envs/env.plugin.ts b/scopes/envs/envs/env.plugin.ts index 5a38dbd43e49..f6b36cb49719 100644 --- a/scopes/envs/envs/env.plugin.ts +++ b/scopes/envs/envs/env.plugin.ts @@ -1,4 +1,3 @@ -import type { PluginDefinition } from '@teambit/aspect-loader'; import type { Harmony } from '@teambit/harmony'; import { ComponentID } from '@teambit/component'; import type { WorkerMain } from '@teambit/worker'; @@ -15,7 +14,7 @@ import type { EnvsRegistry, ServicesRegistry } from './environments.main.runtime */ export const BIT_ENV_PATTERN = '*.bit-env.*'; -export class EnvPlugin implements PluginDefinition { +export class EnvPlugin { constructor( private envSlot: EnvsRegistry, private servicesRegistry: ServicesRegistry, diff --git a/scopes/envs/envs/environments.main.runtime.ts b/scopes/envs/envs/environments.main.runtime.ts index c297ec572098..d2d8cae608e7 100644 --- a/scopes/envs/envs/environments.main.runtime.ts +++ b/scopes/envs/envs/environments.main.runtime.ts @@ -5,9 +5,9 @@ import type { SourceFile } from '@teambit/component.sources'; import type { CLIMain } from '@teambit/cli'; import { MainRuntime } from '@teambit/harmony.modules.runtimes'; import { CLIAspect } from '@teambit/cli'; -import type { Component, ComponentMain, RegularCompDescriptor } from '@teambit/component'; +import type { AspectDefinition, Component, ComponentMain, RegularCompDescriptor } from '@teambit/component'; import { ComponentAspect } from '@teambit/component'; -import type { EnvPolicyConfigObject } from '@teambit/dependency-resolver'; +import type { EnvPolicyConfigObject } from './env-policy-config'; import type { GraphqlMain } from '@teambit/graphql'; import { GraphqlAspect } from '@teambit/graphql'; import type { IssuesMain } from '@teambit/issues'; @@ -18,7 +18,6 @@ import type { Harmony, SlotRegistry } from '@teambit/harmony'; import { Slot } from '@teambit/harmony'; import type { Logger, LoggerMain } from '@teambit/logger'; import { LoggerAspect } from '@teambit/logger'; -import type { AspectDefinition } from '@teambit/aspect-loader'; import type { ExtensionDataList, ExtensionDataEntry } from '@teambit/legacy.extension-data'; import { BitError } from '@teambit/bit-error'; import { findDuplications } from '@teambit/toolbox.array.duplications-finder'; diff --git a/scopes/envs/envs/index.ts b/scopes/envs/envs/index.ts index 35d82c54e5df..763bc9b17948 100644 --- a/scopes/envs/envs/index.ts +++ b/scopes/envs/envs/index.ts @@ -29,3 +29,20 @@ export { EnvsExecutionResult } from './runtime/envs-execution-result'; export type { EnvServiceList } from './env-service-list'; export { EnvDefinition } from './env-definition'; export default EnvsAspect; +export type { + SemverVersion, + PolicyConfigKeys, + PolicyConfigKeysNames, + VariantPolicyConfigObject, + VariantPolicyLifecycleConfigEntryObject, + VariantPolicyConfigEntryValue, + VariantPolicyEntryVersion, + VariantPolicyEntryValue, + EnvJsoncPolicyEntry, + EnvJsoncPolicyPeerEntry, + VersionKeyName, + EnvJsoncPolicyConfigKey, + EnvPolicyEnvJsoncConfigObject, + EnvPolicyLegacyConfigObject, + EnvPolicyConfigObject, +} from './env-policy-config'; diff --git a/scopes/envs/envs/runtime/env-runtime.ts b/scopes/envs/envs/runtime/env-runtime.ts index f49c501f0666..a4d34711ecfb 100644 --- a/scopes/envs/envs/runtime/env-runtime.ts +++ b/scopes/envs/envs/runtime/env-runtime.ts @@ -1,5 +1,4 @@ -import type { AspectDefinition } from '@teambit/aspect-loader'; -import type { Component } from '@teambit/component'; +import type { AspectDefinition, Component } from '@teambit/component'; import type { Environment } from '../environment'; diff --git a/scopes/harmony/api-server/api-for-ide.ts b/scopes/harmony/api-server/api-for-ide.ts index 347eb6894cb3..8b0ff6ee8bf8 100644 --- a/scopes/harmony/api-server/api-for-ide.ts +++ b/scopes/harmony/api-server/api-for-ide.ts @@ -750,7 +750,7 @@ export class APIForIDE { }) ); - const deps = comp.getDependencies(); + const deps = this.workspace.getDependencies(comp); showResults.dependencies = deps.map((dep) => { const pkg = dep.getPackageName?.() || dep.id; const pkgWithVer = `${pkg}@${dep.version}`; diff --git a/scopes/harmony/aspect-loader/aspect-definition.ts b/scopes/harmony/aspect-loader/aspect-definition.ts index 8253095e5c87..9b1110c8b2d5 100644 --- a/scopes/harmony/aspect-loader/aspect-definition.ts +++ b/scopes/harmony/aspect-loader/aspect-definition.ts @@ -1,51 +1,2 @@ -import type { Component } from '@teambit/component'; - -export type AspectDefinitionProps = { - id?: string; - component?: Component; - aspectPath: string; - runtimePath: string | null; - aspectFilePath: string | null; - local?: boolean; -}; - -export class AspectDefinition { - constructor( - /** - * path to the root directory of the aspect module. - */ - readonly aspectPath: string, - - /** - * path to the aspect file (.aspect). - */ - readonly aspectFilePath: string | null, - - /** - * path to the runtime entry - */ - readonly runtimePath: string | null, - /** - * aspect component - */ - readonly component?: Component, - /** - * id of the component (used instead of component in the case of core aspect) - */ - readonly id?: string, - /** - * aspect defined using 'file://' protocol - */ - readonly local?: boolean - ) {} - - get getId() { - if (this.component) return this.component.id.toString(); - if (this.id) return this.id; - return null; - } - - static from({ component, aspectPath, aspectFilePath, runtimePath, id, local }: AspectDefinitionProps) { - return new AspectDefinition(aspectPath, aspectFilePath, runtimePath, component, id, local); - } -} +export { AspectDefinition } from '@teambit/component'; +export type { AspectDefinitionProps } from '@teambit/component'; diff --git a/scripts/circular-deps-check/cycles-baseline.json b/scripts/circular-deps-check/cycles-baseline.json index a41e55004b96..fc072ffc8d9b 100644 --- a/scripts/circular-deps-check/cycles-baseline.json +++ b/scripts/circular-deps-check/cycles-baseline.json @@ -2,11 +2,10 @@ "summary": { "groups": [ 27, - 16, - 5 + 16 ], - "components": 48, - "edges": 168 + "components": 43, + "edges": 156 }, "groups": [ [ @@ -55,13 +54,6 @@ "teambit.scope/remote-actions", "teambit.scope/remotes", "teambit.semantics/doc-parser" - ], - [ - "teambit.component/component", - "teambit.component/issues", - "teambit.dependencies/dependency-resolver", - "teambit.envs/envs", - "teambit.harmony/aspect-loader" ] ], "edges": [ @@ -74,8 +66,6 @@ "teambit.compilation/compiler -> teambit.ui-foundation/ui", "teambit.compilation/compiler -> teambit.workspace/watcher", "teambit.compilation/compiler -> teambit.workspace/workspace", - "teambit.component/component -> teambit.dependencies/dependency-resolver", - "teambit.component/component -> teambit.harmony/aspect-loader", "teambit.component/component-compare -> teambit.component/dev-files", "teambit.component/component-compare -> teambit.pipelines/builder", "teambit.component/component-compare -> teambit.scope/importer", @@ -92,7 +82,6 @@ "teambit.component/dev-files -> teambit.workspace/workspace", "teambit.component/graph -> teambit.component/component-compare", "teambit.component/isolator -> teambit.component/graph", - "teambit.component/issues -> teambit.component/component", "teambit.component/lister -> teambit.workspace/workspace", "teambit.component/mover -> teambit.workspace/workspace", "teambit.component/new-component-helper -> teambit.component/tracker", @@ -103,13 +92,6 @@ "teambit.component/sources -> teambit.legacy/scope", "teambit.component/sources -> teambit.pkg/modules/component-package-name", "teambit.component/tracker -> teambit.workspace/workspace", - "teambit.dependencies/dependency-resolver -> teambit.component/component", - "teambit.dependencies/dependency-resolver -> teambit.envs/envs", - "teambit.dependencies/dependency-resolver -> teambit.harmony/aspect-loader", - "teambit.envs/envs -> teambit.component/component", - "teambit.envs/envs -> teambit.component/issues", - "teambit.envs/envs -> teambit.dependencies/dependency-resolver", - "teambit.envs/envs -> teambit.harmony/aspect-loader", "teambit.explorer/command-bar -> teambit.ui-foundation/ui", "teambit.generator/generator -> teambit.component/new-component-helper", "teambit.generator/generator -> teambit.component/tracker", @@ -123,8 +105,6 @@ "teambit.harmony/application -> teambit.scope/scope", "teambit.harmony/application -> teambit.workspace/watcher", "teambit.harmony/application -> teambit.workspace/workspace", - "teambit.harmony/aspect-loader -> teambit.component/component", - "teambit.harmony/aspect-loader -> teambit.envs/envs", "teambit.harmony/ipc-events -> teambit.scope/scope", "teambit.legacy/bit-map -> teambit.legacy/consumer-component", "teambit.legacy/bit-map -> teambit.legacy/extension-data",