Home / File/ escape.ts — tailwindcss Source File

escape.ts — tailwindcss Source File

Architecture documentation for escape.ts, a typescript file in the tailwindcss codebase. 0 imports, 8 dependents.

File typescript Oxide Scanner 8 dependents 2 functions

Entity Profile

Dependency Diagram

graph LR
  efac73cf_6ebb_d715_c95b_77e505446ee2["escape.ts"]
  7600373a_3645_efb1_bcbb_e7c3fcb813ac["utils.ts"]
  7600373a_3645_efb1_bcbb_e7c3fcb813ac --> efac73cf_6ebb_d715_c95b_77e505446ee2
  ffe9c87e_35ad_f431_9625_80fc875792a7["migrate-js-config.ts"]
  ffe9c87e_35ad_f431_9625_80fc875792a7 --> efac73cf_6ebb_d715_c95b_77e505446ee2
  da5d1116_ab2a_437a_6b13_c1429fd546fa["plugin-api.ts"]
  da5d1116_ab2a_437a_6b13_c1429fd546fa --> efac73cf_6ebb_d715_c95b_77e505446ee2
  3d2f062b_d3ec_6b3a_dc32_9d2e4732e20e["plugin-functions.ts"]
  3d2f062b_d3ec_6b3a_dc32_9d2e4732e20e --> efac73cf_6ebb_d715_c95b_77e505446ee2
  eea0ec96_6369_abc2_64b3_490868392e31["compile.ts"]
  eea0ec96_6369_abc2_64b3_490868392e31 --> efac73cf_6ebb_d715_c95b_77e505446ee2
  23bd4e2f_c62c_a942_7014_8486569053ee["index.ts"]
  23bd4e2f_c62c_a942_7014_8486569053ee --> efac73cf_6ebb_d715_c95b_77e505446ee2
  e28cd4a7_4e1a_e79b_76f1_86c479c6640d["theme.ts"]
  e28cd4a7_4e1a_e79b_76f1_86c479c6640d --> efac73cf_6ebb_d715_c95b_77e505446ee2
  124d2857_5a79_363d_4a56_1431b12b5030["escape.test.ts"]
  124d2857_5a79_363d_4a56_1431b12b5030 --> efac73cf_6ebb_d715_c95b_77e505446ee2
  style efac73cf_6ebb_d715_c95b_77e505446ee2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

// https://drafts.csswg.org/cssom/#serialize-an-identifier
export function escape(value: string) {
  if (arguments.length === 0) {
    throw new TypeError('`CSS.escape` requires an argument.')
  }
  let string = String(value)
  let length = string.length
  let index = -1
  let codeUnit: number
  let result = ''
  let firstCodeUnit = string.charCodeAt(0)

  if (
    // If the character is the first character and is a `-` (U+002D), and
    // there is no second character, […]
    length === 1 &&
    firstCodeUnit === 0x002d
  ) {
    return '\\' + string
  }

  while (++index < length) {
    codeUnit = string.charCodeAt(index)
    // Note: there’s no need to special-case astral symbols, surrogate
    // pairs, or lone surrogates.

    // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER
    // (U+FFFD).
    if (codeUnit === 0x0000) {
      result += '\uFFFD'
      continue
    }

    if (
      // If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
      // U+007F, […]
      (codeUnit >= 0x0001 && codeUnit <= 0x001f) ||
      codeUnit === 0x007f ||
      // If the character is the first character and is in the range [0-9]
      // (U+0030 to U+0039), […]
      (index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
      // If the character is the second character and is in the range [0-9]
      // (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
      (index === 1 && codeUnit >= 0x0030 && codeUnit <= 0x0039 && firstCodeUnit === 0x002d)
    ) {
      // https://drafts.csswg.org/cssom/#escape-a-character-as-code-point
      result += '\\' + codeUnit.toString(16) + ' '
      continue
    }

    // If the character is not handled by one of the above rules and is
    // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
    // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
    // U+005A), or [a-z] (U+0061 to U+007A), […]
    if (
      codeUnit >= 0x0080 ||
      codeUnit === 0x002d ||
      codeUnit === 0x005f ||
      (codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
      (codeUnit >= 0x0041 && codeUnit <= 0x005a) ||
      (codeUnit >= 0x0061 && codeUnit <= 0x007a)
    ) {
      // the character itself
      result += string.charAt(index)
      continue
    }

    // Otherwise, the escaped character.
    // https://drafts.csswg.org/cssom/#escape-a-character
    result += '\\' + string.charAt(index)
  }
  return result
}

export function unescape(escaped: string) {
  return escaped.replace(/\\([\dA-Fa-f]{1,6}[\t\n\f\r ]?|[\S\s])/g, (match) => {
    return match.length > 2
      ? String.fromCodePoint(Number.parseInt(match.slice(1).trim(), 16))
      : match[1]
  })
}

Domain

Subdomains

Functions

Frequently Asked Questions

What does escape.ts do?
escape.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 escape.ts?
escape.ts defines 2 function(s): escape, unescape.
What files import escape.ts?
escape.ts is imported by 8 file(s): compile.ts, escape.test.ts, index.ts, migrate-js-config.ts, plugin-api.ts, plugin-functions.ts, theme.ts, utils.ts.
Where is escape.ts in the architecture?
escape.ts is located at packages/tailwindcss/src/utils/escape.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