@teambit/aspect-loader 1.0.227 → 1.0.229

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.
@@ -0,0 +1,62 @@
1
+ import { Component } from '@teambit/component';
2
+ export type AspectDefinitionProps = {
3
+ id?: string;
4
+ component?: Component;
5
+ aspectPath: string;
6
+ runtimePath: string | null;
7
+ aspectFilePath: string | null;
8
+ local?: boolean;
9
+ };
10
+ export declare class AspectDefinition {
11
+ /**
12
+ * path to the root directory of the aspect module.
13
+ */
14
+ readonly aspectPath: string;
15
+ /**
16
+ * path to the aspect file (.aspect).
17
+ */
18
+ readonly aspectFilePath: string | null;
19
+ /**
20
+ * path to the runtime entry
21
+ */
22
+ readonly runtimePath: string | null;
23
+ /**
24
+ * aspect component
25
+ */
26
+ readonly component?: Component | undefined;
27
+ /**
28
+ * id of the component (used instead of component in the case of core aspect)
29
+ */
30
+ readonly id?: string | undefined;
31
+ /**
32
+ * aspect defined using 'file://' protocol
33
+ */
34
+ readonly local?: boolean | undefined;
35
+ constructor(
36
+ /**
37
+ * path to the root directory of the aspect module.
38
+ */
39
+ aspectPath: string,
40
+ /**
41
+ * path to the aspect file (.aspect).
42
+ */
43
+ aspectFilePath: string | null,
44
+ /**
45
+ * path to the runtime entry
46
+ */
47
+ runtimePath: string | null,
48
+ /**
49
+ * aspect component
50
+ */
51
+ component?: Component | undefined,
52
+ /**
53
+ * id of the component (used instead of component in the case of core aspect)
54
+ */
55
+ id?: string | undefined,
56
+ /**
57
+ * aspect defined using 'file://' protocol
58
+ */
59
+ local?: boolean | undefined);
60
+ get getId(): string | null;
61
+ static from({ component, aspectPath, aspectFilePath, runtimePath, id, local }: AspectDefinitionProps): AspectDefinition;
62
+ }
@@ -0,0 +1,3 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+ export declare const AspectLoaderAspect: Aspect;
3
+ export default AspectLoaderAspect;
@@ -0,0 +1 @@
1
+ export declare const Logo: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { Schema } from '@teambit/graphql';
2
+ import { AspectLoaderMain } from './aspect-loader.main.runtime';
3
+ export declare function aspectLoaderSchema(aspectLoaderMain: AspectLoaderMain): Schema;
@@ -0,0 +1,208 @@
1
+ import { ComponentID } from '@teambit/component-id';
2
+ import { ExtensionManifest, Harmony, Aspect, SlotRegistry } from '@teambit/harmony';
3
+ import type { LoggerMain } from '@teambit/logger';
4
+ import { Component, FilterAspectsOptions } from '@teambit/component';
5
+ import { Logger } from '@teambit/logger';
6
+ import { RequireableComponent } from '@teambit/harmony.modules.requireable-component';
7
+ import { EnvsMain } from '@teambit/envs';
8
+ import { GraphqlMain } from '@teambit/graphql';
9
+ import { AspectDefinition, AspectDefinitionProps } from './aspect-definition';
10
+ import { PluginDefinition } from './plugin-definition';
11
+ import { Plugins } from './plugins';
12
+ export type PluginDefinitionSlot = SlotRegistry<PluginDefinition[]>;
13
+ export type AspectDescriptor = {
14
+ /**
15
+ * name of the extension.
16
+ */
17
+ id: string;
18
+ /**
19
+ * icon of the extension.
20
+ */
21
+ icon?: string;
22
+ };
23
+ export type AspectResolver = (component: Component) => Promise<ResolvedAspect | undefined>;
24
+ export type ResolvedAspect = {
25
+ aspectPath: string;
26
+ runtimePath: string | null;
27
+ aspectFilePath: string | null;
28
+ };
29
+ export type LoadExtByManifestContext = {
30
+ seeders?: string[];
31
+ neededFor?: string;
32
+ };
33
+ export type LoadExtByManifestOptions = {
34
+ throwOnError?: boolean;
35
+ hideMissingModuleError?: boolean;
36
+ ignoreErrors?: boolean;
37
+ /**
38
+ * If this is enabled then we will show loading error only once for a given extension
39
+ * (even if it was actually try to load it few times by different components for example)
40
+ */
41
+ unifyErrorsByExtId?: boolean;
42
+ };
43
+ type OnAspectLoadError = (err: Error, id: ComponentID) => Promise<boolean>;
44
+ export type OnAspectLoadErrorSlot = SlotRegistry<OnAspectLoadError>;
45
+ export type OnAspectLoadErrorHandler = (err: Error, component: Component) => Promise<boolean>;
46
+ export type OnLoadRequireableExtension = (requireableExtension: RequireableComponent, manifest: ExtensionManifest | Aspect) => Promise<ExtensionManifest | Aspect>;
47
+ /**
48
+ * A slot which run during loading the requirable extension (after first manifest calculation)
49
+ */
50
+ export type OnLoadRequireableExtensionSlot = SlotRegistry<OnLoadRequireableExtension>;
51
+ export type MainAspect = {
52
+ /**
53
+ * path to the main aspect.
54
+ */
55
+ path: string;
56
+ /**
57
+ * version of the aspect.
58
+ */
59
+ version: string | undefined;
60
+ /**
61
+ * package name of the aspect
62
+ */
63
+ packageName: string | undefined;
64
+ /**
65
+ * reference to aspect manifest.
66
+ */
67
+ aspect: Aspect;
68
+ /**
69
+ * The name of the aspect (without the scope prefix)
70
+ */
71
+ name: string;
72
+ /**
73
+ * The name of the aspect
74
+ */
75
+ id: string;
76
+ };
77
+ export declare class AspectLoaderMain {
78
+ private logger;
79
+ private envs;
80
+ private harmony;
81
+ private onAspectLoadErrorSlot;
82
+ private onLoadRequireableExtensionSlot;
83
+ private pluginSlot;
84
+ private inMemoryConfiguredAspects;
85
+ private failedToLoadExt;
86
+ private alreadyShownWarning;
87
+ constructor(logger: Logger, envs: EnvsMain, harmony: Harmony, onAspectLoadErrorSlot: OnAspectLoadErrorSlot, onLoadRequireableExtensionSlot: OnLoadRequireableExtensionSlot, pluginSlot: PluginDefinitionSlot);
88
+ getCoreAspectsPackagesAndIds(): Record<string, string>;
89
+ private getCompiler;
90
+ registerOnAspectLoadErrorSlot(onAspectLoadError: OnAspectLoadError): void;
91
+ registerOnLoadRequireableExtensionSlot(onLoadRequireableExtension: OnLoadRequireableExtension): void;
92
+ /**
93
+ * returns whether the aspect-load issue has been fixed.
94
+ */
95
+ triggerOnAspectLoadError(err: Error, component: Component): Promise<boolean>;
96
+ getRuntimePath(component: Component, modulePath: string, runtime: string): Promise<string | null>;
97
+ getAspectFilePath(component: Component, modulePath: string): Promise<string | null>;
98
+ isAspectLoaded(id: string): unknown;
99
+ getDescriptor(id: string): AspectDescriptor | undefined;
100
+ /**
101
+ * This is used when adding aspects to workspace.jsonc during the process (like in bit use command)
102
+ * and we want to make sure that follow operation (like bit install) will recognize those aspects
103
+ * but the harmony config is already in memory.
104
+ * Probably a better to do it is to make sure we can re-load the config somehow
105
+ * ideally by adding the config class in harmony a reload API
106
+ * @param aspectId
107
+ */
108
+ addInMemoryConfiguredAspect(aspectId: string): void;
109
+ /**
110
+ * get all the configured aspects in the config file (workspace.jsonc / bit.jsonc)
111
+ */
112
+ getConfiguredAspects(): string[];
113
+ getNotLoadedConfiguredExtensions(): string[];
114
+ loadDefinition(props: AspectDefinitionProps): AspectDefinition;
115
+ private _coreAspects;
116
+ get coreAspects(): Aspect[];
117
+ isCoreAspect(id: string): boolean;
118
+ setCoreAspects(aspects: Aspect[]): this;
119
+ getCoreAspectIds(): string[];
120
+ /**
121
+ * Get all the core envs ids which is still register in the bit manifest as core aspect
122
+ */
123
+ getCoreEnvsIds(): string[];
124
+ isCoreEnv(id: string): boolean;
125
+ private _reserved;
126
+ getUserAspects(): string[];
127
+ getCoreAspectDefs(runtimeName?: string): Promise<AspectDefinition[]>;
128
+ resolveAspects(components: Component[], resolver: AspectResolver): Promise<AspectDefinition[]>;
129
+ private _mainAspect;
130
+ get mainAspect(): MainAspect;
131
+ setMainAspect(mainAspect: MainAspect): this;
132
+ private failedLoadAspect;
133
+ get failedAspects(): string[];
134
+ resetFailedLoadAspects(): void;
135
+ private addFailure;
136
+ cloneManifest(manifest: any): any;
137
+ /**
138
+ * run "require" of the component code to get the manifest
139
+ */
140
+ doRequire(requireableExtension: RequireableComponent, runSubscribers?: boolean): Promise<ExtensionManifest | Aspect>;
141
+ /**
142
+ * in case the extension failed to load, prefer to throw an error, unless `throwOnError` param
143
+ * passed as `false`.
144
+ * there are cases when throwing an error blocks the user from doing anything else. for example,
145
+ * when a user develops an extension and deletes the node-modules, the extension on the workspace
146
+ * cannot be loaded anymore until "bit compile" is running. however, if this function throws an
147
+ * error, it'll throw for "bit compile" as well, which blocks the user.
148
+ * for the CI, it is important to throw an error because errors on console can be ignored.
149
+ * for now, when loading the extension from the workspace the throwOnError is passed as false.
150
+ * when loading from the scope (CI) it should be true.
151
+ *
152
+ * the console printing here is done directly by "console.error" and not by the logger. the reason
153
+ * is that the logger.console only prints when the loader started (which, btw, happens after
154
+ * entering this function, so it can't work) and here we want it to be printed regardless of the
155
+ * rules of starting the loader. e.g. if by mistake the CI got it as throwOnError=false, it's ok
156
+ * to break the output by the console.error.
157
+ *
158
+ * @todo: this is not the final word however about throwing/non throwing errors here.
159
+ * in some cases, such as "bit tag", it's better not to tag if an extension changes the model.
160
+ */
161
+ loadRequireableExtensions(requireableExtensions: RequireableComponent[], throwOnError?: boolean): Promise<void>;
162
+ getManifestsFromRequireableExtensions(requireableExtensions: RequireableComponent[], throwOnError?: boolean, runSubscribers?: boolean): Promise<Array<ExtensionManifest | Aspect>>;
163
+ handleExtensionLoadingError(error: Error, idStr: string, throwOnError: boolean): void;
164
+ private printWarningIfFirstTime;
165
+ runOnLoadRequireableExtensionSubscribers(requireableExtension: RequireableComponent, manifest: ExtensionManifest | Aspect): Promise<ExtensionManifest | Aspect>;
166
+ getPluginDefs(): PluginDefinition[];
167
+ getPlugins(component: Component, componentPath: string): Plugins;
168
+ isEsmModule(path: string): Promise<boolean>;
169
+ loadEsm(path: string): Promise<any>;
170
+ getPluginsFromDefs(component: Component, componentPath: string, defs: PluginDefinition[]): Plugins;
171
+ getPluginFiles(component: Component, componentPath: string): string[];
172
+ hasPluginFiles(component: Component): boolean;
173
+ pluginFileResolver(component: Component, rootDir: string): (relativePath: string) => string;
174
+ isAspect(manifest: any): boolean;
175
+ isValidAspect(manifest: any): boolean;
176
+ isAspectComponent(component: Component): boolean;
177
+ /**
178
+ * get or create a global scope, import the non-core aspects, load bit from that scope, create
179
+ * capsules for the aspects and load them from the capsules.
180
+ */
181
+ loadAspectsFromGlobalScope(aspectIds: string[]): Promise<{
182
+ components: Component[];
183
+ globalScopeHarmony: Harmony;
184
+ }>;
185
+ filterAspectDefs(allDefs: AspectDefinition[], componentIds: ComponentID[], runtimeName: string | undefined, filterOpts?: FilterAspectsOptions): AspectDefinition[];
186
+ getAspectIdFromAspectFile(aspectFilePath: string): string | undefined;
187
+ private prepareManifests;
188
+ /**
189
+ * register a plugin.
190
+ */
191
+ registerPlugins(pluginDefs: PluginDefinition[]): void;
192
+ loadExtensionsByManifests(extensionsManifests: Array<ExtensionManifest | Aspect>, context?: LoadExtByManifestContext, options?: LoadExtByManifestOptions): Promise<void>;
193
+ private generateManifestGraph;
194
+ loadAspectFromPath(localAspects: string[]): Promise<void>;
195
+ private parseLocalAspect;
196
+ private findRuntime;
197
+ resolveLocalAspects(ids: string[], runtime?: string): Promise<AspectDefinition[]>;
198
+ private findAspectFile;
199
+ static runtime: import("@teambit/harmony").RuntimeDefinition;
200
+ static dependencies: Aspect[];
201
+ static slots: (((registerFn: () => string) => SlotRegistry<OnAspectLoadError>) | ((registerFn: () => string) => SlotRegistry<OnLoadRequireableExtension>) | ((registerFn: () => string) => SlotRegistry<PluginDefinition[]>))[];
202
+ static provider([loggerExt, envs, graphql]: [LoggerMain, EnvsMain, GraphqlMain], config: any, [onAspectLoadErrorSlot, onLoadRequireableExtensionSlot, pluginSlot]: [
203
+ OnAspectLoadErrorSlot,
204
+ OnLoadRequireableExtensionSlot,
205
+ PluginDefinitionSlot
206
+ ], harmony: Harmony): Promise<AspectLoaderMain>;
207
+ }
208
+ export default AspectLoaderMain;
@@ -0,0 +1,2 @@
1
+ export declare const UNABLE_TO_LOAD_EXTENSION: (id: string, errMsg?: string) => string;
2
+ export declare const UNABLE_TO_LOAD_EXTENSION_FROM_LIST: (ids: string[], errMsg?: string, neededFor?: string) => string;
@@ -0,0 +1,17 @@
1
+ export declare function getBvmDir(): string;
2
+ export declare function getAspectDir(id: string): string;
3
+ type BvmDirOptions = {
4
+ version?: string;
5
+ linkName?: string;
6
+ };
7
+ export declare function getAspectDirFromBvm(id: string, bvmDirOptions?: BvmDirOptions): string;
8
+ export declare function getAspectDistDir(id: string): string;
9
+ export declare function getCoreAspectName(id: string): string;
10
+ export declare function getCoreAspectPackageName(id: string): string;
11
+ export declare function getAspectDef(aspectName: string, runtime?: string): Promise<{
12
+ id: string;
13
+ aspectPath: string;
14
+ aspectFilePath: string | null;
15
+ runtimePath: string | null;
16
+ }>;
17
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import { BitError } from '@teambit/bit-error';
2
+ export declare class CannotLoadExtension extends BitError {
3
+ private extensionName;
4
+ private error;
5
+ constructor(extensionName: string, error: Error);
6
+ report(verbose?: boolean): string;
7
+ toJson(): void;
8
+ }
@@ -0,0 +1 @@
1
+ export { CannotLoadExtension } from './cannot-load-extension';
@@ -0,0 +1,8 @@
1
+ import { AspectLoaderAspect } from './aspect-loader.aspect';
2
+ export type { AspectLoaderMain, AspectDescriptor, MainAspect, OnLoadRequireableExtension, AspectResolver, ResolvedAspect, } from './aspect-loader.main.runtime';
3
+ export { getAspectDef, getAspectDir, getAspectDistDir, getCoreAspectPackageName, getCoreAspectName, getAspectDirFromBvm, } from './core-aspects';
4
+ export type { PluginDefinition } from './plugin-definition';
5
+ export { AspectDefinition } from './aspect-definition';
6
+ export { UNABLE_TO_LOAD_EXTENSION } from './constants';
7
+ export { AspectLoaderAspect };
8
+ export default AspectLoaderAspect;
@@ -0,0 +1 @@
1
+ export declare function isEsmModule(path: string): boolean;
@@ -0,0 +1,20 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+ export interface PluginDefinition {
3
+ /**
4
+ * regex pattern for detecting the definition file within a component.
5
+ */
6
+ pattern: string | RegExp;
7
+ /**
8
+ * runtimes for the plugin to apply.
9
+ */
10
+ runtimes: string[];
11
+ /**
12
+ * register the plugin to its slot registry.
13
+ */
14
+ /**
15
+ * Plugin implementation.
16
+ * @param object The object that was exported as default by the *.plugin-pattern file.
17
+ * @param sourceAspect Pointer to the aspect that is using the plugin (the aspect that contain the *.plugin-pattern file).
18
+ */
19
+ register<T>(object: T, sourceAspect: Aspect): void;
20
+ }
@@ -0,0 +1,14 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+ import { PluginDefinition } from './plugin-definition';
3
+ export declare class Plugin {
4
+ readonly def: PluginDefinition;
5
+ readonly path: string;
6
+ constructor(def: PluginDefinition, path: string);
7
+ private _instance;
8
+ /**
9
+ * determines whether the plugin supports a certain runtime.
10
+ */
11
+ supportsRuntime(runtime: string): boolean;
12
+ register(sourceAspect: Aspect, module?: unknown): void;
13
+ require(): unknown;
14
+ }
@@ -0,0 +1,26 @@
1
+ import { Component } from '@teambit/component';
2
+ import { Logger } from '@teambit/logger';
3
+ import { Aspect } from '@teambit/harmony';
4
+ import { PluginDefinition } from './plugin-definition';
5
+ import { Plugin } from './plugin';
6
+ import { OnAspectLoadErrorHandler } from './aspect-loader.main.runtime';
7
+ export type PluginMap = {
8
+ [filePath: string]: PluginDefinition;
9
+ };
10
+ export declare class Plugins {
11
+ readonly component: Component;
12
+ readonly plugins: Plugin[];
13
+ private triggerOnAspectLoadError;
14
+ private logger;
15
+ constructor(component: Component, plugins: Plugin[], triggerOnAspectLoadError: OnAspectLoadErrorHandler, logger: Logger);
16
+ getByRuntime(runtime: string): Plugin[];
17
+ load(runtime: string): Promise<Aspect>;
18
+ loadModule(path: string): Promise<any>;
19
+ registerPluginWithTryCatch(plugin: Plugin, aspect: Aspect): Promise<void>;
20
+ has(): boolean;
21
+ static from(component: Component, defs: PluginDefinition[], triggerOnAspectLoadError: OnAspectLoadErrorHandler, logger: Logger, resolvePath?: (path: string) => string): Plugins;
22
+ /**
23
+ * Get the plugin files from the component.
24
+ */
25
+ static files(component: Component, defs: PluginDefinition[], resolvePath?: (path: string) => string): string[];
26
+ }
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_aspect-loader@1.0.227/dist/aspect-loader.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_aspect-loader@1.0.227/dist/aspect-loader.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_aspect-loader@1.0.229/dist/aspect-loader.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_aspect-loader@1.0.229/dist/aspect-loader.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/aspect-loader",
3
- "version": "1.0.227",
3
+ "version": "1.0.229",
4
4
  "homepage": "https://bit.cloud/teambit/harmony/aspect-loader",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.harmony",
