Skip to content

Commit

Permalink
Move more pluggable element initializations into factory functions (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Nov 23, 2022
1 parent f664275 commit 14ea238
Show file tree
Hide file tree
Showing 34 changed files with 509 additions and 428 deletions.
File renamed without changes.
File renamed without changes.
17 changes: 17 additions & 0 deletions plugins/arc/src/ArcRenderer/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import PluginManager from '@jbrowse/core/PluginManager'

import ReactComponent from './ArcRendering'
import configSchema from './configSchema'
import ArcRenderer from './ArcRenderer'

export default (pluginManager: PluginManager) => {
pluginManager.addRendererType(
() =>
new ArcRenderer({
name: 'ArcRenderer',
ReactComponent,
configSchema,
pluginManager,
}),
)
}
3 changes: 0 additions & 3 deletions plugins/arc/src/ArcRenderer/index.tsx

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import PluginManager from '@jbrowse/core/PluginManager'
import { types } from 'mobx-state-tree'
import { ConfigurationSchema } from '@jbrowse/core/configuration'
import { baseLinearDisplayConfigSchema } from '@jbrowse/plugin-linear-genome-view'

/**
* #config LinearArcDisplay
*/
export function configSchemaFactory(pluginManager: PluginManager) {
const LGVPlugin = pluginManager.getPlugin(
'LinearGenomeViewPlugin',
) as import('@jbrowse/plugin-linear-genome-view').default
const { baseLinearDisplayConfigSchema } = LGVPlugin.exports
return ConfigurationSchema(
'LinearArcDisplay',
{
Expand Down
20 changes: 20 additions & 0 deletions plugins/arc/src/LinearArcDisplay/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import PluginManager from '@jbrowse/core/PluginManager'
import { DisplayType } from '@jbrowse/core/pluggableElementTypes'
import { BaseLinearDisplayComponent } from '@jbrowse/plugin-linear-genome-view'

import { configSchemaFactory } from './configSchema'
import { stateModelFactory } from './model'

export default (pluginManager: PluginManager) => {
pluginManager.addDisplayType(() => {
const configSchema = configSchemaFactory(pluginManager)
return new DisplayType({
name: 'LinearArcDisplay',
configSchema,
stateModel: stateModelFactory(configSchema),
trackType: 'FeatureTrack',
viewType: 'LinearGenomeView',
ReactComponent: BaseLinearDisplayComponent,
})
})
}
2 changes: 0 additions & 2 deletions plugins/arc/src/LinearArcDisplay/index.tsx

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,10 @@ import {
AnyConfigurationSchemaType,
ConfigurationReference,
} from '@jbrowse/core/configuration/configurationSchema'
import PluginManager from '@jbrowse/core/PluginManager'
import { types } from 'mobx-state-tree'
import { BaseLinearDisplay } from '@jbrowse/plugin-linear-genome-view'

export function stateModelFactory(
configSchema: AnyConfigurationSchemaType,
pluginManager: PluginManager,
) {
const LGVPlugin = pluginManager.getPlugin(
'LinearGenomeViewPlugin',
) as import('@jbrowse/plugin-linear-genome-view').default
// @ts-ignore
const { BaseLinearDisplay } = LGVPlugin.exports
export function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
return types
.compose(
'LinearArcDisplay',
Expand Down
49 changes: 7 additions & 42 deletions plugins/arc/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,53 +1,18 @@
import Plugin from '@jbrowse/core/Plugin'
import PluginManager from '@jbrowse/core/PluginManager'
import DisplayType from '@jbrowse/core/pluggableElementTypes/DisplayType'
import {
configSchemaFactory as linearArcDisplayConfigSchemaFactory,
stateModelFactory as LinearArcDisplayStateModelFactory,
} from './LinearArcDisplay'
import ArcRenderer, {
configSchema as ArcRendererConfigSchema,
ReactComponent as ArcRendererReactComponent,
} from './ArcRenderer'
import LinearArcDisplayF from './LinearArcDisplay'
import ArcRendererF from './ArcRenderer'
import { Feature } from '@jbrowse/core/util'

export default class MyProjectPlugin extends Plugin {
export default class ArcPlugin extends Plugin {
name = 'ArcRenderer'
install(pluginManager: PluginManager) {
const LGVPlugin = pluginManager.getPlugin(
'LinearGenomeViewPlugin',
) as import('@jbrowse/plugin-linear-genome-view').default
// @ts-ignore
const { BaseLinearDisplayComponent } = LGVPlugin.exports

pluginManager.addRendererType(
() =>
// @ts-ignore error "expected 0 arguments, but got 1"?
new ArcRenderer({
name: 'ArcRenderer',
ReactComponent: ArcRendererReactComponent,
configSchema: ArcRendererConfigSchema,
pluginManager,
}),
)
pluginManager.addDisplayType(() => {
const configSchema = linearArcDisplayConfigSchemaFactory(pluginManager)
return new DisplayType({
name: 'LinearArcDisplay',
configSchema,
stateModel: LinearArcDisplayStateModelFactory(
configSchema,
pluginManager,
),
trackType: 'FeatureTrack',
viewType: 'LinearGenomeView',
ReactComponent: BaseLinearDisplayComponent,
})
})
ArcRendererF(pluginManager)
LinearArcDisplayF(pluginManager)

pluginManager.jexl.addFunction(
'logThickness',
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(feature: any, attributeName: string) => {
(feature: Feature, attributeName: string) => {
return Math.log(feature.get(attributeName) + 1)
},
)
Expand Down
15 changes: 14 additions & 1 deletion plugins/gff3/src/Gff3Adapter/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
export { default as configSchema } from './configSchema'
import { AdapterType } from '@jbrowse/core/pluggableElementTypes'
import PluginManager from '@jbrowse/core/PluginManager'
import configSchema from './configSchema'

export default (pluginManager: PluginManager) => {
pluginManager.addAdapterType(
() =>
new AdapterType({
name: 'Gff3Adapter',
configSchema,
getAdapterClass: () => import('./Gff3Adapter').then(r => r.default),
}),
)
}
16 changes: 15 additions & 1 deletion plugins/gff3/src/Gff3TabixAdapter/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,15 @@
export { default as configSchema } from './configSchema'
import { AdapterType } from '@jbrowse/core/pluggableElementTypes'
import PluginManager from '@jbrowse/core/PluginManager'
import configSchema from './configSchema'

export default (pluginManager: PluginManager) => {
pluginManager.addAdapterType(
() =>
new AdapterType({
name: 'Gff3TabixAdapter',
configSchema,
getAdapterClass: () =>
import('./Gff3TabixAdapter').then(r => r.default),
}),
)
}
63 changes: 63 additions & 0 deletions plugins/gff3/src/GuessGff3/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import PluginManager from '@jbrowse/core/PluginManager'
import { FileLocation } from '@jbrowse/core/util/types'
import {
makeIndex,
makeIndexType,
getFileName,
AdapterGuesser,
} from '@jbrowse/core/util/tracks'

export default (pluginManager: PluginManager) => {
pluginManager.addToExtensionPoint(
'Core-guessAdapterForLocation',
(adapterGuesser: AdapterGuesser) => {
return (
file: FileLocation,
index?: FileLocation,
adapterHint?: string,
) => {
const regexGuess = /\.gff3?\.b?gz$/i
const adapterName = 'Gff3TabixAdapter'
const fileName = getFileName(file)
const indexName = index && getFileName(index)
if (regexGuess.test(fileName) || adapterHint === adapterName) {
return {
type: adapterName,
bamLocation: file,
gffGzLocation: file,
index: {
location: index || makeIndex(file, '.tbi'),
indexType: makeIndexType(indexName, 'CSI', 'TBI'),
},
}
}
return adapterGuesser(file, index, adapterHint)
}
},
)

pluginManager.addToExtensionPoint(
'Core-guessAdapterForLocation',
(adapterGuesser: AdapterGuesser) => {
return (
file: FileLocation,
index?: FileLocation,
adapterHint?: string,
) => {
const regexGuess = /\.gff3?$/i
const adapterName = 'Gff3Adapter'
const fileName = getFileName(file)
const obj = {
type: adapterName,
gffLocation: file,
}
if (regexGuess.test(fileName) && !adapterHint) {
return obj
} else if (adapterHint === adapterName) {
return obj
}
return adapterGuesser(file, index, adapterHint)
}
},
)
}
86 changes: 7 additions & 79 deletions plugins/gff3/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,88 +1,16 @@
import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'
import PluginManager from '@jbrowse/core/PluginManager'
import Plugin from '@jbrowse/core/Plugin'
import { configSchema as gff3TabixAdapterConfigSchema } from './Gff3TabixAdapter'
import { FileLocation } from '@jbrowse/core/util/types'
import {
makeIndex,
makeIndexType,
AdapterGuesser,
getFileName,
} from '@jbrowse/core/util/tracks'
import { configSchema as gff3AdapterConfigSchema } from './Gff3Adapter'

import Gff3TabixAdapterF from './Gff3TabixAdapter'
import Gff3AdapterF from './Gff3Adapter'
import GuessGff3F from './GuessGff3'

export default class extends Plugin {
name = 'GFF3Plugin'

install(pluginManager: PluginManager) {
pluginManager.addAdapterType(
() =>
new AdapterType({
name: 'Gff3TabixAdapter',
configSchema: gff3TabixAdapterConfigSchema,
getAdapterClass: () =>
import('./Gff3TabixAdapter/Gff3TabixAdapter').then(r => r.default),
}),
)
pluginManager.addToExtensionPoint(
'Core-guessAdapterForLocation',
(adapterGuesser: AdapterGuesser) => {
return (
file: FileLocation,
index?: FileLocation,
adapterHint?: string,
) => {
const regexGuess = /\.gff3?\.b?gz$/i
const adapterName = 'Gff3TabixAdapter'
const fileName = getFileName(file)
const indexName = index && getFileName(index)
if (regexGuess.test(fileName) || adapterHint === adapterName) {
return {
type: adapterName,
bamLocation: file,
gffGzLocation: file,
index: {
location: index || makeIndex(file, '.tbi'),
indexType: makeIndexType(indexName, 'CSI', 'TBI'),
},
}
}
return adapterGuesser(file, index, adapterHint)
}
},
)
pluginManager.addAdapterType(
() =>
new AdapterType({
name: 'Gff3Adapter',
configSchema: gff3AdapterConfigSchema,
getAdapterClass: () =>
import('./Gff3Adapter/Gff3Adapter').then(r => r.default),
}),
)
pluginManager.addToExtensionPoint(
'Core-guessAdapterForLocation',
(adapterGuesser: AdapterGuesser) => {
return (
file: FileLocation,
index?: FileLocation,
adapterHint?: string,
) => {
const regexGuess = /\.gff3?$/i
const adapterName = 'Gff3Adapter'
const fileName = getFileName(file)
const obj = {
type: adapterName,
gffLocation: file,
}
if (regexGuess.test(fileName) && !adapterHint) {
return obj
} else if (adapterHint === adapterName) {
return obj
}
return adapterGuesser(file, index, adapterHint)
}
},
)
Gff3TabixAdapterF(pluginManager)
Gff3AdapterF(pluginManager)
GuessGff3F(pluginManager)
}
}
14 changes: 14 additions & 0 deletions plugins/hic/src/HicAdapter/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { AdapterType } from '@jbrowse/core/pluggableElementTypes'
import PluginManager from '@jbrowse/core/PluginManager'
import configSchema from './configSchema'

export default (pluginManager: PluginManager) => {
pluginManager.addAdapterType(
() =>
new AdapterType({
name: 'HicAdapter',
configSchema,
getAdapterClass: () => import('./HicAdapter').then(r => r.default),
}),
)
}
20 changes: 17 additions & 3 deletions plugins/hic/src/HicRenderer/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
export { default as ReactComponent } from './components/HicRendering'
export { default as configSchema } from './configSchema'
export { default } from './HicRenderer'
import PluginManager from '@jbrowse/core/PluginManager'

import ReactComponent from './components/HicRendering'
import configSchema from './configSchema'
import HicRenderer from './HicRenderer'

export default (pluginManager: PluginManager) => {
pluginManager.addRendererType(
() =>
new HicRenderer({
name: 'HicRenderer',
ReactComponent,
configSchema,
pluginManager,
}),
)
}
File renamed without changes.
15 changes: 15 additions & 0 deletions plugins/hic/src/HicTrack/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import PluginManager from '@jbrowse/core/PluginManager'
import TrackType from '@jbrowse/core/pluggableElementTypes/TrackType'
import { createBaseTrackModel } from '@jbrowse/core/pluggableElementTypes/models'
import configSchemaF from './configSchema'

export default (pluginManager: PluginManager) => {
pluginManager.addTrackType(() => {
const configSchema = configSchemaF(pluginManager)
return new TrackType({
name: 'HicTrack',
configSchema,
stateModel: createBaseTrackModel(pluginManager, 'HicTrack', configSchema),
})
})
}
Loading

0 comments on commit 14ea238

Please sign in to comment.