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 dc817c0a_ee3b_7666_cb9d_ef0ab5b72986["brace-expansion.ts"] bb9924cc_8308_a1f9_0e30_76de45a64970["segment.ts"] dc817c0a_ee3b_7666_cb9d_ef0ab5b72986 --> bb9924cc_8308_a1f9_0e30_76de45a64970 c58cbb33_f3cc_0b4f_844a_15bf66a1dc61["segment"] dc817c0a_ee3b_7666_cb9d_ef0ab5b72986 --> c58cbb33_f3cc_0b4f_844a_15bf66a1dc61 23bd4e2f_c62c_a942_7014_8486569053ee["index.ts"] 23bd4e2f_c62c_a942_7014_8486569053ee --> dc817c0a_ee3b_7666_cb9d_ef0ab5b72986 dad136dd_a9a6_dcc1_d832_37584d5372a8["brace-expansion.bench.ts"] dad136dd_a9a6_dcc1_d832_37584d5372a8 --> dc817c0a_ee3b_7666_cb9d_ef0ab5b72986 d4b93066_2541_11a9_46a9_f54c21bf0b95["brace-expansion.test.ts"] d4b93066_2541_11a9_46a9_f54c21bf0b95 --> dc817c0a_ee3b_7666_cb9d_ef0ab5b72986 style dc817c0a_ee3b_7666_cb9d_ef0ab5b72986 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 Oxide domain, Scanner 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: Oxide, subdomain: Scanner, 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