After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 392 B |
Before Width: | Height: | Size: 610 B After Width: | Height: | Size: 610 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 751 B |
@ -0,0 +1,394 @@ |
||||
:root { |
||||
--text-color: #fff; |
||||
--text-accent-color: darksalmon; |
||||
--link-color: darkorange; |
||||
--bg-1: #f27121; |
||||
--bg-2: #e94057; |
||||
--bg-3: #8a2387; |
||||
--bg-1-social: #f3a183; |
||||
--bg-2-social: #ec6f66; |
||||
--username-color: cadetblue; |
||||
--terminal-bg: rgba(56, 4, 40, 0.9); |
||||
--terminal-header-bg: #bbb; |
||||
} |
||||
|
||||
body { |
||||
box-sizing: border-box; |
||||
margin: 0; |
||||
display: flex; |
||||
justify-content: space-around; |
||||
align-items: center; |
||||
flex-direction: column; |
||||
height: 100vh; |
||||
background: var(--bg-3); |
||||
/* fallback for old browsers */ |
||||
background: -webkit-linear-gradient(to right, var(--bg-1), var(--bg-2), var(--bg-3)); |
||||
/* Chrome 10-25, Safari 5.1-6 */ |
||||
background: linear-gradient(to right, var(--bg-1), var(--bg-2), var(--bg-3)); |
||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ |
||||
} |
||||
body.dark-mode { |
||||
--text-accent-color: #ffca85; |
||||
--link-color: burlywood; |
||||
--bg-1: #211F20; |
||||
--bg-2: #292D34; |
||||
--bg-3: #213030; |
||||
--bg-1-social: #414141; |
||||
--bg-2-social: #485461; |
||||
--username-color: #858585; |
||||
--terminal-bg: rgb(0 0 0 / 90%); |
||||
--terminal-header-bg: #585252; |
||||
} |
||||
body.dark-mode.firework { |
||||
--terminal-bg: rgb(0 0 0 / 15%); |
||||
} |
||||
|
||||
ul { |
||||
margin: 0; |
||||
} |
||||
|
||||
.terminal { |
||||
position: absolute; |
||||
resize: both; |
||||
overflow: hidden; |
||||
height: 450px; |
||||
width: min(900px, 90vw); |
||||
} |
||||
.terminal .terminal__header { |
||||
height: 25px; |
||||
padding: 0 8px; |
||||
background-color: var(--terminal-header-bg); |
||||
margin: 0 auto; |
||||
border-top-right-radius: 5px; |
||||
border-top-left-radius: 5px; |
||||
cursor: move; |
||||
} |
||||
.terminal .terminal__header .fake-button { |
||||
height: 10px; |
||||
width: 10px; |
||||
border-radius: 50%; |
||||
border: 1px solid #000; |
||||
position: relative; |
||||
top: 6px; |
||||
left: 6px; |
||||
display: inline-block; |
||||
cursor: pointer; |
||||
} |
||||
.terminal .terminal__header .fake-button.fake-close { |
||||
left: 6px; |
||||
background-color: #ff3b47; |
||||
border-color: #9d252b; |
||||
} |
||||
.terminal .terminal__header .fake-button.fake-minimize { |
||||
left: 11px; |
||||
background-color: #ffc100; |
||||
border-color: #9d802c; |
||||
} |
||||
.terminal .terminal__header .fake-button.fake-zoom { |
||||
left: 16px; |
||||
background-color: #00d742; |
||||
border-color: #049931; |
||||
} |
||||
.terminal .terminal__body { |
||||
font-family: "Ubuntu Mono", monospace; |
||||
background: var(--terminal-bg); |
||||
color: var(--text-color); |
||||
padding: 8px; |
||||
overflow-y: scroll; |
||||
overflow-x: hidden; |
||||
box-shadow: rgba(0, 0, 0, 0.2) 0px 12px 28px 0px, rgba(0, 0, 0, 0.1) 0px 2px 4px 0px, rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset; |
||||
border-bottom-right-radius: 5px; |
||||
border-bottom-left-radius: 5px; |
||||
height: calc(100% - 41px); |
||||
} |
||||
.terminal .terminal__body code { |
||||
color: var(--text-accent-color); |
||||
font-size: 14px; |
||||
} |
||||
.terminal .terminal__body .terminal__banner { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
color: var(--text-color); |
||||
} |
||||
.terminal .terminal__body .terminal__banner .terminal__author { |
||||
text-align: right; |
||||
} |
||||
.terminal .terminal__body .terminal__line { |
||||
margin-bottom: 8px; |
||||
} |
||||
.terminal .terminal__body .terminal__line::before { |
||||
content: "Greg LEBRETON ~$ "; |
||||
color: var(--username-color); |
||||
} |
||||
.terminal .terminal__body .terminal__line input[type=text] { |
||||
background: none; |
||||
border: none; |
||||
font-family: "Ubuntu Mono", monospace; |
||||
color: var(--text-color); |
||||
outline: none; |
||||
font-size: 15px; |
||||
width: calc(100% - 150px); |
||||
} |
||||
.terminal .terminal__body .terminal__response { |
||||
margin: 8px 0 16px 0; |
||||
} |
||||
.terminal .terminal__body .terminal__response table { |
||||
border: 1px dashed; |
||||
padding: 4px; |
||||
width: 100%; |
||||
} |
||||
.terminal .terminal__body .terminal__response table a { |
||||
text-decoration: none; |
||||
color: darkorange; |
||||
} |
||||
.terminal .terminal__body .terminal__response table thead th { |
||||
font-weight: normal; |
||||
color: cadetblue; |
||||
border-bottom: 1px solid white; |
||||
padding-bottom: 4px; |
||||
} |
||||
.terminal .terminal__body .terminal__response table tbody td { |
||||
padding: 4px; |
||||
} |
||||
.terminal .terminal__body .terminal__response table tbody tr:not(:last-child) td { |
||||
border-bottom: 1px solid white; |
||||
} |
||||
|
||||
.socials { |
||||
position: absolute; |
||||
right: 16px; |
||||
bottom: 16px; |
||||
display: flex; |
||||
gap: 16px; |
||||
} |
||||
.socials a { |
||||
border-radius: 50%; |
||||
background: var(--bg-2-social); |
||||
/* fallback for old browsers */ |
||||
background: -webkit-linear-gradient(to left, var(--bg-1-social), var(--bg-2-social)); |
||||
/* Chrome 10-25, Safari 5.1-6 */ |
||||
background: linear-gradient(to left, var(--bg-1-social), var(--bg-2-social)); |
||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ |
||||
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; |
||||
width: 4em; |
||||
height: 4em; |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
text-decoration: none; |
||||
} |
||||
.socials a:hover { |
||||
background: var(--bg-2-social); |
||||
/* fallback for old browsers */ |
||||
background: -webkit-linear-gradient(to right, var(--bg-1-social), var(--bg-2-social)); |
||||
/* Chrome 10-25, Safari 5.1-6 */ |
||||
background: linear-gradient(to right, var(--bg-1-social), var(--bg-2-social)); |
||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ |
||||
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; |
||||
width: 4em; |
||||
height: 4em; |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
text-decoration: none; |
||||
} |
||||
.socials a i { |
||||
color: white; |
||||
font-size: 2em; |
||||
} |
||||
|
||||
#banner-github { |
||||
position: absolute; |
||||
top: 0; |
||||
right: 0; |
||||
} |
||||
|
||||
@media (max-width: 880px) { |
||||
.terminal .terminal__body .terminal__banner pre { |
||||
font-size: 10px; |
||||
} |
||||
} |
||||
@media (max-width: 640px) { |
||||
body { |
||||
align-items: center; |
||||
flex-direction: column; |
||||
justify-content: space-evenly; |
||||
} |
||||
|
||||
canvas { |
||||
position: fixed; |
||||
top: 0; |
||||
bottom: 0; |
||||
left: 0; |
||||
right: 0; |
||||
z-index: -1; |
||||
} |
||||
|
||||
.terminal { |
||||
position: unset; |
||||
width: unset; |
||||
height: unset; |
||||
resize: none; |
||||
} |
||||
.terminal .terminal__body { |
||||
max-width: unset; |
||||
width: 90vw; |
||||
height: 70vh; |
||||
} |
||||
.terminal .terminal__body .terminal__banner pre { |
||||
font-size: 5px; |
||||
} |
||||
|
||||
.socials { |
||||
font-size: 13px; |
||||
position: relative; |
||||
bottom: unset; |
||||
right: unset; |
||||
} |
||||
|
||||
#banner-github img { |
||||
width: 100px; |
||||
height: 100px; |
||||
} |
||||
|
||||
#version { |
||||
top: 38px; |
||||
right: 38px; |
||||
font-size: 13px; |
||||
} |
||||
} |
||||
.snowflake { |
||||
color: #fff; |
||||
font-size: 1em; |
||||
font-family: Arial, sans-serif; |
||||
text-shadow: 0 0 5px #000; |
||||
} |
||||
|
||||
@-webkit-keyframes snowflakes-fall { |
||||
0% { |
||||
top: -10%; |
||||
} |
||||
100% { |
||||
top: 100%; |
||||
} |
||||
} |
||||
@-webkit-keyframes snowflakes-shake { |
||||
0%, 100% { |
||||
-webkit-transform: translateX(0); |
||||
transform: translateX(0); |
||||
} |
||||
50% { |
||||
-webkit-transform: translateX(80px); |
||||
transform: translateX(80px); |
||||
} |
||||
} |
||||
@keyframes snowflakes-fall { |
||||
0% { |
||||
top: -10%; |
||||
} |
||||
100% { |
||||
top: 100%; |
||||
} |
||||
} |
||||
@keyframes snowflakes-shake { |
||||
0%, 100% { |
||||
transform: translateX(0); |
||||
} |
||||
50% { |
||||
transform: translateX(80px); |
||||
} |
||||
} |
||||
.snowflake { |
||||
position: fixed; |
||||
top: -10%; |
||||
z-index: 9999; |
||||
-webkit-user-select: none; |
||||
-moz-user-select: none; |
||||
-ms-user-select: none; |
||||
user-select: none; |
||||
cursor: default; |
||||
-webkit-animation-name: snowflakes-fall, snowflakes-shake; |
||||
-webkit-animation-duration: 10s, 3s; |
||||
-webkit-animation-timing-function: linear, ease-in-out; |
||||
-webkit-animation-iteration-count: infinite, infinite; |
||||
-webkit-animation-play-state: running, running; |
||||
animation-name: snowflakes-fall, snowflakes-shake; |
||||
animation-duration: 10s, 3s; |
||||
animation-timing-function: linear, ease-in-out; |
||||
animation-iteration-count: infinite, infinite; |
||||
animation-play-state: running, running; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(0) { |
||||
left: 1%; |
||||
-webkit-animation-delay: 0s, 0s; |
||||
animation-delay: 0s, 0s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(1) { |
||||
left: 10%; |
||||
-webkit-animation-delay: 1s, 1s; |
||||
animation-delay: 1s, 1s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(2) { |
||||
left: 20%; |
||||
-webkit-animation-delay: 6s, 0.5s; |
||||
animation-delay: 6s, 0.5s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(3) { |
||||
left: 30%; |
||||
-webkit-animation-delay: 4s, 2s; |
||||
animation-delay: 4s, 2s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(4) { |
||||
left: 40%; |
||||
-webkit-animation-delay: 2s, 2s; |
||||
animation-delay: 2s, 2s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(5) { |
||||
left: 50%; |
||||
-webkit-animation-delay: 8s, 3s; |
||||
animation-delay: 8s, 3s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(6) { |
||||
left: 60%; |
||||
-webkit-animation-delay: 6s, 2s; |
||||
animation-delay: 6s, 2s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(7) { |
||||
left: 70%; |
||||
-webkit-animation-delay: 2.5s, 1s; |
||||
animation-delay: 2.5s, 1s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(8) { |
||||
left: 80%; |
||||
-webkit-animation-delay: 1s, 0s; |
||||
animation-delay: 1s, 0s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(9) { |
||||
left: 90%; |
||||
-webkit-animation-delay: 3s, 1.5s; |
||||
animation-delay: 3s, 1.5s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(10) { |
||||
left: 25%; |
||||
-webkit-animation-delay: 2s, 0s; |
||||
animation-delay: 2s, 0s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(11) { |
||||
left: 65%; |
||||
-webkit-animation-delay: 4s, 2.5s; |
||||
animation-delay: 4s, 2.5s; |
||||
} |
||||
/*# sourceMappingURL=index.c63bad94.css.map */ |
@ -1,397 +0,0 @@ |
||||
:root { |
||||
--text-color: #fff; |
||||
--text-accent-color: #ffca85; |
||||
--link-color: burlywood; |
||||
--bg-1: #211F20; |
||||
--bg-2: #292D34; |
||||
--bg-3: #213030; |
||||
--bg-1-social: #414141; |
||||
--bg-2-social: #485461; |
||||
--username-color: #858585; |
||||
--terminal-bg: rgb(0 0 0 / 90%); |
||||
--terminal-header-bg: #585252; |
||||
--username-color: cadetblue; |
||||
--terminal-bg: rgba(56, 4, 40, 0.9); |
||||
--terminal-header-bg: #bbb; |
||||
} |
||||
|
||||
body { |
||||
box-sizing: border-box; |
||||
margin: 0; |
||||
display: flex; |
||||
justify-content: space-around; |
||||
align-items: center; |
||||
flex-direction: column; |
||||
height: 100vh; |
||||
background: var(--bg-3); |
||||
/* fallback for old browsers */ |
||||
background: -webkit-linear-gradient(to right, var(--bg-1), var(--bg-2), var(--bg-3)); |
||||
/* Chrome 10-25, Safari 5.1-6 */ |
||||
background: linear-gradient(to right, var(--bg-1), var(--bg-2), var(--bg-3)); |
||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ |
||||
} |
||||
body.dark-mode { |
||||
--text-accent-color: #ffca85; |
||||
--link-color: burlywood; |
||||
--bg-1: #211F20; |
||||
--bg-2: #292D34; |
||||
--bg-3: #213030; |
||||
--bg-1-social: #414141; |
||||
--bg-2-social: #485461; |
||||
--username-color: #858585; |
||||
--terminal-bg: rgb(0 0 0 / 90%); |
||||
--terminal-header-bg: #585252; |
||||
} |
||||
body.dark-mode.firework { |
||||
--terminal-bg: rgb(0 0 0 / 15%); |
||||
} |
||||
|
||||
ul { |
||||
margin: 0; |
||||
} |
||||
|
||||
.terminal { |
||||
position: absolute; |
||||
resize: both; |
||||
overflow: hidden; |
||||
height: 450px; |
||||
width: min(900px, 90vw); |
||||
} |
||||
.terminal .terminal__header { |
||||
height: 25px; |
||||
padding: 0 8px; |
||||
background-color: var(--terminal-header-bg); |
||||
margin: 0 auto; |
||||
border-top-right-radius: 5px; |
||||
border-top-left-radius: 5px; |
||||
cursor: move; |
||||
} |
||||
.terminal .terminal__header .fake-button { |
||||
height: 10px; |
||||
width: 10px; |
||||
border-radius: 50%; |
||||
border: 1px solid #000; |
||||
position: relative; |
||||
top: 6px; |
||||
left: 6px; |
||||
display: inline-block; |
||||
cursor: pointer; |
||||
} |
||||
.terminal .terminal__header .fake-button.fake-close { |
||||
left: 6px; |
||||
background-color: #ff3b47; |
||||
border-color: #9d252b; |
||||
} |
||||
.terminal .terminal__header .fake-button.fake-minimize { |
||||
left: 11px; |
||||
background-color: #ffc100; |
||||
border-color: #9d802c; |
||||
} |
||||
.terminal .terminal__header .fake-button.fake-zoom { |
||||
left: 16px; |
||||
background-color: #00d742; |
||||
border-color: #049931; |
||||
} |
||||
.terminal .terminal__body { |
||||
font-family: "Ubuntu Mono", monospace; |
||||
background: var(--terminal-bg); |
||||
color: var(--text-color); |
||||
padding: 8px; |
||||
overflow-y: scroll; |
||||
overflow-x: hidden; |
||||
box-shadow: rgba(0, 0, 0, 0.2) 0px 12px 28px 0px, rgba(0, 0, 0, 0.1) 0px 2px 4px 0px, rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset; |
||||
border-bottom-right-radius: 5px; |
||||
border-bottom-left-radius: 5px; |
||||
height: calc(100% - 41px); |
||||
} |
||||
.terminal .terminal__body code { |
||||
color: var(--text-accent-color); |
||||
font-size: 14px; |
||||
} |
||||
.terminal .terminal__body .terminal__banner { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
color: var(--text-color); |
||||
} |
||||
.terminal .terminal__body .terminal__banner .terminal__author { |
||||
text-align: right; |
||||
} |
||||
.terminal .terminal__body .terminal__line { |
||||
margin-bottom: 8px; |
||||
} |
||||
.terminal .terminal__body .terminal__line::before { |
||||
content: "Greg LEBRETON ~$ "; |
||||
color: var(--username-color); |
||||
} |
||||
.terminal .terminal__body .terminal__line input[type=text] { |
||||
background: none; |
||||
border: none; |
||||
font-family: "Ubuntu Mono", monospace; |
||||
color: var(--text-color); |
||||
outline: none; |
||||
font-size: 15px; |
||||
width: calc(100% - 150px); |
||||
} |
||||
.terminal .terminal__body .terminal__response { |
||||
margin: 8px 0 16px 0; |
||||
} |
||||
.terminal .terminal__body .terminal__response table { |
||||
border: 1px dashed; |
||||
padding: 4px; |
||||
width: 100%; |
||||
} |
||||
.terminal .terminal__body .terminal__response table a { |
||||
text-decoration: none; |
||||
color: darkorange; |
||||
} |
||||
.terminal .terminal__body .terminal__response table thead th { |
||||
font-weight: normal; |
||||
color: cadetblue; |
||||
border-bottom: 1px solid white; |
||||
padding-bottom: 4px; |
||||
} |
||||
.terminal .terminal__body .terminal__response table tbody td { |
||||
padding: 4px; |
||||
} |
||||
.terminal .terminal__body .terminal__response table tbody tr:not(:last-child) td { |
||||
border-bottom: 1px solid white; |
||||
} |
||||
|
||||
.socials { |
||||
position: absolute; |
||||
right: 16px; |
||||
bottom: 16px; |
||||
display: flex; |
||||
gap: 16px; |
||||
} |
||||
.socials a { |
||||
border-radius: 50%; |
||||
background: var(--bg-2-social); |
||||
/* fallback for old browsers */ |
||||
background: -webkit-linear-gradient(to left, var(--bg-1-social), var(--bg-2-social)); |
||||
/* Chrome 10-25, Safari 5.1-6 */ |
||||
background: linear-gradient(to left, var(--bg-1-social), var(--bg-2-social)); |
||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ |
||||
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; |
||||
width: 4em; |
||||
height: 4em; |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
text-decoration: none; |
||||
} |
||||
.socials a:hover { |
||||
background: var(--bg-2-social); |
||||
/* fallback for old browsers */ |
||||
background: -webkit-linear-gradient(to right, var(--bg-1-social), var(--bg-2-social)); |
||||
/* Chrome 10-25, Safari 5.1-6 */ |
||||
background: linear-gradient(to right, var(--bg-1-social), var(--bg-2-social)); |
||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ |
||||
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; |
||||
width: 4em; |
||||
height: 4em; |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
text-decoration: none; |
||||
} |
||||
.socials a i { |
||||
color: white; |
||||
font-size: 2em; |
||||
} |
||||
|
||||
#banner-github { |
||||
position: absolute; |
||||
top: 0; |
||||
right: 0; |
||||
} |
||||
|
||||
@media (max-width: 880px) { |
||||
.terminal .terminal__body .terminal__banner pre { |
||||
font-size: 10px; |
||||
} |
||||
} |
||||
@media (max-width: 640px) { |
||||
body { |
||||
align-items: center; |
||||
flex-direction: column; |
||||
justify-content: space-evenly; |
||||
} |
||||
|
||||
canvas { |
||||
position: fixed; |
||||
top: 0; |
||||
bottom: 0; |
||||
left: 0; |
||||
right: 0; |
||||
z-index: -1; |
||||
} |
||||
|
||||
.terminal { |
||||
position: unset; |
||||
width: unset; |
||||
height: unset; |
||||
resize: none; |
||||
} |
||||
.terminal .terminal__body { |
||||
max-width: unset; |
||||
width: 90vw; |
||||
height: 70vh; |
||||
} |
||||
.terminal .terminal__body .terminal__banner pre { |
||||
font-size: 5px; |
||||
} |
||||
|
||||
.socials { |
||||
font-size: 13px; |
||||
position: relative; |
||||
bottom: unset; |
||||
right: unset; |
||||
} |
||||
|
||||
#banner-github img { |
||||
width: 100px; |
||||
height: 100px; |
||||
} |
||||
|
||||
#version { |
||||
top: 38px; |
||||
right: 38px; |
||||
font-size: 13px; |
||||
} |
||||
} |
||||
.snowflake { |
||||
color: #fff; |
||||
font-size: 1em; |
||||
font-family: Arial, sans-serif; |
||||
text-shadow: 0 0 5px #000; |
||||
} |
||||
|
||||
@-webkit-keyframes snowflakes-fall { |
||||
0% { |
||||
top: -10%; |
||||
} |
||||
100% { |
||||
top: 100%; |
||||
} |
||||
} |
||||
@-webkit-keyframes snowflakes-shake { |
||||
0%, 100% { |
||||
-webkit-transform: translateX(0); |
||||
transform: translateX(0); |
||||
} |
||||
50% { |
||||
-webkit-transform: translateX(80px); |
||||
transform: translateX(80px); |
||||
} |
||||
} |
||||
@keyframes snowflakes-fall { |
||||
0% { |
||||
top: -10%; |
||||
} |
||||
100% { |
||||
top: 100%; |
||||
} |
||||
} |
||||
@keyframes snowflakes-shake { |
||||
0%, 100% { |
||||
transform: translateX(0); |
||||
} |
||||
50% { |
||||
transform: translateX(80px); |
||||
} |
||||
} |
||||
.snowflake { |
||||
position: fixed; |
||||
top: -10%; |
||||
z-index: 9999; |
||||
-webkit-user-select: none; |
||||
-moz-user-select: none; |
||||
-ms-user-select: none; |
||||
user-select: none; |
||||
cursor: default; |
||||
-webkit-animation-name: snowflakes-fall, snowflakes-shake; |
||||
-webkit-animation-duration: 10s, 3s; |
||||
-webkit-animation-timing-function: linear, ease-in-out; |
||||
-webkit-animation-iteration-count: infinite, infinite; |
||||
-webkit-animation-play-state: running, running; |
||||
animation-name: snowflakes-fall, snowflakes-shake; |
||||
animation-duration: 10s, 3s; |
||||
animation-timing-function: linear, ease-in-out; |
||||
animation-iteration-count: infinite, infinite; |
||||
animation-play-state: running, running; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(0) { |
||||
left: 1%; |
||||
-webkit-animation-delay: 0s, 0s; |
||||
animation-delay: 0s, 0s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(1) { |
||||
left: 10%; |
||||
-webkit-animation-delay: 1s, 1s; |
||||
animation-delay: 1s, 1s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(2) { |
||||
left: 20%; |
||||
-webkit-animation-delay: 6s, 0.5s; |
||||
animation-delay: 6s, 0.5s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(3) { |
||||
left: 30%; |
||||
-webkit-animation-delay: 4s, 2s; |
||||
animation-delay: 4s, 2s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(4) { |
||||
left: 40%; |
||||
-webkit-animation-delay: 2s, 2s; |
||||
animation-delay: 2s, 2s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(5) { |
||||
left: 50%; |
||||
-webkit-animation-delay: 8s, 3s; |
||||
animation-delay: 8s, 3s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(6) { |
||||
left: 60%; |
||||
-webkit-animation-delay: 6s, 2s; |
||||
animation-delay: 6s, 2s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(7) { |
||||
left: 70%; |
||||
-webkit-animation-delay: 2.5s, 1s; |
||||
animation-delay: 2.5s, 1s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(8) { |
||||
left: 80%; |
||||
-webkit-animation-delay: 1s, 0s; |
||||
animation-delay: 1s, 0s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(9) { |
||||
left: 90%; |
||||
-webkit-animation-delay: 3s, 1.5s; |
||||
animation-delay: 3s, 1.5s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(10) { |
||||
left: 25%; |
||||
-webkit-animation-delay: 2s, 0s; |
||||
animation-delay: 2s, 0s; |
||||
} |
||||
|
||||
.snowflake:nth-of-type(11) { |
||||
left: 65%; |
||||
-webkit-animation-delay: 4s, 2.5s; |
||||
animation-delay: 4s, 2.5s; |
||||
} |
||||
/*# sourceMappingURL=index.e8265c92.css.map */ |
@ -1 +1 @@ |
||||
{"name":"Resume Greg Lebreton","short_name":"Resume","icons":[{"src":"/android-chrome-192x192.2e64b829.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.6f3538fd.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} |
||||
{"name":"Resume Antoine DAUTRY","short_name":"Resume","icons":[{"src":"/android-chrome-192x192.6d487ae0.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.b5266908.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} |
@ -0,0 +1 @@ |
||||
../ansi-html-community/bin/ansi-html |
@ -0,0 +1 @@ |
||||
../astring/bin/astring |
@ -0,0 +1 @@ |
||||
../ejs/bin/cli.js |
@ -0,0 +1 @@ |
||||
../escodegen/bin/escodegen.js |
@ -0,0 +1 @@ |
||||
../escodegen/bin/esgenerate.js |
@ -0,0 +1 @@ |
||||
../esprima/bin/esparse.js |
@ -0,0 +1 @@ |
||||
../esprima/bin/esvalidate.js |
@ -0,0 +1 @@ |
||||
../is-docker/cli.js |
@ -0,0 +1 @@ |
||||
../jake/bin/cli.js |
@ -0,0 +1 @@ |
||||
../jsesc/bin/jsesc |
@ -0,0 +1 @@ |
||||
../miller-rabin/bin/miller-rabin |
@ -0,0 +1 @@ |
||||
../mkdirp/bin/cmd.js |
@ -0,0 +1 @@ |
||||
../ncp/bin/ncp |
@ -0,0 +1 @@ |
||||
../@babel/parser/bin/babel-parser.js |
@ -0,0 +1 @@ |
||||
../purgecss/bin/purgecss.js |
@ -0,0 +1 @@ |
||||
../rimraf/bin.js |
@ -0,0 +1 @@ |
||||
../sha.js/bin.js |
@ -0,0 +1 @@ |
||||
../sshpk/bin/sshpk-conv |
@ -0,0 +1 @@ |
||||
../sshpk/bin/sshpk-sign |
@ -0,0 +1 @@ |
||||
../sshpk/bin/sshpk-verify |
@ -0,0 +1 @@ |
||||
../uncss/bin/uncss |
@ -0,0 +1 @@ |
||||
../uuid/bin/uuid |
@ -0,0 +1 @@ |
||||
../which/bin/which |
@ -0,0 +1,22 @@ |
||||
MIT License |
||||
|
||||
Copyright (c) 2014-present Sebastian McKenzie and other contributors |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining |
||||
a copy of this software and associated documentation files (the |
||||
"Software"), to deal in the Software without restriction, including |
||||
without limitation the rights to use, copy, modify, merge, publish, |
||||
distribute, sublicense, and/or sell copies of the Software, and to |
||||
permit persons to whom the Software is furnished to do so, subject to |
||||
the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be |
||||
included in all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1 @@ |
||||
module.exports = require("./data/corejs2-built-ins.json"); |
@ -0,0 +1 @@ |
||||
module.exports = require("./data/corejs3-shipped-proposals.json"); |
@ -0,0 +1,5 @@ |
||||
[ |
||||
"esnext.global-this", |
||||
"esnext.promise.all-settled", |
||||
"esnext.string.match-all" |
||||
] |
@ -0,0 +1,18 @@ |
||||
{ |
||||
"es6.module": { |
||||
"chrome": "61", |
||||
"and_chr": "61", |
||||
"edge": "16", |
||||
"firefox": "60", |
||||
"and_ff": "60", |
||||
"node": "13.2.0", |
||||
"opera": "48", |
||||
"op_mob": "48", |
||||
"safari": "10.1", |
||||
"ios": "10.3", |
||||
"samsung": "8.2", |
||||
"android": "61", |
||||
"electron": "2.0", |
||||
"ios_saf": "10.3" |
||||
} |
||||
} |
@ -0,0 +1,22 @@ |
||||
{ |
||||
"transform-async-to-generator": [ |
||||
"bugfix/transform-async-arrows-in-class" |
||||
], |
||||
"transform-parameters": [ |
||||
"bugfix/transform-edge-default-parameters", |
||||
"bugfix/transform-safari-id-destructuring-collision-in-function-expression" |
||||
], |
||||
"transform-function-name": [ |
||||
"bugfix/transform-edge-function-name" |
||||
], |
||||
"transform-block-scoping": [ |
||||
"bugfix/transform-safari-block-shadowing", |
||||
"bugfix/transform-safari-for-shadowing" |
||||
], |
||||
"transform-template-literals": [ |
||||
"bugfix/transform-tagged-template-caching" |
||||
], |
||||
"proposal-optional-chaining": [ |
||||
"bugfix/transform-v8-spread-parameters-in-optional-chaining" |
||||
] |
||||
} |
@ -0,0 +1,154 @@ |
||||
{ |
||||
"transform-async-to-generator": { |
||||
"chrome": "55", |
||||
"opera": "42", |
||||
"edge": "15", |
||||
"firefox": "52", |
||||
"safari": "10.1", |
||||
"node": "7.6", |
||||
"ios": "10.3", |
||||
"samsung": "6", |
||||
"electron": "1.6" |
||||
}, |
||||
"bugfix/transform-async-arrows-in-class": { |
||||
"chrome": "55", |
||||
"opera": "42", |
||||
"edge": "15", |
||||
"firefox": "52", |
||||
"safari": "11", |
||||
"node": "7.6", |
||||
"ios": "11", |
||||
"samsung": "6", |
||||
"electron": "1.6" |
||||
}, |
||||
"transform-parameters": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "15", |
||||
"firefox": "53", |
||||
"safari": "10", |
||||
"node": "6", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.37" |
||||
}, |
||||
"bugfix/transform-edge-default-parameters": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "18", |
||||
"firefox": "52", |
||||
"safari": "10", |
||||
"node": "6", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.37" |
||||
}, |
||||
"transform-function-name": { |
||||
"chrome": "51", |
||||
"opera": "38", |
||||
"edge": "14", |
||||
"firefox": "53", |
||||
"safari": "10", |
||||
"node": "6.5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "1.2" |
||||
}, |
||||
"bugfix/transform-edge-function-name": { |
||||
"chrome": "51", |
||||
"opera": "38", |
||||
"edge": "79", |
||||
"firefox": "53", |
||||
"safari": "10", |
||||
"node": "6.5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "1.2" |
||||
}, |
||||
"transform-block-scoping": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "14", |
||||
"firefox": "51", |
||||
"safari": "10", |
||||
"node": "6", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.37" |
||||
}, |
||||
"bugfix/transform-safari-block-shadowing": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "12", |
||||
"firefox": "44", |
||||
"safari": "11", |
||||
"node": "6", |
||||
"ie": "11", |
||||
"ios": "11", |
||||
"samsung": "5", |
||||
"electron": "0.37" |
||||
}, |
||||
"bugfix/transform-safari-for-shadowing": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "12", |
||||
"firefox": "4", |
||||
"safari": "11", |
||||
"node": "6", |
||||
"ie": "11", |
||||
"ios": "11", |
||||
"samsung": "5", |
||||
"rhino": "1.7.13", |
||||
"electron": "0.37" |
||||
}, |
||||
"bugfix/transform-safari-id-destructuring-collision-in-function-expression": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "14", |
||||
"firefox": "2", |
||||
"node": "6", |
||||
"samsung": "5", |
||||
"rhino": "1.7.13", |
||||
"electron": "0.37" |
||||
}, |
||||
"transform-template-literals": { |
||||
"chrome": "41", |
||||
"opera": "28", |
||||
"edge": "13", |
||||
"firefox": "34", |
||||
"safari": "9", |
||||
"node": "4", |
||||
"ios": "9", |
||||
"samsung": "3.4", |
||||
"electron": "0.21" |
||||
}, |
||||
"bugfix/transform-tagged-template-caching": { |
||||
"chrome": "41", |
||||
"opera": "28", |
||||
"edge": "12", |
||||
"firefox": "34", |
||||
"safari": "13", |
||||
"node": "4", |
||||
"ios": "13", |
||||
"samsung": "3.4", |
||||
"electron": "0.21" |
||||
}, |
||||
"proposal-optional-chaining": { |
||||
"chrome": "80", |
||||
"opera": "67", |
||||
"edge": "80", |
||||
"firefox": "74", |
||||
"safari": "13.1", |
||||
"node": "14", |
||||
"ios": "13.4", |
||||
"samsung": "13", |
||||
"electron": "8.0" |
||||
}, |
||||
"bugfix/transform-v8-spread-parameters-in-optional-chaining": { |
||||
"chrome": "91", |
||||
"firefox": "74", |
||||
"safari": "13.1", |
||||
"ios": "13.4", |
||||
"electron": "13.0" |
||||
} |
||||
} |
@ -0,0 +1,464 @@ |
||||
{ |
||||
"proposal-class-static-block": { |
||||
"chrome": "94", |
||||
"firefox": "93" |
||||
}, |
||||
"proposal-private-property-in-object": { |
||||
"chrome": "91", |
||||
"firefox": "90", |
||||
"safari": "15", |
||||
"ios": "15", |
||||
"electron": "13.0" |
||||
}, |
||||
"proposal-class-properties": { |
||||
"chrome": "74", |
||||
"opera": "62", |
||||
"edge": "79", |
||||
"firefox": "90", |
||||
"safari": "14.1", |
||||
"node": "12", |
||||
"ios": "15", |
||||
"samsung": "11", |
||||
"electron": "6.0" |
||||
}, |
||||
"proposal-private-methods": { |
||||
"chrome": "84", |
||||
"opera": "70", |
||||
"edge": "84", |
||||
"firefox": "90", |
||||
"safari": "15", |
||||
"node": "14.6", |
||||
"ios": "15", |
||||
"samsung": "14", |
||||
"electron": "10.0" |
||||
}, |
||||
"proposal-numeric-separator": { |
||||
"chrome": "75", |
||||
"opera": "62", |
||||
"edge": "79", |
||||
"firefox": "70", |
||||
"safari": "13", |
||||
"node": "12.5", |
||||
"ios": "13", |
||||
"samsung": "11", |
||||
"electron": "6.0" |
||||
}, |
||||
"proposal-logical-assignment-operators": { |
||||
"chrome": "85", |
||||
"opera": "71", |
||||
"edge": "85", |
||||
"firefox": "79", |
||||
"safari": "14", |
||||
"node": "15", |
||||
"ios": "14", |
||||
"samsung": "14", |
||||
"electron": "10.0" |
||||
}, |
||||
"proposal-nullish-coalescing-operator": { |
||||
"chrome": "80", |
||||
"opera": "67", |
||||
"edge": "80", |
||||
"firefox": "72", |
||||
"safari": "13.1", |
||||
"node": "14", |
||||
"ios": "13.4", |
||||
"samsung": "13", |
||||
"electron": "8.0" |
||||
}, |
||||
"proposal-optional-chaining": { |
||||
"chrome": "91", |
||||
"firefox": "74", |
||||
"safari": "13.1", |
||||
"ios": "13.4", |
||||
"electron": "13.0" |
||||
}, |
||||
"proposal-json-strings": { |
||||
"chrome": "66", |
||||
"opera": "53", |
||||
"edge": "79", |
||||
"firefox": "62", |
||||
"safari": "12", |
||||
"node": "10", |
||||
"ios": "12", |
||||
"samsung": "9", |
||||
"electron": "3.0" |
||||
}, |
||||
"proposal-optional-catch-binding": { |
||||
"chrome": "66", |
||||
"opera": "53", |
||||
"edge": "79", |
||||
"firefox": "58", |
||||
"safari": "11.1", |
||||
"node": "10", |
||||
"ios": "11.3", |
||||
"samsung": "9", |
||||
"electron": "3.0" |
||||
}, |
||||
"transform-parameters": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "18", |
||||
"firefox": "53", |
||||
"node": "6", |
||||
"samsung": "5", |
||||
"electron": "0.37" |
||||
}, |
||||
"proposal-async-generator-functions": { |
||||
"chrome": "63", |
||||
"opera": "50", |
||||
"edge": "79", |
||||
"firefox": "57", |
||||
"safari": "12", |
||||
"node": "10", |
||||
"ios": "12", |
||||
"samsung": "8", |
||||
"electron": "3.0" |
||||
}, |
||||
"proposal-object-rest-spread": { |
||||
"chrome": "60", |
||||
"opera": "47", |
||||
"edge": "79", |
||||
"firefox": "55", |
||||
"safari": "11.1", |
||||
"node": "8.3", |
||||
"ios": "11.3", |
||||
"samsung": "8", |
||||
"electron": "2.0" |
||||
}, |
||||
"transform-dotall-regex": { |
||||
"chrome": "62", |
||||
"opera": "49", |
||||
"edge": "79", |
||||
"firefox": "78", |
||||
"safari": "11.1", |
||||
"node": "8.10", |
||||
"ios": "11.3", |
||||
"samsung": "8", |
||||
"electron": "3.0" |
||||
}, |
||||
"proposal-unicode-property-regex": { |
||||
"chrome": "64", |
||||
"opera": "51", |
||||
"edge": "79", |
||||
"firefox": "78", |
||||
"safari": "11.1", |
||||
"node": "10", |
||||
"ios": "11.3", |
||||
"samsung": "9", |
||||
"electron": "3.0" |
||||
}, |
||||
"transform-named-capturing-groups-regex": { |
||||
"chrome": "64", |
||||
"opera": "51", |
||||
"edge": "79", |
||||
"firefox": "78", |
||||
"safari": "11.1", |
||||
"node": "10", |
||||
"ios": "11.3", |
||||
"samsung": "9", |
||||
"electron": "3.0" |
||||
}, |
||||
"transform-async-to-generator": { |
||||
"chrome": "55", |
||||
"opera": "42", |
||||
"edge": "15", |
||||
"firefox": "52", |
||||
"safari": "11", |
||||
"node": "7.6", |
||||
"ios": "11", |
||||
"samsung": "6", |
||||
"electron": "1.6" |
||||
}, |
||||
"transform-exponentiation-operator": { |
||||
"chrome": "52", |
||||
"opera": "39", |
||||
"edge": "14", |
||||
"firefox": "52", |
||||
"safari": "10.1", |
||||
"node": "7", |
||||
"ios": "10.3", |
||||
"samsung": "6", |
||||
"electron": "1.3" |
||||
}, |
||||
"transform-template-literals": { |
||||
"chrome": "41", |
||||
"opera": "28", |
||||
"edge": "13", |
||||
"firefox": "34", |
||||
"safari": "13", |
||||
"node": "4", |
||||
"ios": "13", |
||||
"samsung": "3.4", |
||||
"electron": "0.21" |
||||
}, |
||||
"transform-literals": { |
||||
"chrome": "44", |
||||
"opera": "31", |
||||
"edge": "12", |
||||
"firefox": "53", |
||||
"safari": "9", |
||||
"node": "4", |
||||
"ios": "9", |
||||
"samsung": "4", |
||||
"electron": "0.30" |
||||
}, |
||||
"transform-function-name": { |
||||
"chrome": "51", |
||||
"opera": "38", |
||||
"edge": "79", |
||||
"firefox": "53", |
||||
"safari": "10", |
||||
"node": "6.5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "1.2" |
||||
}, |
||||
"transform-arrow-functions": { |
||||
"chrome": "47", |
||||
"opera": "34", |
||||
"edge": "13", |
||||
"firefox": "43", |
||||
"safari": "10", |
||||
"node": "6", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"rhino": "1.7.13", |
||||
"electron": "0.36" |
||||
}, |
||||
"transform-block-scoped-functions": { |
||||
"chrome": "41", |
||||
"opera": "28", |
||||
"edge": "12", |
||||
"firefox": "46", |
||||
"safari": "10", |
||||
"node": "4", |
||||
"ie": "11", |
||||
"ios": "10", |
||||
"samsung": "3.4", |
||||
"electron": "0.21" |
||||
}, |
||||
"transform-classes": { |
||||
"chrome": "46", |
||||
"opera": "33", |
||||
"edge": "13", |
||||
"firefox": "45", |
||||
"safari": "10", |
||||
"node": "5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.36" |
||||
}, |
||||
"transform-object-super": { |
||||
"chrome": "46", |
||||
"opera": "33", |
||||
"edge": "13", |
||||
"firefox": "45", |
||||
"safari": "10", |
||||
"node": "5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.36" |
||||
}, |
||||
"transform-shorthand-properties": { |
||||
"chrome": "43", |
||||
"opera": "30", |
||||
"edge": "12", |
||||
"firefox": "33", |
||||
"safari": "9", |
||||
"node": "4", |
||||
"ios": "9", |
||||
"samsung": "4", |
||||
"electron": "0.27" |
||||
}, |
||||
"transform-duplicate-keys": { |
||||
"chrome": "42", |
||||
"opera": "29", |
||||
"edge": "12", |
||||
"firefox": "34", |
||||
"safari": "9", |
||||
"node": "4", |
||||
"ios": "9", |
||||
"samsung": "3.4", |
||||
"electron": "0.25" |
||||
}, |
||||
"transform-computed-properties": { |
||||
"chrome": "44", |
||||
"opera": "31", |
||||
"edge": "12", |
||||
"firefox": "34", |
||||
"safari": "7.1", |
||||
"node": "4", |
||||
"ios": "8", |
||||
"samsung": "4", |
||||
"electron": "0.30" |
||||
}, |
||||
"transform-for-of": { |
||||
"chrome": "51", |
||||
"opera": "38", |
||||
"edge": "15", |
||||
"firefox": "53", |
||||
"safari": "10", |
||||
"node": "6.5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "1.2" |
||||
}, |
||||
"transform-sticky-regex": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "13", |
||||
"firefox": "3", |
||||
"safari": "10", |
||||
"node": "6", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.37" |
||||
}, |
||||
"transform-unicode-escapes": { |
||||
"chrome": "44", |
||||
"opera": "31", |
||||
"edge": "12", |
||||
"firefox": "53", |
||||
"safari": "9", |
||||
"node": "4", |
||||
"ios": "9", |
||||
"samsung": "4", |
||||
"electron": "0.30" |
||||
}, |
||||
"transform-unicode-regex": { |
||||
"chrome": "50", |
||||
"opera": "37", |
||||
"edge": "13", |
||||
"firefox": "46", |
||||
"safari": "12", |
||||
"node": "6", |
||||
"ios": "12", |
||||
"samsung": "5", |
||||
"electron": "1.1" |
||||
}, |
||||
"transform-spread": { |
||||
"chrome": "46", |
||||
"opera": "33", |
||||
"edge": "13", |
||||
"firefox": "45", |
||||
"safari": "10", |
||||
"node": "5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.36" |
||||
}, |
||||
"transform-destructuring": { |
||||
"chrome": "51", |
||||
"opera": "38", |
||||
"edge": "15", |
||||
"firefox": "53", |
||||
"safari": "10", |
||||
"node": "6.5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "1.2" |
||||
}, |
||||
"transform-block-scoping": { |
||||
"chrome": "49", |
||||
"opera": "36", |
||||
"edge": "14", |
||||
"firefox": "51", |
||||
"safari": "11", |
||||
"node": "6", |
||||
"ios": "11", |
||||
"samsung": "5", |
||||
"electron": "0.37" |
||||
}, |
||||
"transform-typeof-symbol": { |
||||
"chrome": "38", |
||||
"opera": "25", |
||||
"edge": "12", |
||||
"firefox": "36", |
||||
"safari": "9", |
||||
"node": "0.12", |
||||
"ios": "9", |
||||
"samsung": "3", |
||||
"rhino": "1.7.13", |
||||
"electron": "0.20" |
||||
}, |
||||
"transform-new-target": { |
||||
"chrome": "46", |
||||
"opera": "33", |
||||
"edge": "14", |
||||
"firefox": "41", |
||||
"safari": "10", |
||||
"node": "5", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "0.36" |
||||
}, |
||||
"transform-regenerator": { |
||||
"chrome": "50", |
||||
"opera": "37", |
||||
"edge": "13", |
||||
"firefox": "53", |
||||
"safari": "10", |
||||
"node": "6", |
||||
"ios": "10", |
||||
"samsung": "5", |
||||
"electron": "1.1" |
||||
}, |
||||
"transform-member-expression-literals": { |
||||
"chrome": "7", |
||||
"opera": "12", |
||||
"edge": "12", |
||||
"firefox": "2", |
||||
"safari": "5.1", |
||||
"node": "0.10", |
||||
"ie": "9", |
||||
"android": "4", |
||||
"ios": "6", |
||||
"phantom": "2", |
||||
"samsung": "1", |
||||
"rhino": "1.7.13", |
||||
"electron": "0.20" |
||||
}, |
||||
"transform-property-literals": { |
||||
"chrome": "7", |
||||
"opera": "12", |
||||
"edge": "12", |
||||
"firefox": "2", |
||||
"safari": "5.1", |
||||
"node": "0.10", |
||||
"ie": "9", |
||||
"android": "4", |
||||
"ios": "6", |
||||
"phantom": "2", |
||||
"samsung": "1", |
||||
"rhino": "1.7.13", |
||||
"electron": "0.20" |
||||
}, |
||||
"transform-reserved-words": { |
||||
"chrome": "13", |
||||
"opera": "10.50", |
||||
"edge": "12", |
||||
"firefox": "2", |
||||
"safari": "3.1", |
||||
"node": "0.10", |
||||
"ie": "9", |
||||
"android": "4.4", |
||||
"ios": "6", |
||||
"phantom": "2", |
||||
"samsung": "1", |
||||
"rhino": "1.7.13", |
||||
"electron": "0.20" |
||||
}, |
||||
"proposal-export-namespace-from": { |
||||
"chrome": "72", |
||||
"and_chr": "72", |
||||
"edge": "79", |
||||
"firefox": "80", |
||||
"and_ff": "80", |
||||
"node": "13.2", |
||||
"opera": "60", |
||||
"op_mob": "51", |
||||
"samsung": "11.0", |
||||
"android": "72", |
||||
"electron": "5.0" |
||||
} |
||||
} |
@ -0,0 +1 @@ |
||||
module.exports = require("./data/native-modules.json"); |
@ -0,0 +1 @@ |
||||
module.exports = require("./data/overlapping-plugins.json"); |
@ -0,0 +1,39 @@ |
||||
{ |
||||
"name": "@babel/compat-data", |
||||
"version": "7.16.0", |
||||
"author": "The Babel Team (https://babel.dev/team)", |
||||
"license": "MIT", |
||||
"description": "", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://github.com/babel/babel.git", |
||||
"directory": "packages/babel-compat-data" |
||||
}, |
||||
"publishConfig": { |
||||
"access": "public" |
||||
}, |
||||
"exports": { |
||||
"./plugins": "./plugins.js", |
||||
"./native-modules": "./native-modules.js", |
||||
"./corejs2-built-ins": "./corejs2-built-ins.js", |
||||
"./corejs3-shipped-proposals": "./corejs3-shipped-proposals.js", |
||||
"./overlapping-plugins": "./overlapping-plugins.js", |
||||
"./plugin-bugfixes": "./plugin-bugfixes.js" |
||||
}, |
||||
"scripts": { |
||||
"build-data": "./scripts/download-compat-table.sh && node ./scripts/build-data.js && node ./scripts/build-modules-support.js && node ./scripts/build-bugfixes-targets.js" |
||||
}, |
||||
"keywords": [ |
||||
"babel", |
||||
"compat-table", |
||||
"compat-data" |
||||
], |
||||
"devDependencies": { |
||||
"@mdn/browser-compat-data": "^3.3.4", |
||||
"core-js-compat": "^3.19.0", |
||||
"electron-to-chromium": "^1.3.749" |
||||
}, |
||||
"engines": { |
||||
"node": ">=6.9.0" |
||||
} |
||||
} |
@ -0,0 +1 @@ |
||||
module.exports = require("./data/plugin-bugfixes.json"); |
@ -0,0 +1 @@ |
||||
module.exports = require("./data/plugins.json"); |
@ -0,0 +1,22 @@ |
||||
MIT License |
||||
|
||||
Copyright (c) 2014-present Sebastian McKenzie and other contributors |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining |
||||
a copy of this software and associated documentation files (the |
||||
"Software"), to deal in the Software without restriction, including |
||||
without limitation the rights to use, copy, modify, merge, publish, |
||||
distribute, sublicense, and/or sell copies of the Software, and to |
||||
permit persons to whom the Software is furnished to do so, subject to |
||||
the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be |
||||
included in all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,19 @@ |
||||
# @babel/core |
||||
|
||||
> Babel compiler core. |
||||
|
||||
See our website [@babel/core](https://babeljs.io/docs/en/babel-core) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20core%22+is%3Aopen) associated with this package. |
||||
|
||||
## Install |
||||
|
||||
Using npm: |
||||
|
||||
```sh |
||||
npm install --save-dev @babel/core |
||||
``` |
||||
|
||||
or using yarn: |
||||
|
||||
```sh |
||||
yarn add @babel/core --dev |
||||
``` |
@ -0,0 +1,325 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.assertSimpleType = assertSimpleType; |
||||
exports.makeStrongCache = makeStrongCache; |
||||
exports.makeStrongCacheSync = makeStrongCacheSync; |
||||
exports.makeWeakCache = makeWeakCache; |
||||
exports.makeWeakCacheSync = makeWeakCacheSync; |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _async = require("../gensync-utils/async"); |
||||
|
||||
var _util = require("./util"); |
||||
|
||||
const synchronize = gen => { |
||||
return _gensync()(gen).sync; |
||||
}; |
||||
|
||||
function* genTrue() { |
||||
return true; |
||||
} |
||||
|
||||
function makeWeakCache(handler) { |
||||
return makeCachedFunction(WeakMap, handler); |
||||
} |
||||
|
||||
function makeWeakCacheSync(handler) { |
||||
return synchronize(makeWeakCache(handler)); |
||||
} |
||||
|
||||
function makeStrongCache(handler) { |
||||
return makeCachedFunction(Map, handler); |
||||
} |
||||
|
||||
function makeStrongCacheSync(handler) { |
||||
return synchronize(makeStrongCache(handler)); |
||||
} |
||||
|
||||
function makeCachedFunction(CallCache, handler) { |
||||
const callCacheSync = new CallCache(); |
||||
const callCacheAsync = new CallCache(); |
||||
const futureCache = new CallCache(); |
||||
return function* cachedFunction(arg, data) { |
||||
const asyncContext = yield* (0, _async.isAsync)(); |
||||
const callCache = asyncContext ? callCacheAsync : callCacheSync; |
||||
const cached = yield* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data); |
||||
if (cached.valid) return cached.value; |
||||
const cache = new CacheConfigurator(data); |
||||
const handlerResult = handler(arg, cache); |
||||
let finishLock; |
||||
let value; |
||||
|
||||
if ((0, _util.isIterableIterator)(handlerResult)) { |
||||
const gen = handlerResult; |
||||
value = yield* (0, _async.onFirstPause)(gen, () => { |
||||
finishLock = setupAsyncLocks(cache, futureCache, arg); |
||||
}); |
||||
} else { |
||||
value = handlerResult; |
||||
} |
||||
|
||||
updateFunctionCache(callCache, cache, arg, value); |
||||
|
||||
if (finishLock) { |
||||
futureCache.delete(arg); |
||||
finishLock.release(value); |
||||
} |
||||
|
||||
return value; |
||||
}; |
||||
} |
||||
|
||||
function* getCachedValue(cache, arg, data) { |
||||
const cachedValue = cache.get(arg); |
||||
|
||||
if (cachedValue) { |
||||
for (const { |
||||
value, |
||||
valid |
||||
} of cachedValue) { |
||||
if (yield* valid(data)) return { |
||||
valid: true, |
||||
value |
||||
}; |
||||
} |
||||
} |
||||
|
||||
return { |
||||
valid: false, |
||||
value: null |
||||
}; |
||||
} |
||||
|
||||
function* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data) { |
||||
const cached = yield* getCachedValue(callCache, arg, data); |
||||
|
||||
if (cached.valid) { |
||||
return cached; |
||||
} |
||||
|
||||
if (asyncContext) { |
||||
const cached = yield* getCachedValue(futureCache, arg, data); |
||||
|
||||
if (cached.valid) { |
||||
const value = yield* (0, _async.waitFor)(cached.value.promise); |
||||
return { |
||||
valid: true, |
||||
value |
||||
}; |
||||
} |
||||
} |
||||
|
||||
return { |
||||
valid: false, |
||||
value: null |
||||
}; |
||||
} |
||||
|
||||
function setupAsyncLocks(config, futureCache, arg) { |
||||
const finishLock = new Lock(); |
||||
updateFunctionCache(futureCache, config, arg, finishLock); |
||||
return finishLock; |
||||
} |
||||
|
||||
function updateFunctionCache(cache, config, arg, value) { |
||||
if (!config.configured()) config.forever(); |
||||
let cachedValue = cache.get(arg); |
||||
config.deactivate(); |
||||
|
||||
switch (config.mode()) { |
||||
case "forever": |
||||
cachedValue = [{ |
||||
value, |
||||
valid: genTrue |
||||
}]; |
||||
cache.set(arg, cachedValue); |
||||
break; |
||||
|
||||
case "invalidate": |
||||
cachedValue = [{ |
||||
value, |
||||
valid: config.validator() |
||||
}]; |
||||
cache.set(arg, cachedValue); |
||||
break; |
||||
|
||||
case "valid": |
||||
if (cachedValue) { |
||||
cachedValue.push({ |
||||
value, |
||||
valid: config.validator() |
||||
}); |
||||
} else { |
||||
cachedValue = [{ |
||||
value, |
||||
valid: config.validator() |
||||
}]; |
||||
cache.set(arg, cachedValue); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
class CacheConfigurator { |
||||
constructor(data) { |
||||
this._active = true; |
||||
this._never = false; |
||||
this._forever = false; |
||||
this._invalidate = false; |
||||
this._configured = false; |
||||
this._pairs = []; |
||||
this._data = void 0; |
||||
this._data = data; |
||||
} |
||||
|
||||
simple() { |
||||
return makeSimpleConfigurator(this); |
||||
} |
||||
|
||||
mode() { |
||||
if (this._never) return "never"; |
||||
if (this._forever) return "forever"; |
||||
if (this._invalidate) return "invalidate"; |
||||
return "valid"; |
||||
} |
||||
|
||||
forever() { |
||||
if (!this._active) { |
||||
throw new Error("Cannot change caching after evaluation has completed."); |
||||
} |
||||
|
||||
if (this._never) { |
||||
throw new Error("Caching has already been configured with .never()"); |
||||
} |
||||
|
||||
this._forever = true; |
||||
this._configured = true; |
||||
} |
||||
|
||||
never() { |
||||
if (!this._active) { |
||||
throw new Error("Cannot change caching after evaluation has completed."); |
||||
} |
||||
|
||||
if (this._forever) { |
||||
throw new Error("Caching has already been configured with .forever()"); |
||||
} |
||||
|
||||
this._never = true; |
||||
this._configured = true; |
||||
} |
||||
|
||||
using(handler) { |
||||
if (!this._active) { |
||||
throw new Error("Cannot change caching after evaluation has completed."); |
||||
} |
||||
|
||||
if (this._never || this._forever) { |
||||
throw new Error("Caching has already been configured with .never or .forever()"); |
||||
} |
||||
|
||||
this._configured = true; |
||||
const key = handler(this._data); |
||||
const fn = (0, _async.maybeAsync)(handler, `You appear to be using an async cache handler, but Babel has been called synchronously`); |
||||
|
||||
if ((0, _async.isThenable)(key)) { |
||||
return key.then(key => { |
||||
this._pairs.push([key, fn]); |
||||
|
||||
return key; |
||||
}); |
||||
} |
||||
|
||||
this._pairs.push([key, fn]); |
||||
|
||||
return key; |
||||
} |
||||
|
||||
invalidate(handler) { |
||||
this._invalidate = true; |
||||
return this.using(handler); |
||||
} |
||||
|
||||
validator() { |
||||
const pairs = this._pairs; |
||||
return function* (data) { |
||||
for (const [key, fn] of pairs) { |
||||
if (key !== (yield* fn(data))) return false; |
||||
} |
||||
|
||||
return true; |
||||
}; |
||||
} |
||||
|
||||
deactivate() { |
||||
this._active = false; |
||||
} |
||||
|
||||
configured() { |
||||
return this._configured; |
||||
} |
||||
|
||||
} |
||||
|
||||
function makeSimpleConfigurator(cache) { |
||||
function cacheFn(val) { |
||||
if (typeof val === "boolean") { |
||||
if (val) cache.forever();else cache.never(); |
||||
return; |
||||
} |
||||
|
||||
return cache.using(() => assertSimpleType(val())); |
||||
} |
||||
|
||||
cacheFn.forever = () => cache.forever(); |
||||
|
||||
cacheFn.never = () => cache.never(); |
||||
|
||||
cacheFn.using = cb => cache.using(() => assertSimpleType(cb())); |
||||
|
||||
cacheFn.invalidate = cb => cache.invalidate(() => assertSimpleType(cb())); |
||||
|
||||
return cacheFn; |
||||
} |
||||
|
||||
function assertSimpleType(value) { |
||||
if ((0, _async.isThenable)(value)) { |
||||
throw new Error(`You appear to be using an async cache handler, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously handle your caching logic.`); |
||||
} |
||||
|
||||
if (value != null && typeof value !== "string" && typeof value !== "boolean" && typeof value !== "number") { |
||||
throw new Error("Cache keys must be either string, boolean, number, null, or undefined."); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
class Lock { |
||||
constructor() { |
||||
this.released = false; |
||||
this.promise = void 0; |
||||
this._resolve = void 0; |
||||
this.promise = new Promise(resolve => { |
||||
this._resolve = resolve; |
||||
}); |
||||
} |
||||
|
||||
release(value) { |
||||
this.released = true; |
||||
|
||||
this._resolve(value); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,564 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.buildPresetChain = buildPresetChain; |
||||
exports.buildPresetChainWalker = void 0; |
||||
exports.buildRootChain = buildRootChain; |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _debug() { |
||||
const data = require("debug"); |
||||
|
||||
_debug = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _options = require("./validation/options"); |
||||
|
||||
var _patternToRegex = require("./pattern-to-regex"); |
||||
|
||||
var _printer = require("./printer"); |
||||
|
||||
var _files = require("./files"); |
||||
|
||||
var _caching = require("./caching"); |
||||
|
||||
var _configDescriptors = require("./config-descriptors"); |
||||
|
||||
const debug = _debug()("babel:config:config-chain"); |
||||
|
||||
function* buildPresetChain(arg, context) { |
||||
const chain = yield* buildPresetChainWalker(arg, context); |
||||
if (!chain) return null; |
||||
return { |
||||
plugins: dedupDescriptors(chain.plugins), |
||||
presets: dedupDescriptors(chain.presets), |
||||
options: chain.options.map(o => normalizeOptions(o)), |
||||
files: new Set() |
||||
}; |
||||
} |
||||
|
||||
const buildPresetChainWalker = makeChainWalker({ |
||||
root: preset => loadPresetDescriptors(preset), |
||||
env: (preset, envName) => loadPresetEnvDescriptors(preset)(envName), |
||||
overrides: (preset, index) => loadPresetOverridesDescriptors(preset)(index), |
||||
overridesEnv: (preset, index, envName) => loadPresetOverridesEnvDescriptors(preset)(index)(envName), |
||||
createLogger: () => () => {} |
||||
}); |
||||
exports.buildPresetChainWalker = buildPresetChainWalker; |
||||
const loadPresetDescriptors = (0, _caching.makeWeakCacheSync)(preset => buildRootDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors)); |
||||
const loadPresetEnvDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(envName => buildEnvDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, envName))); |
||||
const loadPresetOverridesDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(index => buildOverrideDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, index))); |
||||
const loadPresetOverridesEnvDescriptors = (0, _caching.makeWeakCacheSync)(preset => (0, _caching.makeStrongCacheSync)(index => (0, _caching.makeStrongCacheSync)(envName => buildOverrideEnvDescriptors(preset, preset.alias, _configDescriptors.createUncachedDescriptors, index, envName)))); |
||||
|
||||
function* buildRootChain(opts, context) { |
||||
let configReport, babelRcReport; |
||||
const programmaticLogger = new _printer.ConfigPrinter(); |
||||
const programmaticChain = yield* loadProgrammaticChain({ |
||||
options: opts, |
||||
dirname: context.cwd |
||||
}, context, undefined, programmaticLogger); |
||||
if (!programmaticChain) return null; |
||||
const programmaticReport = yield* programmaticLogger.output(); |
||||
let configFile; |
||||
|
||||
if (typeof opts.configFile === "string") { |
||||
configFile = yield* (0, _files.loadConfig)(opts.configFile, context.cwd, context.envName, context.caller); |
||||
} else if (opts.configFile !== false) { |
||||
configFile = yield* (0, _files.findRootConfig)(context.root, context.envName, context.caller); |
||||
} |
||||
|
||||
let { |
||||
babelrc, |
||||
babelrcRoots |
||||
} = opts; |
||||
let babelrcRootsDirectory = context.cwd; |
||||
const configFileChain = emptyChain(); |
||||
const configFileLogger = new _printer.ConfigPrinter(); |
||||
|
||||
if (configFile) { |
||||
const validatedFile = validateConfigFile(configFile); |
||||
const result = yield* loadFileChain(validatedFile, context, undefined, configFileLogger); |
||||
if (!result) return null; |
||||
configReport = yield* configFileLogger.output(); |
||||
|
||||
if (babelrc === undefined) { |
||||
babelrc = validatedFile.options.babelrc; |
||||
} |
||||
|
||||
if (babelrcRoots === undefined) { |
||||
babelrcRootsDirectory = validatedFile.dirname; |
||||
babelrcRoots = validatedFile.options.babelrcRoots; |
||||
} |
||||
|
||||
mergeChain(configFileChain, result); |
||||
} |
||||
|
||||
let ignoreFile, babelrcFile; |
||||
let isIgnored = false; |
||||
const fileChain = emptyChain(); |
||||
|
||||
if ((babelrc === true || babelrc === undefined) && typeof context.filename === "string") { |
||||
const pkgData = yield* (0, _files.findPackageData)(context.filename); |
||||
|
||||
if (pkgData && babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory)) { |
||||
({ |
||||
ignore: ignoreFile, |
||||
config: babelrcFile |
||||
} = yield* (0, _files.findRelativeConfig)(pkgData, context.envName, context.caller)); |
||||
|
||||
if (ignoreFile) { |
||||
fileChain.files.add(ignoreFile.filepath); |
||||
} |
||||
|
||||
if (ignoreFile && shouldIgnore(context, ignoreFile.ignore, null, ignoreFile.dirname)) { |
||||
isIgnored = true; |
||||
} |
||||
|
||||
if (babelrcFile && !isIgnored) { |
||||
const validatedFile = validateBabelrcFile(babelrcFile); |
||||
const babelrcLogger = new _printer.ConfigPrinter(); |
||||
const result = yield* loadFileChain(validatedFile, context, undefined, babelrcLogger); |
||||
|
||||
if (!result) { |
||||
isIgnored = true; |
||||
} else { |
||||
babelRcReport = yield* babelrcLogger.output(); |
||||
mergeChain(fileChain, result); |
||||
} |
||||
} |
||||
|
||||
if (babelrcFile && isIgnored) { |
||||
fileChain.files.add(babelrcFile.filepath); |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (context.showConfig) { |
||||
console.log(`Babel configs on "${context.filename}" (ascending priority):\n` + [configReport, babelRcReport, programmaticReport].filter(x => !!x).join("\n\n") + "\n-----End Babel configs-----"); |
||||
} |
||||
|
||||
const chain = mergeChain(mergeChain(mergeChain(emptyChain(), configFileChain), fileChain), programmaticChain); |
||||
return { |
||||
plugins: isIgnored ? [] : dedupDescriptors(chain.plugins), |
||||
presets: isIgnored ? [] : dedupDescriptors(chain.presets), |
||||
options: isIgnored ? [] : chain.options.map(o => normalizeOptions(o)), |
||||
fileHandling: isIgnored ? "ignored" : "transpile", |
||||
ignore: ignoreFile || undefined, |
||||
babelrc: babelrcFile || undefined, |
||||
config: configFile || undefined, |
||||
files: chain.files |
||||
}; |
||||
} |
||||
|
||||
function babelrcLoadEnabled(context, pkgData, babelrcRoots, babelrcRootsDirectory) { |
||||
if (typeof babelrcRoots === "boolean") return babelrcRoots; |
||||
const absoluteRoot = context.root; |
||||
|
||||
if (babelrcRoots === undefined) { |
||||
return pkgData.directories.indexOf(absoluteRoot) !== -1; |
||||
} |
||||
|
||||
let babelrcPatterns = babelrcRoots; |
||||
|
||||
if (!Array.isArray(babelrcPatterns)) { |
||||
babelrcPatterns = [babelrcPatterns]; |
||||
} |
||||
|
||||
babelrcPatterns = babelrcPatterns.map(pat => { |
||||
return typeof pat === "string" ? _path().resolve(babelrcRootsDirectory, pat) : pat; |
||||
}); |
||||
|
||||
if (babelrcPatterns.length === 1 && babelrcPatterns[0] === absoluteRoot) { |
||||
return pkgData.directories.indexOf(absoluteRoot) !== -1; |
||||
} |
||||
|
||||
return babelrcPatterns.some(pat => { |
||||
if (typeof pat === "string") { |
||||
pat = (0, _patternToRegex.default)(pat, babelrcRootsDirectory); |
||||
} |
||||
|
||||
return pkgData.directories.some(directory => { |
||||
return matchPattern(pat, babelrcRootsDirectory, directory, context); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
const validateConfigFile = (0, _caching.makeWeakCacheSync)(file => ({ |
||||
filepath: file.filepath, |
||||
dirname: file.dirname, |
||||
options: (0, _options.validate)("configfile", file.options) |
||||
})); |
||||
const validateBabelrcFile = (0, _caching.makeWeakCacheSync)(file => ({ |
||||
filepath: file.filepath, |
||||
dirname: file.dirname, |
||||
options: (0, _options.validate)("babelrcfile", file.options) |
||||
})); |
||||
const validateExtendFile = (0, _caching.makeWeakCacheSync)(file => ({ |
||||
filepath: file.filepath, |
||||
dirname: file.dirname, |
||||
options: (0, _options.validate)("extendsfile", file.options) |
||||
})); |
||||
const loadProgrammaticChain = makeChainWalker({ |
||||
root: input => buildRootDescriptors(input, "base", _configDescriptors.createCachedDescriptors), |
||||
env: (input, envName) => buildEnvDescriptors(input, "base", _configDescriptors.createCachedDescriptors, envName), |
||||
overrides: (input, index) => buildOverrideDescriptors(input, "base", _configDescriptors.createCachedDescriptors, index), |
||||
overridesEnv: (input, index, envName) => buildOverrideEnvDescriptors(input, "base", _configDescriptors.createCachedDescriptors, index, envName), |
||||
createLogger: (input, context, baseLogger) => buildProgrammaticLogger(input, context, baseLogger) |
||||
}); |
||||
const loadFileChainWalker = makeChainWalker({ |
||||
root: file => loadFileDescriptors(file), |
||||
env: (file, envName) => loadFileEnvDescriptors(file)(envName), |
||||
overrides: (file, index) => loadFileOverridesDescriptors(file)(index), |
||||
overridesEnv: (file, index, envName) => loadFileOverridesEnvDescriptors(file)(index)(envName), |
||||
createLogger: (file, context, baseLogger) => buildFileLogger(file.filepath, context, baseLogger) |
||||
}); |
||||
|
||||
function* loadFileChain(input, context, files, baseLogger) { |
||||
const chain = yield* loadFileChainWalker(input, context, files, baseLogger); |
||||
|
||||
if (chain) { |
||||
chain.files.add(input.filepath); |
||||
} |
||||
|
||||
return chain; |
||||
} |
||||
|
||||
const loadFileDescriptors = (0, _caching.makeWeakCacheSync)(file => buildRootDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors)); |
||||
const loadFileEnvDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(envName => buildEnvDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, envName))); |
||||
const loadFileOverridesDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(index => buildOverrideDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, index))); |
||||
const loadFileOverridesEnvDescriptors = (0, _caching.makeWeakCacheSync)(file => (0, _caching.makeStrongCacheSync)(index => (0, _caching.makeStrongCacheSync)(envName => buildOverrideEnvDescriptors(file, file.filepath, _configDescriptors.createUncachedDescriptors, index, envName)))); |
||||
|
||||
function buildFileLogger(filepath, context, baseLogger) { |
||||
if (!baseLogger) { |
||||
return () => {}; |
||||
} |
||||
|
||||
return baseLogger.configure(context.showConfig, _printer.ChainFormatter.Config, { |
||||
filepath |
||||
}); |
||||
} |
||||
|
||||
function buildRootDescriptors({ |
||||
dirname, |
||||
options |
||||
}, alias, descriptors) { |
||||
return descriptors(dirname, options, alias); |
||||
} |
||||
|
||||
function buildProgrammaticLogger(_, context, baseLogger) { |
||||
var _context$caller; |
||||
|
||||
if (!baseLogger) { |
||||
return () => {}; |
||||
} |
||||
|
||||
return baseLogger.configure(context.showConfig, _printer.ChainFormatter.Programmatic, { |
||||
callerName: (_context$caller = context.caller) == null ? void 0 : _context$caller.name |
||||
}); |
||||
} |
||||
|
||||
function buildEnvDescriptors({ |
||||
dirname, |
||||
options |
||||
}, alias, descriptors, envName) { |
||||
const opts = options.env && options.env[envName]; |
||||
return opts ? descriptors(dirname, opts, `${alias}.env["${envName}"]`) : null; |
||||
} |
||||
|
||||
function buildOverrideDescriptors({ |
||||
dirname, |
||||
options |
||||
}, alias, descriptors, index) { |
||||
const opts = options.overrides && options.overrides[index]; |
||||
if (!opts) throw new Error("Assertion failure - missing override"); |
||||
return descriptors(dirname, opts, `${alias}.overrides[${index}]`); |
||||
} |
||||
|
||||
function buildOverrideEnvDescriptors({ |
||||
dirname, |
||||
options |
||||
}, alias, descriptors, index, envName) { |
||||
const override = options.overrides && options.overrides[index]; |
||||
if (!override) throw new Error("Assertion failure - missing override"); |
||||
const opts = override.env && override.env[envName]; |
||||
return opts ? descriptors(dirname, opts, `${alias}.overrides[${index}].env["${envName}"]`) : null; |
||||
} |
||||
|
||||
function makeChainWalker({ |
||||
root, |
||||
env, |
||||
overrides, |
||||
overridesEnv, |
||||
createLogger |
||||
}) { |
||||
return function* (input, context, files = new Set(), baseLogger) { |
||||
const { |
||||
dirname |
||||
} = input; |
||||
const flattenedConfigs = []; |
||||
const rootOpts = root(input); |
||||
|
||||
if (configIsApplicable(rootOpts, dirname, context)) { |
||||
flattenedConfigs.push({ |
||||
config: rootOpts, |
||||
envName: undefined, |
||||
index: undefined |
||||
}); |
||||
const envOpts = env(input, context.envName); |
||||
|
||||
if (envOpts && configIsApplicable(envOpts, dirname, context)) { |
||||
flattenedConfigs.push({ |
||||
config: envOpts, |
||||
envName: context.envName, |
||||
index: undefined |
||||
}); |
||||
} |
||||
|
||||
(rootOpts.options.overrides || []).forEach((_, index) => { |
||||
const overrideOps = overrides(input, index); |
||||
|
||||
if (configIsApplicable(overrideOps, dirname, context)) { |
||||
flattenedConfigs.push({ |
||||
config: overrideOps, |
||||
index, |
||||
envName: undefined |
||||
}); |
||||
const overrideEnvOpts = overridesEnv(input, index, context.envName); |
||||
|
||||
if (overrideEnvOpts && configIsApplicable(overrideEnvOpts, dirname, context)) { |
||||
flattenedConfigs.push({ |
||||
config: overrideEnvOpts, |
||||
index, |
||||
envName: context.envName |
||||
}); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
if (flattenedConfigs.some(({ |
||||
config: { |
||||
options: { |
||||
ignore, |
||||
only |
||||
} |
||||
} |
||||
}) => shouldIgnore(context, ignore, only, dirname))) { |
||||
return null; |
||||
} |
||||
|
||||
const chain = emptyChain(); |
||||
const logger = createLogger(input, context, baseLogger); |
||||
|
||||
for (const { |
||||
config, |
||||
index, |
||||
envName |
||||
} of flattenedConfigs) { |
||||
if (!(yield* mergeExtendsChain(chain, config.options, dirname, context, files, baseLogger))) { |
||||
return null; |
||||
} |
||||
|
||||
logger(config, index, envName); |
||||
yield* mergeChainOpts(chain, config); |
||||
} |
||||
|
||||
return chain; |
||||
}; |
||||
} |
||||
|
||||
function* mergeExtendsChain(chain, opts, dirname, context, files, baseLogger) { |
||||
if (opts.extends === undefined) return true; |
||||
const file = yield* (0, _files.loadConfig)(opts.extends, dirname, context.envName, context.caller); |
||||
|
||||
if (files.has(file)) { |
||||
throw new Error(`Configuration cycle detected loading ${file.filepath}.\n` + `File already loaded following the config chain:\n` + Array.from(files, file => ` - ${file.filepath}`).join("\n")); |
||||
} |
||||
|
||||
files.add(file); |
||||
const fileChain = yield* loadFileChain(validateExtendFile(file), context, files, baseLogger); |
||||
files.delete(file); |
||||
if (!fileChain) return false; |
||||
mergeChain(chain, fileChain); |
||||
return true; |
||||
} |
||||
|
||||
function mergeChain(target, source) { |
||||
target.options.push(...source.options); |
||||
target.plugins.push(...source.plugins); |
||||
target.presets.push(...source.presets); |
||||
|
||||
for (const file of source.files) { |
||||
target.files.add(file); |
||||
} |
||||
|
||||
return target; |
||||
} |
||||
|
||||
function* mergeChainOpts(target, { |
||||
options, |
||||
plugins, |
||||
presets |
||||
}) { |
||||
target.options.push(options); |
||||
target.plugins.push(...(yield* plugins())); |
||||
target.presets.push(...(yield* presets())); |
||||
return target; |
||||
} |
||||
|
||||
function emptyChain() { |
||||
return { |
||||
options: [], |
||||
presets: [], |
||||
plugins: [], |
||||
files: new Set() |
||||
}; |
||||
} |
||||
|
||||
function normalizeOptions(opts) { |
||||
const options = Object.assign({}, opts); |
||||
delete options.extends; |
||||
delete options.env; |
||||
delete options.overrides; |
||||
delete options.plugins; |
||||
delete options.presets; |
||||
delete options.passPerPreset; |
||||
delete options.ignore; |
||||
delete options.only; |
||||
delete options.test; |
||||
delete options.include; |
||||
delete options.exclude; |
||||
|
||||
if (Object.prototype.hasOwnProperty.call(options, "sourceMap")) { |
||||
options.sourceMaps = options.sourceMap; |
||||
delete options.sourceMap; |
||||
} |
||||
|
||||
return options; |
||||
} |
||||
|
||||
function dedupDescriptors(items) { |
||||
const map = new Map(); |
||||
const descriptors = []; |
||||
|
||||
for (const item of items) { |
||||
if (typeof item.value === "function") { |
||||
const fnKey = item.value; |
||||
let nameMap = map.get(fnKey); |
||||
|
||||
if (!nameMap) { |
||||
nameMap = new Map(); |
||||
map.set(fnKey, nameMap); |
||||
} |
||||
|
||||
let desc = nameMap.get(item.name); |
||||
|
||||
if (!desc) { |
||||
desc = { |
||||
value: item |
||||
}; |
||||
descriptors.push(desc); |
||||
if (!item.ownPass) nameMap.set(item.name, desc); |
||||
} else { |
||||
desc.value = item; |
||||
} |
||||
} else { |
||||
descriptors.push({ |
||||
value: item |
||||
}); |
||||
} |
||||
} |
||||
|
||||
return descriptors.reduce((acc, desc) => { |
||||
acc.push(desc.value); |
||||
return acc; |
||||
}, []); |
||||
} |
||||
|
||||
function configIsApplicable({ |
||||
options |
||||
}, dirname, context) { |
||||
return (options.test === undefined || configFieldIsApplicable(context, options.test, dirname)) && (options.include === undefined || configFieldIsApplicable(context, options.include, dirname)) && (options.exclude === undefined || !configFieldIsApplicable(context, options.exclude, dirname)); |
||||
} |
||||
|
||||
function configFieldIsApplicable(context, test, dirname) { |
||||
const patterns = Array.isArray(test) ? test : [test]; |
||||
return matchesPatterns(context, patterns, dirname); |
||||
} |
||||
|
||||
function ignoreListReplacer(_key, value) { |
||||
if (value instanceof RegExp) { |
||||
return String(value); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function shouldIgnore(context, ignore, only, dirname) { |
||||
if (ignore && matchesPatterns(context, ignore, dirname)) { |
||||
var _context$filename; |
||||
|
||||
const message = `No config is applied to "${(_context$filename = context.filename) != null ? _context$filename : "(unknown)"}" because it matches one of \`ignore: ${JSON.stringify(ignore, ignoreListReplacer)}\` from "${dirname}"`; |
||||
debug(message); |
||||
|
||||
if (context.showConfig) { |
||||
console.log(message); |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
if (only && !matchesPatterns(context, only, dirname)) { |
||||
var _context$filename2; |
||||
|
||||
const message = `No config is applied to "${(_context$filename2 = context.filename) != null ? _context$filename2 : "(unknown)"}" because it fails to match one of \`only: ${JSON.stringify(only, ignoreListReplacer)}\` from "${dirname}"`; |
||||
debug(message); |
||||
|
||||
if (context.showConfig) { |
||||
console.log(message); |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
function matchesPatterns(context, patterns, dirname) { |
||||
return patterns.some(pattern => matchPattern(pattern, dirname, context.filename, context)); |
||||
} |
||||
|
||||
function matchPattern(pattern, dirname, pathToTest, context) { |
||||
if (typeof pattern === "function") { |
||||
return !!pattern(pathToTest, { |
||||
dirname, |
||||
envName: context.envName, |
||||
caller: context.caller |
||||
}); |
||||
} |
||||
|
||||
if (typeof pathToTest !== "string") { |
||||
throw new Error(`Configuration contains string/RegExp pattern, but no filename was passed to Babel`); |
||||
} |
||||
|
||||
if (typeof pattern === "string") { |
||||
pattern = (0, _patternToRegex.default)(pattern, dirname); |
||||
} |
||||
|
||||
return pattern.test(pathToTest); |
||||
} |
@ -0,0 +1,244 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.createCachedDescriptors = createCachedDescriptors; |
||||
exports.createDescriptor = createDescriptor; |
||||
exports.createUncachedDescriptors = createUncachedDescriptors; |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _files = require("./files"); |
||||
|
||||
var _item = require("./item"); |
||||
|
||||
var _caching = require("./caching"); |
||||
|
||||
var _resolveTargets = require("./resolve-targets"); |
||||
|
||||
function isEqualDescriptor(a, b) { |
||||
return a.name === b.name && a.value === b.value && a.options === b.options && a.dirname === b.dirname && a.alias === b.alias && a.ownPass === b.ownPass && (a.file && a.file.request) === (b.file && b.file.request) && (a.file && a.file.resolved) === (b.file && b.file.resolved); |
||||
} |
||||
|
||||
function* handlerOf(value) { |
||||
return value; |
||||
} |
||||
|
||||
function optionsWithResolvedBrowserslistConfigFile(options, dirname) { |
||||
if (typeof options.browserslistConfigFile === "string") { |
||||
options.browserslistConfigFile = (0, _resolveTargets.resolveBrowserslistConfigFile)(options.browserslistConfigFile, dirname); |
||||
} |
||||
|
||||
return options; |
||||
} |
||||
|
||||
function createCachedDescriptors(dirname, options, alias) { |
||||
const { |
||||
plugins, |
||||
presets, |
||||
passPerPreset |
||||
} = options; |
||||
return { |
||||
options: optionsWithResolvedBrowserslistConfigFile(options, dirname), |
||||
plugins: plugins ? () => createCachedPluginDescriptors(plugins, dirname)(alias) : () => handlerOf([]), |
||||
presets: presets ? () => createCachedPresetDescriptors(presets, dirname)(alias)(!!passPerPreset) : () => handlerOf([]) |
||||
}; |
||||
} |
||||
|
||||
function createUncachedDescriptors(dirname, options, alias) { |
||||
let plugins; |
||||
let presets; |
||||
return { |
||||
options: optionsWithResolvedBrowserslistConfigFile(options, dirname), |
||||
|
||||
*plugins() { |
||||
if (!plugins) { |
||||
plugins = yield* createPluginDescriptors(options.plugins || [], dirname, alias); |
||||
} |
||||
|
||||
return plugins; |
||||
}, |
||||
|
||||
*presets() { |
||||
if (!presets) { |
||||
presets = yield* createPresetDescriptors(options.presets || [], dirname, alias, !!options.passPerPreset); |
||||
} |
||||
|
||||
return presets; |
||||
} |
||||
|
||||
}; |
||||
} |
||||
|
||||
const PRESET_DESCRIPTOR_CACHE = new WeakMap(); |
||||
const createCachedPresetDescriptors = (0, _caching.makeWeakCacheSync)((items, cache) => { |
||||
const dirname = cache.using(dir => dir); |
||||
return (0, _caching.makeStrongCacheSync)(alias => (0, _caching.makeStrongCache)(function* (passPerPreset) { |
||||
const descriptors = yield* createPresetDescriptors(items, dirname, alias, passPerPreset); |
||||
return descriptors.map(desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc)); |
||||
})); |
||||
}); |
||||
const PLUGIN_DESCRIPTOR_CACHE = new WeakMap(); |
||||
const createCachedPluginDescriptors = (0, _caching.makeWeakCacheSync)((items, cache) => { |
||||
const dirname = cache.using(dir => dir); |
||||
return (0, _caching.makeStrongCache)(function* (alias) { |
||||
const descriptors = yield* createPluginDescriptors(items, dirname, alias); |
||||
return descriptors.map(desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc)); |
||||
}); |
||||
}); |
||||
const DEFAULT_OPTIONS = {}; |
||||
|
||||
function loadCachedDescriptor(cache, desc) { |
||||
const { |
||||
value, |
||||
options = DEFAULT_OPTIONS |
||||
} = desc; |
||||
if (options === false) return desc; |
||||
let cacheByOptions = cache.get(value); |
||||
|
||||
if (!cacheByOptions) { |
||||
cacheByOptions = new WeakMap(); |
||||
cache.set(value, cacheByOptions); |
||||
} |
||||
|
||||
let possibilities = cacheByOptions.get(options); |
||||
|
||||
if (!possibilities) { |
||||
possibilities = []; |
||||
cacheByOptions.set(options, possibilities); |
||||
} |
||||
|
||||
if (possibilities.indexOf(desc) === -1) { |
||||
const matches = possibilities.filter(possibility => isEqualDescriptor(possibility, desc)); |
||||
|
||||
if (matches.length > 0) { |
||||
return matches[0]; |
||||
} |
||||
|
||||
possibilities.push(desc); |
||||
} |
||||
|
||||
return desc; |
||||
} |
||||
|
||||
function* createPresetDescriptors(items, dirname, alias, passPerPreset) { |
||||
return yield* createDescriptors("preset", items, dirname, alias, passPerPreset); |
||||
} |
||||
|
||||
function* createPluginDescriptors(items, dirname, alias) { |
||||
return yield* createDescriptors("plugin", items, dirname, alias); |
||||
} |
||||
|
||||
function* createDescriptors(type, items, dirname, alias, ownPass) { |
||||
const descriptors = yield* _gensync().all(items.map((item, index) => createDescriptor(item, dirname, { |
||||
type, |
||||
alias: `${alias}$${index}`, |
||||
ownPass: !!ownPass |
||||
}))); |
||||
assertNoDuplicates(descriptors); |
||||
return descriptors; |
||||
} |
||||
|
||||
function* createDescriptor(pair, dirname, { |
||||
type, |
||||
alias, |
||||
ownPass |
||||
}) { |
||||
const desc = (0, _item.getItemDescriptor)(pair); |
||||
|
||||
if (desc) { |
||||
return desc; |
||||
} |
||||
|
||||
let name; |
||||
let options; |
||||
let value = pair; |
||||
|
||||
if (Array.isArray(value)) { |
||||
if (value.length === 3) { |
||||
[value, options, name] = value; |
||||
} else { |
||||
[value, options] = value; |
||||
} |
||||
} |
||||
|
||||
let file = undefined; |
||||
let filepath = null; |
||||
|
||||
if (typeof value === "string") { |
||||
if (typeof type !== "string") { |
||||
throw new Error("To resolve a string-based item, the type of item must be given"); |
||||
} |
||||
|
||||
const resolver = type === "plugin" ? _files.loadPlugin : _files.loadPreset; |
||||
const request = value; |
||||
({ |
||||
filepath, |
||||
value |
||||
} = yield* resolver(value, dirname)); |
||||
file = { |
||||
request, |
||||
resolved: filepath |
||||
}; |
||||
} |
||||
|
||||
if (!value) { |
||||
throw new Error(`Unexpected falsy value: ${String(value)}`); |
||||
} |
||||
|
||||
if (typeof value === "object" && value.__esModule) { |
||||
if (value.default) { |
||||
value = value.default; |
||||
} else { |
||||
throw new Error("Must export a default export when using ES6 modules."); |
||||
} |
||||
} |
||||
|
||||
if (typeof value !== "object" && typeof value !== "function") { |
||||
throw new Error(`Unsupported format: ${typeof value}. Expected an object or a function.`); |
||||
} |
||||
|
||||
if (filepath !== null && typeof value === "object" && value) { |
||||
throw new Error(`Plugin/Preset files are not allowed to export objects, only functions. In ${filepath}`); |
||||
} |
||||
|
||||
return { |
||||
name, |
||||
alias: filepath || alias, |
||||
value, |
||||
options, |
||||
dirname, |
||||
ownPass, |
||||
file |
||||
}; |
||||
} |
||||
|
||||
function assertNoDuplicates(items) { |
||||
const map = new Map(); |
||||
|
||||
for (const item of items) { |
||||
if (typeof item.value !== "function") continue; |
||||
let nameMap = map.get(item.value); |
||||
|
||||
if (!nameMap) { |
||||
nameMap = new Set(); |
||||
map.set(item.value, nameMap); |
||||
} |
||||
|
||||
if (nameMap.has(item.name)) { |
||||
const conflicts = items.filter(i => i.value === item.value); |
||||
throw new Error([`Duplicate plugin/preset detected.`, `If you'd like to use two separate instances of a plugin,`, `they need separate names, e.g.`, ``, ` plugins: [`, ` ['some-plugin', {}],`, ` ['some-plugin', {}, 'some unique name'],`, ` ]`, ``, `Duplicates detected are:`, `${JSON.stringify(conflicts, null, 2)}`].join("\n")); |
||||
} |
||||
|
||||
nameMap.add(item.name); |
||||
} |
||||
} |
@ -0,0 +1,357 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.ROOT_CONFIG_FILENAMES = void 0; |
||||
exports.findConfigUpwards = findConfigUpwards; |
||||
exports.findRelativeConfig = findRelativeConfig; |
||||
exports.findRootConfig = findRootConfig; |
||||
exports.loadConfig = loadConfig; |
||||
exports.resolveShowConfigPath = resolveShowConfigPath; |
||||
|
||||
function _debug() { |
||||
const data = require("debug"); |
||||
|
||||
_debug = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _fs() { |
||||
const data = require("fs"); |
||||
|
||||
_fs = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _json() { |
||||
const data = require("json5"); |
||||
|
||||
_json = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _caching = require("../caching"); |
||||
|
||||
var _configApi = require("../helpers/config-api"); |
||||
|
||||
var _utils = require("./utils"); |
||||
|
||||
var _moduleTypes = require("./module-types"); |
||||
|
||||
var _patternToRegex = require("../pattern-to-regex"); |
||||
|
||||
var fs = require("../../gensync-utils/fs"); |
||||
|
||||
function _module() { |
||||
const data = require("module"); |
||||
|
||||
_module = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
const debug = _debug()("babel:config:loading:files:configuration"); |
||||
|
||||
const ROOT_CONFIG_FILENAMES = ["babel.config.js", "babel.config.cjs", "babel.config.mjs", "babel.config.json"]; |
||||
exports.ROOT_CONFIG_FILENAMES = ROOT_CONFIG_FILENAMES; |
||||
const RELATIVE_CONFIG_FILENAMES = [".babelrc", ".babelrc.js", ".babelrc.cjs", ".babelrc.mjs", ".babelrc.json"]; |
||||
const BABELIGNORE_FILENAME = ".babelignore"; |
||||
|
||||
function findConfigUpwards(rootDir) { |
||||
let dirname = rootDir; |
||||
|
||||
for (;;) { |
||||
for (const filename of ROOT_CONFIG_FILENAMES) { |
||||
if (_fs().existsSync(_path().join(dirname, filename))) { |
||||
return dirname; |
||||
} |
||||
} |
||||
|
||||
const nextDir = _path().dirname(dirname); |
||||
|
||||
if (dirname === nextDir) break; |
||||
dirname = nextDir; |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
function* findRelativeConfig(packageData, envName, caller) { |
||||
let config = null; |
||||
let ignore = null; |
||||
|
||||
const dirname = _path().dirname(packageData.filepath); |
||||
|
||||
for (const loc of packageData.directories) { |
||||
if (!config) { |
||||
var _packageData$pkg; |
||||
|
||||
config = yield* loadOneConfig(RELATIVE_CONFIG_FILENAMES, loc, envName, caller, ((_packageData$pkg = packageData.pkg) == null ? void 0 : _packageData$pkg.dirname) === loc ? packageToBabelConfig(packageData.pkg) : null); |
||||
} |
||||
|
||||
if (!ignore) { |
||||
const ignoreLoc = _path().join(loc, BABELIGNORE_FILENAME); |
||||
|
||||
ignore = yield* readIgnoreConfig(ignoreLoc); |
||||
|
||||
if (ignore) { |
||||
debug("Found ignore %o from %o.", ignore.filepath, dirname); |
||||
} |
||||
} |
||||
} |
||||
|
||||
return { |
||||
config, |
||||
ignore |
||||
}; |
||||
} |
||||
|
||||
function findRootConfig(dirname, envName, caller) { |
||||
return loadOneConfig(ROOT_CONFIG_FILENAMES, dirname, envName, caller); |
||||
} |
||||
|
||||
function* loadOneConfig(names, dirname, envName, caller, previousConfig = null) { |
||||
const configs = yield* _gensync().all(names.map(filename => readConfig(_path().join(dirname, filename), envName, caller))); |
||||
const config = configs.reduce((previousConfig, config) => { |
||||
if (config && previousConfig) { |
||||
throw new Error(`Multiple configuration files found. Please remove one:\n` + ` - ${_path().basename(previousConfig.filepath)}\n` + ` - ${config.filepath}\n` + `from ${dirname}`); |
||||
} |
||||
|
||||
return config || previousConfig; |
||||
}, previousConfig); |
||||
|
||||
if (config) { |
||||
debug("Found configuration %o from %o.", config.filepath, dirname); |
||||
} |
||||
|
||||
return config; |
||||
} |
||||
|
||||
function* loadConfig(name, dirname, envName, caller) { |
||||
const filepath = (((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, { |
||||
paths: [b] |
||||
}, M = require("module")) => { |
||||
let f = M._findPath(r, M._nodeModulePaths(b).concat(b)); |
||||
|
||||
if (f) return f; |
||||
f = new Error(`Cannot resolve module '${r}'`); |
||||
f.code = "MODULE_NOT_FOUND"; |
||||
throw f; |
||||
})(name, { |
||||
paths: [dirname] |
||||
}); |
||||
const conf = yield* readConfig(filepath, envName, caller); |
||||
|
||||
if (!conf) { |
||||
throw new Error(`Config file ${filepath} contains no configuration data`); |
||||
} |
||||
|
||||
debug("Loaded config %o from %o.", name, dirname); |
||||
return conf; |
||||
} |
||||
|
||||
function readConfig(filepath, envName, caller) { |
||||
const ext = _path().extname(filepath); |
||||
|
||||
return ext === ".js" || ext === ".cjs" || ext === ".mjs" ? readConfigJS(filepath, { |
||||
envName, |
||||
caller |
||||
}) : readConfigJSON5(filepath); |
||||
} |
||||
|
||||
const LOADING_CONFIGS = new Set(); |
||||
const readConfigJS = (0, _caching.makeStrongCache)(function* readConfigJS(filepath, cache) { |
||||
if (!_fs().existsSync(filepath)) { |
||||
cache.never(); |
||||
return null; |
||||
} |
||||
|
||||
if (LOADING_CONFIGS.has(filepath)) { |
||||
cache.never(); |
||||
debug("Auto-ignoring usage of config %o.", filepath); |
||||
return { |
||||
filepath, |
||||
dirname: _path().dirname(filepath), |
||||
options: {} |
||||
}; |
||||
} |
||||
|
||||
let options; |
||||
|
||||
try { |
||||
LOADING_CONFIGS.add(filepath); |
||||
options = yield* (0, _moduleTypes.default)(filepath, "You appear to be using a native ECMAScript module configuration " + "file, which is only supported when running Babel asynchronously."); |
||||
} catch (err) { |
||||
err.message = `${filepath}: Error while loading config - ${err.message}`; |
||||
throw err; |
||||
} finally { |
||||
LOADING_CONFIGS.delete(filepath); |
||||
} |
||||
|
||||
let assertCache = false; |
||||
|
||||
if (typeof options === "function") { |
||||
yield* []; |
||||
options = options((0, _configApi.makeConfigAPI)(cache)); |
||||
assertCache = true; |
||||
} |
||||
|
||||
if (!options || typeof options !== "object" || Array.isArray(options)) { |
||||
throw new Error(`${filepath}: Configuration should be an exported JavaScript object.`); |
||||
} |
||||
|
||||
if (typeof options.then === "function") { |
||||
throw new Error(`You appear to be using an async configuration, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously return your config.`); |
||||
} |
||||
|
||||
if (assertCache && !cache.configured()) throwConfigError(); |
||||
return { |
||||
filepath, |
||||
dirname: _path().dirname(filepath), |
||||
options |
||||
}; |
||||
}); |
||||
const packageToBabelConfig = (0, _caching.makeWeakCacheSync)(file => { |
||||
const babel = file.options["babel"]; |
||||
if (typeof babel === "undefined") return null; |
||||
|
||||
if (typeof babel !== "object" || Array.isArray(babel) || babel === null) { |
||||
throw new Error(`${file.filepath}: .babel property must be an object`); |
||||
} |
||||
|
||||
return { |
||||
filepath: file.filepath, |
||||
dirname: file.dirname, |
||||
options: babel |
||||
}; |
||||
}); |
||||
const readConfigJSON5 = (0, _utils.makeStaticFileCache)((filepath, content) => { |
||||
let options; |
||||
|
||||
try { |
||||
options = _json().parse(content); |
||||
} catch (err) { |
||||
err.message = `${filepath}: Error while parsing config - ${err.message}`; |
||||
throw err; |
||||
} |
||||
|
||||
if (!options) throw new Error(`${filepath}: No config detected`); |
||||
|
||||
if (typeof options !== "object") { |
||||
throw new Error(`${filepath}: Config returned typeof ${typeof options}`); |
||||
} |
||||
|
||||
if (Array.isArray(options)) { |
||||
throw new Error(`${filepath}: Expected config object but found array`); |
||||
} |
||||
|
||||
return { |
||||
filepath, |
||||
dirname: _path().dirname(filepath), |
||||
options |
||||
}; |
||||
}); |
||||
const readIgnoreConfig = (0, _utils.makeStaticFileCache)((filepath, content) => { |
||||
const ignoreDir = _path().dirname(filepath); |
||||
|
||||
const ignorePatterns = content.split("\n").map(line => line.replace(/#(.*?)$/, "").trim()).filter(line => !!line); |
||||
|
||||
for (const pattern of ignorePatterns) { |
||||
if (pattern[0] === "!") { |
||||
throw new Error(`Negation of file paths is not supported.`); |
||||
} |
||||
} |
||||
|
||||
return { |
||||
filepath, |
||||
dirname: _path().dirname(filepath), |
||||
ignore: ignorePatterns.map(pattern => (0, _patternToRegex.default)(pattern, ignoreDir)) |
||||
}; |
||||
}); |
||||
|
||||
function* resolveShowConfigPath(dirname) { |
||||
const targetPath = process.env.BABEL_SHOW_CONFIG_FOR; |
||||
|
||||
if (targetPath != null) { |
||||
const absolutePath = _path().resolve(dirname, targetPath); |
||||
|
||||
const stats = yield* fs.stat(absolutePath); |
||||
|
||||
if (!stats.isFile()) { |
||||
throw new Error(`${absolutePath}: BABEL_SHOW_CONFIG_FOR must refer to a regular file, directories are not supported.`); |
||||
} |
||||
|
||||
return absolutePath; |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
function throwConfigError() { |
||||
throw new Error(`\
|
||||
Caching was left unconfigured. Babel's plugins, presets, and .babelrc.js files can be configured |
||||
for various types of caching, using the first param of their handler functions: |
||||
|
||||
module.exports = function(api) { |
||||
// The API exposes the following:
|
||||
|
||||
// Cache the returned value forever and don't call this function again.
|
||||
api.cache(true); |
||||
|
||||
// Don't cache at all. Not recommended because it will be very slow.
|
||||
api.cache(false); |
||||
|
||||
// Cached based on the value of some function. If this function returns a value different from
|
||||
// a previously-encountered value, the plugins will re-evaluate.
|
||||
var env = api.cache(() => process.env.NODE_ENV); |
||||
|
||||
// If testing for a specific env, we recommend specifics to avoid instantiating a plugin for
|
||||
// any possible NODE_ENV value that might come up during plugin execution.
|
||||
var isProd = api.cache(() => process.env.NODE_ENV === "production"); |
||||
|
||||
// .cache(fn) will perform a linear search though instances to find the matching plugin based
|
||||
// based on previous instantiated plugins. If you want to recreate the plugin and discard the
|
||||
// previous instance whenever something changes, you may use:
|
||||
var isProd = api.cache.invalidate(() => process.env.NODE_ENV === "production"); |
||||
|
||||
// Note, we also expose the following more-verbose versions of the above examples:
|
||||
api.cache.forever(); // api.cache(true)
|
||||
api.cache.never(); // api.cache(false)
|
||||
api.cache.using(fn); // api.cache(fn)
|
||||
|
||||
// Return the value that will be cached.
|
||||
return { }; |
||||
};`);
|
||||
} |
@ -0,0 +1,10 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.default = import_; |
||||
|
||||
function import_(filepath) { |
||||
return import(filepath); |
||||
} |
@ -0,0 +1,67 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.ROOT_CONFIG_FILENAMES = void 0; |
||||
exports.findConfigUpwards = findConfigUpwards; |
||||
exports.findPackageData = findPackageData; |
||||
exports.findRelativeConfig = findRelativeConfig; |
||||
exports.findRootConfig = findRootConfig; |
||||
exports.loadConfig = loadConfig; |
||||
exports.loadPlugin = loadPlugin; |
||||
exports.loadPreset = loadPreset; |
||||
exports.resolvePlugin = resolvePlugin; |
||||
exports.resolvePreset = resolvePreset; |
||||
exports.resolveShowConfigPath = resolveShowConfigPath; |
||||
|
||||
function findConfigUpwards(rootDir) { |
||||
return null; |
||||
} |
||||
|
||||
function* findPackageData(filepath) { |
||||
return { |
||||
filepath, |
||||
directories: [], |
||||
pkg: null, |
||||
isPackage: false |
||||
}; |
||||
} |
||||
|
||||
function* findRelativeConfig(pkgData, envName, caller) { |
||||
return { |
||||
config: null, |
||||
ignore: null |
||||
}; |
||||
} |
||||
|
||||
function* findRootConfig(dirname, envName, caller) { |
||||
return null; |
||||
} |
||||
|
||||
function* loadConfig(name, dirname, envName, caller) { |
||||
throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`); |
||||
} |
||||
|
||||
function* resolveShowConfigPath(dirname) { |
||||
return null; |
||||
} |
||||
|
||||
const ROOT_CONFIG_FILENAMES = []; |
||||
exports.ROOT_CONFIG_FILENAMES = ROOT_CONFIG_FILENAMES; |
||||
|
||||
function resolvePlugin(name, dirname) { |
||||
return null; |
||||
} |
||||
|
||||
function resolvePreset(name, dirname) { |
||||
return null; |
||||
} |
||||
|
||||
function loadPlugin(name, dirname) { |
||||
throw new Error(`Cannot load plugin ${name} relative to ${dirname} in a browser`); |
||||
} |
||||
|
||||
function loadPreset(name, dirname) { |
||||
throw new Error(`Cannot load preset ${name} relative to ${dirname} in a browser`); |
||||
} |
@ -0,0 +1,79 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
Object.defineProperty(exports, "ROOT_CONFIG_FILENAMES", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _configuration.ROOT_CONFIG_FILENAMES; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "findConfigUpwards", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _configuration.findConfigUpwards; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "findPackageData", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _package.findPackageData; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "findRelativeConfig", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _configuration.findRelativeConfig; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "findRootConfig", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _configuration.findRootConfig; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "loadConfig", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _configuration.loadConfig; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "loadPlugin", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _plugins.loadPlugin; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "loadPreset", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _plugins.loadPreset; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "resolvePlugin", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _plugins.resolvePlugin; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "resolvePreset", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _plugins.resolvePreset; |
||||
} |
||||
}); |
||||
Object.defineProperty(exports, "resolveShowConfigPath", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _configuration.resolveShowConfigPath; |
||||
} |
||||
}); |
||||
|
||||
var _package = require("./package"); |
||||
|
||||
var _configuration = require("./configuration"); |
||||
|
||||
var _plugins = require("./plugins"); |
||||
|
||||
({}); |
@ -0,0 +1,104 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.default = loadCjsOrMjsDefault; |
||||
|
||||
var _async = require("../../gensync-utils/async"); |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _url() { |
||||
const data = require("url"); |
||||
|
||||
_url = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _module() { |
||||
const data = require("module"); |
||||
|
||||
_module = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } |
||||
|
||||
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } |
||||
|
||||
let import_; |
||||
|
||||
try { |
||||
import_ = require("./import").default; |
||||
} catch (_unused) {} |
||||
|
||||
function* loadCjsOrMjsDefault(filepath, asyncError, fallbackToTranspiledModule = false) { |
||||
switch (guessJSModuleType(filepath)) { |
||||
case "cjs": |
||||
return loadCjsDefault(filepath, fallbackToTranspiledModule); |
||||
|
||||
case "unknown": |
||||
try { |
||||
return loadCjsDefault(filepath, fallbackToTranspiledModule); |
||||
} catch (e) { |
||||
if (e.code !== "ERR_REQUIRE_ESM") throw e; |
||||
} |
||||
|
||||
case "mjs": |
||||
if (yield* (0, _async.isAsync)()) { |
||||
return yield* (0, _async.waitFor)(loadMjsDefault(filepath)); |
||||
} |
||||
|
||||
throw new Error(asyncError); |
||||
} |
||||
} |
||||
|
||||
function guessJSModuleType(filename) { |
||||
switch (_path().extname(filename)) { |
||||
case ".cjs": |
||||
return "cjs"; |
||||
|
||||
case ".mjs": |
||||
return "mjs"; |
||||
|
||||
default: |
||||
return "unknown"; |
||||
} |
||||
} |
||||
|
||||
function loadCjsDefault(filepath, fallbackToTranspiledModule) { |
||||
const module = require(filepath); |
||||
|
||||
return module != null && module.__esModule ? module.default || (fallbackToTranspiledModule ? module : undefined) : module; |
||||
} |
||||
|
||||
function loadMjsDefault(_x) { |
||||
return _loadMjsDefault.apply(this, arguments); |
||||
} |
||||
|
||||
function _loadMjsDefault() { |
||||
_loadMjsDefault = _asyncToGenerator(function* (filepath) { |
||||
if (!import_) { |
||||
throw new Error("Internal error: Native ECMAScript modules aren't supported" + " by this platform.\n"); |
||||
} |
||||
|
||||
const module = yield import_((0, _url().pathToFileURL)(filepath)); |
||||
return module.default; |
||||
}); |
||||
return _loadMjsDefault.apply(this, arguments); |
||||
} |
@ -0,0 +1,76 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.findPackageData = findPackageData; |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _utils = require("./utils"); |
||||
|
||||
const PACKAGE_FILENAME = "package.json"; |
||||
|
||||
function* findPackageData(filepath) { |
||||
let pkg = null; |
||||
const directories = []; |
||||
let isPackage = true; |
||||
|
||||
let dirname = _path().dirname(filepath); |
||||
|
||||
while (!pkg && _path().basename(dirname) !== "node_modules") { |
||||
directories.push(dirname); |
||||
pkg = yield* readConfigPackage(_path().join(dirname, PACKAGE_FILENAME)); |
||||
|
||||
const nextLoc = _path().dirname(dirname); |
||||
|
||||
if (dirname === nextLoc) { |
||||
isPackage = false; |
||||
break; |
||||
} |
||||
|
||||
dirname = nextLoc; |
||||
} |
||||
|
||||
return { |
||||
filepath, |
||||
directories, |
||||
pkg, |
||||
isPackage |
||||
}; |
||||
} |
||||
|
||||
const readConfigPackage = (0, _utils.makeStaticFileCache)((filepath, content) => { |
||||
let options; |
||||
|
||||
try { |
||||
options = JSON.parse(content); |
||||
} catch (err) { |
||||
err.message = `${filepath}: Error while parsing JSON - ${err.message}`; |
||||
throw err; |
||||
} |
||||
|
||||
if (!options) throw new Error(`${filepath}: No config detected`); |
||||
|
||||
if (typeof options !== "object") { |
||||
throw new Error(`${filepath}: Config returned typeof ${typeof options}`); |
||||
} |
||||
|
||||
if (Array.isArray(options)) { |
||||
throw new Error(`${filepath}: Expected config object but found array`); |
||||
} |
||||
|
||||
return { |
||||
filepath, |
||||
dirname: _path().dirname(filepath), |
||||
options |
||||
}; |
||||
}); |
@ -0,0 +1,206 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.loadPlugin = loadPlugin; |
||||
exports.loadPreset = loadPreset; |
||||
exports.resolvePlugin = resolvePlugin; |
||||
exports.resolvePreset = resolvePreset; |
||||
|
||||
function _debug() { |
||||
const data = require("debug"); |
||||
|
||||
_debug = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _moduleTypes = require("./module-types"); |
||||
|
||||
function _module() { |
||||
const data = require("module"); |
||||
|
||||
_module = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
const debug = _debug()("babel:config:loading:files:plugins"); |
||||
|
||||
const EXACT_RE = /^module:/; |
||||
const BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-plugin-)/; |
||||
const BABEL_PRESET_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-preset-)/; |
||||
const BABEL_PLUGIN_ORG_RE = /^(@babel\/)(?!plugin-|[^/]+\/)/; |
||||
const BABEL_PRESET_ORG_RE = /^(@babel\/)(?!preset-|[^/]+\/)/; |
||||
const OTHER_PLUGIN_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-plugin(?:-|\/|$)|[^/]+\/)/; |
||||
const OTHER_PRESET_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-preset(?:-|\/|$)|[^/]+\/)/; |
||||
const OTHER_ORG_DEFAULT_RE = /^(@(?!babel$)[^/]+)$/; |
||||
|
||||
function resolvePlugin(name, dirname) { |
||||
return resolveStandardizedName("plugin", name, dirname); |
||||
} |
||||
|
||||
function resolvePreset(name, dirname) { |
||||
return resolveStandardizedName("preset", name, dirname); |
||||
} |
||||
|
||||
function* loadPlugin(name, dirname) { |
||||
const filepath = resolvePlugin(name, dirname); |
||||
|
||||
if (!filepath) { |
||||
throw new Error(`Plugin ${name} not found relative to ${dirname}`); |
||||
} |
||||
|
||||
const value = yield* requireModule("plugin", filepath); |
||||
debug("Loaded plugin %o from %o.", name, dirname); |
||||
return { |
||||
filepath, |
||||
value |
||||
}; |
||||
} |
||||
|
||||
function* loadPreset(name, dirname) { |
||||
const filepath = resolvePreset(name, dirname); |
||||
|
||||
if (!filepath) { |
||||
throw new Error(`Preset ${name} not found relative to ${dirname}`); |
||||
} |
||||
|
||||
const value = yield* requireModule("preset", filepath); |
||||
debug("Loaded preset %o from %o.", name, dirname); |
||||
return { |
||||
filepath, |
||||
value |
||||
}; |
||||
} |
||||
|
||||
function standardizeName(type, name) { |
||||
if (_path().isAbsolute(name)) return name; |
||||
const isPreset = type === "preset"; |
||||
return name.replace(isPreset ? BABEL_PRESET_PREFIX_RE : BABEL_PLUGIN_PREFIX_RE, `babel-${type}-`).replace(isPreset ? BABEL_PRESET_ORG_RE : BABEL_PLUGIN_ORG_RE, `$1${type}-`).replace(isPreset ? OTHER_PRESET_ORG_RE : OTHER_PLUGIN_ORG_RE, `$1babel-${type}-`).replace(OTHER_ORG_DEFAULT_RE, `$1/babel-${type}`).replace(EXACT_RE, ""); |
||||
} |
||||
|
||||
function resolveStandardizedName(type, name, dirname = process.cwd()) { |
||||
const standardizedName = standardizeName(type, name); |
||||
|
||||
try { |
||||
return (((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, { |
||||
paths: [b] |
||||
}, M = require("module")) => { |
||||
let f = M._findPath(r, M._nodeModulePaths(b).concat(b)); |
||||
|
||||
if (f) return f; |
||||
f = new Error(`Cannot resolve module '${r}'`); |
||||
f.code = "MODULE_NOT_FOUND"; |
||||
throw f; |
||||
})(standardizedName, { |
||||
paths: [dirname] |
||||
}); |
||||
} catch (e) { |
||||
if (e.code !== "MODULE_NOT_FOUND") throw e; |
||||
|
||||
if (standardizedName !== name) { |
||||
let resolvedOriginal = false; |
||||
|
||||
try { |
||||
(((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, { |
||||
paths: [b] |
||||
}, M = require("module")) => { |
||||
let f = M._findPath(r, M._nodeModulePaths(b).concat(b)); |
||||
|
||||
if (f) return f; |
||||
f = new Error(`Cannot resolve module '${r}'`); |
||||
f.code = "MODULE_NOT_FOUND"; |
||||
throw f; |
||||
})(name, { |
||||
paths: [dirname] |
||||
}); |
||||
resolvedOriginal = true; |
||||
} catch (_unused) {} |
||||
|
||||
if (resolvedOriginal) { |
||||
e.message += `\n- If you want to resolve "${name}", use "module:${name}"`; |
||||
} |
||||
} |
||||
|
||||
let resolvedBabel = false; |
||||
|
||||
try { |
||||
(((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, { |
||||
paths: [b] |
||||
}, M = require("module")) => { |
||||
let f = M._findPath(r, M._nodeModulePaths(b).concat(b)); |
||||
|
||||
if (f) return f; |
||||
f = new Error(`Cannot resolve module '${r}'`); |
||||
f.code = "MODULE_NOT_FOUND"; |
||||
throw f; |
||||
})(standardizeName(type, "@babel/" + name), { |
||||
paths: [dirname] |
||||
}); |
||||
resolvedBabel = true; |
||||
} catch (_unused2) {} |
||||
|
||||
if (resolvedBabel) { |
||||
e.message += `\n- Did you mean "@babel/${name}"?`; |
||||
} |
||||
|
||||
let resolvedOppositeType = false; |
||||
const oppositeType = type === "preset" ? "plugin" : "preset"; |
||||
|
||||
try { |
||||
(((v, w) => (v = v.split("."), w = w.split("."), +v[0] > +w[0] || v[0] == w[0] && +v[1] >= +w[1]))(process.versions.node, "8.9") ? require.resolve : (r, { |
||||
paths: [b] |
||||
}, M = require("module")) => { |
||||
let f = M._findPath(r, M._nodeModulePaths(b).concat(b)); |
||||
|
||||
if (f) return f; |
||||
f = new Error(`Cannot resolve module '${r}'`); |
||||
f.code = "MODULE_NOT_FOUND"; |
||||
throw f; |
||||
})(standardizeName(oppositeType, name), { |
||||
paths: [dirname] |
||||
}); |
||||
resolvedOppositeType = true; |
||||
} catch (_unused3) {} |
||||
|
||||
if (resolvedOppositeType) { |
||||
e.message += `\n- Did you accidentally pass a ${oppositeType} as a ${type}?`; |
||||
} |
||||
|
||||
throw e; |
||||
} |
||||
} |
||||
|
||||
const LOADING_MODULES = new Set(); |
||||
|
||||
function* requireModule(type, name) { |
||||
if (LOADING_MODULES.has(name)) { |
||||
throw new Error(`Reentrant ${type} detected trying to load "${name}". This module is not ignored ` + "and is trying to load itself while compiling itself, leading to a dependency cycle. " + 'We recommend adding it to your "ignore" list in your babelrc, or to a .babelignore.'); |
||||
} |
||||
|
||||
try { |
||||
LOADING_MODULES.add(name); |
||||
return yield* (0, _moduleTypes.default)(name, `You appear to be using a native ECMAScript module ${type}, ` + "which is only supported when running Babel asynchronously.", true); |
||||
} catch (err) { |
||||
err.message = `[BABEL]: ${err.message} (While processing: ${name})`; |
||||
throw err; |
||||
} finally { |
||||
LOADING_MODULES.delete(name); |
||||
} |
||||
} |
@ -0,0 +1,44 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.makeStaticFileCache = makeStaticFileCache; |
||||
|
||||
var _caching = require("../caching"); |
||||
|
||||
var fs = require("../../gensync-utils/fs"); |
||||
|
||||
function _fs2() { |
||||
const data = require("fs"); |
||||
|
||||
_fs2 = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function makeStaticFileCache(fn) { |
||||
return (0, _caching.makeStrongCache)(function* (filepath, cache) { |
||||
const cached = cache.invalidate(() => fileMtime(filepath)); |
||||
|
||||
if (cached === null) { |
||||
return null; |
||||
} |
||||
|
||||
return fn(filepath, yield* fs.readFile(filepath, "utf8")); |
||||
}); |
||||
} |
||||
|
||||
function fileMtime(filepath) { |
||||
if (!_fs2().existsSync(filepath)) return null; |
||||
|
||||
try { |
||||
return +_fs2().statSync(filepath).mtime; |
||||
} catch (e) { |
||||
if (e.code !== "ENOENT" && e.code !== "ENOTDIR") throw e; |
||||
} |
||||
|
||||
return null; |
||||
} |
@ -0,0 +1,338 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.default = void 0; |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _async = require("../gensync-utils/async"); |
||||
|
||||
var _util = require("./util"); |
||||
|
||||
var context = require("../index"); |
||||
|
||||
var _plugin = require("./plugin"); |
||||
|
||||
var _item = require("./item"); |
||||
|
||||
var _configChain = require("./config-chain"); |
||||
|
||||
function _traverse() { |
||||
const data = require("@babel/traverse"); |
||||
|
||||
_traverse = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _caching = require("./caching"); |
||||
|
||||
var _options = require("./validation/options"); |
||||
|
||||
var _plugins = require("./validation/plugins"); |
||||
|
||||
var _configApi = require("./helpers/config-api"); |
||||
|
||||
var _partial = require("./partial"); |
||||
|
||||
var Context = require("./cache-contexts"); |
||||
|
||||
var _default = _gensync()(function* loadFullConfig(inputOpts) { |
||||
var _opts$assumptions; |
||||
|
||||
const result = yield* (0, _partial.default)(inputOpts); |
||||
|
||||
if (!result) { |
||||
return null; |
||||
} |
||||
|
||||
const { |
||||
options, |
||||
context, |
||||
fileHandling |
||||
} = result; |
||||
|
||||
if (fileHandling === "ignored") { |
||||
return null; |
||||
} |
||||
|
||||
const optionDefaults = {}; |
||||
const { |
||||
plugins, |
||||
presets |
||||
} = options; |
||||
|
||||
if (!plugins || !presets) { |
||||
throw new Error("Assertion failure - plugins and presets exist"); |
||||
} |
||||
|
||||
const presetContext = Object.assign({}, context, { |
||||
targets: options.targets |
||||
}); |
||||
|
||||
const toDescriptor = item => { |
||||
const desc = (0, _item.getItemDescriptor)(item); |
||||
|
||||
if (!desc) { |
||||
throw new Error("Assertion failure - must be config item"); |
||||
} |
||||
|
||||
return desc; |
||||
}; |
||||
|
||||
const presetsDescriptors = presets.map(toDescriptor); |
||||
const initialPluginsDescriptors = plugins.map(toDescriptor); |
||||
const pluginDescriptorsByPass = [[]]; |
||||
const passes = []; |
||||
const ignored = yield* enhanceError(context, function* recursePresetDescriptors(rawPresets, pluginDescriptorsPass) { |
||||
const presets = []; |
||||
|
||||
for (let i = 0; i < rawPresets.length; i++) { |
||||
const descriptor = rawPresets[i]; |
||||
|
||||
if (descriptor.options !== false) { |
||||
try { |
||||
if (descriptor.ownPass) { |
||||
presets.push({ |
||||
preset: yield* loadPresetDescriptor(descriptor, presetContext), |
||||
pass: [] |
||||
}); |
||||
} else { |
||||
presets.unshift({ |
||||
preset: yield* loadPresetDescriptor(descriptor, presetContext), |
||||
pass: pluginDescriptorsPass |
||||
}); |
||||
} |
||||
} catch (e) { |
||||
if (e.code === "BABEL_UNKNOWN_OPTION") { |
||||
(0, _options.checkNoUnwrappedItemOptionPairs)(rawPresets, i, "preset", e); |
||||
} |
||||
|
||||
throw e; |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (presets.length > 0) { |
||||
pluginDescriptorsByPass.splice(1, 0, ...presets.map(o => o.pass).filter(p => p !== pluginDescriptorsPass)); |
||||
|
||||
for (const { |
||||
preset, |
||||
pass |
||||
} of presets) { |
||||
if (!preset) return true; |
||||
pass.push(...preset.plugins); |
||||
const ignored = yield* recursePresetDescriptors(preset.presets, pass); |
||||
if (ignored) return true; |
||||
preset.options.forEach(opts => { |
||||
(0, _util.mergeOptions)(optionDefaults, opts); |
||||
}); |
||||
} |
||||
} |
||||
})(presetsDescriptors, pluginDescriptorsByPass[0]); |
||||
if (ignored) return null; |
||||
const opts = optionDefaults; |
||||
(0, _util.mergeOptions)(opts, options); |
||||
const pluginContext = Object.assign({}, presetContext, { |
||||
assumptions: (_opts$assumptions = opts.assumptions) != null ? _opts$assumptions : {} |
||||
}); |
||||
yield* enhanceError(context, function* loadPluginDescriptors() { |
||||
pluginDescriptorsByPass[0].unshift(...initialPluginsDescriptors); |
||||
|
||||
for (const descs of pluginDescriptorsByPass) { |
||||
const pass = []; |
||||
passes.push(pass); |
||||
|
||||
for (let i = 0; i < descs.length; i++) { |
||||
const descriptor = descs[i]; |
||||
|
||||
if (descriptor.options !== false) { |
||||
try { |
||||
pass.push(yield* loadPluginDescriptor(descriptor, pluginContext)); |
||||
} catch (e) { |
||||
if (e.code === "BABEL_UNKNOWN_PLUGIN_PROPERTY") { |
||||
(0, _options.checkNoUnwrappedItemOptionPairs)(descs, i, "plugin", e); |
||||
} |
||||
|
||||
throw e; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
})(); |
||||
opts.plugins = passes[0]; |
||||
opts.presets = passes.slice(1).filter(plugins => plugins.length > 0).map(plugins => ({ |
||||
plugins |
||||
})); |
||||
opts.passPerPreset = opts.presets.length > 0; |
||||
return { |
||||
options: opts, |
||||
passes: passes |
||||
}; |
||||
}); |
||||
|
||||
exports.default = _default; |
||||
|
||||
function enhanceError(context, fn) { |
||||
return function* (arg1, arg2) { |
||||
try { |
||||
return yield* fn(arg1, arg2); |
||||
} catch (e) { |
||||
if (!/^\[BABEL\]/.test(e.message)) { |
||||
e.message = `[BABEL] ${context.filename || "unknown"}: ${e.message}`; |
||||
} |
||||
|
||||
throw e; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
const makeDescriptorLoader = apiFactory => (0, _caching.makeWeakCache)(function* ({ |
||||
value, |
||||
options, |
||||
dirname, |
||||
alias |
||||
}, cache) { |
||||
if (options === false) throw new Error("Assertion failure"); |
||||
options = options || {}; |
||||
let item = value; |
||||
|
||||
if (typeof value === "function") { |
||||
const factory = (0, _async.maybeAsync)(value, `You appear to be using an async plugin/preset, but Babel has been called synchronously`); |
||||
const api = Object.assign({}, context, apiFactory(cache)); |
||||
|
||||
try { |
||||
item = yield* factory(api, options, dirname); |
||||
} catch (e) { |
||||
if (alias) { |
||||
e.message += ` (While processing: ${JSON.stringify(alias)})`; |
||||
} |
||||
|
||||
throw e; |
||||
} |
||||
} |
||||
|
||||
if (!item || typeof item !== "object") { |
||||
throw new Error("Plugin/Preset did not return an object."); |
||||
} |
||||
|
||||
if ((0, _async.isThenable)(item)) { |
||||
yield* []; |
||||
throw new Error(`You appear to be using a promise as a plugin, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, ` + `you may need to upgrade your @babel/core version. ` + `As an alternative, you can prefix the promise with "await". ` + `(While processing: ${JSON.stringify(alias)})`); |
||||
} |
||||
|
||||
return { |
||||
value: item, |
||||
options, |
||||
dirname, |
||||
alias |
||||
}; |
||||
}); |
||||
|
||||
const pluginDescriptorLoader = makeDescriptorLoader(_configApi.makePluginAPI); |
||||
const presetDescriptorLoader = makeDescriptorLoader(_configApi.makePresetAPI); |
||||
|
||||
function* loadPluginDescriptor(descriptor, context) { |
||||
if (descriptor.value instanceof _plugin.default) { |
||||
if (descriptor.options) { |
||||
throw new Error("Passed options to an existing Plugin instance will not work."); |
||||
} |
||||
|
||||
return descriptor.value; |
||||
} |
||||
|
||||
return yield* instantiatePlugin(yield* pluginDescriptorLoader(descriptor, context), context); |
||||
} |
||||
|
||||
const instantiatePlugin = (0, _caching.makeWeakCache)(function* ({ |
||||
value, |
||||
options, |
||||
dirname, |
||||
alias |
||||
}, cache) { |
||||
const pluginObj = (0, _plugins.validatePluginObject)(value); |
||||
const plugin = Object.assign({}, pluginObj); |
||||
|
||||
if (plugin.visitor) { |
||||
plugin.visitor = _traverse().default.explode(Object.assign({}, plugin.visitor)); |
||||
} |
||||
|
||||
if (plugin.inherits) { |
||||
const inheritsDescriptor = { |
||||
name: undefined, |
||||
alias: `${alias}$inherits`, |
||||
value: plugin.inherits, |
||||
options, |
||||
dirname |
||||
}; |
||||
const inherits = yield* (0, _async.forwardAsync)(loadPluginDescriptor, run => { |
||||
return cache.invalidate(data => run(inheritsDescriptor, data)); |
||||
}); |
||||
plugin.pre = chain(inherits.pre, plugin.pre); |
||||
plugin.post = chain(inherits.post, plugin.post); |
||||
plugin.manipulateOptions = chain(inherits.manipulateOptions, plugin.manipulateOptions); |
||||
plugin.visitor = _traverse().default.visitors.merge([inherits.visitor || {}, plugin.visitor || {}]); |
||||
} |
||||
|
||||
return new _plugin.default(plugin, options, alias); |
||||
}); |
||||
|
||||
const validateIfOptionNeedsFilename = (options, descriptor) => { |
||||
if (options.test || options.include || options.exclude) { |
||||
const formattedPresetName = descriptor.name ? `"${descriptor.name}"` : "/* your preset */"; |
||||
throw new Error([`Preset ${formattedPresetName} requires a filename to be set when babel is called directly,`, `\`\`\``, `babel.transform(code, { filename: 'file.ts', presets: [${formattedPresetName}] });`, `\`\`\``, `See https://babeljs.io/docs/en/options#filename for more information.`].join("\n")); |
||||
} |
||||
}; |
||||
|
||||
const validatePreset = (preset, context, descriptor) => { |
||||
if (!context.filename) { |
||||
const { |
||||
options |
||||
} = preset; |
||||
validateIfOptionNeedsFilename(options, descriptor); |
||||
|
||||
if (options.overrides) { |
||||
options.overrides.forEach(overrideOptions => validateIfOptionNeedsFilename(overrideOptions, descriptor)); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
function* loadPresetDescriptor(descriptor, context) { |
||||
const preset = instantiatePreset(yield* presetDescriptorLoader(descriptor, context)); |
||||
validatePreset(preset, context, descriptor); |
||||
return yield* (0, _configChain.buildPresetChain)(preset, context); |
||||
} |
||||
|
||||
const instantiatePreset = (0, _caching.makeWeakCacheSync)(({ |
||||
value, |
||||
dirname, |
||||
alias |
||||
}) => { |
||||
return { |
||||
options: (0, _options.validate)("preset", value), |
||||
alias, |
||||
dirname |
||||
}; |
||||
}); |
||||
|
||||
function chain(a, b) { |
||||
const fns = [a, b].filter(Boolean); |
||||
if (fns.length <= 1) return fns[0]; |
||||
return function (...args) { |
||||
for (const fn of fns) { |
||||
fn.apply(this, args); |
||||
} |
||||
}; |
||||
} |
@ -0,0 +1,103 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.makeConfigAPI = makeConfigAPI; |
||||
exports.makePluginAPI = makePluginAPI; |
||||
exports.makePresetAPI = makePresetAPI; |
||||
|
||||
function _semver() { |
||||
const data = require("semver"); |
||||
|
||||
_semver = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _ = require("../../"); |
||||
|
||||
var _caching = require("../caching"); |
||||
|
||||
var Context = require("../cache-contexts"); |
||||
|
||||
function makeConfigAPI(cache) { |
||||
const env = value => cache.using(data => { |
||||
if (typeof value === "undefined") return data.envName; |
||||
|
||||
if (typeof value === "function") { |
||||
return (0, _caching.assertSimpleType)(value(data.envName)); |
||||
} |
||||
|
||||
if (!Array.isArray(value)) value = [value]; |
||||
return value.some(entry => { |
||||
if (typeof entry !== "string") { |
||||
throw new Error("Unexpected non-string value"); |
||||
} |
||||
|
||||
return entry === data.envName; |
||||
}); |
||||
}); |
||||
|
||||
const caller = cb => cache.using(data => (0, _caching.assertSimpleType)(cb(data.caller))); |
||||
|
||||
return { |
||||
version: _.version, |
||||
cache: cache.simple(), |
||||
env, |
||||
async: () => false, |
||||
caller, |
||||
assertVersion |
||||
}; |
||||
} |
||||
|
||||
function makePresetAPI(cache) { |
||||
const targets = () => JSON.parse(cache.using(data => JSON.stringify(data.targets))); |
||||
|
||||
return Object.assign({}, makeConfigAPI(cache), { |
||||
targets |
||||
}); |
||||
} |
||||
|
||||
function makePluginAPI(cache) { |
||||
const assumption = name => cache.using(data => data.assumptions[name]); |
||||
|
||||
return Object.assign({}, makePresetAPI(cache), { |
||||
assumption |
||||
}); |
||||
} |
||||
|
||||
function assertVersion(range) { |
||||
if (typeof range === "number") { |
||||
if (!Number.isInteger(range)) { |
||||
throw new Error("Expected string or integer value."); |
||||
} |
||||
|
||||
range = `^${range}.0.0-0`; |
||||
} |
||||
|
||||
if (typeof range !== "string") { |
||||
throw new Error("Expected string or integer value."); |
||||
} |
||||
|
||||
if (_semver().satisfies(_.version, range)) return; |
||||
const limit = Error.stackTraceLimit; |
||||
|
||||
if (typeof limit === "number" && limit < 25) { |
||||
Error.stackTraceLimit = 25; |
||||
} |
||||
|
||||
const err = new Error(`Requires Babel "${range}", but was loaded with "${_.version}". ` + `If you are sure you have a compatible version of @babel/core, ` + `it is likely that something in your build process is loading the ` + `wrong version. Inspect the stack trace of this error to look for ` + `the first entry that doesn't mention "@babel/core" or "babel-core" ` + `to see what is calling Babel.`); |
||||
|
||||
if (typeof limit === "number") { |
||||
Error.stackTraceLimit = limit; |
||||
} |
||||
|
||||
throw Object.assign(err, { |
||||
code: "BABEL_VERSION_UNSUPPORTED", |
||||
version: _.version, |
||||
range |
||||
}); |
||||
} |
@ -0,0 +1,10 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.getEnv = getEnv; |
||||
|
||||
function getEnv(defaultValue = "development") { |
||||
return process.env.BABEL_ENV || process.env.NODE_ENV || defaultValue; |
||||
} |
@ -0,0 +1,75 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.createConfigItem = createConfigItem; |
||||
exports.createConfigItemSync = exports.createConfigItemAsync = void 0; |
||||
Object.defineProperty(exports, "default", { |
||||
enumerable: true, |
||||
get: function () { |
||||
return _full.default; |
||||
} |
||||
}); |
||||
exports.loadPartialConfigSync = exports.loadPartialConfigAsync = exports.loadPartialConfig = exports.loadOptionsSync = exports.loadOptionsAsync = exports.loadOptions = void 0; |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _full = require("./full"); |
||||
|
||||
var _partial = require("./partial"); |
||||
|
||||
var _item = require("./item"); |
||||
|
||||
const loadOptionsRunner = _gensync()(function* (opts) { |
||||
var _config$options; |
||||
|
||||
const config = yield* (0, _full.default)(opts); |
||||
return (_config$options = config == null ? void 0 : config.options) != null ? _config$options : null; |
||||
}); |
||||
|
||||
const createConfigItemRunner = _gensync()(_item.createConfigItem); |
||||
|
||||
const maybeErrback = runner => (opts, callback) => { |
||||
if (callback === undefined && typeof opts === "function") { |
||||
callback = opts; |
||||
opts = undefined; |
||||
} |
||||
|
||||
return callback ? runner.errback(opts, callback) : runner.sync(opts); |
||||
}; |
||||
|
||||
const loadPartialConfig = maybeErrback(_partial.loadPartialConfig); |
||||
exports.loadPartialConfig = loadPartialConfig; |
||||
const loadPartialConfigSync = _partial.loadPartialConfig.sync; |
||||
exports.loadPartialConfigSync = loadPartialConfigSync; |
||||
const loadPartialConfigAsync = _partial.loadPartialConfig.async; |
||||
exports.loadPartialConfigAsync = loadPartialConfigAsync; |
||||
const loadOptions = maybeErrback(loadOptionsRunner); |
||||
exports.loadOptions = loadOptions; |
||||
const loadOptionsSync = loadOptionsRunner.sync; |
||||
exports.loadOptionsSync = loadOptionsSync; |
||||
const loadOptionsAsync = loadOptionsRunner.async; |
||||
exports.loadOptionsAsync = loadOptionsAsync; |
||||
const createConfigItemSync = createConfigItemRunner.sync; |
||||
exports.createConfigItemSync = createConfigItemSync; |
||||
const createConfigItemAsync = createConfigItemRunner.async; |
||||
exports.createConfigItemAsync = createConfigItemAsync; |
||||
|
||||
function createConfigItem(target, options, callback) { |
||||
if (callback !== undefined) { |
||||
return createConfigItemRunner.errback(target, options, callback); |
||||
} else if (typeof options === "function") { |
||||
return createConfigItemRunner.errback(target, undefined, callback); |
||||
} else { |
||||
return createConfigItemRunner.sync(target, options); |
||||
} |
||||
} |
@ -0,0 +1,76 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.createConfigItem = createConfigItem; |
||||
exports.createItemFromDescriptor = createItemFromDescriptor; |
||||
exports.getItemDescriptor = getItemDescriptor; |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _configDescriptors = require("./config-descriptors"); |
||||
|
||||
function createItemFromDescriptor(desc) { |
||||
return new ConfigItem(desc); |
||||
} |
||||
|
||||
function* createConfigItem(value, { |
||||
dirname = ".", |
||||
type |
||||
} = {}) { |
||||
const descriptor = yield* (0, _configDescriptors.createDescriptor)(value, _path().resolve(dirname), { |
||||
type, |
||||
alias: "programmatic item" |
||||
}); |
||||
return createItemFromDescriptor(descriptor); |
||||
} |
||||
|
||||
function getItemDescriptor(item) { |
||||
if (item != null && item[CONFIG_ITEM_BRAND]) { |
||||
return item._descriptor; |
||||
} |
||||
|
||||
return undefined; |
||||
} |
||||
|
||||
const CONFIG_ITEM_BRAND = Symbol.for("@babel/core@7 - ConfigItem"); |
||||
|
||||
class ConfigItem { |
||||
constructor(descriptor) { |
||||
this._descriptor = void 0; |
||||
this[CONFIG_ITEM_BRAND] = true; |
||||
this.value = void 0; |
||||
this.options = void 0; |
||||
this.dirname = void 0; |
||||
this.name = void 0; |
||||
this.file = void 0; |
||||
this._descriptor = descriptor; |
||||
Object.defineProperty(this, "_descriptor", { |
||||
enumerable: false |
||||
}); |
||||
Object.defineProperty(this, CONFIG_ITEM_BRAND, { |
||||
enumerable: false |
||||
}); |
||||
this.value = this._descriptor.value; |
||||
this.options = this._descriptor.options; |
||||
this.dirname = this._descriptor.dirname; |
||||
this.name = this._descriptor.name; |
||||
this.file = this._descriptor.file ? { |
||||
request: this._descriptor.file.request, |
||||
resolved: this._descriptor.file.resolved |
||||
} : undefined; |
||||
Object.freeze(this); |
||||
} |
||||
|
||||
} |
||||
|
||||
Object.freeze(ConfigItem.prototype); |
@ -0,0 +1,197 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.default = loadPrivatePartialConfig; |
||||
exports.loadPartialConfig = void 0; |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _plugin = require("./plugin"); |
||||
|
||||
var _util = require("./util"); |
||||
|
||||
var _item = require("./item"); |
||||
|
||||
var _configChain = require("./config-chain"); |
||||
|
||||
var _environment = require("./helpers/environment"); |
||||
|
||||
var _options = require("./validation/options"); |
||||
|
||||
var _files = require("./files"); |
||||
|
||||
var _resolveTargets = require("./resolve-targets"); |
||||
|
||||
const _excluded = ["showIgnoredFiles"]; |
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } |
||||
|
||||
function resolveRootMode(rootDir, rootMode) { |
||||
switch (rootMode) { |
||||
case "root": |
||||
return rootDir; |
||||
|
||||
case "upward-optional": |
||||
{ |
||||
const upwardRootDir = (0, _files.findConfigUpwards)(rootDir); |
||||
return upwardRootDir === null ? rootDir : upwardRootDir; |
||||
} |
||||
|
||||
case "upward": |
||||
{ |
||||
const upwardRootDir = (0, _files.findConfigUpwards)(rootDir); |
||||
if (upwardRootDir !== null) return upwardRootDir; |
||||
throw Object.assign(new Error(`Babel was run with rootMode:"upward" but a root could not ` + `be found when searching upward from "${rootDir}".\n` + `One of the following config files must be in the directory tree: ` + `"${_files.ROOT_CONFIG_FILENAMES.join(", ")}".`), { |
||||
code: "BABEL_ROOT_NOT_FOUND", |
||||
dirname: rootDir |
||||
}); |
||||
} |
||||
|
||||
default: |
||||
throw new Error(`Assertion failure - unknown rootMode value.`); |
||||
} |
||||
} |
||||
|
||||
function* loadPrivatePartialConfig(inputOpts) { |
||||
if (inputOpts != null && (typeof inputOpts !== "object" || Array.isArray(inputOpts))) { |
||||
throw new Error("Babel options must be an object, null, or undefined"); |
||||
} |
||||
|
||||
const args = inputOpts ? (0, _options.validate)("arguments", inputOpts) : {}; |
||||
const { |
||||
envName = (0, _environment.getEnv)(), |
||||
cwd = ".", |
||||
root: rootDir = ".", |
||||
rootMode = "root", |
||||
caller, |
||||
cloneInputAst = true |
||||
} = args; |
||||
|
||||
const absoluteCwd = _path().resolve(cwd); |
||||
|
||||
const absoluteRootDir = resolveRootMode(_path().resolve(absoluteCwd, rootDir), rootMode); |
||||
const filename = typeof args.filename === "string" ? _path().resolve(cwd, args.filename) : undefined; |
||||
const showConfigPath = yield* (0, _files.resolveShowConfigPath)(absoluteCwd); |
||||
const context = { |
||||
filename, |
||||
cwd: absoluteCwd, |
||||
root: absoluteRootDir, |
||||
envName, |
||||
caller, |
||||
showConfig: showConfigPath === filename |
||||
}; |
||||
const configChain = yield* (0, _configChain.buildRootChain)(args, context); |
||||
if (!configChain) return null; |
||||
const merged = { |
||||
assumptions: {} |
||||
}; |
||||
configChain.options.forEach(opts => { |
||||
(0, _util.mergeOptions)(merged, opts); |
||||
}); |
||||
const options = Object.assign({}, merged, { |
||||
targets: (0, _resolveTargets.resolveTargets)(merged, absoluteRootDir), |
||||
cloneInputAst, |
||||
babelrc: false, |
||||
configFile: false, |
||||
browserslistConfigFile: false, |
||||
passPerPreset: false, |
||||
envName: context.envName, |
||||
cwd: context.cwd, |
||||
root: context.root, |
||||
rootMode: "root", |
||||
filename: typeof context.filename === "string" ? context.filename : undefined, |
||||
plugins: configChain.plugins.map(descriptor => (0, _item.createItemFromDescriptor)(descriptor)), |
||||
presets: configChain.presets.map(descriptor => (0, _item.createItemFromDescriptor)(descriptor)) |
||||
}); |
||||
return { |
||||
options, |
||||
context, |
||||
fileHandling: configChain.fileHandling, |
||||
ignore: configChain.ignore, |
||||
babelrc: configChain.babelrc, |
||||
config: configChain.config, |
||||
files: configChain.files |
||||
}; |
||||
} |
||||
|
||||
const loadPartialConfig = _gensync()(function* (opts) { |
||||
let showIgnoredFiles = false; |
||||
|
||||
if (typeof opts === "object" && opts !== null && !Array.isArray(opts)) { |
||||
var _opts = opts; |
||||
({ |
||||
showIgnoredFiles |
||||
} = _opts); |
||||
opts = _objectWithoutPropertiesLoose(_opts, _excluded); |
||||
_opts; |
||||
} |
||||
|
||||
const result = yield* loadPrivatePartialConfig(opts); |
||||
if (!result) return null; |
||||
const { |
||||
options, |
||||
babelrc, |
||||
ignore, |
||||
config, |
||||
fileHandling, |
||||
files |
||||
} = result; |
||||
|
||||
if (fileHandling === "ignored" && !showIgnoredFiles) { |
||||
return null; |
||||
} |
||||
|
||||
(options.plugins || []).forEach(item => { |
||||
if (item.value instanceof _plugin.default) { |
||||
throw new Error("Passing cached plugin instances is not supported in " + "babel.loadPartialConfig()"); |
||||
} |
||||
}); |
||||
return new PartialConfig(options, babelrc ? babelrc.filepath : undefined, ignore ? ignore.filepath : undefined, config ? config.filepath : undefined, fileHandling, files); |
||||
}); |
||||
|
||||
exports.loadPartialConfig = loadPartialConfig; |
||||
|
||||
class PartialConfig { |
||||
constructor(options, babelrc, ignore, config, fileHandling, files) { |
||||
this.options = void 0; |
||||
this.babelrc = void 0; |
||||
this.babelignore = void 0; |
||||
this.config = void 0; |
||||
this.fileHandling = void 0; |
||||
this.files = void 0; |
||||
this.options = options; |
||||
this.babelignore = ignore; |
||||
this.babelrc = babelrc; |
||||
this.config = config; |
||||
this.fileHandling = fileHandling; |
||||
this.files = files; |
||||
Object.freeze(this); |
||||
} |
||||
|
||||
hasFilesystemConfig() { |
||||
return this.babelrc !== undefined || this.config !== undefined; |
||||
} |
||||
|
||||
} |
||||
|
||||
Object.freeze(PartialConfig.prototype); |
@ -0,0 +1,44 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.default = pathToPattern; |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
const sep = `\\${_path().sep}`; |
||||
const endSep = `(?:${sep}|$)`; |
||||
const substitution = `[^${sep}]+`; |
||||
const starPat = `(?:${substitution}${sep})`; |
||||
const starPatLast = `(?:${substitution}${endSep})`; |
||||
const starStarPat = `${starPat}*?`; |
||||
const starStarPatLast = `${starPat}*?${starPatLast}?`; |
||||
|
||||
function escapeRegExp(string) { |
||||
return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&"); |
||||
} |
||||
|
||||
function pathToPattern(pattern, dirname) { |
||||
const parts = _path().resolve(dirname, pattern).split(_path().sep); |
||||
|
||||
return new RegExp(["^", ...parts.map((part, i) => { |
||||
const last = i === parts.length - 1; |
||||
if (part === "**") return last ? starStarPatLast : starStarPat; |
||||
if (part === "*") return last ? starPatLast : starPat; |
||||
|
||||
if (part.indexOf("*.") === 0) { |
||||
return substitution + escapeRegExp(part.slice(1)) + (last ? endSep : sep); |
||||
} |
||||
|
||||
return escapeRegExp(part) + (last ? endSep : sep); |
||||
})].join("")); |
||||
} |
@ -0,0 +1,30 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.default = void 0; |
||||
|
||||
class Plugin { |
||||
constructor(plugin, options, key) { |
||||
this.key = void 0; |
||||
this.manipulateOptions = void 0; |
||||
this.post = void 0; |
||||
this.pre = void 0; |
||||
this.visitor = void 0; |
||||
this.parserOverride = void 0; |
||||
this.generatorOverride = void 0; |
||||
this.options = void 0; |
||||
this.key = plugin.name || key; |
||||
this.manipulateOptions = plugin.manipulateOptions; |
||||
this.post = plugin.post; |
||||
this.pre = plugin.pre; |
||||
this.visitor = plugin.visitor || {}; |
||||
this.parserOverride = plugin.parserOverride; |
||||
this.generatorOverride = plugin.generatorOverride; |
||||
this.options = options; |
||||
} |
||||
|
||||
} |
||||
|
||||
exports.default = Plugin; |
@ -0,0 +1,139 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.ConfigPrinter = exports.ChainFormatter = void 0; |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
const ChainFormatter = { |
||||
Programmatic: 0, |
||||
Config: 1 |
||||
}; |
||||
exports.ChainFormatter = ChainFormatter; |
||||
const Formatter = { |
||||
title(type, callerName, filepath) { |
||||
let title = ""; |
||||
|
||||
if (type === ChainFormatter.Programmatic) { |
||||
title = "programmatic options"; |
||||
|
||||
if (callerName) { |
||||
title += " from " + callerName; |
||||
} |
||||
} else { |
||||
title = "config " + filepath; |
||||
} |
||||
|
||||
return title; |
||||
}, |
||||
|
||||
loc(index, envName) { |
||||
let loc = ""; |
||||
|
||||
if (index != null) { |
||||
loc += `.overrides[${index}]`; |
||||
} |
||||
|
||||
if (envName != null) { |
||||
loc += `.env["${envName}"]`; |
||||
} |
||||
|
||||
return loc; |
||||
}, |
||||
|
||||
*optionsAndDescriptors(opt) { |
||||
const content = Object.assign({}, opt.options); |
||||
delete content.overrides; |
||||
delete content.env; |
||||
const pluginDescriptors = [...(yield* opt.plugins())]; |
||||
|
||||
if (pluginDescriptors.length) { |
||||
content.plugins = pluginDescriptors.map(d => descriptorToConfig(d)); |
||||
} |
||||
|
||||
const presetDescriptors = [...(yield* opt.presets())]; |
||||
|
||||
if (presetDescriptors.length) { |
||||
content.presets = [...presetDescriptors].map(d => descriptorToConfig(d)); |
||||
} |
||||
|
||||
return JSON.stringify(content, undefined, 2); |
||||
} |
||||
|
||||
}; |
||||
|
||||
function descriptorToConfig(d) { |
||||
var _d$file; |
||||
|
||||
let name = (_d$file = d.file) == null ? void 0 : _d$file.request; |
||||
|
||||
if (name == null) { |
||||
if (typeof d.value === "object") { |
||||
name = d.value; |
||||
} else if (typeof d.value === "function") { |
||||
name = `[Function: ${d.value.toString().substr(0, 50)} ... ]`; |
||||
} |
||||
} |
||||
|
||||
if (name == null) { |
||||
name = "[Unknown]"; |
||||
} |
||||
|
||||
if (d.options === undefined) { |
||||
return name; |
||||
} else if (d.name == null) { |
||||
return [name, d.options]; |
||||
} else { |
||||
return [name, d.options, d.name]; |
||||
} |
||||
} |
||||
|
||||
class ConfigPrinter { |
||||
constructor() { |
||||
this._stack = []; |
||||
} |
||||
|
||||
configure(enabled, type, { |
||||
callerName, |
||||
filepath |
||||
}) { |
||||
if (!enabled) return () => {}; |
||||
return (content, index, envName) => { |
||||
this._stack.push({ |
||||
type, |
||||
callerName, |
||||
filepath, |
||||
content, |
||||
index, |
||||
envName |
||||
}); |
||||
}; |
||||
} |
||||
|
||||
static *format(config) { |
||||
let title = Formatter.title(config.type, config.callerName, config.filepath); |
||||
const loc = Formatter.loc(config.index, config.envName); |
||||
if (loc) title += ` ${loc}`; |
||||
const content = yield* Formatter.optionsAndDescriptors(config.content); |
||||
return `${title}\n${content}`; |
||||
} |
||||
|
||||
*output() { |
||||
if (this._stack.length === 0) return ""; |
||||
const configs = yield* _gensync().all(this._stack.map(s => ConfigPrinter.format(s))); |
||||
return configs.join("\n\n"); |
||||
} |
||||
|
||||
} |
||||
|
||||
exports.ConfigPrinter = ConfigPrinter; |
@ -0,0 +1,42 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.resolveBrowserslistConfigFile = resolveBrowserslistConfigFile; |
||||
exports.resolveTargets = resolveTargets; |
||||
|
||||
function _helperCompilationTargets() { |
||||
const data = require("@babel/helper-compilation-targets"); |
||||
|
||||
_helperCompilationTargets = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function resolveBrowserslistConfigFile(browserslistConfigFile, configFilePath) { |
||||
return undefined; |
||||
} |
||||
|
||||
function resolveTargets(options, root) { |
||||
let targets = options.targets; |
||||
|
||||
if (typeof targets === "string" || Array.isArray(targets)) { |
||||
targets = { |
||||
browsers: targets |
||||
}; |
||||
} |
||||
|
||||
if (targets && targets.esmodules) { |
||||
targets = Object.assign({}, targets, { |
||||
esmodules: "intersect" |
||||
}); |
||||
} |
||||
|
||||
return (0, _helperCompilationTargets().default)(targets, { |
||||
ignoreBrowserslistConfig: true, |
||||
browserslistEnv: options.browserslistEnv |
||||
}); |
||||
} |
@ -0,0 +1,68 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.resolveBrowserslistConfigFile = resolveBrowserslistConfigFile; |
||||
exports.resolveTargets = resolveTargets; |
||||
|
||||
function _path() { |
||||
const data = require("path"); |
||||
|
||||
_path = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _helperCompilationTargets() { |
||||
const data = require("@babel/helper-compilation-targets"); |
||||
|
||||
_helperCompilationTargets = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
({}); |
||||
|
||||
function resolveBrowserslistConfigFile(browserslistConfigFile, configFileDir) { |
||||
return _path().resolve(configFileDir, browserslistConfigFile); |
||||
} |
||||
|
||||
function resolveTargets(options, root) { |
||||
let targets = options.targets; |
||||
|
||||
if (typeof targets === "string" || Array.isArray(targets)) { |
||||
targets = { |
||||
browsers: targets |
||||
}; |
||||
} |
||||
|
||||
if (targets && targets.esmodules) { |
||||
targets = Object.assign({}, targets, { |
||||
esmodules: "intersect" |
||||
}); |
||||
} |
||||
|
||||
const { |
||||
browserslistConfigFile |
||||
} = options; |
||||
let configFile; |
||||
let ignoreBrowserslistConfig = false; |
||||
|
||||
if (typeof browserslistConfigFile === "string") { |
||||
configFile = browserslistConfigFile; |
||||
} else { |
||||
ignoreBrowserslistConfig = browserslistConfigFile === false; |
||||
} |
||||
|
||||
return (0, _helperCompilationTargets().default)(targets, { |
||||
ignoreBrowserslistConfig, |
||||
configFile, |
||||
configPath: root, |
||||
browserslistEnv: options.browserslistEnv |
||||
}); |
||||
} |
@ -0,0 +1,31 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.isIterableIterator = isIterableIterator; |
||||
exports.mergeOptions = mergeOptions; |
||||
|
||||
function mergeOptions(target, source) { |
||||
for (const k of Object.keys(source)) { |
||||
if ((k === "parserOpts" || k === "generatorOpts" || k === "assumptions") && source[k]) { |
||||
const parserOpts = source[k]; |
||||
const targetObj = target[k] || (target[k] = {}); |
||||
mergeDefaultFields(targetObj, parserOpts); |
||||
} else { |
||||
const val = source[k]; |
||||
if (val !== undefined) target[k] = val; |
||||
} |
||||
} |
||||
} |
||||
|
||||
function mergeDefaultFields(target, source) { |
||||
for (const k of Object.keys(source)) { |
||||
const val = source[k]; |
||||
if (val !== undefined) target[k] = val; |
||||
} |
||||
} |
||||
|
||||
function isIterableIterator(value) { |
||||
return !!value && typeof value.next === "function" && typeof value[Symbol.iterator] === "function"; |
||||
} |
@ -0,0 +1,352 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.access = access; |
||||
exports.assertArray = assertArray; |
||||
exports.assertAssumptions = assertAssumptions; |
||||
exports.assertBabelrcSearch = assertBabelrcSearch; |
||||
exports.assertBoolean = assertBoolean; |
||||
exports.assertCallerMetadata = assertCallerMetadata; |
||||
exports.assertCompact = assertCompact; |
||||
exports.assertConfigApplicableTest = assertConfigApplicableTest; |
||||
exports.assertConfigFileSearch = assertConfigFileSearch; |
||||
exports.assertFunction = assertFunction; |
||||
exports.assertIgnoreList = assertIgnoreList; |
||||
exports.assertInputSourceMap = assertInputSourceMap; |
||||
exports.assertObject = assertObject; |
||||
exports.assertPluginList = assertPluginList; |
||||
exports.assertRootMode = assertRootMode; |
||||
exports.assertSourceMaps = assertSourceMaps; |
||||
exports.assertSourceType = assertSourceType; |
||||
exports.assertString = assertString; |
||||
exports.assertTargets = assertTargets; |
||||
exports.msg = msg; |
||||
|
||||
function _helperCompilationTargets() { |
||||
const data = require("@babel/helper-compilation-targets"); |
||||
|
||||
_helperCompilationTargets = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
var _options = require("./options"); |
||||
|
||||
function msg(loc) { |
||||
switch (loc.type) { |
||||
case "root": |
||||
return ``; |
||||
|
||||
case "env": |
||||
return `${msg(loc.parent)}.env["${loc.name}"]`; |
||||
|
||||
case "overrides": |
||||
return `${msg(loc.parent)}.overrides[${loc.index}]`; |
||||
|
||||
case "option": |
||||
return `${msg(loc.parent)}.${loc.name}`; |
||||
|
||||
case "access": |
||||
return `${msg(loc.parent)}[${JSON.stringify(loc.name)}]`; |
||||
|
||||
default: |
||||
throw new Error(`Assertion failure: Unknown type ${loc.type}`); |
||||
} |
||||
} |
||||
|
||||
function access(loc, name) { |
||||
return { |
||||
type: "access", |
||||
name, |
||||
parent: loc |
||||
}; |
||||
} |
||||
|
||||
function assertRootMode(loc, value) { |
||||
if (value !== undefined && value !== "root" && value !== "upward" && value !== "upward-optional") { |
||||
throw new Error(`${msg(loc)} must be a "root", "upward", "upward-optional" or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertSourceMaps(loc, value) { |
||||
if (value !== undefined && typeof value !== "boolean" && value !== "inline" && value !== "both") { |
||||
throw new Error(`${msg(loc)} must be a boolean, "inline", "both", or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertCompact(loc, value) { |
||||
if (value !== undefined && typeof value !== "boolean" && value !== "auto") { |
||||
throw new Error(`${msg(loc)} must be a boolean, "auto", or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertSourceType(loc, value) { |
||||
if (value !== undefined && value !== "module" && value !== "script" && value !== "unambiguous") { |
||||
throw new Error(`${msg(loc)} must be "module", "script", "unambiguous", or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertCallerMetadata(loc, value) { |
||||
const obj = assertObject(loc, value); |
||||
|
||||
if (obj) { |
||||
if (typeof obj.name !== "string") { |
||||
throw new Error(`${msg(loc)} set but does not contain "name" property string`); |
||||
} |
||||
|
||||
for (const prop of Object.keys(obj)) { |
||||
const propLoc = access(loc, prop); |
||||
const value = obj[prop]; |
||||
|
||||
if (value != null && typeof value !== "boolean" && typeof value !== "string" && typeof value !== "number") { |
||||
throw new Error(`${msg(propLoc)} must be null, undefined, a boolean, a string, or a number.`); |
||||
} |
||||
} |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertInputSourceMap(loc, value) { |
||||
if (value !== undefined && typeof value !== "boolean" && (typeof value !== "object" || !value)) { |
||||
throw new Error(`${msg(loc)} must be a boolean, object, or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertString(loc, value) { |
||||
if (value !== undefined && typeof value !== "string") { |
||||
throw new Error(`${msg(loc)} must be a string, or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertFunction(loc, value) { |
||||
if (value !== undefined && typeof value !== "function") { |
||||
throw new Error(`${msg(loc)} must be a function, or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertBoolean(loc, value) { |
||||
if (value !== undefined && typeof value !== "boolean") { |
||||
throw new Error(`${msg(loc)} must be a boolean, or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertObject(loc, value) { |
||||
if (value !== undefined && (typeof value !== "object" || Array.isArray(value) || !value)) { |
||||
throw new Error(`${msg(loc)} must be an object, or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertArray(loc, value) { |
||||
if (value != null && !Array.isArray(value)) { |
||||
throw new Error(`${msg(loc)} must be an array, or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertIgnoreList(loc, value) { |
||||
const arr = assertArray(loc, value); |
||||
|
||||
if (arr) { |
||||
arr.forEach((item, i) => assertIgnoreItem(access(loc, i), item)); |
||||
} |
||||
|
||||
return arr; |
||||
} |
||||
|
||||
function assertIgnoreItem(loc, value) { |
||||
if (typeof value !== "string" && typeof value !== "function" && !(value instanceof RegExp)) { |
||||
throw new Error(`${msg(loc)} must be an array of string/Function/RegExp values, or undefined`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertConfigApplicableTest(loc, value) { |
||||
if (value === undefined) return value; |
||||
|
||||
if (Array.isArray(value)) { |
||||
value.forEach((item, i) => { |
||||
if (!checkValidTest(item)) { |
||||
throw new Error(`${msg(access(loc, i))} must be a string/Function/RegExp.`); |
||||
} |
||||
}); |
||||
} else if (!checkValidTest(value)) { |
||||
throw new Error(`${msg(loc)} must be a string/Function/RegExp, or an array of those`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function checkValidTest(value) { |
||||
return typeof value === "string" || typeof value === "function" || value instanceof RegExp; |
||||
} |
||||
|
||||
function assertConfigFileSearch(loc, value) { |
||||
if (value !== undefined && typeof value !== "boolean" && typeof value !== "string") { |
||||
throw new Error(`${msg(loc)} must be a undefined, a boolean, a string, ` + `got ${JSON.stringify(value)}`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertBabelrcSearch(loc, value) { |
||||
if (value === undefined || typeof value === "boolean") return value; |
||||
|
||||
if (Array.isArray(value)) { |
||||
value.forEach((item, i) => { |
||||
if (!checkValidTest(item)) { |
||||
throw new Error(`${msg(access(loc, i))} must be a string/Function/RegExp.`); |
||||
} |
||||
}); |
||||
} else if (!checkValidTest(value)) { |
||||
throw new Error(`${msg(loc)} must be a undefined, a boolean, a string/Function/RegExp ` + `or an array of those, got ${JSON.stringify(value)}`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertPluginList(loc, value) { |
||||
const arr = assertArray(loc, value); |
||||
|
||||
if (arr) { |
||||
arr.forEach((item, i) => assertPluginItem(access(loc, i), item)); |
||||
} |
||||
|
||||
return arr; |
||||
} |
||||
|
||||
function assertPluginItem(loc, value) { |
||||
if (Array.isArray(value)) { |
||||
if (value.length === 0) { |
||||
throw new Error(`${msg(loc)} must include an object`); |
||||
} |
||||
|
||||
if (value.length > 3) { |
||||
throw new Error(`${msg(loc)} may only be a two-tuple or three-tuple`); |
||||
} |
||||
|
||||
assertPluginTarget(access(loc, 0), value[0]); |
||||
|
||||
if (value.length > 1) { |
||||
const opts = value[1]; |
||||
|
||||
if (opts !== undefined && opts !== false && (typeof opts !== "object" || Array.isArray(opts) || opts === null)) { |
||||
throw new Error(`${msg(access(loc, 1))} must be an object, false, or undefined`); |
||||
} |
||||
} |
||||
|
||||
if (value.length === 3) { |
||||
const name = value[2]; |
||||
|
||||
if (name !== undefined && typeof name !== "string") { |
||||
throw new Error(`${msg(access(loc, 2))} must be a string, or undefined`); |
||||
} |
||||
} |
||||
} else { |
||||
assertPluginTarget(loc, value); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertPluginTarget(loc, value) { |
||||
if ((typeof value !== "object" || !value) && typeof value !== "string" && typeof value !== "function") { |
||||
throw new Error(`${msg(loc)} must be a string, object, function`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertTargets(loc, value) { |
||||
if ((0, _helperCompilationTargets().isBrowsersQueryValid)(value)) return value; |
||||
|
||||
if (typeof value !== "object" || !value || Array.isArray(value)) { |
||||
throw new Error(`${msg(loc)} must be a string, an array of strings or an object`); |
||||
} |
||||
|
||||
const browsersLoc = access(loc, "browsers"); |
||||
const esmodulesLoc = access(loc, "esmodules"); |
||||
assertBrowsersList(browsersLoc, value.browsers); |
||||
assertBoolean(esmodulesLoc, value.esmodules); |
||||
|
||||
for (const key of Object.keys(value)) { |
||||
const val = value[key]; |
||||
const subLoc = access(loc, key); |
||||
if (key === "esmodules") assertBoolean(subLoc, val);else if (key === "browsers") assertBrowsersList(subLoc, val);else if (!Object.hasOwnProperty.call(_helperCompilationTargets().TargetNames, key)) { |
||||
const validTargets = Object.keys(_helperCompilationTargets().TargetNames).join(", "); |
||||
throw new Error(`${msg(subLoc)} is not a valid target. Supported targets are ${validTargets}`); |
||||
} else assertBrowserVersion(subLoc, val); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function assertBrowsersList(loc, value) { |
||||
if (value !== undefined && !(0, _helperCompilationTargets().isBrowsersQueryValid)(value)) { |
||||
throw new Error(`${msg(loc)} must be undefined, a string or an array of strings`); |
||||
} |
||||
} |
||||
|
||||
function assertBrowserVersion(loc, value) { |
||||
if (typeof value === "number" && Math.round(value) === value) return; |
||||
if (typeof value === "string") return; |
||||
throw new Error(`${msg(loc)} must be a string or an integer number`); |
||||
} |
||||
|
||||
function assertAssumptions(loc, value) { |
||||
if (value === undefined) return; |
||||
|
||||
if (typeof value !== "object" || value === null) { |
||||
throw new Error(`${msg(loc)} must be an object or undefined.`); |
||||
} |
||||
|
||||
let root = loc; |
||||
|
||||
do { |
||||
root = root.parent; |
||||
} while (root.type !== "root"); |
||||
|
||||
const inPreset = root.source === "preset"; |
||||
|
||||
for (const name of Object.keys(value)) { |
||||
const subLoc = access(loc, name); |
||||
|
||||
if (!_options.assumptionsNames.has(name)) { |
||||
throw new Error(`${msg(subLoc)} is not a supported assumption.`); |
||||
} |
||||
|
||||
if (typeof value[name] !== "boolean") { |
||||
throw new Error(`${msg(subLoc)} must be a boolean.`); |
||||
} |
||||
|
||||
if (inPreset && value[name] === false) { |
||||
throw new Error(`${msg(subLoc)} cannot be set to 'false' inside presets.`); |
||||
} |
||||
} |
||||
|
||||
return value; |
||||
} |
@ -0,0 +1,210 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.assumptionsNames = void 0; |
||||
exports.checkNoUnwrappedItemOptionPairs = checkNoUnwrappedItemOptionPairs; |
||||
exports.validate = validate; |
||||
|
||||
var _plugin = require("../plugin"); |
||||
|
||||
var _removed = require("./removed"); |
||||
|
||||
var _optionAssertions = require("./option-assertions"); |
||||
|
||||
const ROOT_VALIDATORS = { |
||||
cwd: _optionAssertions.assertString, |
||||
root: _optionAssertions.assertString, |
||||
rootMode: _optionAssertions.assertRootMode, |
||||
configFile: _optionAssertions.assertConfigFileSearch, |
||||
caller: _optionAssertions.assertCallerMetadata, |
||||
filename: _optionAssertions.assertString, |
||||
filenameRelative: _optionAssertions.assertString, |
||||
code: _optionAssertions.assertBoolean, |
||||
ast: _optionAssertions.assertBoolean, |
||||
cloneInputAst: _optionAssertions.assertBoolean, |
||||
envName: _optionAssertions.assertString |
||||
}; |
||||
const BABELRC_VALIDATORS = { |
||||
babelrc: _optionAssertions.assertBoolean, |
||||
babelrcRoots: _optionAssertions.assertBabelrcSearch |
||||
}; |
||||
const NONPRESET_VALIDATORS = { |
||||
extends: _optionAssertions.assertString, |
||||
ignore: _optionAssertions.assertIgnoreList, |
||||
only: _optionAssertions.assertIgnoreList, |
||||
targets: _optionAssertions.assertTargets, |
||||
browserslistConfigFile: _optionAssertions.assertConfigFileSearch, |
||||
browserslistEnv: _optionAssertions.assertString |
||||
}; |
||||
const COMMON_VALIDATORS = { |
||||
inputSourceMap: _optionAssertions.assertInputSourceMap, |
||||
presets: _optionAssertions.assertPluginList, |
||||
plugins: _optionAssertions.assertPluginList, |
||||
passPerPreset: _optionAssertions.assertBoolean, |
||||
assumptions: _optionAssertions.assertAssumptions, |
||||
env: assertEnvSet, |
||||
overrides: assertOverridesList, |
||||
test: _optionAssertions.assertConfigApplicableTest, |
||||
include: _optionAssertions.assertConfigApplicableTest, |
||||
exclude: _optionAssertions.assertConfigApplicableTest, |
||||
retainLines: _optionAssertions.assertBoolean, |
||||
comments: _optionAssertions.assertBoolean, |
||||
shouldPrintComment: _optionAssertions.assertFunction, |
||||
compact: _optionAssertions.assertCompact, |
||||
minified: _optionAssertions.assertBoolean, |
||||
auxiliaryCommentBefore: _optionAssertions.assertString, |
||||
auxiliaryCommentAfter: _optionAssertions.assertString, |
||||
sourceType: _optionAssertions.assertSourceType, |
||||
wrapPluginVisitorMethod: _optionAssertions.assertFunction, |
||||
highlightCode: _optionAssertions.assertBoolean, |
||||
sourceMaps: _optionAssertions.assertSourceMaps, |
||||
sourceMap: _optionAssertions.assertSourceMaps, |
||||
sourceFileName: _optionAssertions.assertString, |
||||
sourceRoot: _optionAssertions.assertString, |
||||
parserOpts: _optionAssertions.assertObject, |
||||
generatorOpts: _optionAssertions.assertObject |
||||
}; |
||||
{ |
||||
Object.assign(COMMON_VALIDATORS, { |
||||
getModuleId: _optionAssertions.assertFunction, |
||||
moduleRoot: _optionAssertions.assertString, |
||||
moduleIds: _optionAssertions.assertBoolean, |
||||
moduleId: _optionAssertions.assertString |
||||
}); |
||||
} |
||||
const assumptionsNames = new Set(["arrayLikeIsIterable", "constantReexports", "constantSuper", "enumerableModuleMeta", "ignoreFunctionLength", "ignoreToPrimitiveHint", "iterableIsArray", "mutableTemplateObject", "noClassCalls", "noDocumentAll", "noIncompleteNsImportDetection", "noNewArrows", "objectRestNoSymbols", "privateFieldsAsProperties", "pureGetters", "setClassMethods", "setComputedProperties", "setPublicClassFields", "setSpreadProperties", "skipForOfIteratorClosing", "superIsCallableConstructor"]); |
||||
exports.assumptionsNames = assumptionsNames; |
||||
|
||||
function getSource(loc) { |
||||
return loc.type === "root" ? loc.source : getSource(loc.parent); |
||||
} |
||||
|
||||
function validate(type, opts) { |
||||
return validateNested({ |
||||
type: "root", |
||||
source: type |
||||
}, opts); |
||||
} |
||||
|
||||
function validateNested(loc, opts) { |
||||
const type = getSource(loc); |
||||
assertNoDuplicateSourcemap(opts); |
||||
Object.keys(opts).forEach(key => { |
||||
const optLoc = { |
||||
type: "option", |
||||
name: key, |
||||
parent: loc |
||||
}; |
||||
|
||||
if (type === "preset" && NONPRESET_VALIDATORS[key]) { |
||||
throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is not allowed in preset options`); |
||||
} |
||||
|
||||
if (type !== "arguments" && ROOT_VALIDATORS[key]) { |
||||
throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is only allowed in root programmatic options`); |
||||
} |
||||
|
||||
if (type !== "arguments" && type !== "configfile" && BABELRC_VALIDATORS[key]) { |
||||
if (type === "babelrcfile" || type === "extendsfile") { |
||||
throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is not allowed in .babelrc or "extends"ed files, only in root programmatic options, ` + `or babel.config.js/config file options`); |
||||
} |
||||
|
||||
throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is only allowed in root programmatic options, or babel.config.js/config file options`); |
||||
} |
||||
|
||||
const validator = COMMON_VALIDATORS[key] || NONPRESET_VALIDATORS[key] || BABELRC_VALIDATORS[key] || ROOT_VALIDATORS[key] || throwUnknownError; |
||||
validator(optLoc, opts[key]); |
||||
}); |
||||
return opts; |
||||
} |
||||
|
||||
function throwUnknownError(loc) { |
||||
const key = loc.name; |
||||
|
||||
if (_removed.default[key]) { |
||||
const { |
||||
message, |
||||
version = 5 |
||||
} = _removed.default[key]; |
||||
throw new Error(`Using removed Babel ${version} option: ${(0, _optionAssertions.msg)(loc)} - ${message}`); |
||||
} else { |
||||
const unknownOptErr = new Error(`Unknown option: ${(0, _optionAssertions.msg)(loc)}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`); |
||||
unknownOptErr.code = "BABEL_UNKNOWN_OPTION"; |
||||
throw unknownOptErr; |
||||
} |
||||
} |
||||
|
||||
function has(obj, key) { |
||||
return Object.prototype.hasOwnProperty.call(obj, key); |
||||
} |
||||
|
||||
function assertNoDuplicateSourcemap(opts) { |
||||
if (has(opts, "sourceMap") && has(opts, "sourceMaps")) { |
||||
throw new Error(".sourceMap is an alias for .sourceMaps, cannot use both"); |
||||
} |
||||
} |
||||
|
||||
function assertEnvSet(loc, value) { |
||||
if (loc.parent.type === "env") { |
||||
throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside of another .env block`); |
||||
} |
||||
|
||||
const parent = loc.parent; |
||||
const obj = (0, _optionAssertions.assertObject)(loc, value); |
||||
|
||||
if (obj) { |
||||
for (const envName of Object.keys(obj)) { |
||||
const env = (0, _optionAssertions.assertObject)((0, _optionAssertions.access)(loc, envName), obj[envName]); |
||||
if (!env) continue; |
||||
const envLoc = { |
||||
type: "env", |
||||
name: envName, |
||||
parent |
||||
}; |
||||
validateNested(envLoc, env); |
||||
} |
||||
} |
||||
|
||||
return obj; |
||||
} |
||||
|
||||
function assertOverridesList(loc, value) { |
||||
if (loc.parent.type === "env") { |
||||
throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside an .env block`); |
||||
} |
||||
|
||||
if (loc.parent.type === "overrides") { |
||||
throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside an .overrides block`); |
||||
} |
||||
|
||||
const parent = loc.parent; |
||||
const arr = (0, _optionAssertions.assertArray)(loc, value); |
||||
|
||||
if (arr) { |
||||
for (const [index, item] of arr.entries()) { |
||||
const objLoc = (0, _optionAssertions.access)(loc, index); |
||||
const env = (0, _optionAssertions.assertObject)(objLoc, item); |
||||
if (!env) throw new Error(`${(0, _optionAssertions.msg)(objLoc)} must be an object`); |
||||
const overridesLoc = { |
||||
type: "overrides", |
||||
index, |
||||
parent |
||||
}; |
||||
validateNested(overridesLoc, env); |
||||
} |
||||
} |
||||
|
||||
return arr; |
||||
} |
||||
|
||||
function checkNoUnwrappedItemOptionPairs(items, index, type, e) { |
||||
if (index === 0) return; |
||||
const lastItem = items[index - 1]; |
||||
const thisItem = items[index]; |
||||
|
||||
if (lastItem.file && lastItem.options === undefined && typeof thisItem.value === "object") { |
||||
e.message += `\n- Maybe you meant to use\n` + `"${type}s": [\n ["${lastItem.file.request}", ${JSON.stringify(thisItem.value, undefined, 2)}]\n]\n` + `To be a valid ${type}, its name and options should be wrapped in a pair of brackets`; |
||||
} |
||||
} |
@ -0,0 +1,71 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.validatePluginObject = validatePluginObject; |
||||
|
||||
var _optionAssertions = require("./option-assertions"); |
||||
|
||||
const VALIDATORS = { |
||||
name: _optionAssertions.assertString, |
||||
manipulateOptions: _optionAssertions.assertFunction, |
||||
pre: _optionAssertions.assertFunction, |
||||
post: _optionAssertions.assertFunction, |
||||
inherits: _optionAssertions.assertFunction, |
||||
visitor: assertVisitorMap, |
||||
parserOverride: _optionAssertions.assertFunction, |
||||
generatorOverride: _optionAssertions.assertFunction |
||||
}; |
||||
|
||||
function assertVisitorMap(loc, value) { |
||||
const obj = (0, _optionAssertions.assertObject)(loc, value); |
||||
|
||||
if (obj) { |
||||
Object.keys(obj).forEach(prop => assertVisitorHandler(prop, obj[prop])); |
||||
|
||||
if (obj.enter || obj.exit) { |
||||
throw new Error(`${(0, _optionAssertions.msg)(loc)} cannot contain catch-all "enter" or "exit" handlers. Please target individual nodes.`); |
||||
} |
||||
} |
||||
|
||||
return obj; |
||||
} |
||||
|
||||
function assertVisitorHandler(key, value) { |
||||
if (value && typeof value === "object") { |
||||
Object.keys(value).forEach(handler => { |
||||
if (handler !== "enter" && handler !== "exit") { |
||||
throw new Error(`.visitor["${key}"] may only have .enter and/or .exit handlers.`); |
||||
} |
||||
}); |
||||
} else if (typeof value !== "function") { |
||||
throw new Error(`.visitor["${key}"] must be a function`); |
||||
} |
||||
|
||||
return value; |
||||
} |
||||
|
||||
function validatePluginObject(obj) { |
||||
const rootPath = { |
||||
type: "root", |
||||
source: "plugin" |
||||
}; |
||||
Object.keys(obj).forEach(key => { |
||||
const validator = VALIDATORS[key]; |
||||
|
||||
if (validator) { |
||||
const optLoc = { |
||||
type: "option", |
||||
name: key, |
||||
parent: rootPath |
||||
}; |
||||
validator(optLoc, obj[key]); |
||||
} else { |
||||
const invalidPluginPropertyError = new Error(`.${key} is not a valid Plugin property`); |
||||
invalidPluginPropertyError.code = "BABEL_UNKNOWN_PLUGIN_PROPERTY"; |
||||
throw invalidPluginPropertyError; |
||||
} |
||||
}); |
||||
return obj; |
||||
} |
@ -0,0 +1,66 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.default = void 0; |
||||
var _default = { |
||||
auxiliaryComment: { |
||||
message: "Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`" |
||||
}, |
||||
blacklist: { |
||||
message: "Put the specific transforms you want in the `plugins` option" |
||||
}, |
||||
breakConfig: { |
||||
message: "This is not a necessary option in Babel 6" |
||||
}, |
||||
experimental: { |
||||
message: "Put the specific transforms you want in the `plugins` option" |
||||
}, |
||||
externalHelpers: { |
||||
message: "Use the `external-helpers` plugin instead. " + "Check out http://babeljs.io/docs/plugins/external-helpers/" |
||||
}, |
||||
extra: { |
||||
message: "" |
||||
}, |
||||
jsxPragma: { |
||||
message: "use the `pragma` option in the `react-jsx` plugin. " + "Check out http://babeljs.io/docs/plugins/transform-react-jsx/" |
||||
}, |
||||
loose: { |
||||
message: "Specify the `loose` option for the relevant plugin you are using " + "or use a preset that sets the option." |
||||
}, |
||||
metadataUsedHelpers: { |
||||
message: "Not required anymore as this is enabled by default" |
||||
}, |
||||
modules: { |
||||
message: "Use the corresponding module transform plugin in the `plugins` option. " + "Check out http://babeljs.io/docs/plugins/#modules" |
||||
}, |
||||
nonStandard: { |
||||
message: "Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. " + "Also check out the react preset http://babeljs.io/docs/plugins/preset-react/" |
||||
}, |
||||
optional: { |
||||
message: "Put the specific transforms you want in the `plugins` option" |
||||
}, |
||||
sourceMapName: { |
||||
message: "The `sourceMapName` option has been removed because it makes more sense for the " + "tooling that calls Babel to assign `map.file` themselves." |
||||
}, |
||||
stage: { |
||||
message: "Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets" |
||||
}, |
||||
whitelist: { |
||||
message: "Put the specific transforms you want in the `plugins` option" |
||||
}, |
||||
resolveModuleSource: { |
||||
version: 6, |
||||
message: "Use `babel-plugin-module-resolver@3`'s 'resolvePath' options" |
||||
}, |
||||
metadata: { |
||||
version: 6, |
||||
message: "Generated plugin metadata is always included in the output result" |
||||
}, |
||||
sourceMapTarget: { |
||||
version: 6, |
||||
message: "The `sourceMapTarget` option has been removed because it makes more sense for the tooling " + "that calls Babel to assign `map.file` themselves." |
||||
} |
||||
}; |
||||
exports.default = _default; |
@ -0,0 +1,94 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.forwardAsync = forwardAsync; |
||||
exports.isAsync = void 0; |
||||
exports.isThenable = isThenable; |
||||
exports.maybeAsync = maybeAsync; |
||||
exports.waitFor = exports.onFirstPause = void 0; |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
const id = x => x; |
||||
|
||||
const runGenerator = _gensync()(function* (item) { |
||||
return yield* item; |
||||
}); |
||||
|
||||
const isAsync = _gensync()({ |
||||
sync: () => false, |
||||
errback: cb => cb(null, true) |
||||
}); |
||||
|
||||
exports.isAsync = isAsync; |
||||
|
||||
function maybeAsync(fn, message) { |
||||
return _gensync()({ |
||||
sync(...args) { |
||||
const result = fn.apply(this, args); |
||||
if (isThenable(result)) throw new Error(message); |
||||
return result; |
||||
}, |
||||
|
||||
async(...args) { |
||||
return Promise.resolve(fn.apply(this, args)); |
||||
} |
||||
|
||||
}); |
||||
} |
||||
|
||||
const withKind = _gensync()({ |
||||
sync: cb => cb("sync"), |
||||
async: cb => cb("async") |
||||
}); |
||||
|
||||
function forwardAsync(action, cb) { |
||||
const g = _gensync()(action); |
||||
|
||||
return withKind(kind => { |
||||
const adapted = g[kind]; |
||||
return cb(adapted); |
||||
}); |
||||
} |
||||
|
||||
const onFirstPause = _gensync()({ |
||||
name: "onFirstPause", |
||||
arity: 2, |
||||
sync: function (item) { |
||||
return runGenerator.sync(item); |
||||
}, |
||||
errback: function (item, firstPause, cb) { |
||||
let completed = false; |
||||
runGenerator.errback(item, (err, value) => { |
||||
completed = true; |
||||
cb(err, value); |
||||
}); |
||||
|
||||
if (!completed) { |
||||
firstPause(); |
||||
} |
||||
} |
||||
}); |
||||
|
||||
exports.onFirstPause = onFirstPause; |
||||
|
||||
const waitFor = _gensync()({ |
||||
sync: id, |
||||
async: id |
||||
}); |
||||
|
||||
exports.waitFor = waitFor; |
||||
|
||||
function isThenable(val) { |
||||
return !!val && (typeof val === "object" || typeof val === "function") && !!val.then && typeof val.then === "function"; |
||||
} |
@ -0,0 +1,40 @@ |
||||
"use strict"; |
||||
|
||||
Object.defineProperty(exports, "__esModule", { |
||||
value: true |
||||
}); |
||||
exports.stat = exports.readFile = void 0; |
||||
|
||||
function _fs() { |
||||
const data = require("fs"); |
||||
|
||||
_fs = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
function _gensync() { |
||||
const data = require("gensync"); |
||||
|
||||
_gensync = function () { |
||||
return data; |
||||
}; |
||||
|
||||
return data; |
||||
} |
||||
|
||||
const readFile = _gensync()({ |
||||
sync: _fs().readFileSync, |
||||
errback: _fs().readFile |
||||
}); |
||||
|
||||
exports.readFile = readFile; |
||||
|
||||
const stat = _gensync()({ |
||||
sync: _fs().statSync, |
||||
errback: _fs().stat |
||||
}); |
||||
|
||||
exports.stat = stat; |