filter-parser.ts — vue Source File
Architecture documentation for filter-parser.ts, a typescript file in the vue codebase. 0 imports, 3 dependents.
Entity Profile
Dependency Diagram
graph LR 452898a7_6631_766c_1752_d0d7f2ce2517["filter-parser.ts"] 84ab3997_ca97_807e_f586_e8d0a26ded10["helpers.ts"] 84ab3997_ca97_807e_f586_e8d0a26ded10 --> 452898a7_6631_766c_1752_d0d7f2ce2517 101d3d34_ac07_228f_62b9_5d5ac4a0ea2e["index.ts"] 101d3d34_ac07_228f_62b9_5d5ac4a0ea2e --> 452898a7_6631_766c_1752_d0d7f2ce2517 e3eb242c_569d_4ef6_6acd_a6d0879fa6a1["text-parser.ts"] e3eb242c_569d_4ef6_6acd_a6d0879fa6a1 --> 452898a7_6631_766c_1752_d0d7f2ce2517 style 452898a7_6631_766c_1752_d0d7f2ce2517 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
const validDivisionCharRE = /[\w).+\-_$\]]/
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
}
function wrapFilter(exp: string, filter: string): string {
const i = filter.indexOf('(')
if (i < 0) {
// _f: resolveFilter
return `_f("${filter}")(${exp})`
} else {
const name = filter.slice(0, i)
const args = filter.slice(i + 1)
return `_f("${name}")(${exp}${args !== ')' ? ',' + args : args}`
}
}
Domain
Subdomains
Functions
Source
Frequently Asked Questions
What does filter-parser.ts do?
filter-parser.ts is a source file in the vue codebase, written in typescript. It belongs to the VueCore domain, VDom subdomain.
What functions are defined in filter-parser.ts?
filter-parser.ts defines 2 function(s): parseFilters, wrapFilter.
What files import filter-parser.ts?
filter-parser.ts is imported by 3 file(s): helpers.ts, index.ts, text-parser.ts.
Where is filter-parser.ts in the architecture?
filter-parser.ts is located at src/compiler/parser/filter-parser.ts (domain: VueCore, subdomain: VDom, directory: src/compiler/parser).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free