prefixIdentifiers.ts — vue Source File
Architecture documentation for prefixIdentifiers.ts, a typescript file in the vue codebase. 8 imports, 3 dependents.
Entity Profile
Dependency Diagram
graph LR 799ac4a1_7d08_dd24_f075_2bfd21b8092b["prefixIdentifiers.ts"] 946e0fa6_6c05_b820_0bd7_980d6d869192["babelUtils.ts"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 946e0fa6_6c05_b820_0bd7_980d6d869192 16e9bc98_ed99_1008_693b_a5b55bf0225e["isStaticProperty"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 16e9bc98_ed99_1008_693b_a5b55bf0225e 6821e51e_382f_8ff8_ca9d_3b77f896018a["walkIdentifiers"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 6821e51e_382f_8ff8_ca9d_3b77f896018a 1502a238_61f0_9afa_8c3c_71d2bb769820["types.ts"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 1502a238_61f0_9afa_8c3c_71d2bb769820 3865741e_556d_ec8c_c327_fe6fdcb59cfd["BindingMetadata"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 3865741e_556d_ec8c_c327_fe6fdcb59cfd 4a93c99c_d38c_80fb_558a_82f7e7f0d606["magic-string"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 4a93c99c_d38c_80fb_558a_82f7e7f0d606 68fab7cc_2ec3_2365_0e38_d221542cf121["parser"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 68fab7cc_2ec3_2365_0e38_d221542cf121 156bf2e1_8a13_f22d_5437_54f14bcef8fa["util"] 799ac4a1_7d08_dd24_f075_2bfd21b8092b --> 156bf2e1_8a13_f22d_5437_54f14bcef8fa ff52d56b_a346_9a70_961a_c5aca0690626["compileTemplate.ts"] ff52d56b_a346_9a70_961a_c5aca0690626 --> 799ac4a1_7d08_dd24_f075_2bfd21b8092b b08241c7_738d_9e08_b885_fad82facd4f3["cssVars.ts"] b08241c7_738d_9e08_b885_fad82facd4f3 --> 799ac4a1_7d08_dd24_f075_2bfd21b8092b df0a1012_59c3_28fb_722a_df24d7f58ebd["prefixIdentifiers.spec.ts"] df0a1012_59c3_28fb_722a_df24d7f58ebd --> 799ac4a1_7d08_dd24_f075_2bfd21b8092b style 799ac4a1_7d08_dd24_f075_2bfd21b8092b fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import MagicString from 'magic-string'
import { parseExpression, ParserOptions, ParserPlugin } from '@babel/parser'
import { makeMap } from 'shared/util'
import { isStaticProperty, walkIdentifiers } from './babelUtils'
import { BindingMetadata } from './types'
const doNotPrefix = makeMap(
'Infinity,undefined,NaN,isFinite,isNaN,' +
'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
'require,' + // for webpack
'arguments,' + // parsed as identifier but is a special keyword...
'_c' // cached to save property access
)
/**
* The input is expected to be a valid expression.
*/
export function prefixIdentifiers(
source: string,
isFunctional = false,
isTS = false,
babelOptions: ParserOptions = {},
bindings?: BindingMetadata
) {
const s = new MagicString(source)
const plugins: ParserPlugin[] = [
...(isTS ? (['typescript'] as const) : []),
...(babelOptions?.plugins || [])
]
const ast = parseExpression(source, {
...babelOptions,
plugins
})
const isScriptSetup = bindings && bindings.__isScriptSetup !== false
walkIdentifiers(
ast,
(ident, parent) => {
const { name } = ident
if (doNotPrefix(name)) {
return
}
let prefix = `_vm.`
if (isScriptSetup) {
const type = bindings[name]
if (type && type.startsWith('setup')) {
prefix = `_setup.`
}
}
if (isStaticProperty(parent) && parent.shorthand) {
// property shorthand like { foo }, we need to add the key since
// we rewrite the value
// { foo } -> { foo: _vm.foo }
s.appendLeft(ident.end!, `: ${prefix}${name}`)
} else {
s.prependRight(ident.start!, prefix)
}
},
node => {
if (node.type === 'WithStatement') {
s.remove(node.start!, node.body.start! + 1)
s.remove(node.end! - 1, node.end!)
if (!isFunctional) {
s.prependRight(
node.start!,
`var _vm=this,_c=_vm._self._c${
isScriptSetup ? `,_setup=_vm._self._setupProxy;` : `;`
}`
)
}
}
}
)
return s.toString()
}
Domain
Subdomains
Functions
Dependencies
- BindingMetadata
- babelUtils.ts
- isStaticProperty
- magic-string
- parser
- types.ts
- util
- walkIdentifiers
Imported By
Source
Frequently Asked Questions
What does prefixIdentifiers.ts do?
prefixIdentifiers.ts is a source file in the vue codebase, written in typescript. It belongs to the CompilerSFC domain, TemplateTransformer subdomain.
What functions are defined in prefixIdentifiers.ts?
prefixIdentifiers.ts defines 1 function(s): prefixIdentifiers.
What does prefixIdentifiers.ts depend on?
prefixIdentifiers.ts imports 8 module(s): BindingMetadata, babelUtils.ts, isStaticProperty, magic-string, parser, types.ts, util, walkIdentifiers.
What files import prefixIdentifiers.ts?
prefixIdentifiers.ts is imported by 3 file(s): compileTemplate.ts, cssVars.ts, prefixIdentifiers.spec.ts.
Where is prefixIdentifiers.ts in the architecture?
prefixIdentifiers.ts is located at packages/compiler-sfc/src/prefixIdentifiers.ts (domain: CompilerSFC, subdomain: TemplateTransformer, directory: packages/compiler-sfc/src).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free