Skip to content
This repository was archived by the owner on Jan 21, 2024. It is now read-only.

Commit 689eb60

Browse files
committed
Restructured some code
1 parent 82a714f commit 689eb60

File tree

5 files changed

+61
-45
lines changed

5 files changed

+61
-45
lines changed

depgraph-navigator/src/browser/graph/graph-sprotty-config.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* http://www.apache.org/licenses/LICENSE-2.0
88
*/
99

10-
import { ContainerModule, Container } from 'inversify';
10+
import { ContainerModule, Container, interfaces } from 'inversify';
1111
import {
1212
TYPES, ConsoleLogger, LogLevel, SGraphFactory, configureModelElement, SGraph,
1313
SGraphView, HtmlRoot, HtmlRootView, PreRenderedElement, PreRenderedView, SLabel,
@@ -22,21 +22,15 @@ import { NpmDependencyGraphGenerator } from './npm-dependencies';
2222
import { ResolveNodesHandler } from './resolve-nodes';
2323
import { DependencyNodeView, DependencyEdgeView } from './graph-views';
2424
import { popupModelFactory } from './popup-info';
25-
import { ElkGraphLayout, ElkFactory } from './graph-layout';
25+
import { ElkGraphLayout } from './graph-layout';
2626
import { DependencyGraphFilter } from './graph-filter';
2727

28-
export interface ContainerFactoryArguments {
29-
elkFactory: ElkFactory
30-
graphGenerator?: { new(...args: any[]): IGraphGenerator }
31-
}
32-
33-
export default (args: ContainerFactoryArguments) => {
28+
export default (additionalBindings?: interfaces.ContainerModuleCallBack) => {
3429
const depGraphModule = new ContainerModule((bind, unbind, isBound, rebind) => {
3530
bind(DependencyGraphFilter).toSelf();
3631
bind(ResolveNodesHandler).toSelf();
37-
bind(ElkFactory).toConstantValue(args.elkFactory);
3832
bind(ElkGraphLayout).toSelf();
39-
bind(IGraphGenerator).to(args.graphGenerator || NpmDependencyGraphGenerator).inSingletonScope();
33+
bind(IGraphGenerator).to(NpmDependencyGraphGenerator).inSingletonScope();
4034
bind(TYPES.ModelSource).to(DepGraphModelSource).inSingletonScope();
4135
bind(TYPES.PopupModelFactory).toConstantValue(popupModelFactory);
4236
rebind(TYPES.ILogger).to(ConsoleLogger).inSingletonScope();
@@ -50,6 +44,8 @@ export default (args: ContainerFactoryArguments) => {
5044
configureModelElement(context, 'compartment', SCompartment, SCompartmentView);
5145
configureModelElement(context, 'html', HtmlRoot, HtmlRootView);
5246
configureModelElement(context, 'pre-rendered', PreRenderedElement, PreRenderedView);
47+
if (additionalBindings)
48+
additionalBindings(bind, unbind, isBound, rebind);
5349
});
5450

5551
const container = new Container();

depgraph-navigator/src/browser/widget/diagram-config.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import { overrideViewerOptions, KeyTool, TYPES } from "sprotty/lib";
1414
import { DiagramConfiguration, TheiaKeyTool } from "theia-sprotty/lib";
1515
import { DepGraphModelSource } from "../graph/model-source";
1616
import { IGraphGenerator } from "../graph/graph-generator";
17-
import { NodeModulesGraphGenerator } from "./diagram-manager";
17+
import { ElkFactory } from "../graph/graph-layout";
18+
import { NodeModulesGraphGenerator } from "./node-modules";
1819
import containerFactory from '../graph/graph-sprotty-config';
1920
import elkFactory from '../graph/elk-bundled';
2021

@@ -27,7 +28,10 @@ export class DepGraphDiagramConfiguration implements DiagramConfiguration {
2728
readonly diagramType: string = 'dependency-graph';
2829

2930
createContainer(widgetId: string): Container {
30-
const container = containerFactory({ elkFactory, graphGenerator: NodeModulesGraphGenerator });
31+
const container = containerFactory((bind, unbind, isBound, rebind) => {
32+
bind(ElkFactory).toConstantValue(elkFactory);
33+
rebind(IGraphGenerator).to(NodeModulesGraphGenerator).inSingletonScope();
34+
});
3135
container.rebind(KeyTool).to(TheiaKeyTool).inSingletonScope();
3236
overrideViewerOptions(container, {
3337
baseDiv: widgetId

depgraph-navigator/src/browser/widget/diagram-manager.ts

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,11 @@
99

1010
import { injectable, inject } from "inversify";
1111
import URI from "@theia/core/lib/common/uri";
12-
import { Path } from "@theia/core/lib/common";
1312
import { OpenerOptions } from "@theia/core/lib/browser";
1413
import { FileSystem } from "@theia/filesystem/lib/common";
1514
import { DiagramManagerImpl, DiagramWidget } from "theia-sprotty/lib";
1615
import { DepGraphModelSource } from '../graph/model-source';
17-
import { DependencyGraphNodeSchema } from "../graph/graph-model";
18-
import { VersionMetadata } from "../graph/registry-metadata";
19-
import { NpmDependencyGraphGenerator } from "../graph/npm-dependencies";
16+
import { NodeModulesGraphGenerator } from "./node-modules";
2017

2118
@injectable()
2219
export class DepGraphDiagramManager extends DiagramManagerImpl {
@@ -61,30 +58,3 @@ export class DepGraphDiagramManager extends DiagramManagerImpl {
6158
}
6259

6360
}
64-
65-
@injectable()
66-
export class NodeModulesGraphGenerator extends NpmDependencyGraphGenerator {
67-
68-
fileSystem?: FileSystem;
69-
startUri?: URI;
70-
71-
protected async getMetadata(node: DependencyGraphNodeSchema): Promise<VersionMetadata> {
72-
const startUri = this.startUri;
73-
if (this.fileSystem && startUri) {
74-
const segs = startUri.path.toString().split(Path.separator);
75-
while (segs.length > 0 && segs[segs.length - 1] && segs[segs.length - 1] !== '..') {
76-
segs.splice(segs.length - 1, 1);
77-
const packageUri = startUri.withPath(`${segs.join('/')}/node_modules/${node.name}/package.json`);
78-
try {
79-
const { content } = await this.fileSystem.resolveContent(packageUri.toString());
80-
return JSON.parse(content);
81-
} catch {
82-
// Try the parent directory
83-
}
84-
}
85-
}
86-
// Fall back to the remote package registry
87-
return super.getMetadata(node);
88-
}
89-
90-
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright (C) 2018 TypeFox
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*/
9+
10+
import { injectable } from "inversify";
11+
import URI from "@theia/core/lib/common/uri";
12+
import { Path } from "@theia/core/lib/common";
13+
import { FileSystem } from "@theia/filesystem/lib/common";
14+
import { DependencyGraphNodeSchema } from "../graph/graph-model";
15+
import { VersionMetadata } from "../graph/registry-metadata";
16+
import { NpmDependencyGraphGenerator } from "../graph/npm-dependencies";
17+
18+
@injectable()
19+
export class NodeModulesGraphGenerator extends NpmDependencyGraphGenerator {
20+
21+
fileSystem?: FileSystem;
22+
startUri?: URI;
23+
24+
protected async getMetadata(node: DependencyGraphNodeSchema): Promise<VersionMetadata> {
25+
const startUri = this.startUri;
26+
if (this.fileSystem && startUri) {
27+
const segs = startUri.path.toString().split(Path.separator);
28+
while (segs.length > 0 && segs[segs.length - 1] && segs[segs.length - 1] !== '..') {
29+
segs.splice(segs.length - 1, 1);
30+
const packageUri = startUri.withPath(`${segs.join('/')}/node_modules/${node.name}/package.json`);
31+
try {
32+
const { content } = await this.fileSystem.resolveContent(packageUri.toString());
33+
return JSON.parse(content);
34+
} catch {
35+
// Try the parent directory
36+
}
37+
}
38+
}
39+
// Fall back to the remote package registry
40+
return super.getMetadata(node);
41+
}
42+
43+
}

standalone-app/src/frontend/main.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import * as faGithub from '@fortawesome/fontawesome-free-brands/faGithub';
1717
import fontawesome from '@fortawesome/fontawesome';
1818
import { TYPES } from 'sprotty/lib';
1919
import {
20-
containerFactory, DepGraphModelSource, REGISTRY_URL, NpmDependencyGraphGenerator, IGraphGenerator
20+
containerFactory, DepGraphModelSource, REGISTRY_URL, NpmDependencyGraphGenerator,
21+
IGraphGenerator, ElkFactory
2122
} from 'depgraph-navigator/lib/browser';
2223
import elkFactory from 'depgraph-navigator/lib/browser/graph/elk-webworker';
2324

@@ -30,7 +31,9 @@ jQuery(() => {
3031

3132
//---------------------------------------------------------
3233
// Create sprotty container and initialize model source
33-
const container = containerFactory({ elkFactory });
34+
const container = containerFactory((bind, unbind, isBound, rebind) => {
35+
bind(ElkFactory).toConstantValue(elkFactory);
36+
});
3437
const modelSource = container.get<DepGraphModelSource>(TYPES.ModelSource);
3538
modelSource.loadIndicator = loading => {
3639
loadingIndicator.css({ visibility: loading ? 'visible' : 'hidden' });

0 commit comments

Comments
 (0)