1
- 'use strict' ;
2
-
3
1
/** @typedef {import('./types.js').OsString } OsString */
4
2
/** @typedef {import('./types.js').LibcString } LibcString */
5
3
/** @typedef {import('./types.js').ArchString } ArchString */
6
4
/** @typedef {import('./types.js').TargetTriplet } TargetTriplet */
5
+ /** @typedef {import('./types.js').TargetMatcher } TargetMatcher */
7
6
8
- var HostTargets = module . exports ;
7
+ let HostTargets = { } ;
9
8
10
9
let reVersionOnly = / ^ [ \d \. ] + ( - R E L E A S E ) ? $ / ;
11
10
let reLeadingVer = / ^ \d ( [ \d \. \- \+ _ ] ) + / ;
@@ -64,6 +63,7 @@ let T = {
64
63
} ;
65
64
66
65
// OS, Arch, Libc
66
+ /** @type {Object.<String, import('./types.js').TargetMatcher> } */
67
67
HostTargets . TERMS = {
68
68
// agent
69
69
webi : { } ,
@@ -137,19 +137,21 @@ HostTargets._MATCHERS = {
137
137
} ;
138
138
139
139
/**
140
- * @param {Object.<"os"|"arch"|"libc", String> } target
140
+ * @param {Object.<"os"|"arch"|"libc", String> } targetIsh
141
141
* @param {Array<String> } terms
142
142
*/
143
- HostTargets . termsToTarget = function ( target , terms ) {
143
+ HostTargets . termsToTarget = function ( targetIsh , terms ) {
144
144
let bogoTerms = [ ] ;
145
145
146
- Object . assign ( target , { errors : [ ] } ) ;
146
+ let target = Object . assign ( targetIsh , { errors : [ ] } ) ;
147
147
148
148
for ( let term of terms ) {
149
149
let lterm = term . toLowerCase ( ) ;
150
150
let hints = HostTargets . TERMS [ lterm ] ;
151
151
if ( hints ) {
152
- upsertHints ( target , terms , term , hints ) ;
152
+ let debugUa = terms . join ( ',' ) ;
153
+ let debugTerms = [ term ] ;
154
+ upsertHints ( target , debugUa , debugTerms , hints ) ;
153
155
continue ;
154
156
}
155
157
@@ -199,15 +201,26 @@ HostTargets.termsToTarget = function (target, terms) {
199
201
return bogoTerms ;
200
202
} ;
201
203
204
+ /**
205
+ * @param {TargetTriplet } target
206
+ * @param {String } ua
207
+ * @param {Array<String> } terms
208
+ * @param {TargetMatcher } hints
209
+ */
202
210
function upsertHints ( target , ua , terms , hints ) {
203
211
if ( ! hints ) {
204
212
throw new Error ( "[SANITY FAIL] 'hints' not provided" ) ;
205
213
}
206
214
215
+ // TODO maybe use utility type 'keyof'
216
+ /** @type {["os","arch","libc","vendor"] } */ //@ts -expect-error
207
217
let keys = Object . keys ( hints ) ;
208
218
for ( let key of keys ) {
209
219
if ( ! target [ key ] ) {
210
- target [ key ] = hints [ key ] ;
220
+ if ( hints [ key ] ) {
221
+ //@ts -expect-error TODO
222
+ target [ key ] = hints [ key ] ;
223
+ }
211
224
}
212
225
if ( target [ key ] !== hints [ key ] ) {
213
226
let msg = `'${ key } ' already set to '${ target [ key ] } ', not updated to '${ hints [ key ] } '` ;
@@ -222,19 +235,30 @@ function upsertHints(target, ua, terms, hints) {
222
235
ignore = true ;
223
236
} else if ( hints [ key ] === 'musl' ) {
224
237
// musl can be installed on a GNU system
238
+ //@ts -expect-error - TODO find out if we depend on this libs vs libcs typo (we probably do)
225
239
target . libs = [ target . libc , 'musl' ] ;
226
240
ignore = true ;
227
241
}
228
242
}
229
243
if ( ! ignore ) {
244
+ //@ts -expect-error
230
245
target . errors . push ( { [ key ] : hints [ key ] , message : msg , terms : terms } ) ;
231
246
throw new Error ( `${ msg } for '${ ua } ' / '${ terms } '` ) ;
232
247
}
233
248
}
234
249
}
235
250
}
236
251
237
- // Workaround for current (2023-q4) Android misclassification
252
+ /**
253
+ * @typedef HasErrors
254
+ * @prop {Array<any> } errors
255
+ */
256
+
257
+ /**
258
+ * Workaround for current (2023-q4) Android misclassification
259
+ * @param {TargetTriplet & HasErrors } target
260
+ * @param {Array<String> } terms
261
+ */
238
262
function upsertAndroidTerms ( target , terms ) {
239
263
if ( ! target . android ) {
240
264
return ;
@@ -268,3 +292,9 @@ function upsertAndroidTerms(target, terms) {
268
292
}
269
293
}
270
294
}
295
+
296
+ export let TERMS = HostTargets . TERMS ;
297
+ export let WATERFALL = HostTargets . WATERFALL ;
298
+ export let _MATCHERS = HostTargets . _MATCHERS ;
299
+ export let termsToTarget = HostTargets . termsToTarget ;
300
+ export default HostTargets ;
0 commit comments