@teambit/workspace 0.0.952 → 0.0.955
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/build-graph-ids-from-fs.d.ts +3 -1
- package/dist/build-graph-ids-from-fs.js +12 -4
- package/dist/build-graph-ids-from-fs.js.map +1 -1
- package/dist/{preview-1672889151191.js → preview-1673347296243.js} +2 -2
- package/dist/watch/watcher.js +16 -15
- package/dist/watch/watcher.js.map +1 -1
- package/package-tar/teambit-workspace-0.0.955.tgz +0 -0
- package/package.json +33 -33
- package/watch/watcher.ts +21 -19
- package/package-tar/teambit-workspace-0.0.952.tgz +0 -0
|
@@ -37,7 +37,9 @@ export declare class GraphIdsFromFsBuilder {
|
|
|
37
37
|
* we have the graph-dependencies from the last snap, so we prefer to use it whenever possible for performance reasons.
|
|
38
38
|
* if we can't use it, we have to recursively load dependencies components and get the data from there.
|
|
39
39
|
* to maximize the performance, we iterate the direct dependencies, if we find a dep with the same id in the graph,
|
|
40
|
-
* then ask the graph for all its successors. otherwise, if it's not there,
|
|
40
|
+
* and that id is not in the workspace then ask the graph for all its successors. otherwise, if it's not there, or
|
|
41
|
+
* it's there but it's also in the workspace (which therefore can be modified), we recursively load the dep components
|
|
42
|
+
* and get its dependencies.
|
|
41
43
|
*/
|
|
42
44
|
private processCompFromWorkspaceWithGraph;
|
|
43
45
|
private addDepEdge;
|
|
@@ -168,13 +168,21 @@ class GraphIdsFromFsBuilder {
|
|
|
168
168
|
* we have the graph-dependencies from the last snap, so we prefer to use it whenever possible for performance reasons.
|
|
169
169
|
* if we can't use it, we have to recursively load dependencies components and get the data from there.
|
|
170
170
|
* to maximize the performance, we iterate the direct dependencies, if we find a dep with the same id in the graph,
|
|
171
|
-
* then ask the graph for all its successors. otherwise, if it's not there,
|
|
171
|
+
* and that id is not in the workspace then ask the graph for all its successors. otherwise, if it's not there, or
|
|
172
|
+
* it's there but it's also in the workspace (which therefore can be modified), we recursively load the dep components
|
|
173
|
+
* and get its dependencies.
|
|
172
174
|
*/
|
|
173
175
|
async processCompFromWorkspaceWithGraph(graphFromScope, component) {
|
|
174
176
|
const deps = await this.dependencyResolver.getComponentDependencies(component);
|
|
175
|
-
const
|
|
176
|
-
const
|
|
177
|
-
|
|
177
|
+
const workspaceIds = await this.workspace.listIds();
|
|
178
|
+
const [depsInScopeGraph, depsNotInScopeGraph] = (0, _lodash().partition)(deps, dep => graphFromScope.hasNode(dep.componentId.toString()) && !workspaceIds.find(id => id.isEqual(dep.componentId)));
|
|
179
|
+
const depsInScopeGraphIds = depsInScopeGraph.map(dep => dep.componentId.toString());
|
|
180
|
+
const depsInScopeGraphIdsNotCompleted = depsInScopeGraphIds.filter(id => !this.completed.includes(id));
|
|
181
|
+
if (depsInScopeGraphIdsNotCompleted.length) {
|
|
182
|
+
const subGraphs = graphFromScope.successorsSubgraph(depsInScopeGraphIdsNotCompleted);
|
|
183
|
+
this.graph.merge([subGraphs]);
|
|
184
|
+
this.completed.push(...depsInScopeGraphIdsNotCompleted);
|
|
185
|
+
}
|
|
178
186
|
const allDepsIds = depsNotInScopeGraph.map(d => d.componentId);
|
|
179
187
|
const idStr = component.id.toString();
|
|
180
188
|
const allDependenciesComps = await this.loadManyComponents(allDepsIds, idStr);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["lifecycleToDepType","compDep","isExtension","lifecycle","Error","GraphIdsFromFsBuilder","constructor","workspace","logger","dependencyResolver","shouldThrowOnMissingDep","Graph","consumer","buildGraph","ids","debug","length","start","Date","now","components","loadManyComponents","processManyComponents","graph","depth","importObjects","allDependencies","mapSeries","component","processOneComponent","allDependenciesFlattened","flatten","workspaceIds","listIds","compOnWorkspaceOnly","filter","comp","find","id","isEqual","notImported","map","c","importedIds","includes","toString","withScope","_legacy","dep","hasScope","scopeComponentsImporter","scope","scopeImporter","importMany","BitIds","uniqFromArray","throwForDependencyNotFound","throwForSeederNotFound","reFetchUnBuiltVersion","preferDependencyGraph","push","idStr","completed","graphFromScope","getSavedGraphOfComponentIfExist","edges","isOnWorkspace","hasId","allDependenciesComps","processCompFromWorkspaceWithGraph","merge","deps","getComponentDependencies","allDepsIds","d","componentId","forEach","addDepEdge","depsInScopeGraph","depsNotInScopeGraph","partition","hasNode","subGraphs","successorsSubgraph","depId","warn","setEdge","Edge","componentsIds","dependenciesOf","fromCache","loadedComponents","get","setNode","Node","err","ComponentNotFound","ComponentNotFoundInScope","ScopeNotFound","BitError","error","compact"],"sources":["build-graph-ids-from-fs.ts"],"sourcesContent":["import mapSeries from 'p-map-series';\nimport { Graph, Node, Edge } from '@teambit/graph.cleargraph';\nimport { flatten, partition } from 'lodash';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport { Component, ComponentID } from '@teambit/component';\nimport BitIds from '@teambit/legacy/dist/bit-id/bit-ids';\nimport { ComponentDependency, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { CompIdGraph, DepEdgeType } from '@teambit/graph';\nimport { ComponentNotFound, ScopeNotFound } from '@teambit/legacy/dist/scope/exceptions';\nimport { ComponentNotFound as ComponentNotFoundInScope } from '@teambit/scope';\nimport compact from 'lodash.compact';\nimport { Logger } from '@teambit/logger';\nimport { BitError } from '@teambit/bit-error';\nimport { Workspace } from './workspace';\n\nexport function lifecycleToDepType(compDep: ComponentDependency): DepEdgeType {\n if (compDep.isExtension) return 'ext';\n switch (compDep.lifecycle) {\n case 'dev':\n return 'dev';\n case 'runtime':\n return 'prod';\n default:\n throw new Error(`lifecycle ${compDep.lifecycle} is not support`);\n }\n}\n\nexport class GraphIdsFromFsBuilder {\n private graph = new Graph<ComponentID, DepEdgeType>();\n private completed: string[] = [];\n private depth = 1;\n private consumer: Consumer;\n private loadedComponents: { [idStr: string]: Component } = {};\n private importedIds: string[] = [];\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private dependencyResolver: DependencyResolverMain,\n private shouldThrowOnMissingDep = true\n ) {\n this.consumer = this.workspace.consumer;\n }\n\n /**\n * create a graph with all dependencies and flattened dependencies of the given components.\n * the nodes are component-ids and the edges has a label of the dependency type.\n * to get some info about this the graph build take a look into build-graph-from-fs.buildGraph() docs.\n */\n async buildGraph(ids: ComponentID[]): Promise<Graph<ComponentID, DepEdgeType>> {\n this.logger.debug(`GraphIdsFromFsBuilder, buildGraph with ${ids.length} seeders`);\n const start = Date.now();\n const components = await this.loadManyComponents(ids);\n await this.processManyComponents(components);\n this.logger.debug(\n `GraphIdsFromFsBuilder, buildGraph with ${ids.length} seeders completed (${(Date.now() - start) / 1000} sec)`\n );\n return this.graph;\n }\n\n private async processManyComponents(components: Component[]) {\n this.logger.debug(\n `GraphIdsFromFsBuilder.processManyComponents depth ${this.depth}, ${components.length} components`\n );\n this.depth += 1;\n await this.importObjects(components);\n const allDependencies = await mapSeries(components, (component) => this.processOneComponent(component));\n const allDependenciesFlattened = flatten(allDependencies);\n if (allDependenciesFlattened.length) await this.processManyComponents(allDependenciesFlattened);\n }\n\n /**\n * only for components from the workspace that can be modified to add/remove dependencies, we need to make sure that\n * all their dependencies are imported.\n * once a component from scope is imported, we know that either we have its dependency graph or all flattened deps\n */\n private async importObjects(components: Component[]) {\n const workspaceIds = await this.workspace.listIds();\n const compOnWorkspaceOnly = components.filter((comp) => workspaceIds.find((id) => id.isEqual(comp.id)));\n const notImported = compOnWorkspaceOnly.map((c) => c.id).filter((id) => !this.importedIds.includes(id.toString()));\n const withScope = notImported.map((id) => id._legacy).filter((dep) => dep.hasScope());\n const scopeComponentsImporter = this.consumer.scope.scopeImporter;\n await scopeComponentsImporter.importMany({\n ids: BitIds.uniqFromArray(withScope),\n throwForDependencyNotFound: this.shouldThrowOnMissingDep,\n throwForSeederNotFound: this.shouldThrowOnMissingDep,\n reFetchUnBuiltVersion: false,\n preferDependencyGraph: true,\n });\n notImported.map((id) => this.importedIds.push(id.toString()));\n }\n\n private async processOneComponent(component: Component) {\n const idStr = component.id.toString();\n if (this.completed.includes(idStr)) return [];\n const graphFromScope = await this.workspace.getSavedGraphOfComponentIfExist(component);\n if (graphFromScope?.edges.length) {\n const isOnWorkspace = await this.workspace.hasId(component.id);\n if (isOnWorkspace) {\n const allDependenciesComps = await this.processCompFromWorkspaceWithGraph(graphFromScope, component);\n this.completed.push(idStr);\n return allDependenciesComps;\n }\n this.graph.merge([graphFromScope]);\n this.completed.push(idStr);\n return [];\n }\n\n const deps = await this.dependencyResolver.getComponentDependencies(component);\n const allDepsIds = deps.map((d) => d.componentId);\n const allDependenciesComps = await this.loadManyComponents(allDepsIds, idStr);\n\n deps.forEach((dep) => this.addDepEdge(idStr, dep));\n this.completed.push(idStr);\n\n return allDependenciesComps;\n }\n\n /**\n * this is tricky.\n * the component is in the workspace so it can be modified. dependencies can be added/removed/updated/downgraded.\n * we have the graph-dependencies from the last snap, so we prefer to use it whenever possible for performance reasons.\n * if we can't use it, we have to recursively load dependencies components and get the data from there.\n * to maximize the performance, we iterate the direct dependencies, if we find a dep with the same id in the graph,\n * then ask the graph for all its successors. otherwise, if it's not there, fallback to load the deps components.\n */\n private async processCompFromWorkspaceWithGraph(\n graphFromScope: CompIdGraph,\n component: Component\n ): Promise<Component[]> {\n const deps = await this.dependencyResolver.getComponentDependencies(component);\n const [depsInScopeGraph, depsNotInScopeGraph] = partition(deps, (dep) =>\n graphFromScope.hasNode(dep.componentId.toString())\n );\n const subGraphs = depsInScopeGraph.map((dep) => graphFromScope.successorsSubgraph([dep.componentId.toString()]));\n this.graph.merge(subGraphs);\n\n const allDepsIds = depsNotInScopeGraph.map((d) => d.componentId);\n const idStr = component.id.toString();\n const allDependenciesComps = await this.loadManyComponents(allDepsIds, idStr);\n deps.forEach((dep) => this.addDepEdge(idStr, dep));\n return allDependenciesComps;\n }\n\n private addDepEdge(idStr: string, dep: ComponentDependency) {\n const depId = dep.componentId;\n if (!this.graph.hasNode(depId.toString())) {\n if (this.shouldThrowOnMissingDep) {\n throw new Error(`buildOneComponent: missing node of ${depId.toString()}`);\n }\n this.logger.warn(`ignoring missing ${depId.toString()}`);\n return;\n }\n this.graph.setEdge(new Edge(idStr, depId.toString(), lifecycleToDepType(dep)));\n }\n\n private async loadManyComponents(componentsIds: ComponentID[], dependenciesOf?: string): Promise<Component[]> {\n const components = await mapSeries(componentsIds, async (comp) => {\n const idStr = comp.toString();\n const fromCache = this.loadedComponents[idStr];\n if (fromCache) return fromCache;\n try {\n const component = await this.workspace.get(comp);\n this.loadedComponents[idStr] = component;\n this.graph.setNode(new Node(idStr, component.id));\n return component;\n } catch (err: any) {\n if (\n err instanceof ComponentNotFound ||\n err instanceof ComponentNotFoundInScope ||\n err instanceof ScopeNotFound\n ) {\n if (dependenciesOf && !this.shouldThrowOnMissingDep) {\n this.logger.warn(\n `component ${idStr}, dependency of ${dependenciesOf} was not found. continuing without it`\n );\n return null;\n }\n throw new BitError(\n `error: component \"${idStr}\" was not found.\\nthis component is a dependency of \"${\n dependenciesOf || '<none>'\n }\" and is needed as part of the graph generation`\n );\n }\n if (dependenciesOf) this.logger.error(`failed loading dependencies of ${dependenciesOf}`);\n throw err;\n }\n });\n return compact(components);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAGO,SAASA,kBAAkB,CAACC,OAA4B,EAAe;EAC5E,IAAIA,OAAO,CAACC,WAAW,EAAE,OAAO,KAAK;EACrC,QAAQD,OAAO,CAACE,SAAS;IACvB,KAAK,KAAK;MACR,OAAO,KAAK;IACd,KAAK,SAAS;MACZ,OAAO,MAAM;IACf;MACE,MAAM,IAAIC,KAAK,CAAE,aAAYH,OAAO,CAACE,SAAU,iBAAgB,CAAC;EAAC;AAEvE;AAEO,MAAME,qBAAqB,CAAC;EAOjCC,WAAW,CACDC,SAAoB,EACpBC,MAAc,EACdC,kBAA0C,EAC1CC,uBAAuB,GAAG,IAAI,EACtC;IAAA,KAJQH,SAAoB,GAApBA,SAAoB;IAAA,KACpBC,MAAc,GAAdA,MAAc;IAAA,KACdC,kBAA0C,GAA1CA,kBAA0C;IAAA,KAC1CC,uBAAuB,GAAvBA,uBAAuB;IAAA,+CAVjB,KAAIC,cAAK,GAA4B;IAAA,mDACvB,EAAE;IAAA,+CAChB,CAAC;IAAA;IAAA,0DAE0C,CAAC,CAAC;IAAA,qDAC7B,EAAE;IAOhC,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACL,SAAS,CAACK,QAAQ;EACzC;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMC,UAAU,CAACC,GAAkB,EAA4C;IAC7E,IAAI,CAACN,MAAM,CAACO,KAAK,CAAE,0CAAyCD,GAAG,CAACE,MAAO,UAAS,CAAC;IACjF,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,EAAE;IACxB,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACC,kBAAkB,CAACP,GAAG,CAAC;IACrD,MAAM,IAAI,CAACQ,qBAAqB,CAACF,UAAU,CAAC;IAC5C,IAAI,CAACZ,MAAM,CAACO,KAAK,CACd,0CAAyCD,GAAG,CAACE,MAAO,uBAAsB,CAACE,IAAI,CAACC,GAAG,EAAE,GAAGF,KAAK,IAAI,IAAK,OAAM,CAC9G;IACD,OAAO,IAAI,CAACM,KAAK;EACnB;EAEA,MAAcD,qBAAqB,CAACF,UAAuB,EAAE;IAC3D,IAAI,CAACZ,MAAM,CAACO,KAAK,CACd,qDAAoD,IAAI,CAACS,KAAM,KAAIJ,UAAU,CAACJ,MAAO,aAAY,CACnG;IACD,IAAI,CAACQ,KAAK,IAAI,CAAC;IACf,MAAM,IAAI,CAACC,aAAa,CAACL,UAAU,CAAC;IACpC,MAAMM,eAAe,GAAG,MAAM,IAAAC,qBAAS,EAACP,UAAU,EAAGQ,SAAS,IAAK,IAAI,CAACC,mBAAmB,CAACD,SAAS,CAAC,CAAC;IACvG,MAAME,wBAAwB,GAAG,IAAAC,iBAAO,EAACL,eAAe,CAAC;IACzD,IAAII,wBAAwB,CAACd,MAAM,EAAE,MAAM,IAAI,CAACM,qBAAqB,CAACQ,wBAAwB,CAAC;EACjG;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAcL,aAAa,CAACL,UAAuB,EAAE;IACnD,MAAMY,YAAY,GAAG,MAAM,IAAI,CAACzB,SAAS,CAAC0B,OAAO,EAAE;IACnD,MAAMC,mBAAmB,GAAGd,UAAU,CAACe,MAAM,CAAEC,IAAI,IAAKJ,YAAY,CAACK,IAAI,CAAEC,EAAE,IAAKA,EAAE,CAACC,OAAO,CAACH,IAAI,CAACE,EAAE,CAAC,CAAC,CAAC;IACvG,MAAME,WAAW,GAAGN,mBAAmB,CAACO,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACJ,EAAE,CAAC,CAACH,MAAM,CAAEG,EAAE,IAAK,CAAC,IAAI,CAACK,WAAW,CAACC,QAAQ,CAACN,EAAE,CAACO,QAAQ,EAAE,CAAC,CAAC;IAClH,MAAMC,SAAS,GAAGN,WAAW,CAACC,GAAG,CAAEH,EAAE,IAAKA,EAAE,CAACS,OAAO,CAAC,CAACZ,MAAM,CAAEa,GAAG,IAAKA,GAAG,CAACC,QAAQ,EAAE,CAAC;IACrF,MAAMC,uBAAuB,GAAG,IAAI,CAACtC,QAAQ,CAACuC,KAAK,CAACC,aAAa;IACjE,MAAMF,uBAAuB,CAACG,UAAU,CAAC;MACvCvC,GAAG,EAAEwC,iBAAM,CAACC,aAAa,CAACT,SAAS,CAAC;MACpCU,0BAA0B,EAAE,IAAI,CAAC9C,uBAAuB;MACxD+C,sBAAsB,EAAE,IAAI,CAAC/C,uBAAuB;MACpDgD,qBAAqB,EAAE,KAAK;MAC5BC,qBAAqB,EAAE;IACzB,CAAC,CAAC;IACFnB,WAAW,CAACC,GAAG,CAAEH,EAAE,IAAK,IAAI,CAACK,WAAW,CAACiB,IAAI,CAACtB,EAAE,CAACO,QAAQ,EAAE,CAAC,CAAC;EAC/D;EAEA,MAAchB,mBAAmB,CAACD,SAAoB,EAAE;IACtD,MAAMiC,KAAK,GAAGjC,SAAS,CAACU,EAAE,CAACO,QAAQ,EAAE;IACrC,IAAI,IAAI,CAACiB,SAAS,CAAClB,QAAQ,CAACiB,KAAK,CAAC,EAAE,OAAO,EAAE;IAC7C,MAAME,cAAc,GAAG,MAAM,IAAI,CAACxD,SAAS,CAACyD,+BAA+B,CAACpC,SAAS,CAAC;IACtF,IAAImC,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAEE,KAAK,CAACjD,MAAM,EAAE;MAChC,MAAMkD,aAAa,GAAG,MAAM,IAAI,CAAC3D,SAAS,CAAC4D,KAAK,CAACvC,SAAS,CAACU,EAAE,CAAC;MAC9D,IAAI4B,aAAa,EAAE;QACjB,MAAME,oBAAoB,GAAG,MAAM,IAAI,CAACC,iCAAiC,CAACN,cAAc,EAAEnC,SAAS,CAAC;QACpG,IAAI,CAACkC,SAAS,CAACF,IAAI,CAACC,KAAK,CAAC;QAC1B,OAAOO,oBAAoB;MAC7B;MACA,IAAI,CAAC7C,KAAK,CAAC+C,KAAK,CAAC,CAACP,cAAc,CAAC,CAAC;MAClC,IAAI,CAACD,SAAS,CAACF,IAAI,CAACC,KAAK,CAAC;MAC1B,OAAO,EAAE;IACX;IAEA,MAAMU,IAAI,GAAG,MAAM,IAAI,CAAC9D,kBAAkB,CAAC+D,wBAAwB,CAAC5C,SAAS,CAAC;IAC9E,MAAM6C,UAAU,GAAGF,IAAI,CAAC9B,GAAG,CAAEiC,CAAC,IAAKA,CAAC,CAACC,WAAW,CAAC;IACjD,MAAMP,oBAAoB,GAAG,MAAM,IAAI,CAAC/C,kBAAkB,CAACoD,UAAU,EAAEZ,KAAK,CAAC;IAE7EU,IAAI,CAACK,OAAO,CAAE5B,GAAG,IAAK,IAAI,CAAC6B,UAAU,CAAChB,KAAK,EAAEb,GAAG,CAAC,CAAC;IAClD,IAAI,CAACc,SAAS,CAACF,IAAI,CAACC,KAAK,CAAC;IAE1B,OAAOO,oBAAoB;EAC7B;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAcC,iCAAiC,CAC7CN,cAA2B,EAC3BnC,SAAoB,EACE;IACtB,MAAM2C,IAAI,GAAG,MAAM,IAAI,CAAC9D,kBAAkB,CAAC+D,wBAAwB,CAAC5C,SAAS,CAAC;IAC9E,MAAM,CAACkD,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG,IAAAC,mBAAS,EAACT,IAAI,EAAGvB,GAAG,IAClEe,cAAc,CAACkB,OAAO,CAACjC,GAAG,CAAC2B,WAAW,CAAC9B,QAAQ,EAAE,CAAC,CACnD;IACD,MAAMqC,SAAS,GAAGJ,gBAAgB,CAACrC,GAAG,CAAEO,GAAG,IAAKe,cAAc,CAACoB,kBAAkB,CAAC,CAACnC,GAAG,CAAC2B,WAAW,CAAC9B,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChH,IAAI,CAACtB,KAAK,CAAC+C,KAAK,CAACY,SAAS,CAAC;IAE3B,MAAMT,UAAU,GAAGM,mBAAmB,CAACtC,GAAG,CAAEiC,CAAC,IAAKA,CAAC,CAACC,WAAW,CAAC;IAChE,MAAMd,KAAK,GAAGjC,SAAS,CAACU,EAAE,CAACO,QAAQ,EAAE;IACrC,MAAMuB,oBAAoB,GAAG,MAAM,IAAI,CAAC/C,kBAAkB,CAACoD,UAAU,EAAEZ,KAAK,CAAC;IAC7EU,IAAI,CAACK,OAAO,CAAE5B,GAAG,IAAK,IAAI,CAAC6B,UAAU,CAAChB,KAAK,EAAEb,GAAG,CAAC,CAAC;IAClD,OAAOoB,oBAAoB;EAC7B;EAEQS,UAAU,CAAChB,KAAa,EAAEb,GAAwB,EAAE;IAC1D,MAAMoC,KAAK,GAAGpC,GAAG,CAAC2B,WAAW;IAC7B,IAAI,CAAC,IAAI,CAACpD,KAAK,CAAC0D,OAAO,CAACG,KAAK,CAACvC,QAAQ,EAAE,CAAC,EAAE;MACzC,IAAI,IAAI,CAACnC,uBAAuB,EAAE;QAChC,MAAM,IAAIN,KAAK,CAAE,sCAAqCgF,KAAK,CAACvC,QAAQ,EAAG,EAAC,CAAC;MAC3E;MACA,IAAI,CAACrC,MAAM,CAAC6E,IAAI,CAAE,oBAAmBD,KAAK,CAACvC,QAAQ,EAAG,EAAC,CAAC;MACxD;IACF;IACA,IAAI,CAACtB,KAAK,CAAC+D,OAAO,CAAC,KAAIC,aAAI,EAAC1B,KAAK,EAAEuB,KAAK,CAACvC,QAAQ,EAAE,EAAE7C,kBAAkB,CAACgD,GAAG,CAAC,CAAC,CAAC;EAChF;EAEA,MAAc3B,kBAAkB,CAACmE,aAA4B,EAAEC,cAAuB,EAAwB;IAC5G,MAAMrE,UAAU,GAAG,MAAM,IAAAO,qBAAS,EAAC6D,aAAa,EAAE,MAAOpD,IAAI,IAAK;MAChE,MAAMyB,KAAK,GAAGzB,IAAI,CAACS,QAAQ,EAAE;MAC7B,MAAM6C,SAAS,GAAG,IAAI,CAACC,gBAAgB,CAAC9B,KAAK,CAAC;MAC9C,IAAI6B,SAAS,EAAE,OAAOA,SAAS;MAC/B,IAAI;QACF,MAAM9D,SAAS,GAAG,MAAM,IAAI,CAACrB,SAAS,CAACqF,GAAG,CAACxD,IAAI,CAAC;QAChD,IAAI,CAACuD,gBAAgB,CAAC9B,KAAK,CAAC,GAAGjC,SAAS;QACxC,IAAI,CAACL,KAAK,CAACsE,OAAO,CAAC,KAAIC,aAAI,EAACjC,KAAK,EAAEjC,SAAS,CAACU,EAAE,CAAC,CAAC;QACjD,OAAOV,SAAS;MAClB,CAAC,CAAC,OAAOmE,GAAQ,EAAE;QACjB,IACEA,GAAG,YAAYC,+BAAiB,IAChCD,GAAG,YAAYE,0BAAwB,IACvCF,GAAG,YAAYG,2BAAa,EAC5B;UACA,IAAIT,cAAc,IAAI,CAAC,IAAI,CAAC/E,uBAAuB,EAAE;YACnD,IAAI,CAACF,MAAM,CAAC6E,IAAI,CACb,aAAYxB,KAAM,mBAAkB4B,cAAe,uCAAsC,CAC3F;YACD,OAAO,IAAI;UACb;UACA,MAAM,KAAIU,oBAAQ,EACf,qBAAoBtC,KAAM,wDACzB4B,cAAc,IAAI,QACnB,iDAAgD,CAClD;QACH;QACA,IAAIA,cAAc,EAAE,IAAI,CAACjF,MAAM,CAAC4F,KAAK,CAAE,kCAAiCX,cAAe,EAAC,CAAC;QACzF,MAAMM,GAAG;MACX;IACF,CAAC,CAAC;IACF,OAAO,IAAAM,kBAAO,EAACjF,UAAU,CAAC;EAC5B;AACF;AAAC"}
|
|
1
|
+
{"version":3,"names":["lifecycleToDepType","compDep","isExtension","lifecycle","Error","GraphIdsFromFsBuilder","constructor","workspace","logger","dependencyResolver","shouldThrowOnMissingDep","Graph","consumer","buildGraph","ids","debug","length","start","Date","now","components","loadManyComponents","processManyComponents","graph","depth","importObjects","allDependencies","mapSeries","component","processOneComponent","allDependenciesFlattened","flatten","workspaceIds","listIds","compOnWorkspaceOnly","filter","comp","find","id","isEqual","notImported","map","c","importedIds","includes","toString","withScope","_legacy","dep","hasScope","scopeComponentsImporter","scope","scopeImporter","importMany","BitIds","uniqFromArray","throwForDependencyNotFound","throwForSeederNotFound","reFetchUnBuiltVersion","preferDependencyGraph","push","idStr","completed","graphFromScope","getSavedGraphOfComponentIfExist","edges","isOnWorkspace","hasId","allDependenciesComps","processCompFromWorkspaceWithGraph","merge","deps","getComponentDependencies","allDepsIds","d","componentId","forEach","addDepEdge","depsInScopeGraph","depsNotInScopeGraph","partition","hasNode","depsInScopeGraphIds","depsInScopeGraphIdsNotCompleted","subGraphs","successorsSubgraph","depId","warn","setEdge","Edge","componentsIds","dependenciesOf","fromCache","loadedComponents","get","setNode","Node","err","ComponentNotFound","ComponentNotFoundInScope","ScopeNotFound","BitError","error","compact"],"sources":["build-graph-ids-from-fs.ts"],"sourcesContent":["import mapSeries from 'p-map-series';\nimport { Graph, Node, Edge } from '@teambit/graph.cleargraph';\nimport { flatten, partition } from 'lodash';\nimport { Consumer } from '@teambit/legacy/dist/consumer';\nimport { Component, ComponentID } from '@teambit/component';\nimport BitIds from '@teambit/legacy/dist/bit-id/bit-ids';\nimport { ComponentDependency, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { CompIdGraph, DepEdgeType } from '@teambit/graph';\nimport { ComponentNotFound, ScopeNotFound } from '@teambit/legacy/dist/scope/exceptions';\nimport { ComponentNotFound as ComponentNotFoundInScope } from '@teambit/scope';\nimport compact from 'lodash.compact';\nimport { Logger } from '@teambit/logger';\nimport { BitError } from '@teambit/bit-error';\nimport { Workspace } from './workspace';\n\nexport function lifecycleToDepType(compDep: ComponentDependency): DepEdgeType {\n if (compDep.isExtension) return 'ext';\n switch (compDep.lifecycle) {\n case 'dev':\n return 'dev';\n case 'runtime':\n return 'prod';\n default:\n throw new Error(`lifecycle ${compDep.lifecycle} is not support`);\n }\n}\n\nexport class GraphIdsFromFsBuilder {\n private graph = new Graph<ComponentID, DepEdgeType>();\n private completed: string[] = [];\n private depth = 1;\n private consumer: Consumer;\n private loadedComponents: { [idStr: string]: Component } = {};\n private importedIds: string[] = [];\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private dependencyResolver: DependencyResolverMain,\n private shouldThrowOnMissingDep = true\n ) {\n this.consumer = this.workspace.consumer;\n }\n\n /**\n * create a graph with all dependencies and flattened dependencies of the given components.\n * the nodes are component-ids and the edges has a label of the dependency type.\n * to get some info about this the graph build take a look into build-graph-from-fs.buildGraph() docs.\n */\n async buildGraph(ids: ComponentID[]): Promise<Graph<ComponentID, DepEdgeType>> {\n this.logger.debug(`GraphIdsFromFsBuilder, buildGraph with ${ids.length} seeders`);\n const start = Date.now();\n const components = await this.loadManyComponents(ids);\n await this.processManyComponents(components);\n this.logger.debug(\n `GraphIdsFromFsBuilder, buildGraph with ${ids.length} seeders completed (${(Date.now() - start) / 1000} sec)`\n );\n return this.graph;\n }\n\n private async processManyComponents(components: Component[]) {\n this.logger.debug(\n `GraphIdsFromFsBuilder.processManyComponents depth ${this.depth}, ${components.length} components`\n );\n this.depth += 1;\n await this.importObjects(components);\n const allDependencies = await mapSeries(components, (component) => this.processOneComponent(component));\n const allDependenciesFlattened = flatten(allDependencies);\n if (allDependenciesFlattened.length) await this.processManyComponents(allDependenciesFlattened);\n }\n\n /**\n * only for components from the workspace that can be modified to add/remove dependencies, we need to make sure that\n * all their dependencies are imported.\n * once a component from scope is imported, we know that either we have its dependency graph or all flattened deps\n */\n private async importObjects(components: Component[]) {\n const workspaceIds = await this.workspace.listIds();\n const compOnWorkspaceOnly = components.filter((comp) => workspaceIds.find((id) => id.isEqual(comp.id)));\n const notImported = compOnWorkspaceOnly.map((c) => c.id).filter((id) => !this.importedIds.includes(id.toString()));\n const withScope = notImported.map((id) => id._legacy).filter((dep) => dep.hasScope());\n const scopeComponentsImporter = this.consumer.scope.scopeImporter;\n await scopeComponentsImporter.importMany({\n ids: BitIds.uniqFromArray(withScope),\n throwForDependencyNotFound: this.shouldThrowOnMissingDep,\n throwForSeederNotFound: this.shouldThrowOnMissingDep,\n reFetchUnBuiltVersion: false,\n preferDependencyGraph: true,\n });\n notImported.map((id) => this.importedIds.push(id.toString()));\n }\n\n private async processOneComponent(component: Component) {\n const idStr = component.id.toString();\n if (this.completed.includes(idStr)) return [];\n const graphFromScope = await this.workspace.getSavedGraphOfComponentIfExist(component);\n if (graphFromScope?.edges.length) {\n const isOnWorkspace = await this.workspace.hasId(component.id);\n if (isOnWorkspace) {\n const allDependenciesComps = await this.processCompFromWorkspaceWithGraph(graphFromScope, component);\n this.completed.push(idStr);\n return allDependenciesComps;\n }\n this.graph.merge([graphFromScope]);\n this.completed.push(idStr);\n return [];\n }\n\n const deps = await this.dependencyResolver.getComponentDependencies(component);\n const allDepsIds = deps.map((d) => d.componentId);\n const allDependenciesComps = await this.loadManyComponents(allDepsIds, idStr);\n\n deps.forEach((dep) => this.addDepEdge(idStr, dep));\n this.completed.push(idStr);\n\n return allDependenciesComps;\n }\n\n /**\n * this is tricky.\n * the component is in the workspace so it can be modified. dependencies can be added/removed/updated/downgraded.\n * we have the graph-dependencies from the last snap, so we prefer to use it whenever possible for performance reasons.\n * if we can't use it, we have to recursively load dependencies components and get the data from there.\n * to maximize the performance, we iterate the direct dependencies, if we find a dep with the same id in the graph,\n * and that id is not in the workspace then ask the graph for all its successors. otherwise, if it's not there, or\n * it's there but it's also in the workspace (which therefore can be modified), we recursively load the dep components\n * and get its dependencies.\n */\n private async processCompFromWorkspaceWithGraph(\n graphFromScope: CompIdGraph,\n component: Component\n ): Promise<Component[]> {\n const deps = await this.dependencyResolver.getComponentDependencies(component);\n const workspaceIds = await this.workspace.listIds();\n const [depsInScopeGraph, depsNotInScopeGraph] = partition(\n deps,\n (dep) =>\n graphFromScope.hasNode(dep.componentId.toString()) && !workspaceIds.find((id) => id.isEqual(dep.componentId))\n );\n\n const depsInScopeGraphIds = depsInScopeGraph.map((dep) => dep.componentId.toString());\n const depsInScopeGraphIdsNotCompleted = depsInScopeGraphIds.filter((id) => !this.completed.includes(id));\n if (depsInScopeGraphIdsNotCompleted.length) {\n const subGraphs = graphFromScope.successorsSubgraph(depsInScopeGraphIdsNotCompleted);\n this.graph.merge([subGraphs]);\n this.completed.push(...depsInScopeGraphIdsNotCompleted);\n }\n\n const allDepsIds = depsNotInScopeGraph.map((d) => d.componentId);\n const idStr = component.id.toString();\n const allDependenciesComps = await this.loadManyComponents(allDepsIds, idStr);\n deps.forEach((dep) => this.addDepEdge(idStr, dep));\n return allDependenciesComps;\n }\n\n private addDepEdge(idStr: string, dep: ComponentDependency) {\n const depId = dep.componentId;\n if (!this.graph.hasNode(depId.toString())) {\n if (this.shouldThrowOnMissingDep) {\n throw new Error(`buildOneComponent: missing node of ${depId.toString()}`);\n }\n this.logger.warn(`ignoring missing ${depId.toString()}`);\n return;\n }\n this.graph.setEdge(new Edge(idStr, depId.toString(), lifecycleToDepType(dep)));\n }\n\n private async loadManyComponents(componentsIds: ComponentID[], dependenciesOf?: string): Promise<Component[]> {\n const components = await mapSeries(componentsIds, async (comp) => {\n const idStr = comp.toString();\n const fromCache = this.loadedComponents[idStr];\n if (fromCache) return fromCache;\n try {\n const component = await this.workspace.get(comp);\n this.loadedComponents[idStr] = component;\n this.graph.setNode(new Node(idStr, component.id));\n return component;\n } catch (err: any) {\n if (\n err instanceof ComponentNotFound ||\n err instanceof ComponentNotFoundInScope ||\n err instanceof ScopeNotFound\n ) {\n if (dependenciesOf && !this.shouldThrowOnMissingDep) {\n this.logger.warn(\n `component ${idStr}, dependency of ${dependenciesOf} was not found. continuing without it`\n );\n return null;\n }\n throw new BitError(\n `error: component \"${idStr}\" was not found.\\nthis component is a dependency of \"${\n dependenciesOf || '<none>'\n }\" and is needed as part of the graph generation`\n );\n }\n if (dependenciesOf) this.logger.error(`failed loading dependencies of ${dependenciesOf}`);\n throw err;\n }\n });\n return compact(components);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.955/dist/workspace.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.workspace_workspace@0.0.955/dist/workspace.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
package/dist/watch/watcher.js
CHANGED
|
@@ -302,7 +302,7 @@ class Watcher {
|
|
|
302
302
|
ignoreVersion: true
|
|
303
303
|
}));
|
|
304
304
|
if (!updatedComponentId) {
|
|
305
|
-
|
|
305
|
+
_logger().default.debug(`triggerCompChanges, the component ${componentId.toString()} was probably removed from .bitmap`);
|
|
306
306
|
return [];
|
|
307
307
|
}
|
|
308
308
|
}
|
|
@@ -315,13 +315,10 @@ class Watcher {
|
|
|
315
315
|
const compFiles = files.filter(filePath => {
|
|
316
316
|
const relativeFile = this.getRelativePathLinux(filePath);
|
|
317
317
|
const isCompFile = Boolean(componentMap.getFilesRelativeToConsumer().find(p => p === relativeFile));
|
|
318
|
-
if (!isCompFile) {
|
|
319
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
320
|
-
_logger().default.debug(`file ${filePath} is inside the component ${updatedComponentId.toString()} but configured to be ignored`);
|
|
321
|
-
}
|
|
322
318
|
return isCompFile;
|
|
323
319
|
});
|
|
324
320
|
if (!compFiles.length) {
|
|
321
|
+
_logger().default.debug(`the following files are part of the component ${componentId.toStringWithoutVersion()} but configured to be ignored:\n${files.join('\n')}'`);
|
|
325
322
|
return [];
|
|
326
323
|
}
|
|
327
324
|
const buildResults = await this.executeWatchOperationsOnComponent(updatedComponentId, compFiles, true, initiator);
|
|
@@ -369,16 +366,20 @@ class Watcher {
|
|
|
369
366
|
_logger().default.debug(`running OnComponentAdd hook for ${_chalk().default.bold(idStr)}`);
|
|
370
367
|
this.pubsub.pub(_().WorkspaceAspect.id, this.creatOnComponentAddEvent(idStr, 'OnComponentAdd'));
|
|
371
368
|
}
|
|
372
|
-
|
|
373
|
-
try
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
}
|
|
369
|
+
|
|
370
|
+
// the try/catch is probably not needed here because this gets called by `handleChange()` which already has a try/catch
|
|
371
|
+
// I left it here commented out for now just in case, but it should be removed as soon as we're more confident
|
|
372
|
+
|
|
373
|
+
// let buildResults: OnComponentEventResult[];
|
|
374
|
+
// try {
|
|
375
|
+
const buildResults = isChange ? await this.workspace.triggerOnComponentChange(componentId, files, initiator) : await this.workspace.triggerOnComponentAdd(componentId);
|
|
376
|
+
// } catch (err: any) {
|
|
377
|
+
// // do not exit the watch process on errors, just print them
|
|
378
|
+
// const msg = `found an issue during onComponentChange or onComponentAdd hooks for ${idStr}`;
|
|
379
|
+
// logger.error(msg, err);
|
|
380
|
+
// logger.console(`\n${msg}: ${err.message || err}`);
|
|
381
|
+
// return [];
|
|
382
|
+
// }
|
|
382
383
|
return buildResults;
|
|
383
384
|
}
|
|
384
385
|
creatOnComponentRemovedEvent(idStr) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEBOUNCE_WAIT_MS","Watcher","constructor","workspace","pubsub","trackDirs","verbose","multipleWatchers","WatchQueue","consumer","watchAll","opts","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","files","results","debounced","failureMsg","handleChange","initiator","duration","onChange","onAdd","p","onUnlink","err","onError","endsWith","BIT_MAP","bitMapChangesInProgress","buildResults","watchQueue","add","handleBitmapChanges","loader","stop","onIdle","componentId","getComponentIdByPath","logger","debug","compIdStr","toString","changedFilesPerComponent","push","sleep","triggerCompChanges","length","undefined","join","msg","error","console","message","ms","setTimeout","updatedComponentId","hasId","ids","listIds","find","id","isEqual","ignoreVersion","clearComponentCache","component","get","componentMap","state","_consumer","Error","compFiles","filter","relativeFile","getRelativePathLinux","isCompFile","Boolean","getFilesRelativeToConsumer","executeWatchOperationsOnComponent","previewsTrackDirs","_reloadConsumer","setTrackDirs","newDirs","difference","keys","removedDirs","addResults","mapSeries","dir","flat","triggerOnMultipleComponentsAdd","unwatch","executeWatchOperationsOnRemove","chalk","bold","pub","WorkspaceAspect","creatOnComponentRemovedEvent","triggerOnComponentRemove","isChange","isComponentWatchedExternally","idStr","creatOnComponentChangeEvent","creatOnComponentAddEvent","triggerOnComponentChange","triggerOnComponentAdd","OnComponentRemovedEvent","now","hook","OnComponentChangeEvent","OnComponentAddEvent","watcherData","m","_legacy","compilerId","trackDir","findTrackDirByFilePathRecursively","pathNormalizeToLinux","getPathRelativeToConsumer","parentDir","dirname","chokidar","watch","ignoreInitial","ignored","path","includes","sep","persistent","useFsEvents","componentsFromBitMap","bitMap","getAllComponents","all","map","bitId","rootDir","getRootDir","resolveComponentId","paths","pathsAbsolute","toAbsolutePath"],"sources":["watcher.ts"],"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 } 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';\nimport { CheckTypes } from './check-types';\nimport { WatchQueue } from './watch-queue';\n\nexport type WatcherProcessData = { watchProcess: ChildProcess; compilerId: BitId; componentIds: BitId[] };\n\nexport type EventMessages = {\n onAll: Function;\n onStart: Function;\n onReady: Function;\n onChange: Function;\n onAdd: Function;\n onUnlink: Function;\n onError: Function;\n};\n\nexport type WatchOptions = {\n msgs?: EventMessages;\n initiator?: CompilationInitiator;\n verbose?: boolean; // print watch events to the console. (also ts-server events if spawnTSServer is true)\n spawnTSServer?: boolean; // needed for check types and extract API/docs.\n checkTypes?: CheckTypes; // if enabled, the spawnTSServer becomes true.\n preCompile?: boolean; // whether compile all components before start watching\n};\n\nconst DEBOUNCE_WAIT_MS = 100;\n\nexport class Watcher {\n private fsWatcher: FSWatcher;\n private changedFilesPerComponent: { [componentId: string]: string[] } = {};\n private watchQueue = new WatchQueue();\n private bitMapChangesInProgress = false;\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 get consumer(): Consumer {\n return this.workspace.consumer;\n }\n\n async watchAll(opts: 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 // @ts-ignore\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 { files, results, debounced, failureMsg } = await this.handleChange(filePath, opts?.initiator);\n if (debounced) {\n return;\n }\n const duration = new Date().getTime() - startTime;\n msgs?.onChange(files, results, this.verbose, duration, failureMsg);\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 { files, results, debounced, failureMsg } = await this.handleChange(filePath, opts?.initiator);\n if (debounced) {\n return;\n }\n const duration = new Date().getTime() - startTime;\n msgs?.onAdd(files, results, this.verbose, duration, failureMsg);\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 /**\n * *** DEBOUNCING ***\n * some actions trigger multiple files changes at (almost) the same time. e.g. \"git pull\".\n * this causes some performance and instability issues. a debouncing mechanism was implemented to help with this.\n * the way how it works is that the first file of the same component starts the execution with a delay (e.g. 200ms).\n * if, in the meanwhile, another file of the same component was changed, it won't start a new execution, instead,\n * it'll only add the file to `this.changedFilesPerComponent` prop.\n * once the execution starts, it'll delete this component-id from the `this.changedFilesPerComponent` array,\n * indicating the next file-change to start a new execution.\n *\n * implementation wise, `lodash.debounce` doesn't help here, because:\n * A) it doesn't return the results, unless \"leading\" option is true. here, it must be false, otherwise, it'll start\n * the execution immediately.\n * B) it debounces the method regardless the param passes to it. so it'll disregard the component-id and will delay\n * other components undesirably.\n *\n * *** QUEUE ***\n * the debouncing helps to not execute the same component multiple times concurrently. however, multiple components\n * and .bitmap changes execution can still be processed concurrently.\n * the following example explains why this is an issue.\n * compA is changed in the .bitmap file from version 0.0.1 to 0.0.2. its files were changed as well.\n * all these changes get pulled at the same time by \"git pull\", as a result, the execution of compA and the .bitmap\n * happen at the same time.\n * during the execution of compA, the component id is parsed as compA@0.0.1, later, it asks for the Workspace for this\n * id. while the workspace is looking for this id, the .bitmap execution reloaded the consumer and changed all versions.\n * after this change, the workspace doesn't have this id anymore, which will trigger an error.\n * to ensure this won't happen, we keep a flag to indicate whether the .bitmap execution is running, and if so, all\n * other executions are paused until the queue is empty (this is done by awaiting for queue.onIdle).\n * once the queue is empty, we know the .bitmap process was done and the workspace has all new ids.\n * in the example above, at this stage, the id will be resolved to compA@0.0.2.\n * one more thing, the queue is configured to have concurrency of 1. to make sure two components are not processed at\n * the same time. (the same way is done when loading all components from the filesystem/scope).\n * this way we can also ensure that if compA was started before the .bitmap execution, it will complete before the\n * .bitmap execution starts.\n */\n private async handleChange(\n filePath: string,\n initiator?: CompilationInitiator\n ): Promise<{\n results: OnComponentEventResult[];\n files?: string[];\n failureMsg?: string;\n debounced?: boolean;\n }> {\n try {\n if (filePath.endsWith(BIT_MAP)) {\n this.bitMapChangesInProgress = true;\n const buildResults = await this.watchQueue.add(() => this.handleBitmapChanges());\n this.bitMapChangesInProgress = false;\n loader.stop();\n return { results: buildResults, files: [filePath] };\n }\n if (this.bitMapChangesInProgress) {\n await this.watchQueue.onIdle();\n }\n const componentId = this.getComponentIdByPath(filePath);\n if (!componentId) {\n const failureMsg = `file ${filePath} is not part of any component, ignoring it`;\n logger.debug(failureMsg);\n loader.stop();\n return { results: [], files: [filePath], failureMsg };\n }\n const compIdStr = componentId.toString();\n if (this.changedFilesPerComponent[compIdStr]) {\n this.changedFilesPerComponent[compIdStr].push(filePath);\n loader.stop();\n return { results: [], debounced: true };\n }\n this.changedFilesPerComponent[compIdStr] = [filePath];\n await this.sleep(DEBOUNCE_WAIT_MS);\n const files = this.changedFilesPerComponent[compIdStr];\n delete this.changedFilesPerComponent[compIdStr];\n\n const buildResults = await this.watchQueue.add(() => this.triggerCompChanges(componentId, files, initiator));\n const failureMsg = buildResults.length\n ? undefined\n : `files ${files.join(', ')} are inside the component ${compIdStr} but configured to be ignored`;\n loader.stop();\n return { results: buildResults, files, failureMsg };\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 loader.stop();\n return { results: [], files: [filePath], failureMsg: err.message };\n }\n }\n\n private async sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\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 triggerCompChanges(\n componentId: ComponentID,\n files: string[],\n initiator?: CompilationInitiator\n ): Promise<OnComponentEventResult[]> {\n let updatedComponentId: ComponentID | undefined = componentId;\n if (!(await this.workspace.hasId(componentId))) {\n // bitmap has changed meanwhile, which triggered `handleBitmapChanges`, which re-loaded consumer and updated versions\n // so the original componentId might not be in the workspace now, and we need to find the updated one\n const ids = await this.workspace.listIds();\n updatedComponentId = ids.find((id) => id.isEqual(componentId, { ignoreVersion: true }));\n if (!updatedComponentId) {\n // the component was removed\n return [];\n }\n }\n this.workspace.clearComponentCache(updatedComponentId);\n const component = await this.workspace.get(updatedComponentId);\n const componentMap: ComponentMap = component.state._consumer.componentMap;\n if (!componentMap) {\n throw new Error(\n `unable to find componentMap for ${updatedComponentId.toString()}, make sure this component is in .bitmap`\n );\n }\n const compFiles = files.filter((filePath) => {\n const relativeFile = this.getRelativePathLinux(filePath);\n const isCompFile = Boolean(componentMap.getFilesRelativeToConsumer().find((p) => p === relativeFile));\n if (!isCompFile) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n logger.debug(\n `file ${filePath} is inside the component ${updatedComponentId!.toString()} but configured to be ignored`\n );\n }\n return isCompFile;\n });\n if (!compFiles.length) {\n return [];\n }\n const buildResults = await this.executeWatchOperationsOnComponent(updatedComponentId, compFiles, true, initiator);\n return buildResults;\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 await this.workspace.triggerOnMultipleComponentsAdd();\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 return buildResults;\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 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 private getComponentIdByPath(filePath: string): ComponentID | null {\n const relativeFile = this.getRelativePathLinux(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 return this.trackDirs[trackDir];\n }\n\n private getRelativePathLinux(filePath: string) {\n return pathNormalizeToLinux(this.consumer.getPathRelativeToConsumer(filePath));\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 await Promise.all(\n componentsFromBitMap.map(async (componentMap) => {\n const bitId = componentMap.id;\n const rootDir = componentMap.getRootDir();\n if (!rootDir) throw new Error(`${bitId.toString()} has no rootDir, which is invalid in Harmony`);\n const componentId = await this.workspace.resolveComponentId(bitId);\n this.trackDirs[rootDir] = 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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["DEBOUNCE_WAIT_MS","Watcher","constructor","workspace","pubsub","trackDirs","verbose","multipleWatchers","WatchQueue","consumer","watchAll","opts","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","files","results","debounced","failureMsg","handleChange","initiator","duration","onChange","onAdd","p","onUnlink","err","onError","endsWith","BIT_MAP","bitMapChangesInProgress","buildResults","watchQueue","add","handleBitmapChanges","loader","stop","onIdle","componentId","getComponentIdByPath","logger","debug","compIdStr","toString","changedFilesPerComponent","push","sleep","triggerCompChanges","length","undefined","join","msg","error","console","message","ms","setTimeout","updatedComponentId","hasId","ids","listIds","find","id","isEqual","ignoreVersion","clearComponentCache","component","get","componentMap","state","_consumer","Error","compFiles","filter","relativeFile","getRelativePathLinux","isCompFile","Boolean","getFilesRelativeToConsumer","toStringWithoutVersion","executeWatchOperationsOnComponent","previewsTrackDirs","_reloadConsumer","setTrackDirs","newDirs","difference","keys","removedDirs","addResults","mapSeries","dir","flat","triggerOnMultipleComponentsAdd","unwatch","executeWatchOperationsOnRemove","chalk","bold","pub","WorkspaceAspect","creatOnComponentRemovedEvent","triggerOnComponentRemove","isChange","isComponentWatchedExternally","idStr","creatOnComponentChangeEvent","creatOnComponentAddEvent","triggerOnComponentChange","triggerOnComponentAdd","OnComponentRemovedEvent","now","hook","OnComponentChangeEvent","OnComponentAddEvent","watcherData","m","_legacy","compilerId","trackDir","findTrackDirByFilePathRecursively","pathNormalizeToLinux","getPathRelativeToConsumer","parentDir","dirname","chokidar","watch","ignoreInitial","ignored","path","includes","sep","persistent","useFsEvents","componentsFromBitMap","bitMap","getAllComponents","all","map","bitId","rootDir","getRootDir","resolveComponentId","paths","pathsAbsolute","toAbsolutePath"],"sources":["watcher.ts"],"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 } 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';\nimport { CheckTypes } from './check-types';\nimport { WatchQueue } from './watch-queue';\n\nexport type WatcherProcessData = { watchProcess: ChildProcess; compilerId: BitId; componentIds: BitId[] };\n\nexport type EventMessages = {\n onAll: Function;\n onStart: Function;\n onReady: Function;\n onChange: Function;\n onAdd: Function;\n onUnlink: Function;\n onError: Function;\n};\n\nexport type WatchOptions = {\n msgs?: EventMessages;\n initiator?: CompilationInitiator;\n verbose?: boolean; // print watch events to the console. (also ts-server events if spawnTSServer is true)\n spawnTSServer?: boolean; // needed for check types and extract API/docs.\n checkTypes?: CheckTypes; // if enabled, the spawnTSServer becomes true.\n preCompile?: boolean; // whether compile all components before start watching\n};\n\nconst DEBOUNCE_WAIT_MS = 100;\n\nexport class Watcher {\n private fsWatcher: FSWatcher;\n private changedFilesPerComponent: { [componentId: string]: string[] } = {};\n private watchQueue = new WatchQueue();\n private bitMapChangesInProgress = false;\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 get consumer(): Consumer {\n return this.workspace.consumer;\n }\n\n async watchAll(opts: 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 // @ts-ignore\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 { files, results, debounced, failureMsg } = await this.handleChange(filePath, opts?.initiator);\n if (debounced) {\n return;\n }\n const duration = new Date().getTime() - startTime;\n msgs?.onChange(files, results, this.verbose, duration, failureMsg);\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 { files, results, debounced, failureMsg } = await this.handleChange(filePath, opts?.initiator);\n if (debounced) {\n return;\n }\n const duration = new Date().getTime() - startTime;\n msgs?.onAdd(files, results, this.verbose, duration, failureMsg);\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 /**\n * *** DEBOUNCING ***\n * some actions trigger multiple files changes at (almost) the same time. e.g. \"git pull\".\n * this causes some performance and instability issues. a debouncing mechanism was implemented to help with this.\n * the way how it works is that the first file of the same component starts the execution with a delay (e.g. 200ms).\n * if, in the meanwhile, another file of the same component was changed, it won't start a new execution, instead,\n * it'll only add the file to `this.changedFilesPerComponent` prop.\n * once the execution starts, it'll delete this component-id from the `this.changedFilesPerComponent` array,\n * indicating the next file-change to start a new execution.\n *\n * implementation wise, `lodash.debounce` doesn't help here, because:\n * A) it doesn't return the results, unless \"leading\" option is true. here, it must be false, otherwise, it'll start\n * the execution immediately.\n * B) it debounces the method regardless the param passes to it. so it'll disregard the component-id and will delay\n * other components undesirably.\n *\n * *** QUEUE ***\n * the debouncing helps to not execute the same component multiple times concurrently. however, multiple components\n * and .bitmap changes execution can still be processed concurrently.\n * the following example explains why this is an issue.\n * compA is changed in the .bitmap file from version 0.0.1 to 0.0.2. its files were changed as well.\n * all these changes get pulled at the same time by \"git pull\", as a result, the execution of compA and the .bitmap\n * happen at the same time.\n * during the execution of compA, the component id is parsed as compA@0.0.1, later, it asks for the Workspace for this\n * id. while the workspace is looking for this id, the .bitmap execution reloaded the consumer and changed all versions.\n * after this change, the workspace doesn't have this id anymore, which will trigger an error.\n * to ensure this won't happen, we keep a flag to indicate whether the .bitmap execution is running, and if so, all\n * other executions are paused until the queue is empty (this is done by awaiting for queue.onIdle).\n * once the queue is empty, we know the .bitmap process was done and the workspace has all new ids.\n * in the example above, at this stage, the id will be resolved to compA@0.0.2.\n * one more thing, the queue is configured to have concurrency of 1. to make sure two components are not processed at\n * the same time. (the same way is done when loading all components from the filesystem/scope).\n * this way we can also ensure that if compA was started before the .bitmap execution, it will complete before the\n * .bitmap execution starts.\n */\n private async handleChange(\n filePath: string,\n initiator?: CompilationInitiator\n ): Promise<{\n results: OnComponentEventResult[];\n files?: string[];\n failureMsg?: string;\n debounced?: boolean;\n }> {\n try {\n if (filePath.endsWith(BIT_MAP)) {\n this.bitMapChangesInProgress = true;\n const buildResults = await this.watchQueue.add(() => this.handleBitmapChanges());\n this.bitMapChangesInProgress = false;\n loader.stop();\n return { results: buildResults, files: [filePath] };\n }\n if (this.bitMapChangesInProgress) {\n await this.watchQueue.onIdle();\n }\n const componentId = this.getComponentIdByPath(filePath);\n if (!componentId) {\n const failureMsg = `file ${filePath} is not part of any component, ignoring it`;\n logger.debug(failureMsg);\n loader.stop();\n return { results: [], files: [filePath], failureMsg };\n }\n const compIdStr = componentId.toString();\n if (this.changedFilesPerComponent[compIdStr]) {\n this.changedFilesPerComponent[compIdStr].push(filePath);\n loader.stop();\n return { results: [], debounced: true };\n }\n this.changedFilesPerComponent[compIdStr] = [filePath];\n await this.sleep(DEBOUNCE_WAIT_MS);\n const files = this.changedFilesPerComponent[compIdStr];\n delete this.changedFilesPerComponent[compIdStr];\n\n const buildResults = await this.watchQueue.add(() => this.triggerCompChanges(componentId, files, initiator));\n const failureMsg = buildResults.length\n ? undefined\n : `files ${files.join(', ')} are inside the component ${compIdStr} but configured to be ignored`;\n loader.stop();\n return { results: buildResults, files, failureMsg };\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 loader.stop();\n return { results: [], files: [filePath], failureMsg: err.message };\n }\n }\n\n private async sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\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 triggerCompChanges(\n componentId: ComponentID,\n files: string[],\n initiator?: CompilationInitiator\n ): Promise<OnComponentEventResult[]> {\n let updatedComponentId: ComponentID | undefined = componentId;\n if (!(await this.workspace.hasId(componentId))) {\n // bitmap has changed meanwhile, which triggered `handleBitmapChanges`, which re-loaded consumer and updated versions\n // so the original componentId might not be in the workspace now, and we need to find the updated one\n const ids = await this.workspace.listIds();\n updatedComponentId = ids.find((id) => id.isEqual(componentId, { ignoreVersion: true }));\n if (!updatedComponentId) {\n logger.debug(`triggerCompChanges, the component ${componentId.toString()} was probably removed from .bitmap`);\n return [];\n }\n }\n this.workspace.clearComponentCache(updatedComponentId);\n const component = await this.workspace.get(updatedComponentId);\n const componentMap: ComponentMap = component.state._consumer.componentMap;\n if (!componentMap) {\n throw new Error(\n `unable to find componentMap for ${updatedComponentId.toString()}, make sure this component is in .bitmap`\n );\n }\n const compFiles = files.filter((filePath) => {\n const relativeFile = this.getRelativePathLinux(filePath);\n const isCompFile = Boolean(componentMap.getFilesRelativeToConsumer().find((p) => p === relativeFile));\n return isCompFile;\n });\n if (!compFiles.length) {\n logger.debug(\n `the following files are part of the component ${componentId.toStringWithoutVersion()} but configured to be ignored:\\n${files.join(\n '\\n'\n )}'`\n );\n return [];\n }\n const buildResults = await this.executeWatchOperationsOnComponent(updatedComponentId, compFiles, true, initiator);\n return buildResults;\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 await this.workspace.triggerOnMultipleComponentsAdd();\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 // the try/catch is probably not needed here because this gets called by `handleChange()` which already has a try/catch\n // I left it here commented out for now just in case, but it should be removed as soon as we're more confident\n\n // let buildResults: OnComponentEventResult[];\n // try {\n const 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 for ${idStr}`;\n // logger.error(msg, err);\n // logger.console(`\\n${msg}: ${err.message || err}`);\n // return [];\n // }\n return buildResults;\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 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 private getComponentIdByPath(filePath: string): ComponentID | null {\n const relativeFile = this.getRelativePathLinux(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 return this.trackDirs[trackDir];\n }\n\n private getRelativePathLinux(filePath: string) {\n return pathNormalizeToLinux(this.consumer.getPathRelativeToConsumer(filePath));\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 await Promise.all(\n componentsFromBitMap.map(async (componentMap) => {\n const bitId = componentMap.id;\n const rootDir = componentMap.getRootDir();\n if (!rootDir) throw new Error(`${bitId.toString()} has no rootDir, which is invalid in Harmony`);\n const componentId = await this.workspace.resolveComponentId(bitId);\n this.trackDirs[rootDir] = 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"],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/workspace",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.955",
|
|
4
4
|
"homepage": "https://bit.dev/teambit/workspace/workspace",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.workspace",
|
|
8
8
|
"name": "workspace",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.955"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"lodash": "4.17.21",
|
|
@@ -35,48 +35,48 @@
|
|
|
35
35
|
"@teambit/base-ui.surfaces.split-pane.split-pane": "1.0.0",
|
|
36
36
|
"@teambit/bit-error": "0.0.402",
|
|
37
37
|
"@teambit/component-id": "0.0.425",
|
|
38
|
-
"@teambit/lane-id": "0.0.
|
|
39
|
-
"@teambit/component": "0.0.
|
|
40
|
-
"@teambit/dependency-resolver": "0.0.
|
|
41
|
-
"@teambit/logger": "0.0.
|
|
42
|
-
"@teambit/scope": "0.0.
|
|
43
|
-
"@teambit/graph": "0.0.
|
|
44
|
-
"@teambit/cli": "0.0.
|
|
45
|
-
"@teambit/isolator": "0.0.
|
|
46
|
-
"@teambit/component-tree": "0.0.
|
|
38
|
+
"@teambit/lane-id": "0.0.158",
|
|
39
|
+
"@teambit/component": "0.0.955",
|
|
40
|
+
"@teambit/dependency-resolver": "0.0.955",
|
|
41
|
+
"@teambit/logger": "0.0.733",
|
|
42
|
+
"@teambit/scope": "0.0.955",
|
|
43
|
+
"@teambit/graph": "0.0.955",
|
|
44
|
+
"@teambit/cli": "0.0.640",
|
|
45
|
+
"@teambit/isolator": "0.0.955",
|
|
46
|
+
"@teambit/component-tree": "0.0.743",
|
|
47
47
|
"@teambit/component.ui.component-status-resolver": "0.0.503",
|
|
48
|
-
"@teambit/lanes.hooks.use-lanes": "0.0.
|
|
48
|
+
"@teambit/lanes.hooks.use-lanes": "0.0.104",
|
|
49
49
|
"@teambit/harmony.modules.resolved-component": "0.0.491",
|
|
50
|
-
"@teambit/compiler": "0.0.
|
|
51
|
-
"@teambit/graphql": "0.0.
|
|
52
|
-
"@teambit/aspect-loader": "0.0.
|
|
53
|
-
"@teambit/bundler": "0.0.
|
|
54
|
-
"@teambit/envs": "0.0.
|
|
55
|
-
"@teambit/pubsub": "0.0.
|
|
56
|
-
"@teambit/ui": "0.0.
|
|
57
|
-
"@teambit/variants": "0.0.
|
|
50
|
+
"@teambit/compiler": "0.0.955",
|
|
51
|
+
"@teambit/graphql": "0.0.955",
|
|
52
|
+
"@teambit/aspect-loader": "0.0.955",
|
|
53
|
+
"@teambit/bundler": "0.0.955",
|
|
54
|
+
"@teambit/envs": "0.0.955",
|
|
55
|
+
"@teambit/pubsub": "0.0.955",
|
|
56
|
+
"@teambit/ui": "0.0.955",
|
|
57
|
+
"@teambit/variants": "0.0.745",
|
|
58
58
|
"@teambit/component-issues": "0.0.84",
|
|
59
|
-
"@teambit/config": "0.0.
|
|
59
|
+
"@teambit/config": "0.0.653",
|
|
60
60
|
"@teambit/harmony.modules.requireable-component": "0.0.491",
|
|
61
61
|
"@teambit/legacy-bit-id": "0.0.421",
|
|
62
62
|
"@teambit/workspace.modules.match-pattern": "0.0.498",
|
|
63
|
-
"@teambit/component.ui.component-drawer": "0.0.
|
|
63
|
+
"@teambit/component.ui.component-drawer": "0.0.198",
|
|
64
64
|
"@teambit/design.ui.tree": "0.0.15",
|
|
65
|
-
"@teambit/lanes.hooks.use-lane-components": "0.0.
|
|
66
|
-
"@teambit/ui-foundation.ui.side-bar": "0.0.
|
|
67
|
-
"@teambit/command-bar": "0.0.
|
|
68
|
-
"@teambit/component.ui.component-filters.component-filter-context": "0.0.
|
|
69
|
-
"@teambit/component.ui.component-filters.deprecate-filter": "0.0.
|
|
70
|
-
"@teambit/component.ui.component-filters.env-filter": "0.0.
|
|
71
|
-
"@teambit/component.ui.component-filters.show-main-filter": "0.0.
|
|
72
|
-
"@teambit/sidebar": "0.0.
|
|
65
|
+
"@teambit/lanes.hooks.use-lane-components": "0.0.103",
|
|
66
|
+
"@teambit/ui-foundation.ui.side-bar": "0.0.715",
|
|
67
|
+
"@teambit/command-bar": "0.0.955",
|
|
68
|
+
"@teambit/component.ui.component-filters.component-filter-context": "0.0.73",
|
|
69
|
+
"@teambit/component.ui.component-filters.deprecate-filter": "0.0.73",
|
|
70
|
+
"@teambit/component.ui.component-filters.env-filter": "0.0.79",
|
|
71
|
+
"@teambit/component.ui.component-filters.show-main-filter": "0.0.66",
|
|
72
|
+
"@teambit/sidebar": "0.0.955",
|
|
73
73
|
"@teambit/ui-foundation.ui.main-dropdown": "0.0.497",
|
|
74
74
|
"@teambit/ui-foundation.ui.menu": "0.0.497",
|
|
75
75
|
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.501",
|
|
76
76
|
"@teambit/ui-foundation.ui.tree.drawer": "0.0.510",
|
|
77
77
|
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.500",
|
|
78
|
-
"@teambit/component-descriptor": "0.0.
|
|
79
|
-
"@teambit/deprecation": "0.0.
|
|
78
|
+
"@teambit/component-descriptor": "0.0.210",
|
|
79
|
+
"@teambit/deprecation": "0.0.955",
|
|
80
80
|
"@teambit/ui-foundation.ui.constants.z-indexes": "0.0.498",
|
|
81
81
|
"@teambit/ui-foundation.ui.buttons.collapser": "0.0.206",
|
|
82
82
|
"@teambit/ui-foundation.ui.corner": "0.0.507",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"peerDependencies": {
|
|
104
104
|
"react-router-dom": "^6.0.0",
|
|
105
105
|
"@apollo/client": "^3.6.0",
|
|
106
|
-
"@teambit/legacy": "1.0.
|
|
106
|
+
"@teambit/legacy": "1.0.422",
|
|
107
107
|
"react": "^16.8.0 || ^17.0.0",
|
|
108
108
|
"react-dom": "^16.8.0 || ^17.0.0"
|
|
109
109
|
},
|
package/watch/watcher.ts
CHANGED
|
@@ -223,7 +223,7 @@ export class Watcher {
|
|
|
223
223
|
const ids = await this.workspace.listIds();
|
|
224
224
|
updatedComponentId = ids.find((id) => id.isEqual(componentId, { ignoreVersion: true }));
|
|
225
225
|
if (!updatedComponentId) {
|
|
226
|
-
|
|
226
|
+
logger.debug(`triggerCompChanges, the component ${componentId.toString()} was probably removed from .bitmap`);
|
|
227
227
|
return [];
|
|
228
228
|
}
|
|
229
229
|
}
|
|
@@ -238,15 +238,14 @@ export class Watcher {
|
|
|
238
238
|
const compFiles = files.filter((filePath) => {
|
|
239
239
|
const relativeFile = this.getRelativePathLinux(filePath);
|
|
240
240
|
const isCompFile = Boolean(componentMap.getFilesRelativeToConsumer().find((p) => p === relativeFile));
|
|
241
|
-
if (!isCompFile) {
|
|
242
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
243
|
-
logger.debug(
|
|
244
|
-
`file ${filePath} is inside the component ${updatedComponentId!.toString()} but configured to be ignored`
|
|
245
|
-
);
|
|
246
|
-
}
|
|
247
241
|
return isCompFile;
|
|
248
242
|
});
|
|
249
243
|
if (!compFiles.length) {
|
|
244
|
+
logger.debug(
|
|
245
|
+
`the following files are part of the component ${componentId.toStringWithoutVersion()} but configured to be ignored:\n${files.join(
|
|
246
|
+
'\n'
|
|
247
|
+
)}'`
|
|
248
|
+
);
|
|
250
249
|
return [];
|
|
251
250
|
}
|
|
252
251
|
const buildResults = await this.executeWatchOperationsOnComponent(updatedComponentId, compFiles, true, initiator);
|
|
@@ -305,18 +304,21 @@ export class Watcher {
|
|
|
305
304
|
this.pubsub.pub(WorkspaceAspect.id, this.creatOnComponentAddEvent(idStr, 'OnComponentAdd'));
|
|
306
305
|
}
|
|
307
306
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
307
|
+
// the try/catch is probably not needed here because this gets called by `handleChange()` which already has a try/catch
|
|
308
|
+
// I left it here commented out for now just in case, but it should be removed as soon as we're more confident
|
|
309
|
+
|
|
310
|
+
// let buildResults: OnComponentEventResult[];
|
|
311
|
+
// try {
|
|
312
|
+
const buildResults = isChange
|
|
313
|
+
? await this.workspace.triggerOnComponentChange(componentId, files, initiator)
|
|
314
|
+
: await this.workspace.triggerOnComponentAdd(componentId);
|
|
315
|
+
// } catch (err: any) {
|
|
316
|
+
// // do not exit the watch process on errors, just print them
|
|
317
|
+
// const msg = `found an issue during onComponentChange or onComponentAdd hooks for ${idStr}`;
|
|
318
|
+
// logger.error(msg, err);
|
|
319
|
+
// logger.console(`\n${msg}: ${err.message || err}`);
|
|
320
|
+
// return [];
|
|
321
|
+
// }
|
|
320
322
|
return buildResults;
|
|
321
323
|
}
|
|
322
324
|
|
|
Binary file
|