Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
7c27ac5f
U
uni-app
项目概览
DCloud
/
uni-app
3 个月 前同步成功
通知
725
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7c27ac5f
编写于
11月 13, 2020
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: merge pagesJson
上级
634ebf32
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
86 addition
and
0 deletion
+86
-0
.gitignore
.gitignore
+1
-0
packages/uni-cli-shared/src/pagesJson.ts
packages/uni-cli-shared/src/pagesJson.ts
+85
-0
未找到文件。
.gitignore
浏览文件 @
7c27ac5f
...
...
@@ -7,3 +7,4 @@ temp
explorations
TODOs.md
*.log
.history
packages/uni-cli-shared/src/pagesJson.ts
0 → 100644
浏览文件 @
7c27ac5f
type
Data
=
Record
<
string
,
any
>
interface
Customizer
{
(
a
:
unknown
,
b
:
unknown
,
k
:
string
):
unknown
}
const
isArray
=
Array
.
isArray
function
isPlainObject
(
a
:
unknown
):
a
is
Data
{
if
(
a
===
null
)
{
return
false
}
return
typeof
a
===
'
object
'
}
function
mergeWith
(
objects
:
Data
[],
customizer
:
Customizer
)
{
const
[
first
,
...
rest
]
=
objects
let
ret
=
first
rest
.
forEach
(
a
=>
{
ret
=
mergeTo
(
ret
,
a
,
customizer
)
})
return
ret
}
function
mergeTo
(
a
:
Data
,
b
:
Data
,
customizer
:
Customizer
)
{
const
ret
:
Data
=
{}
Object
.
keys
(
a
)
.
concat
(
Object
.
keys
(
b
))
.
forEach
(
k
=>
{
const
v
=
customizer
(
a
[
k
],
b
[
k
],
k
)
ret
[
k
]
=
typeof
v
===
'
undefined
'
?
a
[
k
]
:
v
})
return
ret
}
function
mergeWithRule
(
a
:
Data
[],
b
:
Data
[],
k
:
string
,
matchField
:
string
)
{
if
(
!
isArray
(
a
))
{
return
a
}
const
bMatchItems
:
Data
[]
=
[]
const
ret
=
a
.
map
(
aItem
=>
{
if
(
!
matchField
)
{
return
aItem
}
// 暂不考虑重复
const
bMatchItem
=
b
.
find
(
bItem
=>
aItem
[
matchField
]
===
bItem
[
matchField
])
if
(
bMatchItem
)
{
bMatchItems
.
push
(
bMatchItem
)
return
mergeWith
([
aItem
,
bMatchItem
],
createCustomizer
(
k
))
}
return
aItem
})
return
ret
.
concat
(
b
.
filter
(
bItem
=>
!
bMatchItems
.
includes
(
bItem
)))
}
function
customizeArray
(
a
:
any
[],
b
:
any
[],
k
:
string
)
{
if
(
k
===
'
pages
'
||
k
===
'
subPackages.pages
'
)
{
return
mergeWithRule
(
a
,
b
,
k
,
'
path
'
)
}
else
if
(
k
===
'
subPackages
'
)
{
return
mergeWithRule
(
a
,
b
,
k
,
'
root
'
)
}
return
b
}
function
customizeObject
(
a
:
Data
,
b
:
Data
,
k
:
string
)
{
return
mergeWith
([
a
,
b
],
createCustomizer
(
k
))
}
function
createCustomizer
(
key
?:
string
):
Customizer
{
return
function
customizer
(
a
:
unknown
,
b
:
unknown
,
k
:
string
)
{
const
newKey
=
key
?
`
${
key
}
.
${
k
}
`
:
k
if
(
isArray
(
a
)
&&
isArray
(
b
))
{
return
customizeArray
(
a
,
b
,
newKey
)
}
if
(
isPlainObject
(
a
)
&&
isPlainObject
(
b
))
{
return
customizeObject
(
a
,
b
,
newKey
)
}
return
b
}
}
export
default
function
merge
(
pagesJsons
:
any
[])
{
return
mergeWith
(
pagesJsons
,
createCustomizer
())
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录