{"version":3,"file":"index.mjs","sources":["../src/theme.ts","../src/less.ts","../src/env/utils.ts","../src/env/index.ts"],"sourcesContent":["import { type PluginOption } from \"vite\"\r\nimport { theme } from \"ant-design-vue\"\r\nimport { namespace } from \"@chenzoho/ldt-vue-config\"\r\n\r\nconst GLOBAL_THEME_FILE_NAME = \"_app.theme.css\"\r\n\r\n/**\r\n * 创建Vite插件，用于生成主题css文件\r\n * @param colors - 主题颜色数组\r\n * @returns\r\n */\r\nasync function createAppThemePlugin(colors: Record<string, string> = { default: \"#1677ff\" }): Promise<PluginOption> {\r\n\tconst dynamicCss: Array<string> = []\r\n\tlet isBuild = false\r\n\r\n\t// 从主题中引入必要的变量\r\n\tconst { darkAlgorithm, defaultAlgorithm, defaultSeed } = theme\r\n\r\n\treturn {\r\n\t\tname: \"vite-dynamic-css-var\",\r\n\t\tasync configResolved(_config) {\r\n\t\t\tisBuild = !_config.env.DEV\r\n\t\t\tconst spilt = isBuild ? \"\" : \"\\r\\n\"\r\n\r\n\t\t\tObject.entries(colors).forEach(([key, value]) => {\r\n\t\t\t\t// 将默认的colorPrimary赋值给defaultSeed对象\r\n\t\t\t\tdefaultSeed.colorPrimary = value\r\n\t\t\t\t// 根据darkAlgorithm和defaultSeed生成dark主题\r\n\t\t\t\tconst dark = darkAlgorithm(defaultSeed)\r\n\t\t\t\t// 根据defaultAlgorithm和defaultSeed生成light主题\r\n\t\t\t\tconst light = defaultAlgorithm(defaultSeed)\r\n\r\n\t\t\t\tconst root = key == \"default\" ? \":root\" : `.${key}`\r\n\t\t\t\tdynamicCss.push(generateCssVar(root, spilt, light))\r\n\t\t\t\tdynamicCss.push(generateCssVar(`${root} .dark`, spilt, dark))\r\n\t\t\t})\r\n\t\t},\r\n\t\ttransformIndexHtml(html) {\r\n\t\t\tif (isBuild) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\thtml,\r\n\t\t\t\t\ttags: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttag: \"link\",\r\n\t\t\t\t\t\t\tattrs: {\r\n\t\t\t\t\t\t\t\trel: \"stylesheet\",\r\n\t\t\t\t\t\t\t\ttype: \"text/css\",\r\n\t\t\t\t\t\t\t\thref: `/${GLOBAL_THEME_FILE_NAME}`\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tinjectTo: \"head-prepend\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn {\r\n\t\t\t\t\thtml,\r\n\t\t\t\t\ttags: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttag: \"style\",\r\n\t\t\t\t\t\t\tattrs: {\r\n\t\t\t\t\t\t\t\ttype: \"text/css\",\r\n\t\t\t\t\t\t\t\t\"data-vite-dev-id\": \"vite-dynamic-css-var\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tinjectTo: \"head-prepend\",\r\n\t\t\t\t\t\t\tchildren: dynamicCss.join(\"\\r\\n\")\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tasync generateBundle() {\r\n\t\t\ttry {\r\n\t\t\t\tthis.emitFile({\r\n\t\t\t\t\ttype: \"asset\",\r\n\t\t\t\t\tfileName: GLOBAL_THEME_FILE_NAME,\r\n\t\t\t\t\tsource: dynamicCss.join(\"\\r\\n\")\r\n\t\t\t\t})\r\n\t\t\t\tconsole.log(`[${namespace}] - theme variables have been injected into ${GLOBAL_THEME_FILE_NAME}`)\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.log(`[${namespace}] - an error occurred while theme variables injected `)\r\n\t\t\t\tconsole.error(`${error instanceof Error ? error.message : String(error)}`)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * 将字符串转换为驼峰命名法。\r\n * @param str - 要转换的字符串。\r\n * @returns 转换后的字符串。\r\n */\r\nfunction getKebabCase(str) {\r\n\tlet temp = str.replace(/[A-Z]/g, function (i) {\r\n\t\treturn \"-\" + i.toLowerCase()\r\n\t})\r\n\tif (temp.slice(0, 1) === \"-\") {\r\n\t\ttemp = temp.slice(1)\r\n\t}\r\n\treturn temp\r\n}\r\n\r\n/**\r\n * 生成CSS变量\r\n * @param root - 根节点选择器\r\n * @param theme - 主题对象，包含CSS变量和值的键值对\r\n * @param spilt - 分隔符\r\n * @returns 返回包含CSS变量的根节点选择器\r\n */\r\nfunction generateCssVar(root: string, spilt: string, theme: Record<string, any>) {\r\n\t// 将主题对象转化为键值对数组\r\n\tconst cssVar = Object.entries(theme)\r\n\t\t// 将每个键值对转换为CSS变量声明，并添加分号\r\n\t\t.map(([key, value]) => {\r\n\t\t\treturn `--${getKebabCase(key)}: ${value};`\r\n\t\t})\r\n\t\t// 使用换行符连接所有CSS变量声明\r\n\t\t.join(spilt)\r\n\r\n\t// 返回包含CSS变量的根节点选择器\r\n\treturn `${root} { ${cssVar} }`\r\n}\r\n\r\nexport { createAppThemePlugin }\r\n","import { namespace } from \"@chenzoho/ldt-vue-config\"\r\n\r\n/**\r\n * less全局注入变量\r\n * @param namespace 命名空间\r\n * @param configPath less变量文件路径\r\n * @param params less变量\r\n */\r\nexport const createViteLess = (configPath: string | undefined = undefined, params: Record<string, any> = {}) => {\r\n\t// 定义一个merge对象，用于存储最终的less变量\r\n\tconst merge: Record<string, any> = {\r\n\t\t// 将namespace属性添加到merge对象中\r\n\t\t...{ namespace: namespace },\r\n\t\t// 将params参数添加到merge对象中\r\n\t\t...params\r\n\t}\r\n\tif (configPath) {\r\n\t\tmerge.hack = `true;@import (reference) '${configPath}';`\r\n\t}\r\n\r\n\tconsole.log(`[${namespace}] - less variables have been injected`)\r\n\r\n\t// 返回一个对象，包含less编译的配置信息\r\n\treturn {\r\n\t\t// 允许使用js\r\n\t\tjavascriptEnabled: true,\r\n\t\t// 全局less变量\r\n\t\tglobalVars: {\r\n\t\t\t...merge\r\n\t\t}\r\n\t}\r\n}\r\n","export const ENV_CONFIG_PREFIX = \"VITE_GLOB_\"\r\n\r\n/**\r\n *  创建配置文件\r\n * @param namespace 命名空间\r\n * @param config 配置内容\r\n */\r\nexport function createEnv({ namespace, config, prefix = ENV_CONFIG_PREFIX }): string {\r\n\ttry {\r\n\t\tconst reg = new RegExp(`^(${prefix})`)\r\n\r\n\t\tObject.keys(config).forEach(key => {\r\n\t\t\tif (!reg.test(key)) {\r\n\t\t\t\tReflect.deleteProperty(config, key)\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tconst windowConf = `window.${namespace}`\r\n\t\tconst configStr = `${windowConf}=${JSON.stringify(config)};\r\n\t\tObject.freeze(${windowConf});\r\n\t\tObject.defineProperty(window, \"${namespace}\", {\r\n\t\t  configurable: false,\r\n\t\t  writable: false,\r\n\t\t});`.replace(/\\n\\s*/g, \"\")\r\n\r\n\t\tconsole.log(`[${namespace}] - env variables have been injected`)\r\n\r\n\t\treturn configStr\r\n\t} catch (error) {\r\n\t\tconsole.error(`[${namespace}] - an error occurred while env variables injected:`)\r\n\t\tconsole.error(`${error instanceof Error ? error.message : String(error)}`)\r\n\t\treturn \"\"\r\n\t}\r\n}\r\n","import { PluginOption } from \"vite\"\r\nimport { createEnv } from \"./utils\"\r\nimport { namespace, GlobEnv } from \"@chenzoho/ldt-vue-config\"\r\n\r\n/**\r\n * @description: 将环境变量转换成json格式\r\n */\r\nexport function wrapperEnv(envConf: Record<string, any>): GlobEnv {\r\n\tconst ret: any = {}\r\n\r\n\tfor (const envName of Object.keys(envConf)) {\r\n\t\tlet realName = envConf[envName].replace(/\\\\n/g, \"\\n\")\r\n\t\trealName = realName === \"true\" ? true : realName === \"false\" ? false : realName\r\n\r\n\t\tif (envName === \"VITE_PORT\") {\r\n\t\t\trealName = Number(realName)\r\n\t\t}\r\n\t\tif (envName === \"VITE_PROXY\" && realName) {\r\n\t\t\ttry {\r\n\t\t\t\trealName = JSON.parse(realName.replace(/'/g, '\"'))\r\n\t\t\t} catch (error) {\r\n\t\t\t\trealName = \"\"\r\n\t\t\t}\r\n\t\t}\r\n\t\tret[envName] = realName\r\n\t\tif (typeof realName === \"string\") {\r\n\t\t\tprocess.env[envName] = realName\r\n\t\t} else if (typeof realName === \"object\") {\r\n\t\t\tprocess.env[envName] = JSON.stringify(realName)\r\n\t\t}\r\n\t}\r\n\r\n\treturn ret\r\n}\r\n\r\n/**\r\n * 创建Vite插件，用于生成静态配置文件\r\n * @param colors - 主题颜色数组\r\n * @returns\r\n */\r\nasync function createAppEnvPlugin(viteEnv: GlobEnv): Promise<PluginOption> {\r\n\tconst dynamicJs: Array<string> = []\r\n\r\n\treturn {\r\n\t\tname: \"vite-dynamic-env-var\",\r\n\t\tasync configResolved(_config) {\r\n\t\t\tconst env = createEnv({ namespace: namespace, config: viteEnv }) ?? \"\"\r\n\t\t\tdynamicJs.push(env)\r\n\t\t},\r\n\t\ttransformIndexHtml(html) {\r\n\t\t\treturn {\r\n\t\t\t\thtml,\r\n\t\t\t\ttags: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttag: \"script\",\r\n\t\t\t\t\t\tattrs: {\r\n\t\t\t\t\t\t\ttype: \"text/javascript\",\r\n\t\t\t\t\t\t\t\"vite-dev-id\": \"vite-dynamic-env-var\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tinjectTo: \"head-prepend\",\r\n\t\t\t\t\t\tchildren: dynamicJs.join(\"\\r\\n\")\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport { createAppEnvPlugin }\r\n"],"names":["GLOBAL_THEME_FILE_NAME","createAppThemePlugin","colors","dynamicCss","isBuild","darkAlgorithm","defaultAlgorithm","defaultSeed","theme","_config","spilt","key","value","dark","light","root","generateCssVar","html","namespace","error","getKebabCase","str","temp","i","cssVar","createViteLess","configPath","params","merge","ENV_CONFIG_PREFIX","createEnv","config","prefix","reg","windowConf","configStr","wrapperEnv","envConf","ret","envName","realName","createAppEnvPlugin","viteEnv","dynamicJs","env"],"mappings":"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"}