@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 CHANGED
@@ -7,6 +7,7 @@ import { Workspace } from '.';
7
7
 
8
8
  type CreateOpts = {
9
9
  baseDir?: string;
10
+ rootBaseDir?: string;
10
11
  alwaysNew?: boolean;
11
12
  seedersOnly?: boolean;
12
13
  id: string;
@@ -19,7 +20,12 @@ export class CapsuleCreateCmd implements Command {
19
20
  group = 'capsules';
20
21
  alias = '';
21
22
  options = [
22
- ['b', 'base-dir <name>', 'set base dir of all capsules'],
23
+ [
24
+ 'b',
25
+ 'base-dir <name>',
26
+ 'set base dir of all capsules (hashed to create the base dir inside the root dir - host path by default)',
27
+ ],
28
+ ['r', 'root-base-dir <name>', 'set root base dir of all capsules (absolute path to use as root dir)'],
23
29
  ['a', 'always-new', 'create new environment for capsule'],
24
30
  ['s', 'seeders-only', 'create capsules for the seeders only (not for the entire graph)'],
25
31
  ['i', 'id <name>', 'reuse capsule of certain name'],
@@ -32,12 +38,13 @@ export class CapsuleCreateCmd implements Command {
32
38
 
33
39
  async create(
34
40
  [componentIds = []]: [string[]],
35
- { baseDir, alwaysNew = false, id, installPackages = false, seedersOnly = false }: CreateOpts
41
+ { baseDir, rootBaseDir, alwaysNew = false, id, installPackages = false, seedersOnly = false }: CreateOpts
36
42
  ): Promise<CapsuleList> {
37
43
  // @todo: why it is not an array?
38
44
  if (componentIds && !Array.isArray(componentIds)) componentIds = [componentIds];
39
45
  const capsuleOptions: IsolateComponentsOptions = {
40
46
  baseDir,
47
+ rootBaseDir,
41
48
  installOptions: { installPackages },
42
49
  alwaysNew,
43
50
  seedersOnly,
@@ -3,6 +3,7 @@ import { CapsuleList, IsolatorMain } from '@teambit/isolator';
3
3
  import { Workspace } from '.';
4
4
  declare type CreateOpts = {
5
5
  baseDir?: string;
6
+ rootBaseDir?: string;
6
7
  alwaysNew?: boolean;
7
8
  seedersOnly?: boolean;
8
9
  id: string;
@@ -17,7 +18,7 @@ export declare class CapsuleCreateCmd implements Command {
17
18
  alias: string;
18
19
  options: CommandOptions;
19
20
  constructor(workspace: Workspace, isolator: IsolatorMain);
20
- create([componentIds]: [string[]], { baseDir, alwaysNew, id, installPackages, seedersOnly }: CreateOpts): Promise<CapsuleList>;
21
+ create([componentIds]: [string[]], { baseDir, rootBaseDir, alwaysNew, id, installPackages, seedersOnly }: CreateOpts): Promise<CapsuleList>;
21
22
  report([componentIds]: [string[]], opts: CreateOpts): Promise<string>;
22
23
  json([componentIds]: [string[]], opts: CreateOpts): Promise<{
23
24
  id: string;
@@ -43,11 +43,12 @@ class CapsuleCreateCmd {
43
43
  (0, _defineProperty2().default)(this, "description", `create capsules`);
44
44
  (0, _defineProperty2().default)(this, "group", 'capsules');
45
45
  (0, _defineProperty2().default)(this, "alias", '');
46
- (0, _defineProperty2().default)(this, "options", [['b', 'base-dir <name>', 'set base dir of all capsules'], ['a', 'always-new', 'create new environment for capsule'], ['s', 'seeders-only', 'create capsules for the seeders only (not for the entire graph)'], ['i', 'id <name>', 'reuse capsule of certain name'], ['j', 'json', 'json format'], ['d', 'install-packages', 'install packages by the package-manager'], ['p', 'package-manager <name>', 'npm, yarn or pnpm, default to npm']]);
46
+ (0, _defineProperty2().default)(this, "options", [['b', 'base-dir <name>', 'set base dir of all capsules (hashed to create the base dir inside the root dir - host path by default)'], ['r', 'root-base-dir <name>', 'set root base dir of all capsules (absolute path to use as root dir)'], ['a', 'always-new', 'create new environment for capsule'], ['s', 'seeders-only', 'create capsules for the seeders only (not for the entire graph)'], ['i', 'id <name>', 'reuse capsule of certain name'], ['j', 'json', 'json format'], ['d', 'install-packages', 'install packages by the package-manager'], ['p', 'package-manager <name>', 'npm, yarn or pnpm, default to npm']]);
47
47
  }
48
48
 
49
49
  async create([componentIds = []], {
50
50
  baseDir,
51
+ rootBaseDir,
51
52
  alwaysNew = false,
52
53
  id,
53
54
  installPackages = false,
@@ -57,6 +58,7 @@ class CapsuleCreateCmd {
57
58
  if (componentIds && !Array.isArray(componentIds)) componentIds = [componentIds];
58
59
  const capsuleOptions = {
59
60
  baseDir,
61
+ rootBaseDir,
60
62
  installOptions: {
61
63
  installPackages
62
64
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["capsule.cmd.ts"],"names":["CapsuleCreateCmd","constructor","workspace","isolator","create","componentIds","baseDir","alwaysNew","id","installPackages","seedersOnly","Array","isArray","capsuleOptions","installOptions","includeFromNestedHosts","name","ids","resolveMultipleComponentIds","network","isolateComponents","capsules","graphCapsules","report","opts","capsuleOutput","map","capsule","chalk","bold","component","toString","path","join","title","length","green","json","c","CapsuleListCmd","list","workspaceCapsulesRootDir","scopeCapsulesRootDir","scopeAspectsCapsulesRootDir","getCapsulesRootDirs","cyan","rootDirs","getCapsulesRootDir","scope","getAspectCapsulePath","CapsuleCmd","args"],"mappings":"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","sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { CapsuleList, IsolateComponentsOptions, IsolatorMain } from '@teambit/isolator';\nimport chalk from 'chalk';\n\nimport { Workspace } from '.';\n\ntype CreateOpts = {\n baseDir?: string;\n alwaysNew?: boolean;\n seedersOnly?: boolean;\n id: string;\n installPackages?: boolean;\n};\n\nexport class CapsuleCreateCmd implements Command {\n name = 'create [componentIds...]';\n description = `create capsules`;\n group = 'capsules';\n alias = '';\n options = [\n ['b', 'base-dir <name>', 'set base dir of all capsules'],\n ['a', 'always-new', 'create new environment for capsule'],\n ['s', 'seeders-only', 'create capsules for the seeders only (not for the entire graph)'],\n ['i', 'id <name>', 'reuse capsule of certain name'],\n ['j', 'json', 'json format'],\n ['d', 'install-packages', 'install packages by the package-manager'],\n ['p', 'package-manager <name>', 'npm, yarn or pnpm, default to npm'],\n ] as CommandOptions;\n\n constructor(private workspace: Workspace, private isolator: IsolatorMain) {}\n\n async create(\n [componentIds = []]: [string[]],\n { baseDir, alwaysNew = false, id, installPackages = false, seedersOnly = false }: CreateOpts\n ): Promise<CapsuleList> {\n // @todo: why it is not an array?\n if (componentIds && !Array.isArray(componentIds)) componentIds = [componentIds];\n const capsuleOptions: IsolateComponentsOptions = {\n baseDir,\n installOptions: { installPackages },\n alwaysNew,\n seedersOnly,\n includeFromNestedHosts: true,\n name: id,\n };\n const ids = await this.workspace.resolveMultipleComponentIds(componentIds);\n const network = await this.isolator.isolateComponents(ids, capsuleOptions);\n const capsules = network.graphCapsules;\n return capsules;\n }\n\n async report([componentIds]: [string[]], opts: CreateOpts) {\n // @ts-ignore\n const capsules = await this.create(componentIds, opts);\n const capsuleOutput = capsules\n .map((capsule) => `${chalk.bold(capsule.component.id.toString())} - ${capsule.path}`)\n .join('\\n');\n const title = `${capsules.length} capsule(s) were created successfully`;\n return `${chalk.green(title)}\\n${capsuleOutput}`;\n }\n\n async json([componentIds]: [string[]], opts: CreateOpts) {\n // @ts-ignore\n const capsules = await this.create(componentIds, opts);\n return capsules.map((c) => ({\n id: c.component.id.toString(),\n path: c.path,\n }));\n }\n}\n\nexport class CapsuleListCmd implements Command {\n name = 'list';\n description = `list all capsules`;\n shortDescription = 'list all capsules';\n group = 'capsules';\n alias = '';\n options = [['j', 'json', 'json format']] as CommandOptions;\n\n constructor(private isolator: IsolatorMain, private workspace: Workspace) {}\n\n async report() {\n const list = await this.isolator.list(this.workspace.path);\n const { workspaceCapsulesRootDir, scopeCapsulesRootDir, scopeAspectsCapsulesRootDir } = this.getCapsulesRootDirs();\n // TODO: improve output\n return chalk.green(`found ${chalk.cyan(list.capsules.length.toString())} capsule(s) for workspace: ${chalk.cyan(\n list.workspace\n )}\nworkspace capsules root-dir: ${chalk.cyan(workspaceCapsulesRootDir)}\nscope capsules root-dir: ${chalk.cyan(scopeCapsulesRootDir)}\nscope's aspects capsules root-dir: ${chalk.cyan(scopeAspectsCapsulesRootDir)}\nuse --json to get the list of all workspace capsules`);\n }\n\n async json() {\n const list = await this.isolator.list(this.workspace.path);\n const rootDirs = this.getCapsulesRootDirs();\n return { ...list, ...rootDirs };\n }\n\n private getCapsulesRootDirs() {\n const workspaceCapsulesRootDir = this.isolator.getCapsulesRootDir(this.workspace.path);\n const scopeCapsulesRootDir = this.isolator.getCapsulesRootDir(this.workspace.scope.path);\n const scopeAspectsCapsulesRootDir = this.isolator.getCapsulesRootDir(this.workspace.scope.getAspectCapsulePath());\n\n return { workspaceCapsulesRootDir, scopeCapsulesRootDir, scopeAspectsCapsulesRootDir };\n }\n}\n\nexport class CapsuleCmd implements Command {\n name = 'capsule <sub-command>';\n shortDescription = 'manage capsules';\n description = `manage capsules.\na capsule is a directory contains the component code, isolated from the workspace.\nnormally, capsules are created during the build process, the component files are copied and the packages are installed\nvia the configured package-manager. the purpose is to compile/test them in isolation to make sure they will work for\nother users after publishing/exporting them.`;\n alias = '';\n group = 'capsules';\n commands: Command[] = [];\n options = [] as CommandOptions;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async report(args: [string]) {\n // it should never be here. Yargs throws an error before reaching this method.\n return `Please specify a sub-command`;\n }\n}\n"]}
1
+ {"version":3,"sources":["capsule.cmd.ts"],"names":["CapsuleCreateCmd","constructor","workspace","isolator","create","componentIds","baseDir","rootBaseDir","alwaysNew","id","installPackages","seedersOnly","Array","isArray","capsuleOptions","installOptions","includeFromNestedHosts","name","ids","resolveMultipleComponentIds","network","isolateComponents","capsules","graphCapsules","report","opts","capsuleOutput","map","capsule","chalk","bold","component","toString","path","join","title","length","green","json","c","CapsuleListCmd","list","workspaceCapsulesRootDir","scopeCapsulesRootDir","scopeAspectsCapsulesRootDir","getCapsulesRootDirs","cyan","rootDirs","getCapsulesRootDir","scope","getAspectCapsulePath","CapsuleCmd","args"],"mappings":"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","sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { CapsuleList, IsolateComponentsOptions, IsolatorMain } from '@teambit/isolator';\nimport chalk from 'chalk';\n\nimport { Workspace } from '.';\n\ntype CreateOpts = {\n baseDir?: string;\n rootBaseDir?: string;\n alwaysNew?: boolean;\n seedersOnly?: boolean;\n id: string;\n installPackages?: boolean;\n};\n\nexport class CapsuleCreateCmd implements Command {\n name = 'create [componentIds...]';\n description = `create capsules`;\n group = 'capsules';\n alias = '';\n options = [\n [\n 'b',\n 'base-dir <name>',\n 'set base dir of all capsules (hashed to create the base dir inside the root dir - host path by default)',\n ],\n ['r', 'root-base-dir <name>', 'set root base dir of all capsules (absolute path to use as root dir)'],\n ['a', 'always-new', 'create new environment for capsule'],\n ['s', 'seeders-only', 'create capsules for the seeders only (not for the entire graph)'],\n ['i', 'id <name>', 'reuse capsule of certain name'],\n ['j', 'json', 'json format'],\n ['d', 'install-packages', 'install packages by the package-manager'],\n ['p', 'package-manager <name>', 'npm, yarn or pnpm, default to npm'],\n ] as CommandOptions;\n\n constructor(private workspace: Workspace, private isolator: IsolatorMain) {}\n\n async create(\n [componentIds = []]: [string[]],\n { baseDir, rootBaseDir, alwaysNew = false, id, installPackages = false, seedersOnly = false }: CreateOpts\n ): Promise<CapsuleList> {\n // @todo: why it is not an array?\n if (componentIds && !Array.isArray(componentIds)) componentIds = [componentIds];\n const capsuleOptions: IsolateComponentsOptions = {\n baseDir,\n rootBaseDir,\n installOptions: { installPackages },\n alwaysNew,\n seedersOnly,\n includeFromNestedHosts: true,\n name: id,\n };\n const ids = await this.workspace.resolveMultipleComponentIds(componentIds);\n const network = await this.isolator.isolateComponents(ids, capsuleOptions);\n const capsules = network.graphCapsules;\n return capsules;\n }\n\n async report([componentIds]: [string[]], opts: CreateOpts) {\n // @ts-ignore\n const capsules = await this.create(componentIds, opts);\n const capsuleOutput = capsules\n .map((capsule) => `${chalk.bold(capsule.component.id.toString())} - ${capsule.path}`)\n .join('\\n');\n const title = `${capsules.length} capsule(s) were created successfully`;\n return `${chalk.green(title)}\\n${capsuleOutput}`;\n }\n\n async json([componentIds]: [string[]], opts: CreateOpts) {\n // @ts-ignore\n const capsules = await this.create(componentIds, opts);\n return capsules.map((c) => ({\n id: c.component.id.toString(),\n path: c.path,\n }));\n }\n}\n\nexport class CapsuleListCmd implements Command {\n name = 'list';\n description = `list all capsules`;\n shortDescription = 'list all capsules';\n group = 'capsules';\n alias = '';\n options = [['j', 'json', 'json format']] as CommandOptions;\n\n constructor(private isolator: IsolatorMain, private workspace: Workspace) {}\n\n async report() {\n const list = await this.isolator.list(this.workspace.path);\n const { workspaceCapsulesRootDir, scopeCapsulesRootDir, scopeAspectsCapsulesRootDir } = this.getCapsulesRootDirs();\n // TODO: improve output\n return chalk.green(`found ${chalk.cyan(list.capsules.length.toString())} capsule(s) for workspace: ${chalk.cyan(\n list.workspace\n )}\nworkspace capsules root-dir: ${chalk.cyan(workspaceCapsulesRootDir)}\nscope capsules root-dir: ${chalk.cyan(scopeCapsulesRootDir)}\nscope's aspects capsules root-dir: ${chalk.cyan(scopeAspectsCapsulesRootDir)}\nuse --json to get the list of all workspace capsules`);\n }\n\n async json() {\n const list = await this.isolator.list(this.workspace.path);\n const rootDirs = this.getCapsulesRootDirs();\n return { ...list, ...rootDirs };\n }\n\n private getCapsulesRootDirs() {\n const workspaceCapsulesRootDir = this.isolator.getCapsulesRootDir(this.workspace.path);\n const scopeCapsulesRootDir = this.isolator.getCapsulesRootDir(this.workspace.scope.path);\n const scopeAspectsCapsulesRootDir = this.isolator.getCapsulesRootDir(this.workspace.scope.getAspectCapsulePath());\n\n return { workspaceCapsulesRootDir, scopeCapsulesRootDir, scopeAspectsCapsulesRootDir };\n }\n}\n\nexport class CapsuleCmd implements Command {\n name = 'capsule <sub-command>';\n shortDescription = 'manage capsules';\n description = `manage capsules.\na capsule is a directory contains the component code, isolated from the workspace.\nnormally, capsules are created during the build process, the component files are copied and the packages are installed\nvia the configured package-manager. the purpose is to compile/test them in isolation to make sure they will work for\nother users after publishing/exporting them.`;\n alias = '';\n group = 'capsules';\n commands: Command[] = [];\n options = [] as CommandOptions;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async report(args: [string]) {\n // it should never be here. Yargs throws an error before reaching this method.\n return `Please specify a sub-command`;\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export type { default as Workspace } from './workspace';
3
3
  export type { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';
4
4
  export type { AlreadyExistsError as ComponentConfigFileAlreadyExistsError } from './component-config-file';
5
5
  export type { WorkspaceMain } from './workspace.main.runtime';
6
+ export type { WatchOptions } from './watch/watcher';
6
7
  export * from './events';
7
8
  export type { WorkspaceUI } from './workspace.ui.runtime';
8
9
  export type { SerializableResults, OnComponentEventResult } from './on-component-events';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["WorkspaceAspect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAQA;;AAAA;AAAA;AAAA;AAAA;AAAA;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;;eAIeA,4B","sourcesContent":["import { WorkspaceAspect } from './workspace.aspect';\n// eslint-disable-next-line import/prefer-default-export\nexport type { default as Workspace } from './workspace';\n// TODO: change to module path once track the utils folder\nexport type { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';\nexport type { AlreadyExistsError as ComponentConfigFileAlreadyExistsError } from './component-config-file';\nexport type { WorkspaceMain } from './workspace.main.runtime';\n\nexport * from './events';\nexport type { WorkspaceUI } from './workspace.ui.runtime';\nexport type { SerializableResults, OnComponentEventResult } from './on-component-events';\nexport { ComponentStatus } from './workspace-component';\nexport { WorkspaceModelComponent } from './ui/workspace/workspace-model';\nexport { WorkspaceContext } from './ui/workspace/workspace-context';\nexport type { WorkspaceComponent } from './workspace-component';\n\nexport { WorkspaceAspect };\nexport default WorkspaceAspect;\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["WorkspaceAspect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAQA;;AAAA;AAAA;AAAA;AAAA;AAAA;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;;eAIeA,4B","sourcesContent":["import { WorkspaceAspect } from './workspace.aspect';\n// eslint-disable-next-line import/prefer-default-export\nexport type { default as Workspace } from './workspace';\n// TODO: change to module path once track the utils folder\nexport type { ResolvedComponent } from '@teambit/harmony.modules.resolved-component';\nexport type { AlreadyExistsError as ComponentConfigFileAlreadyExistsError } from './component-config-file';\nexport type { WorkspaceMain } from './workspace.main.runtime';\nexport type { WatchOptions } from './watch/watcher';\nexport * from './events';\nexport type { WorkspaceUI } from './workspace.ui.runtime';\nexport type { SerializableResults, OnComponentEventResult } from './on-component-events';\nexport { ComponentStatus } from './workspace-component';\nexport { WorkspaceModelComponent } from './ui/workspace/workspace-model';\nexport { WorkspaceContext } from './ui/workspace/workspace-context';\nexport type { WorkspaceComponent } from './workspace-component';\n\nexport { WorkspaceAspect };\nexport default WorkspaceAspect;\n"]}
@@ -4,8 +4,8 @@ export declare type SerializableResults = {
4
4
  results: any;
5
5
  toString: () => string;
6
6
  };
7
- export declare type OnComponentChange = (component: Component, initiator?: CompilationInitiator) => Promise<SerializableResults>;
8
- export declare type OnComponentAdd = (component: Component) => Promise<SerializableResults>;
7
+ export declare type OnComponentChange = (component: Component, files: string[], initiator?: CompilationInitiator) => Promise<SerializableResults>;
8
+ export declare type OnComponentAdd = (component: Component, files: string[]) => Promise<SerializableResults>;
9
9
  export declare type OnComponentRemove = (componentId: ComponentID) => Promise<SerializableResults>;
10
10
  export declare type OnComponentEventResult = {
11
11
  extensionId: string;
@@ -32,17 +32,28 @@ const formatWatchPathsSortByComponent = trackDirs => {
32
32
  ${_chalk().default.green('√')} SUCCESS\t${trackDirs[watchPath]}\n
33
33
  \t - ${watchPath}\n\n`, ` ${_chalk().default.underline('STATUS\t\tCOMPONENT ID')}\n`);
34
34
  };
35
+ /**
36
+ * todo: this was implemented incorrectly.
37
+ * the original idea of `SerializableResults` was to have each one of the aspects registered to the slot, the
38
+ * ability to have their own formatting to their results, and then `toString()` method to print them.
39
+ * Here, the printing is specifically to the Compiler aspect. It should move to where it belongs.
40
+ */
41
+
35
42
 
36
43
  exports.formatWatchPathsSortByComponent = formatWatchPathsSortByComponent;
37
44
 
38
45
  function formatCompileResults(compileResults, verbose) {
39
- if (!compileResults.length) return '';
40
- return compileResults.map(compileResult => {
46
+ if (!compileResults.length || !Array.isArray(compileResults)) return '';
47
+ return compileResults.filter(compileResult => {
41
48
  var _compileResult$result, _compileResult$result2;
42
49
 
50
+ return ((_compileResult$result = compileResult.results) === null || _compileResult$result === void 0 ? void 0 : _compileResult$result.results) && Array.isArray((_compileResult$result2 = compileResult.results) === null || _compileResult$result2 === void 0 ? void 0 : _compileResult$result2.results);
51
+ }).map(compileResult => {
52
+ var _compileResult$result3, _compileResult$result4;
53
+
43
54
  return {
44
55
  extensionId: compileResult.extensionId,
45
- resultsForExtension: (_compileResult$result = compileResult.results) === null || _compileResult$result === void 0 ? void 0 : (_compileResult$result2 = _compileResult$result.results) === null || _compileResult$result2 === void 0 ? void 0 : _compileResult$result2.map(resultForExtension => ({
56
+ resultsForExtension: (_compileResult$result3 = compileResult.results) === null || _compileResult$result3 === void 0 ? void 0 : (_compileResult$result4 = _compileResult$result3.results) === null || _compileResult$result4 === void 0 ? void 0 : _compileResult$result4.map(resultForExtension => ({
46
57
  component: resultForExtension.component,
47
58
  componentFilesAsString: verboseComponentFilesArrayToString(resultForExtension.buildResults)
48
59
  }))
@@ -1 +1 @@
1
- {"version":3,"sources":["output-formatter.ts"],"names":["verboseComponentFilesArrayToString","componentFiles","reduce","outputString","filePath","resultsForExtensionArrayToString","resultsForExtension","verbose","resultForExtension","chalk","green","component","componentFilesAsString","formatWatchPathsSortByComponent","trackDirs","Object","keys","watchPath","underline","formatCompileResults","compileResults","length","map","compileResult","extensionId","results","buildResults"],"mappings":";;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA,MAAMA,kCAAkC,GAAIC,cAAD,IAAoB;AAC7D,SAAOA,cAAc,CAACC,MAAf,CAAsB,CAACC,YAAD,EAAeC,QAAf,KAA6B,GAAED,YAAa,SAAQC,QAAS,IAAnF,EAAyF,EAAzF,CAAP;AACD,CAFD;;AAIA,MAAMC,gCAAgC,GAAG,CAACC,mBAAD,EAAsBC,OAAtB,KAAkC;AACzE,SAAOD,mBAAmB,CAACJ,MAApB,CACL,CAACC,YAAD,EAAeK,kBAAf,KACG,GAAEL,YAAa,GAAEM,iBAAMC,KAAN,CAAY,GAAZ,CAAiB,YAAWF,kBAAkB,CAACG,SAAU;AACjF,OAAOJ,OAAO,GAAGC,kBAAkB,CAACI,sBAAtB,GAA+C,EAAG,IAHvD,EAIL,EAJK,CAAP;AAMD,CAPD;;AASO,MAAMC,+BAA+B,GAAIC,SAAD,IAAe;AAC5D,SAAOC,MAAM,CAACC,IAAP,CAAYF,SAAZ,EAAuBZ,MAAvB,CACL,CAACC,YAAD,EAAec,SAAf,KACG,GAAEd,YAAa;AACtB,MAAMM,iBAAMC,KAAN,CAAY,GAAZ,CAAiB,aAAYI,SAAS,CAACG,SAAD,CAAY;AACxD,WAAWA,SAAU,MAJZ,EAKJ,IAAGR,iBAAMS,SAAN,CAAgB,wBAAhB,CAA0C,IALzC,CAAP;AAOD,CARM;;;;AAUA,SAASC,oBAAT,CAA8BC,cAA9B,EAAwEb,OAAxE,EAA0F;AAC/F,MAAI,CAACa,cAAc,CAACC,MAApB,EAA4B,OAAO,EAAP;AAC5B,SAAOD,cAAc,CAClBE,GADI,CACCC,aAAD;AAAA;;AAAA,WAAoB;AACvBC,MAAAA,WAAW,EAAED,aAAa,CAACC,WADJ;AAEvBlB,MAAAA,mBAAmB,2BAAEiB,aAAa,CAACE,OAAhB,oFAAE,sBAAuBA,OAAzB,2DAAE,uBAAgCH,GAAhC,CAAqCd,kBAAD,KAAyB;AAChFG,QAAAA,SAAS,EAAEH,kBAAkB,CAACG,SADkD;AAEhFC,QAAAA,sBAAsB,EAAEZ,kCAAkC,CAACQ,kBAAkB,CAACkB,YAApB;AAFsB,OAAzB,CAApC;AAFE,KAApB;AAAA,GADA,EAQJxB,MARI,CASH,CAACC,YAAD,EAAeoB,aAAf,KACG,GAAEpB,YAAa;AACxB,IAAIE,gCAAgC,CAACkB,aAAa,CAACjB,mBAAf,EAAoCC,OAApC,CAA6C,EAXxE,EAYF,IAAGE,iBAAMS,SAAN,CAAgB,sBAAhB,CAAwC,EAZzC,CAAP;AAcD","sourcesContent":["import chalk from 'chalk';\nimport { OnComponentEventResult } from '../on-component-events';\n\nconst verboseComponentFilesArrayToString = (componentFiles) => {\n return componentFiles.reduce((outputString, filePath) => `${outputString} \\t - ${filePath}\\n`, ``);\n};\n\nconst resultsForExtensionArrayToString = (resultsForExtension, verbose) => {\n return resultsForExtension.reduce(\n (outputString, resultForExtension) =>\n `${outputString}${chalk.green('√')}SUCCESS\\t${resultForExtension.component}\\n\n ${verbose ? resultForExtension.componentFilesAsString : ''}\\n`,\n ''\n );\n};\n\nexport const formatWatchPathsSortByComponent = (trackDirs) => {\n return Object.keys(trackDirs).reduce(\n (outputString, watchPath) =>\n `${outputString}\n ${chalk.green('√')} SUCCESS\\t${trackDirs[watchPath]}\\n\n \\t - ${watchPath}\\n\\n`,\n ` ${chalk.underline('STATUS\\t\\tCOMPONENT ID')}\\n`\n );\n};\n\nexport function formatCompileResults(compileResults: OnComponentEventResult[], verbose: boolean) {\n if (!compileResults.length) return '';\n return compileResults\n .map((compileResult) => ({\n extensionId: compileResult.extensionId,\n resultsForExtension: compileResult.results?.results?.map((resultForExtension) => ({\n component: resultForExtension.component,\n componentFilesAsString: verboseComponentFilesArrayToString(resultForExtension.buildResults),\n })),\n }))\n .reduce(\n (outputString, compileResult) =>\n `${outputString}\n ${resultsForExtensionArrayToString(compileResult.resultsForExtension, verbose)}`,\n ` ${chalk.underline('STATUS\\tCOMPONENT ID')}`\n );\n}\n"]}
1
+ {"version":3,"sources":["output-formatter.ts"],"names":["verboseComponentFilesArrayToString","componentFiles","reduce","outputString","filePath","resultsForExtensionArrayToString","resultsForExtension","verbose","resultForExtension","chalk","green","component","componentFilesAsString","formatWatchPathsSortByComponent","trackDirs","Object","keys","watchPath","underline","formatCompileResults","compileResults","length","Array","isArray","filter","compileResult","results","map","extensionId","buildResults"],"mappings":";;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA,MAAMA,kCAAkC,GAAIC,cAAD,IAAoB;AAC7D,SAAOA,cAAc,CAACC,MAAf,CAAsB,CAACC,YAAD,EAAeC,QAAf,KAA6B,GAAED,YAAa,SAAQC,QAAS,IAAnF,EAAyF,EAAzF,CAAP;AACD,CAFD;;AAIA,MAAMC,gCAAgC,GAAG,CAACC,mBAAD,EAAsBC,OAAtB,KAAkC;AACzE,SAAOD,mBAAmB,CAACJ,MAApB,CACL,CAACC,YAAD,EAAeK,kBAAf,KACG,GAAEL,YAAa,GAAEM,iBAAMC,KAAN,CAAY,GAAZ,CAAiB,YAAWF,kBAAkB,CAACG,SAAU;AACjF,OAAOJ,OAAO,GAAGC,kBAAkB,CAACI,sBAAtB,GAA+C,EAAG,IAHvD,EAIL,EAJK,CAAP;AAMD,CAPD;;AASO,MAAMC,+BAA+B,GAAIC,SAAD,IAAe;AAC5D,SAAOC,MAAM,CAACC,IAAP,CAAYF,SAAZ,EAAuBZ,MAAvB,CACL,CAACC,YAAD,EAAec,SAAf,KACG,GAAEd,YAAa;AACtB,MAAMM,iBAAMC,KAAN,CAAY,GAAZ,CAAiB,aAAYI,SAAS,CAACG,SAAD,CAAY;AACxD,WAAWA,SAAU,MAJZ,EAKJ,IAAGR,iBAAMS,SAAN,CAAgB,wBAAhB,CAA0C,IALzC,CAAP;AAOD,CARM;AAUP;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASC,oBAAT,CAA8BC,cAA9B,EAAwEb,OAAxE,EAA0F;AAC/F,MAAI,CAACa,cAAc,CAACC,MAAhB,IAA0B,CAACC,KAAK,CAACC,OAAN,CAAcH,cAAd,CAA/B,EAA8D,OAAO,EAAP;AAC9D,SAAOA,cAAc,CAClBI,MADI,CACIC,aAAD;AAAA;;AAAA,WAAmB,0BAAAA,aAAa,CAACC,OAAd,gFAAuBA,OAAvB,KAAkCJ,KAAK,CAACC,OAAN,2BAAcE,aAAa,CAACC,OAA5B,2DAAc,uBAAuBA,OAArC,CAArD;AAAA,GADH,EAEJC,GAFI,CAECF,aAAD;AAAA;;AAAA,WAAoB;AACvBG,MAAAA,WAAW,EAAEH,aAAa,CAACG,WADJ;AAEvBtB,MAAAA,mBAAmB,4BAAEmB,aAAa,CAACC,OAAhB,qFAAE,uBAAuBA,OAAzB,2DAAE,uBAAgCC,GAAhC,CAAqCnB,kBAAD,KAAyB;AAChFG,QAAAA,SAAS,EAAEH,kBAAkB,CAACG,SADkD;AAEhFC,QAAAA,sBAAsB,EAAEZ,kCAAkC,CAACQ,kBAAkB,CAACqB,YAApB;AAFsB,OAAzB,CAApC;AAFE,KAApB;AAAA,GAFA,EASJ3B,MATI,CAUH,CAACC,YAAD,EAAesB,aAAf,KACG,GAAEtB,YAAa;AACxB,IAAIE,gCAAgC,CAACoB,aAAa,CAACnB,mBAAf,EAAoCC,OAApC,CAA6C,EAZxE,EAaF,IAAGE,iBAAMS,SAAN,CAAgB,sBAAhB,CAAwC,EAbzC,CAAP;AAeD","sourcesContent":["import chalk from 'chalk';\nimport { OnComponentEventResult } from '../on-component-events';\n\nconst verboseComponentFilesArrayToString = (componentFiles) => {\n return componentFiles.reduce((outputString, filePath) => `${outputString} \\t - ${filePath}\\n`, ``);\n};\n\nconst resultsForExtensionArrayToString = (resultsForExtension, verbose) => {\n return resultsForExtension.reduce(\n (outputString, resultForExtension) =>\n `${outputString}${chalk.green('√')}SUCCESS\\t${resultForExtension.component}\\n\n ${verbose ? resultForExtension.componentFilesAsString : ''}\\n`,\n ''\n );\n};\n\nexport const formatWatchPathsSortByComponent = (trackDirs) => {\n return Object.keys(trackDirs).reduce(\n (outputString, watchPath) =>\n `${outputString}\n ${chalk.green('√')} SUCCESS\\t${trackDirs[watchPath]}\\n\n \\t - ${watchPath}\\n\\n`,\n ` ${chalk.underline('STATUS\\t\\tCOMPONENT ID')}\\n`\n );\n};\n\n/**\n * todo: this was implemented incorrectly.\n * the original idea of `SerializableResults` was to have each one of the aspects registered to the slot, the\n * ability to have their own formatting to their results, and then `toString()` method to print them.\n * Here, the printing is specifically to the Compiler aspect. It should move to where it belongs.\n */\nexport function formatCompileResults(compileResults: OnComponentEventResult[], verbose: boolean) {\n if (!compileResults.length || !Array.isArray(compileResults)) return '';\n return compileResults\n .filter((compileResult) => compileResult.results?.results && Array.isArray(compileResult.results?.results))\n .map((compileResult) => ({\n extensionId: compileResult.extensionId,\n resultsForExtension: compileResult.results?.results?.map((resultForExtension) => ({\n component: resultForExtension.component,\n componentFilesAsString: verboseComponentFilesArrayToString(resultForExtension.buildResults),\n })),\n }))\n .reduce(\n (outputString, compileResult) =>\n `${outputString}\n ${resultsForExtensionArrayToString(compileResult.resultsForExtension, verbose)}`,\n ` ${chalk.underline('STATUS\\tCOMPONENT ID')}`\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Command, CommandOptions } from '@teambit/cli';
2
2
  import type { Logger } from '@teambit/logger';
3
3
  import type { PubsubMain } from '@teambit/pubsub';
4
- import { Watcher } from './watcher';
4
+ import { Watcher, WatchOptions } from './watcher';
5
5
  import { OnComponentEventResult } from '../on-component-events';
6
6
  export declare class WatchCommand implements Command {
7
7
  private pubsub;
@@ -25,7 +25,5 @@ export declare class WatchCommand implements Command {
25
25
  constructor(pubsub: PubsubMain, logger: Logger, watcher: Watcher);
26
26
  private registerToEvents;
27
27
  private eventsListener;
28
- report(cliArgs: [], { verbose }: {
29
- verbose?: boolean;
30
- }): Promise<string>;
28
+ report(cliArgs: [], watchOpts: WatchOptions): Promise<string>;
31
29
  }
@@ -59,7 +59,10 @@ function _outputFormatter() {
59
59
  return data;
60
60
  }
61
61
 
62
- // import IDs and events
62
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
63
+
64
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
65
+
63
66
  class WatchCommand {
64
67
  constructor(
65
68
  /**
@@ -81,6 +84,9 @@ class WatchCommand {
81
84
  onAll: (event, path) => this.logger.console(`Event: "${event}". Path: ${path}`),
82
85
  onStart: () => {},
83
86
  onReady: (workspace, watchPathsSortByComponent, verbose) => {
87
+ // eslint-disable-next-line no-console
88
+ console.clear();
89
+
84
90
  if (verbose) {
85
91
  this.logger.console((0, _outputFormatter().formatWatchPathsSortByComponent)(watchPathsSortByComponent));
86
92
  }
@@ -88,6 +94,9 @@ class WatchCommand {
88
94
  this.logger.console(_chalk().default.yellow(`Watching for component changes in workspace ${workspace.config.name} (${(0, _moment().default)().format('HH:mm:ss')})...\n`));
89
95
  },
90
96
  onChange: (filePath, buildResults, verbose, duration) => {
97
+ // eslint-disable-next-line no-console
98
+ console.clear();
99
+
91
100
  if (!buildResults.length) {
92
101
  this.logger.console(`The file ${filePath} has been changed, but nothing to compile.\n\n`);
93
102
  return;
@@ -99,6 +108,8 @@ class WatchCommand {
99
108
  this.logger.console(_chalk().default.yellow(`Watching for component changes (${(0, _moment().default)().format('HH:mm:ss')})...`));
100
109
  },
101
110
  onAdd: (filePath, buildResults, verbose, duration) => {
111
+ // eslint-disable-next-line no-console
112
+ console.clear();
102
113
  this.logger.console(`The file ${filePath} has been added.\n\n`);
103
114
  this.logger.console((0, _outputFormatter().formatCompileResults)(buildResults, verbose));
104
115
  this.logger.console(`Finished. (${duration}ms)`);
@@ -116,7 +127,7 @@ class WatchCommand {
116
127
  (0, _defineProperty2().default)(this, "alias", '');
117
128
  (0, _defineProperty2().default)(this, "group", 'development');
118
129
  (0, _defineProperty2().default)(this, "shortDescription", '');
119
- (0, _defineProperty2().default)(this, "options", [['v', 'verbose', 'showing npm verbose output for inspection and prints stack trace']]);
130
+ (0, _defineProperty2().default)(this, "options", [['v', 'verbose', 'showing npm verbose output for inspection and prints stack trace'], ['', 'skip-pre-compilation', 'skip the compilation step before starting to watch'], ['t', 'check-types', 'EXPERIMENTAL. for typescript files, load an tsserver instance to check types']]);
120
131
  (0, _defineProperty2().default)(this, "eventsListener", event => {
121
132
  switch (event.type) {
122
133
  case _compiler().CompilerErrorEvent.TYPE:
@@ -133,13 +144,10 @@ class WatchCommand {
133
144
  this.pubsub.sub(_compiler().CompilerAspect.id, this.eventsListener);
134
145
  }
135
146
 
136
- async report(cliArgs, {
137
- verbose = false
138
- }) {
139
- await this.watcher.watch({
140
- msgs: this.msgs,
141
- verbose
142
- });
147
+ async report(cliArgs, watchOpts) {
148
+ await this.watcher.watch(_objectSpread({
149
+ msgs: this.msgs
150
+ }, watchOpts));
143
151
  return 'watcher terminated';
144
152
  }
145
153
 
@@ -1 +1 @@
1
- {"version":3,"sources":["watch.cmd.tsx"],"names":["WatchCommand","constructor","pubsub","logger","watcher","onAll","event","path","console","onStart","onReady","workspace","watchPathsSortByComponent","verbose","chalk","yellow","config","name","format","onChange","filePath","buildResults","duration","length","onAdd","onUnlink","p","onError","err","type","CompilerErrorEvent","TYPE","data","error","registerToEvents","sub","CompilerAspect","id","eventsListener","report","cliArgs","watch","msgs"],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport moment from 'moment';\n\nimport { Command, CommandOptions } from '@teambit/cli';\nimport type { Logger } from '@teambit/logger';\nimport type { BitBaseEvent, PubsubMain } from '@teambit/pubsub';\n\n// import IDs and events\nimport { CompilerAspect, CompilerErrorEvent } from '@teambit/compiler';\n\nimport { Watcher } from './watcher';\nimport { formatCompileResults, formatWatchPathsSortByComponent } from './output-formatter';\nimport { OnComponentEventResult } from '../on-component-events';\n\nexport class WatchCommand implements Command {\n msgs = {\n onAll: (event, path) => this.logger.console(`Event: \"${event}\". Path: ${path}`),\n onStart: () => {},\n onReady: (workspace, watchPathsSortByComponent, verbose) => {\n if (verbose) {\n this.logger.console(formatWatchPathsSortByComponent(watchPathsSortByComponent));\n }\n this.logger.console(\n chalk.yellow(\n `Watching for component changes in workspace ${workspace.config.name} (${moment().format('HH:mm:ss')})...\\n`\n )\n );\n },\n onChange: (filePath: string, buildResults: OnComponentEventResult[], verbose: boolean, duration) => {\n if (!buildResults.length) {\n this.logger.console(`The file ${filePath} has been changed, but nothing to compile.\\n\\n`);\n return;\n }\n this.logger.console(`The file ${filePath} has been changed.\\n\\n`);\n this.logger.console(formatCompileResults(buildResults, verbose));\n this.logger.console(`Finished. (${duration}ms)`);\n this.logger.console(chalk.yellow(`Watching for component changes (${moment().format('HH:mm:ss')})...`));\n },\n onAdd: (filePath: string, buildResults: OnComponentEventResult[], verbose: boolean, duration) => {\n this.logger.console(`The file ${filePath} has been added.\\n\\n`);\n this.logger.console(formatCompileResults(buildResults, verbose));\n this.logger.console(`Finished. (${duration}ms)`);\n this.logger.console(chalk.yellow(`Watching for component changes (${moment().format('HH:mm:ss')})...`));\n },\n onUnlink: (p) => {\n this.logger.console(`file ${p} has been removed`);\n },\n onError: (err) => {\n this.logger.console(`Watcher error ${err}`);\n },\n };\n\n name = 'watch';\n description = 'watch a set of components';\n alias = '';\n group = 'development';\n shortDescription = '';\n options = [['v', 'verbose', 'showing npm verbose output for inspection and prints stack trace']] as CommandOptions;\n\n constructor(\n /**\n * logger extension.\n */\n private pubsub: PubsubMain,\n\n /**\n * logger extension.\n */\n private logger: Logger,\n\n /**\n * watcher extension.\n */\n private watcher: Watcher\n ) {\n this.registerToEvents();\n }\n\n private registerToEvents() {\n this.pubsub.sub(CompilerAspect.id, this.eventsListener);\n }\n\n private eventsListener = (event: BitBaseEvent<any>) => {\n switch (event.type) {\n case CompilerErrorEvent.TYPE:\n this.logger.console(`Watcher error ${event.data.error}, 'error'`);\n break;\n default:\n }\n };\n\n async report(cliArgs: [], { verbose = false }: { verbose?: boolean }) {\n await this.watcher.watch({ msgs: this.msgs, verbose });\n return 'watcher terminated';\n }\n}\n"]}
1
+ {"version":3,"sources":["watch.cmd.tsx"],"names":["WatchCommand","constructor","pubsub","logger","watcher","onAll","event","path","console","onStart","onReady","workspace","watchPathsSortByComponent","verbose","clear","chalk","yellow","config","name","format","onChange","filePath","buildResults","duration","length","onAdd","onUnlink","p","onError","err","type","CompilerErrorEvent","TYPE","data","error","registerToEvents","sub","CompilerAspect","id","eventsListener","report","cliArgs","watchOpts","watch","msgs"],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport moment from 'moment';\n\nimport { Command, CommandOptions } from '@teambit/cli';\nimport type { Logger } from '@teambit/logger';\nimport type { BitBaseEvent, PubsubMain } from '@teambit/pubsub';\n\n// import IDs and events\nimport { CompilerAspect, CompilerErrorEvent } from '@teambit/compiler';\n\nimport { Watcher, WatchOptions } from './watcher';\nimport { formatCompileResults, formatWatchPathsSortByComponent } from './output-formatter';\nimport { OnComponentEventResult } from '../on-component-events';\n\nexport class WatchCommand implements Command {\n msgs = {\n onAll: (event, path) => this.logger.console(`Event: \"${event}\". Path: ${path}`),\n onStart: () => {},\n onReady: (workspace, watchPathsSortByComponent, verbose) => {\n // eslint-disable-next-line no-console\n console.clear();\n if (verbose) {\n this.logger.console(formatWatchPathsSortByComponent(watchPathsSortByComponent));\n }\n this.logger.console(\n chalk.yellow(\n `Watching for component changes in workspace ${workspace.config.name} (${moment().format('HH:mm:ss')})...\\n`\n )\n );\n },\n onChange: (filePath: string, buildResults: OnComponentEventResult[], verbose: boolean, duration) => {\n // eslint-disable-next-line no-console\n console.clear();\n if (!buildResults.length) {\n this.logger.console(`The file ${filePath} has been changed, but nothing to compile.\\n\\n`);\n return;\n }\n this.logger.console(`The file ${filePath} has been changed.\\n\\n`);\n this.logger.console(formatCompileResults(buildResults, verbose));\n this.logger.console(`Finished. (${duration}ms)`);\n this.logger.console(chalk.yellow(`Watching for component changes (${moment().format('HH:mm:ss')})...`));\n },\n onAdd: (filePath: string, buildResults: OnComponentEventResult[], verbose: boolean, duration) => {\n // eslint-disable-next-line no-console\n console.clear();\n this.logger.console(`The file ${filePath} has been added.\\n\\n`);\n this.logger.console(formatCompileResults(buildResults, verbose));\n this.logger.console(`Finished. (${duration}ms)`);\n this.logger.console(chalk.yellow(`Watching for component changes (${moment().format('HH:mm:ss')})...`));\n },\n onUnlink: (p) => {\n this.logger.console(`file ${p} has been removed`);\n },\n onError: (err) => {\n this.logger.console(`Watcher error ${err}`);\n },\n };\n\n name = 'watch';\n description = 'watch a set of components';\n alias = '';\n group = 'development';\n shortDescription = '';\n options = [\n ['v', 'verbose', 'showing npm verbose output for inspection and prints stack trace'],\n ['', 'skip-pre-compilation', 'skip the compilation step before starting to watch'],\n ['t', 'check-types', 'EXPERIMENTAL. for typescript files, load an tsserver instance to check types'],\n ] as CommandOptions;\n\n constructor(\n /**\n * logger extension.\n */\n private pubsub: PubsubMain,\n\n /**\n * logger extension.\n */\n private logger: Logger,\n\n /**\n * watcher extension.\n */\n private watcher: Watcher\n ) {\n this.registerToEvents();\n }\n\n private registerToEvents() {\n this.pubsub.sub(CompilerAspect.id, this.eventsListener);\n }\n\n private eventsListener = (event: BitBaseEvent<any>) => {\n switch (event.type) {\n case CompilerErrorEvent.TYPE:\n this.logger.console(`Watcher error ${event.data.error}, 'error'`);\n break;\n default:\n }\n };\n\n async report(cliArgs: [], watchOpts: WatchOptions) {\n await this.watcher.watch({ msgs: this.msgs, ...watchOpts });\n return 'watcher terminated';\n }\n}\n"]}
@@ -12,6 +12,11 @@ export declare type WatcherProcessData = {
12
12
  compilerId: BitId;
13
13
  componentIds: BitId[];
14
14
  };
15
+ export declare type WatchOptions = {
16
+ verbose?: boolean;
17
+ checkTypes?: boolean;
18
+ skipPreCompilation?: boolean;
19
+ };
15
20
  export declare class Watcher {
16
21
  private workspace;
17
22
  private pubsub;
@@ -24,14 +29,12 @@ export declare class Watcher {
24
29
  }, verbose?: boolean, multipleWatchers?: WatcherProcessData[]);
25
30
  watch(opts: {
26
31
  msgs: any;
27
- verbose?: boolean;
28
- }): Promise<void>;
32
+ } & WatchOptions): Promise<void>;
29
33
  get consumer(): Consumer;
30
- watchAll(opts?: {
34
+ watchAll(opts: {
31
35
  msgs: any;
32
- verbose?: boolean;
33
36
  initiator?: CompilationInitiator;
34
- }): Promise<unknown>;
37
+ } & WatchOptions): Promise<unknown>;
35
38
  private handleChange;
36
39
  private handleBitmapChanges;
37
40
  private executeWatchOperationsOnRemove;
@@ -15,6 +15,16 @@ Object.defineProperty(exports, "__esModule", {
15
15
  });
16
16
  exports.Watcher = void 0;
17
17
 
18
+ function _objectWithoutProperties2() {
19
+ const data = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
20
+
21
+ _objectWithoutProperties2 = function () {
22
+ return data;
23
+ };
24
+
25
+ return data;
26
+ }
27
+
18
28
  function _defineProperty2() {
19
29
  const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
30
 
@@ -151,10 +161,7 @@ class Watcher {
151
161
 
152
162
  async watch(opts) {
153
163
  this.verbose = Boolean(opts.verbose);
154
- await this.watchAll({
155
- msgs: opts.msgs,
156
- verbose: this.verbose
157
- });
164
+ await this.watchAll(opts);
158
165
  }
159
166
 
160
167
  get consumer() {
@@ -162,56 +169,47 @@ class Watcher {
162
169
  }
163
170
 
164
171
  async watchAll(opts) {
165
- var _opts$msgs;
172
+ const {
173
+ msgs
174
+ } = opts,
175
+ watchOpts = (0, _objectWithoutProperties2().default)(opts, ["msgs"]); // TODO: run build in the beginning of process (it's work like this in other envs)
166
176
 
167
- // TODO: run build in the beginning of process (it's work like this in other envs)
168
- const _verbose = (opts === null || opts === void 0 ? void 0 : opts.verbose) || false;
169
-
170
- await this.createWatcher();
177
+ const pathsToWatch = await this.getPathsToWatch();
178
+ const componentIds = Object.values(this.trackDirs);
179
+ await this.workspace.triggerOnPreWatch(componentIds, watchOpts);
180
+ await this.createWatcher(pathsToWatch);
171
181
  const watcher = this.fsWatcher;
172
- opts === null || opts === void 0 ? void 0 : (_opts$msgs = opts.msgs) === null || _opts$msgs === void 0 ? void 0 : _opts$msgs.onStart(this.workspace);
182
+ msgs === null || msgs === void 0 ? void 0 : msgs.onStart(this.workspace);
173
183
  return new Promise((resolve, reject) => {
174
184
  // prefix your command with "BIT_LOG=*" to see all watch events
175
185
  if (process.env.BIT_LOG) {
176
- var _opts$msgs2, _opts$msgs3;
177
-
178
- if (opts !== null && opts !== void 0 && (_opts$msgs2 = opts.msgs) !== null && _opts$msgs2 !== void 0 && _opts$msgs2.onAll) watcher.on('all', opts === null || opts === void 0 ? void 0 : (_opts$msgs3 = opts.msgs) === null || _opts$msgs3 === void 0 ? void 0 : _opts$msgs3.onAll);
186
+ if (msgs !== null && msgs !== void 0 && msgs.onAll) watcher.on('all', msgs === null || msgs === void 0 ? void 0 : msgs.onAll);
179
187
  }
180
188
 
181
189
  watcher.on('ready', () => {
182
- var _opts$msgs4;
183
-
184
- opts === null || opts === void 0 ? void 0 : (_opts$msgs4 = opts.msgs) === null || _opts$msgs4 === void 0 ? void 0 : _opts$msgs4.onReady(this.workspace, this.trackDirs, _verbose);
190
+ msgs === null || msgs === void 0 ? void 0 : msgs.onReady(this.workspace, this.trackDirs, this.verbose);
185
191
  }); // eslint-disable-next-line @typescript-eslint/no-misused-promises
186
192
 
187
193
  watcher.on('change', async filePath => {
188
- var _opts$msgs5;
189
-
190
194
  const startTime = new Date().getTime();
191
195
  const buildResults = (await this.handleChange(filePath, opts === null || opts === void 0 ? void 0 : opts.initiator)) || [];
192
196
  const duration = new Date().getTime() - startTime;
193
- opts === null || opts === void 0 ? void 0 : (_opts$msgs5 = opts.msgs) === null || _opts$msgs5 === void 0 ? void 0 : _opts$msgs5.onChange(filePath, buildResults, _verbose, duration);
197
+ msgs === null || msgs === void 0 ? void 0 : msgs.onChange(filePath, buildResults, this.verbose, duration);
194
198
  }); // eslint-disable-next-line @typescript-eslint/no-misused-promises
195
199
 
196
200
  watcher.on('add', async filePath => {
197
- var _opts$msgs6;
198
-
199
201
  const startTime = new Date().getTime();
200
202
  const buildResults = (await this.handleChange(filePath)) || [];
201
203
  const duration = new Date().getTime() - startTime;
202
- opts === null || opts === void 0 ? void 0 : (_opts$msgs6 = opts.msgs) === null || _opts$msgs6 === void 0 ? void 0 : _opts$msgs6.onAdd(filePath, buildResults, _verbose, duration);
204
+ msgs === null || msgs === void 0 ? void 0 : msgs.onAdd(filePath, buildResults, this.verbose, duration);
203
205
  }); // eslint-disable-next-line @typescript-eslint/no-misused-promises
204
206
 
205
207
  watcher.on('unlink', async p => {
206
- var _opts$msgs7;
207
-
208
- opts === null || opts === void 0 ? void 0 : (_opts$msgs7 = opts.msgs) === null || _opts$msgs7 === void 0 ? void 0 : _opts$msgs7.onUnlink(p);
208
+ msgs === null || msgs === void 0 ? void 0 : msgs.onUnlink(p);
209
209
  await this.handleChange(p);
210
210
  });
211
211
  watcher.on('error', err => {
212
- var _opts$msgs8;
213
-
214
- opts === null || opts === void 0 ? void 0 : (_opts$msgs8 = opts.msgs) === null || _opts$msgs8 === void 0 ? void 0 : _opts$msgs8.onError(err);
212
+ msgs === null || msgs === void 0 ? void 0 : msgs.onError(err);
215
213
  reject(err);
216
214
  });
217
215
  });
@@ -233,7 +231,7 @@ class Watcher {
233
231
  return this.completeWatch();
234
232
  }
235
233
 
236
- const buildResults = await this.executeWatchOperationsOnComponent(componentId, true, initiator);
234
+ const buildResults = await this.executeWatchOperationsOnComponent(componentId, [filePath], true, initiator);
237
235
  this.completeWatch();
238
236
  return buildResults;
239
237
  } catch (err) {
@@ -262,7 +260,7 @@ class Watcher {
262
260
 
263
261
  if (newDirs.length) {
264
262
  this.fsWatcher.add(newDirs);
265
- const addResults = await (0, _pMapSeries().default)(newDirs, dir => this.executeWatchOperationsOnComponent(this.trackDirs[dir], false));
263
+ const addResults = await (0, _pMapSeries().default)(newDirs, async dir => this.executeWatchOperationsOnComponent(this.trackDirs[dir], [], false));
266
264
  results.push(...addResults.flat());
267
265
  }
268
266
 
@@ -281,7 +279,7 @@ class Watcher {
281
279
  await this.workspace.triggerOnComponentRemove(componentId);
282
280
  }
283
281
 
284
- async executeWatchOperationsOnComponent(componentId, isChange = true, initiator) {
282
+ async executeWatchOperationsOnComponent(componentId, files, isChange = true, initiator) {
285
283
  if (this.isComponentWatchedExternally(componentId)) {
286
284
  // update capsule, once done, it automatically triggers the external watcher
287
285
  await this.workspace.get(componentId);
@@ -303,10 +301,14 @@ class Watcher {
303
301
  let buildResults;
304
302
 
305
303
  try {
306
- buildResults = isChange ? await this.workspace.triggerOnComponentChange(componentId, initiator) : await this.workspace.triggerOnComponentAdd(componentId);
304
+ buildResults = isChange ? await this.workspace.triggerOnComponentChange(componentId, files, initiator) : await this.workspace.triggerOnComponentAdd(componentId);
307
305
  } catch (err) {
308
- // do not exist the watch process on errors, just print them
309
- _logger().default.console(err.message || err);
306
+ // do not exit the watch process on errors, just print them
307
+ const msg = `found an issue during onComponentChange or onComponentAdd hooks`;
308
+
309
+ _logger().default.error(msg, err);
310
+
311
+ _logger().default.console(`\n${msg}: ${err.message || err}`);
310
312
 
311
313
  return [];
312
314
  }
@@ -387,8 +389,7 @@ class Watcher {
387
389
  return this.findTrackDirByFilePathRecursively(parentDir);
388
390
  }
389
391
 
390
- async createWatcher() {
391
- const pathsToWatch = await this.getPathsToWatch();
392
+ async createWatcher(pathsToWatch) {
392
393
  this.fsWatcher = _chokidar().default.watch(pathsToWatch, {
393
394
  ignoreInitial: true,
394
395
  // Using the function way since the regular way not working as expected