1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 'use strict'
- const nodePath = require('path')
- module.exports = presetLoader(require)
- module.exports.presetLoader = presetLoader
- function presetLoader (requireMethod) {
- return path => {
- let name = ''
- let scope = ''
- let absolutePath = ''
- if (typeof path === 'string') {
- name = path.toLowerCase()
- if (nodePath.isAbsolute(path)) {
- absolutePath = path
- }
- } else if (typeof path === 'object' && path.name) {
- // Rather than a string preset name, options.preset can be an object
- // with a "name" key indicating the preset to load; additinoal key/value
- // pairs are assumed to be configuration for the preset. See the documentation
- // for a given preset for configuration available.
- name = path.name.toLowerCase()
- if (nodePath.isAbsolute(path.name)) {
- absolutePath = path.name
- }
- } else {
- throw Error('preset must be string or object with key name')
- }
- if (!absolutePath) {
- if (name[0] === '@') {
- const parts = name.split('/')
- scope = parts.shift() + '/'
- name = parts.join('/')
- }
- if (!name.startsWith('conventional-changelog-')) {
- name = `conventional-changelog-${name}`
- }
- }
- try {
- const config = requireMethod(absolutePath || `${scope}${name}`)
- // rather than returning a promise, presets can return a builder function
- // which accepts a config object (allowing for customization) and returns
- // a promise.
- if (config && !config.then && typeof path === 'object') {
- return config(path)
- } else {
- // require returned a promise that resolves to a config object.
- return config
- }
- } catch (_) {
- throw Error('does not exist')
- }
- }
- }
|