8
8
  "name": "aspect-loader",
9
- "version": "1.0.227"
9
+ "version": "1.0.229"
10
10
  },
11
11
  "dependencies": {
12
12
  "graphql-tag": "2.12.1",
@@ -22,15 +22,15 @@
22
22
  "@teambit/node.utils.esm-loader": "0.0.6",
23
23
  "@teambit/bvm.config": "0.2.5",
24
24
  "@teambit/bvm.path": "0.1.2",
25
- "@teambit/component": "1.0.227",
26
- "@teambit/graphql": "1.0.227",
27
- "@teambit/bit": "1.6.120",
28
- "@teambit/cli": "0.0.860",
25
+ "@teambit/component": "1.0.229",
26
+ "@teambit/graphql": "1.0.229",
27
+ "@teambit/bit": "1.6.122",
28
+ "@teambit/cli": "0.0.862",
29
29
  "@teambit/compilation.modules.babel-compiler": "0.0.139",
30
- "@teambit/envs": "1.0.227",
30
+ "@teambit/envs": "1.0.229",
31
31
  "@teambit/harmony.modules.requireable-component": "0.0.497",
32
- "@teambit/logger": "0.0.953",
33
- "@teambit/scope": "1.0.227",
32
+ "@teambit/logger": "0.0.955",
33
+ "@teambit/scope": "1.0.229",
34
34
  "@teambit/toolbox.performance.v8-cache": "0.0.33"
35
35
  },
