Home / File/ brace-expansion.ts — tailwindcss Source File

brace-expansion.ts — tailwindcss Source File

Architecture documentation for brace-expansion.ts, a typescript file in the tailwindcss codebase. 2 imports, 3 dependents.

File typescript OxideEngine Extractor 2 imports 3 dependents 3 functions

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

Dependencies

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