Skip to content

Commit

Permalink
Refactor plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
ehmicky committed Feb 6, 2022
1 parent 7597d2b commit 1d2565e
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 54 deletions.
6 changes: 3 additions & 3 deletions src/config/normalize/definitions.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import { transformPrecision, DEFAULT_PRECISION } from '../../run/precision.js'
import { DEFAULT_SELECT } from '../../select/main.js'
import { DEFAULT_OUTLIERS } from '../../stats/outliers/main.js'
import { CONFIG_DEFINITIONS } from '../load/normalize.js'
import { getPluginsDefinitions } from '../plugin/definitions.js'
import { getPluginsProps } from '../plugin/main_props.js'

import { getDummyDefinitions } from './dummy.js'
import { getDummyDefinitions, getDummyDefinitionsNames } from './dummy.js'
import { amongCommands } from './pick.js'
import { normalizeOptionalArray } from './transform.js'
import { validateJson, validateObject } from './validate/complex.js'
Expand All @@ -34,7 +34,7 @@ import {
const configProps = getDummyDefinitions(CONFIG_DEFINITIONS)

// All plugins definitions: `reporter`, `reporterConfig`, `runner`, etc.
const plugins = getPluginsDefinitions()
const plugins = getDummyDefinitionsNames(getPluginsProps())

const cwd = {
name: 'cwd',
Expand Down
13 changes: 11 additions & 2 deletions src/config/normalize/dummy.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,18 @@
// To avoid each sets of properties to be marked as unknown, we need to add
// dummy definitions for them.
export const getDummyDefinitions = function (definitions) {
return definitions.map(getDummyDefinition)
const names = definitions.map(getDefinitionName)
return getDummyDefinitionsNames(names)
}

const getDummyDefinition = function ({ name }) {
const getDefinitionName = function ({ name }) {
return name
}

export const getDummyDefinitionsNames = function (names) {
return names.map(getDummyDefinitionNames)
}

const getDummyDefinitionNames = function (name) {
return { name }
}
11 changes: 9 additions & 2 deletions src/config/plugin/add.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { normalizeReporters } from '../../report/config/main.js'

import { getPluginTypes, getTopConfig, removePluginsProps } from './extract.js'
import { loadPlugins } from './load.js'
import { normalizeMainProps } from './main_props.js'

// Several configuration properties (`runner`, `reporter`)
// can be customized with custom modules. This loads them. Each type can specify
Expand Down Expand Up @@ -51,12 +52,18 @@ const getPluginsByType = async function ({
configInfos,
}) {
const topConfig = getTopConfig(config, pluginType)
const configA = await normalizeMainProps({
config,
pluginType,
context,
configInfos,
})
const plugins = await loadPlugins({
pluginType,
config,
config: configA,
topConfig,
context,
configInfos,
})
return [pluginType.name, plugins]
return [pluginType.selectProp.name, plugins]
}
47 changes: 0 additions & 47 deletions src/config/plugin/definitions.js

This file was deleted.

58 changes: 58 additions & 0 deletions src/config/plugin/main_props.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { normalizeUserConfig } from '../normalize/main.js'
import { normalizeOptionalArray } from '../normalize/transform.js'
import { validateObject, validateJson } from '../normalize/validate/complex.js'
import { validateDefinedString } from '../normalize/validate/simple.js'

import { addPluginTypeDefault } from './default.js'
import { PLUGIN_TYPES_ARRAY } from './types.js'

// Ensure selection and configuration properties are not marked as unknown
export const getPluginsProps = function () {
return PLUGIN_TYPES_ARRAY.map(addPluginTypeDefault).flatMap(getPluginProps)
}

const getPluginProps = function ({ configProp, selectProp }) {
return [configProp.name, selectProp.name]
}

// Normalize both `selectProp` and `configProp`.
export const normalizeMainProps = async function ({
config,
pluginType,
context,
configInfos,
}) {
const definitions = getMainPropsDefinitions(pluginType)
return await normalizeUserConfig({
config,
definitions,
opts: { context },
configInfos,
})
}

const getMainPropsDefinitions = function ({ configProp, selectProp }) {
return [
{
transform: normalizeOptionalArray,
...selectProp,
},
{
name: `${selectProp.name}.*`,
validate: validateDefinedString,
},
{
validate: validateObject,
...configProp,
},
{
name: `${configProp.name}.*`,
default: {},
validate: validateObject,
},
{
name: `${configProp.name}.*.*`,
validate: validateJson,
},
]
}

0 comments on commit 1d2565e

Please sign in to comment.