36
36
  "devDependencies": {
@@ -40,7 +40,7 @@
40
40
  "chai": "4.3.0",
41
41
  "@types/find-root": "1.1.2",
42
42
  "@types/mocha": "9.1.0",
43
- "@teambit/harmony.envs.core-aspect-env": "0.0.30"
43
+ "@teambit/harmony.envs.core-aspect-env": "0.0.33"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "react": "^17.0.0 || ^18.0.0",
package/tsconfig.json CHANGED
@@ -20,8 +20,7 @@
20
20
  "emitDeclarationOnly": true,
21
21
  "strict": true,
22
22
  "strictPropertyInitialization": false,
23
- "noImplicitAny": false,
24
- "composite": true
23
+ "noImplicitAny": false
25
24
  },
26
25
  "exclude": [
27
26
  "artifacts",
@@ -36,28 +35,5 @@
36
35
  "include": [
37
36
  "**/*",
38
37
  "**/*.json"
39
- ],
40
- "references": [
41
- {
42
- "path": "/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@1.0.227"
43
- },
44
- {
45
- "path": "/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_graphql@1.0.227"
46
- },
47
- {
48
- "path": "/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_bit@1.6.120"
49
- },
50
- {
51
- "path": "/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_cli@0.0.860"
52
- },
53
- {
54
- "path": "/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.envs_envs@1.0.227"
55
- },
56
- {
57
- "path": "/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.harmony_logger@0.0.953"
58
- },
59
- {
60
- "path": "/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.scope_scope@1.0.227"
61
- }
62
38
  ]
63
39
  }