1
1
import { NormalizedConfig } from "./normalizer" ;
2
2
import { resolveStrategies } from "./strategy-resolver" ;
3
3
import { StrategyFn , StrategyResult , StrategyStatus } from "./types" ;
4
- import { DROP } from "./utils" ;
4
+ import {
5
+ DROP ,
6
+ StrategyStatus_OK ,
7
+ StrategyStatus_CONTINUE ,
8
+ StrategyStatus_FAIL ,
9
+ StrategyStatus_SKIP ,
10
+ } from "./utils" ;
5
11
6
12
/** Conflict entry (minimal by default). */
7
13
export interface Conflict {
@@ -23,13 +29,13 @@ export interface MergeResult {
23
29
/** Helper: stringify status for logs. */
24
30
export const statusToString = ( s : StrategyStatus ) : string => {
25
31
switch ( s ) {
26
- case StrategyStatus . OK :
32
+ case StrategyStatus_OK :
27
33
return "OK" ;
28
- case StrategyStatus . CONTINUE :
34
+ case StrategyStatus_CONTINUE :
29
35
return "CONTINUE" ;
30
- case StrategyStatus . FAIL :
36
+ case StrategyStatus_FAIL :
31
37
return "FAIL" ;
32
- case StrategyStatus . SKIP :
38
+ case StrategyStatus_SKIP :
33
39
return "SKIP" ;
34
40
default :
35
41
return `UNKNOWN(${ s } )` ;
@@ -62,40 +68,40 @@ const isPlainObject = (val: unknown): val is Record<string, unknown> =>
62
68
/** Built-in strategies. */
63
69
export const BuiltInStrategies = {
64
70
ours : < TContext > ( { ours } : MergeArgs < TContext > ) : StrategyResult => ( {
65
- status : StrategyStatus . OK ,
71
+ status : StrategyStatus_OK ,
66
72
value : ours ,
67
73
} ) ,
68
74
69
75
theirs : < TContext > ( { theirs } : MergeArgs < TContext > ) : StrategyResult => ( {
70
- status : StrategyStatus . OK ,
76
+ status : StrategyStatus_OK ,
71
77
value : theirs ,
72
78
} ) ,
73
79
74
80
base : < TContext > ( { base } : MergeArgs < TContext > ) : StrategyResult => ( {
75
- status : StrategyStatus . OK ,
81
+ status : StrategyStatus_OK ,
76
82
value : base ,
77
83
} ) ,
78
84
79
85
drop : < TContext > ( _skipped : MergeArgs < TContext > ) : StrategyResult => ( {
80
- status : StrategyStatus . OK ,
86
+ status : StrategyStatus_OK ,
81
87
value : DROP ,
82
88
} ) ,
83
89
84
90
skip : < TContext > ( { path } : MergeArgs < TContext > ) : StrategyResult => ( {
85
- status : StrategyStatus . SKIP ,
91
+ status : StrategyStatus_SKIP ,
86
92
reason : `Skip strategy applied at ${ path } ` ,
87
93
} ) ,
88
94
89
95
"non-empty" : < TContext > ( { ours, theirs, base } : MergeArgs < TContext > ) : StrategyResult => {
90
- if ( ours != null && ours !== "" ) return { status : StrategyStatus . OK , value : ours } ;
91
- if ( theirs != null && theirs !== "" ) return { status : StrategyStatus . OK , value : theirs } ;
92
- if ( base != null && base !== "" ) return { status : StrategyStatus . OK , value : base } ;
93
- return { status : StrategyStatus . CONTINUE } ;
96
+ if ( ours != null && ours !== "" ) return { status : StrategyStatus_OK , value : ours } ;
97
+ if ( theirs != null && theirs !== "" ) return { status : StrategyStatus_OK , value : theirs } ;
98
+ if ( base != null && base !== "" ) return { status : StrategyStatus_OK , value : base } ;
99
+ return { status : StrategyStatus_CONTINUE } ;
94
100
} ,
95
101
96
102
update : < TContext > ( { ours, theirs } : MergeArgs < TContext > ) : StrategyResult => {
97
- if ( ours !== undefined ) return { status : StrategyStatus . OK , value : theirs } ;
98
- return { status : StrategyStatus . OK , value : DROP } ;
103
+ if ( ours !== undefined ) return { status : StrategyStatus_OK , value : theirs } ;
104
+ return { status : StrategyStatus_OK , value : DROP } ;
99
105
} ,
100
106
101
107
merge : async < TContext > ( args : MergeArgs < TContext > ) : Promise < StrategyResult > => {
@@ -116,24 +122,24 @@ export const BuiltInStrategies = {
116
122
conflicts,
117
123
} ) ;
118
124
}
119
- return { status : StrategyStatus . OK , value : result } ;
125
+ return { status : StrategyStatus_OK , value : result } ;
120
126
}
121
127
122
- return { status : StrategyStatus . CONTINUE , reason : "Unmergeable type" } ;
128
+ return { status : StrategyStatus_CONTINUE , reason : "Unmergeable type" } ;
123
129
} ,
124
130
125
131
concat : < TContext > ( { ours, theirs, path } : MergeArgs < TContext > ) : StrategyResult => {
126
132
if ( Array . isArray ( ours ) && Array . isArray ( theirs ) ) {
127
- return { status : StrategyStatus . OK , value : [ ...ours , ...theirs ] } ;
133
+ return { status : StrategyStatus_OK , value : [ ...ours , ...theirs ] } ;
128
134
}
129
- return { status : StrategyStatus . CONTINUE , reason : `Cannot concat at ${ path } ` } ;
135
+ return { status : StrategyStatus_CONTINUE , reason : `Cannot concat at ${ path } ` } ;
130
136
} ,
131
137
132
138
unique : < TContext > ( { ours, theirs, path } : MergeArgs < TContext > ) : StrategyResult => {
133
139
if ( Array . isArray ( ours ) && Array . isArray ( theirs ) ) {
134
- return { status : StrategyStatus . OK , value : [ ...new Set ( [ ...ours , ...theirs ] ) ] } ;
140
+ return { status : StrategyStatus_OK , value : [ ...new Set ( [ ...ours , ...theirs ] ) ] } ;
135
141
}
136
- return { status : StrategyStatus . CONTINUE , reason : `Cannot concat at ${ path } ` } ;
142
+ return { status : StrategyStatus_CONTINUE , reason : `Cannot concat at ${ path } ` } ;
137
143
} ,
138
144
} as const ;
139
145
@@ -185,14 +191,14 @@ export const mergeObject = async <TContext>({
185
191
} ) ;
186
192
187
193
switch ( result . status ) {
188
- case StrategyStatus . OK :
194
+ case StrategyStatus_OK :
189
195
return result . value ;
190
- case StrategyStatus . CONTINUE :
196
+ case StrategyStatus_CONTINUE :
191
197
continue ;
192
- case StrategyStatus . SKIP :
198
+ case StrategyStatus_SKIP :
193
199
conflicts . push ( { path, reason : result . reason } ) ;
194
200
return undefined ;
195
- case StrategyStatus . FAIL :
201
+ case StrategyStatus_FAIL :
196
202
conflicts . push ( { path, reason : result . reason } ) ;
197
203
throw new Error ( `Merge failed at ${ path } : ${ result . reason } ` ) ;
198
204
}
0 commit comments