@teambit/scope 0.0.617 → 0.0.625

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.
@@ -247,7 +247,7 @@ export declare class ScopeMain implements ComponentFactory {
247
247
  */
248
248
  getState(id: ComponentID, hash: string): Promise<State>;
249
249
  getSnap(id: ComponentID, hash: string): Promise<Snap>;
250
- getLogs(id: ComponentID): Promise<ComponentLog[]>;
250
+ getLogs(id: ComponentID, shortHash?: boolean): Promise<ComponentLog[]>;
251
251
  /**
252
252
  * resolve a component ID.
253
253
  * @param id component ID.
@@ -1108,8 +1108,8 @@ class ScopeMain {
1108
1108
  return this.componentLoader.getSnap(id, hash);
1109
1109
  }
1110
1110
 
1111
- async getLogs(id) {
1112
- return this.legacyScope.loadComponentLogs(id._legacy);
1111
+ async getLogs(id, shortHash = false) {
1112
+ return this.legacyScope.loadComponentLogs(id._legacy, shortHash);
1113
1113
  }
1114
1114
  /**
1115
1115
  * resolve a component ID.
@@ -1 +1 @@
1
- {"version":3,"sources":["scope.main.runtime.ts"],"names":["ScopeMain","constructor","harmony","legacyScope","componentExtension","config","tagRegistry","postPutSlot","postDeleteSlot","postExportSlot","postObjectsPersist","preFetchObjects","isolator","aspectLoader","logger","envs","componentLoader","ScopeComponentLoader","name","icon","backgroundIconColor","description","path","isLegacy","onTag","tagFn","host","getHost","legacyOnTagFunc","legacyComponents","options","reloadAspectsWithNewVersion","components","getManyByLegacy","builderDataMap","builderDataMapToLegacyOnTagResults","push","register","getUserAspectsIdsWithoutRootIds","allUserAspectIds","getUserAspects","rootIds","Object","keys","toObject","diffIds","getAspectsByPreviouslyUsedVersion","harmonyIds","aspectsIds","aspectsP","map","component","newId","resolveComponentId","id","previouslyUsedVersion","version","newIdWithPreviouslyUsedVersion","changeVersion","includes","toString","Promise","all","idsToLoad","loadAspects","getFromConsumerComponent","clearCache","objects","builderDataComponentMap","builderDataToLegacyExtension","builderData","existingBuilder","state","aspects","get","BuilderAspect","legacy","builderExtension","ExtensionDataEntry","undefined","data","toArray","_legacy","onPostPut","postPutFn","onPostDelete","postDeleteFn","registerOnPostExport","postExportFn","registerOnPreFetchObjects","preFetchObjectsFn","registerOnPostObjectsPersist","postObjectsPersistFn","fetch","ids","persist","delete","force","lanes","headers","authData","authorization","result","fns","values","metadata","auth","componentIds","ComponentID","fromString","fn","err","error","toObjectList","types","list","ObjectList","fromBitObjects","toJs","str","endsWith","replace","parseLocalAspect","localAspects","dirPaths","localAspect","nonExistsDirPaths","filter","forEach","warn","existsDirPaths","findRuntime","dirPath","runtime","files","find","loadAspectFromPath","manifests","scopeRuntime","module","require","default","loadExtensionsByManifests","throwOnError","scopeManifests","getManifestsGraphRecursively","manifest","visited","nonVisitedId","length","getNonLoadedAspects","requireAspects","depsToLoad","dependencies","_runtimes","depIds","d","loaded","notLoadedIds","isAspectLoaded","coreAspectsStringIds","getCoreAspectIds","idsWithoutCore","aspectIds","startsWith","concat","resolveMultipleComponentIds","import","reFetchUnBuiltVersion","resolveLocalAspects","dirs","dir","runtimeManifest","AspectDefinition","getResolvedAspects","skipIfExists","network","isolateComponents","c","baseDir","getAspectCapsulePath","seedersOnly","includeFromNestedHosts","installOptions","copyPeerToRuntimeOnRoot","capsules","seedersCapsules","capsule","RequireableComponent","plugins","getPlugins","has","compileIfNoDist","load","MainRuntime","aspect","getRuntimePath","mainRuntime","runtimePath","env","getEnv","compiler","getCompiler","distDir","DEFAULT_DIST_DIRNAME","distExists","compiledCode","filesystem","flatMap","file","isFileSupported","outputText","contents","outputPath","transpileFile","filePath","componentDir","compiledFile","getDistPathBySrcPath","outputFile","tryCompile","requirableAspect","requireableExtensions","erroredId","requireWithCatch","requireableAspects","requireableExtension","doRequire","code","newErr","resolvedAspectsAgain","manifestAgain","handleExtensionLoadingError","resolveUserAspects","runtimeName","userAspectsIds","getMany","aspectDefs","resolveAspects","getCapsule","Error","localPath","aspectPath","withoutLocalAspects","aspectId","fullName","userAspectsDefs","localResolved","coreAspects","getCoreAspectDefs","allDefs","uniqDefs","def","defs","getLegacyGraph","comp","legacyIds","bitId","hasScope","changeScope","legacyGraph","useCache","throwIfNotExist","legacyId","scope","withoutOwnScopeAndLocals","ComponentsIds","fromArray","consumerComponent","getRemoteComponent","includeCache","componentsIds","listIds","limit","offset","listInvalid","allModelComponents","modelComponentsToList","modelComponent","exists","fromLegacy","toBitIdWithLatestVersion","debug","JSON","stringify","hasId","componentId","opts","includeOrphaned","includeVersion","hasIdNested","idsWithoutEmpty","componentsP","getOrThrow","loadMany","ComponentNotFound","getState","hash","getSnap","getLogs","loadComponentLogs","idStr","loadModelComponentByIdStr","getIdToCheck","IdToCheck","BitId","getParsedId","byPattern","patterns","finalPatterns","pattern","targetIds","some","toStringWithoutVersion","match","getExactVersionBySemverRange","range","getModelComponent","versions","listVersions","semver","maxSatisfying","includePrerelease","resumeExport","exportId","remotes","resolveId","_legacyRemotes","isAspectComponent","loadComponentsAspect","provider","componentExt","ui","graphql","cli","express","loggerMain","configMain","tagSlot","postObjectsPersistSlot","preFetchObjectsSlot","bitConfig","cwd","createLogger","ScopeAspect","registerOnStart","hasWorkspace","getNotLoadedConfiguredExtensions","onPutHook","getAuthData","token","Http","getToken","type","DEFAULT_AUTH_TYPE","credentials","onPostExportHook","onPostObjectsPersistHook","ExportPersist","PostSign","Scope","onPostExport","Repository","onPostObjectsPersist","registerPreAddingAspectsSlot","compIds","loadedIds","compId","loadedId","PutRoute","FetchRoute","ActionRoute","DeleteRoute","registerUiRoot","ScopeUIRoot","registerHost","Slot","withType","ComponentAspect","UIAspect","GraphqlAspect","CLIAspect","IsolatorAspect","AspectLoaderAspect","ExpressAspect","LoggerAspect","EnvsAspect","ConfigAspect","httpTimeOut","addRuntime"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;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","sourcesContent":["import mapSeries from 'p-map-series';\nimport semver from 'semver';\nimport type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { TaskResultsList, BuilderData, BuilderAspect } from '@teambit/builder';\nimport { readdirSync, existsSync } from 'fs-extra';\nimport { resolve, join } from 'path';\nimport { AspectLoaderAspect, AspectDefinition } from '@teambit/aspect-loader';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport type { ComponentMain, ComponentMap } from '@teambit/component';\nimport { Component, ComponentAspect, ComponentFactory, ComponentID, Snap, State } from '@teambit/component';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport { Harmony, Slot, SlotRegistry, ExtensionManifest, Aspect } from '@teambit/harmony';\nimport { Capsule, IsolatorAspect, IsolatorMain } from '@teambit/isolator';\nimport { LoggerAspect, LoggerMain, Logger } from '@teambit/logger';\nimport { ExpressAspect, ExpressMain } from '@teambit/express';\nimport type { UiMain } from '@teambit/ui';\nimport { UIAspect } from '@teambit/ui';\nimport { RequireableComponent } from '@teambit/harmony.modules.requireable-component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport { BitIds as ComponentsIds } from '@teambit/legacy/dist/bit-id';\nimport { ModelComponent, Lane } from '@teambit/legacy/dist/scope/models';\nimport { Repository } from '@teambit/legacy/dist/scope/objects';\nimport LegacyScope, { LegacyOnTagResult, OnTagFunc, OnTagOpts } from '@teambit/legacy/dist/scope/scope';\nimport { ComponentLog } from '@teambit/legacy/dist/scope/models/model-component';\nimport { loadScopeIfExist } from '@teambit/legacy/dist/scope/scope-loader';\nimport { PersistOptions } from '@teambit/legacy/dist/scope/types';\nimport { DEFAULT_DIST_DIRNAME } from '@teambit/legacy/dist/constants';\nimport LegacyGraph from '@teambit/legacy/dist/scope/graph/graph';\nimport { ExportPersist, PostSign } from '@teambit/legacy/dist/scope/actions';\nimport { getScopeRemotes } from '@teambit/legacy/dist/scope/scope-remotes';\nimport { Remotes } from '@teambit/legacy/dist/remotes';\nimport { isMatchNamespacePatternItem } from '@teambit/workspace.modules.match-pattern';\nimport { ConfigMain, ConfigAspect } from '@teambit/config';\nimport { Scope } from '@teambit/legacy/dist/scope';\nimport { Types } from '@teambit/legacy/dist/scope/object-registrar';\nimport { FETCH_OPTIONS } from '@teambit/legacy/dist/api/scope/lib/fetch';\nimport { ObjectList } from '@teambit/legacy/dist/scope/objects/object-list';\nimport { Http, DEFAULT_AUTH_TYPE, AuthData, getAuthDataFromHeader } from '@teambit/legacy/dist/scope/network/http/http';\nimport { buildOneGraphForComponentsUsingScope } from '@teambit/legacy/dist/scope/graph/components-graph';\nimport { remove } from '@teambit/legacy/dist/api/scope';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { resumeExport } from '@teambit/legacy/dist/scope/component-ops/export-scope-components';\nimport { ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config';\nimport EnvsAspect, { EnvsMain } from '@teambit/envs';\nimport { Compiler } from '@teambit/compiler';\nimport { compact, uniq, slice, uniqBy, difference } from 'lodash';\nimport { ComponentNotFound } from './exceptions';\nimport { ScopeAspect } from './scope.aspect';\nimport { scopeSchema } from './scope.graphql';\nimport { ScopeUIRoot } from './scope.ui-root';\nimport { PutRoute, FetchRoute, ActionRoute, DeleteRoute } from './routes';\nimport { ScopeComponentLoader } from './scope-component-loader';\n\ntype TagRegistry = SlotRegistry<OnTag>;\n\ntype ManifestOrAspect = ExtensionManifest | Aspect;\n\nexport type OnTagResults = { builderDataMap: ComponentMap<BuilderData>; pipeResults: TaskResultsList[] };\nexport type OnTag = (components: Component[], options?: OnTagOpts) => Promise<OnTagResults>;\n\ntype RemoteEventMetadata = { auth?: AuthData; headers?: {} };\ntype RemoteEvent<Data> = (data: Data, metadata: RemoteEventMetadata, errors?: Array<string | Error>) => Promise<void>;\ntype OnPostPutData = { ids: ComponentID[]; lanes: Lane[] };\ntype OnPostDeleteData = { ids: ComponentID[] };\ntype OnPreFetchObjectData = { ids: string[]; fetchOptions: FETCH_OPTIONS };\n\ntype OnPostPut = RemoteEvent<OnPostPutData>;\ntype OnPostExport = RemoteEvent<OnPostPutData>;\ntype OnPostDelete = RemoteEvent<OnPostDeleteData>;\ntype OnPostObjectsPersist = RemoteEvent<undefined>;\ntype OnPreFetchObjects = RemoteEvent<OnPreFetchObjectData>;\n\nexport type OnPostPutSlot = SlotRegistry<OnPostPut>;\nexport type OnPostDeleteSlot = SlotRegistry<OnPostDelete>;\nexport type OnPostExportSlot = SlotRegistry<OnPostExport>;\nexport type OnPostObjectsPersistSlot = SlotRegistry<OnPostObjectsPersist>;\nexport type OnPreFetchObjectsSlot = SlotRegistry<OnPreFetchObjects>;\n\nexport type ScopeConfig = {\n httpTimeOut: number;\n description?: string;\n icon?: string;\n backgroundIconColor?: string;\n};\n\nexport class ScopeMain implements ComponentFactory {\n componentLoader: ScopeComponentLoader;\n constructor(\n /**\n * private reference to the instance of Harmony.\n */\n private harmony: Harmony,\n /**\n * legacy scope\n */\n readonly legacyScope: LegacyScope,\n\n /**\n * component extension.\n */\n readonly componentExtension: ComponentMain,\n\n /**\n * slot registry for subscribing to build\n */\n\n readonly config: ScopeConfig,\n\n private tagRegistry: TagRegistry,\n\n private postPutSlot: OnPostPutSlot,\n\n private postDeleteSlot: OnPostDeleteSlot,\n\n private postExportSlot: OnPostExportSlot,\n\n private postObjectsPersist: OnPostObjectsPersistSlot,\n\n public preFetchObjects: OnPreFetchObjectsSlot,\n\n private isolator: IsolatorMain,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private envs: EnvsMain\n ) {\n this.componentLoader = new ScopeComponentLoader(this, this.logger);\n }\n\n /**\n * name of the scope\n */\n get name(): string {\n return this.legacyScope.name;\n }\n\n get icon(): string | undefined {\n return this.config.icon;\n }\n\n get backgroundIconColor(): string | undefined {\n return this.config.backgroundIconColor;\n }\n\n get description(): string | undefined {\n return this.config.description;\n }\n\n get path(): string {\n return this.legacyScope.path;\n }\n\n get isLegacy(): boolean {\n return this.legacyScope.isLegacy;\n }\n\n /**\n * register to the tag slot.\n */\n onTag(tagFn: OnTag) {\n const host = this.componentExtension.getHost();\n const legacyOnTagFunc: OnTagFunc = async (\n legacyComponents: ConsumerComponent[],\n options?: OnTagOpts\n ): Promise<LegacyOnTagResult[]> => {\n // Reload the aspects with their new version\n await this.reloadAspectsWithNewVersion(legacyComponents);\n const components = await host.getManyByLegacy(legacyComponents);\n const { builderDataMap } = await tagFn(components, options);\n return this.builderDataMapToLegacyOnTagResults(builderDataMap);\n };\n this.legacyScope.onTag.push(legacyOnTagFunc);\n this.tagRegistry.register(tagFn);\n }\n\n // We need to reload the aspects with their new version since:\n // during get many by legacy, we go load component which in turn go to getEnv\n // get env validates that the env written on the component is really exist by checking the envs slot registry\n // when we load here, it's env version in the aspect list already has the new version in case the env itself is being tagged\n // so we are search for the env in the registry with the new version number\n // but since the env only registered during the on load of the bit process (before the tag) it's version in the registry is only the old one\n // once we reload them we will have it registered with the new version as well\n async reloadAspectsWithNewVersion(components: ConsumerComponent[]): Promise<void> {\n const host = this.componentExtension.getHost();\n\n // Return only aspects that defined on components but not in the root config file (workspace.jsonc/scope.jsonc)\n const getUserAspectsIdsWithoutRootIds = (): string[] => {\n const allUserAspectIds = this.aspectLoader.getUserAspects();\n const rootIds = Object.keys(this.harmony.config.toObject());\n const diffIds = difference(allUserAspectIds, rootIds);\n return diffIds;\n };\n\n // Based on the list of components to be tagged return those who are loaded to harmony with their used version\n const getAspectsByPreviouslyUsedVersion = async (): Promise<string[]> => {\n const harmonyIds = getUserAspectsIdsWithoutRootIds();\n const aspectsIds: string[] = [];\n const aspectsP = components.map(async (component) => {\n const newId = await host.resolveComponentId(component.id);\n if (\n component.previouslyUsedVersion &&\n component.version &&\n component.previouslyUsedVersion !== component.version\n ) {\n const newIdWithPreviouslyUsedVersion = newId.changeVersion(component.previouslyUsedVersion);\n if (harmonyIds.includes(newIdWithPreviouslyUsedVersion.toString())) {\n aspectsIds.push(newId.toString());\n }\n }\n });\n await Promise.all(aspectsP);\n return aspectsIds;\n };\n\n const idsToLoad = await getAspectsByPreviouslyUsedVersion();\n await host.loadAspects(idsToLoad, false);\n }\n\n getManyByLegacy(components: ConsumerComponent[]): Promise<Component[]> {\n return mapSeries(components, async (component) => this.getFromConsumerComponent(component));\n }\n\n clearCache() {\n this.componentLoader.clearCache();\n this.legacyScope.objects.clearCache();\n }\n\n builderDataMapToLegacyOnTagResults(builderDataComponentMap: ComponentMap<BuilderData>): LegacyOnTagResult[] {\n const builderDataToLegacyExtension = (component: Component, builderData: BuilderData) => {\n const existingBuilder = component.state.aspects.get(BuilderAspect.id)?.legacy;\n const builderExtension = existingBuilder || new ExtensionDataEntry(undefined, undefined, BuilderAspect.id);\n builderExtension.data = builderData;\n return builderExtension;\n };\n return builderDataComponentMap.toArray().map(([component, builderData]) => ({\n id: component.id._legacy,\n builderData: builderDataToLegacyExtension(component, builderData),\n }));\n }\n\n /**\n * register to the post-export slot.\n */\n onPostPut(postPutFn: OnPostPut) {\n this.postPutSlot.register(postPutFn);\n return this;\n }\n\n /**\n * register to the post-delete slot.\n */\n onPostDelete(postDeleteFn: OnPostDelete) {\n this.postDeleteSlot.register(postDeleteFn);\n return this;\n }\n\n /**\n * register to the post-export slot.\n */\n registerOnPostExport(postExportFn: OnPostExport) {\n this.postExportSlot.register(postExportFn);\n return this;\n }\n\n registerOnPreFetchObjects(preFetchObjectsFn: OnPreFetchObjects) {\n this.preFetchObjects.register(preFetchObjectsFn);\n return this;\n }\n\n registerOnPostObjectsPersist(postObjectsPersistFn: OnPostObjectsPersist) {\n this.postObjectsPersist.register(postObjectsPersistFn);\n return this;\n }\n\n /**\n * Will fetch a list of components into the current scope.\n * This will only fetch the object and won't write the files to the actual FS\n *\n * @param {ComponentsIds} ids list of ids to fetch\n */\n fetch(ids: ComponentsIds) {} // eslint-disable-line @typescript-eslint/no-unused-vars\n\n /**\n * This function will get a component and sealed it's current state into the scope\n *\n * @param {Component[]} components A list of components to seal with specific persist options (such as message and version number)\n * @param {PersistOptions} persistGeneralOptions General persistence options such as verbose\n */\n persist(components: Component[], options: PersistOptions) {} // eslint-disable-line @typescript-eslint/no-unused-vars\n\n async delete(\n { ids, force, lanes }: { ids: string[]; force: boolean; lanes: boolean },\n headers?: Record<string, any>\n ) {\n const authData = getAuthDataFromHeader(headers?.authorization);\n const result = await remove({\n path: this.path,\n ids,\n force,\n lanes,\n });\n\n const fns = this.postDeleteSlot.values();\n const metadata = { auth: authData, headers };\n const componentIds = ids.map((id) => ComponentID.fromString(id));\n await mapSeries(fns, async (fn) => {\n try {\n await fn({ ids: componentIds }, metadata);\n } catch (err: any) {\n this.logger.error('failed to run delete slot', err);\n }\n });\n return result;\n }\n\n async toObjectList(types: Types): Promise<ObjectList> {\n const objects = await this.legacyScope.objects.list(types);\n return ObjectList.fromBitObjects(objects);\n }\n\n // TODO: temporary compiler workaround - discuss this with david.\n private toJs(str: string) {\n if (str.endsWith('.ts')) return str.replace('.ts', '.js');\n return str;\n }\n\n private parseLocalAspect(localAspects: string[]) {\n const dirPaths = localAspects.map((localAspect) => resolve(localAspect.replace('file://', '')));\n const nonExistsDirPaths = dirPaths.filter((path) => !existsSync(path));\n nonExistsDirPaths.forEach((path) => this.logger.warn(`no such file or directory: ${path}`));\n const existsDirPaths = dirPaths.filter((path) => existsSync(path));\n return existsDirPaths;\n }\n\n private findRuntime(dirPath: string, runtime: string) {\n const files = readdirSync(join(dirPath, 'dist'));\n return files.find((path) => path.includes(`${runtime}.runtime.js`));\n }\n\n private async loadAspectFromPath(localAspects: string[]) {\n const dirPaths = this.parseLocalAspect(localAspects);\n const manifests = dirPaths.map((dirPath) => {\n const scopeRuntime = this.findRuntime(dirPath, 'scope');\n if (scopeRuntime) {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(join(dirPath, 'dist', scopeRuntime));\n return module.default || module;\n }\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(dirPath);\n return module.default || module;\n });\n\n await this.aspectLoader.loadExtensionsByManifests(manifests, true);\n }\n\n private localAspects: string[] = [];\n\n async loadAspects(ids: string[], throwOnError = false): Promise<string[]> {\n const scopeManifests = await this.getManifestsGraphRecursively(ids, [], throwOnError);\n await this.aspectLoader.loadExtensionsByManifests(scopeManifests);\n return compact(scopeManifests.map((manifest) => manifest.id));\n }\n\n async getManifestsGraphRecursively(\n ids: string[],\n visited: string[] = [],\n throwOnError = false\n ): Promise<ManifestOrAspect[]> {\n ids = uniq(ids);\n const nonVisitedId = ids.filter((id) => !visited.includes(id));\n if (!nonVisitedId.length) {\n return [];\n }\n const components = await this.getNonLoadedAspects(nonVisitedId);\n visited.push(...nonVisitedId);\n const manifests = await this.requireAspects(components, throwOnError);\n const depsToLoad: Array<ExtensionManifest | Aspect> = [];\n await mapSeries(manifests, async (manifest) => {\n depsToLoad.push(...(manifest.dependencies || []));\n // @ts-ignore\n (manifest._runtimes || []).forEach((runtime) => {\n depsToLoad.push(...(runtime.dependencies || []));\n });\n const depIds = depsToLoad.map((d) => d.id).filter((id) => id) as string[];\n const loaded = await this.getManifestsGraphRecursively(depIds, visited, throwOnError);\n manifests.push(...loaded);\n });\n return manifests;\n }\n\n private async getNonLoadedAspects(ids: string[]): Promise<Component[]> {\n const notLoadedIds = ids.filter((id) => !this.aspectLoader.isAspectLoaded(id));\n if (!notLoadedIds.length) return [];\n const coreAspectsStringIds = this.aspectLoader.getCoreAspectIds();\n const idsWithoutCore: string[] = difference(ids, coreAspectsStringIds);\n const aspectIds = idsWithoutCore.filter((id) => !id.startsWith('file://'));\n // TODO: use diff instead of filter twice\n const localAspects = ids.filter((id) => id.startsWith('file://'));\n this.localAspects = this.localAspects.concat(localAspects);\n // load local aspects for debugging purposes.\n await this.loadAspectFromPath(localAspects);\n const componentIds = await this.resolveMultipleComponentIds(aspectIds);\n if (!componentIds || !componentIds.length) return [];\n const components = await this.import(componentIds, { reFetchUnBuiltVersion: false });\n\n return components;\n }\n\n private async resolveLocalAspects(ids: string[], runtime?: string) {\n const dirs = this.parseLocalAspect(ids);\n\n return dirs.map((dir) => {\n const runtimeManifest = runtime ? this.findRuntime(dir, runtime) : undefined;\n return new AspectDefinition(\n dir,\n runtimeManifest ? join(dir, 'dist', runtimeManifest) : null,\n undefined,\n undefined,\n true\n );\n });\n }\n\n async getResolvedAspects(components: Component[], { skipIfExists = true } = {}): Promise<RequireableComponent[]> {\n if (!components.length) return [];\n const network = await this.isolator.isolateComponents(\n components.map((c) => c.id),\n // includeFromNestedHosts - to support case when you are in a workspace, trying to load aspect defined in the workspace.jsonc but not part of the workspace\n {\n baseDir: this.getAspectCapsulePath(),\n skipIfExists,\n seedersOnly: true,\n includeFromNestedHosts: true,\n installOptions: { copyPeerToRuntimeOnRoot: true },\n },\n this.legacyScope\n );\n\n const capsules = network.seedersCapsules;\n\n return capsules.map((capsule) => {\n return new RequireableComponent(\n capsule.component,\n async () => {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const plugins = this.aspectLoader.getPlugins(capsule.component, capsule.path);\n if (plugins.has()) {\n await this.compileIfNoDist(capsule, capsule.component);\n return plugins.load(MainRuntime.name);\n }\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const aspect = require(capsule.path);\n const scopeRuntime = await this.aspectLoader.getRuntimePath(capsule.component, capsule.path, 'scope');\n const mainRuntime = await this.aspectLoader.getRuntimePath(capsule.component, capsule.path, MainRuntime.name);\n const runtimePath = scopeRuntime || mainRuntime;\n // eslint-disable-next-line global-require, import/no-dynamic-require\n if (runtimePath) require(runtimePath);\n // eslint-disable-next-line global-require, import/no-dynamic-require\n return aspect;\n },\n capsule\n );\n });\n }\n\n private async compileIfNoDist(capsule: Capsule, component: Component) {\n const env = this.envs.getEnv(component);\n const compiler: Compiler = env.env.getCompiler();\n const distDir = compiler?.distDir || DEFAULT_DIST_DIRNAME;\n const distExists = existsSync(join(capsule.path, distDir));\n if (distExists) return;\n\n const compiledCode = component.filesystem.files.flatMap((file) => {\n if (!compiler.isFileSupported(file.path)) {\n return [\n {\n outputText: file.contents.toString('utf8'),\n outputPath: file.path,\n },\n ];\n }\n\n if (compiler.transpileFile) {\n return compiler.transpileFile(file.contents.toString('utf8'), {\n filePath: file.path,\n componentDir: capsule.path,\n });\n }\n\n return [];\n });\n\n await Promise.all(\n compact(compiledCode).map((compiledFile) => {\n const path = compiler.getDistPathBySrcPath(compiledFile.outputPath);\n return capsule?.outputFile(path, compiledFile.outputText);\n })\n );\n }\n\n private async tryCompile(requirableAspect: RequireableComponent) {\n if (requirableAspect.capsule) return this.compileIfNoDist(requirableAspect.capsule, requirableAspect.component);\n return undefined;\n }\n\n async requireAspects(components: Component[], throwOnError = false): Promise<Array<ExtensionManifest | Aspect>> {\n const requireableExtensions = await this.getResolvedAspects(components);\n if (!requireableExtensions) {\n return [];\n }\n let error: any;\n let erroredId = '';\n const requireWithCatch = async (requireableAspects: RequireableComponent[]) => {\n error = undefined;\n try {\n const manifests = await mapSeries(requireableAspects, async (requireableExtension) => {\n try {\n return await this.aspectLoader.doRequire(requireableExtension);\n } catch (err: any) {\n erroredId = requireableExtension.component.id.toString();\n if (err.code === 'MODULE_NOT_FOUND') {\n try {\n await this.tryCompile(requireableExtension);\n return await this.aspectLoader.doRequire(requireableExtension);\n } catch (newErr: any) {\n error = newErr;\n throw newErr;\n }\n }\n error = err;\n throw err;\n }\n });\n return manifests;\n } catch (err) {\n return null;\n }\n };\n const manifests = await requireWithCatch(requireableExtensions);\n if (!error) {\n return compact(manifests);\n }\n if (error.code === 'MODULE_NOT_FOUND') {\n this.logger.warn(\n `failed loading aspects from capsules due to MODULE_NOT_FOUND error, re-creating the capsules and trying again`\n );\n const resolvedAspectsAgain = await this.getResolvedAspects(components, {\n skipIfExists: false,\n });\n const manifestAgain = await requireWithCatch(resolvedAspectsAgain);\n if (!error) {\n return compact(manifestAgain);\n }\n }\n\n this.aspectLoader.handleExtensionLoadingError(error, erroredId, throwOnError);\n return [];\n }\n\n getAspectCapsulePath() {\n return `${this.path}-aspects`;\n }\n\n private async resolveUserAspects(runtimeName?: string, userAspectsIds?: ComponentID[]): Promise<AspectDefinition[]> {\n if (!userAspectsIds || !userAspectsIds.length) return [];\n const components = await this.getMany(userAspectsIds);\n const network = await this.isolator.isolateComponents(\n userAspectsIds,\n {\n baseDir: this.getAspectCapsulePath(),\n skipIfExists: true,\n // for some reason this needs to be false, otherwise tagging components in some workspaces\n // result in error during Preview task:\n // \"No matching version found for <some-component-on-the-workspace>\"\n seedersOnly: false,\n includeFromNestedHosts: true,\n installOptions: { copyPeerToRuntimeOnRoot: true },\n host: this,\n },\n this.legacyScope\n );\n const capsules = network.seedersCapsules;\n const aspectDefs = await this.aspectLoader.resolveAspects(components, async (component) => {\n const capsule = capsules.getCapsule(component.id);\n if (!capsule) throw new Error(`failed loading aspect: ${component.id.toString()}`);\n const localPath = capsule.path;\n\n return {\n aspectPath: localPath,\n runtimePath: runtimeName ? await this.aspectLoader.getRuntimePath(component, localPath, runtimeName) : null,\n };\n });\n return aspectDefs;\n }\n\n async resolveAspects(runtimeName?: string, componentIds?: ComponentID[]): Promise<AspectDefinition[]> {\n const userAspectsIds = componentIds || (await this.resolveMultipleComponentIds(this.aspectLoader.getUserAspects()));\n const withoutLocalAspects = userAspectsIds.filter((aspectId) => {\n return !this.localAspects.find((localAspect) => {\n return localAspect.includes(aspectId.fullName.replace('/', '.'));\n });\n });\n const userAspectsDefs = await this.resolveUserAspects(runtimeName, withoutLocalAspects);\n const localResolved = await this.resolveLocalAspects(this.localAspects, runtimeName);\n const coreAspects = await this.aspectLoader.getCoreAspectDefs(runtimeName);\n\n const allDefs = userAspectsDefs.concat(coreAspects).concat(localResolved);\n const uniqDefs = uniqBy(allDefs, (def) => `${def.aspectPath}-${def.runtimePath}`);\n let defs = uniqDefs;\n if (runtimeName) {\n defs = defs.filter((def) => def.runtimePath);\n }\n\n return defs;\n }\n\n async getLegacyGraph(ids?: ComponentID[]): Promise<LegacyGraph> {\n if (!ids || ids.length < 1) ids = (await this.list()).map((comp) => comp.id) || [];\n const legacyIds = ids.map((id) => {\n let bitId = id._legacy;\n // The resolve bitId in scope will remove the scope name in case it's the same as the scope\n // We restore it back to use it correctly in the legacy code.\n if (!bitId.hasScope()) {\n bitId = bitId.changeScope(this.legacyScope?.name);\n }\n return bitId;\n });\n\n const legacyGraph = await buildOneGraphForComponentsUsingScope(legacyIds, this.legacyScope);\n return legacyGraph;\n }\n\n /**\n * import components into the scope.\n */\n async import(\n ids: ComponentID[],\n {\n useCache = true,\n throwIfNotExist = false,\n reFetchUnBuiltVersion = true,\n }: {\n /**\n * if the component exists locally, don't go to the server to search for updates.\n */\n useCache?: boolean;\n throwIfNotExist?: boolean;\n /**\n * if the Version objects exists locally, but its `buildStatus` is Pending or Failed, reach the remote to find\n * whether the version was already built there.\n */\n reFetchUnBuiltVersion?: boolean;\n } = {}\n ): Promise<Component[]> {\n const legacyIds = ids.map((id) => {\n const legacyId = id._legacy;\n if (legacyId.scope === this.name) return legacyId.changeScope(null);\n return legacyId;\n });\n\n const withoutOwnScopeAndLocals = legacyIds.filter((id) => {\n return id.scope !== this.name && id.hasScope();\n });\n await this.legacyScope.import(ComponentsIds.fromArray(withoutOwnScopeAndLocals), useCache, reFetchUnBuiltVersion);\n\n return this.getMany(ids, throwIfNotExist);\n }\n\n async get(id: ComponentID): Promise<Component | undefined> {\n return this.componentLoader.get(id);\n }\n\n async getFromConsumerComponent(consumerComponent: ConsumerComponent): Promise<Component> {\n return this.componentLoader.getFromConsumerComponent(consumerComponent);\n }\n\n /**\n * get a component from a remote without importing it\n */\n async getRemoteComponent(id: ComponentID): Promise<Component> {\n return this.componentLoader.getRemoteComponent(id);\n }\n\n /**\n * list all components in the scope.\n */\n async list(filter?: { offset: number; limit: number }, includeCache = false): Promise<Component[]> {\n const componentsIds = await this.listIds(includeCache);\n\n return this.getMany(\n filter && filter.limit ? slice(componentsIds, filter.offset, filter.offset + filter.limit) : componentsIds\n );\n }\n\n /**\n * for now, list of invalid components are mostly useful for the workspace.\n * in the future, this can return components that failed to load in the scope due to objects file\n * corruption or similar issues.\n */\n async listInvalid() {\n return [];\n }\n\n /**\n * get ids of all scope components.\n * @param includeCache whether or not include components that their scope-name is different than the current scope-name\n */\n async listIds(includeCache = false): Promise<ComponentID[]> {\n const allModelComponents = await this.legacyScope.list();\n const modelComponentsToList = includeCache\n ? allModelComponents\n : allModelComponents.filter((modelComponent) => this.exists(modelComponent));\n\n const ids = modelComponentsToList.map((component) =>\n ComponentID.fromLegacy(component.toBitIdWithLatestVersion(), component.scope || this.name)\n );\n this.logger.debug(`scope listIds: componentsIds after filter scope: ${JSON.stringify(ids, undefined, 2)}`);\n return ids;\n }\n\n /**\n * Check if a specific id exist in the scope\n * @param componentId\n */\n async hasId(componentId: ComponentID, includeCache = false): Promise<boolean> {\n if (!includeCache && componentId.scope !== this.name) return false;\n const opts = {\n includeOrphaned: true,\n includeVersion: true,\n };\n\n return this.legacyScope.hasId(componentId._legacy, opts);\n }\n\n async hasIdNested(componentId: ComponentID, includeCache = false): Promise<boolean> {\n return this.hasId(componentId, includeCache);\n }\n\n /**\n * determine whether a component exists in the scope.\n */\n exists(modelComponent: ModelComponent) {\n return modelComponent.scope === this.name;\n }\n\n async getMany(ids: ComponentID[], throwIfNotExist = false): Promise<Component[]> {\n const idsWithoutEmpty = compact(ids);\n const componentsP = mapSeries(idsWithoutEmpty, async (id: ComponentID) => {\n return throwIfNotExist ? this.getOrThrow(id) : this.get(id);\n });\n const components = await componentsP;\n return compact(components);\n }\n\n /**\n * load components from a scope and load their aspects\n */\n async loadMany(ids: ComponentID[]): Promise<Component[]> {\n const components = await mapSeries(ids, (id) => this.load(id));\n return compact(components);\n }\n\n /**\n * get a component and throw an exception if not found.\n * @param id component id\n */\n async getOrThrow(id: ComponentID): Promise<Component> {\n const component = await this.get(id);\n if (!component) throw new ComponentNotFound(id);\n return component;\n }\n\n /**\n * returns a specific state of a component.\n * @param id component ID.\n * @param hash state hash.\n */\n async getState(id: ComponentID, hash: string): Promise<State> {\n return this.componentLoader.getState(id, hash);\n }\n\n async getSnap(id: ComponentID, hash: string): Promise<Snap> {\n return this.componentLoader.getSnap(id, hash);\n }\n\n async getLogs(id: ComponentID): Promise<ComponentLog[]> {\n return this.legacyScope.loadComponentLogs(id._legacy);\n }\n\n /**\n * resolve a component ID.\n * @param id component ID.\n */\n async resolveComponentId(id: string | ComponentID | BitId): Promise<ComponentID> {\n const idStr = id.toString();\n const component = await this.legacyScope.loadModelComponentByIdStr(idStr);\n const getIdToCheck = () => {\n if (component) return idStr; // component exists in the scope with the scope-name.\n if (idStr.startsWith(`${this.name}/`)) {\n // component with the full name doesn't exist in the scope, it might be locally tagged\n return idStr.replace(`${this.name}/`, '');\n }\n return idStr;\n };\n const IdToCheck = getIdToCheck();\n const legacyId = id instanceof BitId ? id : await this.legacyScope.getParsedId(IdToCheck);\n if (!legacyId.scope) return ComponentID.fromLegacy(legacyId, this.name);\n return ComponentID.fromLegacy(legacyId);\n }\n\n async resolveMultipleComponentIds(ids: Array<string | ComponentID | BitId>) {\n return Promise.all(ids.map(async (id) => this.resolveComponentId(id)));\n }\n\n /**\n * load components into the scope through a variants pattern.\n */\n async byPattern(patterns: string[], scope = '**'): Promise<Component[]> {\n const ids = await this.listIds(true);\n const finalPatterns = patterns.map((pattern) => `${scope}/${pattern || '**'}`);\n const targetIds = ids.filter((id) => {\n return finalPatterns.some((pattern) => isMatchNamespacePatternItem(id.toStringWithoutVersion(), pattern).match);\n });\n\n const components = await this.getMany(targetIds);\n return components;\n }\n\n async getExactVersionBySemverRange(id: ComponentID, range: string): Promise<string | undefined> {\n const modelComponent = await this.legacyScope.getModelComponent(id._legacy);\n const versions = modelComponent.listVersions();\n return semver.maxSatisfying<string>(versions, range, { includePrerelease: true })?.toString();\n }\n\n async resumeExport(exportId: string, remotes: string[]): Promise<string[]> {\n return resumeExport(this.legacyScope, exportId, remotes);\n }\n\n async resolveId(id: string): Promise<ComponentID> {\n const legacyId = await this.legacyScope.getParsedId(id);\n return ComponentID.fromLegacy(legacyId);\n }\n\n // TODO: add new API for this\n async _legacyRemotes(): Promise<Remotes> {\n return getScopeRemotes(this.legacyScope);\n }\n\n /**\n * get a component and load its aspect\n */\n async load(id: ComponentID): Promise<Component | undefined> {\n const component = await this.get(id);\n if (!component) return undefined;\n const aspectIds = component.state.aspects.ids;\n // load components from type aspects as aspects.\n if (this.aspectLoader.isAspectComponent(component)) {\n aspectIds.push(component.id.toString());\n }\n await this.loadAspects(aspectIds, true);\n\n return component;\n }\n\n async loadComponentsAspect(component: Component) {\n const aspectIds = component.state.aspects.ids;\n await this.loadAspects(aspectIds, true);\n }\n\n /**\n * declare the slots of scope extension.\n */\n static slots = [\n Slot.withType<OnTag>(),\n Slot.withType<OnPostPut>(),\n Slot.withType<OnPostDelete>(),\n Slot.withType<OnPostExport>(),\n Slot.withType<OnPostObjectsPersist>(),\n Slot.withType<OnPreFetchObjects>(),\n ];\n static runtime = MainRuntime;\n\n static dependencies = [\n ComponentAspect,\n UIAspect,\n GraphqlAspect,\n CLIAspect,\n IsolatorAspect,\n AspectLoaderAspect,\n ExpressAspect,\n LoggerAspect,\n EnvsAspect,\n ConfigAspect,\n ];\n\n static defaultConfig: ScopeConfig = {\n httpTimeOut: 600000,\n };\n\n static async provider(\n [componentExt, ui, graphql, cli, isolator, aspectLoader, express, loggerMain, envs, configMain]: [\n ComponentMain,\n UiMain,\n GraphqlMain,\n CLIMain,\n IsolatorMain,\n AspectLoaderMain,\n ExpressMain,\n LoggerMain,\n EnvsMain,\n ConfigMain\n ],\n config: ScopeConfig,\n [tagSlot, postPutSlot, postDeleteSlot, postExportSlot, postObjectsPersistSlot, preFetchObjectsSlot]: [\n TagRegistry,\n OnPostPutSlot,\n OnPostDeleteSlot,\n OnPostExportSlot,\n OnPostObjectsPersistSlot,\n OnPreFetchObjectsSlot\n ],\n harmony: Harmony\n ) {\n const bitConfig: any = harmony.config.get('teambit.harmony/bit');\n const legacyScope = await loadScopeIfExist(bitConfig?.cwd);\n if (!legacyScope) {\n return undefined;\n }\n\n const logger = loggerMain.createLogger(ScopeAspect.id);\n const scope = new ScopeMain(\n harmony,\n legacyScope,\n componentExt,\n config,\n tagSlot,\n postPutSlot,\n postDeleteSlot,\n postExportSlot,\n postObjectsPersistSlot,\n preFetchObjectsSlot,\n isolator,\n aspectLoader,\n logger,\n envs\n );\n cli.registerOnStart(async (hasWorkspace: boolean) => {\n if (hasWorkspace) return;\n await scope.loadAspects(aspectLoader.getNotLoadedConfiguredExtensions());\n });\n\n const onPutHook = async (ids: string[], lanes: Lane[], authData?: AuthData): Promise<void> => {\n logger.debug(`onPutHook, started. (${ids.length} components)`);\n scope.componentLoader.clearCache();\n const componentIds = await scope.resolveMultipleComponentIds(ids);\n const fns = postPutSlot.values();\n const data = {\n ids: componentIds,\n lanes,\n };\n const metadata = { auth: authData };\n await Promise.all(fns.map(async (fn) => fn(data, metadata)));\n logger.debug(`onPutHook, completed. (${ids.length} components)`);\n };\n\n const getAuthData = (): AuthData | undefined => {\n const token = Http.getToken();\n return token ? { type: DEFAULT_AUTH_TYPE, credentials: token } : undefined;\n };\n\n const onPostExportHook = async (ids: BitId[], lanes: Lane[]): Promise<void> => {\n logger.debug(`onPostExportHook, started. (${ids.length} components)`);\n const componentIds = await scope.resolveMultipleComponentIds(ids);\n const fns = postExportSlot.values();\n const data = {\n ids: componentIds,\n lanes,\n };\n const metadata = { auth: getAuthData() };\n await Promise.all(fns.map(async (fn) => fn(data, metadata)));\n logger.debug(`onPostExportHook, completed. (${ids.length} components)`);\n };\n\n const onPostObjectsPersistHook = async (): Promise<void> => {\n logger.debug(`onPostObjectsPersistHook, started`);\n const fns = postObjectsPersistSlot.values();\n const metadata = { auth: getAuthData() };\n await Promise.all(fns.map(async (fn) => fn(undefined, metadata)));\n logger.debug(`onPostObjectsPersistHook, completed`);\n };\n\n ExportPersist.onPutHook = onPutHook;\n PostSign.onPutHook = onPutHook;\n Scope.onPostExport = onPostExportHook;\n Repository.onPostObjectsPersist = onPostObjectsPersistHook;\n\n configMain?.registerPreAddingAspectsSlot?.(async (compIds) => {\n const loadedIds = await scope.loadAspects(compIds, true);\n // find the full component-ids including versions in the load-aspects results.\n // we need it for bit-use to be added to the config file.\n return compIds.map((compId) => {\n const loaded = loadedIds.find((loadedId) => loadedId.startsWith(`${compId}@`));\n return loaded || compId;\n });\n });\n\n express.register([\n new PutRoute(scope, postPutSlot),\n new FetchRoute(scope, logger),\n new ActionRoute(scope),\n new DeleteRoute(scope),\n ]);\n // @ts-ignore - @ran to implement the missing functions and remove it\n ui.registerUiRoot(new ScopeUIRoot(scope));\n graphql.register(scopeSchema(scope));\n componentExt.registerHost(scope);\n\n return scope;\n }\n}\n\nScopeAspect.addRuntime(ScopeMain);\n"]}
1
+ {"version":3,"sources":["scope.main.runtime.ts"],"names":["ScopeMain","constructor","harmony","legacyScope","componentExtension","config","tagRegistry","postPutSlot","postDeleteSlot","postExportSlot","postObjectsPersist","preFetchObjects","isolator","aspectLoader","logger","envs","componentLoader","ScopeComponentLoader","name","icon","backgroundIconColor","description","path","isLegacy","onTag","tagFn","host","getHost","legacyOnTagFunc","legacyComponents","options","reloadAspectsWithNewVersion","components","getManyByLegacy","builderDataMap","builderDataMapToLegacyOnTagResults","push","register","getUserAspectsIdsWithoutRootIds","allUserAspectIds","getUserAspects","rootIds","Object","keys","toObject","diffIds","getAspectsByPreviouslyUsedVersion","harmonyIds","aspectsIds","aspectsP","map","component","newId","resolveComponentId","id","previouslyUsedVersion","version","newIdWithPreviouslyUsedVersion","changeVersion","includes","toString","Promise","all","idsToLoad","loadAspects","getFromConsumerComponent","clearCache","objects","builderDataComponentMap","builderDataToLegacyExtension","builderData","existingBuilder","state","aspects","get","BuilderAspect","legacy","builderExtension","ExtensionDataEntry","undefined","data","toArray","_legacy","onPostPut","postPutFn","onPostDelete","postDeleteFn","registerOnPostExport","postExportFn","registerOnPreFetchObjects","preFetchObjectsFn","registerOnPostObjectsPersist","postObjectsPersistFn","fetch","ids","persist","delete","force","lanes","headers","authData","authorization","result","fns","values","metadata","auth","componentIds","ComponentID","fromString","fn","err","error","toObjectList","types","list","ObjectList","fromBitObjects","toJs","str","endsWith","replace","parseLocalAspect","localAspects","dirPaths","localAspect","nonExistsDirPaths","filter","forEach","warn","existsDirPaths","findRuntime","dirPath","runtime","files","find","loadAspectFromPath","manifests","scopeRuntime","module","require","default","loadExtensionsByManifests","throwOnError","scopeManifests","getManifestsGraphRecursively","manifest","visited","nonVisitedId","length","getNonLoadedAspects","requireAspects","depsToLoad","dependencies","_runtimes","depIds","d","loaded","notLoadedIds","isAspectLoaded","coreAspectsStringIds","getCoreAspectIds","idsWithoutCore","aspectIds","startsWith","concat","resolveMultipleComponentIds","import","reFetchUnBuiltVersion","resolveLocalAspects","dirs","dir","runtimeManifest","AspectDefinition","getResolvedAspects","skipIfExists","network","isolateComponents","c","baseDir","getAspectCapsulePath","seedersOnly","includeFromNestedHosts","installOptions","copyPeerToRuntimeOnRoot","capsules","seedersCapsules","capsule","RequireableComponent","plugins","getPlugins","has","compileIfNoDist","load","MainRuntime","aspect","getRuntimePath","mainRuntime","runtimePath","env","getEnv","compiler","getCompiler","distDir","DEFAULT_DIST_DIRNAME","distExists","compiledCode","filesystem","flatMap","file","isFileSupported","outputText","contents","outputPath","transpileFile","filePath","componentDir","compiledFile","getDistPathBySrcPath","outputFile","tryCompile","requirableAspect","requireableExtensions","erroredId","requireWithCatch","requireableAspects","requireableExtension","doRequire","code","newErr","resolvedAspectsAgain","manifestAgain","handleExtensionLoadingError","resolveUserAspects","runtimeName","userAspectsIds","getMany","aspectDefs","resolveAspects","getCapsule","Error","localPath","aspectPath","withoutLocalAspects","aspectId","fullName","userAspectsDefs","localResolved","coreAspects","getCoreAspectDefs","allDefs","uniqDefs","def","defs","getLegacyGraph","comp","legacyIds","bitId","hasScope","changeScope","legacyGraph","useCache","throwIfNotExist","legacyId","scope","withoutOwnScopeAndLocals","ComponentsIds","fromArray","consumerComponent","getRemoteComponent","includeCache","componentsIds","listIds","limit","offset","listInvalid","allModelComponents","modelComponentsToList","modelComponent","exists","fromLegacy","toBitIdWithLatestVersion","debug","JSON","stringify","hasId","componentId","opts","includeOrphaned","includeVersion","hasIdNested","idsWithoutEmpty","componentsP","getOrThrow","loadMany","ComponentNotFound","getState","hash","getSnap","getLogs","shortHash","loadComponentLogs","idStr","loadModelComponentByIdStr","getIdToCheck","IdToCheck","BitId","getParsedId","byPattern","patterns","finalPatterns","pattern","targetIds","some","toStringWithoutVersion","match","getExactVersionBySemverRange","range","getModelComponent","versions","listVersions","semver","maxSatisfying","includePrerelease","resumeExport","exportId","remotes","resolveId","_legacyRemotes","isAspectComponent","loadComponentsAspect","provider","componentExt","ui","graphql","cli","express","loggerMain","configMain","tagSlot","postObjectsPersistSlot","preFetchObjectsSlot","bitConfig","cwd","createLogger","ScopeAspect","registerOnStart","hasWorkspace","getNotLoadedConfiguredExtensions","onPutHook","getAuthData","token","Http","getToken","type","DEFAULT_AUTH_TYPE","credentials","onPostExportHook","onPostObjectsPersistHook","ExportPersist","PostSign","Scope","onPostExport","Repository","onPostObjectsPersist","registerPreAddingAspectsSlot","compIds","loadedIds","compId","loadedId","PutRoute","FetchRoute","ActionRoute","DeleteRoute","registerUiRoot","ScopeUIRoot","registerHost","Slot","withType","ComponentAspect","UIAspect","GraphqlAspect","CLIAspect","IsolatorAspect","AspectLoaderAspect","ExpressAspect","LoggerAspect","EnvsAspect","ConfigAspect","httpTimeOut","addRuntime"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;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","sourcesContent":["import mapSeries from 'p-map-series';\nimport semver from 'semver';\nimport type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { TaskResultsList, BuilderData, BuilderAspect } from '@teambit/builder';\nimport { readdirSync, existsSync } from 'fs-extra';\nimport { resolve, join } from 'path';\nimport { AspectLoaderAspect, AspectDefinition } from '@teambit/aspect-loader';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport type { ComponentMain, ComponentMap } from '@teambit/component';\nimport { Component, ComponentAspect, ComponentFactory, ComponentID, Snap, State } from '@teambit/component';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport { Harmony, Slot, SlotRegistry, ExtensionManifest, Aspect } from '@teambit/harmony';\nimport { Capsule, IsolatorAspect, IsolatorMain } from '@teambit/isolator';\nimport { LoggerAspect, LoggerMain, Logger } from '@teambit/logger';\nimport { ExpressAspect, ExpressMain } from '@teambit/express';\nimport type { UiMain } from '@teambit/ui';\nimport { UIAspect } from '@teambit/ui';\nimport { RequireableComponent } from '@teambit/harmony.modules.requireable-component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport { BitIds as ComponentsIds } from '@teambit/legacy/dist/bit-id';\nimport { ModelComponent, Lane } from '@teambit/legacy/dist/scope/models';\nimport { Repository } from '@teambit/legacy/dist/scope/objects';\nimport LegacyScope, { LegacyOnTagResult, OnTagFunc, OnTagOpts } from '@teambit/legacy/dist/scope/scope';\nimport { ComponentLog } from '@teambit/legacy/dist/scope/models/model-component';\nimport { loadScopeIfExist } from '@teambit/legacy/dist/scope/scope-loader';\nimport { PersistOptions } from '@teambit/legacy/dist/scope/types';\nimport { DEFAULT_DIST_DIRNAME } from '@teambit/legacy/dist/constants';\nimport LegacyGraph from '@teambit/legacy/dist/scope/graph/graph';\nimport { ExportPersist, PostSign } from '@teambit/legacy/dist/scope/actions';\nimport { getScopeRemotes } from '@teambit/legacy/dist/scope/scope-remotes';\nimport { Remotes } from '@teambit/legacy/dist/remotes';\nimport { isMatchNamespacePatternItem } from '@teambit/workspace.modules.match-pattern';\nimport { ConfigMain, ConfigAspect } from '@teambit/config';\nimport { Scope } from '@teambit/legacy/dist/scope';\nimport { Types } from '@teambit/legacy/dist/scope/object-registrar';\nimport { FETCH_OPTIONS } from '@teambit/legacy/dist/api/scope/lib/fetch';\nimport { ObjectList } from '@teambit/legacy/dist/scope/objects/object-list';\nimport { Http, DEFAULT_AUTH_TYPE, AuthData, getAuthDataFromHeader } from '@teambit/legacy/dist/scope/network/http/http';\nimport { buildOneGraphForComponentsUsingScope } from '@teambit/legacy/dist/scope/graph/components-graph';\nimport { remove } from '@teambit/legacy/dist/api/scope';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { resumeExport } from '@teambit/legacy/dist/scope/component-ops/export-scope-components';\nimport { ExtensionDataEntry } from '@teambit/legacy/dist/consumer/config';\nimport EnvsAspect, { EnvsMain } from '@teambit/envs';\nimport { Compiler } from '@teambit/compiler';\nimport { compact, uniq, slice, uniqBy, difference } from 'lodash';\nimport { ComponentNotFound } from './exceptions';\nimport { ScopeAspect } from './scope.aspect';\nimport { scopeSchema } from './scope.graphql';\nimport { ScopeUIRoot } from './scope.ui-root';\nimport { PutRoute, FetchRoute, ActionRoute, DeleteRoute } from './routes';\nimport { ScopeComponentLoader } from './scope-component-loader';\n\ntype TagRegistry = SlotRegistry<OnTag>;\n\ntype ManifestOrAspect = ExtensionManifest | Aspect;\n\nexport type OnTagResults = { builderDataMap: ComponentMap<BuilderData>; pipeResults: TaskResultsList[] };\nexport type OnTag = (components: Component[], options?: OnTagOpts) => Promise<OnTagResults>;\n\ntype RemoteEventMetadata = { auth?: AuthData; headers?: {} };\ntype RemoteEvent<Data> = (data: Data, metadata: RemoteEventMetadata, errors?: Array<string | Error>) => Promise<void>;\ntype OnPostPutData = { ids: ComponentID[]; lanes: Lane[] };\ntype OnPostDeleteData = { ids: ComponentID[] };\ntype OnPreFetchObjectData = { ids: string[]; fetchOptions: FETCH_OPTIONS };\n\ntype OnPostPut = RemoteEvent<OnPostPutData>;\ntype OnPostExport = RemoteEvent<OnPostPutData>;\ntype OnPostDelete = RemoteEvent<OnPostDeleteData>;\ntype OnPostObjectsPersist = RemoteEvent<undefined>;\ntype OnPreFetchObjects = RemoteEvent<OnPreFetchObjectData>;\n\nexport type OnPostPutSlot = SlotRegistry<OnPostPut>;\nexport type OnPostDeleteSlot = SlotRegistry<OnPostDelete>;\nexport type OnPostExportSlot = SlotRegistry<OnPostExport>;\nexport type OnPostObjectsPersistSlot = SlotRegistry<OnPostObjectsPersist>;\nexport type OnPreFetchObjectsSlot = SlotRegistry<OnPreFetchObjects>;\n\nexport type ScopeConfig = {\n httpTimeOut: number;\n description?: string;\n icon?: string;\n backgroundIconColor?: string;\n};\n\nexport class ScopeMain implements ComponentFactory {\n componentLoader: ScopeComponentLoader;\n constructor(\n /**\n * private reference to the instance of Harmony.\n */\n private harmony: Harmony,\n /**\n * legacy scope\n */\n readonly legacyScope: LegacyScope,\n\n /**\n * component extension.\n */\n readonly componentExtension: ComponentMain,\n\n /**\n * slot registry for subscribing to build\n */\n\n readonly config: ScopeConfig,\n\n private tagRegistry: TagRegistry,\n\n private postPutSlot: OnPostPutSlot,\n\n private postDeleteSlot: OnPostDeleteSlot,\n\n private postExportSlot: OnPostExportSlot,\n\n private postObjectsPersist: OnPostObjectsPersistSlot,\n\n public preFetchObjects: OnPreFetchObjectsSlot,\n\n private isolator: IsolatorMain,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private envs: EnvsMain\n ) {\n this.componentLoader = new ScopeComponentLoader(this, this.logger);\n }\n\n /**\n * name of the scope\n */\n get name(): string {\n return this.legacyScope.name;\n }\n\n get icon(): string | undefined {\n return this.config.icon;\n }\n\n get backgroundIconColor(): string | undefined {\n return this.config.backgroundIconColor;\n }\n\n get description(): string | undefined {\n return this.config.description;\n }\n\n get path(): string {\n return this.legacyScope.path;\n }\n\n get isLegacy(): boolean {\n return this.legacyScope.isLegacy;\n }\n\n /**\n * register to the tag slot.\n */\n onTag(tagFn: OnTag) {\n const host = this.componentExtension.getHost();\n const legacyOnTagFunc: OnTagFunc = async (\n legacyComponents: ConsumerComponent[],\n options?: OnTagOpts\n ): Promise<LegacyOnTagResult[]> => {\n // Reload the aspects with their new version\n await this.reloadAspectsWithNewVersion(legacyComponents);\n const components = await host.getManyByLegacy(legacyComponents);\n const { builderDataMap } = await tagFn(components, options);\n return this.builderDataMapToLegacyOnTagResults(builderDataMap);\n };\n this.legacyScope.onTag.push(legacyOnTagFunc);\n this.tagRegistry.register(tagFn);\n }\n\n // We need to reload the aspects with their new version since:\n // during get many by legacy, we go load component which in turn go to getEnv\n // get env validates that the env written on the component is really exist by checking the envs slot registry\n // when we load here, it's env version in the aspect list already has the new version in case the env itself is being tagged\n // so we are search for the env in the registry with the new version number\n // but since the env only registered during the on load of the bit process (before the tag) it's version in the registry is only the old one\n // once we reload them we will have it registered with the new version as well\n async reloadAspectsWithNewVersion(components: ConsumerComponent[]): Promise<void> {\n const host = this.componentExtension.getHost();\n\n // Return only aspects that defined on components but not in the root config file (workspace.jsonc/scope.jsonc)\n const getUserAspectsIdsWithoutRootIds = (): string[] => {\n const allUserAspectIds = this.aspectLoader.getUserAspects();\n const rootIds = Object.keys(this.harmony.config.toObject());\n const diffIds = difference(allUserAspectIds, rootIds);\n return diffIds;\n };\n\n // Based on the list of components to be tagged return those who are loaded to harmony with their used version\n const getAspectsByPreviouslyUsedVersion = async (): Promise<string[]> => {\n const harmonyIds = getUserAspectsIdsWithoutRootIds();\n const aspectsIds: string[] = [];\n const aspectsP = components.map(async (component) => {\n const newId = await host.resolveComponentId(component.id);\n if (\n component.previouslyUsedVersion &&\n component.version &&\n component.previouslyUsedVersion !== component.version\n ) {\n const newIdWithPreviouslyUsedVersion = newId.changeVersion(component.previouslyUsedVersion);\n if (harmonyIds.includes(newIdWithPreviouslyUsedVersion.toString())) {\n aspectsIds.push(newId.toString());\n }\n }\n });\n await Promise.all(aspectsP);\n return aspectsIds;\n };\n\n const idsToLoad = await getAspectsByPreviouslyUsedVersion();\n await host.loadAspects(idsToLoad, false);\n }\n\n getManyByLegacy(components: ConsumerComponent[]): Promise<Component[]> {\n return mapSeries(components, async (component) => this.getFromConsumerComponent(component));\n }\n\n clearCache() {\n this.componentLoader.clearCache();\n this.legacyScope.objects.clearCache();\n }\n\n builderDataMapToLegacyOnTagResults(builderDataComponentMap: ComponentMap<BuilderData>): LegacyOnTagResult[] {\n const builderDataToLegacyExtension = (component: Component, builderData: BuilderData) => {\n const existingBuilder = component.state.aspects.get(BuilderAspect.id)?.legacy;\n const builderExtension = existingBuilder || new ExtensionDataEntry(undefined, undefined, BuilderAspect.id);\n builderExtension.data = builderData;\n return builderExtension;\n };\n return builderDataComponentMap.toArray().map(([component, builderData]) => ({\n id: component.id._legacy,\n builderData: builderDataToLegacyExtension(component, builderData),\n }));\n }\n\n /**\n * register to the post-export slot.\n */\n onPostPut(postPutFn: OnPostPut) {\n this.postPutSlot.register(postPutFn);\n return this;\n }\n\n /**\n * register to the post-delete slot.\n */\n onPostDelete(postDeleteFn: OnPostDelete) {\n this.postDeleteSlot.register(postDeleteFn);\n return this;\n }\n\n /**\n * register to the post-export slot.\n */\n registerOnPostExport(postExportFn: OnPostExport) {\n this.postExportSlot.register(postExportFn);\n return this;\n }\n\n registerOnPreFetchObjects(preFetchObjectsFn: OnPreFetchObjects) {\n this.preFetchObjects.register(preFetchObjectsFn);\n return this;\n }\n\n registerOnPostObjectsPersist(postObjectsPersistFn: OnPostObjectsPersist) {\n this.postObjectsPersist.register(postObjectsPersistFn);\n return this;\n }\n\n /**\n * Will fetch a list of components into the current scope.\n * This will only fetch the object and won't write the files to the actual FS\n *\n * @param {ComponentsIds} ids list of ids to fetch\n */\n fetch(ids: ComponentsIds) {} // eslint-disable-line @typescript-eslint/no-unused-vars\n\n /**\n * This function will get a component and sealed it's current state into the scope\n *\n * @param {Component[]} components A list of components to seal with specific persist options (such as message and version number)\n * @param {PersistOptions} persistGeneralOptions General persistence options such as verbose\n */\n persist(components: Component[], options: PersistOptions) {} // eslint-disable-line @typescript-eslint/no-unused-vars\n\n async delete(\n { ids, force, lanes }: { ids: string[]; force: boolean; lanes: boolean },\n headers?: Record<string, any>\n ) {\n const authData = getAuthDataFromHeader(headers?.authorization);\n const result = await remove({\n path: this.path,\n ids,\n force,\n lanes,\n });\n\n const fns = this.postDeleteSlot.values();\n const metadata = { auth: authData, headers };\n const componentIds = ids.map((id) => ComponentID.fromString(id));\n await mapSeries(fns, async (fn) => {\n try {\n await fn({ ids: componentIds }, metadata);\n } catch (err: any) {\n this.logger.error('failed to run delete slot', err);\n }\n });\n return result;\n }\n\n async toObjectList(types: Types): Promise<ObjectList> {\n const objects = await this.legacyScope.objects.list(types);\n return ObjectList.fromBitObjects(objects);\n }\n\n // TODO: temporary compiler workaround - discuss this with david.\n private toJs(str: string) {\n if (str.endsWith('.ts')) return str.replace('.ts', '.js');\n return str;\n }\n\n private parseLocalAspect(localAspects: string[]) {\n const dirPaths = localAspects.map((localAspect) => resolve(localAspect.replace('file://', '')));\n const nonExistsDirPaths = dirPaths.filter((path) => !existsSync(path));\n nonExistsDirPaths.forEach((path) => this.logger.warn(`no such file or directory: ${path}`));\n const existsDirPaths = dirPaths.filter((path) => existsSync(path));\n return existsDirPaths;\n }\n\n private findRuntime(dirPath: string, runtime: string) {\n const files = readdirSync(join(dirPath, 'dist'));\n return files.find((path) => path.includes(`${runtime}.runtime.js`));\n }\n\n private async loadAspectFromPath(localAspects: string[]) {\n const dirPaths = this.parseLocalAspect(localAspects);\n const manifests = dirPaths.map((dirPath) => {\n const scopeRuntime = this.findRuntime(dirPath, 'scope');\n if (scopeRuntime) {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(join(dirPath, 'dist', scopeRuntime));\n return module.default || module;\n }\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(dirPath);\n return module.default || module;\n });\n\n await this.aspectLoader.loadExtensionsByManifests(manifests, true);\n }\n\n private localAspects: string[] = [];\n\n async loadAspects(ids: string[], throwOnError = false): Promise<string[]> {\n const scopeManifests = await this.getManifestsGraphRecursively(ids, [], throwOnError);\n await this.aspectLoader.loadExtensionsByManifests(scopeManifests);\n return compact(scopeManifests.map((manifest) => manifest.id));\n }\n\n async getManifestsGraphRecursively(\n ids: string[],\n visited: string[] = [],\n throwOnError = false\n ): Promise<ManifestOrAspect[]> {\n ids = uniq(ids);\n const nonVisitedId = ids.filter((id) => !visited.includes(id));\n if (!nonVisitedId.length) {\n return [];\n }\n const components = await this.getNonLoadedAspects(nonVisitedId);\n visited.push(...nonVisitedId);\n const manifests = await this.requireAspects(components, throwOnError);\n const depsToLoad: Array<ExtensionManifest | Aspect> = [];\n await mapSeries(manifests, async (manifest) => {\n depsToLoad.push(...(manifest.dependencies || []));\n // @ts-ignore\n (manifest._runtimes || []).forEach((runtime) => {\n depsToLoad.push(...(runtime.dependencies || []));\n });\n const depIds = depsToLoad.map((d) => d.id).filter((id) => id) as string[];\n const loaded = await this.getManifestsGraphRecursively(depIds, visited, throwOnError);\n manifests.push(...loaded);\n });\n return manifests;\n }\n\n private async getNonLoadedAspects(ids: string[]): Promise<Component[]> {\n const notLoadedIds = ids.filter((id) => !this.aspectLoader.isAspectLoaded(id));\n if (!notLoadedIds.length) return [];\n const coreAspectsStringIds = this.aspectLoader.getCoreAspectIds();\n const idsWithoutCore: string[] = difference(ids, coreAspectsStringIds);\n const aspectIds = idsWithoutCore.filter((id) => !id.startsWith('file://'));\n // TODO: use diff instead of filter twice\n const localAspects = ids.filter((id) => id.startsWith('file://'));\n this.localAspects = this.localAspects.concat(localAspects);\n // load local aspects for debugging purposes.\n await this.loadAspectFromPath(localAspects);\n const componentIds = await this.resolveMultipleComponentIds(aspectIds);\n if (!componentIds || !componentIds.length) return [];\n const components = await this.import(componentIds, { reFetchUnBuiltVersion: false });\n\n return components;\n }\n\n private async resolveLocalAspects(ids: string[], runtime?: string) {\n const dirs = this.parseLocalAspect(ids);\n\n return dirs.map((dir) => {\n const runtimeManifest = runtime ? this.findRuntime(dir, runtime) : undefined;\n return new AspectDefinition(\n dir,\n runtimeManifest ? join(dir, 'dist', runtimeManifest) : null,\n undefined,\n undefined,\n true\n );\n });\n }\n\n async getResolvedAspects(components: Component[], { skipIfExists = true } = {}): Promise<RequireableComponent[]> {\n if (!components.length) return [];\n const network = await this.isolator.isolateComponents(\n components.map((c) => c.id),\n // includeFromNestedHosts - to support case when you are in a workspace, trying to load aspect defined in the workspace.jsonc but not part of the workspace\n {\n baseDir: this.getAspectCapsulePath(),\n skipIfExists,\n seedersOnly: true,\n includeFromNestedHosts: true,\n installOptions: { copyPeerToRuntimeOnRoot: true },\n },\n this.legacyScope\n );\n\n const capsules = network.seedersCapsules;\n\n return capsules.map((capsule) => {\n return new RequireableComponent(\n capsule.component,\n async () => {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const plugins = this.aspectLoader.getPlugins(capsule.component, capsule.path);\n if (plugins.has()) {\n await this.compileIfNoDist(capsule, capsule.component);\n return plugins.load(MainRuntime.name);\n }\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const aspect = require(capsule.path);\n const scopeRuntime = await this.aspectLoader.getRuntimePath(capsule.component, capsule.path, 'scope');\n const mainRuntime = await this.aspectLoader.getRuntimePath(capsule.component, capsule.path, MainRuntime.name);\n const runtimePath = scopeRuntime || mainRuntime;\n // eslint-disable-next-line global-require, import/no-dynamic-require\n if (runtimePath) require(runtimePath);\n // eslint-disable-next-line global-require, import/no-dynamic-require\n return aspect;\n },\n capsule\n );\n });\n }\n\n private async compileIfNoDist(capsule: Capsule, component: Component) {\n const env = this.envs.getEnv(component);\n const compiler: Compiler = env.env.getCompiler();\n const distDir = compiler?.distDir || DEFAULT_DIST_DIRNAME;\n const distExists = existsSync(join(capsule.path, distDir));\n if (distExists) return;\n\n const compiledCode = component.filesystem.files.flatMap((file) => {\n if (!compiler.isFileSupported(file.path)) {\n return [\n {\n outputText: file.contents.toString('utf8'),\n outputPath: file.path,\n },\n ];\n }\n\n if (compiler.transpileFile) {\n return compiler.transpileFile(file.contents.toString('utf8'), {\n filePath: file.path,\n componentDir: capsule.path,\n });\n }\n\n return [];\n });\n\n await Promise.all(\n compact(compiledCode).map((compiledFile) => {\n const path = compiler.getDistPathBySrcPath(compiledFile.outputPath);\n return capsule?.outputFile(path, compiledFile.outputText);\n })\n );\n }\n\n private async tryCompile(requirableAspect: RequireableComponent) {\n if (requirableAspect.capsule) return this.compileIfNoDist(requirableAspect.capsule, requirableAspect.component);\n return undefined;\n }\n\n async requireAspects(components: Component[], throwOnError = false): Promise<Array<ExtensionManifest | Aspect>> {\n const requireableExtensions = await this.getResolvedAspects(components);\n if (!requireableExtensions) {\n return [];\n }\n let error: any;\n let erroredId = '';\n const requireWithCatch = async (requireableAspects: RequireableComponent[]) => {\n error = undefined;\n try {\n const manifests = await mapSeries(requireableAspects, async (requireableExtension) => {\n try {\n return await this.aspectLoader.doRequire(requireableExtension);\n } catch (err: any) {\n erroredId = requireableExtension.component.id.toString();\n if (err.code === 'MODULE_NOT_FOUND') {\n try {\n await this.tryCompile(requireableExtension);\n return await this.aspectLoader.doRequire(requireableExtension);\n } catch (newErr: any) {\n error = newErr;\n throw newErr;\n }\n }\n error = err;\n throw err;\n }\n });\n return manifests;\n } catch (err) {\n return null;\n }\n };\n const manifests = await requireWithCatch(requireableExtensions);\n if (!error) {\n return compact(manifests);\n }\n if (error.code === 'MODULE_NOT_FOUND') {\n this.logger.warn(\n `failed loading aspects from capsules due to MODULE_NOT_FOUND error, re-creating the capsules and trying again`\n );\n const resolvedAspectsAgain = await this.getResolvedAspects(components, {\n skipIfExists: false,\n });\n const manifestAgain = await requireWithCatch(resolvedAspectsAgain);\n if (!error) {\n return compact(manifestAgain);\n }\n }\n\n this.aspectLoader.handleExtensionLoadingError(error, erroredId, throwOnError);\n return [];\n }\n\n getAspectCapsulePath() {\n return `${this.path}-aspects`;\n }\n\n private async resolveUserAspects(runtimeName?: string, userAspectsIds?: ComponentID[]): Promise<AspectDefinition[]> {\n if (!userAspectsIds || !userAspectsIds.length) return [];\n const components = await this.getMany(userAspectsIds);\n const network = await this.isolator.isolateComponents(\n userAspectsIds,\n {\n baseDir: this.getAspectCapsulePath(),\n skipIfExists: true,\n // for some reason this needs to be false, otherwise tagging components in some workspaces\n // result in error during Preview task:\n // \"No matching version found for <some-component-on-the-workspace>\"\n seedersOnly: false,\n includeFromNestedHosts: true,\n installOptions: { copyPeerToRuntimeOnRoot: true },\n host: this,\n },\n this.legacyScope\n );\n const capsules = network.seedersCapsules;\n const aspectDefs = await this.aspectLoader.resolveAspects(components, async (component) => {\n const capsule = capsules.getCapsule(component.id);\n if (!capsule) throw new Error(`failed loading aspect: ${component.id.toString()}`);\n const localPath = capsule.path;\n\n return {\n aspectPath: localPath,\n runtimePath: runtimeName ? await this.aspectLoader.getRuntimePath(component, localPath, runtimeName) : null,\n };\n });\n return aspectDefs;\n }\n\n async resolveAspects(runtimeName?: string, componentIds?: ComponentID[]): Promise<AspectDefinition[]> {\n const userAspectsIds = componentIds || (await this.resolveMultipleComponentIds(this.aspectLoader.getUserAspects()));\n const withoutLocalAspects = userAspectsIds.filter((aspectId) => {\n return !this.localAspects.find((localAspect) => {\n return localAspect.includes(aspectId.fullName.replace('/', '.'));\n });\n });\n const userAspectsDefs = await this.resolveUserAspects(runtimeName, withoutLocalAspects);\n const localResolved = await this.resolveLocalAspects(this.localAspects, runtimeName);\n const coreAspects = await this.aspectLoader.getCoreAspectDefs(runtimeName);\n\n const allDefs = userAspectsDefs.concat(coreAspects).concat(localResolved);\n const uniqDefs = uniqBy(allDefs, (def) => `${def.aspectPath}-${def.runtimePath}`);\n let defs = uniqDefs;\n if (runtimeName) {\n defs = defs.filter((def) => def.runtimePath);\n }\n\n return defs;\n }\n\n async getLegacyGraph(ids?: ComponentID[]): Promise<LegacyGraph> {\n if (!ids || ids.length < 1) ids = (await this.list()).map((comp) => comp.id) || [];\n const legacyIds = ids.map((id) => {\n let bitId = id._legacy;\n // The resolve bitId in scope will remove the scope name in case it's the same as the scope\n // We restore it back to use it correctly in the legacy code.\n if (!bitId.hasScope()) {\n bitId = bitId.changeScope(this.legacyScope?.name);\n }\n return bitId;\n });\n\n const legacyGraph = await buildOneGraphForComponentsUsingScope(legacyIds, this.legacyScope);\n return legacyGraph;\n }\n\n /**\n * import components into the scope.\n */\n async import(\n ids: ComponentID[],\n {\n useCache = true,\n throwIfNotExist = false,\n reFetchUnBuiltVersion = true,\n }: {\n /**\n * if the component exists locally, don't go to the server to search for updates.\n */\n useCache?: boolean;\n throwIfNotExist?: boolean;\n /**\n * if the Version objects exists locally, but its `buildStatus` is Pending or Failed, reach the remote to find\n * whether the version was already built there.\n */\n reFetchUnBuiltVersion?: boolean;\n } = {}\n ): Promise<Component[]> {\n const legacyIds = ids.map((id) => {\n const legacyId = id._legacy;\n if (legacyId.scope === this.name) return legacyId.changeScope(null);\n return legacyId;\n });\n\n const withoutOwnScopeAndLocals = legacyIds.filter((id) => {\n return id.scope !== this.name && id.hasScope();\n });\n await this.legacyScope.import(ComponentsIds.fromArray(withoutOwnScopeAndLocals), useCache, reFetchUnBuiltVersion);\n\n return this.getMany(ids, throwIfNotExist);\n }\n\n async get(id: ComponentID): Promise<Component | undefined> {\n return this.componentLoader.get(id);\n }\n\n async getFromConsumerComponent(consumerComponent: ConsumerComponent): Promise<Component> {\n return this.componentLoader.getFromConsumerComponent(consumerComponent);\n }\n\n /**\n * get a component from a remote without importing it\n */\n async getRemoteComponent(id: ComponentID): Promise<Component> {\n return this.componentLoader.getRemoteComponent(id);\n }\n\n /**\n * list all components in the scope.\n */\n async list(filter?: { offset: number; limit: number }, includeCache = false): Promise<Component[]> {\n const componentsIds = await this.listIds(includeCache);\n\n return this.getMany(\n filter && filter.limit ? slice(componentsIds, filter.offset, filter.offset + filter.limit) : componentsIds\n );\n }\n\n /**\n * for now, list of invalid components are mostly useful for the workspace.\n * in the future, this can return components that failed to load in the scope due to objects file\n * corruption or similar issues.\n */\n async listInvalid() {\n return [];\n }\n\n /**\n * get ids of all scope components.\n * @param includeCache whether or not include components that their scope-name is different than the current scope-name\n */\n async listIds(includeCache = false): Promise<ComponentID[]> {\n const allModelComponents = await this.legacyScope.list();\n const modelComponentsToList = includeCache\n ? allModelComponents\n : allModelComponents.filter((modelComponent) => this.exists(modelComponent));\n\n const ids = modelComponentsToList.map((component) =>\n ComponentID.fromLegacy(component.toBitIdWithLatestVersion(), component.scope || this.name)\n );\n this.logger.debug(`scope listIds: componentsIds after filter scope: ${JSON.stringify(ids, undefined, 2)}`);\n return ids;\n }\n\n /**\n * Check if a specific id exist in the scope\n * @param componentId\n */\n async hasId(componentId: ComponentID, includeCache = false): Promise<boolean> {\n if (!includeCache && componentId.scope !== this.name) return false;\n const opts = {\n includeOrphaned: true,\n includeVersion: true,\n };\n\n return this.legacyScope.hasId(componentId._legacy, opts);\n }\n\n async hasIdNested(componentId: ComponentID, includeCache = false): Promise<boolean> {\n return this.hasId(componentId, includeCache);\n }\n\n /**\n * determine whether a component exists in the scope.\n */\n exists(modelComponent: ModelComponent) {\n return modelComponent.scope === this.name;\n }\n\n async getMany(ids: ComponentID[], throwIfNotExist = false): Promise<Component[]> {\n const idsWithoutEmpty = compact(ids);\n const componentsP = mapSeries(idsWithoutEmpty, async (id: ComponentID) => {\n return throwIfNotExist ? this.getOrThrow(id) : this.get(id);\n });\n const components = await componentsP;\n return compact(components);\n }\n\n /**\n * load components from a scope and load their aspects\n */\n async loadMany(ids: ComponentID[]): Promise<Component[]> {\n const components = await mapSeries(ids, (id) => this.load(id));\n return compact(components);\n }\n\n /**\n * get a component and throw an exception if not found.\n * @param id component id\n */\n async getOrThrow(id: ComponentID): Promise<Component> {\n const component = await this.get(id);\n if (!component) throw new ComponentNotFound(id);\n return component;\n }\n\n /**\n * returns a specific state of a component.\n * @param id component ID.\n * @param hash state hash.\n */\n async getState(id: ComponentID, hash: string): Promise<State> {\n return this.componentLoader.getState(id, hash);\n }\n\n async getSnap(id: ComponentID, hash: string): Promise<Snap> {\n return this.componentLoader.getSnap(id, hash);\n }\n\n async getLogs(id: ComponentID, shortHash = false): Promise<ComponentLog[]> {\n return this.legacyScope.loadComponentLogs(id._legacy, shortHash);\n }\n\n /**\n * resolve a component ID.\n * @param id component ID.\n */\n async resolveComponentId(id: string | ComponentID | BitId): Promise<ComponentID> {\n const idStr = id.toString();\n const component = await this.legacyScope.loadModelComponentByIdStr(idStr);\n const getIdToCheck = () => {\n if (component) return idStr; // component exists in the scope with the scope-name.\n if (idStr.startsWith(`${this.name}/`)) {\n // component with the full name doesn't exist in the scope, it might be locally tagged\n return idStr.replace(`${this.name}/`, '');\n }\n return idStr;\n };\n const IdToCheck = getIdToCheck();\n const legacyId = id instanceof BitId ? id : await this.legacyScope.getParsedId(IdToCheck);\n if (!legacyId.scope) return ComponentID.fromLegacy(legacyId, this.name);\n return ComponentID.fromLegacy(legacyId);\n }\n\n async resolveMultipleComponentIds(ids: Array<string | ComponentID | BitId>) {\n return Promise.all(ids.map(async (id) => this.resolveComponentId(id)));\n }\n\n /**\n * load components into the scope through a variants pattern.\n */\n async byPattern(patterns: string[], scope = '**'): Promise<Component[]> {\n const ids = await this.listIds(true);\n const finalPatterns = patterns.map((pattern) => `${scope}/${pattern || '**'}`);\n const targetIds = ids.filter((id) => {\n return finalPatterns.some((pattern) => isMatchNamespacePatternItem(id.toStringWithoutVersion(), pattern).match);\n });\n\n const components = await this.getMany(targetIds);\n return components;\n }\n\n async getExactVersionBySemverRange(id: ComponentID, range: string): Promise<string | undefined> {\n const modelComponent = await this.legacyScope.getModelComponent(id._legacy);\n const versions = modelComponent.listVersions();\n return semver.maxSatisfying<string>(versions, range, { includePrerelease: true })?.toString();\n }\n\n async resumeExport(exportId: string, remotes: string[]): Promise<string[]> {\n return resumeExport(this.legacyScope, exportId, remotes);\n }\n\n async resolveId(id: string): Promise<ComponentID> {\n const legacyId = await this.legacyScope.getParsedId(id);\n return ComponentID.fromLegacy(legacyId);\n }\n\n // TODO: add new API for this\n async _legacyRemotes(): Promise<Remotes> {\n return getScopeRemotes(this.legacyScope);\n }\n\n /**\n * get a component and load its aspect\n */\n async load(id: ComponentID): Promise<Component | undefined> {\n const component = await this.get(id);\n if (!component) return undefined;\n const aspectIds = component.state.aspects.ids;\n // load components from type aspects as aspects.\n if (this.aspectLoader.isAspectComponent(component)) {\n aspectIds.push(component.id.toString());\n }\n await this.loadAspects(aspectIds, true);\n\n return component;\n }\n\n async loadComponentsAspect(component: Component) {\n const aspectIds = component.state.aspects.ids;\n await this.loadAspects(aspectIds, true);\n }\n\n /**\n * declare the slots of scope extension.\n */\n static slots = [\n Slot.withType<OnTag>(),\n Slot.withType<OnPostPut>(),\n Slot.withType<OnPostDelete>(),\n Slot.withType<OnPostExport>(),\n Slot.withType<OnPostObjectsPersist>(),\n Slot.withType<OnPreFetchObjects>(),\n ];\n static runtime = MainRuntime;\n\n static dependencies = [\n ComponentAspect,\n UIAspect,\n GraphqlAspect,\n CLIAspect,\n IsolatorAspect,\n AspectLoaderAspect,\n ExpressAspect,\n LoggerAspect,\n EnvsAspect,\n ConfigAspect,\n ];\n\n static defaultConfig: ScopeConfig = {\n httpTimeOut: 600000,\n };\n\n static async provider(\n [componentExt, ui, graphql, cli, isolator, aspectLoader, express, loggerMain, envs, configMain]: [\n ComponentMain,\n UiMain,\n GraphqlMain,\n CLIMain,\n IsolatorMain,\n AspectLoaderMain,\n ExpressMain,\n LoggerMain,\n EnvsMain,\n ConfigMain\n ],\n config: ScopeConfig,\n [tagSlot, postPutSlot, postDeleteSlot, postExportSlot, postObjectsPersistSlot, preFetchObjectsSlot]: [\n TagRegistry,\n OnPostPutSlot,\n OnPostDeleteSlot,\n OnPostExportSlot,\n OnPostObjectsPersistSlot,\n OnPreFetchObjectsSlot\n ],\n harmony: Harmony\n ) {\n const bitConfig: any = harmony.config.get('teambit.harmony/bit');\n const legacyScope = await loadScopeIfExist(bitConfig?.cwd);\n if (!legacyScope) {\n return undefined;\n }\n\n const logger = loggerMain.createLogger(ScopeAspect.id);\n const scope = new ScopeMain(\n harmony,\n legacyScope,\n componentExt,\n config,\n tagSlot,\n postPutSlot,\n postDeleteSlot,\n postExportSlot,\n postObjectsPersistSlot,\n preFetchObjectsSlot,\n isolator,\n aspectLoader,\n logger,\n envs\n );\n cli.registerOnStart(async (hasWorkspace: boolean) => {\n if (hasWorkspace) return;\n await scope.loadAspects(aspectLoader.getNotLoadedConfiguredExtensions());\n });\n\n const onPutHook = async (ids: string[], lanes: Lane[], authData?: AuthData): Promise<void> => {\n logger.debug(`onPutHook, started. (${ids.length} components)`);\n scope.componentLoader.clearCache();\n const componentIds = await scope.resolveMultipleComponentIds(ids);\n const fns = postPutSlot.values();\n const data = {\n ids: componentIds,\n lanes,\n };\n const metadata = { auth: authData };\n await Promise.all(fns.map(async (fn) => fn(data, metadata)));\n logger.debug(`onPutHook, completed. (${ids.length} components)`);\n };\n\n const getAuthData = (): AuthData | undefined => {\n const token = Http.getToken();\n return token ? { type: DEFAULT_AUTH_TYPE, credentials: token } : undefined;\n };\n\n const onPostExportHook = async (ids: BitId[], lanes: Lane[]): Promise<void> => {\n logger.debug(`onPostExportHook, started. (${ids.length} components)`);\n const componentIds = await scope.resolveMultipleComponentIds(ids);\n const fns = postExportSlot.values();\n const data = {\n ids: componentIds,\n lanes,\n };\n const metadata = { auth: getAuthData() };\n await Promise.all(fns.map(async (fn) => fn(data, metadata)));\n logger.debug(`onPostExportHook, completed. (${ids.length} components)`);\n };\n\n const onPostObjectsPersistHook = async (): Promise<void> => {\n logger.debug(`onPostObjectsPersistHook, started`);\n const fns = postObjectsPersistSlot.values();\n const metadata = { auth: getAuthData() };\n await Promise.all(fns.map(async (fn) => fn(undefined, metadata)));\n logger.debug(`onPostObjectsPersistHook, completed`);\n };\n\n ExportPersist.onPutHook = onPutHook;\n PostSign.onPutHook = onPutHook;\n Scope.onPostExport = onPostExportHook;\n Repository.onPostObjectsPersist = onPostObjectsPersistHook;\n\n configMain?.registerPreAddingAspectsSlot?.(async (compIds) => {\n const loadedIds = await scope.loadAspects(compIds, true);\n // find the full component-ids including versions in the load-aspects results.\n // we need it for bit-use to be added to the config file.\n return compIds.map((compId) => {\n const loaded = loadedIds.find((loadedId) => loadedId.startsWith(`${compId}@`));\n return loaded || compId;\n });\n });\n\n express.register([\n new PutRoute(scope, postPutSlot),\n new FetchRoute(scope, logger),\n new ActionRoute(scope),\n new DeleteRoute(scope),\n ]);\n // @ts-ignore - @ran to implement the missing functions and remove it\n ui.registerUiRoot(new ScopeUIRoot(scope));\n graphql.register(scopeSchema(scope));\n componentExt.registerHost(scope);\n\n return scope;\n }\n}\n\nScopeAspect.addRuntime(ScopeMain);\n"]}
@@ -13,6 +13,7 @@ import { CommandBarUI, ComponentSearcher } from '@teambit/command-bar';
13
13
  import { ScopeModel } from '@teambit/scope.models.scope-model';
14
14
  export declare type ScopeBadge = ComponentType;
15
15
  export declare type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;
16
+ export declare type ContextSlot = SlotRegistry<ScopeContextType[]>;
16
17
  export declare type ScopeContextType = ComponentType<{
17
18
  scope: ScopeModel;
18
19
  children: ReactNode;
@@ -59,6 +60,10 @@ export declare class ScopeUI {
59
60
  * overview line slot to add new lines beneath the overview section
60
61
  */
61
62
  private overviewSlot;
63
+ /**
64
+ * add a new context to ui
65
+ */
66
+ private contextSlot;
62
67
  constructor(
63
68
  /**
64
69
  * route slot.
@@ -87,7 +92,11 @@ export declare class ScopeUI {
87
92
  /**
88
93
  * overview line slot to add new lines beneath the overview section
89
94
  */
90
- overviewSlot: OverviewLineSlot);
95
+ overviewSlot: OverviewLineSlot,
96
+ /**
97
+ * add a new context to ui
98
+ */
99
+ contextSlot: ContextSlot);
91
100
  private setSidebarToggle;
92
101
  /**
93
102
  * register a new badge into the scope overview.
@@ -125,12 +134,11 @@ export declare class ScopeUI {
125
134
  * register metadata.
126
135
  */
127
136
  registerMetadata(): void;
128
- private _context;
129
137
  /**
130
138
  * add a new context to the scope.
131
139
  */
132
- addContext(context: ScopeContextType): void;
133
- getContext(): ScopeContextType | undefined;
140
+ addContext(...context: ScopeContextType[]): this;
141
+ private getContext;
134
142
  registerMenuItem: (menuItems: MenuItem[]) => void;
135
143
  /**
136
144
  * register a sidebar Widget for the scope
@@ -148,14 +156,14 @@ export declare class ScopeUI {
148
156
  static runtime: import("@teambit/harmony").RuntimeDefinition;
149
157
  static slots: (((registerFn: () => string) => SlotRegistry<RouteProps<string, {
150
158
  [x: string]: string | undefined;
151
- }>>) | ((registerFn: () => string) => SlotRegistry<ComponentTreeNode>) | ((registerFn: () => string) => SlotRegistry<MenuItemSlot>) | ((registerFn: () => string) => SlotRegistry<SidebarItemSlot>) | ((registerFn: () => string) => SlotRegistry<ScopeBadge>) | ((registerFn: () => string) => SlotRegistry<MenuWidget[]>) | ((registerFn: () => string) => SlotRegistry<CornerSlot>))[];
159
+ }>>) | ((registerFn: () => string) => SlotRegistry<ComponentTreeNode>) | ((registerFn: () => string) => SlotRegistry<MenuItemSlot>) | ((registerFn: () => string) => SlotRegistry<SidebarItemSlot>) | ((registerFn: () => string) => SlotRegistry<ScopeBadge>) | ((registerFn: () => string) => SlotRegistry<MenuWidget[]>) | ((registerFn: () => string) => SlotRegistry<CornerSlot>) | ((registerFn: () => string) => SlotRegistry<ContextSlot>))[];
152
160
  static provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI]: [
153
161
  UiUI,
154
162
  ComponentUI,
155
163
  SidebarUI,
156
164
  CommandBarUI,
157
165
  ReactRouterUI
158
- ], config: any, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot,]: [
166
+ ], config: any, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot,]: [
159
167
  RouteSlot,
160
168
  RouteSlot,
161
169
  SidebarSlot,
@@ -164,7 +172,8 @@ export declare class ScopeUI {
164
172
  MenuItemSlot,
165
173
  SidebarItemSlot,
166
174
  CornerSlot,
167
- OverviewLineSlot
175
+ OverviewLineSlot,
176
+ ContextSlot
168
177
  ]): Promise<ScopeUI>;
169
178
  }
170
179
  export default ScopeUI;
@@ -21,6 +21,16 @@ function _defineProperty2() {
21
21
  return data;
22
22
  }
23
23
 
24
+ function _lodash() {
25
+ const data = _interopRequireDefault(require("lodash.flatten"));
26
+
27
+ _lodash = function () {
28
+ return data;
29
+ };
30
+
31
+ return data;
32
+ }
33
+
24
34
  function _component() {
25
35
  const data = require("@teambit/component");
26
36
 
@@ -174,7 +184,11 @@ class ScopeUI {
174
184
  /**
175
185
  * overview line slot to add new lines beneath the overview section
176
186
  */
177
- overviewSlot) {
187
+ overviewSlot,
188
+ /**
189
+ * add a new context to ui
190
+ */
191
+ contextSlot) {
178
192
  this.routeSlot = routeSlot;
179
193
  this.componentUi = componentUi;
180
194
  this.menuSlot = menuSlot;
@@ -188,8 +202,8 @@ class ScopeUI {
188
202
  this.menuItemSlot = menuItemSlot;
189
203
  this.cornerSlot = cornerSlot;
190
204
  this.overviewSlot = overviewSlot;
205
+ this.contextSlot = contextSlot;
191
206
  (0, _defineProperty2().default)(this, "setSidebarToggle", () => {});
192
- (0, _defineProperty2().default)(this, "_context", void 0);
193
207
  (0, _defineProperty2().default)(this, "registerMenuItem", menuItems => {
194
208
  this.menuItemSlot.register(menuItems);
195
209
  });
@@ -307,17 +321,19 @@ class ScopeUI {
307
321
 
308
322
 
309
323
  registerMetadata() {}
310
-
311
324
  /**
312
325
  * add a new context to the scope.
313
326
  */
314
- addContext(context) {
315
- this._context = () => context;
327
+
328
+
329
+ addContext(...context) {
330
+ this.contextSlot.register(context);
331
+ return this;
316
332
  }
317
333
 
318
334
  getContext() {
319
- if (!this._context) return undefined;
320
- return this._context();
335
+ const contexts = this.contextSlot.values();
336
+ return (0, _lodash().default)(contexts);
321
337
  }
322
338
 
323
339
  uiRoot() {
@@ -353,9 +369,9 @@ class ScopeUI {
353
369
  /** registers available components */
354
370
 
355
371
 
356
- static async provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI], config, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot]) {
372
+ static async provider([ui, componentUi, sidebar, commandBarUI, reactRouterUI], config, [routeSlot, menuSlot, sidebarSlot, scopeBadgeSlot, menuWidgetSlot, menuItemSlot, sidebarItemSlot, cornerSlot, overviewSlot, contextSlot]) {
357
373
  const componentSearcher = new (_commandBar().ComponentSearcher)(reactRouterUI.navigateTo);
358
- const scopeUi = new ScopeUI(routeSlot, componentUi, menuSlot, sidebar, sidebarSlot, commandBarUI, componentSearcher, scopeBadgeSlot, menuWidgetSlot, sidebarItemSlot, menuItemSlot, cornerSlot, overviewSlot);
374
+ const scopeUi = new ScopeUI(routeSlot, componentUi, menuSlot, sidebar, sidebarSlot, commandBarUI, componentSearcher, scopeBadgeSlot, menuWidgetSlot, sidebarItemSlot, menuItemSlot, cornerSlot, overviewSlot, contextSlot);
359
375
  scopeUi.registerExplicitRoutes();
360
376
  scopeUi.registerMenuItem(scopeUi.menuItems);
361
377
  scopeUi.registerMenuWidget(() => /*#__PURE__*/_react().default.createElement(_menu().ScopeUseBox, null));
@@ -373,7 +389,7 @@ class ScopeUI {
373
389
  exports.ScopeUI = ScopeUI;
374
390
  (0, _defineProperty2().default)(ScopeUI, "dependencies", [_ui().UIAspect, _component().ComponentAspect, _sidebar().SidebarAspect, _commandBar().default, _reactRouter().default]);
375
391
  (0, _defineProperty2().default)(ScopeUI, "runtime", _ui().UIRuntime);
376
- (0, _defineProperty2().default)(ScopeUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
392
+ (0, _defineProperty2().default)(ScopeUI, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
377
393
  var _default = ScopeUI;
378
394
  exports.default = _default;
379
395
 
@@ -1 +1 @@
1
- {"version":3,"sources":["scope.ui.runtime.tsx"],"names":["ScopeUI","constructor","routeSlot","componentUi","menuSlot","sidebar","sidebarSlot","commandBarUI","componentSearcher","scopeBadgeSlot","menuWidgetSlot","sidebarItemSlot","menuItemSlot","cornerSlot","overviewSlot","menuItems","register","componentTreeNodes","map","componentTreeNode","links","components","update","category","title","keyChar","handler","run","registerBadge","badges","registerOverviewLine","lines","registerRoute","route","registerExplicitRoutes","path","routePath","children","getComponentUI","ScopeAspect","id","getMenu","exact","registerMenuWidget","registerCorner","corner","replaceOverview","replaceDescription","replaceMetadataSection","registerMetadataItem","replaceComponentGrid","registerMetadata","addContext","context","_context","getContext","undefined","uiRoot","registerDrawer","ComponentsDrawer","addSearcher","setKeyBindHandler","addCommand","displayName","keybinding","setSidebarToggle","routes","provider","ui","reactRouterUI","config","ComponentSearcher","navigateTo","scopeUi","registerMenuItem","registerRoot","bind","registerSidebarLink","UIAspect","ComponentAspect","SidebarAspect","CommandBarAspect","ReactRouterAspect","UIRuntime","Slot","withType","addRuntime"],"mappings":"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","sourcesContent":["import type { ComponentUI, ComponentModel } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport ReactRouterAspect, { ReactRouterUI } from '@teambit/react-router';\nimport { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { SidebarAspect, SidebarUI, SidebarItem, SidebarItemSlot } from '@teambit/sidebar';\nimport { ComponentTreeNode } from '@teambit/component-tree';\nimport { UIAspect, UIRootUI as UIRoot, UIRuntime, UiUI } from '@teambit/ui';\nimport React, { ComponentType, ReactNode } from 'react';\nimport { MenuItemSlot, MenuItem } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { RouteProps } from 'react-router-dom';\nimport { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';\nimport { MenuLinkItem } from '@teambit/design.ui.surfaces.menu.link-item';\nimport CommandBarAspect, { CommandBarUI, ComponentSearcher, CommandHandler } from '@teambit/command-bar';\nimport { ScopeModel } from '@teambit/scope.models.scope-model';\nimport { ScopeMenu, ScopeUseBox } from './ui/menu';\nimport { ScopeAspect } from './scope.aspect';\nimport { Scope } from './ui/scope';\nimport { ComponentsDrawer } from './ui/components-drawer';\n\nexport type ScopeBadge = ComponentType;\n\nexport type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;\n\nexport type ScopeContextType = ComponentType<{ scope: ScopeModel; children: ReactNode }>;\n\nexport type SidebarSlot = SlotRegistry<ComponentTreeNode>;\n\nexport type ScopeOverview = ComponentType;\n\nexport type ScopeOverviewSlot = SlotRegistry<ScopeOverview>;\n\nexport type Corner = ComponentType;\n\nexport type CornerSlot = SlotRegistry<Corner>;\n\nexport type OverviewLine = ComponentType;\n\nexport type OverviewLineSlot = SlotRegistry<OverviewLine[]>;\n\nexport class ScopeUI {\n constructor(\n /**\n * route slot.\n */\n private routeSlot: RouteSlot,\n\n /**\n * component ui extension.\n */\n private componentUi: ComponentUI,\n /**\n * menu slot\n */\n private menuSlot: RouteSlot,\n\n private sidebar: SidebarUI,\n\n private sidebarSlot: SidebarSlot,\n\n private commandBarUI: CommandBarUI,\n\n private componentSearcher: ComponentSearcher,\n\n private scopeBadgeSlot: ScopeBadgeSlot,\n\n private menuWidgetSlot: MenuWidgetSlot,\n\n /**\n * sidebar link slot\n */\n private sidebarItemSlot: SidebarItemSlot,\n\n /**\n * main dropdown item slot\n */\n private menuItemSlot: MenuItemSlot,\n\n /**\n * corner slot\n */\n private cornerSlot: CornerSlot,\n\n /**\n * overview line slot to add new lines beneath the overview section\n */\n private overviewSlot: OverviewLineSlot\n ) {}\n\n private setSidebarToggle: (updated: CommandHandler) => void = () => {};\n\n /**\n * register a new badge into the scope overview.\n */\n registerBadge(...badges: ScopeBadge[]) {\n this.scopeBadgeSlot.register(badges);\n return this;\n }\n\n /**\n * register a new line beneath the scope overview section.\n */\n registerOverviewLine(...lines: OverviewLine[]) {\n this.overviewSlot.register(lines);\n return this;\n }\n\n /**\n * register a route to the scope.\n */\n registerRoute(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n private registerExplicitRoutes() {\n this.routeSlot.register({\n path: this.componentUi.routePath,\n children: this.componentUi.getComponentUI(ScopeAspect.id),\n });\n\n this.menuSlot.register([\n {\n path: this.componentUi.routePath,\n children: this.componentUi.getMenu(ScopeAspect.id),\n },\n {\n exact: true,\n path: '/',\n children: <ScopeMenu widgetSlot={this.menuWidgetSlot} menuItemSlot={this.menuItemSlot} />,\n },\n ]);\n }\n\n registerMenuWidget(...menuItems: MenuWidget[]) {\n this.menuWidgetSlot.register(menuItems);\n }\n\n registerCorner(corner: Corner) {\n this.cornerSlot.register(corner);\n }\n\n /**\n * register a scope overview.\n */\n replaceOverview() {}\n\n /**\n * register description.\n */\n replaceDescription() {}\n\n /**\n * register metadata section.\n */\n replaceMetadataSection() {}\n\n /**\n * register a metadata item.\n */\n registerMetadataItem() {}\n\n replaceComponentGrid() {}\n\n /**\n * register metadata.\n */\n registerMetadata() {}\n\n private _context: () => ScopeContextType;\n\n /**\n * add a new context to the scope.\n */\n addContext(context: ScopeContextType) {\n this._context = () => context;\n }\n\n getContext() {\n if (!this._context) return undefined;\n return this._context();\n }\n\n registerMenuItem = (menuItems: MenuItem[]) => {\n this.menuItemSlot.register(menuItems);\n };\n\n /**\n * register a sidebar Widget for the scope\n */\n registerSidebarWidget = (componentTreeNodes: ComponentTreeNode[]) => {\n componentTreeNodes.map((componentTreeNode) => this.sidebarSlot.register(componentTreeNode));\n return this;\n };\n\n /**\n * register a sidebar link to the section above the drawers\n */\n registerSidebarLink = (...links: SidebarItem[]) => {\n this.sidebarItemSlot.register(links);\n };\n\n uiRoot(): UIRoot {\n this.sidebar.registerDrawer(new ComponentsDrawer(this.sidebarSlot));\n this.commandBarUI.addSearcher(this.componentSearcher);\n\n const [setKeyBindHandler] = this.commandBarUI.addCommand({\n id: 'sidebar.toggle', // TODO - extract to a component!\n handler: () => {},\n displayName: 'Toggle component list',\n keybinding: 'alt+s',\n });\n this.setSidebarToggle = setKeyBindHandler;\n\n return {\n routes: [\n {\n path: '/',\n children: (\n <Scope\n routeSlot={this.routeSlot}\n menuSlot={this.menuSlot}\n sidebar={<this.sidebar.render itemSlot={this.sidebarItemSlot} />}\n scopeUi={this}\n badgeSlot={this.scopeBadgeSlot}\n overviewLineSlot={this.overviewSlot}\n context={this.getContext()}\n onSidebarTogglerChange={this.setSidebarToggle}\n cornerSlot={this.cornerSlot}\n />\n ),\n },\n ],\n };\n }\n\n /** registers available components */\n setComponents = (components: ComponentModel[]) => {\n this.componentSearcher.update(components);\n };\n\n private menuItems: MenuItem[] = [\n {\n category: 'general',\n title: 'Open command bar',\n keyChar: 'mod+k',\n handler: () => this.commandBarUI?.run('command-bar.open'),\n },\n {\n category: 'general',\n title: 'Toggle component list',\n keyChar: 'alt+s',\n handler: () => this.commandBarUI?.run('sidebar.toggle'),\n },\n ];\n\n static dependencies = [UIAspect, ComponentAspect, SidebarAspect, CommandBarAspect, ReactRouterAspect];\n static runtime = UIRuntime;\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<RouteProps>(),\n Slot.withType<ComponentTreeNode>(),\n Slot.withType<ScopeBadge>(),\n Slot.withType<ScopeOverview>(),\n Slot.withType<MenuWidget[]>(),\n Slot.withType<MenuItemSlot>(),\n Slot.withType<CornerSlot>(),\n Slot.withType<OverviewLineSlot>(),\n Slot.withType<SidebarItemSlot>(),\n ];\n\n static async provider(\n [ui, componentUi, sidebar, commandBarUI, reactRouterUI]: [\n UiUI,\n ComponentUI,\n SidebarUI,\n CommandBarUI,\n ReactRouterUI\n ],\n config,\n [\n routeSlot,\n menuSlot,\n sidebarSlot,\n scopeBadgeSlot,\n menuWidgetSlot,\n menuItemSlot,\n sidebarItemSlot,\n cornerSlot,\n overviewSlot,\n ]: [\n RouteSlot,\n RouteSlot,\n SidebarSlot,\n ScopeBadgeSlot,\n MenuWidgetSlot,\n MenuItemSlot,\n SidebarItemSlot,\n CornerSlot,\n OverviewLineSlot\n ]\n ) {\n const componentSearcher = new ComponentSearcher(reactRouterUI.navigateTo);\n const scopeUi = new ScopeUI(\n routeSlot,\n componentUi,\n menuSlot,\n sidebar,\n sidebarSlot,\n commandBarUI,\n componentSearcher,\n scopeBadgeSlot,\n menuWidgetSlot,\n sidebarItemSlot,\n menuItemSlot,\n cornerSlot,\n overviewSlot\n );\n scopeUi.registerExplicitRoutes();\n scopeUi.registerMenuItem(scopeUi.menuItems);\n scopeUi.registerMenuWidget(() => <ScopeUseBox />);\n ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));\n scopeUi.registerSidebarLink(() => (\n <MenuLinkItem exact href=\"/\" icon=\"comps\">\n Gallery\n </MenuLinkItem>\n ));\n\n return scopeUi;\n }\n}\n\nexport default ScopeUI;\n\nScopeAspect.addRuntime(ScopeUI);\n"]}
1
+ {"version":3,"sources":["scope.ui.runtime.tsx"],"names":["ScopeUI","constructor","routeSlot","componentUi","menuSlot","sidebar","sidebarSlot","commandBarUI","componentSearcher","scopeBadgeSlot","menuWidgetSlot","sidebarItemSlot","menuItemSlot","cornerSlot","overviewSlot","contextSlot","menuItems","register","componentTreeNodes","map","componentTreeNode","links","components","update","category","title","keyChar","handler","run","registerBadge","badges","registerOverviewLine","lines","registerRoute","route","registerExplicitRoutes","path","routePath","children","getComponentUI","ScopeAspect","id","getMenu","exact","registerMenuWidget","registerCorner","corner","replaceOverview","replaceDescription","replaceMetadataSection","registerMetadataItem","replaceComponentGrid","registerMetadata","addContext","context","getContext","contexts","values","uiRoot","registerDrawer","ComponentsDrawer","addSearcher","setKeyBindHandler","addCommand","displayName","keybinding","setSidebarToggle","routes","provider","ui","reactRouterUI","config","ComponentSearcher","navigateTo","scopeUi","registerMenuItem","registerRoot","bind","registerSidebarLink","UIAspect","ComponentAspect","SidebarAspect","CommandBarAspect","ReactRouterAspect","UIRuntime","Slot","withType","addRuntime"],"mappings":"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","sourcesContent":["import flatten from 'lodash.flatten';\nimport type { ComponentUI, ComponentModel } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport ReactRouterAspect, { ReactRouterUI } from '@teambit/react-router';\nimport { RouteSlot } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { SidebarAspect, SidebarUI, SidebarItem, SidebarItemSlot } from '@teambit/sidebar';\nimport { ComponentTreeNode } from '@teambit/component-tree';\nimport { UIAspect, UIRootUI as UIRoot, UIRuntime, UiUI } from '@teambit/ui';\nimport React, { ComponentType, ReactNode } from 'react';\nimport { MenuItemSlot, MenuItem } from '@teambit/ui-foundation.ui.main-dropdown';\nimport { RouteProps } from 'react-router-dom';\nimport { MenuWidget, MenuWidgetSlot } from '@teambit/ui-foundation.ui.menu';\nimport { MenuLinkItem } from '@teambit/design.ui.surfaces.menu.link-item';\nimport CommandBarAspect, { CommandBarUI, ComponentSearcher, CommandHandler } from '@teambit/command-bar';\nimport { ScopeModel } from '@teambit/scope.models.scope-model';\nimport { ScopeMenu, ScopeUseBox } from './ui/menu';\nimport { ScopeAspect } from './scope.aspect';\nimport { Scope } from './ui/scope';\nimport { ComponentsDrawer } from './ui/components-drawer';\n\nexport type ScopeBadge = ComponentType;\n\nexport type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;\n\nexport type ContextSlot = SlotRegistry<ScopeContextType[]>;\n\nexport type ScopeContextType = ComponentType<{ scope: ScopeModel; children: ReactNode }>;\n\nexport type SidebarSlot = SlotRegistry<ComponentTreeNode>;\n\nexport type ScopeOverview = ComponentType;\n\nexport type ScopeOverviewSlot = SlotRegistry<ScopeOverview>;\n\nexport type Corner = ComponentType;\n\nexport type CornerSlot = SlotRegistry<Corner>;\n\nexport type OverviewLine = ComponentType;\n\nexport type OverviewLineSlot = SlotRegistry<OverviewLine[]>;\n\nexport class ScopeUI {\n constructor(\n /**\n * route slot.\n */\n private routeSlot: RouteSlot,\n\n /**\n * component ui extension.\n */\n private componentUi: ComponentUI,\n /**\n * menu slot\n */\n private menuSlot: RouteSlot,\n\n private sidebar: SidebarUI,\n\n private sidebarSlot: SidebarSlot,\n\n private commandBarUI: CommandBarUI,\n\n private componentSearcher: ComponentSearcher,\n\n private scopeBadgeSlot: ScopeBadgeSlot,\n\n private menuWidgetSlot: MenuWidgetSlot,\n\n /**\n * sidebar link slot\n */\n private sidebarItemSlot: SidebarItemSlot,\n\n /**\n * main dropdown item slot\n */\n private menuItemSlot: MenuItemSlot,\n\n /**\n * corner slot\n */\n private cornerSlot: CornerSlot,\n\n /**\n * overview line slot to add new lines beneath the overview section\n */\n private overviewSlot: OverviewLineSlot,\n\n /**\n * add a new context to ui\n */\n private contextSlot: ContextSlot\n ) {}\n\n private setSidebarToggle: (updated: CommandHandler) => void = () => {};\n\n /**\n * register a new badge into the scope overview.\n */\n registerBadge(...badges: ScopeBadge[]) {\n this.scopeBadgeSlot.register(badges);\n return this;\n }\n\n /**\n * register a new line beneath the scope overview section.\n */\n registerOverviewLine(...lines: OverviewLine[]) {\n this.overviewSlot.register(lines);\n return this;\n }\n\n /**\n * register a route to the scope.\n */\n registerRoute(route: RouteProps) {\n this.routeSlot.register(route);\n return this;\n }\n\n private registerExplicitRoutes() {\n this.routeSlot.register({\n path: this.componentUi.routePath,\n children: this.componentUi.getComponentUI(ScopeAspect.id),\n });\n\n this.menuSlot.register([\n {\n path: this.componentUi.routePath,\n children: this.componentUi.getMenu(ScopeAspect.id),\n },\n {\n exact: true,\n path: '/',\n children: <ScopeMenu widgetSlot={this.menuWidgetSlot} menuItemSlot={this.menuItemSlot} />,\n },\n ]);\n }\n\n registerMenuWidget(...menuItems: MenuWidget[]) {\n this.menuWidgetSlot.register(menuItems);\n }\n\n registerCorner(corner: Corner) {\n this.cornerSlot.register(corner);\n }\n\n /**\n * register a scope overview.\n */\n replaceOverview() {}\n\n /**\n * register description.\n */\n replaceDescription() {}\n\n /**\n * register metadata section.\n */\n replaceMetadataSection() {}\n\n /**\n * register a metadata item.\n */\n registerMetadataItem() {}\n\n replaceComponentGrid() {}\n\n /**\n * register metadata.\n */\n registerMetadata() {}\n\n /**\n * add a new context to the scope.\n */\n addContext(...context: ScopeContextType[]) {\n this.contextSlot.register(context);\n return this;\n }\n\n private getContext() {\n const contexts = this.contextSlot.values();\n return flatten(contexts);\n }\n\n registerMenuItem = (menuItems: MenuItem[]) => {\n this.menuItemSlot.register(menuItems);\n };\n\n /**\n * register a sidebar Widget for the scope\n */\n registerSidebarWidget = (componentTreeNodes: ComponentTreeNode[]) => {\n componentTreeNodes.map((componentTreeNode) => this.sidebarSlot.register(componentTreeNode));\n return this;\n };\n\n /**\n * register a sidebar link to the section above the drawers\n */\n registerSidebarLink = (...links: SidebarItem[]) => {\n this.sidebarItemSlot.register(links);\n };\n\n uiRoot(): UIRoot {\n this.sidebar.registerDrawer(new ComponentsDrawer(this.sidebarSlot));\n this.commandBarUI.addSearcher(this.componentSearcher);\n\n const [setKeyBindHandler] = this.commandBarUI.addCommand({\n id: 'sidebar.toggle', // TODO - extract to a component!\n handler: () => {},\n displayName: 'Toggle component list',\n keybinding: 'alt+s',\n });\n this.setSidebarToggle = setKeyBindHandler;\n\n return {\n routes: [\n {\n path: '/',\n children: (\n <Scope\n routeSlot={this.routeSlot}\n menuSlot={this.menuSlot}\n sidebar={<this.sidebar.render itemSlot={this.sidebarItemSlot} />}\n scopeUi={this}\n badgeSlot={this.scopeBadgeSlot}\n overviewLineSlot={this.overviewSlot}\n context={this.getContext()}\n onSidebarTogglerChange={this.setSidebarToggle}\n cornerSlot={this.cornerSlot}\n />\n ),\n },\n ],\n };\n }\n\n /** registers available components */\n setComponents = (components: ComponentModel[]) => {\n this.componentSearcher.update(components);\n };\n\n private menuItems: MenuItem[] = [\n {\n category: 'general',\n title: 'Open command bar',\n keyChar: 'mod+k',\n handler: () => this.commandBarUI?.run('command-bar.open'),\n },\n {\n category: 'general',\n title: 'Toggle component list',\n keyChar: 'alt+s',\n handler: () => this.commandBarUI?.run('sidebar.toggle'),\n },\n ];\n\n static dependencies = [UIAspect, ComponentAspect, SidebarAspect, CommandBarAspect, ReactRouterAspect];\n static runtime = UIRuntime;\n static slots = [\n Slot.withType<RouteProps>(),\n Slot.withType<RouteProps>(),\n Slot.withType<ComponentTreeNode>(),\n Slot.withType<ScopeBadge>(),\n Slot.withType<ScopeOverview>(),\n Slot.withType<MenuWidget[]>(),\n Slot.withType<MenuItemSlot>(),\n Slot.withType<CornerSlot>(),\n Slot.withType<OverviewLineSlot>(),\n Slot.withType<SidebarItemSlot>(),\n Slot.withType<ContextSlot>(),\n ];\n\n static async provider(\n [ui, componentUi, sidebar, commandBarUI, reactRouterUI]: [\n UiUI,\n ComponentUI,\n SidebarUI,\n CommandBarUI,\n ReactRouterUI\n ],\n config,\n [\n routeSlot,\n menuSlot,\n sidebarSlot,\n scopeBadgeSlot,\n menuWidgetSlot,\n menuItemSlot,\n sidebarItemSlot,\n cornerSlot,\n overviewSlot,\n contextSlot,\n ]: [\n RouteSlot,\n RouteSlot,\n SidebarSlot,\n ScopeBadgeSlot,\n MenuWidgetSlot,\n MenuItemSlot,\n SidebarItemSlot,\n CornerSlot,\n OverviewLineSlot,\n ContextSlot\n ]\n ) {\n const componentSearcher = new ComponentSearcher(reactRouterUI.navigateTo);\n const scopeUi = new ScopeUI(\n routeSlot,\n componentUi,\n menuSlot,\n sidebar,\n sidebarSlot,\n commandBarUI,\n componentSearcher,\n scopeBadgeSlot,\n menuWidgetSlot,\n sidebarItemSlot,\n menuItemSlot,\n cornerSlot,\n overviewSlot,\n contextSlot\n );\n scopeUi.registerExplicitRoutes();\n scopeUi.registerMenuItem(scopeUi.menuItems);\n scopeUi.registerMenuWidget(() => <ScopeUseBox />);\n ui.registerRoot(scopeUi.uiRoot.bind(scopeUi));\n scopeUi.registerSidebarLink(() => (\n <MenuLinkItem exact href=\"/\" icon=\"comps\">\n Gallery\n </MenuLinkItem>\n ));\n\n return scopeUi;\n }\n}\n\nexport default ScopeUI;\n\nScopeAspect.addRuntime(ScopeUI);\n"]}
@@ -10,7 +10,7 @@ export declare type ScopeProps = {
10
10
  badgeSlot: ScopeBadgeSlot;
11
11
  overviewLineSlot: OverviewLineSlot;
12
12
  cornerSlot: CornerSlot;
13
- context?: ScopeContextType;
13
+ context: ScopeContextType[];
14
14
  onSidebarTogglerChange: (callback: () => void) => void;
15
15
  };
16
16
  /**
package/dist/ui/scope.js CHANGED
@@ -71,6 +71,16 @@ function _uiFoundationUi2() {
71
71
  return data;
72
72
  }
73
73
 
74
+ function _baseUiUtils() {
75
+ const data = require("@teambit/base-ui.utils.composer");
76
+
77
+ _baseUiUtils = function () {
78
+ return data;
79
+ };
80
+
81
+ return data;
82
+ }
83
+
74
84
  function _fullLoader() {
75
85
  const data = require("@teambit/legacy/dist/to-eject/full-loader");
76
86
 
@@ -166,7 +176,7 @@ function Scope({
166
176
  badgeSlot,
167
177
  overviewLineSlot,
168
178
  cornerSlot,
169
- context,
179
+ context = [],
170
180
  onSidebarTogglerChange
171
181
  }) {
172
182
  const {
@@ -182,17 +192,14 @@ function Scope({
182
192
 
183
193
  const CornerOverride = cornerSlot === null || cornerSlot === void 0 ? void 0 : cornerSlot.values()[0];
184
194
  scopeUi.setComponents(scope.components);
185
-
186
- const defaultContext = ({
187
- children
188
- }) => /*#__PURE__*/_react().default.createElement("div", null, children);
189
-
190
- const Context = context || defaultContext;
195
+ const Context = context.map(ctx => [ctx, {
196
+ scope
197
+ }]);
191
198
  onSidebarTogglerChange(handleSidebarToggle);
192
199
  return /*#__PURE__*/_react().default.createElement(_scopeUiHooks().ScopeProvider, {
193
200
  scope: scope
194
- }, /*#__PURE__*/_react().default.createElement(Context, {
195
- scope: scope
201
+ }, /*#__PURE__*/_react().default.createElement(_baseUiUtils().Composer, {
202
+ components: Context
196
203
  }, /*#__PURE__*/_react().default.createElement("div", {
197
204
  className: _scopeModule().default.scope
198
205
  }, /*#__PURE__*/_react().default.createElement(_uiFoundationUi2().TopBar, {
@@ -1 +1 @@
1
- {"version":3,"sources":["scope.tsx"],"names":["Scope","routeSlot","menuSlot","sidebar","scopeUi","badgeSlot","overviewLineSlot","cornerSlot","context","onSidebarTogglerChange","scope","isMobile","isSidebarOpen","handleSidebarToggle","x","sidebarOpenness","Layout","row","right","CornerOverride","values","setComponents","components","defaultContext","children","Context","styles","topbar","name","whiteCorner","main","splitter","e","stopPropagation"],"mappings":"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","sourcesContent":["import 'reset-css';\nimport { SplitPane, Pane, Layout } from '@teambit/base-ui.surfaces.split-pane.split-pane';\nimport { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Corner } from '@teambit/ui-foundation.ui.corner';\nimport { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';\nimport { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';\nimport { TopBar } from '@teambit/ui-foundation.ui.top-bar';\nimport { FullLoader } from '@teambit/legacy/dist/to-eject/full-loader';\nimport React, { useReducer } from 'react';\nimport { Route } from 'react-router-dom';\nimport { useIsMobile } from '@teambit/ui-foundation.ui.hooks.use-is-mobile';\nimport { ScopeProvider } from '@teambit/scope.ui.hooks.scope-context';\nimport { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';\nimport { ScopeOverview } from './scope-overview';\nimport styles from './scope.module.scss';\nimport ScopeUI, { ScopeBadgeSlot, ScopeContextType, CornerSlot, OverviewLineSlot } from '../scope.ui.runtime';\n\nexport type ScopeProps = {\n routeSlot: RouteSlot;\n menuSlot: RouteSlot;\n sidebar: JSX.Element;\n scopeUi: ScopeUI;\n badgeSlot: ScopeBadgeSlot;\n overviewLineSlot: OverviewLineSlot;\n cornerSlot: CornerSlot;\n context?: ScopeContextType;\n onSidebarTogglerChange: (callback: () => void) => void;\n};\n\n/**\n * root component of the scope\n */\nexport function Scope({\n routeSlot,\n menuSlot,\n sidebar,\n scopeUi,\n badgeSlot,\n overviewLineSlot,\n cornerSlot,\n context,\n onSidebarTogglerChange,\n}: ScopeProps) {\n const { scope } = useScopeQuery();\n const isMobile = useIsMobile();\n const [isSidebarOpen, handleSidebarToggle] = useReducer((x) => !x, !isMobile);\n const sidebarOpenness = isSidebarOpen ? Layout.row : Layout.right;\n if (!scope) {\n return <FullLoader />;\n }\n const CornerOverride = cornerSlot?.values()[0];\n scopeUi.setComponents(scope.components);\n const defaultContext = ({ children }) => <div>{children}</div>;\n const Context = context || defaultContext;\n\n onSidebarTogglerChange(handleSidebarToggle);\n\n return (\n <ScopeProvider scope={scope}>\n <Context scope={scope}>\n <div className={styles.scope}>\n <TopBar\n className={styles.topbar}\n Corner={() => {\n if (CornerOverride) return <CornerOverride />;\n return <Corner name={scope.name} className={styles.whiteCorner} />;\n }}\n menu={menuSlot}\n />\n\n <SplitPane className={styles.main} size={264} layout={sidebarOpenness}>\n <Pane className={styles.sidebar}>{sidebar}</Pane>\n <HoverSplitter className={styles.splitter}>\n <Collapser\n isOpen={isSidebarOpen}\n onMouseDown={(e) => e.stopPropagation()} // avoid split-pane drag\n onClick={handleSidebarToggle}\n tooltipContent={`${isSidebarOpen ? 'Hide' : 'Show'} side panel`}\n />\n </HoverSplitter>\n <Pane>\n <SlotRouter slot={routeSlot} />\n <Route exact path=\"/\">\n <ScopeOverview badgeSlot={badgeSlot} overviewSlot={overviewLineSlot} />\n </Route>\n </Pane>\n </SplitPane>\n </div>\n </Context>\n </ScopeProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["scope.tsx"],"names":["Scope","routeSlot","menuSlot","sidebar","scopeUi","badgeSlot","overviewLineSlot","cornerSlot","context","onSidebarTogglerChange","scope","isMobile","isSidebarOpen","handleSidebarToggle","x","sidebarOpenness","Layout","row","right","CornerOverride","values","setComponents","components","Context","map","ctx","styles","topbar","name","whiteCorner","main","splitter","e","stopPropagation"],"mappings":"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","sourcesContent":["import 'reset-css';\nimport { SplitPane, Pane, Layout } from '@teambit/base-ui.surfaces.split-pane.split-pane';\nimport { RouteSlot, SlotRouter } from '@teambit/ui-foundation.ui.react-router.slot-router';\nimport { Corner } from '@teambit/ui-foundation.ui.corner';\nimport { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';\nimport { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';\nimport { TopBar } from '@teambit/ui-foundation.ui.top-bar';\nimport { Composer, ComponentTuple } from '@teambit/base-ui.utils.composer';\nimport { FullLoader } from '@teambit/legacy/dist/to-eject/full-loader';\nimport React, { useReducer } from 'react';\nimport { Route } from 'react-router-dom';\nimport { useIsMobile } from '@teambit/ui-foundation.ui.hooks.use-is-mobile';\nimport { ScopeProvider } from '@teambit/scope.ui.hooks.scope-context';\nimport { useScopeQuery } from '@teambit/scope.ui.hooks.use-scope';\nimport { ScopeOverview } from './scope-overview';\nimport styles from './scope.module.scss';\nimport ScopeUI, { ScopeBadgeSlot, ScopeContextType, CornerSlot, OverviewLineSlot } from '../scope.ui.runtime';\n\nexport type ScopeProps = {\n routeSlot: RouteSlot;\n menuSlot: RouteSlot;\n sidebar: JSX.Element;\n scopeUi: ScopeUI;\n badgeSlot: ScopeBadgeSlot;\n overviewLineSlot: OverviewLineSlot;\n cornerSlot: CornerSlot;\n context: ScopeContextType[];\n onSidebarTogglerChange: (callback: () => void) => void;\n};\n\n/**\n * root component of the scope\n */\nexport function Scope({\n routeSlot,\n menuSlot,\n sidebar,\n scopeUi,\n badgeSlot,\n overviewLineSlot,\n cornerSlot,\n context = [],\n onSidebarTogglerChange,\n}: ScopeProps) {\n const { scope } = useScopeQuery();\n const isMobile = useIsMobile();\n const [isSidebarOpen, handleSidebarToggle] = useReducer((x) => !x, !isMobile);\n const sidebarOpenness = isSidebarOpen ? Layout.row : Layout.right;\n if (!scope) {\n return <FullLoader />;\n }\n const CornerOverride = cornerSlot?.values()[0];\n scopeUi.setComponents(scope.components);\n const Context = context.map((ctx) => [ctx, { scope }] as ComponentTuple);\n\n onSidebarTogglerChange(handleSidebarToggle);\n\n return (\n <ScopeProvider scope={scope}>\n <Composer components={Context}>\n <div className={styles.scope}>\n <TopBar\n className={styles.topbar}\n Corner={() => {\n if (CornerOverride) return <CornerOverride />;\n return <Corner name={scope.name} className={styles.whiteCorner} />;\n }}\n menu={menuSlot}\n />\n\n <SplitPane className={styles.main} size={264} layout={sidebarOpenness}>\n <Pane className={styles.sidebar}>{sidebar}</Pane>\n <HoverSplitter className={styles.splitter}>\n <Collapser\n isOpen={isSidebarOpen}\n onMouseDown={(e) => e.stopPropagation()} // avoid split-pane drag\n onClick={handleSidebarToggle}\n tooltipContent={`${isSidebarOpen ? 'Hide' : 'Show'} side panel`}\n />\n </HoverSplitter>\n <Pane>\n <SlotRouter slot={routeSlot} />\n <Route exact path=\"/\">\n <ScopeOverview badgeSlot={badgeSlot} overviewSlot={overviewLineSlot} />\n </Route>\n </Pane>\n </SplitPane>\n </div>\n </Composer>\n </ScopeProvider>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/scope",
3
- "version": "0.0.617",
3
+ "version": "0.0.625",
4
4
  "homepage": "https://bit.dev/teambit/scope/scope",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.scope",
8
8
  "name": "scope",
9
- "version": "0.0.617"
9
+ "version": "0.0.625"
10
10
  },
11
11
  "dependencies": {
12
12
  "semver": "7.3.4",
@@ -15,6 +15,7 @@
15
15
  "fs-extra": "10.0.0",
16
16
  "lodash": "4.17.21",
17
17
  "p-map-series": "2.1.0",
18
+ "lodash.flatten": "4.4.0",
18
19
  "react-router-dom": "5.2.0",
19
20
  "reset-css": "5.0.1",
20
21
  "classnames": "2.2.6",
@@ -22,29 +23,30 @@
22
23
  "core-js": "^3.0.0",
23
24
  "@teambit/base-ui.surfaces.split-pane.hover-splitter": "1.0.0",
24
25
  "@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
26
+ "@teambit/base-ui.utils.composer": "1.0.0",
25
27
  "@teambit/base-ui.graph.tree.recursive-tree": "1.0.0",
26
28
  "@teambit/scope.models.scope-model": "0.0.95",
27
29
  "@teambit/scope.ui.hooks.scope-context": "0.0.95",
28
- "@teambit/component": "0.0.617",
29
- "@teambit/logger": "0.0.514",
30
- "@teambit/aspect-loader": "0.0.617",
31
- "@teambit/builder": "0.0.617",
32
- "@teambit/cli": "0.0.425",
33
- "@teambit/compiler": "0.0.617",
34
- "@teambit/config": "0.0.437",
35
- "@teambit/envs": "0.0.617",
36
- "@teambit/express": "0.0.518",
37
- "@teambit/graphql": "0.0.617",
30
+ "@teambit/component": "0.0.625",
31
+ "@teambit/logger": "0.0.518",
32
+ "@teambit/aspect-loader": "0.0.625",
33
+ "@teambit/builder": "0.0.625",
34
+ "@teambit/cli": "0.0.429",
35
+ "@teambit/compiler": "0.0.625",
36
+ "@teambit/config": "0.0.441",
37
+ "@teambit/envs": "0.0.625",
38
+ "@teambit/express": "0.0.522",
39
+ "@teambit/graphql": "0.0.625",
38
40
  "@teambit/harmony.modules.requireable-component": "0.0.483",
39
- "@teambit/isolator": "0.0.617",
41
+ "@teambit/isolator": "0.0.625",
40
42
  "@teambit/legacy-bit-id": "0.0.397",
41
- "@teambit/ui": "0.0.617",
43
+ "@teambit/ui": "0.0.625",
42
44
  "@teambit/workspace.modules.match-pattern": "0.0.487",
43
- "@teambit/command-bar": "0.0.617",
44
- "@teambit/component-tree": "0.0.409",
45
+ "@teambit/command-bar": "0.0.625",
46
+ "@teambit/component-tree": "0.0.413",
45
47
  "@teambit/design.ui.surfaces.menu.link-item": "0.0.377",
46
- "@teambit/react-router": "0.0.617",
47
- "@teambit/sidebar": "0.0.617",
48
+ "@teambit/react-router": "0.0.625",
49
+ "@teambit/sidebar": "0.0.625",
48
50
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.485",
49
51
  "@teambit/ui-foundation.ui.menu": "0.0.485",
50
52
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.487",
@@ -55,14 +57,14 @@
55
57
  "@teambit/ui-foundation.ui.corner": "0.0.493",
56
58
  "@teambit/ui-foundation.ui.hooks.use-is-mobile": "0.0.178",
57
59
  "@teambit/ui-foundation.ui.top-bar": "0.0.488",
60
+ "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.108",
61
+ "@teambit/ui-foundation.ui.use-box.scope-menu": "0.0.108",
58
62
  "@teambit/design.ui.styles.ellipsis": "0.0.347",
59
63
  "@teambit/design.ui.styles.muted-italic": "0.0.35",
60
64
  "@teambit/ui-foundation.ui.full-loader": "0.0.485",
61
65
  "@teambit/ui-foundation.ui.side-bar": "0.0.492",
62
66
  "@teambit/ui-foundation.ui.tree.drawer": "0.0.486",
63
- "@teambit/ui-foundation.ui.use-box.dropdown": "0.0.108",
64
- "@teambit/ui-foundation.ui.use-box.scope-menu": "0.0.108",
65
- "@teambit/explorer.ui.gallery.component-card": "0.0.490",
67
+ "@teambit/explorer.ui.gallery.component-card": "0.0.492",
66
68
  "@teambit/explorer.ui.gallery.component-grid": "0.0.485",
67
69
  "@teambit/preview.ui.preview-placeholder": "0.0.485",
68
70
  "@teambit/scope.ui.empty-scope": "0.0.489",
@@ -72,6 +74,7 @@
72
74
  "@types/semver": "7.3.4",
73
75
  "@types/fs-extra": "9.0.7",
74
76
  "@types/lodash": "4.14.165",
77
+ "@types/lodash.flatten": "4.4.6",
75
78
  "@types/react-router-dom": "5.1.7",
76
79
  "@types/react": "^17.0.8",
77
80
  "@types/classnames": "2.2.11",
@@ -82,7 +85,7 @@
82
85
  "@types/node": "12.20.4"
83
86
  },
84
87
  "peerDependencies": {
85
- "@teambit/legacy": "1.0.205",
88
+ "@teambit/legacy": "1.0.207",
86
89
  "react-dom": "^16.8.0 || ^17.0.0",
87
90
  "react": "^16.8.0 || ^17.0.0"
88
91
  },
@@ -110,7 +113,7 @@
110
113
  "react": "-"
111
114
  },
112
115
  "peerDependencies": {
113
- "@teambit/legacy": "1.0.205",
116
+ "@teambit/legacy": "1.0.207",
114
117
  "react-dom": "^16.8.0 || ^17.0.0",
115
118
  "react": "^16.8.0 || ^17.0.0"
116
119
  }
@@ -1,3 +1,4 @@
1
+ import flatten from 'lodash.flatten';
1
2
  import type { ComponentUI, ComponentModel } from '@teambit/component';
2
3
  import { ComponentAspect } from '@teambit/component';
3
4
  import { Slot, SlotRegistry } from '@teambit/harmony';
@@ -22,6 +23,8 @@ export type ScopeBadge = ComponentType;
22
23
 
23
24
  export type ScopeBadgeSlot = SlotRegistry<ScopeBadge[]>;
24
25
 
26
+ export type ContextSlot = SlotRegistry<ScopeContextType[]>;
27
+
25
28
  export type ScopeContextType = ComponentType<{ scope: ScopeModel; children: ReactNode }>;
26
29
 
27
30
  export type SidebarSlot = SlotRegistry<ComponentTreeNode>;
@@ -84,7 +87,12 @@ export class ScopeUI {
84
87
  /**
85
88
  * overview line slot to add new lines beneath the overview section
86
89
  */
87
- private overviewSlot: OverviewLineSlot
90
+ private overviewSlot: OverviewLineSlot,
91
+
92
+ /**
93
+ * add a new context to ui
94
+ */
95
+ private contextSlot: ContextSlot
88
96
  ) {}
89
97
 
90
98
  private setSidebarToggle: (updated: CommandHandler) => void = () => {};
@@ -167,18 +175,17 @@ export class ScopeUI {
167
175
  */
168
176
  registerMetadata() {}
169
177
 
170
- private _context: () => ScopeContextType;
171
-
172
178
  /**
173
179
  * add a new context to the scope.
174
180
  */
175
- addContext(context: ScopeContextType) {
176
- this._context = () => context;
181
+ addContext(...context: ScopeContextType[]) {
182
+ this.contextSlot.register(context);
183
+ return this;
177
184
  }
178
185
 
179
- getContext() {
180
- if (!this._context) return undefined;
181
- return this._context();
186
+ private getContext() {
187
+ const contexts = this.contextSlot.values();
188
+ return flatten(contexts);
182
189
  }
183
190
 
184
191
  registerMenuItem = (menuItems: MenuItem[]) => {
@@ -267,6 +274,7 @@ export class ScopeUI {
267
274
  Slot.withType<CornerSlot>(),
268
275
  Slot.withType<OverviewLineSlot>(),
269
276
  Slot.withType<SidebarItemSlot>(),
277
+ Slot.withType<ContextSlot>(),
270
278
  ];
271
279
 
272
280
  static async provider(
@@ -288,6 +296,7 @@ export class ScopeUI {
288
296
  sidebarItemSlot,
289
297
  cornerSlot,
290
298
  overviewSlot,
299
+ contextSlot,
291
300
  ]: [
292
301
  RouteSlot,
293
302
  RouteSlot,
@@ -297,7 +306,8 @@ export class ScopeUI {
297
306
  MenuItemSlot,
298
307
  SidebarItemSlot,
299
308
  CornerSlot,
300
- OverviewLineSlot
309
+ OverviewLineSlot,
310
+ ContextSlot
301
311
  ]
302
312
  ) {
303
313
  const componentSearcher = new ComponentSearcher(reactRouterUI.navigateTo);
@@ -314,7 +324,8 @@ export class ScopeUI {
314
324
  sidebarItemSlot,
315
325
  menuItemSlot,
316
326
  cornerSlot,
317
- overviewSlot
327
+ overviewSlot,
328
+ contextSlot
318
329
  );
319
330
  scopeUi.registerExplicitRoutes();
320
331
  scopeUi.registerMenuItem(scopeUi.menuItems);
package/ui/scope.tsx CHANGED
@@ -5,6 +5,7 @@ import { Corner } from '@teambit/ui-foundation.ui.corner';
5
5
  import { Collapser } from '@teambit/ui-foundation.ui.buttons.collapser';
6
6
  import { HoverSplitter } from '@teambit/base-ui.surfaces.split-pane.hover-splitter';
7
7
  import { TopBar } from '@teambit/ui-foundation.ui.top-bar';
8
+ import { Composer, ComponentTuple } from '@teambit/base-ui.utils.composer';
8
9
  import { FullLoader } from '@teambit/legacy/dist/to-eject/full-loader';
9
10
  import React, { useReducer } from 'react';
10
11
  import { Route } from 'react-router-dom';
@@ -23,7 +24,7 @@ export type ScopeProps = {
23
24
  badgeSlot: ScopeBadgeSlot;
24
25
  overviewLineSlot: OverviewLineSlot;
25
26
  cornerSlot: CornerSlot;
26
- context?: ScopeContextType;
27
+ context: ScopeContextType[];
27
28
  onSidebarTogglerChange: (callback: () => void) => void;
28
29
  };
29
30
 
@@ -38,7 +39,7 @@ export function Scope({
38
39
  badgeSlot,
39
40
  overviewLineSlot,
40
41
  cornerSlot,
41
- context,
42
+ context = [],
42
43
  onSidebarTogglerChange,
43
44
  }: ScopeProps) {
44
45
  const { scope } = useScopeQuery();
@@ -50,14 +51,13 @@ export function Scope({
50
51
  }
51
52
  const CornerOverride = cornerSlot?.values()[0];
52
53
  scopeUi.setComponents(scope.components);
53
- const defaultContext = ({ children }) => <div>{children}</div>;
54
- const Context = context || defaultContext;
54
+ const Context = context.map((ctx) => [ctx, { scope }] as ComponentTuple);
55
55
 
56
56
  onSidebarTogglerChange(handleSidebarToggle);
57
57
 
58
58
  return (
59
59
  <ScopeProvider scope={scope}>
60
- <Context scope={scope}>
60
+ <Composer components={Context}>
61
61
  <div className={styles.scope}>
62
62
  <TopBar
63
63
  className={styles.topbar}
@@ -86,7 +86,7 @@ export function Scope({
86
86
  </Pane>
87
87
  </SplitPane>
88
88
  </div>
89
- </Context>
89
+ </Composer>
90
90
  </ScopeProvider>
91
91
  );
92
92
  }