Skip to content

Commit 3de2fb8

Browse files
committed
(new) Support multiple in-source builds with differing file-extensions
In addition, add `.bs.cjs` alongside `.bs.mjs` as a cleaning-supported file-extension.
1 parent 9f9353f commit 3de2fb8

15 files changed

+174
-69
lines changed

jscomp/bsb/bsb_package_specs.ml

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,27 @@ let prefix_of_format (x : format) =
6565

6666

6767
let bad_suffix_message_warn suffix =
68+
let open Literals in
6869
Bsb_log.warn
69-
"@{<warning>UNSUPPORTED@}: package-specs: extension `%s` is unsupported@;\
70-
; consider one of: %s, %s, %s, or %s@." suffix Literals.suffix_js
71-
Literals.suffix_mjs Literals.suffix_bs_js Literals.suffix_bs_mjs
70+
"@{<warning>UNSUPPORTED@}: package-specs: extension `%s` is unsupported;@;\
71+
consider one of: %s, %s, %s; %s, %s, or %s@." suffix suffix_js suffix_mjs
72+
suffix_cjs suffix_bs_js suffix_bs_mjs suffix_bs_cjs
7273

7374

7475
let supported_suffix (x : string) =
75-
if not (List.mem x Literals.[ suffix_js; suffix_mjs; suffix_bs_js; suffix_bs_mjs ]) then
76-
bad_suffix_message_warn x;
76+
if
77+
not
78+
(List.mem x
79+
Literals.
80+
[
81+
suffix_js;
82+
suffix_mjs;
83+
suffix_cjs;
84+
suffix_bs_js;
85+
suffix_bs_mjs;
86+
suffix_bs_cjs;
87+
])
88+
then bad_suffix_message_warn x;
7789
x
7890

7991

@@ -89,7 +101,9 @@ let default_suffix format in_source =
89101

90102
module SS = Set.Make (String)
91103

92-
let supported_bs_suffixes = Literals.[ suffix_bs_js; suffix_bs_mjs ]
104+
let supported_bs_suffixes =
105+
Literals.[ suffix_bs_js; suffix_bs_mjs; suffix_bs_cjs ]
106+
93107

94108
(** Produces a [list] of supported, bs-prefixed file-suffixes used in
95109
[in-source] package-specs. *)
@@ -104,21 +118,23 @@ let extract_in_source_bs_suffixes (package_specs : Spec_set.t) =
104118

105119

106120
let rec from_array (arr : Ext_json_types.t array) : Spec_set.t =
107-
let spec = ref Spec_set.empty in
108-
let has_in_source = ref false in
121+
let specs = ref Spec_set.empty in
109122
Ext_array.iter arr (fun x ->
110-
let result = from_json_single x in
111-
if result.in_source then
112-
if not !has_in_source then has_in_source := true
113-
else
114-
Bsb_exception.errorf ~loc:(Ext_json.loc_of x)
115-
"package-specs: we've detected two module formats that are both \
116-
configured to be in-source.";
117-
spec := Spec_set.add result !spec);
118-
!spec
119-
120-
121-
(* TODO: FIXME: better API without mutating *)
123+
let spec = from_json_single x in
124+
if
125+
Spec_set.exists
126+
(fun o -> spec.in_source == o.in_source && String.equal spec.suffix o.suffix)
127+
!specs
128+
then
129+
Bsb_exception.errorf ~loc:(Ext_json.loc_of x)
130+
"package-specs: two conflicting module formats with the extension \
131+
`%s` are both configured to be in-source."
132+
spec.suffix
133+
else specs := Spec_set.add spec !specs);
134+
!specs
135+
136+
137+
(* FIXME: better API without mutating *)
122138
and from_json_single (x : Ext_json_types.t) : spec =
123139
match x with
124140
| Str { str = format; loc } ->
@@ -180,8 +196,7 @@ let package_flag ({ format; in_source; suffix } : spec) dir =
180196
Ext_string.single_colon suffix)
181197

182198

183-
let flags_of_package_specs (package_specs : t) (dirname : string) :
184-
string =
199+
let flags_of_package_specs (package_specs : t) (dirname : string) : string =
185200
Spec_set.fold
186201
(fun format acc -> Ext_string.inter2 acc (package_flag format dirname))
187202
package_specs Ext_string.empty

