diff --git a/package-lock.json b/package-lock.json index 3db077f62b8a695813533388b3ad68e8f0917b91..63217087816db2a87969dcfecf735d221decc48a 100644 Binary files a/package-lock.json and b/package-lock.json differ diff --git a/package.json b/package.json index 4e0873b4b3cf0c183a882a2f1a625064132c81e4..6b9b892807e53451b820a0c0144989a84a168838 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,11 @@ "testRegex": "\\.spec\\.ts$" }, "author": "Mol* Contributors", + "contributors": [ + "Alexander Rose <alexander.rose@weirdbyte.de>", + "David Sehnal <david.sehnal@gmail.com>", + "Sebastian Bittrich <sebastian.bittrich@rcsb.org>" + ], "license": "MIT", "devDependencies": { "benchmark": "^2.1.4", @@ -81,18 +86,18 @@ "graphql-codegen-typescript-template": "^0.18.2", "jest": "^24.8.0", "jest-raw-loader": "^1.0.1", - "mini-css-extract-plugin": "^0.6.0", + "mini-css-extract-plugin": "^0.7.0", "node-sass": "^4.12.0", "raw-loader": "^2.0.0", "resolve-url-loader": "^3.1.0", "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "ts-jest": "^24.0.2", - "tslint": "^5.16.0", - "typescript": "^3.4.5", - "uglify-js": "^3.5.13", + "tslint": "^5.17.0", + "typescript": "^3.5.1", + "uglify-js": "^3.6.0", "util.promisify": "^1.0.0", - "webpack": "^4.31.0", + "webpack": "^4.32.2", "webpack-cli": "^3.3.2" }, "dependencies": { @@ -102,25 +107,25 @@ "@types/express": "^4.16.1", "@types/gl": "^4.1.0", "@types/jest": "^24.0.13", - "@types/node": "^12.0.2", + "@types/node": "^12.0.4", "@types/node-fetch": "^2.3.4", "@types/pngjs": "^3.3.2", - "@types/react": "^16.8.17", + "@types/react": "^16.8.19", "@types/react-dom": "^16.8.4", "@types/swagger-ui-dist": "3.0.0", "@types/webgl2": "0.0.4", "argparse": "^1.0.10", "compression": "^1.7.4", - "express": "^4.17.0", - "gl": "^4.2.2", - "graphql": "^14.3.0", + "express": "^4.17.1", + "gl": "^4.3.3", + "graphql": "^14.3.1", "immutable": "^3.8.2", "node-fetch": "^2.6.0", "pngjs": "^3.4.0", "react": "^16.8.6", "react-dom": "^16.8.6", "rxjs": "^6.5.2", - "swagger-ui-dist": "^3.22.1", - "xhr2": "^0.1.4" + "swagger-ui-dist": "^3.22.2", + "xhr2": "^0.2.0" } } diff --git a/src/mol-data/db/table.ts b/src/mol-data/db/table.ts index 3573c7bd604a7ce5bf5877efbd1a53a89d38bcec..b67be9677ddbf317c310f44ef5d05bfd297f7d46 100644 --- a/src/mol-data/db/table.ts +++ b/src/mol-data/db/table.ts @@ -196,7 +196,7 @@ namespace Table { const row: Row<S> = Object.create(null); const { _columns: cols } = table; for (let i = 0; i < cols.length; i++) { - const c = cols[i]; + const c = cols[i] as keyof S; row[c] = table[c].value(index); } return row; diff --git a/src/mol-gl/render-object.ts b/src/mol-gl/render-object.ts index ec7536ff335d4b2405125dd1088a109cc7d889ca..a464f730d9e801bce6edeb6b6281096b3d01c7fd 100644 --- a/src/mol-gl/render-object.ts +++ b/src/mol-gl/render-object.ts @@ -20,14 +20,14 @@ const getNextId = idFactory(0, 0x7FFFFFFF) export const getNextMaterialId = idFactory(0, 0x7FFFFFFF) -export interface BaseRenderObject { id: number, type: string, values: RenderableValues, state: RenderableState, materialId: number } -export interface MeshRenderObject extends BaseRenderObject { type: 'mesh', values: MeshValues } -export interface PointsRenderObject extends BaseRenderObject { type: 'points', values: PointsValues } -export interface SpheresRenderObject extends BaseRenderObject { type: 'spheres', values: SpheresValues } -export interface TextRenderObject extends BaseRenderObject { type: 'text', values: TextValues } -export interface LinesRenderObject extends BaseRenderObject { type: 'lines', values: LinesValues } -export interface DirectVolumeRenderObject extends BaseRenderObject { type: 'direct-volume', values: DirectVolumeValues } -export interface TextureMeshRenderObject extends BaseRenderObject { type: 'texture-mesh', values: TextureMeshValues } +export interface BaseRenderObject<T extends RenderableValues> { id: number, type: string, values: T, state: RenderableState, materialId: number } +export interface MeshRenderObject extends BaseRenderObject<MeshValues> { type: 'mesh' } +export interface PointsRenderObject extends BaseRenderObject<PointsValues> { type: 'points' } +export interface SpheresRenderObject extends BaseRenderObject<SpheresValues> { type: 'spheres' } +export interface TextRenderObject extends BaseRenderObject<TextValues> { type: 'text' } +export interface LinesRenderObject extends BaseRenderObject<LinesValues> { type: 'lines' } +export interface DirectVolumeRenderObject extends BaseRenderObject<DirectVolumeValues> { type: 'direct-volume' } +export interface TextureMeshRenderObject extends BaseRenderObject<TextureMeshValues> { type: 'texture-mesh' } // diff --git a/src/mol-math/graph/int-adjacency-graph.ts b/src/mol-math/graph/int-adjacency-graph.ts index efd567b2e54d76084c74fb7f990b715c5cb44a86..d9460e2288fb449ba42464d981dd64eba38a029a 100644 --- a/src/mol-math/graph/int-adjacency-graph.ts +++ b/src/mol-math/graph/int-adjacency-graph.ts @@ -297,9 +297,9 @@ export namespace IntAdjacencyGraph { newOffsets[++vo] = eo; } - const newEdgeProps: P = {} as any; - for (const key of Object.keys(edgeProps)) { - newEdgeProps[key] = arrayPickIndices(edgeProps[key], edgeIndices); + const newEdgeProps = {} as P; + for (const key of Object.keys(edgeProps) as (keyof P)[]) { + newEdgeProps[key] = arrayPickIndices(edgeProps[key], edgeIndices) as P[keyof P]; } return create(newOffsets, newA, newB, newEdgeCount, newEdgeProps); diff --git a/src/mol-repr/shape/representation.ts b/src/mol-repr/shape/representation.ts index b84a0bffc03e96a677e7fb103f10f52de4b011c3..43fb6ea0f44cbe77c4ebabe94b0d3096657460f5 100644 --- a/src/mol-repr/shape/representation.ts +++ b/src/mol-repr/shape/representation.ts @@ -5,7 +5,7 @@ */ import { Task, RuntimeContext } from 'mol-task' -import { createRenderObject, GraphicsRenderObject, getNextMaterialId } from 'mol-gl/render-object'; +import { createRenderObject, getNextMaterialId, RenderObjectKindType, RenderObjectValuesType } from 'mol-gl/render-object'; import { Representation } from '../representation'; import { Loci, EmptyLoci, isEveryLoci } from 'mol-model/loci'; import { ValueCell } from 'mol-util'; @@ -36,8 +36,8 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa const updated = new Subject<number>() const _state = Representation.createState() const materialId = getNextMaterialId() - const renderObjects: GraphicsRenderObject[] = [] - let _renderObject: GraphicsRenderObject | undefined + const renderObjects: RenderObjectKindType[G['kind']][] = [] + let _renderObject: RenderObjectKindType[G['kind']] | undefined let _shape: Shape<G> let _theme = createEmptyTheme() let currentProps: PD.Values<P> = PD.getDefaultValues(geometryUtils.Params as P) // TODO avoid casting @@ -122,7 +122,7 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa if (updateState.updateTransform || updateState.createGeometry) { // console.log('updateBoundingSphere') - geometryUtils.updateBoundingSphere(_renderObject.values, _shape.geometry) + geometryUtils.updateBoundingSphere(_renderObject.values as RenderObjectValuesType[G['kind']], _shape.geometry) } if (updateState.updateColor) { @@ -138,7 +138,7 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa } } - geometryUtils.updateValues(_renderObject.values, newProps) + geometryUtils.updateValues(_renderObject.values as RenderObjectValuesType[G['kind']], newProps) geometryUtils.updateRenderableState(_renderObject.state, newProps) } diff --git a/src/mol-repr/structure/complex-visual.ts b/src/mol-repr/structure/complex-visual.ts index f42df562b0d99b868cb49759faf5c633082dfd96..6728dfd3dfa217313e782b884ff3da9ee2eb106b 100644 --- a/src/mol-repr/structure/complex-visual.ts +++ b/src/mol-repr/structure/complex-visual.ts @@ -6,7 +6,7 @@ import { Structure } from 'mol-model/structure'; import { Visual, VisualContext } from '../visual'; -import { createRenderObject, GraphicsRenderObject } from 'mol-gl/render-object'; +import { createRenderObject, RenderObjectValuesType, RenderObjectKindType } from 'mol-gl/render-object'; import { UnitKind, UnitKindOptions } from './visual/util/common'; import { StructureMeshParams, StructureParams, StructureDirectVolumeParams } from './representation'; import { deepEqual, ValueCell } from 'mol-util'; @@ -65,7 +65,7 @@ export function ComplexVisual<G extends Geometry, P extends ComplexParams & Geom const { updateValues, updateBoundingSphere, updateRenderableState } = builder.geometryUtils const updateState = VisualUpdateState.create() - let renderObject: GraphicsRenderObject | undefined + let renderObject: RenderObjectKindType[G['kind']] | undefined let newProps: PD.Values<P> let newTheme: Theme @@ -137,7 +137,7 @@ export function ComplexVisual<G extends Geometry, P extends ComplexParams & Geom if (updateState.createGeometry) { if (newGeometry) { ValueCell.update(renderObject.values.drawCount, Geometry.getDrawCount(newGeometry)) - updateBoundingSphere(renderObject.values, newGeometry) + updateBoundingSphere(renderObject.values as RenderObjectValuesType[G['kind']], newGeometry) } else { throw new Error('expected geometry to be given') } @@ -154,7 +154,7 @@ export function ComplexVisual<G extends Geometry, P extends ComplexParams & Geom createColors(locationIt, newTheme.color, renderObject.values) } - updateValues(renderObject.values, newProps) + updateValues(renderObject.values as RenderObjectValuesType[G['kind']], newProps) updateRenderableState(renderObject.state, newProps) } diff --git a/src/mol-repr/structure/units-visual.ts b/src/mol-repr/structure/units-visual.ts index f622140015e3bf5e579fb3026f326e9abea19cf0..8f86a0556bff652edf3abef7f3f5f104bab5f37d 100644 --- a/src/mol-repr/structure/units-visual.ts +++ b/src/mol-repr/structure/units-visual.ts @@ -9,7 +9,7 @@ import { RepresentationProps } from '../representation'; import { Visual, VisualContext } from '../visual'; import { StructureMeshParams, StructurePointsParams, StructureLinesParams, StructureDirectVolumeParams, StructureSpheresParams, StructureTextureMeshParams } from './representation'; import { Loci, isEveryLoci, EmptyLoci } from 'mol-model/loci'; -import { GraphicsRenderObject, createRenderObject } from 'mol-gl/render-object'; +import { createRenderObject, RenderObjectKindType, RenderObjectValuesType } from 'mol-gl/render-object'; import { deepEqual, ValueCell } from 'mol-util'; import { Interval } from 'mol-data/int'; import { ParamDefinition as PD } from 'mol-util/param-definition'; @@ -65,7 +65,7 @@ export function UnitsVisual<G extends Geometry, P extends UnitsParams & Geometry const { createEmpty: createEmptyGeometry, updateValues, updateBoundingSphere, updateRenderableState } = builder.geometryUtils const updateState = VisualUpdateState.create() - let renderObject: GraphicsRenderObject | undefined + let renderObject: RenderObjectKindType[G['kind']] | undefined let newProps: PD.Values<P> = Object.assign({}, defaultProps) let newTheme: Theme = createEmptyTheme() @@ -181,7 +181,7 @@ export function UnitsVisual<G extends Geometry, P extends UnitsParams & Geometry if (updateState.updateTransform || updateState.createGeometry) { // console.log('UnitsVisual.updateBoundingSphere') - updateBoundingSphere(renderObject.values, newGeometry || geometry) + updateBoundingSphere(renderObject.values as RenderObjectValuesType[G['kind']], newGeometry || geometry) } if (updateState.updateSize) { @@ -197,7 +197,7 @@ export function UnitsVisual<G extends Geometry, P extends UnitsParams & Geometry createColors(locationIt, newTheme.color, renderObject.values) } - updateValues(renderObject.values, newProps) + updateValues(renderObject.values as RenderObjectValuesType[G['kind']], newProps) updateRenderableState(renderObject.state, newProps) } diff --git a/src/mol-repr/volume/representation.ts b/src/mol-repr/volume/representation.ts index 621c17ebcf8fb4e07924573f8b544e7e2fa28291..309a65ac9bccea852e46dadefe3b6c943d554fca 100644 --- a/src/mol-repr/volume/representation.ts +++ b/src/mol-repr/volume/representation.ts @@ -13,7 +13,7 @@ import { Geometry, GeometryUtils } from 'mol-geo/geometry/geometry'; import { ParamDefinition as PD } from 'mol-util/param-definition'; import { PickingId } from 'mol-geo/geometry/picking'; import { MarkerAction } from 'mol-geo/geometry/marker-data'; -import { GraphicsRenderObject, createRenderObject, getNextMaterialId } from 'mol-gl/render-object'; +import { GraphicsRenderObject, createRenderObject, getNextMaterialId, RenderObjectKindType, RenderObjectValuesType } from 'mol-gl/render-object'; import { Interval } from 'mol-data/int'; import { LocationIterator } from 'mol-geo/util/location-iterator'; import { VisualUpdateState } from 'mol-repr/util'; @@ -57,7 +57,7 @@ export function VolumeVisual<G extends Geometry, P extends VolumeParams & Geomet const { updateValues, updateBoundingSphere, updateRenderableState } = builder.geometryUtils const updateState = VisualUpdateState.create() - let renderObject: GraphicsRenderObject | undefined + let renderObject: RenderObjectKindType[G['kind']] | undefined let newProps: PD.Values<P> let newTheme: Theme @@ -119,7 +119,7 @@ export function VolumeVisual<G extends Geometry, P extends VolumeParams & Geomet if (updateState.createGeometry) { if (newGeometry) { ValueCell.update(renderObject.values.drawCount, Geometry.getDrawCount(newGeometry)) - updateBoundingSphere(renderObject.values, newGeometry) + updateBoundingSphere(renderObject.values as RenderObjectValuesType[G['kind']], newGeometry) } else { throw new Error('expected geometry to be given') } @@ -136,7 +136,7 @@ export function VolumeVisual<G extends Geometry, P extends VolumeParams & Geomet createColors(locationIt, newTheme.color, renderObject.values) } - updateValues(renderObject.values, newProps) + updateValues(renderObject.values as RenderObjectValuesType[G['kind']], newProps) updateRenderableState(renderObject.state, newProps) } diff --git a/src/mol-util/set.ts b/src/mol-util/set.ts index 3d5f648d9a58f12450353da24cd3f5cd9ade0dc7..af09cf6081d49d14ce51cbf51192993d1ae7850f 100644 --- a/src/mol-util/set.ts +++ b/src/mol-util/set.ts @@ -43,7 +43,7 @@ export namespace SetUtils { /** Create set containing elements of set a that are also in set b. */ export function intersection<T>(setA: Set<T>, setB: Set<T>): Set<T> { - const intersection = new Set(); + const intersection = new Set<T>(); for (const elem of Array.from(setB)) { if (setA.has(elem)) intersection.add(elem); } diff --git a/src/servers/volume/config.ts b/src/servers/volume/config.ts index 236c1c7ba32beead71a5d9e7cf49e1eeb394fa42..7227d773847609c2dd76b700cade62791d569981 100644 --- a/src/servers/volume/config.ts +++ b/src/servers/volume/config.ts @@ -75,9 +75,7 @@ const DefaultServerConfig = { export type ServerConfig = typeof DefaultServerConfig export const ServerConfig = { ...DefaultServerConfig } export function setServerConfig(config: ServerConfig) { - for (const name in DefaultServerConfig) { - ServerConfig[name as keyof ServerConfig] = config[name as keyof ServerConfig] - } + Object.assign(ServerConfig, config) } const DefaultLimitsConfig = { @@ -96,9 +94,7 @@ const DefaultLimitsConfig = { export type LimitsConfig = typeof DefaultLimitsConfig export const LimitsConfig = { ...DefaultLimitsConfig } export function setLimitsConfig(config: LimitsConfig) { - for (const name in DefaultLimitsConfig) { - LimitsConfig[name as keyof LimitsConfig] = config[name as keyof LimitsConfig] - } + Object.assign(LimitsConfig, config) } export function setConfig(config: ServerConfig & LimitsConfig) {