1
- import {
2
- createGeneratorKey ,
3
- GENERATORS ,
4
- LANGUAGES ,
5
- run ,
6
- toAbsolutePath ,
7
- } from './common' ;
1
+ import { run } from './common' ;
8
2
import { getLanguageFolder } from './config' ;
9
3
import { createSpinner } from './oraLog' ;
4
+ import type { Generator } from './types' ;
5
+
6
+ const multiBuildLanguage = new Set ( [ 'javascript' ] ) ;
10
7
11
8
/**
12
- * Build all client for a language at the same time, for those who live in the same folder .
9
+ * Build only a specific client for one language, used by javascript for example .
13
10
*/
14
- async function buildPerLanguage ( {
15
- language,
16
- client,
17
- verbose,
18
- } : {
19
- language : string ;
20
- client : string ;
21
- verbose : boolean ;
22
- } ) : Promise < void > {
23
- const spinner = createSpinner ( `building '${ language } '` , verbose ) . start ( ) ;
24
- const cwd = toAbsolutePath ( getLanguageFolder ( language ) ) ;
25
- const generator =
26
- client === 'all'
27
- ? null
28
- : GENERATORS [ createGeneratorKey ( { language, client } ) ] ;
29
-
11
+ async function buildPerClient (
12
+ { language, key, additionalProperties : { packageName } } : Generator ,
13
+ verbose : boolean
14
+ ) : Promise < void > {
15
+ const spinner = createSpinner ( `building ${ key } ` , verbose ) . start ( ) ;
30
16
switch ( language ) {
31
17
case 'javascript' :
32
- await run ( `yarn clean` , { cwd , verbose } ) ;
18
+ await run ( `yarn workspace ${ packageName } clean` , { verbose } ) ;
33
19
await run (
34
- `yarn build ${
35
- client === 'all'
36
- ? ''
37
- : generator ?. additionalProperties . buildFile ?? client
38
- } `,
39
- {
40
- cwd,
41
- verbose,
42
- }
20
+ `SKIP_UTILS=true yarn workspace algoliasearch-client-javascript build ${ packageName } ` ,
21
+ { verbose }
43
22
) ;
44
23
break ;
24
+ default :
25
+ }
26
+ spinner . succeed ( ) ;
27
+ }
28
+
29
+ /**
30
+ * Build all client for a language at the same time, for those who live in the same folder.
31
+ */
32
+ async function buildAllClients (
33
+ language : string ,
34
+ verbose : boolean
35
+ ) : Promise < void > {
36
+ const spinner = createSpinner ( `building '${ language } '` , verbose ) . start ( ) ;
37
+ switch ( language ) {
45
38
case 'java' :
46
39
await run (
47
40
`./gradle/gradlew --no-daemon -p ${ getLanguageFolder (
@@ -60,19 +53,37 @@ async function buildPerLanguage({
60
53
}
61
54
62
55
export async function buildClients (
63
- language : string ,
64
- client : string ,
56
+ generators : Generator [ ] ,
65
57
verbose : boolean
66
58
) : Promise < void > {
67
- const languages = language === 'all' ? LANGUAGES : [ language ] ;
59
+ const langs = [ ...new Set ( generators . map ( ( gen ) => gen . language ) ) ] ;
60
+
61
+ if ( langs . includes ( 'javascript' ) ) {
62
+ const spinner = createSpinner (
63
+ "building 'JavaScript' utils" ,
64
+ verbose
65
+ ) . start ( ) ;
66
+
67
+ await run ( 'yarn workspace algoliasearch-client-javascript clean:utils' , {
68
+ verbose,
69
+ } ) ;
70
+ await run ( 'yarn workspace algoliasearch-client-javascript build:utils' , {
71
+ verbose,
72
+ } ) ;
73
+
74
+ spinner . succeed ( ) ;
75
+ }
68
76
69
- await Promise . all (
70
- languages . map ( ( lang ) =>
71
- buildPerLanguage ( {
72
- language : lang ,
73
- client,
74
- verbose,
75
- } )
76
- )
77
- ) ;
77
+ await Promise . all ( [
78
+ Promise . all (
79
+ generators
80
+ . filter ( ( { language } ) => multiBuildLanguage . has ( language ) )
81
+ . map ( ( gen ) => buildPerClient ( gen , verbose ) )
82
+ ) ,
83
+ Promise . all (
84
+ langs
85
+ . filter ( ( lang ) => ! multiBuildLanguage . has ( lang ) )
86
+ . map ( ( lang ) => buildAllClients ( lang , verbose ) )
87
+ ) ,
88
+ ] ) ;
78
89
}
0 commit comments