Files
documentation/node_modules/rtlcss/lib/config.js
2024-03-22 03:47:51 +05:30

104 lines
2.0 KiB
JavaScript

'use strict'
const corePlugin = require('./plugin.js')
const defaultOptions = {
autoRename: false,
autoRenameStrict: false,
blacklist: {},
clean: true,
greedy: false,
processUrls: false,
stringMap: [],
useCalc: false,
aliases: {},
processEnv: true
}
function sort (arr) {
return arr.sort((a, b) => a.priority - b.priority)
}
function setupStringMap (stringMap) {
if (!Array.isArray(stringMap)) {
return
}
let hasLeftRight = false
let hasLtrRtl = false
for (const map of stringMap) {
if (hasLeftRight && hasLtrRtl) {
break
} else if (map.name === 'left-right') {
hasLeftRight = true
} else if (map.name === 'ltr-rtl') {
hasLtrRtl = true
}
}
if (!hasLeftRight) {
stringMap.push({
name: 'left-right',
priority: 100,
exclusive: false,
search: ['left', 'Left', 'LEFT'],
replace: ['right', 'Right', 'RIGHT'],
options: { scope: '*', ignoreCase: false }
})
}
if (!hasLtrRtl) {
stringMap.push({
name: 'ltr-rtl',
priority: 100,
exclusive: false,
search: ['ltr', 'Ltr', 'LTR'],
replace: ['rtl', 'Rtl', 'RTL'],
options: { scope: '*', ignoreCase: false }
})
}
return sort(stringMap)
}
function setupPlugins (plugins) {
const newPlugins = []
if (!plugins || !plugins.some((plugin) => plugin.name === 'rtlcss')) {
newPlugins.push(corePlugin)
}
return sort([...newPlugins, ...plugins])
}
function setupHooks (hooks) {
const newHooks = {
pre () {},
post () {}
}
if (typeof hooks.pre === 'function') {
newHooks.pre = hooks.pre
}
if (typeof hooks.post === 'function') {
newHooks.post = hooks.post
}
return newHooks
}
module.exports.configure = (opts = {}, plugins = [], hooks = {}) => {
const config = { ...defaultOptions, ...opts }
// string map
config.stringMap = setupStringMap(config.stringMap)
// plugins
config.plugins = setupPlugins(plugins)
// hooks
config.hooks = setupHooks(hooks)
return config
}