jscomp/bsb/bsb_parse_sources.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ let classify_suffix (x : string) : suffix_kind =
204204
if i >= 0 then Cmti i else Not_any
205205

206206

207-
(** Attempt to delete any [.bs.m?js] files for a given artifact. *)
207+
(** Attempt to delete any [.bs.[cm]?js] files for a given artifact. *)
208208
let unlink_bs_suffixes context artifact =
209209
List.iter
210210
(fun suffix -> try_unlink (Filename.concat context.cwd (artifact ^ suffix)))

jscomp/ext/literals.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,13 @@ let suffix_reast = ".reast"
9999
let suffix_reiast = ".reiast"
100100
let suffix_mliast_simple = ".mliast_simple"
101101
let suffix_d = ".d"
102+
102103
let suffix_js = ".js"
103104
let suffix_mjs = ".mjs"
105+
let suffix_cjs = ".cjs"
104106
let suffix_bs_js = ".bs.js"
105107
let suffix_bs_mjs = ".bs.mjs"
108+
let suffix_bs_cjs = ".bs.cjs"
106109
(* let suffix_re_js = ".re.js" *)
107110
let suffix_gen_js = ".gen.js"
108111
let suffix_gen_tsx = ".gen.tsx"

jscomp/ext/literals.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,10 @@ val suffix_rei : string
100100
val suffix_d : string
101101
val suffix_js : string
102102
val suffix_mjs : string
103+
val suffix_cjs : string
103104
val suffix_bs_js : string
104105
val suffix_bs_mjs : string
106+
val suffix_bs_cjs : string
105107
(* val suffix_re_js : string *)
106108
val suffix_gen_js : string
107109
val suffix_gen_tsx: string

lib/4.06.1/bsb.ml

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4467,8 +4467,10 @@ val suffix_rei : string
44674467
val suffix_d : string
44684468
val suffix_js : string
44694469
val suffix_mjs : string
4470+
val suffix_cjs : string
44704471
val suffix_bs_js : string
44714472
val suffix_bs_mjs : string
4473+
val suffix_bs_cjs : string
44724474
(* val suffix_re_js : string *)
44734475
val suffix_gen_js : string
44744476
val suffix_gen_tsx: string
@@ -4606,10 +4608,13 @@ let suffix_reast = ".reast"
46064608
let suffix_reiast = ".reiast"
46074609
let suffix_mliast_simple = ".mliast_simple"
46084610
let suffix_d = ".d"
4611+
46094612
let suffix_js = ".js"
46104613
let suffix_mjs = ".mjs"
4614+
let suffix_cjs = ".cjs"
46114615
let suffix_bs_js = ".bs.js"
46124616
let suffix_bs_mjs = ".bs.mjs"
4617+
let suffix_bs_cjs = ".bs.cjs"
46134618
(* let suffix_re_js = ".re.js" *)
46144619
let suffix_gen_js = ".gen.js"
46154620
let suffix_gen_tsx = ".gen.tsx"
@@ -7072,15 +7077,27 @@ let prefix_of_format (x : format) =
70727077

70737078

70747079
let bad_suffix_message_warn suffix =
7080+
let open Literals in
70757081
Bsb_log.warn
7076-
"@{<warning>UNSUPPORTED@}: package-specs: extension `%s` is unsupported@;\
7077-
; consider one of: %s, %s, %s, or %s@." suffix Literals.suffix_js
7078-
Literals.suffix_mjs Literals.suffix_bs_js Literals.suffix_bs_mjs
7082+
"@{<warning>UNSUPPORTED@}: package-specs: extension `%s` is unsupported;@;\
7083+
consider one of: %s, %s, %s; %s, %s, or %s@." suffix suffix_js suffix_mjs
7084+
suffix_cjs suffix_bs_js suffix_bs_mjs suffix_bs_cjs
70797085

70807086

70817087
let supported_suffix (x : string) =
7082-
if not (List.mem x Literals.[ suffix_js; suffix_mjs; suffix_bs_js; suffix_bs_mjs ]) then
7083-
bad_suffix_message_warn x;
7088+
if
7089+
not
7090+
(List.mem x
7091+
Literals.
7092+
[
7093+
suffix_js;
7094+
suffix_mjs;
7095+
suffix_cjs;
7096+
suffix_bs_js;
7097+
suffix_bs_mjs;
7098+
suffix_bs_cjs;
7099+
])
7100+
then bad_suffix_message_warn x;
70847101
x
70857102

