Skip to content

make default exports work with babel transpiled es6 import #2002

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 12, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion jscomp/bin/all_ounit_tests.ml
Original file line number Diff line number Diff line change
@@ -6621,7 +6621,8 @@ let reserved_words =
"setInterval";
"setTimeout";
"__dirname";
"__filename"
"__filename";
"__esModule"
|]

let reserved_map =
8 changes: 5 additions & 3 deletions jscomp/bin/whole_compiler.ml
Original file line number Diff line number Diff line change
@@ -59864,7 +59864,8 @@ let reserved_words =
"setInterval";
"setTimeout";
"__dirname";
"__filename"
"__filename";
"__esModule"
|]

let reserved_map =
@@ -86178,7 +86179,7 @@ end = struct
module P = Ext_pp
module L = Js_dump_lit
let default_export = "default"

let esModule = "__esModule", "true"
(** Exports printer *)
(** Print exports in Google module format, CommonJS format *)
let exports cxt f (idents : Ident.t list) =
@@ -86189,7 +86190,8 @@ let exports cxt f (idents : Ident.t list) =
let str,cxt = Ext_pp_scope.str_of_ident cxt id in
cxt, (
if id_name = default_export then
(default_export, str) :: (s,str)::acc
(* TODO check how it will affect AMDJS*)
esModule :: (default_export, str) :: (s,str)::acc
else (s,str) :: acc ) , max len (String.length s) )
(cxt, [], 0) idents in
P.newline f ;
5 changes: 3 additions & 2 deletions jscomp/core/js_dump_import_export.ml
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@
module P = Ext_pp
module L = Js_dump_lit
let default_export = "default"

let esModule = "__esModule", "true"
(** Exports printer *)
(** Print exports in Google module format, CommonJS format *)
let exports cxt f (idents : Ident.t list) =
@@ -36,7 +36,8 @@ let exports cxt f (idents : Ident.t list) =
let str,cxt = Ext_pp_scope.str_of_ident cxt id in
cxt, (
if id_name = default_export then
(default_export, str) :: (s,str)::acc
(* TODO check how it will affect AMDJS*)
esModule :: (default_export, str) :: (s,str)::acc
else (s,str) :: acc ) , max len (String.length s) )
(cxt, [], 0) idents in
P.newline f ;
3 changes: 2 additions & 1 deletion jscomp/ext/ext_ident.ml
Original file line number Diff line number Diff line change
@@ -199,7 +199,8 @@ let reserved_words =
"setInterval";
"setTimeout";
"__dirname";
"__filename"
"__filename";
"__esModule"
|]

let reserved_map =
4 changes: 3 additions & 1 deletion jscomp/others/js_option.ml
Original file line number Diff line number Diff line change
@@ -64,11 +64,13 @@ let map f x =
| None -> None
| Some x -> Some (f x [@bs])

let default a x =
let getWithDefault a x =
match x with
| None -> a
| Some x -> x

let default = getWithDefault

let filter f x =
match x with
| None -> None
5 changes: 5 additions & 0 deletions jscomp/others/js_option.mli
Original file line number Diff line number Diff line change
@@ -40,7 +40,12 @@ val andThen : ('a -> 'b option [@bs]) -> 'a option -> 'b option

val map : ('a -> 'b [@bs]) -> 'a option -> 'b option


val getWithDefault : 'a -> 'a option -> 'a

val default : 'a -> 'a option -> 'a
[@@deprecated "Use getWithDefault instead since default has special meaning in ES module"]


val filter : ('a -> bool [@bs]) -> 'a option -> 'a option

2 changes: 2 additions & 0 deletions jscomp/test/.depend
Original file line number Diff line number Diff line change
@@ -147,6 +147,8 @@ epsilon_test.cmj : mt.cmj
equal_exception_test.cmj : ../stdlib/string.cmj mt.cmj ../stdlib/bytes.cmj
equal_test.cmj :
es6_module_test.cmj : mt.cmj ../stdlib/list.cmj
escape_esmodule.cmj :
esmodule_ref.cmj : ../runtime/js.cmj escape_esmodule.cmj
event_ffi.cmj : ../stdlib/list.cmj ../runtime/js_unsafe.cmj \
../runtime/js.cmj
exception_alias.cmj : ../stdlib/list.cmj
5 changes: 3 additions & 2 deletions jscomp/test/Makefile
Original file line number Diff line number Diff line change
@@ -194,8 +194,9 @@ OTHERS := literals a test_ari test_export2 test_internalOO test_obj_simple_ffi t
functor_def\
functor_inst\
functor_app_test\
module_alias_test

module_alias_test\
escape_esmodule\
esmodule_ref
# bs_uncurry_test
# needs Lam to get rid of Uncurry arity first

1 change: 1 addition & 0 deletions jscomp/test/default_export_test.js
Original file line number Diff line number Diff line change
@@ -5,4 +5,5 @@ var $$default = "xx";

exports.$$default = $$default;
exports.default = $$default;
exports.__esModule= true;
/* No side effect */
12 changes: 12 additions & 0 deletions jscomp/test/escape_esmodule.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use strict';


var $$__esModule = /* false */0;

var $$default = 4;

exports.$$__esModule = $$__esModule;
exports.$$default = $$default;
exports.default = $$default;
exports.__esModule = true;
/* No side effect */
8 changes: 8 additions & 0 deletions jscomp/test/escape_esmodule.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

let __esModule = false





let default = 4
6 changes: 6 additions & 0 deletions jscomp/test/esmodule_ref.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
'use strict';


console.log(/* false */0);

/* Not a pure module */
5 changes: 5 additions & 0 deletions jscomp/test/esmodule_ref.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@



;; assert (not Escape_esmodule.__esModule)
;; Js.log Escape_esmodule.__esModule
1 change: 1 addition & 0 deletions jscomp/test/key_word_property.js
Original file line number Diff line number Diff line change
@@ -44,6 +44,7 @@ var $$case = 3;

exports.$$default = $$default;
exports.default = $$default;
exports.__esModule= true;
exports.$$window = $$window;
exports.mk = mk;
exports.mk2 = mk2;
30 changes: 17 additions & 13 deletions lib/js/js_option.js
Original file line number Diff line number Diff line change
@@ -65,7 +65,7 @@ function map(f, x) {
}
}

function $$default(a, x) {
function getWithDefault(a, x) {
if (x) {
return x[0];
} else {
@@ -96,16 +96,20 @@ function firstSome(a, b) {
}
}

exports.some = some;
exports.isSome = isSome;
exports.isSomeValue = isSomeValue;
exports.isNone = isNone;
exports.getExn = getExn;
exports.equal = equal;
exports.andThen = andThen;
exports.map = map;
exports.$$default = $$default;
exports.default = $$default;
exports.filter = filter;
exports.firstSome = firstSome;
var $$default = getWithDefault;

exports.some = some;
exports.isSome = isSome;
exports.isSomeValue = isSomeValue;
exports.isNone = isNone;
exports.getExn = getExn;
exports.equal = equal;
exports.andThen = andThen;
exports.map = map;
exports.getWithDefault = getWithDefault;
exports.$$default = $$default;
exports.default = $$default;
exports.__esModule = true;
exports.filter = filter;
exports.firstSome = firstSome;
/* No side effect */