@@ -69,42 +69,41 @@ async function setupEnv(templateFile: string) {
6969 }
7070}
7171
72- async function extendsYaml ( spath : string , dotspath : string , data : any ) {
72+ async function extendsYaml ( spath : string , dotspath : string ) {
73+ const data = await getYamlContent ( spath ) ;
7374 const extendsPath = data ?. extends ? first ( data . extends ) : undefined ;
74- let yamlPath = data ?. extend ? data . extend : extendsPath ;
75- if ( isEmpty ( yamlPath ) ) return ;
75+ let baseYamlPath = data ?. extend ? data . extend : extendsPath ;
76+ if ( isEmpty ( baseYamlPath ) ) return ;
7677
77- if ( ! path . isAbsolute ( yamlPath ) ) {
78- let dirname = path . dirname ( spath ) ;
79- let fixedPath = path . resolve ( dirname , yamlPath ) ;
80- if ( fs . existsSync ( fixedPath ) ) yamlPath = fixedPath ;
78+ if ( ! path . isAbsolute ( baseYamlPath ) ) {
79+ let fixedPath = path . resolve ( path . dirname ( spath ) , baseYamlPath ) ;
80+ if ( fs . existsSync ( fixedPath ) ) baseYamlPath = fixedPath ;
8181 }
8282
83- await isYamlFile ( yamlPath ) ;
84- if ( data ?. vars ) {
85- const doc = await getYamlContent ( yamlPath ) ;
86- const newData = extend2 ( true , doc , { vars : data . vars } ) ;
87- fs . writeFileSync ( dotspath , yaml . dump ( newData ) ) ;
88- return await parseYaml ( fs . readFileSync ( dotspath , 'utf-8' ) ) ;
89- }
90- return await parseYaml ( fs . readFileSync ( yamlPath , 'utf-8' ) ) ;
83+ await isYamlFile ( baseYamlPath ) ;
84+ // 解析base yaml
85+ const baseYamlData = await parseYaml ( fs . readFileSync ( baseYamlPath , 'utf-8' ) ) ;
86+ // 只合并vars
87+ const newData = extend2 ( true , { } , { vars : baseYamlData ?. vars } , data ) ;
88+ fs . writeFileSync ( dotspath , yaml . dump ( newData ) ) ;
89+ // 解析yaml
90+ const parsedData = await parseYaml ( fs . readFileSync ( dotspath , 'utf-8' ) ) ;
91+ // 合并base yaml
92+ return extend2 ( true , { } , baseYamlData , parsedData ) ;
9193}
9294
9395export async function transforYamlPath ( spath : string = '' ) {
9496 await isYamlFile ( spath ) ;
9597 await setupEnv ( spath ) ;
96-
97- const data = await parseYaml ( fs . readFileSync ( spath , 'utf-8' ) ) ;
98+ const data = await getYamlContent ( spath ) ;
9899 // 兼容 extends 只取第一个即可
99100 if ( isEmpty ( data ?. extends ) && isEmpty ( data ?. extend ) ) {
100101 return checkYaml ( spath ) ;
101102 }
102103 const dotspath = path . join ( path . dirname ( spath ) , '.s' , path . basename ( spath ) ) ;
103104 fs . ensureFileSync ( dotspath ) ;
104-
105- const tmp = await extendsYaml ( spath , dotspath , data ) ;
106- const extend2Data = extend2 ( true , tmp , omit ( data , [ 'extends' , 'extend' ] ) ) ;
107- fs . writeFileSync ( dotspath , yaml . dump ( extend2Data ) ) ;
105+ const newData = await extendsYaml ( spath , dotspath ) ;
106+ fs . writeFileSync ( dotspath , yaml . dump ( omit ( newData , [ 'extends' , 'extend' ] ) ) ) ;
108107 return checkYaml ( dotspath ) ;
109108}
110109
0 commit comments