conventional-changelog-action/node_modules/conventional-changelog-pres.../index.js

60 lines
1.7 KiB
JavaScript

'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')
}
}
}