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; |