mirror of https://github.com/curbengh/hexo-yam
fix: disable basename by invidual pattern
This commit is contained in:
parent
e6381ebed3
commit
b046d2a09e
|
@ -10,13 +10,23 @@ const gzip = promisify(zlib.gzip)
|
||||||
const br = require('zlib').brotliCompress ? promisify(require('zlib').brotliCompress) : require('iltorb').compress
|
const br = require('zlib').brotliCompress ? promisify(require('zlib').brotliCompress) : require('iltorb').compress
|
||||||
const micromatch = require('micromatch')
|
const micromatch = require('micromatch')
|
||||||
|
|
||||||
const isMatch = (path, patterns, options) => {
|
const isMatch = (path = '', patterns = [], options = {}) => {
|
||||||
if (path && patterns && patterns.length) {
|
if (path && patterns) {
|
||||||
return micromatch.isMatch(path, patterns, options)
|
if (path.length && patterns.length) {
|
||||||
} else {
|
if (typeof patterns === 'string') patterns = [patterns]
|
||||||
return false
|
for (const pattern of patterns) {
|
||||||
|
// disable basename if a pattern includes a slash
|
||||||
|
let { basename } = options
|
||||||
|
// only disable when basename is enabled
|
||||||
|
basename = basename && !pattern.includes('/')
|
||||||
|
if (micromatch.isMatch(path, pattern, { ...options, basename })) {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
function verbose (original, minified, path, ext) {
|
function verbose (original, minified, path, ext) {
|
||||||
const saved = ((original.length - minified.length) / original.length * 100).toFixed(2)
|
const saved = ((original.length - minified.length) / original.length * 100).toFixed(2)
|
||||||
|
@ -37,10 +47,6 @@ function minifyHtml (str, data) {
|
||||||
const { path } = data
|
const { path } = data
|
||||||
const { exclude, globOptions } = options
|
const { exclude, globOptions } = options
|
||||||
|
|
||||||
let excludeString = exclude || ''
|
|
||||||
if (Array.isArray(exclude)) excludeString = exclude.join('')
|
|
||||||
if (excludeString.includes('/')) globOptions.basename = false
|
|
||||||
|
|
||||||
// Return if a path matches exclusion pattern
|
// Return if a path matches exclusion pattern
|
||||||
if (isMatch(path, exclude, globOptions)) return str
|
if (isMatch(path, exclude, globOptions)) return str
|
||||||
|
|
||||||
|
@ -58,10 +64,6 @@ async function minifyCss (str, data) {
|
||||||
const { path } = data
|
const { path } = data
|
||||||
const { exclude, globOptions } = options
|
const { exclude, globOptions } = options
|
||||||
|
|
||||||
let excludeString = exclude || ''
|
|
||||||
if (exclude && Array.isArray(exclude)) excludeString = exclude.join('')
|
|
||||||
if (excludeString && excludeString.includes('/')) globOptions.basename = false
|
|
||||||
|
|
||||||
if (isMatch(path, exclude, globOptions)) return str
|
if (isMatch(path, exclude, globOptions)) return str
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -81,10 +83,6 @@ function minifyJs (str, data) {
|
||||||
const { path } = data
|
const { path } = data
|
||||||
const { exclude, globOptions } = options
|
const { exclude, globOptions } = options
|
||||||
|
|
||||||
let excludeString = exclude || ''
|
|
||||||
if (exclude && Array.isArray(exclude)) excludeString = exclude.join('')
|
|
||||||
if (excludeString && excludeString.includes('/')) globOptions.basename = false
|
|
||||||
|
|
||||||
if (isMatch(path, exclude, globOptions)) return str
|
if (isMatch(path, exclude, globOptions)) return str
|
||||||
|
|
||||||
// Terser doesn't like unsupported options
|
// Terser doesn't like unsupported options
|
||||||
|
|
|
@ -18,6 +18,7 @@ describe('html', () => {
|
||||||
const input = '<p id="">foo</p>'
|
const input = '<p id="">foo</p>'
|
||||||
const result = h(input, { path: '' })
|
const result = h(input, { path: '' })
|
||||||
const expected = Htmlminifier(input, hexo.config.minify.html)
|
const expected = Htmlminifier(input, hexo.config.minify.html)
|
||||||
|
|
||||||
expect(result).toBe(expected)
|
expect(result).toBe(expected)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -28,6 +29,7 @@ describe('html', () => {
|
||||||
const input = '<p id="">foo</p>'
|
const input = '<p id="">foo</p>'
|
||||||
const result = h(input, { path: '' })
|
const result = h(input, { path: '' })
|
||||||
const expected = Htmlminifier(input, customOpt)
|
const expected = Htmlminifier(input, customOpt)
|
||||||
|
|
||||||
expect(result).toBe(input)
|
expect(result).toBe(input)
|
||||||
expect(result).toBe(expected)
|
expect(result).toBe(expected)
|
||||||
})
|
})
|
||||||
|
@ -38,6 +40,7 @@ describe('html', () => {
|
||||||
|
|
||||||
const input = '<p id="">foo</p>'
|
const input = '<p id="">foo</p>'
|
||||||
const result = h(input, { path: 'foo/bar.min.html' })
|
const result = h(input, { path: 'foo/bar.min.html' })
|
||||||
|
|
||||||
expect(result).toBe(input)
|
expect(result).toBe(input)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -47,8 +50,45 @@ describe('html', () => {
|
||||||
|
|
||||||
const input = '<p id="">foo</p>'
|
const input = '<p id="">foo</p>'
|
||||||
const result = h(input, { path: 'foo/bar.html' })
|
const result = h(input, { path: 'foo/bar.html' })
|
||||||
|
|
||||||
expect(result).toBe(input)
|
expect(result).toBe(input)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('exclude - basename is true + slash', () => {
|
||||||
|
const exclude = ['**/baz', 'bar.html']
|
||||||
|
const globOptions = { basename: true }
|
||||||
|
hexo.config.minify.html.exclude = exclude
|
||||||
|
hexo.config.minify.html.globOptions = globOptions
|
||||||
|
|
||||||
|
const input = '<p id="">foo</p>'
|
||||||
|
const result = h(input, { path: 'foo/bar.html' })
|
||||||
|
|
||||||
|
expect(result).toBe(input)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('exclude - basename is false + slash', () => {
|
||||||
|
const exclude = ['**/baz', 'bar.html']
|
||||||
|
const globOptions = { basename: false }
|
||||||
|
hexo.config.minify.html.exclude = exclude
|
||||||
|
hexo.config.minify.html.globOptions = globOptions
|
||||||
|
|
||||||
|
const input = '<p id="">foo</p>'
|
||||||
|
const result = h(input, { path: 'foo/bar.html' })
|
||||||
|
const expected = Htmlminifier(input, hexo.config.minify.html)
|
||||||
|
|
||||||
|
expect(result).toBe(expected)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('null', () => {
|
||||||
|
hexo.config.minify.html.exclude = null
|
||||||
|
hexo.config.minify.html.globOptions = null
|
||||||
|
|
||||||
|
const input = '<p id="">foo</p>'
|
||||||
|
const result = h(input, { path: null })
|
||||||
|
const expected = Htmlminifier(input, hexo.config.minify.html)
|
||||||
|
|
||||||
|
expect(result).toBe(expected)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('css', () => {
|
describe('css', () => {
|
||||||
|
|
Loading…
Reference in New Issue