@@ -583,6 +583,7 @@ <h1><a href="https://github.com/bloomberg/bucklescript">BuckleScript</a> User Ma
583
583
</ li >
584
584
</ ul >
585
585
</ li >
586
+ < li > < a href ="#_js_module "> Js module</ a > </ li >
586
587
< li > < a href ="#_extended_compiler_options "> Extended compiler options</ a >
587
588
< ul class ="sectlevel2 ">
588
589
< li > < a href ="#__bs_main_single_directory_build "> -bs-main (single directory build)</ a > </ li >
@@ -2901,6 +2902,128 @@ <h4 id="_a_simple_example_binding_to_mocha_unit_test_library"><a class="anchor"
2901
2902
</ div >
2902
2903
</ div >
2903
2904
< div class ="sect1 ">
2905
+ < h2 id ="_js_module "> < a class ="anchor " href ="#_js_module "> </ a > Js module</ h2 >
2906
+ < div class ="sectionbody ">
2907
+ < div class ="paragraph ">
2908
+ < p > Js module is shipped with BuckleScript, both the namespace < code > Js</ code > and < code > Node</ code > are preserved.</ p >
2909
+ </ div >
2910
+ < div class ="listingblock ">
2911
+ < div class ="title "> Js Public types</ div >
2912
+ < div class ="content ">
2913
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> type</ span > < span class ="tok-o "> +</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> t</ span >
2914
+ < span class ="tok-c "> (** Js object type *)</ span >
2915
+ < span class ="tok-k "> type</ span > < span class ="tok-o "> +</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> null</ span >
2916
+ < span class ="tok-c "> (** nullable, value of this type can be either [null] or ['a]</ span >
2917
+ < span class ="tok-c "> this type is the same as {!Js.Null.t} *)</ span >
2918
+ < span class ="tok-k "> type</ span > < span class ="tok-o "> +</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> undefined</ span >
2919
+ < span class ="tok-c "> (** value of this type can be either [undefined] or ['a]</ span >
2920
+ < span class ="tok-c "> this type is the same as {!Js.Undefined.t} *)</ span >
2921
+ < span class ="tok-k "> type</ span > < span class ="tok-o "> +</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> null_undefined</ span >
2922
+ < span class ="tok-c "> (** value of this type can be [undefined], [null] or ['a]</ span >
2923
+ < span class ="tok-c "> this type is the same as {!Js.Null_undefined.t}*)</ span >
2924
+ < span class ="tok-k "> type</ span > < span class ="tok-n "> boolean</ span > </ code > </ pre >
2925
+ </ div >
2926
+ </ div >
2927
+ < div class ="listingblock ">
2928
+ < div class ="title "> Js Nested modules</ div >
2929
+ < div class ="content ">
2930
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-c "> (** {3 nested modules}*)</ span >
2931
+ < span class ="tok-k "> module</ span > < span class ="tok-nc "> Null</ span > < span class ="tok-o "> =</ span > < span class ="tok-nc "> Js_null</ span >
2932
+ < span class ="tok-k "> module</ span > < span class ="tok-nc "> Undefined</ span > < span class ="tok-o "> =</ span > < span class ="tok-nc "> Js_undefined</ span >
2933
+ < span class ="tok-k "> module</ span > < span class ="tok-nc "> Null_undefined</ span > < span class ="tok-o "> =</ span > < span class ="tok-nc "> Js_null_undefined</ span >
2934
+ < span class ="tok-k "> module</ span > < span class ="tok-nc "> Types</ span > < span class ="tok-o "> =</ span > < span class ="tok-nc "> Js_types</ span > </ code > </ pre >
2935
+ </ div >
2936
+ </ div >
2937
+ < div class ="paragraph ">
2938
+ < p > Note that < code > Null</ code > , < code > Undefined</ code > and < code > Null_undefined</ code > have similar interfaces, for example:</ p >
2939
+ </ div >
2940
+ < div class ="listingblock ">
2941
+ < div class ="title "> Js.Null module</ div >
2942
+ < div class ="content ">
2943
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> type</ span > < span class ="tok-o "> +</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> =</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-nn "> Js</ span > < span class ="tok-p "> .</ span > < span class ="tok-n "> null</ span >
2944
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> to_opt</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> option</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_from_nullable"</ span >
2945
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> return</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "%identity"</ span >
2946
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> test</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> bool</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_is_nil"</ span >
2947
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> empty</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "null"</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span > </ code > </ pre >
2948
+ </ div >
2949
+ </ div >
2950
+ < div class ="paragraph ">
2951
+ < p > The interface for < code > Js.Types</ code > is as below</ p >
2952
+ </ div >
2953
+ < div class ="listingblock ">
2954
+ < div class ="title "> Js.Types module</ div >
2955
+ < div class ="content ">
2956
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> type</ span > < span class ="tok-n "> symbol</ span >
2957
+ < span class ="tok-c "> (**Js symbol type only available in ES6 *)</ span >
2958
+
2959
+ < span class ="tok-k "> type</ span > < span class ="tok-n "> obj_val</ span >
2960
+ < span class ="tok-k "> type</ span > < span class ="tok-n "> undefined_val</ span >
2961
+ < span class ="tok-c "> (** This type has only one value [undefined] *)</ span >
2962
+ < span class ="tok-k "> type</ span > < span class ="tok-n "> null_val</ span >
2963
+ < span class ="tok-c "> (** This type has only one value [null] *)</ span >
2964
+ < span class ="tok-k "> type</ span > < span class ="tok-n "> function_val</ span >
2965
+
2966
+ < span class ="tok-k "> type</ span > < span class ="tok-o "> _</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> =</ span >
2967
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> Undefined</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> undefined_val</ span > < span class ="tok-n "> t</ span >
2968
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> Null</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> null_val</ span > < span class ="tok-n "> t</ span >
2969
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> Boolean</ span > < span class ="tok-o "> :</ span > < span class ="tok-nn "> Js</ span > < span class ="tok-p "> .</ span > < span class ="tok-n "> boolean</ span > < span class ="tok-n "> t</ span >
2970
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> Number</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> float</ span > < span class ="tok-n "> t</ span >
2971
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> String</ span > < span class ="tok-o "> :</ span > < span class ="tok-kt "> string</ span > < span class ="tok-n "> t</ span >
2972
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> Function</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> function_val</ span > < span class ="tok-n "> t</ span >
2973
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> Object</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> obj_val</ span > < span class ="tok-n "> t</ span >
2974
+ < span class ="tok-o "> |</ span > < span class ="tok-nc "> Symbol</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> symbol</ span > < span class ="tok-n "> t</ span >
2975
+
2976
+ < span class ="tok-k "> val</ span > < span class ="tok-n "> reify_type</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> b</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> *</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> b</ span >
2977
+ < span class ="tok-c "> (** given any value it returns its type and the same value.</ span >
2978
+ < span class ="tok-c "> Note that since ['b t] is GADT, the type system will reify its type automatically,</ span >
2979
+ < span class ="tok-c "> for example</ span >
2980
+ < span class ="tok-c "> {[</ span >
2981
+ < span class ="tok-c "> match reify_type "3" with</ span >
2982
+ < span class ="tok-c "> | String, v -> v ^ " this type safe control flow analysis will infer v as string"</ span >
2983
+ < span class ="tok-c "> | _ -> assert false</ span >
2984
+ < span class ="tok-c "> ]}</ span >
2985
+ < span class ="tok-c "> *)</ span >
2986
+ < span class ="tok-k "> val</ span > < span class ="tok-n "> test</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> b</ span > < span class ="tok-n "> t</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> bool</ span >
2987
+ < span class ="tok-c "> (** {[</ span >
2988
+ < span class ="tok-c "> test "x" String = true</ span >
2989
+ < span class ="tok-c "> ]}*)</ span > </ code > </ pre >
2990
+ </ div >
2991
+ </ div >
2992
+ < div class ="listingblock ">
2993
+ < div class ="title "> Js Utility functions</ div >
2994
+ < div class ="content ">
2995
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> external</ span > < span class ="tok-n "> to_bool</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> boolean</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> bool</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_boolean_to_bool"</ span >
2996
+ < span class ="tok-c "> (** convert Js boolean to OCaml bool *)</ span >
2997
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> typeof</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> string</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_typeof"</ span >
2998
+ < span class ="tok-c "> (** [typeof x] will be compiled as [typeof x] in JS *)</ span >
2999
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> log</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-kt "> unit</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_dump"</ span >
3000
+ < span class ="tok-c "> (** A convenience function to log *)</ span >
3001
+
3002
+ < span class ="tok-c "> (** {4 operators }*)</ span >
3003
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> unsafe_lt</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-n "> boolean</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_unsafe_lt"</ span >
3004
+ < span class ="tok-c "> (** [unsafe_lt a b] will be compiled as [a < b] *)</ span >
3005
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> unsafe_le</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-n "> boolean</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_unsafe_le"</ span >
3006
+ < span class ="tok-c "> (** [unsafe_le a b] will be compiled as [a <= b] *)</ span >
3007
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> unsafe_gt</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-n "> boolean</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_unsafe_gt"</ span >
3008
+ < span class ="tok-c "> (** [unsafe_gt a b] will be compiled as [a > b] *)</ span >
3009
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> unsafe_ge</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-o "> -></ span > < span class ="tok-n "> boolean</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "js_unsafe_ge"</ span >
3010
+ < span class ="tok-c "> (** [unsafe_ge a b] will be compiled as [a >= b] *)</ span > </ code > </ pre >
3011
+ </ div >
3012
+ </ div >
3013
+ < div class ="listingblock ">
3014
+ < div class ="title "> Js Predefined JS values</ div >
3015
+ < div class ="content ">
3016
+ < pre class ="pygments highlight "> < code data-lang ="ocaml "> < span class ="tok-k "> external</ span > < span class ="tok-bp "> true</ span > < span class ="tok-o "> _</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> boolean</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "true"</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span >
3017
+ < span class ="tok-k "> external</ span > < span class ="tok-bp "> false</ span > < span class ="tok-o "> _</ span > < span class ="tok-o "> :</ span > < span class ="tok-n "> boolean</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> "false"</ span > < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span >
3018
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> null</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> null</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> ""</ span >
3019
+ < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span > < span class ="tok-c "> (* The same as {!Js.Null.empty} will be compiled as [null]*)</ span >
3020
+ < span class ="tok-k "> external</ span > < span class ="tok-n "> undefined</ span > < span class ="tok-o "> :</ span > < span class ="tok-k "> '</ span > < span class ="tok-n "> a</ span > < span class ="tok-n "> undefined</ span > < span class ="tok-o "> =</ span > < span class ="tok-s2 "> ""</ span >
3021
+ < span class ="tok-o "> [@@</ span > < span class ="tok-n "> bs</ span > < span class ="tok-o "> .</ span > < span class ="tok-k "> val</ span > < span class ="tok-o "> ]</ span > < span class ="tok-c "> (* The same as {!Js.Undefined.empty} will be compiled as [undefined]*)</ span > </ code > </ pre >
3022
+ </ div >
3023
+ </ div >
3024
+ </ div >
3025
+ </ div >
3026
+ < div class ="sect1 ">
2904
3027
< h2 id ="_extended_compiler_options "> < a class ="anchor " href ="#_extended_compiler_options "> </ a > Extended compiler options</ h2 >
2905
3028
< div class ="sectionbody ">
2906
3029
< div class ="paragraph ">
0 commit comments