@teambit/workspace 0.0.529 → 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/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.529.tgz +0 -0
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';\
|
|
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.
|
|
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$
|
|
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","
|
|
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: [],
|
|
29
|
-
verbose?: boolean;
|
|
30
|
-
}): Promise<string>;
|
|
28
|
+
report(cliArgs: [], watchOpts: WatchOptions): Promise<string>;
|
|
31
29
|
}
|
package/dist/watch/watch.cmd.js
CHANGED
|
@@ -59,7 +59,10 @@ function _outputFormatter() {
|
|
|
59
59
|
return data;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAOA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA
|
|
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"]}
|
package/dist/watch/watcher.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/dist/watch/watcher.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
168
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
309
|
-
|
|
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["watcher.ts"],"names":["Watcher","constructor","workspace","pubsub","trackDirs","verbose","multipleWatchers","watch","opts","Boolean","watchAll","msgs","consumer","_verbose","createWatcher","watcher","fsWatcher","onStart","Promise","resolve","reject","process","env","BIT_LOG","onAll","on","onReady","filePath","startTime","Date","getTime","buildResults","handleChange","initiator","duration","onChange","onAdd","p","onUnlink","err","onError","endsWith","BIT_MAP","handleBitmapChanges","completeWatch","componentId","getComponentIdAndClearItsCache","logger","debug","executeWatchOperationsOnComponent","msg","error","console","message","previewsTrackDirs","_reloadConsumer","setTrackDirs","newDirs","Object","keys","removedDirs","results","length","add","addResults","dir","push","flat","unwatch","executeWatchOperationsOnRemove","chalk","bold","toString","pub","WorkspaceAspect","id","creatOnComponentRemovedEvent","triggerOnComponentRemove","isChange","isComponentWatchedExternally","get","idStr","creatOnComponentChangeEvent","creatOnComponentAddEvent","triggerOnComponentChange","triggerOnComponentAdd","OnComponentRemovedEvent","now","hook","OnComponentChangeEvent","OnComponentAddEvent","loader","stop","watcherData","find","m","componentIds","isEqual","_legacy","compilerId","relativeFile","getPathRelativeToConsumer","trackDir","findTrackDirByFilePathRecursively","clearComponentCache","component","componentMap","state","_consumer","getFilesRelativeToConsumer","parentDir","pathsToWatch","getPathsToWatch","chokidar","ignoreInitial","ignored","path","includes","sep","persistent","useFsEvents","componentsFromBitMap","bitMap","getAllComponents","COMPONENT_ORIGINS","AUTHORED","IMPORTED","all","map","bitId","getTrackDir","Error","resolveComponentId","paths","pathsAbsolute","toAbsolutePath"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;AAMO,MAAMA,OAAN,CAAc;AAEnBC,EAAAA,WAAW,CACDC,SADC,EAEDC,MAFC,EAGDC,SAA4C,GAAG,EAH9C,EAIDC,OAAO,GAAG,KAJT,EAKDC,gBAAsC,GAAG,EALxC,EAMT;AAAA,SALQJ,SAKR,GALQA,SAKR;AAAA,SAJQC,MAIR,GAJQA,MAIR;AAAA,SAHQC,SAGR,GAHQA,SAGR;AAAA,SAFQC,OAER,GAFQA,OAER;AAAA,SADQC,gBACR,GADQA,gBACR;AAAA;AAAE;;AAEO,QAALC,KAAK,CAACC,IAAD,EAAoC;AAC7C,SAAKH,OAAL,GAAeI,OAAO,CAACD,IAAI,CAACH,OAAN,CAAtB;AACA,UAAM,KAAKK,QAAL,CAAc;AAAEC,MAAAA,IAAI,EAAEH,IAAI,CAACG,IAAb;AAAmBN,MAAAA,OAAO,EAAE,KAAKA;AAAjC,KAAd,CAAN;AACD;;AAEW,MAARO,QAAQ,GAAa;AACvB,WAAO,KAAKV,SAAL,CAAeU,QAAtB;AACD;;AAEa,QAARF,QAAQ,CAACF,IAAD,EAAuE;AAAA;;AACnF;AACA,UAAMK,QAAQ,GAAG,CAAAL,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEH,OAAN,KAAiB,KAAlC;;AACA,UAAM,KAAKS,aAAL,EAAN;AACA,UAAMC,OAAO,GAAG,KAAKC,SAArB;AACAR,IAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,0BAAAA,IAAI,CAAEG,IAAN,0DAAYM,OAAZ,CAAoB,KAAKf,SAAzB;AAEA,WAAO,IAAIgB,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC;AACA,UAAIC,OAAO,CAACC,GAAR,CAAYC,OAAhB,EAAyB;AAAA;;AACvB,YAAIf,IAAJ,aAAIA,IAAJ,8BAAIA,IAAI,CAAEG,IAAV,wCAAI,YAAYa,KAAhB,EAAuBT,OAAO,CAACU,EAAR,CAAW,KAAX,EAAkBjB,IAAlB,aAAkBA,IAAlB,sCAAkBA,IAAI,CAAEG,IAAxB,gDAAkB,YAAYa,KAA9B;AACxB;;AACDT,MAAAA,OAAO,CAACU,EAAR,CAAW,OAAX,EAAoB,MAAM;AAAA;;AACxBjB,QAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,2BAAAA,IAAI,CAAEG,IAAN,4DAAYe,OAAZ,CAAoB,KAAKxB,SAAzB,EAAoC,KAAKE,SAAzC,EAAoDS,QAApD;AACD,OAFD,EALsC,CAQtC;;AACAE,MAAAA,OAAO,CAACU,EAAR,CAAW,QAAX,EAAqB,MAAOE,QAAP,IAAoB;AAAA;;AACvC,cAAMC,SAAS,GAAG,IAAIC,IAAJ,GAAWC,OAAX,EAAlB;AACA,cAAMC,YAAY,GAAG,CAAC,MAAM,KAAKC,YAAL,CAAkBL,QAAlB,EAA4BnB,IAA5B,aAA4BA,IAA5B,uBAA4BA,IAAI,CAAEyB,SAAlC,CAAP,KAAwD,EAA7E;AACA,cAAMC,QAAQ,GAAG,IAAIL,IAAJ,GAAWC,OAAX,KAAuBF,SAAxC;AACApB,QAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,2BAAAA,IAAI,CAAEG,IAAN,4DAAYwB,QAAZ,CAAqBR,QAArB,EAA+BI,YAA/B,EAA6ClB,QAA7C,EAAuDqB,QAAvD;AACD,OALD,EATsC,CAetC;;AACAnB,MAAAA,OAAO,CAACU,EAAR,CAAW,KAAX,EAAkB,MAAOE,QAAP,IAAoB;AAAA;;AACpC,cAAMC,SAAS,GAAG,IAAIC,IAAJ,GAAWC,OAAX,EAAlB;AACA,cAAMC,YAAY,GAAG,CAAC,MAAM,KAAKC,YAAL,CAAkBL,QAAlB,CAAP,KAAuC,EAA5D;AACA,cAAMO,QAAQ,GAAG,IAAIL,IAAJ,GAAWC,OAAX,KAAuBF,SAAxC;AACApB,QAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,2BAAAA,IAAI,CAAEG,IAAN,4DAAYyB,KAAZ,CAAkBT,QAAlB,EAA4BI,YAA5B,EAA0ClB,QAA1C,EAAoDqB,QAApD;AACD,OALD,EAhBsC,CAsBtC;;AACAnB,MAAAA,OAAO,CAACU,EAAR,CAAW,QAAX,EAAqB,MAAOY,CAAP,IAAa;AAAA;;AAChC7B,QAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,2BAAAA,IAAI,CAAEG,IAAN,4DAAY2B,QAAZ,CAAqBD,CAArB;AACA,cAAM,KAAKL,YAAL,CAAkBK,CAAlB,CAAN;AACD,OAHD;AAIAtB,MAAAA,OAAO,CAACU,EAAR,CAAW,OAAX,EAAqBc,GAAD,IAAS;AAAA;;AAC3B/B,QAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,2BAAAA,IAAI,CAAEG,IAAN,4DAAY6B,OAAZ,CAAoBD,GAApB;AACAnB,QAAAA,MAAM,CAACmB,GAAD,CAAN;AACD,OAHD;AAID,KA/BM,CAAP;AAgCD;;AAEyB,QAAZP,YAAY,CAACL,QAAD,EAAmBM,SAAnB,EAAwF;AAChH,QAAI;AACF,UAAIN,QAAQ,CAACc,QAAT,CAAkBC,oBAAlB,CAAJ,EAAgC;AAC9B,cAAMX,YAAY,GAAG,MAAM,KAAKY,mBAAL,EAA3B;AACA,aAAKC,aAAL;AACA,eAAOb,YAAP;AACD;;AACD,YAAMc,WAAW,GAAG,MAAM,KAAKC,8BAAL,CAAoCnB,QAApC,CAA1B;;AACA,UAAI,CAACkB,WAAL,EAAkB;AAChBE,0BAAOC,KAAP,CAAc,QAAOrB,QAAS,4CAA9B;;AACA,eAAO,KAAKiB,aAAL,EAAP;AACD;;AAED,YAAMb,YAAY,GAAG,MAAM,KAAKkB,iCAAL,CAAuCJ,WAAvC,EAAoD,IAApD,EAA0DZ,SAA1D,CAA3B;AACA,WAAKW,aAAL;AACA,aAAOb,YAAP;AACD,KAfD,CAeE,OAAOQ,GAAP,EAAiB;AACjB,YAAMW,GAAG,GAAI,yCAAwCvB,QAAS,EAA9D;;AACAoB,wBAAOI,KAAP,CAAaD,GAAb,EAAkBX,GAAlB;;AACAQ,wBAAOK,OAAP,CAAgB,GAAEF,GAAI,KAAIX,GAAG,CAACc,OAAQ,EAAtC;;AACA,aAAO,EAAP;AACD;AACF;AAED;AACF;AACA;;;AACmC,QAAnBV,mBAAmB,GAAsC;AACrE,UAAMW,iBAAiB,qBAAQ,KAAKlD,SAAb,CAAvB;;AACA,UAAM,KAAKF,SAAL,CAAeqD,eAAf,EAAN;AACA,UAAM,KAAKC,YAAL,EAAN;AACA,UAAMC,OAAiB,GAAG,0BAAWC,MAAM,CAACC,IAAP,CAAY,KAAKvD,SAAjB,CAAX,EAAwCsD,MAAM,CAACC,IAAP,CAAYL,iBAAZ,CAAxC,CAA1B;AACA,UAAMM,WAAqB,GAAG,0BAAWF,MAAM,CAACC,IAAP,CAAYL,iBAAZ,CAAX,EAA2CI,MAAM,CAACC,IAAP,CAAY,KAAKvD,SAAjB,CAA3C,CAA9B;AACA,UAAMyD,OAAiC,GAAG,EAA1C;;AACA,QAAIJ,OAAO,CAACK,MAAZ,EAAoB;AAClB,WAAK9C,SAAL,CAAe+C,GAAf,CAAmBN,OAAnB;AACA,YAAMO,UAAU,GAAG,MAAM,2BAAUP,OAAV,EAAoBQ,GAAD,IAC1C,KAAKhB,iCAAL,CAAuC,KAAK7C,SAAL,CAAe6D,GAAf,CAAvC,EAA4D,KAA5D,CADuB,CAAzB;AAGAJ,MAAAA,OAAO,CAACK,IAAR,CAAa,GAAGF,UAAU,CAACG,IAAX,EAAhB;AACD;;AACD,QAAIP,WAAW,CAACE,MAAhB,EAAwB;AACtB,YAAM,KAAK9C,SAAL,CAAeoD,OAAf,CAAuBR,WAAvB,CAAN;AACA,YAAM,2BAAUA,WAAV,EAAwBK,GAAD,IAAS,KAAKI,8BAAL,CAAoCf,iBAAiB,CAACW,GAAD,CAArD,CAAhC,CAAN;AACD;;AACD,WAAOJ,OAAP;AACD;;AAE2C,QAA9BQ,8BAA8B,CAACxB,WAAD,EAA2B;AACrEE,sBAAOC,KAAP,CAAc,sCAAqCsB,iBAAMC,IAAN,CAAW1B,WAAW,CAAC2B,QAAZ,EAAX,CAAmC,EAAtF;;AACA,SAAKrE,MAAL,CAAYsE,GAAZ,CAAgBC,oBAAgBC,EAAhC,EAAoC,KAAKC,4BAAL,CAAkC/B,WAAW,CAAC2B,QAAZ,EAAlC,CAApC;AACA,UAAM,KAAKtE,SAAL,CAAe2E,wBAAf,CAAwChC,WAAxC,CAAN;AACD;;AAE8C,QAAjCI,iCAAiC,CAC7CJ,WAD6C,EAE7CiC,QAAQ,GAAG,IAFkC,EAG7C7C,SAH6C,EAIV;AACnC,QAAI,KAAK8C,4BAAL,CAAkClC,WAAlC,CAAJ,EAAoD;AAClD;AACA,YAAM,KAAK3C,SAAL,CAAe8E,GAAf,CAAmBnC,WAAnB,CAAN;AACA,aAAO,EAAP;AACD;;AACD,UAAMoC,KAAK,GAAGpC,WAAW,CAAC2B,QAAZ,EAAd;;AAEA,QAAIM,QAAJ,EAAc;AACZ/B,wBAAOC,KAAP,CAAc,sCAAqCsB,iBAAMC,IAAN,CAAWU,KAAX,CAAkB,EAArE;;AACA,WAAK9E,MAAL,CAAYsE,GAAZ,CAAgBC,oBAAgBC,EAAhC,EAAoC,KAAKO,2BAAL,CAAiCD,KAAjC,EAAwC,mBAAxC,CAApC;AACD,KAHD,MAGO;AACLlC,wBAAOC,KAAP,CAAc,mCAAkCsB,iBAAMC,IAAN,CAAWU,KAAX,CAAkB,EAAlE;;AACA,WAAK9E,MAAL,CAAYsE,GAAZ,CAAgBC,oBAAgBC,EAAhC,EAAoC,KAAKQ,wBAAL,CAA8BF,KAA9B,EAAqC,gBAArC,CAApC;AACD;;AAED,QAAIlD,YAAJ;;AACA,QAAI;AACFA,MAAAA,YAAY,GAAG+C,QAAQ,GACnB,MAAM,KAAK5E,SAAL,CAAekF,wBAAf,CAAwCvC,WAAxC,EAAqDZ,SAArD,CADa,GAEnB,MAAM,KAAK/B,SAAL,CAAemF,qBAAf,CAAqCxC,WAArC,CAFV;AAGD,KAJD,CAIE,OAAON,GAAP,EAAiB;AACjB;AACAQ,wBAAOK,OAAP,CAAeb,GAAG,CAACc,OAAJ,IAAed,GAA9B;;AACA,aAAO,EAAP;AACD;;AACD,QAAIR,YAAY,IAAIA,YAAY,CAAC+B,MAAjC,EAAyC;AACvC,aAAO/B,YAAP;AACD;;AACDgB,sBAAOK,OAAP,CAAgB,GAAE6B,KAAM,4CAAxB;;AACA,WAAO,EAAP;AACD;;AAEOL,EAAAA,4BAA4B,CAACK,KAAD,EAAQ;AAC1C,WAAO,KAAIK,iCAAJ,EAA4BzD,IAAI,CAAC0D,GAAL,EAA5B,EAAwCN,KAAxC,CAAP;AACD;;AAEOC,EAAAA,2BAA2B,CAACD,KAAD,EAAQO,IAAR,EAAc;AAC/C,WAAO,KAAIC,gCAAJ,EAA2B5D,IAAI,CAAC0D,GAAL,EAA3B,EAAuCN,KAAvC,EAA8CO,IAA9C,CAAP;AACD;;AAEOL,EAAAA,wBAAwB,CAACF,KAAD,EAAQO,IAAR,EAAc;AAC5C,WAAO,KAAIE,6BAAJ,EAAwB7D,IAAI,CAAC0D,GAAL,EAAxB,EAAoCN,KAApC,EAA2CO,IAA3C,CAAP;AACD;;AAEO5C,EAAAA,aAAa,GAAG;AACtB+C,sBAAOC,IAAP;;AACA,WAAO,EAAP;AACD;;AAEOb,EAAAA,4BAA4B,CAAClC,WAAD,EAA2B;AAC7D,UAAMgD,WAAW,GAAG,KAAKvF,gBAAL,CAAsBwF,IAAtB,CAA4BC,CAAD,IAAOA,CAAC,CAACC,YAAF,CAAeF,IAAf,CAAqBnB,EAAD,IAAQA,EAAE,CAACsB,OAAH,CAAWpD,WAAW,CAACqD,OAAvB,CAA5B,CAAlC,CAApB;;AACA,QAAIL,WAAJ,EAAiB;AACf9C,wBAAOC,KAAP,CAAc,GAAEH,WAAW,CAAC2B,QAAZ,EAAuB,kBAAiBqB,WAAW,CAACM,UAAZ,CAAuB3B,QAAvB,EAAkC,EAA1F;;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AAC8C,QAA9B1B,8BAA8B,CAACnB,QAAD,EAAgD;AAC1F,UAAMyE,YAAY,GAAG,mCAAqB,KAAKxF,QAAL,CAAcyF,yBAAd,CAAwC1E,QAAxC,CAArB,CAArB;AACA,UAAM2E,QAAQ,GAAG,KAAKC,iCAAL,CAAuCH,YAAvC,CAAjB;;AACA,QAAI,CAACE,QAAL,EAAe;AACb;AACA;AACA,aAAO,IAAP;AACD;;AACD,UAAMzD,WAAW,GAAG,KAAKzC,SAAL,CAAekG,QAAf,CAApB;AACA,SAAKpG,SAAL,CAAesG,mBAAf,CAAmC3D,WAAnC;AACA,UAAM4D,SAAS,GAAG,MAAM,KAAKvG,SAAL,CAAe8E,GAAf,CAAmBnC,WAAnB,CAAxB;AACA,UAAM6D,YAA0B,GAAGD,SAAS,CAACE,KAAV,CAAgBC,SAAhB,CAA0BF,YAA7D;;AACA,QAAIA,YAAY,CAACG,0BAAb,GAA0Cf,IAA1C,CAAgDzD,CAAD,IAAOA,CAAC,KAAK+D,YAA5D,CAAJ,EAA+E;AAC7E,aAAOvD,WAAP;AACD,KAdyF,CAe1F;;;AACA,WAAO,IAAP;AACD;;AAEO0D,EAAAA,iCAAiC,CAAC5E,QAAD,EAAkC;AACzE,QAAI,KAAKvB,SAAL,CAAeuB,QAAf,CAAJ,EAA8B,OAAOA,QAAP;AAC9B,UAAMmF,SAAS,GAAG,qBAAQnF,QAAR,CAAlB;AACA,QAAImF,SAAS,KAAKnF,QAAlB,EAA4B,OAAO,IAAP;AAC5B,WAAO,KAAK4E,iCAAL,CAAuCO,SAAvC,CAAP;AACD;;AAE0B,QAAbhG,aAAa,GAAG;AAC5B,UAAMiG,YAAY,GAAG,MAAM,KAAKC,eAAL,EAA3B;AACA,SAAKhG,SAAL,GAAiBiG,oBAAS1G,KAAT,CAAewG,YAAf,EAA6B;AAC5CG,MAAAA,aAAa,EAAE,IAD6B;AAE5C;AACA;AACA;AACA;AACA;AACA;AACAC,MAAAA,OAAO,EAAGC,IAAD,IAAU;AACjB;AACA,YAAIA,IAAI,CAACC,QAAL,CAAe,GAAEC,WAAI,eAAcA,WAAI,EAAvC,KAA6CF,IAAI,CAACC,QAAL,CAAe,GAAEC,WAAI,cAArB,CAAjD,EAAsF;AACpF,iBAAO,IAAP;AACD;;AACD,eAAO,KAAP;AACD,OAd2C;AAe5CC,MAAAA,UAAU,EAAE,IAfgC;AAgB5CC,MAAAA,WAAW,EAAE;AAhB+B,KAA7B,CAAjB;AAkBD;;AAEiB,QAAZhE,YAAY,GAAG;AACnB,SAAKpD,SAAL,GAAiB,EAAjB;AACA,UAAMqH,oBAAoB,GAAG,KAAK7G,QAAL,CAAc8G,MAAd,CAAqBC,gBAArB,CAAsC,CACjEC,+BAAkBC,QAD+C,EAEjED,+BAAkBE,QAF+C,CAAtC,CAA7B;AAIA,UAAM5G,OAAO,CAAC6G,GAAR,CACJN,oBAAoB,CAACO,GAArB,CAAyB,MAAOtB,YAAP,IAAwB;AAC/C,YAAMuB,KAAK,GAAGvB,YAAY,CAAC/B,EAA3B;AACA,YAAM2B,QAAQ,GAAGI,YAAY,CAACwB,WAAb,EAAjB;AACA,UAAI,CAAC5B,QAAL,EAAe,MAAM,IAAI6B,KAAJ,CAAW,GAAEF,KAAK,CAACzD,QAAN,EAAiB,8CAA9B,CAAN;AACf,YAAM3B,WAAW,GAAG,MAAM,KAAK3C,SAAL,CAAekI,kBAAf,CAAkCH,KAAlC,CAA1B;AACA,WAAK7H,SAAL,CAAekG,QAAf,IAA2BzD,WAA3B;AACD,KAND,CADI,CAAN;AASD;;AAE4B,QAAfmE,eAAe,GAAmC;AAC9D,UAAM,KAAKxD,YAAL,EAAN;AACA,UAAM6E,KAAK,GAAG,CAAC,GAAG3E,MAAM,CAACC,IAAP,CAAY,KAAKvD,SAAjB,CAAJ,EAAiCsC,oBAAjC,CAAd;AACA,UAAM4F,aAAa,GAAGD,KAAK,CAACL,GAAN,CAAW/D,GAAD,IAAS,KAAKrD,QAAL,CAAc2H,cAAd,CAA6BtE,GAA7B,CAAnB,CAAtB;AACA,WAAOqE,aAAP;AACD;;AA7PkB","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport { dirname, sep } from 'path';\nimport { difference } from 'lodash';\nimport { ComponentID } from '@teambit/component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport loader from '@teambit/legacy/dist/cli/loader';\nimport { BIT_MAP, COMPONENT_ORIGINS } from '@teambit/legacy/dist/constants';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport logger from '@teambit/legacy/dist/logger/logger';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport mapSeries from 'p-map-series';\nimport chalk from 'chalk';\nimport { ChildProcess } from 'child_process';\nimport chokidar, { FSWatcher } from 'chokidar';\nimport ComponentMap from '@teambit/legacy/dist/consumer/bit-map/component-map';\nimport { PathLinux, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { CompilationInitiator } from '@teambit/compiler';\nimport { WorkspaceAspect } from '../';\nimport { OnComponentChangeEvent, OnComponentAddEvent, OnComponentRemovedEvent } from '../events';\nimport { Workspace } from '../workspace';\nimport { OnComponentEventResult } from '../on-component-events';\n\nexport type WatcherProcessData = { watchProcess: ChildProcess; compilerId: BitId; componentIds: BitId[] };\n\nexport class Watcher {\n private fsWatcher: FSWatcher;\n constructor(\n private workspace: Workspace,\n private pubsub: PubsubMain,\n private trackDirs: { [dir: PathLinux]: ComponentID } = {},\n private verbose = false,\n private multipleWatchers: WatcherProcessData[] = []\n ) {}\n\n async watch(opts: { msgs; verbose?: boolean }) {\n this.verbose = Boolean(opts.verbose);\n await this.watchAll({ msgs: opts.msgs, verbose: this.verbose });\n }\n\n get consumer(): Consumer {\n return this.workspace.consumer;\n }\n\n async watchAll(opts?: { msgs; verbose?: boolean; initiator?: CompilationInitiator }) {\n // TODO: run build in the beginning of process (it's work like this in other envs)\n const _verbose = opts?.verbose || false;\n await this.createWatcher();\n const watcher = this.fsWatcher;\n opts?.msgs?.onStart(this.workspace);\n\n return new Promise((resolve, reject) => {\n // prefix your command with \"BIT_LOG=*\" to see all watch events\n if (process.env.BIT_LOG) {\n if (opts?.msgs?.onAll) watcher.on('all', opts?.msgs?.onAll);\n }\n watcher.on('ready', () => {\n opts?.msgs?.onReady(this.workspace, this.trackDirs, _verbose);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('change', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath, opts?.initiator)) || [];\n const duration = new Date().getTime() - startTime;\n opts?.msgs?.onChange(filePath, buildResults, _verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('add', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath)) || [];\n const duration = new Date().getTime() - startTime;\n opts?.msgs?.onAdd(filePath, buildResults, _verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('unlink', async (p) => {\n opts?.msgs?.onUnlink(p);\n await this.handleChange(p);\n });\n watcher.on('error', (err) => {\n opts?.msgs?.onError(err);\n reject(err);\n });\n });\n }\n\n private async handleChange(filePath: string, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]> {\n try {\n if (filePath.endsWith(BIT_MAP)) {\n const buildResults = await this.handleBitmapChanges();\n this.completeWatch();\n return buildResults;\n }\n const componentId = await this.getComponentIdAndClearItsCache(filePath);\n if (!componentId) {\n logger.debug(`file ${filePath} is not part of any component, ignoring it`);\n return this.completeWatch();\n }\n\n const buildResults = await this.executeWatchOperationsOnComponent(componentId, true, initiator);\n this.completeWatch();\n return buildResults;\n } catch (err: any) {\n const msg = `watcher found an error while handling ${filePath}`;\n logger.error(msg, err);\n logger.console(`${msg}, ${err.message}`);\n return [];\n }\n }\n\n /**\n * if .bitmap changed, it's possible that a new component has been added. trigger onComponentAdd.\n */\n private async handleBitmapChanges(): Promise<OnComponentEventResult[]> {\n const previewsTrackDirs = { ...this.trackDirs };\n await this.workspace._reloadConsumer();\n await this.setTrackDirs();\n const newDirs: string[] = difference(Object.keys(this.trackDirs), Object.keys(previewsTrackDirs));\n const removedDirs: string[] = difference(Object.keys(previewsTrackDirs), Object.keys(this.trackDirs));\n const results: OnComponentEventResult[] = [];\n if (newDirs.length) {\n this.fsWatcher.add(newDirs);\n const addResults = await mapSeries(newDirs, (dir) =>\n this.executeWatchOperationsOnComponent(this.trackDirs[dir], false)\n );\n results.push(...addResults.flat());\n }\n if (removedDirs.length) {\n await this.fsWatcher.unwatch(removedDirs);\n await mapSeries(removedDirs, (dir) => this.executeWatchOperationsOnRemove(previewsTrackDirs[dir]));\n }\n return results;\n }\n\n private async executeWatchOperationsOnRemove(componentId: ComponentID) {\n logger.debug(`running OnComponentRemove hook for ${chalk.bold(componentId.toString())}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentRemovedEvent(componentId.toString()));\n await this.workspace.triggerOnComponentRemove(componentId);\n }\n\n private async executeWatchOperationsOnComponent(\n componentId: ComponentID,\n isChange = true,\n initiator?: CompilationInitiator\n ): Promise<OnComponentEventResult[]> {\n if (this.isComponentWatchedExternally(componentId)) {\n // update capsule, once done, it automatically triggers the external watcher\n await this.workspace.get(componentId);\n return [];\n }\n const idStr = componentId.toString();\n\n if (isChange) {\n logger.debug(`running OnComponentChange hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentChangeEvent(idStr, 'OnComponentChange'));\n } else {\n logger.debug(`running OnComponentAdd hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentAddEvent(idStr, 'OnComponentAdd'));\n }\n\n let buildResults: OnComponentEventResult[];\n try {\n buildResults = isChange\n ? await this.workspace.triggerOnComponentChange(componentId, initiator)\n : await this.workspace.triggerOnComponentAdd(componentId);\n } catch (err: any) {\n // do not exist the watch process on errors, just print them\n logger.console(err.message || err);\n return [];\n }\n if (buildResults && buildResults.length) {\n return buildResults;\n }\n logger.console(`${idStr} doesn't have a compiler, nothing to build`);\n return [];\n }\n\n private creatOnComponentRemovedEvent(idStr) {\n return new OnComponentRemovedEvent(Date.now(), idStr);\n }\n\n private creatOnComponentChangeEvent(idStr, hook) {\n return new OnComponentChangeEvent(Date.now(), idStr, hook);\n }\n\n private creatOnComponentAddEvent(idStr, hook) {\n return new OnComponentAddEvent(Date.now(), idStr, hook);\n }\n\n private completeWatch() {\n loader.stop();\n return [];\n }\n\n private isComponentWatchedExternally(componentId: ComponentID) {\n const watcherData = this.multipleWatchers.find((m) => m.componentIds.find((id) => id.isEqual(componentId._legacy)));\n if (watcherData) {\n logger.debug(`${componentId.toString()} is watched by ${watcherData.compilerId.toString()}`);\n return true;\n }\n return false;\n }\n\n /**\n * if a file was added/remove, once the component is loaded, it changes .bitmap, and then the\n * entire cache is invalidated and the consumer is reloaded.\n * when a file just changed, no need to reload the consumer, it is enough to just delete the\n * component from the cache (both, workspace and consumer)\n */\n private async getComponentIdAndClearItsCache(filePath: string): Promise<ComponentID | null> {\n const relativeFile = pathNormalizeToLinux(this.consumer.getPathRelativeToConsumer(filePath));\n const trackDir = this.findTrackDirByFilePathRecursively(relativeFile);\n if (!trackDir) {\n // the file is not part of any component. If it was a new component, or a new file of\n // existing component, then, handleBitmapChanges() should deal with it.\n return null;\n }\n const componentId = this.trackDirs[trackDir];\n this.workspace.clearComponentCache(componentId);\n const component = await this.workspace.get(componentId);\n const componentMap: ComponentMap = component.state._consumer.componentMap;\n if (componentMap.getFilesRelativeToConsumer().find((p) => p === relativeFile)) {\n return componentId;\n }\n // the file is inside the component dir but it's ignored. (e.g. it's in IGNORE_LIST)\n return null;\n }\n\n private findTrackDirByFilePathRecursively(filePath: string): string | null {\n if (this.trackDirs[filePath]) return filePath;\n const parentDir = dirname(filePath);\n if (parentDir === filePath) return null;\n return this.findTrackDirByFilePathRecursively(parentDir);\n }\n\n private async createWatcher() {\n const pathsToWatch = await this.getPathsToWatch();\n this.fsWatcher = chokidar.watch(pathsToWatch, {\n ignoreInitial: true,\n // Using the function way since the regular way not working as expected\n // It might be solved when upgrading to chokidar > 3.0.0\n // See:\n // https://github.com/paulmillr/chokidar/issues/773\n // https://github.com/paulmillr/chokidar/issues/492\n // https://github.com/paulmillr/chokidar/issues/724\n ignored: (path) => {\n // Ignore package.json temporarily since it cerates endless loop since it's re-written after each build\n if (path.includes(`${sep}node_modules${sep}`) || path.includes(`${sep}package.json`)) {\n return true;\n }\n return false;\n },\n persistent: true,\n useFsEvents: false,\n });\n }\n\n async setTrackDirs() {\n this.trackDirs = {};\n const componentsFromBitMap = this.consumer.bitMap.getAllComponents([\n COMPONENT_ORIGINS.AUTHORED,\n COMPONENT_ORIGINS.IMPORTED,\n ]);\n await Promise.all(\n componentsFromBitMap.map(async (componentMap) => {\n const bitId = componentMap.id;\n const trackDir = componentMap.getTrackDir();\n if (!trackDir) throw new Error(`${bitId.toString()} has no rootDir, which is invalid in Harmony`);\n const componentId = await this.workspace.resolveComponentId(bitId);\n this.trackDirs[trackDir] = componentId;\n })\n );\n }\n\n private async getPathsToWatch(): Promise<PathOsBasedAbsolute[]> {\n await this.setTrackDirs();\n const paths = [...Object.keys(this.trackDirs), BIT_MAP];\n const pathsAbsolute = paths.map((dir) => this.consumer.toAbsolutePath(dir));\n return pathsAbsolute;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["watcher.ts"],"names":["Watcher","constructor","workspace","pubsub","trackDirs","verbose","multipleWatchers","watch","opts","Boolean","watchAll","consumer","msgs","watchOpts","pathsToWatch","getPathsToWatch","componentIds","Object","values","triggerOnPreWatch","createWatcher","watcher","fsWatcher","onStart","Promise","resolve","reject","process","env","BIT_LOG","onAll","on","onReady","filePath","startTime","Date","getTime","buildResults","handleChange","initiator","duration","onChange","onAdd","p","onUnlink","err","onError","endsWith","BIT_MAP","handleBitmapChanges","completeWatch","componentId","getComponentIdAndClearItsCache","logger","debug","executeWatchOperationsOnComponent","msg","error","console","message","previewsTrackDirs","_reloadConsumer","setTrackDirs","newDirs","keys","removedDirs","results","length","add","addResults","dir","push","flat","unwatch","executeWatchOperationsOnRemove","chalk","bold","toString","pub","WorkspaceAspect","id","creatOnComponentRemovedEvent","triggerOnComponentRemove","files","isChange","isComponentWatchedExternally","get","idStr","creatOnComponentChangeEvent","creatOnComponentAddEvent","triggerOnComponentChange","triggerOnComponentAdd","OnComponentRemovedEvent","now","hook","OnComponentChangeEvent","OnComponentAddEvent","loader","stop","watcherData","find","m","isEqual","_legacy","compilerId","relativeFile","getPathRelativeToConsumer","trackDir","findTrackDirByFilePathRecursively","clearComponentCache","component","componentMap","state","_consumer","getFilesRelativeToConsumer","parentDir","chokidar","ignoreInitial","ignored","path","includes","sep","persistent","useFsEvents","componentsFromBitMap","bitMap","getAllComponents","COMPONENT_ORIGINS","AUTHORED","IMPORTED","all","map","bitId","getTrackDir","Error","resolveComponentId","paths","pathsAbsolute","toAbsolutePath"],"mappings":"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","sourcesContent":["import { PubsubMain } from '@teambit/pubsub';\nimport { dirname, sep } from 'path';\nimport { difference } from 'lodash';\nimport { ComponentID } from '@teambit/component';\nimport { BitId } from '@teambit/legacy-bit-id';\nimport loader from '@teambit/legacy/dist/cli/loader';\nimport { BIT_MAP, COMPONENT_ORIGINS } from '@teambit/legacy/dist/constants';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport logger from '@teambit/legacy/dist/logger/logger';\nimport { pathNormalizeToLinux } from '@teambit/legacy/dist/utils';\nimport mapSeries from 'p-map-series';\nimport chalk from 'chalk';\nimport { ChildProcess } from 'child_process';\nimport chokidar, { FSWatcher } from 'chokidar';\nimport ComponentMap from '@teambit/legacy/dist/consumer/bit-map/component-map';\nimport { PathLinux, PathOsBasedAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { CompilationInitiator } from '@teambit/compiler';\nimport { WorkspaceAspect } from '../';\nimport { OnComponentChangeEvent, OnComponentAddEvent, OnComponentRemovedEvent } from '../events';\nimport { Workspace } from '../workspace';\nimport { OnComponentEventResult } from '../on-component-events';\n\nexport type WatcherProcessData = { watchProcess: ChildProcess; compilerId: BitId; componentIds: BitId[] };\n\nexport type WatchOptions = { verbose?: boolean; checkTypes?: boolean; skipPreCompilation?: boolean };\n\nexport class Watcher {\n private fsWatcher: FSWatcher;\n constructor(\n private workspace: Workspace,\n private pubsub: PubsubMain,\n private trackDirs: { [dir: PathLinux]: ComponentID } = {},\n private verbose = false,\n private multipleWatchers: WatcherProcessData[] = []\n ) {}\n\n async watch(opts: { msgs } & WatchOptions) {\n this.verbose = Boolean(opts.verbose);\n await this.watchAll(opts);\n }\n\n get consumer(): Consumer {\n return this.workspace.consumer;\n }\n\n async watchAll(opts: { msgs; initiator?: CompilationInitiator } & WatchOptions) {\n const { msgs, ...watchOpts } = opts;\n // TODO: run build in the beginning of process (it's work like this in other envs)\n const pathsToWatch = await this.getPathsToWatch();\n const componentIds = Object.values(this.trackDirs);\n await this.workspace.triggerOnPreWatch(componentIds, watchOpts);\n await this.createWatcher(pathsToWatch);\n const watcher = this.fsWatcher;\n msgs?.onStart(this.workspace);\n\n return new Promise((resolve, reject) => {\n // prefix your command with \"BIT_LOG=*\" to see all watch events\n if (process.env.BIT_LOG) {\n if (msgs?.onAll) watcher.on('all', msgs?.onAll);\n }\n watcher.on('ready', () => {\n msgs?.onReady(this.workspace, this.trackDirs, this.verbose);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('change', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath, opts?.initiator)) || [];\n const duration = new Date().getTime() - startTime;\n msgs?.onChange(filePath, buildResults, this.verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('add', async (filePath) => {\n const startTime = new Date().getTime();\n const buildResults = (await this.handleChange(filePath)) || [];\n const duration = new Date().getTime() - startTime;\n msgs?.onAdd(filePath, buildResults, this.verbose, duration);\n });\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n watcher.on('unlink', async (p) => {\n msgs?.onUnlink(p);\n await this.handleChange(p);\n });\n watcher.on('error', (err) => {\n msgs?.onError(err);\n reject(err);\n });\n });\n }\n\n private async handleChange(filePath: string, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]> {\n try {\n if (filePath.endsWith(BIT_MAP)) {\n const buildResults = await this.handleBitmapChanges();\n this.completeWatch();\n return buildResults;\n }\n const componentId = await this.getComponentIdAndClearItsCache(filePath);\n if (!componentId) {\n logger.debug(`file ${filePath} is not part of any component, ignoring it`);\n return this.completeWatch();\n }\n\n const buildResults = await this.executeWatchOperationsOnComponent(componentId, [filePath], true, initiator);\n this.completeWatch();\n return buildResults;\n } catch (err: any) {\n const msg = `watcher found an error while handling ${filePath}`;\n logger.error(msg, err);\n logger.console(`${msg}, ${err.message}`);\n return [];\n }\n }\n\n /**\n * if .bitmap changed, it's possible that a new component has been added. trigger onComponentAdd.\n */\n private async handleBitmapChanges(): Promise<OnComponentEventResult[]> {\n const previewsTrackDirs = { ...this.trackDirs };\n await this.workspace._reloadConsumer();\n await this.setTrackDirs();\n const newDirs: string[] = difference(Object.keys(this.trackDirs), Object.keys(previewsTrackDirs));\n const removedDirs: string[] = difference(Object.keys(previewsTrackDirs), Object.keys(this.trackDirs));\n const results: OnComponentEventResult[] = [];\n if (newDirs.length) {\n this.fsWatcher.add(newDirs);\n const addResults = await mapSeries(newDirs, async (dir) =>\n this.executeWatchOperationsOnComponent(this.trackDirs[dir], [], false)\n );\n results.push(...addResults.flat());\n }\n if (removedDirs.length) {\n await this.fsWatcher.unwatch(removedDirs);\n await mapSeries(removedDirs, (dir) => this.executeWatchOperationsOnRemove(previewsTrackDirs[dir]));\n }\n return results;\n }\n\n private async executeWatchOperationsOnRemove(componentId: ComponentID) {\n logger.debug(`running OnComponentRemove hook for ${chalk.bold(componentId.toString())}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentRemovedEvent(componentId.toString()));\n await this.workspace.triggerOnComponentRemove(componentId);\n }\n\n private async executeWatchOperationsOnComponent(\n componentId: ComponentID,\n files: string[],\n isChange = true,\n initiator?: CompilationInitiator\n ): Promise<OnComponentEventResult[]> {\n if (this.isComponentWatchedExternally(componentId)) {\n // update capsule, once done, it automatically triggers the external watcher\n await this.workspace.get(componentId);\n return [];\n }\n const idStr = componentId.toString();\n\n if (isChange) {\n logger.debug(`running OnComponentChange hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentChangeEvent(idStr, 'OnComponentChange'));\n } else {\n logger.debug(`running OnComponentAdd hook for ${chalk.bold(idStr)}`);\n this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentAddEvent(idStr, 'OnComponentAdd'));\n }\n\n let buildResults: OnComponentEventResult[];\n try {\n buildResults = isChange\n ? await this.workspace.triggerOnComponentChange(componentId, files, initiator)\n : await this.workspace.triggerOnComponentAdd(componentId);\n } catch (err: any) {\n // do not exit the watch process on errors, just print them\n const msg = `found an issue during onComponentChange or onComponentAdd hooks`;\n logger.error(msg, err);\n logger.console(`\\n${msg}: ${err.message || err}`);\n return [];\n }\n if (buildResults && buildResults.length) {\n return buildResults;\n }\n logger.console(`${idStr} doesn't have a compiler, nothing to build`);\n return [];\n }\n\n private creatOnComponentRemovedEvent(idStr) {\n return new OnComponentRemovedEvent(Date.now(), idStr);\n }\n\n private creatOnComponentChangeEvent(idStr, hook) {\n return new OnComponentChangeEvent(Date.now(), idStr, hook);\n }\n\n private creatOnComponentAddEvent(idStr, hook) {\n return new OnComponentAddEvent(Date.now(), idStr, hook);\n }\n\n private completeWatch() {\n loader.stop();\n return [];\n }\n\n private isComponentWatchedExternally(componentId: ComponentID) {\n const watcherData = this.multipleWatchers.find((m) => m.componentIds.find((id) => id.isEqual(componentId._legacy)));\n if (watcherData) {\n logger.debug(`${componentId.toString()} is watched by ${watcherData.compilerId.toString()}`);\n return true;\n }\n return false;\n }\n\n /**\n * if a file was added/remove, once the component is loaded, it changes .bitmap, and then the\n * entire cache is invalidated and the consumer is reloaded.\n * when a file just changed, no need to reload the consumer, it is enough to just delete the\n * component from the cache (both, workspace and consumer)\n */\n private async getComponentIdAndClearItsCache(filePath: string): Promise<ComponentID | null> {\n const relativeFile = pathNormalizeToLinux(this.consumer.getPathRelativeToConsumer(filePath));\n const trackDir = this.findTrackDirByFilePathRecursively(relativeFile);\n if (!trackDir) {\n // the file is not part of any component. If it was a new component, or a new file of\n // existing component, then, handleBitmapChanges() should deal with it.\n return null;\n }\n const componentId = this.trackDirs[trackDir];\n this.workspace.clearComponentCache(componentId);\n const component = await this.workspace.get(componentId);\n const componentMap: ComponentMap = component.state._consumer.componentMap;\n if (componentMap.getFilesRelativeToConsumer().find((p) => p === relativeFile)) {\n return componentId;\n }\n // the file is inside the component dir but it's ignored. (e.g. it's in IGNORE_LIST)\n return null;\n }\n\n private findTrackDirByFilePathRecursively(filePath: string): string | null {\n if (this.trackDirs[filePath]) return filePath;\n const parentDir = dirname(filePath);\n if (parentDir === filePath) return null;\n return this.findTrackDirByFilePathRecursively(parentDir);\n }\n\n private async createWatcher(pathsToWatch: string[]) {\n this.fsWatcher = chokidar.watch(pathsToWatch, {\n ignoreInitial: true,\n // Using the function way since the regular way not working as expected\n // It might be solved when upgrading to chokidar > 3.0.0\n // See:\n // https://github.com/paulmillr/chokidar/issues/773\n // https://github.com/paulmillr/chokidar/issues/492\n // https://github.com/paulmillr/chokidar/issues/724\n ignored: (path) => {\n // Ignore package.json temporarily since it cerates endless loop since it's re-written after each build\n if (path.includes(`${sep}node_modules${sep}`) || path.includes(`${sep}package.json`)) {\n return true;\n }\n return false;\n },\n persistent: true,\n useFsEvents: false,\n });\n }\n\n async setTrackDirs() {\n this.trackDirs = {};\n const componentsFromBitMap = this.consumer.bitMap.getAllComponents([\n COMPONENT_ORIGINS.AUTHORED,\n COMPONENT_ORIGINS.IMPORTED,\n ]);\n await Promise.all(\n componentsFromBitMap.map(async (componentMap) => {\n const bitId = componentMap.id;\n const trackDir = componentMap.getTrackDir();\n if (!trackDir) throw new Error(`${bitId.toString()} has no rootDir, which is invalid in Harmony`);\n const componentId = await this.workspace.resolveComponentId(bitId);\n this.trackDirs[trackDir] = componentId;\n })\n );\n }\n\n private async getPathsToWatch(): Promise<PathOsBasedAbsolute[]> {\n await this.setTrackDirs();\n const paths = [...Object.keys(this.trackDirs), BIT_MAP];\n const pathsAbsolute = paths.map((dir) => this.consumer.toAbsolutePath(dir));\n return pathsAbsolute;\n }\n}\n"]}
|
package/dist/workspace.d.ts
CHANGED
|
@@ -27,9 +27,9 @@ import type { ComponentLog } from '@teambit/legacy/dist/scope/models/model-compo
|
|
|
27
27
|
import { CompilationInitiator } from '@teambit/compiler';
|
|
28
28
|
import { OnComponentAdd, OnComponentChange, OnComponentEventResult, OnComponentLoad, OnComponentRemove } from './on-component-events';
|
|
29
29
|
import { WorkspaceExtConfig } from './types';
|
|
30
|
-
import { Watcher } from './watch/watcher';
|
|
30
|
+
import { Watcher, WatchOptions } from './watch/watcher';
|
|
31
31
|
import { ComponentStatus } from './workspace-component/component-status';
|
|
32
|
-
import { OnComponentAddSlot, OnComponentChangeSlot, OnComponentLoadSlot, OnComponentRemoveSlot } from './workspace.provider';
|
|
32
|
+
import { OnComponentAddSlot, OnComponentChangeSlot, OnComponentLoadSlot, OnComponentRemoveSlot, OnPreWatch, OnPreWatchSlot } from './workspace.provider';
|
|
33
33
|
import { WorkspaceComponentLoader } from './workspace-component/workspace-component-loader';
|
|
34
34
|
export declare type EjectConfResult = {
|
|
35
35
|
configPath: string;
|
|
@@ -80,12 +80,13 @@ export declare class Workspace implements ComponentFactory {
|
|
|
80
80
|
private envs;
|
|
81
81
|
private onComponentAddSlot;
|
|
82
82
|
private onComponentRemoveSlot;
|
|
83
|
+
private onPreWatchSlot;
|
|
83
84
|
private graphql;
|
|
84
85
|
priority: boolean;
|
|
85
86
|
owner?: string;
|
|
86
87
|
componentsScopeDirsMap: ComponentScopeDirMap;
|
|
87
88
|
componentLoader: WorkspaceComponentLoader;
|
|
88
|
-
constructor(pubsub: PubsubMain, config: WorkspaceExtConfig, consumer: Consumer, scope: ScopeMain, componentAspect: ComponentMain, isolator: IsolatorMain, dependencyResolver: DependencyResolverMain, variants: VariantsMain, aspectLoader: AspectLoaderMain, logger: Logger, componentList: ComponentsList, harmony: Harmony, onComponentLoadSlot: OnComponentLoadSlot, onComponentChangeSlot: OnComponentChangeSlot, envs: EnvsMain, onComponentAddSlot: OnComponentAddSlot, onComponentRemoveSlot: OnComponentRemoveSlot, graphql: GraphqlMain);
|
|
89
|
+
constructor(pubsub: PubsubMain, config: WorkspaceExtConfig, consumer: Consumer, scope: ScopeMain, componentAspect: ComponentMain, isolator: IsolatorMain, dependencyResolver: DependencyResolverMain, variants: VariantsMain, aspectLoader: AspectLoaderMain, logger: Logger, componentList: ComponentsList, harmony: Harmony, onComponentLoadSlot: OnComponentLoadSlot, onComponentChangeSlot: OnComponentChangeSlot, envs: EnvsMain, onComponentAddSlot: OnComponentAddSlot, onComponentRemoveSlot: OnComponentRemoveSlot, onPreWatchSlot: OnPreWatchSlot, graphql: GraphqlMain);
|
|
89
90
|
private validateConfig;
|
|
90
91
|
readonly watcher: Watcher;
|
|
91
92
|
get path(): string;
|
|
@@ -95,6 +96,7 @@ export declare class Workspace implements ComponentFactory {
|
|
|
95
96
|
registerOnComponentChange(onComponentChangeFunc: OnComponentChange): this;
|
|
96
97
|
registerOnComponentAdd(onComponentAddFunc: OnComponentAdd): this;
|
|
97
98
|
registerOnComponentRemove(onComponentRemoveFunc: OnComponentRemove): this;
|
|
99
|
+
registerOnPreWatch(onPreWatchFunc: OnPreWatch): this;
|
|
98
100
|
get name(): string;
|
|
99
101
|
get icon(): string;
|
|
100
102
|
hasModifiedDependencies(component: Component): Promise<boolean>;
|
|
@@ -122,7 +124,7 @@ export declare class Workspace implements ComponentFactory {
|
|
|
122
124
|
getEnvSystemDescriptor(component: Component): Promise<AspectData>;
|
|
123
125
|
clearCache(): void;
|
|
124
126
|
clearComponentCache(id: ComponentID): void;
|
|
125
|
-
triggerOnComponentChange(id: ComponentID, initiator?: CompilationInitiator): Promise<OnComponentEventResult[]>;
|
|
127
|
+
triggerOnComponentChange(id: ComponentID, files: string[], initiator?: CompilationInitiator): Promise<OnComponentEventResult[]>;
|
|
126
128
|
triggerOnComponentAdd(id: ComponentID): Promise<OnComponentEventResult[]>;
|
|
127
129
|
triggerOnComponentRemove(id: ComponentID): Promise<OnComponentEventResult[]>;
|
|
128
130
|
getState(id: ComponentID, hash: string): Promise<import("@teambit/component").State>;
|
|
@@ -142,6 +144,9 @@ export declare class Workspace implements ComponentFactory {
|
|
|
142
144
|
componentDir(componentId: ComponentID, bitMapOptions?: GetBitMapComponentOptions, options?: {
|
|
143
145
|
relative: boolean;
|
|
144
146
|
}): PathOsBased;
|
|
147
|
+
componentPackageDir(component: Component, options?: {
|
|
148
|
+
relative: boolean;
|
|
149
|
+
}): string;
|
|
145
150
|
private componentDirFromLegacyId;
|
|
146
151
|
componentDirToAbsolute(relativeComponentDir: PathOsBasedRelative): PathOsBasedAbsolute;
|
|
147
152
|
componentDefaultScope(componentId: ComponentID): Promise<string | undefined>;
|
|
@@ -149,6 +154,7 @@ export declare class Workspace implements ComponentFactory {
|
|
|
149
154
|
get defaultScope(): string;
|
|
150
155
|
private componentDefaultScopeFromComponentDirAndNameWithoutConfigFile;
|
|
151
156
|
componentExtensions(componentId: ComponentID, componentFromScope?: Component): Promise<ExtensionDataList>;
|
|
157
|
+
triggerOnPreWatch(componentIds: ComponentID[], watchOpts: WatchOptions): Promise<void>;
|
|
152
158
|
private resolveExtensionListIds;
|
|
153
159
|
private isVendorComponentByComponentDir;
|
|
154
160
|
private componentConfigFile;
|