@teambit/workspace 0.0.526 → 0.0.530
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/capsule.cmd.ts +9 -2
- package/dist/capsule.cmd.d.ts +2 -1
- package/dist/capsule.cmd.js +3 -1
- package/dist/capsule.cmd.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -1
- package/dist/on-component-events.d.ts +2 -2
- package/dist/watch/output-formatter.js +14 -3
- package/dist/watch/output-formatter.js.map +1 -1
- package/dist/watch/watch.cmd.d.ts +2 -4
- package/dist/watch/watch.cmd.js +17 -9
- package/dist/watch/watch.cmd.js.map +1 -1
- package/dist/watch/watcher.d.ts +8 -5
- package/dist/watch/watcher.js +37 -36
- package/dist/watch/watcher.js.map +1 -1
- package/dist/workspace.d.ts +10 -4
- package/dist/workspace.js +36 -4
- package/dist/workspace.js.map +1 -1
- package/dist/workspace.main.runtime.d.ts +2 -2
- package/dist/workspace.main.runtime.js +1 -1
- package/dist/workspace.main.runtime.js.map +1 -1
- package/dist/workspace.provider.d.ts +7 -3
- package/dist/workspace.provider.js +2 -2
- package/dist/workspace.provider.js.map +1 -1
- package/index.ts +1 -1
- package/on-component-events.ts +2 -1
- package/package-tar/teambit-workspace-0.0.530.tgz +0 -0
- package/package.json +40 -40
- package/watch/output-formatter.ts +8 -1
- package/watch/watch.cmd.tsx +14 -4
- package/watch/watcher.ts +27 -20
- package/workspace.main.runtime.ts +2 -1
- package/workspace.provider.ts +9 -4
- package/workspace.ts +38 -4
- package/package-tar/teambit-workspace-0.0.526.tgz +0 -0
|
@@ -2,7 +2,7 @@ import { PubsubMain } from '@teambit/pubsub';
|
|
|
2
2
|
import type { AspectLoaderMain } from '@teambit/aspect-loader';
|
|
3
3
|
import { BundlerMain } from '@teambit/bundler';
|
|
4
4
|
import { CLIMain } from '@teambit/cli';
|
|
5
|
-
import { ComponentMain } from '@teambit/component';
|
|
5
|
+
import type { ComponentMain, Component } from '@teambit/component';
|
|
6
6
|
import { DependencyResolverMain } from '@teambit/dependency-resolver';
|
|
7
7
|
import { EnvsMain } from '@teambit/envs';
|
|
8
8
|
import { GraphqlMain } from '@teambit/graphql';
|
|
@@ -14,6 +14,7 @@ import { UiMain } from '@teambit/ui';
|
|
|
14
14
|
import type { VariantsMain } from '@teambit/variants';
|
|
15
15
|
import { OnComponentLoad, OnComponentAdd, OnComponentChange, OnComponentRemove } from './on-component-events';
|
|
16
16
|
import { WorkspaceExtConfig } from './types';
|
|
17
|
+
import { WatchOptions } from './watch/watcher';
|
|
17
18
|
import { Workspace } from './workspace';
|
|
18
19
|
export declare type WorkspaceDeps = [
|
|
19
20
|
PubsubMain,
|
|
@@ -34,9 +35,12 @@ export declare type OnComponentLoadSlot = SlotRegistry<OnComponentLoad>;
|
|
|
34
35
|
export declare type OnComponentChangeSlot = SlotRegistry<OnComponentChange>;
|
|
35
36
|
export declare type OnComponentAddSlot = SlotRegistry<OnComponentAdd>;
|
|
36
37
|
export declare type OnComponentRemoveSlot = SlotRegistry<OnComponentRemove>;
|
|
37
|
-
export
|
|
38
|
+
export declare type OnPreWatch = (components: Component[], watchOpts: WatchOptions) => Promise<void>;
|
|
39
|
+
export declare type OnPreWatchSlot = SlotRegistry<OnPreWatch>;
|
|
40
|
+
export default function provideWorkspace([pubsub, cli, scope, component, isolator, dependencyResolver, variants, loggerExt, graphql, ui, bundler, aspectLoader, envs,]: WorkspaceDeps, config: WorkspaceExtConfig, [onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot, onPreWatchSlot]: [
|
|
38
41
|
OnComponentLoadSlot,
|
|
39
42
|
OnComponentChangeSlot,
|
|
40
43
|
OnComponentAddSlot,
|
|
41
|
-
OnComponentRemoveSlot
|
|
44
|
+
OnComponentRemoveSlot,
|
|
45
|
+
OnPreWatchSlot
|
|
42
46
|
], harmony: Harmony): Promise<Workspace | undefined>;
|
|
@@ -181,13 +181,13 @@ function _capsule() {
|
|
|
181
181
|
return data;
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
async function provideWorkspace([pubsub, cli, scope, component, isolator, dependencyResolver, variants, loggerExt, graphql, ui, bundler, aspectLoader, envs], config, [onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot], harmony) {
|
|
184
|
+
async function provideWorkspace([pubsub, cli, scope, component, isolator, dependencyResolver, variants, loggerExt, graphql, ui, bundler, aspectLoader, envs], config, [onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot, onPreWatchSlot], harmony) {
|
|
185
185
|
const bitConfig = harmony.config.get('teambit.harmony/bit');
|
|
186
186
|
const consumer = await getConsumer(bitConfig.cwd);
|
|
187
187
|
if (!consumer) return undefined; // TODO: get the 'workspace' name in a better way
|
|
188
188
|
|
|
189
189
|
const logger = loggerExt.createLogger(_constants().EXT_NAME);
|
|
190
|
-
const workspace = new (_workspace().Workspace)(pubsub, config, consumer, scope, component, isolator, dependencyResolver, variants, aspectLoader, logger, undefined, harmony, onComponentLoadSlot, onComponentChangeSlot, envs, onComponentAddSlot, onComponentRemoveSlot, graphql);
|
|
190
|
+
const workspace = new (_workspace().Workspace)(pubsub, config, consumer, scope, component, isolator, dependencyResolver, variants, aspectLoader, logger, undefined, harmony, onComponentLoadSlot, onComponentChangeSlot, envs, onComponentAddSlot, onComponentRemoveSlot, onPreWatchSlot, graphql);
|
|
191
191
|
|
|
192
192
|
const getWorkspacePolicyFromPackageJson = () => {
|
|
193
193
|
var _workspace$consumer$p;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["workspace.provider.ts"],"names":["provideWorkspace","pubsub","cli","scope","component","isolator","dependencyResolver","variants","loggerExt","graphql","ui","bundler","aspectLoader","envs","config","onComponentLoadSlot","onComponentChangeSlot","onComponentAddSlot","onComponentRemoveSlot","harmony","bitConfig","get","consumer","getConsumer","cwd","undefined","logger","createLogger","EXT_NAME","workspace","Workspace","getWorkspacePolicyFromPackageJson","packageJson","packageJsonObject","policyFromPackageJson","registerRootPolicy","ManyComponentsWriter","registerExternalInstaller","install","installOpts","dedupe","updateExisting","import","onCacheClear","push","clearCache","isLegacy","LegacyComponentLoader","registerOnComponentLoadSubscriber","legacyComponent","id","resolveComponentId","newComponent","state","_consumer","ConsumerComponent","registerOnComponentConfigLoading","componentId","componentFromScope","extensions","componentExtensions","defaultScope","componentDefaultScope","loadExtensions","extensionsWithLegacyIdsP","map","extension","legacyEntry","clone","extensionId","compId","_legacy","newExtensionId","extensionsWithLegacyIds","Promise","all","ExtensionDataList","fromArray","workspaceSchema","registerUiRoot","WorkspaceUIRoot","register","capsuleCmd","CapsuleCmd","commands","CapsuleListCmd","CapsuleCreateCmd","InstallCmd","EjectConfCmd","watcher","Watcher","unregister","WatchCommand","LinkCommand","Tag","registerHost","registerOnStart","loadAspects","getNotLoadedConfiguredExtensions","path"],"mappings":"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","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { BundlerMain } from '@teambit/bundler';\nimport { CLIMain, CommandList } from '@teambit/cli';\nimport { ComponentMain } from '@teambit/component';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { EnvsMain } from '@teambit/envs';\nimport { GraphqlMain } from '@teambit/graphql';\nimport { Harmony, SlotRegistry } from '@teambit/harmony';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { LoggerMain } from '@teambit/logger';\nimport type { ScopeMain } from '@teambit/scope';\nimport { UiMain } from '@teambit/ui';\nimport type { VariantsMain } from '@teambit/variants';\nimport { Consumer, loadConsumerIfExist } from '@teambit/legacy/dist/consumer';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { registerDefaultScopeGetter } from '@teambit/legacy/dist/api/consumer';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport ManyComponentsWriter from '@teambit/legacy/dist/consumer/component-ops/many-components-writer';\nimport LegacyComponentLoader from '@teambit/legacy/dist/consumer/component/component-loader';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { EXT_NAME } from './constants';\nimport EjectConfCmd from './eject-conf.cmd';\nimport InstallCmd from './install.cmd';\nimport { OnComponentLoad, OnComponentAdd, OnComponentChange, OnComponentRemove } from './on-component-events';\nimport { WorkspaceExtConfig } from './types';\nimport { WatchCommand } from './watch/watch.cmd';\nimport { LinkCommand } from './link';\nimport { Watcher } from './watch/watcher';\nimport { Workspace, WorkspaceInstallOptions } from './workspace';\nimport getWorkspaceSchema from './workspace.graphql';\nimport { WorkspaceUIRoot } from './workspace.ui-root';\nimport { Tag } from './tag-cmd';\nimport { CapsuleCmd, CapsuleCreateCmd, CapsuleListCmd } from './capsule.cmd';\n\nexport type WorkspaceDeps = [\n PubsubMain,\n CLIMain,\n ScopeMain,\n ComponentMain,\n IsolatorMain,\n DependencyResolverMain,\n VariantsMain,\n LoggerMain,\n GraphqlMain,\n UiMain,\n BundlerMain,\n AspectLoaderMain,\n EnvsMain\n];\n\nexport type OnComponentLoadSlot = SlotRegistry<OnComponentLoad>;\n\nexport type OnComponentChangeSlot = SlotRegistry<OnComponentChange>;\n\nexport type OnComponentAddSlot = SlotRegistry<OnComponentAdd>;\n\nexport type OnComponentRemoveSlot = SlotRegistry<OnComponentRemove>;\n\nexport default async function provideWorkspace(\n [\n pubsub,\n cli,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n loggerExt,\n graphql,\n ui,\n bundler,\n aspectLoader,\n envs,\n ]: WorkspaceDeps,\n config: WorkspaceExtConfig,\n [onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot]: [\n OnComponentLoadSlot,\n OnComponentChangeSlot,\n OnComponentAddSlot,\n OnComponentRemoveSlot\n ],\n harmony: Harmony\n) {\n const bitConfig: any = harmony.config.get('teambit.harmony/bit');\n const consumer = await getConsumer(bitConfig.cwd);\n if (!consumer) return undefined;\n // TODO: get the 'workspace' name in a better way\n const logger = loggerExt.createLogger(EXT_NAME);\n const workspace = new Workspace(\n pubsub,\n config,\n consumer,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n aspectLoader,\n logger,\n undefined,\n harmony,\n onComponentLoadSlot,\n onComponentChangeSlot,\n envs,\n onComponentAddSlot,\n onComponentRemoveSlot,\n graphql\n );\n\n const getWorkspacePolicyFromPackageJson = () => {\n const packageJson = workspace.consumer.packageJson?.packageJsonObject || {};\n const policyFromPackageJson = dependencyResolver.getWorkspacePolicyFromPackageJson(packageJson);\n return policyFromPackageJson;\n };\n\n dependencyResolver.registerRootPolicy(getWorkspacePolicyFromPackageJson());\n\n ManyComponentsWriter.registerExternalInstaller({\n install: async () => {\n // TODO: think how we should pass this options\n const installOpts: WorkspaceInstallOptions = {\n dedupe: true,\n updateExisting: false,\n import: false,\n };\n return workspace.install(undefined, installOpts);\n },\n });\n\n consumer.onCacheClear.push(() => workspace.clearCache());\n\n if (!workspace.isLegacy) {\n LegacyComponentLoader.registerOnComponentLoadSubscriber(async (legacyComponent: ConsumerComponent) => {\n const id = await workspace.resolveComponentId(legacyComponent.id);\n const newComponent = await workspace.get(id, false, legacyComponent);\n return newComponent.state._consumer;\n });\n }\n\n ConsumerComponent.registerOnComponentConfigLoading(EXT_NAME, async (id) => {\n const componentId = await workspace.resolveComponentId(id);\n // We call here directly workspace.scope.get instead of workspace.get because part of the workspace get is loading consumer component\n // which in turn run this event, which will make an infinite loop\n // This component from scope here are only used for merging the extensions with the workspace components\n const componentFromScope = await workspace.scope.get(componentId);\n const extensions = await workspace.componentExtensions(componentId, componentFromScope);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n\n await workspace.loadExtensions(extensions);\n const extensionsWithLegacyIdsP = extensions.map(async (extension) => {\n const legacyEntry = extension.clone();\n if (legacyEntry.extensionId) {\n const compId = await workspace.resolveComponentId(legacyEntry.extensionId);\n legacyEntry.extensionId = compId._legacy;\n legacyEntry.newExtensionId = compId;\n }\n\n return legacyEntry;\n });\n const extensionsWithLegacyIds = await Promise.all(extensionsWithLegacyIdsP);\n\n return {\n defaultScope,\n extensions: ExtensionDataList.fromArray(extensionsWithLegacyIds),\n };\n });\n\n /**\n * Add default scope from harmony during export.\n */\n registerDefaultScopeGetter(async (id: BitId) => {\n const componentId = await workspace.resolveComponentId(id);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n return defaultScope;\n });\n\n const workspaceSchema = getWorkspaceSchema(workspace, graphql);\n ui.registerUiRoot(new WorkspaceUIRoot(workspace, bundler));\n graphql.register(workspaceSchema);\n const capsuleCmd = new CapsuleCmd();\n capsuleCmd.commands = [new CapsuleListCmd(isolator, workspace), new CapsuleCreateCmd(workspace, isolator)];\n const commands: CommandList = [new InstallCmd(workspace, logger), new EjectConfCmd(workspace), capsuleCmd];\n const watcher = new Watcher(workspace, pubsub);\n if (workspace && !workspace.consumer.isLegacy) {\n cli.unregister('watch');\n commands.push(new WatchCommand(pubsub, logger, watcher));\n cli.unregister('link');\n commands.push(new LinkCommand(workspace, logger));\n }\n commands.push(new Tag());\n cli.register(...commands);\n component.registerHost(workspace);\n\n cli.registerOnStart(async () => {\n await workspace.loadAspects(aspectLoader.getNotLoadedConfiguredExtensions());\n });\n\n return workspace;\n}\n\n/**\n * don't use loadConsumer() here, which throws ConsumerNotFound because some commands don't require\n * the consumer to be available. such as, `bit init` or `bit list --remote`.\n * most of the commands do need the consumer. the legacy commands that need the consumer throw an\n * error when is missing. in the new/Harmony commands, such as `bis compile`, the workspace object\n * is passed to the provider, so before using it, make sure it exists.\n * keep in mind that you can't verify it in the provider itself, because the provider is running\n * always for all commands before anything else is happening.\n */\nasync function getConsumer(path?: string): Promise<Consumer | undefined> {\n return loadConsumerIfExist(path);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["workspace.provider.ts"],"names":["provideWorkspace","pubsub","cli","scope","component","isolator","dependencyResolver","variants","loggerExt","graphql","ui","bundler","aspectLoader","envs","config","onComponentLoadSlot","onComponentChangeSlot","onComponentAddSlot","onComponentRemoveSlot","onPreWatchSlot","harmony","bitConfig","get","consumer","getConsumer","cwd","undefined","logger","createLogger","EXT_NAME","workspace","Workspace","getWorkspacePolicyFromPackageJson","packageJson","packageJsonObject","policyFromPackageJson","registerRootPolicy","ManyComponentsWriter","registerExternalInstaller","install","installOpts","dedupe","updateExisting","import","onCacheClear","push","clearCache","isLegacy","LegacyComponentLoader","registerOnComponentLoadSubscriber","legacyComponent","id","resolveComponentId","newComponent","state","_consumer","ConsumerComponent","registerOnComponentConfigLoading","componentId","componentFromScope","extensions","componentExtensions","defaultScope","componentDefaultScope","loadExtensions","extensionsWithLegacyIdsP","map","extension","legacyEntry","clone","extensionId","compId","_legacy","newExtensionId","extensionsWithLegacyIds","Promise","all","ExtensionDataList","fromArray","workspaceSchema","registerUiRoot","WorkspaceUIRoot","register","capsuleCmd","CapsuleCmd","commands","CapsuleListCmd","CapsuleCreateCmd","InstallCmd","EjectConfCmd","watcher","Watcher","unregister","WatchCommand","LinkCommand","Tag","registerHost","registerOnStart","loadAspects","getNotLoadedConfiguredExtensions","path"],"mappings":"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","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { BundlerMain } from '@teambit/bundler';\nimport { CLIMain, CommandList } from '@teambit/cli';\nimport type { ComponentMain, Component } from '@teambit/component';\nimport { DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { EnvsMain } from '@teambit/envs';\nimport { GraphqlMain } from '@teambit/graphql';\nimport { Harmony, SlotRegistry } from '@teambit/harmony';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { LoggerMain } from '@teambit/logger';\nimport type { ScopeMain } from '@teambit/scope';\nimport { UiMain } from '@teambit/ui';\nimport type { VariantsMain } from '@teambit/variants';\nimport { Consumer, loadConsumerIfExist } from '@teambit/legacy/dist/consumer';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { registerDefaultScopeGetter } from '@teambit/legacy/dist/api/consumer';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport ManyComponentsWriter from '@teambit/legacy/dist/consumer/component-ops/many-components-writer';\nimport LegacyComponentLoader from '@teambit/legacy/dist/consumer/component/component-loader';\nimport { ExtensionDataList } from '@teambit/legacy/dist/consumer/config/extension-data';\nimport { EXT_NAME } from './constants';\nimport EjectConfCmd from './eject-conf.cmd';\nimport InstallCmd from './install.cmd';\nimport { OnComponentLoad, OnComponentAdd, OnComponentChange, OnComponentRemove } from './on-component-events';\nimport { WorkspaceExtConfig } from './types';\nimport { WatchCommand } from './watch/watch.cmd';\nimport { LinkCommand } from './link';\nimport { Watcher, WatchOptions } from './watch/watcher';\nimport { Workspace, WorkspaceInstallOptions } from './workspace';\nimport getWorkspaceSchema from './workspace.graphql';\nimport { WorkspaceUIRoot } from './workspace.ui-root';\nimport { Tag } from './tag-cmd';\nimport { CapsuleCmd, CapsuleCreateCmd, CapsuleListCmd } from './capsule.cmd';\n\nexport type WorkspaceDeps = [\n PubsubMain,\n CLIMain,\n ScopeMain,\n ComponentMain,\n IsolatorMain,\n DependencyResolverMain,\n VariantsMain,\n LoggerMain,\n GraphqlMain,\n UiMain,\n BundlerMain,\n AspectLoaderMain,\n EnvsMain\n];\n\nexport type OnComponentLoadSlot = SlotRegistry<OnComponentLoad>;\n\nexport type OnComponentChangeSlot = SlotRegistry<OnComponentChange>;\n\nexport type OnComponentAddSlot = SlotRegistry<OnComponentAdd>;\n\nexport type OnComponentRemoveSlot = SlotRegistry<OnComponentRemove>;\n\nexport type OnPreWatch = (components: Component[], watchOpts: WatchOptions) => Promise<void>;\nexport type OnPreWatchSlot = SlotRegistry<OnPreWatch>;\n\nexport default async function provideWorkspace(\n [\n pubsub,\n cli,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n loggerExt,\n graphql,\n ui,\n bundler,\n aspectLoader,\n envs,\n ]: WorkspaceDeps,\n config: WorkspaceExtConfig,\n [onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot, onPreWatchSlot]: [\n OnComponentLoadSlot,\n OnComponentChangeSlot,\n OnComponentAddSlot,\n OnComponentRemoveSlot,\n OnPreWatchSlot\n ],\n harmony: Harmony\n) {\n const bitConfig: any = harmony.config.get('teambit.harmony/bit');\n const consumer = await getConsumer(bitConfig.cwd);\n if (!consumer) return undefined;\n // TODO: get the 'workspace' name in a better way\n const logger = loggerExt.createLogger(EXT_NAME);\n const workspace = new Workspace(\n pubsub,\n config,\n consumer,\n scope,\n component,\n isolator,\n dependencyResolver,\n variants,\n aspectLoader,\n logger,\n undefined,\n harmony,\n onComponentLoadSlot,\n onComponentChangeSlot,\n envs,\n onComponentAddSlot,\n onComponentRemoveSlot,\n onPreWatchSlot,\n graphql\n );\n\n const getWorkspacePolicyFromPackageJson = () => {\n const packageJson = workspace.consumer.packageJson?.packageJsonObject || {};\n const policyFromPackageJson = dependencyResolver.getWorkspacePolicyFromPackageJson(packageJson);\n return policyFromPackageJson;\n };\n\n dependencyResolver.registerRootPolicy(getWorkspacePolicyFromPackageJson());\n\n ManyComponentsWriter.registerExternalInstaller({\n install: async () => {\n // TODO: think how we should pass this options\n const installOpts: WorkspaceInstallOptions = {\n dedupe: true,\n updateExisting: false,\n import: false,\n };\n return workspace.install(undefined, installOpts);\n },\n });\n\n consumer.onCacheClear.push(() => workspace.clearCache());\n\n if (!workspace.isLegacy) {\n LegacyComponentLoader.registerOnComponentLoadSubscriber(async (legacyComponent: ConsumerComponent) => {\n const id = await workspace.resolveComponentId(legacyComponent.id);\n const newComponent = await workspace.get(id, false, legacyComponent);\n return newComponent.state._consumer;\n });\n }\n\n ConsumerComponent.registerOnComponentConfigLoading(EXT_NAME, async (id) => {\n const componentId = await workspace.resolveComponentId(id);\n // We call here directly workspace.scope.get instead of workspace.get because part of the workspace get is loading consumer component\n // which in turn run this event, which will make an infinite loop\n // This component from scope here are only used for merging the extensions with the workspace components\n const componentFromScope = await workspace.scope.get(componentId);\n const extensions = await workspace.componentExtensions(componentId, componentFromScope);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n\n await workspace.loadExtensions(extensions);\n const extensionsWithLegacyIdsP = extensions.map(async (extension) => {\n const legacyEntry = extension.clone();\n if (legacyEntry.extensionId) {\n const compId = await workspace.resolveComponentId(legacyEntry.extensionId);\n legacyEntry.extensionId = compId._legacy;\n legacyEntry.newExtensionId = compId;\n }\n\n return legacyEntry;\n });\n const extensionsWithLegacyIds = await Promise.all(extensionsWithLegacyIdsP);\n\n return {\n defaultScope,\n extensions: ExtensionDataList.fromArray(extensionsWithLegacyIds),\n };\n });\n\n /**\n * Add default scope from harmony during export.\n */\n registerDefaultScopeGetter(async (id: BitId) => {\n const componentId = await workspace.resolveComponentId(id);\n const defaultScope = await workspace.componentDefaultScope(componentId);\n return defaultScope;\n });\n\n const workspaceSchema = getWorkspaceSchema(workspace, graphql);\n ui.registerUiRoot(new WorkspaceUIRoot(workspace, bundler));\n graphql.register(workspaceSchema);\n const capsuleCmd = new CapsuleCmd();\n capsuleCmd.commands = [new CapsuleListCmd(isolator, workspace), new CapsuleCreateCmd(workspace, isolator)];\n const commands: CommandList = [new InstallCmd(workspace, logger), new EjectConfCmd(workspace), capsuleCmd];\n const watcher = new Watcher(workspace, pubsub);\n if (workspace && !workspace.consumer.isLegacy) {\n cli.unregister('watch');\n commands.push(new WatchCommand(pubsub, logger, watcher));\n cli.unregister('link');\n commands.push(new LinkCommand(workspace, logger));\n }\n commands.push(new Tag());\n cli.register(...commands);\n component.registerHost(workspace);\n\n cli.registerOnStart(async () => {\n await workspace.loadAspects(aspectLoader.getNotLoadedConfiguredExtensions());\n });\n\n return workspace;\n}\n\n/**\n * don't use loadConsumer() here, which throws ConsumerNotFound because some commands don't require\n * the consumer to be available. such as, `bit init` or `bit list --remote`.\n * most of the commands do need the consumer. the legacy commands that need the consumer throw an\n * error when is missing. in the new/Harmony commands, such as `bis compile`, the workspace object\n * is passed to the provider, so before using it, make sure it exists.\n * keep in mind that you can't verify it in the provider itself, because the provider is running\n * always for all commands before anything else is happening.\n */\nasync function getConsumer(path?: string): Promise<Consumer | undefined> {\n return loadConsumerIfExist(path);\n}\n"]}
|
package/index.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type { default as Workspace } from './workspace';
|
|
|
5
5
|
export type { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';
|
|
6
6
|
export type { AlreadyExistsError as ComponentConfigFileAlreadyExistsError } from './component-config-file';
|
|
7
7
|
export type { WorkspaceMain } from './workspace.main.runtime';
|
|
8
|
-
|
|
8
|
+
export type { WatchOptions } from './watch/watcher';
|
|
9
9
|
export * from './events';
|
|
10
10
|
export type { WorkspaceUI } from './workspace.ui.runtime';
|
|
11
11
|
export type { SerializableResults, OnComponentEventResult } from './on-component-events';
|
package/on-component-events.ts
CHANGED
|
@@ -4,9 +4,10 @@ import { CompilationInitiator } from '@teambit/compiler';
|
|
|
4
4
|
export type SerializableResults = { results: any; toString: () => string };
|
|
5
5
|
export type OnComponentChange = (
|
|
6
6
|
component: Component,
|
|
7
|
+
files: string[],
|
|
7
8
|
initiator?: CompilationInitiator
|
|
8
9
|
) => Promise<SerializableResults>;
|
|
9
|
-
export type OnComponentAdd = (component: Component) => Promise<SerializableResults>;
|
|
10
|
+
export type OnComponentAdd = (component: Component, files: string[]) => Promise<SerializableResults>;
|
|
10
11
|
export type OnComponentRemove = (componentId: ComponentID) => Promise<SerializableResults>;
|
|
11
12
|
export type OnComponentEventResult = { extensionId: string; results: SerializableResults };
|
|
12
13
|
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/workspace",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.530",
|
|
4
4
|
"homepage": "https://bit.dev/teambit/workspace/workspace",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.workspace",
|
|
8
8
|
"name": "workspace",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.530"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"chalk": "2.4.2",
|
|
@@ -33,53 +33,53 @@
|
|
|
33
33
|
"@teambit/base-ui.surfaces.split-pane.hover-splitter": "1.0.0",
|
|
34
34
|
"@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
|
|
35
35
|
"@teambit/cli": "0.0.380",
|
|
36
|
-
"@teambit/isolator": "0.0.
|
|
36
|
+
"@teambit/isolator": "0.0.530",
|
|
37
37
|
"@teambit/component-tree": "0.0.366",
|
|
38
|
-
"@teambit/component.ui.component-status-resolver": "0.0.
|
|
39
|
-
"@teambit/harmony.modules.resolved-component": "0.0.
|
|
40
|
-
"@teambit/dependency-resolver": "0.0.
|
|
41
|
-
"@teambit/logger": "0.0.
|
|
42
|
-
"@teambit/compiler": "0.0.
|
|
43
|
-
"@teambit/component": "0.0.
|
|
44
|
-
"@teambit/graphql": "0.0.
|
|
45
|
-
"@teambit/aspect-loader": "0.0.
|
|
46
|
-
"@teambit/bundler": "0.0.
|
|
47
|
-
"@teambit/envs": "0.0.
|
|
48
|
-
"@teambit/pubsub": "0.0.
|
|
49
|
-
"@teambit/scope": "0.0.
|
|
50
|
-
"@teambit/ui": "0.0.
|
|
51
|
-
"@teambit/variants": "0.0.
|
|
38
|
+
"@teambit/component.ui.component-status-resolver": "0.0.453",
|
|
39
|
+
"@teambit/harmony.modules.resolved-component": "0.0.447",
|
|
40
|
+
"@teambit/dependency-resolver": "0.0.530",
|
|
41
|
+
"@teambit/logger": "0.0.454",
|
|
42
|
+
"@teambit/compiler": "0.0.530",
|
|
43
|
+
"@teambit/component": "0.0.530",
|
|
44
|
+
"@teambit/graphql": "0.0.530",
|
|
45
|
+
"@teambit/aspect-loader": "0.0.530",
|
|
46
|
+
"@teambit/bundler": "0.0.530",
|
|
47
|
+
"@teambit/envs": "0.0.530",
|
|
48
|
+
"@teambit/pubsub": "0.0.530",
|
|
49
|
+
"@teambit/scope": "0.0.530",
|
|
50
|
+
"@teambit/ui": "0.0.530",
|
|
51
|
+
"@teambit/variants": "0.0.456",
|
|
52
52
|
"@teambit/legacy-bit-id": "0.0.369",
|
|
53
53
|
"@teambit/bit-error": "0.0.366",
|
|
54
54
|
"@teambit/component-issues": "0.0.15",
|
|
55
55
|
"@teambit/config": "0.0.391",
|
|
56
|
-
"@teambit/harmony.modules.requireable-component": "0.0.
|
|
57
|
-
"@teambit/workspace.modules.match-pattern": "0.0.
|
|
58
|
-
"@teambit/command-bar": "0.0.
|
|
56
|
+
"@teambit/harmony.modules.requireable-component": "0.0.447",
|
|
57
|
+
"@teambit/workspace.modules.match-pattern": "0.0.449",
|
|
58
|
+
"@teambit/command-bar": "0.0.530",
|
|
59
59
|
"@teambit/design.ui.surfaces.menu.link-item": "0.0.374",
|
|
60
|
-
"@teambit/graph": "0.0.
|
|
61
|
-
"@teambit/react-router": "0.0.
|
|
62
|
-
"@teambit/sidebar": "0.0.
|
|
63
|
-
"@teambit/ui-foundation.ui.main-dropdown": "0.0.
|
|
64
|
-
"@teambit/ui-foundation.ui.menu": "0.0.
|
|
65
|
-
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.
|
|
66
|
-
"@teambit/toolbox.time.time-format": "0.0.
|
|
60
|
+
"@teambit/graph": "0.0.530",
|
|
61
|
+
"@teambit/react-router": "0.0.530",
|
|
62
|
+
"@teambit/sidebar": "0.0.530",
|
|
63
|
+
"@teambit/ui-foundation.ui.main-dropdown": "0.0.449",
|
|
64
|
+
"@teambit/ui-foundation.ui.menu": "0.0.449",
|
|
65
|
+
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.451",
|
|
66
|
+
"@teambit/toolbox.time.time-format": "0.0.446",
|
|
67
67
|
"@teambit/design.ui.styles.ellipsis": "0.0.346",
|
|
68
68
|
"@teambit/design.ui.styles.muted-italic": "0.0.35",
|
|
69
|
-
"@teambit/ui-foundation.ui.full-loader": "0.0.
|
|
70
|
-
"@teambit/ui-foundation.ui.side-bar": "0.0.
|
|
71
|
-
"@teambit/ui-foundation.ui.tree.drawer": "0.0.
|
|
69
|
+
"@teambit/ui-foundation.ui.full-loader": "0.0.449",
|
|
70
|
+
"@teambit/ui-foundation.ui.side-bar": "0.0.453",
|
|
71
|
+
"@teambit/ui-foundation.ui.tree.drawer": "0.0.449",
|
|
72
72
|
"@teambit/component-id": "0.0.370",
|
|
73
|
-
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.
|
|
74
|
-
"@teambit/deprecation": "0.0.
|
|
75
|
-
"@teambit/ui-foundation.ui.constants.z-indexes": "0.0.
|
|
76
|
-
"@teambit/ui-foundation.ui.buttons.collapser": "0.0.
|
|
77
|
-
"@teambit/ui-foundation.ui.corner": "0.0.
|
|
78
|
-
"@teambit/ui-foundation.ui.notifications.notification-context": "0.0.
|
|
79
|
-
"@teambit/ui-foundation.ui.top-bar": "0.0.
|
|
80
|
-
"@teambit/explorer.ui.gallery.component-grid": "0.0.
|
|
81
|
-
"@teambit/workspace.ui.empty-workspace": "0.0.
|
|
82
|
-
"@teambit/workspace.ui.workspace-component-card": "0.0.
|
|
73
|
+
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.450",
|
|
74
|
+
"@teambit/deprecation": "0.0.530",
|
|
75
|
+
"@teambit/ui-foundation.ui.constants.z-indexes": "0.0.449",
|
|
76
|
+
"@teambit/ui-foundation.ui.buttons.collapser": "0.0.154",
|
|
77
|
+
"@teambit/ui-foundation.ui.corner": "0.0.456",
|
|
78
|
+
"@teambit/ui-foundation.ui.notifications.notification-context": "0.0.450",
|
|
79
|
+
"@teambit/ui-foundation.ui.top-bar": "0.0.451",
|
|
80
|
+
"@teambit/explorer.ui.gallery.component-grid": "0.0.449",
|
|
81
|
+
"@teambit/workspace.ui.empty-workspace": "0.0.451",
|
|
82
|
+
"@teambit/workspace.ui.workspace-component-card": "0.0.452"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@types/react": "^17.0.8",
|
|
@@ -24,9 +24,16 @@ export const formatWatchPathsSortByComponent = (trackDirs) => {
|
|
|
24
24
|
);
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* todo: this was implemented incorrectly.
|
|
29
|
+
* the original idea of `SerializableResults` was to have each one of the aspects registered to the slot, the
|
|
30
|
+
* ability to have their own formatting to their results, and then `toString()` method to print them.
|
|
31
|
+
* Here, the printing is specifically to the Compiler aspect. It should move to where it belongs.
|
|
32
|
+
*/
|
|
27
33
|
export function formatCompileResults(compileResults: OnComponentEventResult[], verbose: boolean) {
|
|
28
|
-
if (!compileResults.length) return '';
|
|
34
|
+
if (!compileResults.length || !Array.isArray(compileResults)) return '';
|
|
29
35
|
return compileResults
|
|
36
|
+
.filter((compileResult) => compileResult.results?.results && Array.isArray(compileResult.results?.results))
|
|
30
37
|
.map((compileResult) => ({
|
|
31
38
|
extensionId: compileResult.extensionId,
|
|
32
39
|
resultsForExtension: compileResult.results?.results?.map((resultForExtension) => ({
|
package/watch/watch.cmd.tsx
CHANGED
|
@@ -8,7 +8,7 @@ import type { BitBaseEvent, PubsubMain } from '@teambit/pubsub';
|
|
|
8
8
|
// import IDs and events
|
|
9
9
|
import { CompilerAspect, CompilerErrorEvent } from '@teambit/compiler';
|
|
10
10
|
|
|
11
|
-
import { Watcher } from './watcher';
|
|
11
|
+
import { Watcher, WatchOptions } from './watcher';
|
|
12
12
|
import { formatCompileResults, formatWatchPathsSortByComponent } from './output-formatter';
|
|
13
13
|
import { OnComponentEventResult } from '../on-component-events';
|
|
14
14
|
|
|
@@ -17,6 +17,8 @@ export class WatchCommand implements Command {
|
|
|
17
17
|
onAll: (event, path) => this.logger.console(`Event: "${event}". Path: ${path}`),
|
|
18
18
|
onStart: () => {},
|
|
19
19
|
onReady: (workspace, watchPathsSortByComponent, verbose) => {
|
|
20
|
+
// eslint-disable-next-line no-console
|
|
21
|
+
console.clear();
|
|
20
22
|
if (verbose) {
|
|
21
23
|
this.logger.console(formatWatchPathsSortByComponent(watchPathsSortByComponent));
|
|
22
24
|
}
|
|
@@ -27,6 +29,8 @@ export class WatchCommand implements Command {
|
|
|
27
29
|
);
|
|
28
30
|
},
|
|
29
31
|
onChange: (filePath: string, buildResults: OnComponentEventResult[], verbose: boolean, duration) => {
|
|
32
|
+
// eslint-disable-next-line no-console
|
|
33
|
+
console.clear();
|
|
30
34
|
if (!buildResults.length) {
|
|
31
35
|
this.logger.console(`The file ${filePath} has been changed, but nothing to compile.\n\n`);
|
|
32
36
|
return;
|
|
@@ -37,6 +41,8 @@ export class WatchCommand implements Command {
|
|
|
37
41
|
this.logger.console(chalk.yellow(`Watching for component changes (${moment().format('HH:mm:ss')})...`));
|
|
38
42
|
},
|
|
39
43
|
onAdd: (filePath: string, buildResults: OnComponentEventResult[], verbose: boolean, duration) => {
|
|
44
|
+
// eslint-disable-next-line no-console
|
|
45
|
+
console.clear();
|
|
40
46
|
this.logger.console(`The file ${filePath} has been added.\n\n`);
|
|
41
47
|
this.logger.console(formatCompileResults(buildResults, verbose));
|
|
42
48
|
this.logger.console(`Finished. (${duration}ms)`);
|
|
@@ -55,7 +61,11 @@ export class WatchCommand implements Command {
|
|
|
55
61
|
alias = '';
|
|
56
62
|
group = 'development';
|
|
57
63
|
shortDescription = '';
|
|
58
|
-
options = [
|
|
64
|
+
options = [
|
|
65
|
+
['v', 'verbose', 'showing npm verbose output for inspection and prints stack trace'],
|
|
66
|
+
['', 'skip-pre-compilation', 'skip the compilation step before starting to watch'],
|
|
67
|
+
['t', 'check-types', 'EXPERIMENTAL. for typescript files, load an tsserver instance to check types'],
|
|
68
|
+
] as CommandOptions;
|
|
59
69
|
|
|
60
70
|
constructor(
|
|
61
71
|
/**
|
|
@@ -89,8 +99,8 @@ export class WatchCommand implements Command {
|
|
|
89
99
|
}
|
|
90
100
|
};
|
|
91
101
|
|
|
92
|
-
async report(cliArgs: [],
|
|
93
|
-
await this.watcher.watch({ msgs: this.msgs,
|
|
102
|
+
async report(cliArgs: [], watchOpts: WatchOptions) {
|
|
103
|
+
await this.watcher.watch({ msgs: this.msgs, ...watchOpts });
|
|
94
104
|
return 'watcher terminated';
|
|
95
105
|
}
|
|
96
106
|
}
|
package/watch/watcher.ts
CHANGED
|
@@ -22,6 +22,8 @@ import { OnComponentEventResult } from '../on-component-events';
|
|
|
22
22
|
|
|
23
23
|
export type WatcherProcessData = { watchProcess: ChildProcess; compilerId: BitId; componentIds: BitId[] };
|
|
24
24
|
|
|
25
|
+
export type WatchOptions = { verbose?: boolean; checkTypes?: boolean; skipPreCompilation?: boolean };
|
|
26
|
+
|
|
25
27
|
export class Watcher {
|
|
26
28
|
private fsWatcher: FSWatcher;
|
|
27
29
|
constructor(
|
|
@@ -32,51 +34,54 @@ export class Watcher {
|
|
|
32
34
|
private multipleWatchers: WatcherProcessData[] = []
|
|
33
35
|
) {}
|
|
34
36
|
|
|
35
|
-
async watch(opts: { msgs
|
|
37
|
+
async watch(opts: { msgs } & WatchOptions) {
|
|
36
38
|
this.verbose = Boolean(opts.verbose);
|
|
37
|
-
await this.watchAll(
|
|
39
|
+
await this.watchAll(opts);
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
get consumer(): Consumer {
|
|
41
43
|
return this.workspace.consumer;
|
|
42
44
|
}
|
|
43
45
|
|
|
44
|
-
async watchAll(opts
|
|
46
|
+
async watchAll(opts: { msgs; initiator?: CompilationInitiator } & WatchOptions) {
|
|
47
|
+
const { msgs, ...watchOpts } = opts;
|
|
45
48
|
// TODO: run build in the beginning of process (it's work like this in other envs)
|
|
46
|
-
const
|
|
47
|
-
|
|
49
|
+
const pathsToWatch = await this.getPathsToWatch();
|
|
50
|
+
const componentIds = Object.values(this.trackDirs);
|
|
51
|
+
await this.workspace.triggerOnPreWatch(componentIds, watchOpts);
|
|
52
|
+
await this.createWatcher(pathsToWatch);
|
|
48
53
|
const watcher = this.fsWatcher;
|
|
49
|
-
|
|
54
|
+
msgs?.onStart(this.workspace);
|
|
50
55
|
|
|
51
56
|
return new Promise((resolve, reject) => {
|
|
52
57
|
// prefix your command with "BIT_LOG=*" to see all watch events
|
|
53
58
|
if (process.env.BIT_LOG) {
|
|
54
|
-
if (
|
|
59
|
+
if (msgs?.onAll) watcher.on('all', msgs?.onAll);
|
|
55
60
|
}
|
|
56
61
|
watcher.on('ready', () => {
|
|
57
|
-
|
|
62
|
+
msgs?.onReady(this.workspace, this.trackDirs, this.verbose);
|
|
58
63
|
});
|
|
59
64
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
60
65
|
watcher.on('change', async (filePath) => {
|
|
61
66
|
const startTime = new Date().getTime();
|
|
62
67
|
const buildResults = (await this.handleChange(filePath, opts?.initiator)) || [];
|
|
63
68
|
const duration = new Date().getTime() - startTime;
|
|
64
|
-
|
|
69
|
+
msgs?.onChange(filePath, buildResults, this.verbose, duration);
|
|
65
70
|
});
|
|
66
71
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
67
72
|
watcher.on('add', async (filePath) => {
|
|
68
73
|
const startTime = new Date().getTime();
|
|
69
74
|
const buildResults = (await this.handleChange(filePath)) || [];
|
|
70
75
|
const duration = new Date().getTime() - startTime;
|
|
71
|
-
|
|
76
|
+
msgs?.onAdd(filePath, buildResults, this.verbose, duration);
|
|
72
77
|
});
|
|
73
78
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
74
79
|
watcher.on('unlink', async (p) => {
|
|
75
|
-
|
|
80
|
+
msgs?.onUnlink(p);
|
|
76
81
|
await this.handleChange(p);
|
|
77
82
|
});
|
|
78
83
|
watcher.on('error', (err) => {
|
|
79
|
-
|
|
84
|
+
msgs?.onError(err);
|
|
80
85
|
reject(err);
|
|
81
86
|
});
|
|
82
87
|
});
|
|
@@ -95,7 +100,7 @@ export class Watcher {
|
|
|
95
100
|
return this.completeWatch();
|
|
96
101
|
}
|
|
97
102
|
|
|
98
|
-
const buildResults = await this.executeWatchOperationsOnComponent(componentId, true, initiator);
|
|
103
|
+
const buildResults = await this.executeWatchOperationsOnComponent(componentId, [filePath], true, initiator);
|
|
99
104
|
this.completeWatch();
|
|
100
105
|
return buildResults;
|
|
101
106
|
} catch (err: any) {
|
|
@@ -118,8 +123,8 @@ export class Watcher {
|
|
|
118
123
|
const results: OnComponentEventResult[] = [];
|
|
119
124
|
if (newDirs.length) {
|
|
120
125
|
this.fsWatcher.add(newDirs);
|
|
121
|
-
const addResults = await mapSeries(newDirs, (dir) =>
|
|
122
|
-
this.executeWatchOperationsOnComponent(this.trackDirs[dir], false)
|
|
126
|
+
const addResults = await mapSeries(newDirs, async (dir) =>
|
|
127
|
+
this.executeWatchOperationsOnComponent(this.trackDirs[dir], [], false)
|
|
123
128
|
);
|
|
124
129
|
results.push(...addResults.flat());
|
|
125
130
|
}
|
|
@@ -138,6 +143,7 @@ export class Watcher {
|
|
|
138
143
|
|
|
139
144
|
private async executeWatchOperationsOnComponent(
|
|
140
145
|
componentId: ComponentID,
|
|
146
|
+
files: string[],
|
|
141
147
|
isChange = true,
|
|
142
148
|
initiator?: CompilationInitiator
|
|
143
149
|
): Promise<OnComponentEventResult[]> {
|
|
@@ -159,11 +165,13 @@ export class Watcher {
|
|
|
159
165
|
let buildResults: OnComponentEventResult[];
|
|
160
166
|
try {
|
|
161
167
|
buildResults = isChange
|
|
162
|
-
? await this.workspace.triggerOnComponentChange(componentId, initiator)
|
|
168
|
+
? await this.workspace.triggerOnComponentChange(componentId, files, initiator)
|
|
163
169
|
: await this.workspace.triggerOnComponentAdd(componentId);
|
|
164
170
|
} catch (err: any) {
|
|
165
|
-
// do not
|
|
166
|
-
|
|
171
|
+
// do not exit the watch process on errors, just print them
|
|
172
|
+
const msg = `found an issue during onComponentChange or onComponentAdd hooks`;
|
|
173
|
+
logger.error(msg, err);
|
|
174
|
+
logger.console(`\n${msg}: ${err.message || err}`);
|
|
167
175
|
return [];
|
|
168
176
|
}
|
|
169
177
|
if (buildResults && buildResults.length) {
|
|
@@ -231,8 +239,7 @@ export class Watcher {
|
|
|
231
239
|
return this.findTrackDirByFilePathRecursively(parentDir);
|
|
232
240
|
}
|
|
233
241
|
|
|
234
|
-
private async createWatcher() {
|
|
235
|
-
const pathsToWatch = await this.getPathsToWatch();
|
|
242
|
+
private async createWatcher(pathsToWatch: string[]) {
|
|
236
243
|
this.fsWatcher = chokidar.watch(pathsToWatch, {
|
|
237
244
|
ignoreInitial: true,
|
|
238
245
|
// Using the function way since the regular way not working as expected
|
|
@@ -16,7 +16,7 @@ import { VariantsAspect } from '@teambit/variants';
|
|
|
16
16
|
import { EXT_NAME } from './constants';
|
|
17
17
|
import { OnComponentAdd, OnComponentChange, OnComponentRemove, OnComponentLoad } from './on-component-events';
|
|
18
18
|
import { WorkspaceAspect } from './workspace.aspect';
|
|
19
|
-
import workspaceProvider from './workspace.provider';
|
|
19
|
+
import workspaceProvider, { OnPreWatch } from './workspace.provider';
|
|
20
20
|
|
|
21
21
|
export const WorkspaceMain = {
|
|
22
22
|
name: EXT_NAME,
|
|
@@ -41,6 +41,7 @@ export const WorkspaceMain = {
|
|
|
41
41
|
Slot.withType<OnComponentChange>(),
|
|
42
42
|
Slot.withType<OnComponentAdd>(),
|
|
43
43
|
Slot.withType<OnComponentRemove>(),
|
|
44
|
+
Slot.withType<OnPreWatch>(),
|
|
44
45
|
],
|
|
45
46
|
provider: workspaceProvider,
|
|
46
47
|
defineRuntime: 'browser',
|
package/workspace.provider.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { PubsubMain } from '@teambit/pubsub';
|
|
|
2
2
|
import type { AspectLoaderMain } from '@teambit/aspect-loader';
|
|
3
3
|
import { BundlerMain } from '@teambit/bundler';
|
|
4
4
|
import { CLIMain, CommandList } from '@teambit/cli';
|
|
5
|
-
import { ComponentMain } from '@teambit/component';
|
|
5
|
+
import type { ComponentMain, Component } from '@teambit/component';
|
|
6
6
|
import { DependencyResolverMain } from '@teambit/dependency-resolver';
|
|
7
7
|
import { EnvsMain } from '@teambit/envs';
|
|
8
8
|
import { GraphqlMain } from '@teambit/graphql';
|
|
@@ -26,7 +26,7 @@ import { OnComponentLoad, OnComponentAdd, OnComponentChange, OnComponentRemove }
|
|
|
26
26
|
import { WorkspaceExtConfig } from './types';
|
|
27
27
|
import { WatchCommand } from './watch/watch.cmd';
|
|
28
28
|
import { LinkCommand } from './link';
|
|
29
|
-
import { Watcher } from './watch/watcher';
|
|
29
|
+
import { Watcher, WatchOptions } from './watch/watcher';
|
|
30
30
|
import { Workspace, WorkspaceInstallOptions } from './workspace';
|
|
31
31
|
import getWorkspaceSchema from './workspace.graphql';
|
|
32
32
|
import { WorkspaceUIRoot } from './workspace.ui-root';
|
|
@@ -57,6 +57,9 @@ export type OnComponentAddSlot = SlotRegistry<OnComponentAdd>;
|
|
|
57
57
|
|
|
58
58
|
export type OnComponentRemoveSlot = SlotRegistry<OnComponentRemove>;
|
|
59
59
|
|
|
60
|
+
export type OnPreWatch = (components: Component[], watchOpts: WatchOptions) => Promise<void>;
|
|
61
|
+
export type OnPreWatchSlot = SlotRegistry<OnPreWatch>;
|
|
62
|
+
|
|
60
63
|
export default async function provideWorkspace(
|
|
61
64
|
[
|
|
62
65
|
pubsub,
|
|
@@ -74,11 +77,12 @@ export default async function provideWorkspace(
|
|
|
74
77
|
envs,
|
|
75
78
|
]: WorkspaceDeps,
|
|
76
79
|
config: WorkspaceExtConfig,
|
|
77
|
-
[onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot]: [
|
|
80
|
+
[onComponentLoadSlot, onComponentChangeSlot, onComponentAddSlot, onComponentRemoveSlot, onPreWatchSlot]: [
|
|
78
81
|
OnComponentLoadSlot,
|
|
79
82
|
OnComponentChangeSlot,
|
|
80
83
|
OnComponentAddSlot,
|
|
81
|
-
OnComponentRemoveSlot
|
|
84
|
+
OnComponentRemoveSlot,
|
|
85
|
+
OnPreWatchSlot
|
|
82
86
|
],
|
|
83
87
|
harmony: Harmony
|
|
84
88
|
) {
|
|
@@ -105,6 +109,7 @@ export default async function provideWorkspace(
|
|
|
105
109
|
envs,
|
|
106
110
|
onComponentAddSlot,
|
|
107
111
|
onComponentRemoveSlot,
|
|
112
|
+
onPreWatchSlot,
|
|
108
113
|
graphql
|
|
109
114
|
);
|
|
110
115
|
|
package/workspace.ts
CHANGED
|
@@ -77,13 +77,15 @@ import {
|
|
|
77
77
|
SerializableResults,
|
|
78
78
|
} from './on-component-events';
|
|
79
79
|
import { WorkspaceExtConfig } from './types';
|
|
80
|
-
import { Watcher } from './watch/watcher';
|
|
80
|
+
import { Watcher, WatchOptions } from './watch/watcher';
|
|
81
81
|
import { ComponentStatus } from './workspace-component/component-status';
|
|
82
82
|
import {
|
|
83
83
|
OnComponentAddSlot,
|
|
84
84
|
OnComponentChangeSlot,
|
|
85
85
|
OnComponentLoadSlot,
|
|
86
86
|
OnComponentRemoveSlot,
|
|
87
|
+
OnPreWatch,
|
|
88
|
+
OnPreWatchSlot,
|
|
87
89
|
} from './workspace.provider';
|
|
88
90
|
import { WorkspaceComponentLoader } from './workspace-component/workspace-component-loader';
|
|
89
91
|
import { IncorrectEnvAspect } from './exceptions/incorrect-env-aspect';
|
|
@@ -190,6 +192,8 @@ export class Workspace implements ComponentFactory {
|
|
|
190
192
|
|
|
191
193
|
private onComponentRemoveSlot: OnComponentRemoveSlot,
|
|
192
194
|
|
|
195
|
+
private onPreWatchSlot: OnPreWatchSlot,
|
|
196
|
+
|
|
193
197
|
private graphql: GraphqlMain
|
|
194
198
|
) {
|
|
195
199
|
// TODO: refactor - prefer to avoid code inside the constructor.
|
|
@@ -246,6 +250,11 @@ export class Workspace implements ComponentFactory {
|
|
|
246
250
|
return this;
|
|
247
251
|
}
|
|
248
252
|
|
|
253
|
+
registerOnPreWatch(onPreWatchFunc: OnPreWatch) {
|
|
254
|
+
this.onPreWatchSlot.register(onPreWatchFunc);
|
|
255
|
+
return this;
|
|
256
|
+
}
|
|
257
|
+
|
|
249
258
|
/**
|
|
250
259
|
* name of the workspace as configured in either `workspace.json`.
|
|
251
260
|
* defaults to workspace root directory name.
|
|
@@ -468,7 +477,11 @@ export class Workspace implements ComponentFactory {
|
|
|
468
477
|
this.componentList = new ComponentsList(this.consumer);
|
|
469
478
|
}
|
|
470
479
|
|
|
471
|
-
async triggerOnComponentChange(
|
|
480
|
+
async triggerOnComponentChange(
|
|
481
|
+
id: ComponentID,
|
|
482
|
+
files: string[],
|
|
483
|
+
initiator?: CompilationInitiator
|
|
484
|
+
): Promise<OnComponentEventResult[]> {
|
|
472
485
|
const component = await this.get(id);
|
|
473
486
|
// if a new file was added, upon component-load, its .bitmap entry is updated to include the
|
|
474
487
|
// new file. write these changes to the .bitmap file so then other processes have access to
|
|
@@ -477,7 +490,7 @@ export class Workspace implements ComponentFactory {
|
|
|
477
490
|
const onChangeEntries = this.onComponentChangeSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]
|
|
478
491
|
const results: Array<{ extensionId: string; results: SerializableResults }> = [];
|
|
479
492
|
await mapSeries(onChangeEntries, async ([extension, onChangeFunc]) => {
|
|
480
|
-
const onChangeResult = await onChangeFunc(component, initiator);
|
|
493
|
+
const onChangeResult = await onChangeFunc(component, files, initiator);
|
|
481
494
|
results.push({ extensionId: extension, results: onChangeResult });
|
|
482
495
|
});
|
|
483
496
|
|
|
@@ -490,8 +503,9 @@ export class Workspace implements ComponentFactory {
|
|
|
490
503
|
const component = await this.get(id);
|
|
491
504
|
const onAddEntries = this.onComponentAddSlot.toArray(); // e.g. [ [ 'teambit.bit/compiler', [Function: bound onComponentChange] ] ]
|
|
492
505
|
const results: Array<{ extensionId: string; results: SerializableResults }> = [];
|
|
506
|
+
const files = component.state.filesystem.files.map((file) => file.path);
|
|
493
507
|
await mapSeries(onAddEntries, async ([extension, onAddFunc]) => {
|
|
494
|
-
const onAddResult = await onAddFunc(component);
|
|
508
|
+
const onAddResult = await onAddFunc(component, files);
|
|
495
509
|
results.push({ extensionId: extension, results: onAddResult });
|
|
496
510
|
});
|
|
497
511
|
|
|
@@ -664,6 +678,18 @@ export class Workspace implements ComponentFactory {
|
|
|
664
678
|
return this.componentDirFromLegacyId(componentId._legacy, bitMapOptions, options);
|
|
665
679
|
}
|
|
666
680
|
|
|
681
|
+
/**
|
|
682
|
+
* component's files in the workspace are symlinked to the node_modules, and a package.json file is generated on that
|
|
683
|
+
* package directory to simulate a valid node package.
|
|
684
|
+
* @returns the package directory inside the node_module.
|
|
685
|
+
* by default the absolute path, unless `options.relative` was set
|
|
686
|
+
*/
|
|
687
|
+
componentPackageDir(component: Component, options = { relative: false }): string {
|
|
688
|
+
const packageName = componentIdToPackageName(component.state._consumer);
|
|
689
|
+
const packageDir = path.join('node_modules', packageName);
|
|
690
|
+
return options.relative ? packageDir : this.consumer.toAbsolutePath(packageDir);
|
|
691
|
+
}
|
|
692
|
+
|
|
667
693
|
private componentDirFromLegacyId(
|
|
668
694
|
bitId: BitId,
|
|
669
695
|
bitMapOptions?: GetBitMapComponentOptions,
|
|
@@ -803,6 +829,14 @@ export class Workspace implements ComponentFactory {
|
|
|
803
829
|
return mergedExtensions;
|
|
804
830
|
}
|
|
805
831
|
|
|
832
|
+
async triggerOnPreWatch(componentIds: ComponentID[], watchOpts: WatchOptions) {
|
|
833
|
+
const components = await this.getMany(componentIds);
|
|
834
|
+
const preWatchFunctions = this.onPreWatchSlot.values();
|
|
835
|
+
await mapSeries(preWatchFunctions, async (func) => {
|
|
836
|
+
await func(components, watchOpts);
|
|
837
|
+
});
|
|
838
|
+
}
|
|
839
|
+
|
|
806
840
|
/**
|
|
807
841
|
* This will mutate the entries with extensionId prop to have resolved legacy id
|
|
808
842
|
* This should be worked on the extension data list not the new aspect list
|