70867103

@@ -7096,7 +7113,9 @@ let default_suffix format in_source =
70967113

70977114
module SS = Set.Make (String)
70987115

7099-
let supported_bs_suffixes = Literals.[ suffix_bs_js; suffix_bs_mjs ]
7116+
let supported_bs_suffixes =
7117+
Literals.[ suffix_bs_js; suffix_bs_mjs; suffix_bs_cjs ]
7118+
71007119

71017120
(** Produces a [list] of supported, bs-prefixed file-suffixes used in
71027121
[in-source] package-specs. *)
@@ -7111,21 +7130,23 @@ let extract_in_source_bs_suffixes (package_specs : Spec_set.t) =
71117130

71127131

71137132
let rec from_array (arr : Ext_json_types.t array) : Spec_set.t =
7114-
let spec = ref Spec_set.empty in
7115-
let has_in_source = ref false in
7133+
let specs = ref Spec_set.empty in
71167134
Ext_array.iter arr (fun x ->
7117-
let result = from_json_single x in
7118-
if result.in_source then
7119-
if not !has_in_source then has_in_source := true
7120-
else
7121-
Bsb_exception.errorf ~loc:(Ext_json.loc_of x)
7122-
"package-specs: we've detected two module formats that are both \
7123-
configured to be in-source.";
7124-
spec := Spec_set.add result !spec);
7125-
!spec
7126-
7127-
7128-
(* TODO: FIXME: better API without mutating *)
7135+
let spec = from_json_single x in
7136+
if
7137+
Spec_set.exists
7138+
(fun o -> spec.in_source == o.in_source && String.equal spec.suffix o.suffix)
7139+
!specs
7140+
then
7141+
Bsb_exception.errorf ~loc:(Ext_json.loc_of x)
7142+
"package-specs: two conflicting module formats with the extension \
7143+
`%s` are both configured to be in-source."
7144+
spec.suffix
7145+
else specs := Spec_set.add spec !specs);
7146+
!specs
7147+
7148+
7149+
(* FIXME: better API without mutating *)
71297150
and from_json_single (x : Ext_json_types.t) : spec =
71307151
match x with
71317152
| Str { str = format; loc } ->
@@ -7187,8 +7208,7 @@ let package_flag ({ format; in_source; suffix } : spec) dir =
71877208
Ext_string.single_colon suffix)
71887209

71897210

7190-
let flags_of_package_specs (package_specs : t) (dirname : string) :
7191-
string =
7211+
let flags_of_package_specs (package_specs : t) (dirname : string) : string =
71927212
Spec_set.fold
71937213
(fun format acc -> Ext_string.inter2 acc (package_flag format dirname))
71947214
package_specs Ext_string.empty
@@ -10511,7 +10531,7 @@ let classify_suffix (x : string) : suffix_kind =
1051110531
if i >= 0 then Cmti i else Not_any
1051210532

1051310533

10514-
(** Attempt to delete any [.bs.m?js] files for a given artifact. *)
10534+
(** Attempt to delete any [.bs.[cm]?js] files for a given artifact. *)
1051510535
let unlink_bs_suffixes context artifact =
1051610536
List.iter
1051710537
(fun suffix -> try_unlink (Filename.concat context.cwd (artifact ^ suffix)))

lib/4.06.1/bsb_helper.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2978,8 +2978,10 @@ val suffix_rei : string
29782978
val suffix_d : string
29792979
val suffix_js : string
29802980
val suffix_mjs : string
2981+
val suffix_cjs : string
29812982
val suffix_bs_js : string
29822983
val suffix_bs_mjs : string
2984+
val suffix_bs_cjs : string
29832985
(* val suffix_re_js : string *)
29842986
val suffix_gen_js : string
29852987
val suffix_gen_tsx: string
@@ -3117,10 +3119,13 @@ let suffix_reast = ".reast"
31173119
let suffix_reiast = ".reiast"
31183120
let suffix_mliast_simple = ".mliast_simple"
31193121
let suffix_d = ".d"
3122+
31203123
let suffix_js = ".js"
31213124
let suffix_mjs = ".mjs"
3125+
let suffix_cjs = ".cjs"
31223126
let suffix_bs_js = ".bs.js"
31233127
let suffix_bs_mjs = ".bs.mjs"
3128+
let suffix_bs_cjs = ".bs.cjs"
31243129
(* let suffix_re_js = ".re.js" *)
31253130
let suffix_gen_js = ".gen.js"
31263131
let suffix_gen_tsx = ".gen.tsx"

