mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-20 07:26:46 +00:00
{配置兼容性}
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
import BLOG from '@/blog.config'
|
||||
import { useGlobal } from './global'
|
||||
import { deepClone } from './utils'
|
||||
import { deepClone, isUrl } from './utils'
|
||||
|
||||
/**
|
||||
* 读取配置顺序
|
||||
@@ -91,46 +91,62 @@ export const siteConfig = (key, defaultVal = null, extendConfig = {}) => {
|
||||
return defaultVal
|
||||
}
|
||||
|
||||
// 从Notion_CONFIG读取的配置通常都是字符串,适当转义
|
||||
return convertVal(val)
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置默认都是string类型;
|
||||
* 识别配置的值是否数字、布尔、[]数组,若是则转成对应类型
|
||||
* 从环境变量和NotionConfig读取的配置都是string类型;
|
||||
* 这里识别出配置的字符值若为否 数字、布尔、[]数组,{}对象,若是则转成对应类型
|
||||
* 使用JSON和eval两个函数
|
||||
* @param {*} val
|
||||
* @returns
|
||||
*/
|
||||
export const convertVal = val => {
|
||||
if (typeof val === 'string') {
|
||||
// 解析布尔
|
||||
if (val === 'true' || val === 'false') {
|
||||
return JSON.parse(val)
|
||||
}
|
||||
|
||||
// 解析数字,parseInt将字符串转换为数字
|
||||
if (/^\d+$/.test(val)) {
|
||||
return parseInt(val)
|
||||
}
|
||||
// 转移 [] , {} 这种json串为json对象
|
||||
try {
|
||||
const parsedJson = JSON.parse(val)
|
||||
// 检查解析后的结果是否是对象或数组
|
||||
if (typeof parsedJson === 'object' && parsedJson !== null) {
|
||||
return parsedJson
|
||||
}
|
||||
} catch (error) {
|
||||
// JSON 解析失败,返回原始字符串值
|
||||
return val
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.parse(val)
|
||||
} catch (error) {
|
||||
// 如果值是一个字符串但不是有效的 JSON 格式,直接返回字符串
|
||||
// 如果传入参数本身就是obj、数组、boolean 就无需处理
|
||||
if (typeof val !== 'string' || !val) {
|
||||
return val
|
||||
}
|
||||
|
||||
// 解析数字,parseInt将字符串转换为数字
|
||||
if (/^\d+$/.test(val)) {
|
||||
return parseInt(val)
|
||||
}
|
||||
|
||||
// 检测是否url
|
||||
if (isUrl(val)) {
|
||||
return val
|
||||
}
|
||||
// 检测是否url
|
||||
if (val === 'true' || val === 'false') {
|
||||
return JSON.parse(val)
|
||||
}
|
||||
|
||||
// 配置值前可能有污染的空格
|
||||
if (!val.indexOf('[') > 0 || val.indexOf('{')) {
|
||||
return val
|
||||
}
|
||||
|
||||
// 转换 [] , {} , true/false 这类字符串为对象
|
||||
try {
|
||||
// 尝试解析json
|
||||
const parsedJson = JSON.parse(val)
|
||||
if (parsedJson !== null) {
|
||||
return parsedJson
|
||||
}
|
||||
} catch (error) {
|
||||
try {
|
||||
// 尝试解析对象,对象解析能力不如上一步的json
|
||||
const evalObj = eval('(' + val + ')')
|
||||
if (evalObj !== null) {
|
||||
return evalObj
|
||||
}
|
||||
} catch (error) {
|
||||
// Ojbject 解析失败,返回原始字符串值
|
||||
return val
|
||||
}
|
||||
return val
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user