ignore-sync
Version:
a CLI tool to build and sync *ignore files across files and repositories
54 lines (46 loc) • 1.27 kB
JavaScript
import path from 'node:path'
import fg from 'fast-glob'
import cleanupIgnoreSyncFile from './cleanupIgnoreSyncFile.js'
import { LINE_BREAK } from './constants.js'
const decodeIgnoreSyncFile = (ignoreSyncFile) => {
const normalizedIgnoreSyncFile = cleanupIgnoreSyncFile(ignoreSyncFile)
return normalizedIgnoreSyncFile.split(LINE_BREAK).reduce((blocks, line) => {
const sourceMatch = /^\[(.*)\]$/u.exec(line)
if (sourceMatch) {
return [
...blocks,
{
source: sourceMatch[1],
data: [],
},
]
}
const lastBlock = blocks.at(-1)
if (!lastBlock) {
throw new Error('source `[]` not found before ignore pattern is found')
}
if (['local', 'relative'].includes(lastBlock.source)) {
const pattern = path.posix.join('.', line)
const files = fg.sync([pattern], {
absolute: false,
dot: true,
onlyFiles: true,
})
return [
...blocks.slice(0, -1),
{
...lastBlock,
data: [...lastBlock.data, ...files],
},
]
}
return [
...blocks.slice(0, -1),
{
...lastBlock,
data: [...lastBlock.data, line],
},
]
}, [])
}
export default decodeIgnoreSyncFile