clientInjections.ts — vite Source File
Architecture documentation for clientInjections.ts, a typescript file in the vite codebase. 18 imports, 3 dependents.
Entity Profile
Dependency Diagram
graph LR 706c7fc5_ca45_d178_75a9_66940b856450["clientInjections.ts"] 5abb8c87_ffcb_f2d4_7421_e36705d9e5c7["plugin.ts"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 5abb8c87_ffcb_f2d4_7421_e36705d9e5c7 1dc2cf7d_5d97_c778_8c33_6449a7607aef["Plugin"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 1dc2cf7d_5d97_c778_8c33_6449a7607aef 7da774f9_eca5_d54e_6e01_6bee7d460a2b["config.ts"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 7da774f9_eca5_d54e_6e01_6bee7d460a2b eb5604c2_58e1_1c00_5a1a_5d97ea5236ad["ResolvedConfig"] 706c7fc5_ca45_d178_75a9_66940b856450 --> eb5604c2_58e1_1c00_5a1a_5d97ea5236ad 545df65b_7f67_94d3_e2e8_a592d5e64b8f["constants.ts"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 545df65b_7f67_94d3_e2e8_a592d5e64b8f 031bc221_67a8_c579_f2bf_bb30a08beeb2["utils.ts"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 031bc221_67a8_c579_f2bf_bb30a08beeb2 2aff86e8_0c9d_22cb_6536_c1321e1aaa1d["isObject"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 2aff86e8_0c9d_22cb_6536_c1321e1aaa1d a4adb1a7_cf54_091f_eb63_8217e684a8e1["normalizePath"] 706c7fc5_ca45_d178_75a9_66940b856450 --> a4adb1a7_cf54_091f_eb63_8217e684a8e1 369388dc_006d_6dcb_70b4_e174e2ad592f["resolveHostname"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 369388dc_006d_6dcb_70b4_e174e2ad592f abfc9e70_3c15_b3f0_a595_3cf27afb7e64["utils.ts"] 706c7fc5_ca45_d178_75a9_66940b856450 --> abfc9e70_3c15_b3f0_a595_3cf27afb7e64 10b9dea8_362c_1af2_93be_afa4dd9aed9e["cleanUrl"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 10b9dea8_362c_1af2_93be_afa4dd9aed9e 0c33ff62_54e9_5c90_902b_b26728e71fca["environment.ts"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 0c33ff62_54e9_5c90_902b_b26728e71fca 16a00926_f0e9_60f1_3006_9132a6d78745["perEnvironmentState"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 16a00926_f0e9_60f1_3006_9132a6d78745 6e6f4bb4_92d1_caf8_3dbc_8f1aaeb851bd["define.ts"] 706c7fc5_ca45_d178_75a9_66940b856450 --> 6e6f4bb4_92d1_caf8_3dbc_8f1aaeb851bd style 706c7fc5_ca45_d178_75a9_66940b856450 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import path from 'node:path'
import fs from 'node:fs'
import type { Plugin } from '../plugin'
import type { ResolvedConfig } from '../config'
import { CLIENT_ENTRY, ENV_ENTRY } from '../constants'
import { isObject, normalizePath, resolveHostname } from '../utils'
import { cleanUrl } from '../../shared/utils'
import { perEnvironmentState } from '../environment'
import { replaceDefine, serializeDefine } from './define'
// ids in transform are normalized to unix style
const normalizedClientEntry = normalizePath(CLIENT_ENTRY)
const normalizedEnvEntry = normalizePath(ENV_ENTRY)
/**
* some values used by the client needs to be dynamically injected by the server
* @server-only
*/
export function clientInjectionsPlugin(config: ResolvedConfig): Plugin {
let injectConfigValues: (code: string) => string
const getDefineReplacer = perEnvironmentState((environment) => {
const userDefine: Record<string, any> = {}
for (const key in environment.config.define) {
// import.meta.env.* is handled in `importAnalysis` plugin
if (!key.startsWith('import.meta.env.')) {
userDefine[key] = environment.config.define[key]
}
}
const serializedDefines = serializeDefine(userDefine)
const definesReplacement = () => serializedDefines
return (code: string) => code.replace(`__DEFINES__`, definesReplacement)
})
return {
name: 'vite:client-inject',
async buildStart() {
injectConfigValues = await createClientConfigValueReplacer(config)
},
async transform(code, id) {
const ssr = this.environment.config.consumer === 'server'
const cleanId = cleanUrl(id)
if (cleanId === normalizedClientEntry || cleanId === normalizedEnvEntry) {
const defineReplacer = getDefineReplacer(this)
return defineReplacer(injectConfigValues(code))
} else if (!ssr && code.includes('process.env.NODE_ENV')) {
// replace process.env.NODE_ENV instead of defining a global
// for it to avoid shimming a `process` object during dev,
// avoiding inconsistencies between dev and build
const nodeEnv =
this.environment.config.define?.['process.env.NODE_ENV'] ||
JSON.stringify(process.env.NODE_ENV || config.mode)
return await replaceDefine(this.environment, code, id, {
'process.env.NODE_ENV': nodeEnv,
'global.process.env.NODE_ENV': nodeEnv,
'globalThis.process.env.NODE_ENV': nodeEnv,
})
}
},
}
// ... (87 more lines)
Domain
Subdomains
Functions
Dependencies
Imported By
Source
Frequently Asked Questions
What does clientInjections.ts do?
clientInjections.ts is a source file in the vite codebase, written in typescript. It belongs to the PluginSystem domain, AssetManagement subdomain.
What functions are defined in clientInjections.ts?
clientInjections.ts defines 4 function(s): clientInjectionsPlugin, createClientConfigValueReplacer, escapeReplacement, getHmrImplementation.
What does clientInjections.ts depend on?
clientInjections.ts imports 18 module(s): Plugin, ResolvedConfig, cleanUrl, config.ts, constants.ts, define.ts, environment.ts, isObject, and 10 more.
What files import clientInjections.ts?
clientInjections.ts is imported by 3 file(s): fullBundleEnvironment.ts, index.ts, indexHtml.ts.
Where is clientInjections.ts in the architecture?
clientInjections.ts is located at packages/vite/src/node/plugins/clientInjections.ts (domain: PluginSystem, subdomain: AssetManagement, directory: packages/vite/src/node/plugins).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free