Home / Function/ parseFilters() — vue Function Reference

parseFilters() — vue Function Reference

Architecture documentation for the parseFilters() function in filter-parser.ts from the vue codebase.

Entity Profile

Dependency Diagram

graph TD
  864d3348_97c0_ef1e_0722_64a34582d8e6["parseFilters()"]
  2e03f8d2_4a5a_f1cd_1d7b_db95ba63549e["getBindingAttr()"]
  2e03f8d2_4a5a_f1cd_1d7b_db95ba63549e -->|calls| 864d3348_97c0_ef1e_0722_64a34582d8e6
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3["processAttrs()"]
  a8b5582c_75a3_d739_c9b5_27e2ceb67bc3 -->|calls| 864d3348_97c0_ef1e_0722_64a34582d8e6
  98ee1e5f_4546_f8dd_b03c_1579380b057f["parseText()"]
  98ee1e5f_4546_f8dd_b03c_1579380b057f -->|calls| 864d3348_97c0_ef1e_0722_64a34582d8e6
  0a68a901_b172_ab9b_7ad9_13a63c4556df["wrapFilter()"]
  864d3348_97c0_ef1e_0722_64a34582d8e6 -->|calls| 0a68a901_b172_ab9b_7ad9_13a63c4556df
  style 864d3348_97c0_ef1e_0722_64a34582d8e6 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

src/compiler/parser/filter-parser.ts lines 3–104

export function parseFilters(exp: string): string {
  let inSingle = false
  let inDouble = false
  let inTemplateString = false
  let inRegex = false
  let curly = 0
  let square = 0
  let paren = 0
  let lastFilterIndex = 0
  let c, prev, i, expression, filters

  for (i = 0; i < exp.length; i++) {
    prev = c
    c = exp.charCodeAt(i)
    if (inSingle) {
      if (c === 0x27 && prev !== 0x5c) inSingle = false
    } else if (inDouble) {
      if (c === 0x22 && prev !== 0x5c) inDouble = false
    } else if (inTemplateString) {
      if (c === 0x60 && prev !== 0x5c) inTemplateString = false
    } else if (inRegex) {
      if (c === 0x2f && prev !== 0x5c) inRegex = false
    } else if (
      c === 0x7c && // pipe
      exp.charCodeAt(i + 1) !== 0x7c &&
      exp.charCodeAt(i - 1) !== 0x7c &&
      !curly &&
      !square &&
      !paren
    ) {
      if (expression === undefined) {
        // first filter, end of expression
        lastFilterIndex = i + 1
        expression = exp.slice(0, i).trim()
      } else {
        pushFilter()
      }
    } else {
      switch (c) {
        case 0x22:
          inDouble = true
          break // "
        case 0x27:
          inSingle = true
          break // '
        case 0x60:
          inTemplateString = true
          break // `
        case 0x28:
          paren++
          break // (
        case 0x29:
          paren--
          break // )
        case 0x5b:
          square++
          break // [
        case 0x5d:
          square--
          break // ]
        case 0x7b:
          curly++
          break // {
        case 0x7d:
          curly--
          break // }
      }
      if (c === 0x2f) {
        // /
        let j = i - 1
        let p
        // find first non-whitespace prev char
        for (; j >= 0; j--) {
          p = exp.charAt(j)
          if (p !== ' ') break
        }
        if (!p || !validDivisionCharRE.test(p)) {
          inRegex = true
        }
      }
    }
  }

  if (expression === undefined) {
    expression = exp.slice(0, i).trim()
  } else if (lastFilterIndex !== 0) {
    pushFilter()
  }

  function pushFilter() {
    ;(filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim())
    lastFilterIndex = i + 1
  }

  if (filters) {
    for (i = 0; i < filters.length; i++) {
      expression = wrapFilter(expression, filters[i])
    }
  }

  return expression
}

Domain

Subdomains

Calls

Frequently Asked Questions

What does parseFilters() do?
parseFilters() is a function in the vue codebase.
What does parseFilters() call?
parseFilters() calls 1 function(s): wrapFilter.
What calls parseFilters()?
parseFilters() is called by 3 function(s): getBindingAttr, parseText, processAttrs.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free