import { Minimatch } from 'minimatch' import type { GlobOptions } from './glob.js' /** * Return true if the patterns provided contain any magic glob characters, * given the options provided. * * Brace expansion is not considered "magic" unless the `magicalBraces` option * is set, as brace expansion just turns one string into an array of strings. * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and * `'xby'` both do not contain any magic glob characters, and it's treated the * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true` * is in the options, brace expansion _is_ treated as a pattern having magic. */ export const hasMagic = ( pattern: string | string[], options: GlobOptions = {}, ): boolean => { for (const p of Array.isArray(pattern) ? pattern : [pattern]) { if (new Minimatch(p, options).hasMagic()) return true } return false }