feat(core): Move plugins to part-level config
This commit is contained in:
parent
fa14ad0fa3
commit
8a74a36697
5 changed files with 124 additions and 196 deletions
|
@ -8,12 +8,12 @@ import { addPartConfig } from './utils.mjs'
|
|||
*/
|
||||
export function Design(config) {
|
||||
|
||||
// Merge config with defaults
|
||||
// Initialize config with defaults
|
||||
config = {
|
||||
parts: [],
|
||||
options: {},
|
||||
measurements: [],
|
||||
optionalMeasurements: [],
|
||||
options: {},
|
||||
parts: [],
|
||||
plugins: [],
|
||||
...config
|
||||
}
|
||||
|
@ -37,16 +37,7 @@ export function Design(config) {
|
|||
const pattern = function (settings) {
|
||||
Pattern.call(this, config)
|
||||
|
||||
// Load plugins
|
||||
if (!Array.isArray(config.plugins)) config.plugins = [ config.plugins ]
|
||||
for (const plugin of config.plugins) {
|
||||
if (plugin.plugin && plugin.condition) this.useIf(plugin, settings)
|
||||
else this.use(plugin)
|
||||
}
|
||||
|
||||
this.apply(settings)
|
||||
|
||||
return this
|
||||
return this.init().apply(settings)
|
||||
}
|
||||
|
||||
// Set up inheritance
|
||||
|
|
|
@ -173,6 +173,10 @@ Pattern.prototype.getPartList = function () {
|
|||
*/
|
||||
Pattern.prototype.init = function () {
|
||||
this.initialized++
|
||||
// Load plugins
|
||||
if (this.config.plugins) {
|
||||
for (const plugin of Object.values(this.config.plugins)) this.use(plugin)
|
||||
}
|
||||
// Resolve all dependencies
|
||||
this.dependencies = this.config.dependencies
|
||||
this.inject = this.config.inject
|
||||
|
@ -522,12 +526,19 @@ Pattern.prototype.render = function () {
|
|||
}
|
||||
|
||||
Pattern.prototype.on = function (hook, method, data) {
|
||||
for (const added of this.hooks[hook]) {
|
||||
// Don't add it twice
|
||||
if (added.method === method) return this
|
||||
}
|
||||
this.hooks[hook].push({ method, data })
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
Pattern.prototype.use = function (plugin, data) {
|
||||
// Conditional plugin?
|
||||
if (plugin.plugin && plugin.condition) return this.useIf(plugin, data)
|
||||
// Regular plugin
|
||||
this.raise.info(`Loaded plugin \`${plugin.name}:${plugin.version}\``)
|
||||
if (plugin.hooks) this.loadPluginHooks(plugin, data)
|
||||
if (plugin.macros) this.loadPluginMacros(plugin)
|
||||
|
|
|
@ -567,12 +567,25 @@ export const addPartDependencies = (part, config) => {
|
|||
return config
|
||||
}
|
||||
|
||||
// Add part-level plugins
|
||||
export const addPartPlugins = (part, config) => {
|
||||
if (!part.plugins) return config
|
||||
if (!Array.isArray(part.plugins)) part.plugins = [ part.plugins ]
|
||||
for (const plugin of part.plugins) {
|
||||
if (plugin.plugin && plugin.condition) config.plugins[plugin.plugin.name] = plugin
|
||||
else config.plugins[plugin.name] = plugin
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
export const addPartConfig = (part, config) => {
|
||||
config = addPartOptions(part, config)
|
||||
config = addPartMeasurements(part, config)
|
||||
config = addPartOptionalMeasurements(part, config)
|
||||
config = addPartDependencies(part, config)
|
||||
config = addPartOptionGroups(part, config)
|
||||
config = addPartPlugins(part, config)
|
||||
|
||||
return config
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue