brace-expansion.ts — tailwindcss Source File
Architecture documentation for brace-expansion.ts, a typescript file in the tailwindcss codebase. 2 imports, 3 dependents.
Entity Profile
Dependency Diagram
graph LR 5df5aa0d_5ac4_161a_e624_dc3b15de4a28["brace-expansion.ts"] ef204000_8998_5a6c_5455_324b37624713["segment.ts"] 5df5aa0d_5ac4_161a_e624_dc3b15de4a28 --> ef204000_8998_5a6c_5455_324b37624713 f712ed47_45d4_4e5a_dd73_fdefa1da71da["segment"] 5df5aa0d_5ac4_161a_e624_dc3b15de4a28 --> f712ed47_45d4_4e5a_dd73_fdefa1da71da 5af9cd3c_2cf4_9dee_376e_fc39122d865a["index.ts"] 5af9cd3c_2cf4_9dee_376e_fc39122d865a --> 5df5aa0d_5ac4_161a_e624_dc3b15de4a28 07f544e7_fcf4_1c8c_b2e3_780137ceba92["brace-expansion.bench.ts"] 07f544e7_fcf4_1c8c_b2e3_780137ceba92 --> 5df5aa0d_5ac4_161a_e624_dc3b15de4a28 a9a0b367_fa54_69de_0251_ecad212babdd["brace-expansion.test.ts"] a9a0b367_fa54_69de_0251_ecad212babdd --> 5df5aa0d_5ac4_161a_e624_dc3b15de4a28 style 5df5aa0d_5ac4_161a_e624_dc3b15de4a28 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { segment } from './segment'
const NUMERICAL_RANGE = /^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/
export function expand(pattern: string): string[] {
let index = pattern.indexOf('{')
if (index === -1) return [pattern]
let result: string[] = []
let pre = pattern.slice(0, index)
let rest = pattern.slice(index)
// Find the matching closing brace
let depth = 0
let endIndex = rest.lastIndexOf('}')
for (let i = 0; i < rest.length; i++) {
let char = rest[i]
if (char === '{') {
depth++
} else if (char === '}') {
depth--
if (depth === 0) {
endIndex = i
break
}
}
}
if (endIndex === -1) {
throw new Error(`The pattern \`${pattern}\` is not balanced.`)
}
let inside = rest.slice(1, endIndex)
let post = rest.slice(endIndex + 1)
let parts: string[]
if (isSequence(inside)) {
parts = expandSequence(inside)
} else {
parts = segment(inside, ',')
}
parts = parts.flatMap((part) => expand(part))
let expandedTail = expand(post)
for (let tail of expandedTail) {
for (let part of parts) {
result.push(pre + part + tail)
}
}
return result
}
function isSequence(str: string): boolean {
return NUMERICAL_RANGE.test(str)
}
/**
* Expands a sequence string like "01..20" (optionally with a step).
*/
function expandSequence(seq: string): string[] {
let seqMatch = seq.match(NUMERICAL_RANGE)
if (!seqMatch) {
return [seq]
}
let [, start, end, stepStr] = seqMatch
let step = stepStr ? parseInt(stepStr, 10) : undefined
let result: string[] = []
if (/^-?\d+$/.test(start) && /^-?\d+$/.test(end)) {
let startNum = parseInt(start, 10)
let endNum = parseInt(end, 10)
if (step === undefined) {
step = startNum <= endNum ? 1 : -1
}
if (step === 0) {
throw new Error('Step cannot be zero in sequence expansion.')
}
let increasing = startNum < endNum
if (increasing && step < 0) step = -step
if (!increasing && step > 0) step = -step
for (let i = startNum; increasing ? i <= endNum : i >= endNum; i += step) {
result.push(i.toString())
}
}
return result
}
Domain
Subdomains
Functions
Dependencies
Imported By
Source
Frequently Asked Questions
What does brace-expansion.ts do?
brace-expansion.ts is a source file in the tailwindcss codebase, written in typescript. It belongs to the OxideEngine domain, Extractor subdomain.
What functions are defined in brace-expansion.ts?
brace-expansion.ts defines 3 function(s): expand, expandSequence, isSequence.
What does brace-expansion.ts depend on?
brace-expansion.ts imports 2 module(s): segment, segment.ts.
What files import brace-expansion.ts?
brace-expansion.ts is imported by 3 file(s): brace-expansion.bench.ts, brace-expansion.test.ts, index.ts.
Where is brace-expansion.ts in the architecture?
brace-expansion.ts is located at packages/tailwindcss/src/utils/brace-expansion.ts (domain: OxideEngine, subdomain: Extractor, directory: packages/tailwindcss/src/utils).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free