lib/4.06.1/bsdep.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37183,8 +37183,10 @@ val suffix_rei : string
3718337183
val suffix_d : string
3718437184
val suffix_js : string
3718537185
val suffix_mjs : string
37186+
val suffix_cjs : string
3718637187
val suffix_bs_js : string
3718737188
val suffix_bs_mjs : string
37189+
val suffix_bs_cjs : string
3718837190
(* val suffix_re_js : string *)
3718937191
val suffix_gen_js : string
3719037192
val suffix_gen_tsx: string
@@ -37322,10 +37324,13 @@ let suffix_reast = ".reast"
3732237324
let suffix_reiast = ".reiast"
3732337325
let suffix_mliast_simple = ".mliast_simple"
3732437326
let suffix_d = ".d"
37327+
3732537328
let suffix_js = ".js"
3732637329
let suffix_mjs = ".mjs"
37330+
let suffix_cjs = ".cjs"
3732737331
let suffix_bs_js = ".bs.js"
3732837332
let suffix_bs_mjs = ".bs.mjs"
37333+
let suffix_bs_cjs = ".bs.cjs"
3732937334
(* let suffix_re_js = ".re.js" *)
3733037335
let suffix_gen_js = ".gen.js"
3733137336
let suffix_gen_tsx = ".gen.tsx"

lib/4.06.1/bsppx.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294359,8 +294359,10 @@ val suffix_rei : string
294359294359
val suffix_d : string
294360294360
val suffix_js : string
294361294361
val suffix_mjs : string
294362+
val suffix_cjs : string
294362294363
val suffix_bs_js : string
294363294364
val suffix_bs_mjs : string
294365+
val suffix_bs_cjs : string
294364294366
(* val suffix_re_js : string *)
294365294367
val suffix_gen_js : string
294366294368
val suffix_gen_tsx: string
@@ -294498,10 +294500,13 @@ let suffix_reast = ".reast"
294498294500
let suffix_reiast = ".reiast"
294499294501
let suffix_mliast_simple = ".mliast_simple"
294500294502
let suffix_d = ".d"
294503+
294501294504
let suffix_js = ".js"
294502294505
let suffix_mjs = ".mjs"
294506+
let suffix_cjs = ".cjs"
294503294507
let suffix_bs_js = ".bs.js"
294504294508
let suffix_bs_mjs = ".bs.mjs"
294509+
let suffix_bs_cjs = ".bs.cjs"
294505294510
(* let suffix_re_js = ".re.js" *)
294506294511
let suffix_gen_js = ".gen.js"
294507294512
let suffix_gen_tsx = ".gen.tsx"

lib/4.06.1/unstable/all_ounit_tests.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5107,8 +5107,10 @@ val suffix_rei : string
51075107
val suffix_d : string
51085108
val suffix_js : string
51095109
val suffix_mjs : string
5110+
val suffix_cjs : string
51105111
val suffix_bs_js : string
51115112
val suffix_bs_mjs : string
5113+
val suffix_bs_cjs : string
51125114
(* val suffix_re_js : string *)
51135115
val suffix_gen_js : string
51145116
val suffix_gen_tsx: string
@@ -5246,10 +5248,13 @@ let suffix_reast = ".reast"
52465248
let suffix_reiast = ".reiast"
52475249
let suffix_mliast_simple = ".mliast_simple"
52485250
let suffix_d = ".d"
5251+
52495252
let suffix_js = ".js"
52505253
let suffix_mjs = ".mjs"
5254+
let suffix_cjs = ".cjs"
52515255
let suffix_bs_js = ".bs.js"
52525256
let suffix_bs_mjs = ".bs.mjs"
5257+
let suffix_bs_cjs = ".bs.cjs"
52535258
(* let suffix_re_js = ".re.js" *)
52545259
let suffix_gen_js = ".gen.js"
52555260
let suffix_gen_tsx = ".gen.tsx"

0 commit comments

Comments
 (0)